summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVivek Sekhar <vsekhar@codeaurora.org>2015-12-10 16:00:05 -0800
committerjrizzoli <joey@cyanogenmoditalia.it>2016-01-11 22:03:21 +0100
commit0c609cd66619f21a45597275c466748c94445097 (patch)
tree91b53095d3cf5ef85cd23a9292714c4baf4b23b3
parentb826fbad74571c5b5598556f0d80eefc939c1ab0 (diff)
downloadandroid_packages_apps_Gello-0c609cd66619f21a45597275c466748c94445097.tar.gz
android_packages_apps_Gello-0c609cd66619f21a45597275c466748c94445097.tar.bz2
android_packages_apps_Gello-0c609cd66619f21a45597275c466748c94445097.zip
Fix issue with memory monitor killing background tabs
When multiple tabs are opened in background memory monitor would allow only a certain number of tabs to load, other tabs would never have a chance to save instances which can be restored from WebView. We ensure to restore the background tabs from original URL. Change-Id: I940d4cd8f3b077d5351cb34ce441bd4b74ae689b
-rw-r--r--src/com/android/browser/Tab.java28
-rw-r--r--src/com/android/browser/TabControl.java2
2 files changed, 17 insertions, 13 deletions
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 5ee94778..6919300f 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -192,6 +192,9 @@ class Tab implements PictureListener {
// determine if webview is destroyed to MemoryMonitor
private boolean mWebViewDestroyedByMemoryMonitor;
+ // Tab started initally in background
+ private boolean mBackgroundTab;
+
private String mTouchIconUrl;
private Observable mFirstPixelObservable;
@@ -328,6 +331,7 @@ class Tab implements PictureListener {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
setIsDistillable(false);
+ mBackgroundTab = false;
mInPageLoad = true;
mPageFinished = false;
mFirstVisualPixelPainted = false;
@@ -1175,6 +1179,10 @@ class Tab implements PictureListener {
}
Tab(WebViewController wvcontroller, WebView w, Bundle state) {
+ this(wvcontroller, null, state, false);
+ }
+
+ Tab(WebViewController wvcontroller, WebView w, Bundle state, boolean backgroundTab) {
mWebViewController = wvcontroller;
mContext = mWebViewController.getContext();
mSettings = BrowserSettings.getInstance();
@@ -1185,6 +1193,7 @@ class Tab implements PictureListener {
mInPageLoad = false;
mInForeground = false;
mWebViewDestroyedByMemoryMonitor = false;
+ mBackgroundTab = backgroundTab;
mDownloadListener = new BrowserDownloadListener() {
public void onDownloadStart(String url, String userAgent,
@@ -1302,18 +1311,9 @@ class Tab implements PictureListener {
mMainView.setPictureListener(null);
if (w != null) {
syncCurrentState(w, null);
- } else {
- mCurrentState = new PageState(mContext, mMainView.isPrivateBrowsingEnabled());
-
- if (mWebViewDestroyedByMemoryMonitor) {
- /*
- * If tab was destroyed as a result of the MemoryMonitor
- * then we need to restore the state properties
- * from the old WebView (mMainView)
- */
- syncCurrentState(mMainView, null);
- mWebViewDestroyedByMemoryMonitor = false;
- }
+ } else if(!mWebViewDestroyedByMemoryMonitor) {
+ mCurrentState = new PageState(mContext,
+ mMainView.isPrivateBrowsingEnabled());
}
}
// set the new one
@@ -1340,7 +1340,11 @@ class Tab implements PictureListener {
Log.w(LOGTAG, "Failed to restore WebView state!");
loadUrl(mCurrentState.mOriginalUrl, null);
}
+ mWebViewDestroyedByMemoryMonitor = false;
mSavedState = null;
+ } else if(restore && mBackgroundTab && mWebViewDestroyedByMemoryMonitor) {
+ loadUrl(mCurrentState.mOriginalUrl, null);
+ mWebViewDestroyedByMemoryMonitor = false;
}
}
}
diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java
index 81da6966..91d2bca9 100644
--- a/src/com/android/browser/TabControl.java
+++ b/src/com/android/browser/TabControl.java
@@ -249,7 +249,7 @@ class TabControl {
final WebView w = createNewWebView(privateBrowsing, backgroundTab);
// Create a new tab and add it to the tab list
- Tab t = new Tab(mController, w, state);
+ Tab t = new Tab(mController, w, state, backgroundTab);
mTabs.add(t);
mTabCountObservable.set(mTabs.size());
if (privateBrowsing) {