Index: chrome/android/java/src/org/chromium/chrome/browser/ntp/NativePageFactory.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NativePageFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NativePageFactory.java |
index a851b6489524ee3b8da793dbb55b4d140b28187c..1974177c15594a6f2e92f89b80162911e0754f43 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NativePageFactory.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NativePageFactory.java |
@@ -11,6 +11,8 @@ |
import org.chromium.chrome.browser.ChromeActivity; |
import org.chromium.chrome.browser.ChromeFeatureList; |
import org.chromium.chrome.browser.NativePage; |
+import org.chromium.chrome.browser.NativePageHost; |
+import org.chromium.chrome.browser.TabLoadStatus; |
import org.chromium.chrome.browser.UrlConstants; |
import org.chromium.chrome.browser.bookmarks.BookmarkPage; |
import org.chromium.chrome.browser.download.DownloadPage; |
@@ -18,7 +20,9 @@ |
import org.chromium.chrome.browser.history.HistoryPage; |
import org.chromium.chrome.browser.physicalweb.PhysicalWebDiagnosticsPage; |
import org.chromium.chrome.browser.tab.Tab; |
+import org.chromium.chrome.browser.tabmodel.TabModel; |
import org.chromium.chrome.browser.tabmodel.TabModelSelector; |
+import org.chromium.content_public.browser.LoadUrlParams; |
/** |
* Creates NativePage objects to show chrome-native:// URLs using the native Android view system. |
@@ -33,20 +37,20 @@ protected NativePage buildNewTabPage(ChromeActivity activity, Tab tab, |
if (tab.isIncognito()) { |
return new IncognitoNewTabPage(activity); |
} else { |
- return new NewTabPage(activity, tab, tabModelSelector); |
+ return new NewTabPage(activity, new TabShim(tab), tabModelSelector); |
} |
} |
protected NativePage buildBookmarksPage(Activity activity, Tab tab) { |
- return new BookmarkPage(activity, tab); |
+ return new BookmarkPage(activity, new TabShim(tab)); |
} |
protected NativePage buildDownloadsPage(Activity activity, Tab tab) { |
- return new DownloadPage(activity, tab); |
+ return new DownloadPage(activity, new TabShim(tab)); |
} |
protected NativePage buildHistoryPage(Activity activity, Tab tab) { |
- return new HistoryPage(activity, tab); |
+ return new HistoryPage(activity, new TabShim(tab)); |
} |
protected NativePage buildRecentTabsPage(Activity activity, Tab tab) { |
@@ -56,7 +60,7 @@ protected NativePage buildRecentTabsPage(Activity activity, Tab tab) { |
} |
protected NativePage buildPhysicalWebDiagnosticsPage(Activity activity, Tab tab) { |
- return new PhysicalWebDiagnosticsPage(activity, tab); |
+ return new PhysicalWebDiagnosticsPage(activity, new TabShim(tab)); |
} |
} |
@@ -175,4 +179,40 @@ public static boolean isNativePageUrl(String url, boolean isIncognito) { |
static void setNativePageBuilderForTesting(NativePageBuilder builder) { |
sNativePageBuilder = builder; |
} |
+ |
+ /** Simple implementation of NativePageHost backed by a {@link Tab} */ |
+ private static class TabShim implements NativePageHost { |
+ private final Tab mTab; |
+ |
+ public TabShim(Tab mTab) { |
+ this.mTab = mTab; |
+ } |
+ |
+ @Override |
+ public int loadUrl(LoadUrlParams urlParams, boolean incognito) { |
+ if (incognito && !mTab.isIncognito()) { |
+ mTab.getTabModelSelector().openNewTab(urlParams, |
+ TabModel.TabLaunchType.FROM_LONGPRESS_BACKGROUND, mTab, |
+ /* incognito = */ true); |
+ return TabLoadStatus.DEFAULT_PAGE_LOAD; |
+ } |
+ |
+ return mTab.loadUrl(urlParams); |
+ } |
+ |
+ @Override |
+ public boolean isIncognito() { |
+ return mTab.isIncognito(); |
+ } |
+ |
+ @Override |
+ public int getParentId() { |
+ return mTab.getParentId(); |
+ } |
+ |
+ @Override |
+ public Tab getActiveTab() { |
+ return mTab; |
+ } |
+ } |
} |