OSDN Git Service

Fix a legit crash that the monkey found.
authorPatrick Scott <phanna@android.com>
Wed, 27 Jan 2010 21:39:11 +0000 (16:39 -0500)
committerPatrick Scott <phanna@android.com>
Thu, 28 Jan 2010 14:11:12 +0000 (09:11 -0500)
If the device is running low on memory, the Browser may free background tabs.
removeTab could potentially remove a tab that has a lower index than the current
tab. That would cause mCurrentTab to point to the incorrect tab. Update
mCurrentTab if that is the case so it is pointing to the correct index.

Bug: 2371002

src/com/android/browser/TabControl.java

index 5b5493f..5e64a4b 100644 (file)
@@ -192,18 +192,26 @@ class TabControl {
             return false;
         }
 
-        // Only remove the tab if it is the current one.
-        if (getCurrentTab() == t) {
+        // Grab the current tab before modifying the list.
+        Tab current = getCurrentTab();
+
+        // Remove t from our list of tabs.
+        mTabs.remove(t);
+
+        // Put the tab in the background only if it is the current one.
+        if (current == t) {
             t.putInBackground();
             mCurrentTab = -1;
+        } else {
+            // If a tab that is earlier in the list gets removed, the current
+            // index no longer points to the correct tab.
+            mCurrentTab = getTabIndex(current);
         }
 
         // destroy the tab
         t.destroy();
         // clear it's references to parent and children
         t.removeFromTree();
-        // Remove it from our list of tabs.
-        mTabs.remove(t);
 
         // The tab indices have shifted, update all the saved state so we point
         // to the correct index.