Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelBase.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelBase.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelBase.java |
| index 9a144443c3aeefc1974a1fef69d5bb4acb3d5972..275cf1b892ac50b715471a9ae145490536ddf044 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelBase.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelBase.java |
| @@ -35,7 +35,10 @@ public abstract class TabModelBase implements TabModel { |
| protected final TabModelDelegate mModelDelegate; |
| - private final ObserverList<TabModelObserver> mObservers; |
| + /** |
| + * List of Observers monitoring this TabModel. |
| + */ |
| + protected final ObserverList<TabModelObserver> mObservers; |
| // Undo State Tracking ------------------------------------------------------------------------- |
| @@ -53,17 +56,38 @@ public abstract class TabModelBase implements TabModel { |
| private int mIndex = INVALID_TAB_INDEX; |
| /** Native Tab pointer which will be set by nativeInit(). */ |
| - private long mNativeTabModelImpl = 0; |
| + protected long mNativeTabModelImpl = 0; |
| + /** |
| + * Constructs the TabModelBase. If an orderController and modelDelegate are not supplied, |
| + * the native side TabModel is not initialized. |
| + * @param incognito Whether or not the TabModel is for Incognito mode. |
| + * @param orderController Controls the ordering of the Tabs. |
| + * @param modelDelegate Delgates calls to the TabModel. |
| + */ |
| public TabModelBase(boolean incognito, TabModelOrderController orderController, |
| TabModelDelegate modelDelegate) { |
| mIsIncognito = incognito; |
| - mNativeTabModelImpl = nativeInit(incognito); |
| - mOrderController = orderController; |
| - mModelDelegate = modelDelegate; |
| + |
| + if (orderController != null && modelDelegate != null) { |
| + initializeNativeTabModel(); |
| + mOrderController = orderController; |
| + mModelDelegate = modelDelegate; |
| + } else { |
| + mOrderController = null; |
| + mModelDelegate = null; |
| + } |
| + |
| mObservers = new ObserverList<TabModelObserver>(); |
| } |
| + /** |
| + * Initialize the native-side TabModelBase. |
| + */ |
| + protected void initializeNativeTabModel() { |
| + mNativeTabModelImpl = nativeInit(mIsIncognito); |
|
David Trainor- moved to gerrit
2014/10/02 00:00:39
Even if this works, it might just be because the v
|
| + } |
| + |
| @Override |
| public Profile getProfile() { |
| return nativeGetProfileAndroid(mNativeTabModelImpl); |
| @@ -111,9 +135,10 @@ public abstract class TabModelBase implements TabModel { |
| for (TabModelObserver obs : mObservers) obs.willAddTab(tab, type); |
| - boolean selectTab = mOrderController.willOpenInForeground(type, mIsIncognito); |
| - |
| - index = mOrderController.determineInsertionIndex(type, index, tab); |
| + boolean selectTab = mOrderController == null |
| + ? false : mOrderController.willOpenInForeground(type, mIsIncognito); |
| + index = mOrderController == null |
| + ? mTabs.size() : mOrderController.determineInsertionIndex(type, index, tab); |
| assert index <= mTabs.size(); |
| assert tab.isIncognito() == mIsIncognito; |
| @@ -631,7 +656,7 @@ public abstract class TabModelBase implements TabModel { |
| protected abstract Tab createNewTabForDevTools(String url); |
| @CalledByNative |
| - private boolean isSessionRestoreInProgress() { |
| + protected boolean isSessionRestoreInProgress() { |
| return mModelDelegate.isSessionRestoreInProgress(); |
| } |