diff options
author | Vivek Sekhar <vsekhar@codeaurora.org> | 2015-12-10 16:00:05 -0800 |
---|---|---|
committer | jrizzoli <joey@cyanogenmoditalia.it> | 2016-01-11 22:03:21 +0100 |
commit | 0c609cd66619f21a45597275c466748c94445097 (patch) | |
tree | 91b53095d3cf5ef85cd23a9292714c4baf4b23b3 | |
parent | b826fbad74571c5b5598556f0d80eefc939c1ab0 (diff) | |
download | android_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.java | 28 | ||||
-rw-r--r-- | src/com/android/browser/TabControl.java | 2 |
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) { |