summaryrefslogtreecommitdiffstats
path: root/src/com/android
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android')
-rw-r--r--src/com/android/browser/Controller.java1
-rw-r--r--src/com/android/browser/Tab.java9
-rw-r--r--src/com/android/browser/TabControl.java6
3 files changed, 16 insertions, 0 deletions
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index ff1ad0ea9..67c42ddfd 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -2168,6 +2168,7 @@ public class Controller
}
}
Tab t = tabControl.getTab();
+ t.refreshIdAfterPreload();
mTabControl.addPreloadedTab(t);
addTab(t);
setActiveTab(t);
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 69213cd56..3b283cc2d 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -1435,6 +1435,15 @@ class Tab implements PictureListener {
};
}
+ /**
+ * This is used to get a new ID when the tab has been preloaded, before it is displayed and
+ * added to TabControl. Preloaded tabs can be created before restoreInstanceState, leading
+ * to overlapping IDs between the preloaded and restored tabs.
+ */
+ public void refreshIdAfterPreload() {
+ mId = TabControl.getNextId();
+ }
+
public void updateShouldCaptureThumbnails() {
if (mWebViewController.shouldCaptureThumbnails()) {
synchronized (Tab.this) {
diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java
index 932a81169..0668b7445 100644
--- a/src/com/android/browser/TabControl.java
+++ b/src/com/android/browser/TabControl.java
@@ -170,6 +170,12 @@ class TabControl {
}
void addPreloadedTab(Tab tab) {
+ for (Tab current : mTabs) {
+ if (current != null && current.getId() == tab.getId()) {
+ throw new IllegalStateException("Tab with id " + tab.getId() + " already exists: "
+ + current.toString());
+ }
+ }
mTabs.add(tab);
tab.setController(mController);
mController.onSetWebView(tab, tab.getWebView());