Prevent crashing in CrashRecoveryHandler
Catch Throwable instead of Exception
Don't save screenshots for crash recovery
Change-Id: I22c36dc644ae597c609880d2ced79436918d83a6
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 963f29f..dbcae2e 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -115,7 +115,7 @@
protected void onNewIntent(Intent intent) {
if (ACTION_RESTART.equals(intent.getAction())) {
Bundle outState = new Bundle();
- mController.onSaveInstanceState(outState);
+ mController.onSaveInstanceState(outState, true);
finish();
getApplicationContext().startActivity(
new Intent(getApplicationContext(), BrowserActivity.class)
@@ -166,7 +166,7 @@
if (LOGV_ENABLED) {
Log.v(LOGTAG, "BrowserActivity.onSaveInstanceState: this=" + this);
}
- mController.onSaveInstanceState(outState);
+ mController.onSaveInstanceState(outState, true);
}
@Override
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index e089f5d..1f5c8f0 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -616,7 +616,7 @@
mCrashRecoveryHandler.clearState();
}
- void onSaveInstanceState(Bundle outState) {
+ void onSaveInstanceState(Bundle outState, boolean saveImages) {
// the default implementation requires each view to have an id. As the
// browser handles the state itself and it doesn't use id for the views,
// don't call the default implementation. Otherwise it will trigger the
@@ -624,7 +624,7 @@
// focused view XXX has no id".
// Save all the tabs
- mTabControl.saveState(outState);
+ mTabControl.saveState(outState, saveImages);
// Save time so that we know how old incognito tabs (if any) are.
outState.putSerializable("lastActiveDate", Calendar.getInstance());
}
diff --git a/src/com/android/browser/CrashRecoveryHandler.java b/src/com/android/browser/CrashRecoveryHandler.java
index 9e98e76..60e39da 100644
--- a/src/com/android/browser/CrashRecoveryHandler.java
+++ b/src/com/android/browser/CrashRecoveryHandler.java
@@ -22,7 +22,6 @@
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.Bundle;
-import android.os.Debug;
import android.os.Parcel;
import android.util.Log;
@@ -45,7 +44,7 @@
public void backupState() {
final Bundle state = new Bundle();
- mController.onSaveInstanceState(state);
+ mController.onSaveInstanceState(state, false);
final Context context = mController.getActivity();
new Thread() {
@Override
@@ -57,7 +56,7 @@
Context.MODE_PRIVATE);
fout.write(p.marshall());
fout.close();
- } catch (Exception e) {
+ } catch (Throwable e) {
Log.i(LOGTAG, "Failed to save persistent state", e);
} finally {
p.recycle();
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 4097334..98d209e 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -1706,6 +1706,15 @@
return mSavedState;
}
+ Bundle getSavedState(boolean saveImages) {
+ if (saveImages && mScreenshot != null) {
+ Bundle b = new Bundle(mSavedState);
+ b.putParcelable(SCREENSHOT, mScreenshot);
+ return b;
+ }
+ return mSavedState;
+ }
+
/**
* Set the saved state.
*/
@@ -1739,9 +1748,6 @@
if (mParent != null) {
mSavedState.putLong(PARENTTAB, mParent.mId);
}
- if (mScreenshot != null) {
- mSavedState.putParcelable(SCREENSHOT, mScreenshot);
- }
mSavedState.putBoolean(USERAGENT,
mSettings.hasDesktopUseragent(getWebView()));
return true;
diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java
index 1fe9053..0aaf3d6 100644
--- a/src/com/android/browser/TabControl.java
+++ b/src/com/android/browser/TabControl.java
@@ -272,15 +272,17 @@
* position sorted array of tab ids
* for each tab id, save the tab state
* @param outState
+ * @param saveImages
*/
- void saveState(Bundle outState) {
+ void saveState(Bundle outState, boolean saveImages) {
final int numTabs = getTabCount();
long[] ids = new long[numTabs];
int i = 0;
for (Tab tab : mTabs) {
ids[i++] = tab.getId();
if (tab.saveState()) {
- outState.putBundle(Long.toString(tab.getId()), tab.getSavedState());
+ outState.putBundle(Long.toString(tab.getId()),
+ tab.getSavedState(saveImages));
}
}
outState.putLongArray(POSITIONS, ids);