Index: chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorTabObserver.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorTabObserver.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorTabObserver.java |
index b6f49fe6f43cbaf4b687fc2ac067398516ba903c..0aafe976905c0a51526e10775fefab865e3fd91b 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorTabObserver.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorTabObserver.java |
@@ -16,9 +16,7 @@ import java.util.List; |
public class TabModelSelectorTabObserver extends EmptyTabObserver { |
private final TabModelSelector mTabModelSelector; |
- private final TabModelObserver mTabModelObserver; |
- |
- private TabModelSelectorObserver mSelectorObserver; |
+ private final TabModelSelectorTabModelObserver mTabModelObserver; |
/** |
* Constructs an observer that should be notified of tabs changes for all tabs owned |
@@ -33,7 +31,7 @@ public class TabModelSelectorTabObserver extends EmptyTabObserver { |
public TabModelSelectorTabObserver(TabModelSelector selector) { |
mTabModelSelector = selector; |
- mTabModelObserver = new EmptyTabModelObserver() { |
+ mTabModelObserver = new TabModelSelectorTabModelObserver(selector) { |
@Override |
public void didAddTab(Tab tab, TabLaunchType type) { |
// This observer is automatically removed by tab when it is destroyed. |
@@ -44,50 +42,27 @@ public class TabModelSelectorTabObserver extends EmptyTabObserver { |
public void tabRemoved(Tab tab) { |
tab.removeObserver(TabModelSelectorTabObserver.this); |
} |
- }; |
- List<TabModel> tabModels = selector.getModels(); |
- if (tabModels.isEmpty()) { |
- mSelectorObserver = new EmptyTabModelSelectorObserver() { |
- @Override |
- public void onNewTabCreated(Tab tab) { |
- assert false : "onChange should have happened and unregistered this listener."; |
- } |
- |
- @Override |
- public void onChange() { |
- mTabModelSelector.removeObserver(this); |
- mSelectorObserver = null; |
- registerModelObservers(); |
+ @Override |
+ protected void onRegistrationComplete() { |
+ List<TabModel> tabModels = mTabModelSelector.getModels(); |
+ for (int i = 0; i < tabModels.size(); i++) { |
+ TabModel tabModel = tabModels.get(i); |
+ TabList comprehensiveTabList = tabModel.getComprehensiveModel(); |
+ for (int j = 0; j < comprehensiveTabList.getCount(); j++) { |
+ comprehensiveTabList.getTabAt(j).addObserver( |
+ TabModelSelectorTabObserver.this); |
+ } |
} |
- }; |
- mTabModelSelector.addObserver(mSelectorObserver); |
- } else { |
- registerModelObservers(); |
- } |
- } |
- |
- private void registerModelObservers() { |
- List<TabModel> tabModels = mTabModelSelector.getModels(); |
- for (int i = 0; i < tabModels.size(); i++) { |
- TabModel tabModel = tabModels.get(i); |
- tabModel.addObserver(mTabModelObserver); |
- |
- TabList comprehensiveTabList = tabModel.getComprehensiveModel(); |
- for (int j = 0; j < comprehensiveTabList.getCount(); j++) { |
- comprehensiveTabList.getTabAt(j).addObserver(this); |
} |
- } |
+ }; |
} |
/** |
* Destroys the observer and removes itself as a listener for Tab updates. |
*/ |
public void destroy() { |
- if (mSelectorObserver != null) { |
- mTabModelSelector.removeObserver(mSelectorObserver); |
- mSelectorObserver = null; |
- } |
+ mTabModelObserver.destroy(); |
List<TabModel> tabModels = mTabModelSelector.getModels(); |
for (int i = 0; i < tabModels.size(); i++) { |