summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVivek Sekhar <vsekhar@codeaurora.org>2015-12-15 11:23:29 -0800
committerjrizzoli <joey@cyanogenmoditalia.it>2016-01-11 22:03:22 +0100
commit2ce13da05462ceb84f2f79604f9f5c4edb3862bc (patch)
treed3a3601808bb08651288891dec48e441fbc78123
parentcb3f72377d4dee4ae859feda9b3c613c9d36f94e (diff)
downloadandroid_packages_apps_Gello-2ce13da05462ceb84f2f79604f9f5c4edb3862bc.tar.gz
android_packages_apps_Gello-2ce13da05462ceb84f2f79604f9f5c4edb3862bc.tar.bz2
android_packages_apps_Gello-2ce13da05462ceb84f2f79604f9f5c4edb3862bc.zip
Fix issue of losing tab state
Browser makes a backup of tab state when adding visited history and page finished. When browser is being destroyed at times there could be an instance where a background load triggers to write state while the browser is already in cleanup state. This causes to write empty state that looses the previous saved status . Change-Id: I760c36e376c816302f8635c8e73d8b3871faf0b4
-rw-r--r--src/com/android/browser/Controller.java6
-rw-r--r--src/com/android/browser/CrashRecoveryHandler.java11
2 files changed, 14 insertions, 3 deletions
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 457b1c47..454b25a8 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -754,6 +754,12 @@ public class Controller
/* package */ Bundle createSaveState() {
Bundle saveState = new Bundle();
mTabControl.saveState(saveState);
+ // This method is called multiple times.Need to
+ // guard against TabControl not having any tabs
+ // during the destroy cycles which looses all the
+ // existing saved information.
+ if (saveState.isEmpty())
+ return null;
return saveState;
}
diff --git a/src/com/android/browser/CrashRecoveryHandler.java b/src/com/android/browser/CrashRecoveryHandler.java
index bcdf8b03..c02eb075 100644
--- a/src/com/android/browser/CrashRecoveryHandler.java
+++ b/src/com/android/browser/CrashRecoveryHandler.java
@@ -109,7 +109,9 @@ public class CrashRecoveryHandler {
}
public void backupState() {
- mForegroundHandler.postDelayed(mCreateState, BACKUP_DELAY);
+ // Only write if we are not already destroyed
+ if (mController.getTabControl() != null)
+ mForegroundHandler.postDelayed(mCreateState, BACKUP_DELAY);
}
private Runnable mCreateState = new Runnable() {
@@ -118,8 +120,11 @@ public class CrashRecoveryHandler {
public void run() {
try {
final Bundle state = mController.createSaveState();
- Message.obtain(mBackgroundHandler, MSG_WRITE_STATE, state)
- .sendToTarget();
+ // block write of null values
+ if (state != null && mController.getTabControl() != null) {
+ Message.obtain(mBackgroundHandler, MSG_WRITE_STATE, state)
+ .sendToTarget();
+ }
// Remove any queued up saves
mForegroundHandler.removeCallbacks(mCreateState);
} catch (Throwable t) {