summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorRomain Guy <romainguy@android.com>2009-12-01 14:52:19 -0800
committerRomain Guy <romainguy@android.com>2009-12-01 16:37:59 -0800
commit01d0fbfa683012623f030ec75a63e1a9fabcb916 (patch)
tree46b36adc733a96d8e3dc367bd4d2d2d4ffb95773 /core
parented90811e711065bcc82a45f4173587cd95ef6b6f (diff)
downloadframeworks_base-01d0fbfa683012623f030ec75a63e1a9fabcb916.zip
frameworks_base-01d0fbfa683012623f030ec75a63e1a9fabcb916.tar.gz
frameworks_base-01d0fbfa683012623f030ec75a63e1a9fabcb916.tar.bz2
Fix a leak in WebView.
Fixes #2296601. WebView and its related APIs are keeping static objects that hold references to Context instance. This could cause applications to leak their first Activity and all the associated resources.
Diffstat (limited to 'core')
-rw-r--r--core/java/android/webkit/BrowserFrame.java15
-rw-r--r--core/java/android/webkit/CacheManager.java2
-rw-r--r--core/java/android/webkit/CookieSyncManager.java2
-rw-r--r--core/java/android/webkit/PluginManager.java2
-rw-r--r--core/java/android/webkit/WebView.java2
5 files changed, 13 insertions, 10 deletions
diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java
index e6e26fa..1496f1b 100644
--- a/core/java/android/webkit/BrowserFrame.java
+++ b/core/java/android/webkit/BrowserFrame.java
@@ -105,10 +105,13 @@ class BrowserFrame extends Handler {
*/
public BrowserFrame(Context context, WebViewCore w, CallbackProxy proxy,
WebSettings settings, Map<String, Object> javascriptInterfaces) {
+
+ Context appContext = context.getApplicationContext();
+
// Create a global JWebCoreJavaBridge to handle timers and
// cookies in the WebCore thread.
if (sJavaBridge == null) {
- sJavaBridge = new JWebCoreJavaBridge(context);
+ sJavaBridge = new JWebCoreJavaBridge(appContext);
// set WebCore native cache size
ActivityManager am = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
@@ -118,18 +121,18 @@ class BrowserFrame extends Handler {
sJavaBridge.setCacheSize(4 * 1024 * 1024);
}
// initialize CacheManager
- CacheManager.init(context);
+ CacheManager.init(appContext);
// create CookieSyncManager with current Context
- CookieSyncManager.createInstance(context);
+ CookieSyncManager.createInstance(appContext);
// create PluginManager with current Context
- PluginManager.getInstance(context);
+ PluginManager.getInstance(appContext);
}
mJSInterfaceMap = javascriptInterfaces;
mSettings = settings;
mContext = context;
mCallbackProxy = proxy;
- mDatabase = WebViewDatabase.getInstance(context);
+ mDatabase = WebViewDatabase.getInstance(appContext);
mWebViewCore = w;
AssetManager am = context.getAssets();
@@ -496,7 +499,7 @@ class BrowserFrame extends Handler {
* @param uri A String representing the URI of the desired file.
* @param buffer The byte array to copy the data into.
* @param offset The offet into buffer to place the data.
- * @param expectSize The size that the buffer has allocated for this file.
+ * @param expectedSize The size that the buffer has allocated for this file.
* @return int The size of the given file, or zero if it fails.
*/
private int getFile(String uri, byte[] buffer, int offset,
diff --git a/core/java/android/webkit/CacheManager.java b/core/java/android/webkit/CacheManager.java
index c167414..c4e26bc 100644
--- a/core/java/android/webkit/CacheManager.java
+++ b/core/java/android/webkit/CacheManager.java
@@ -167,7 +167,7 @@ public final class CacheManager {
* @param context The application context.
*/
static void init(Context context) {
- mDataBase = WebViewDatabase.getInstance(context);
+ mDataBase = WebViewDatabase.getInstance(context.getApplicationContext());
mBaseDir = new File(context.getCacheDir(), "webviewCache");
if (createCacheDirectory() && mClearCacheOnInit) {
removeAllCacheFiles();
diff --git a/core/java/android/webkit/CookieSyncManager.java b/core/java/android/webkit/CookieSyncManager.java
index 14375d2..abe9178 100644
--- a/core/java/android/webkit/CookieSyncManager.java
+++ b/core/java/android/webkit/CookieSyncManager.java
@@ -93,7 +93,7 @@ public final class CookieSyncManager extends WebSyncManager {
public static synchronized CookieSyncManager createInstance(
Context context) {
if (sRef == null) {
- sRef = new CookieSyncManager(context);
+ sRef = new CookieSyncManager(context.getApplicationContext());
}
return sRef;
}
diff --git a/core/java/android/webkit/PluginManager.java b/core/java/android/webkit/PluginManager.java
index 88429c5..141984a 100644
--- a/core/java/android/webkit/PluginManager.java
+++ b/core/java/android/webkit/PluginManager.java
@@ -96,7 +96,7 @@ public class PluginManager {
throw new IllegalStateException(
"First call to PluginManager need a valid context.");
}
- mInstance = new PluginManager(context);
+ mInstance = new PluginManager(context.getApplicationContext());
}
return mInstance;
}
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 3207c79..add4ac7 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -732,7 +732,7 @@ public class WebView extends AbsoluteLayout
/**
* Construct a new WebView with layout parameters, a default style and a set
* of custom Javscript interfaces to be added to the WebView at initialization
- * time. This guraratees that these interfaces will be available when the JS
+ * time. This guarantees that these interfaces will be available when the JS
* context is initialized.
* @param context A Context object used to access application assets.
* @param attrs An AttributeSet passed to our parent.