Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java |
| index cc198aa1f1790ae9708524048efefd1553ca4a68..00c9dbbc268b85624fadb27d9a6cef5092ae7ef3 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java |
| @@ -10,6 +10,7 @@ import android.graphics.Bitmap; |
| import org.chromium.base.ContextUtils; |
| import org.chromium.base.ThreadUtils; |
| +import org.chromium.base.VisibleForTesting; |
| import org.chromium.chrome.browser.UrlConstants; |
| import org.chromium.chrome.browser.favicon.FaviconHelper; |
| import org.chromium.chrome.browser.favicon.FaviconHelper.FaviconImageCallback; |
| @@ -18,8 +19,7 @@ import org.chromium.chrome.browser.metrics.StartupMetrics; |
| import org.chromium.chrome.browser.ntp.ForeignSessionHelper.ForeignSession; |
| import org.chromium.chrome.browser.ntp.ForeignSessionHelper.ForeignSessionCallback; |
| import org.chromium.chrome.browser.ntp.ForeignSessionHelper.ForeignSessionTab; |
| -import org.chromium.chrome.browser.ntp.RecentlyClosedBridge.RecentlyClosedCallback; |
| -import org.chromium.chrome.browser.ntp.RecentlyClosedBridge.RecentlyClosedTab; |
| +import org.chromium.chrome.browser.ntp.RecentlyClosedTabManager.RecentlyClosedCallback; |
| import org.chromium.chrome.browser.profiles.Profile; |
| import org.chromium.chrome.browser.signin.SigninManager; |
| import org.chromium.chrome.browser.signin.SigninManager.SignInStateObserver; |
| @@ -51,6 +51,8 @@ public class RecentTabsManager implements AndroidSyncSettingsObserver, SignInSta |
| private static final String PREF_SIGNIN_PROMO_DECLINED = |
| "recent_tabs_signin_promo_declined"; |
| + private static RecentlyClosedTabManager sRecentlyClosedTabManagerForTests; |
| + |
| private final Profile mProfile; |
| private final Tab mTab; |
| private final Context mContext; |
| @@ -75,13 +77,21 @@ public class RecentTabsManager implements AndroidSyncSettingsObserver, SignInSta |
| public RecentTabsManager(Tab tab, Profile profile, Context context) { |
| mProfile = profile; |
| mTab = tab; |
| - mForeignSessionHelper = buildForeignSessionHelper(mProfile); |
| - mNewTabPagePrefs = buildNewTabPagePrefs(mProfile); |
| - mFaviconHelper = buildFaviconHelper(); |
| - mRecentlyClosedBridge = buildRecentlyClosedBridge(mProfile); |
| + mForeignSessionHelper = new ForeignSessionHelper(profile); |
| + mNewTabPagePrefs = new NewTabPagePrefs(profile); |
| + mFaviconHelper = new FaviconHelper(); |
| + mRecentlyClosedBridge = new RecentlyClosedBridge(profile); |
| mSignInManager = SigninManager.get(context); |
| mContext = context; |
| + getRecentlyClosedTabManager().setRecentlyClosedCallback(new RecentlyClosedCallback() { |
|
Bernhard Bauer
2017/01/04 11:54:16
Actually, you could probably pass the callback in
Michael van Ouwerkerk
2017/01/05 11:02:14
That wouldn't work with an injected manager, as we
|
| + @Override |
| + public void onUpdated() { |
| + updateRecentlyClosedTabs(); |
| + postUpdate(); |
| + } |
| + }); |
| + |
| updateRecentlyClosedTabs(); |
| registerForForeignSessionUpdates(); |
| updateForeignSessions(); |
| @@ -113,42 +123,10 @@ public class RecentTabsManager implements AndroidSyncSettingsObserver, SignInSta |
| mUpdatedCallback = null; |
| mNewTabPagePrefs.destroy(); |
| - mNewTabPagePrefs = null; |
| InvalidationController.get(mContext).onRecentTabsPageClosed(); |
| } |
| - /** |
| - * Returns true if destroy() has been called. |
| - */ |
| - public boolean isDestroyed() { |
| - return mIsDestroyed; |
| - } |
| - |
| - private static ForeignSessionHelper buildForeignSessionHelper(Profile profile) { |
| - return new ForeignSessionHelper(profile); |
| - } |
| - |
| - private static NewTabPagePrefs buildNewTabPagePrefs(Profile profile) { |
| - return new NewTabPagePrefs(profile); |
| - } |
| - |
| - private static FaviconHelper buildFaviconHelper() { |
| - return new FaviconHelper(); |
| - } |
| - |
| - private RecentlyClosedBridge buildRecentlyClosedBridge(Profile profile) { |
| - RecentlyClosedBridge bridge = new RecentlyClosedBridge(profile); |
| - bridge.setRecentlyClosedCallback(new RecentlyClosedCallback() { |
| - @Override |
| - public void onUpdated() { |
| - updateRecentlyClosedTabs(); |
| - postUpdate(); |
| - } |
| - }); |
| - return bridge; |
| - } |
| - |
| private void registerForForeignSessionUpdates() { |
| mForeignSessionHelper.setOnForeignSessionCallback(new ForeignSessionCallback() { |
| @Override |
| @@ -165,8 +143,8 @@ public class RecentTabsManager implements AndroidSyncSettingsObserver, SignInSta |
| } |
| private void updateRecentlyClosedTabs() { |
| - mRecentlyClosedTabs = mRecentlyClosedBridge.getRecentlyClosedTabs( |
| - RECENTLY_CLOSED_MAX_TAB_COUNT); |
| + mRecentlyClosedTabs = |
| + getRecentlyClosedTabManager().getRecentlyClosedTabs(RECENTLY_CLOSED_MAX_TAB_COUNT); |
| } |
| private void updateForeignSessions() { |
| @@ -214,7 +192,7 @@ public class RecentTabsManager implements AndroidSyncSettingsObserver, SignInSta |
| public void openRecentlyClosedTab(RecentlyClosedTab tab, int windowDisposition) { |
| if (mIsDestroyed) return; |
| NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_RECENTLY_CLOSED_ENTRY); |
| - mRecentlyClosedBridge.openRecentlyClosedTab(mTab, tab, windowDisposition); |
| + getRecentlyClosedTabManager().openRecentlyClosedTab(mTab, tab, windowDisposition); |
| } |
| /** |
| @@ -301,7 +279,7 @@ public class RecentTabsManager implements AndroidSyncSettingsObserver, SignInSta |
| return mNewTabPagePrefs.getRecentlyClosedTabsCollapsed(); |
| } |
| - /** |
| + /** |
| * Remove Foreign session to display. Note that it might reappear during the next sync if the |
| * session is not orphaned. |
| * |
| @@ -318,7 +296,7 @@ public class RecentTabsManager implements AndroidSyncSettingsObserver, SignInSta |
| */ |
| public void clearRecentlyClosedTabs() { |
| if (mIsDestroyed) return; |
| - mRecentlyClosedBridge.clearRecentlyClosedTabs(); |
| + getRecentlyClosedTabManager().clearRecentlyClosedTabs(); |
| } |
| /** |
| @@ -369,7 +347,7 @@ public class RecentTabsManager implements AndroidSyncSettingsObserver, SignInSta |
| return mNewTabPagePrefs.getSyncPromoCollapsed(); |
| } |
| - protected void postUpdate() { |
| + private void postUpdate() { |
| if (mUpdatedCallback != null) { |
| mUpdatedCallback.onUpdated(); |
| } |
| @@ -402,4 +380,14 @@ public class RecentTabsManager implements AndroidSyncSettingsObserver, SignInSta |
| public boolean isSignedIn() { |
| return ChromeSigninController.get(mContext).isSignedIn(); |
| } |
| + |
| + private RecentlyClosedTabManager getRecentlyClosedTabManager() { |
| + if (sRecentlyClosedTabManagerForTests != null) return sRecentlyClosedTabManagerForTests; |
| + return mRecentlyClosedBridge; |
| + } |
| + |
| + @VisibleForTesting |
| + public static void setRecentlyClosedTabManagerForTests(RecentlyClosedTabManager manager) { |
| + sRecentlyClosedTabManagerForTests = manager; |
| + } |
| } |