diff --git a/android/feed/core/java/src/org/chromium/chrome/browser/feed/BraveFeedSurfaceCoordinator.java b/android/feed/core/java/src/org/chromium/chrome/browser/feed/BraveFeedSurfaceCoordinator.java index 558ba67db52..b47dffbaab7 100644 --- a/android/feed/core/java/src/org/chromium/chrome/browser/feed/BraveFeedSurfaceCoordinator.java +++ b/android/feed/core/java/src/org/chromium/chrome/browser/feed/BraveFeedSurfaceCoordinator.java @@ -17,6 +17,7 @@ import org.chromium.base.supplier.Supplier; import org.chromium.chrome.R; import org.chromium.chrome.browser.feed.shared.FeedSurfaceDelegate; import org.chromium.chrome.browser.native_page.NativePageNavigationDelegate; +import org.chromium.chrome.browser.ntp.NewTabPageLaunchOrigin; import org.chromium.chrome.browser.ntp.ScrollableContainerDelegate; import org.chromium.chrome.browser.ntp.SnapScrollHelper; import org.chromium.chrome.browser.ntp.snippets.SectionHeaderView; @@ -43,11 +44,11 @@ public class BraveFeedSurfaceCoordinator extends FeedSurfaceCoordinator { boolean isPlaceholderShownInitially, BottomSheetController bottomSheetController, Supplier shareDelegateSupplier, @Nullable ScrollableContainerDelegate externalScrollableContainerDelegate, - TabModelSelector tabModelSelector) { + TabModelSelector tabModelSelector, @NewTabPageLaunchOrigin int launchOrigin) { super(activity, snackbarManager, windowAndroid, snapScrollHelper, ntpHeader, sectionHeaderView, showDarkBackground, delegate, pageNavigationDelegate, profile, isPlaceholderShownInitially, bottomSheetController, shareDelegateSupplier, - externalScrollableContainerDelegate, tabModelSelector); + externalScrollableContainerDelegate, tabModelSelector, launchOrigin); } @Override diff --git a/android/java/apk_for_test.flags b/android/java/apk_for_test.flags index 76ad8e00ea4..300a7ccc651 100644 --- a/android/java/apk_for_test.flags +++ b/android/java/apk_for_test.flags @@ -49,10 +49,15 @@ } -keep class org.chromium.chrome.browser.ntp.NewTabPage { + public (...); *** mNewTabPageLayout; *** mFeedSurfaceProvider; } +-keep class org.chromium.chrome.browser.ntp.BraveNewTabPage { + public (...); +} + -keep class org.chromium.chrome.browser.omnibox.suggestions.editurl.EditUrlSuggestionProcessor { *** mHasClearedOmniboxForFocus; } diff --git a/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPage.java b/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPage.java index 9cbbe1e22b1..4e2097debdd 100644 --- a/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPage.java +++ b/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPage.java @@ -35,11 +35,12 @@ public class BraveNewTabPage extends NewTabPage { Supplier activityTabProvider, SnackbarManager snackbarManager, ActivityLifecycleDispatcher lifecycleDispatcher, TabModelSelector tabModelSelector, boolean isTablet, NewTabPageUma uma, boolean isInNightMode, - NativePageHost nativePageHost, Tab tab, BottomSheetController bottomSheetController, + NativePageHost nativePageHost, Tab tab, String url, + BottomSheetController bottomSheetController, ObservableSupplier shareDelegateSupplier, WindowAndroid windowAndroid) { super(activity, browserControlsStateProvider, activityTabProvider, snackbarManager, lifecycleDispatcher, tabModelSelector, isTablet, uma, isInNightMode, nativePageHost, - tab, bottomSheetController, shareDelegateSupplier, windowAndroid); + tab, url, bottomSheetController, shareDelegateSupplier, windowAndroid); assert mNewTabPageLayout instanceof BraveNewTabPageLayout; if (mNewTabPageLayout instanceof BraveNewTabPageLayout) { @@ -52,9 +53,9 @@ public class BraveNewTabPage extends NewTabPage { SnackbarManager snackbarManager, NewTabPageUma uma, boolean isInNightMode, BottomSheetController bottomSheetController, ObservableSupplier shareDelegateSupplier, - TabModelSelector tabModelSelector) { + TabModelSelector tabModelSelector, String url) { super.initializeMainView(activity, windowAndroid, snackbarManager, uma, isInNightMode, - bottomSheetController, shareDelegateSupplier, tabModelSelector); + bottomSheetController, shareDelegateSupplier, tabModelSelector, url); // Override surface provider Profile profile = Profile.fromWebContents(mTab.getWebContents()); @@ -65,6 +66,6 @@ public class BraveNewTabPage extends NewTabPage { mNewTabPageManager.getNavigationDelegate(), profile, /* isPlaceholderShownInitially= */ false, bottomSheetController, shareDelegateSupplier, /* externalScrollableContainerDelegate= */ null, - tabModelSelector); + tabModelSelector, NewTabPageUtils.decodeOriginFromNtpUrl(url)); } } diff --git a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java index 1927fa7711f..3ffb1524694 100644 --- a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java +++ b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java @@ -25,6 +25,7 @@ import org.chromium.base.supplier.OneshotSupplier; import org.chromium.base.supplier.Supplier; import org.chromium.chrome.browser.app.ChromeActivity; import org.chromium.chrome.browser.browser_controls.BrowserControlsSizer; +import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; import org.chromium.chrome.browser.compositor.CompositorViewHolder; import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; import org.chromium.chrome.browser.feed.webfeed.WebFeedBridge; @@ -35,6 +36,7 @@ import org.chromium.chrome.browser.identity_disc.IdentityDiscController; import org.chromium.chrome.browser.init.StartupTabPreloader; import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher; import org.chromium.chrome.browser.multiwindow.MultiWindowModeStateDispatcher; +import org.chromium.chrome.browser.ntp.NewTabPageUma; import org.chromium.chrome.browser.omnibox.LocationBarDataProvider; import org.chromium.chrome.browser.omnibox.SearchEngineLogoUtils; import org.chromium.chrome.browser.omnibox.UrlBarEditingTextStateProvider; @@ -52,6 +54,7 @@ import org.chromium.chrome.browser.toolbar.top.ToolbarControlContainer; import org.chromium.chrome.browser.ui.TabObscuringHandler; import org.chromium.chrome.browser.ui.appmenu.AppMenuDelegate; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; +import org.chromium.chrome.browser.ui.native_page.NativePageHost; import org.chromium.chrome.browser.ui.system.StatusBarColorController; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; @@ -84,6 +87,7 @@ public class BytecodeTest { Assert.assertTrue(classExists("org/chromium/chrome/browser/ntp/NewTabPageLayout")); Assert.assertTrue(classExists("org/chromium/chrome/browser/feed/FeedSurfaceCoordinator")); Assert.assertTrue(classExists("org/chromium/chrome/browser/ntp/NewTabPage")); + Assert.assertTrue(classExists("org/chromium/chrome/browser/ntp/BraveNewTabPage")); Assert.assertTrue(classExists( "org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionProcessor")); Assert.assertTrue( @@ -336,6 +340,12 @@ public class BytecodeTest { LocationBarDataProvider.class, PermissionDialogController.class, SearchEngineLogoUtils.class, OneshotSupplier.class, Supplier.class, PageInfoIPHController.class, WindowAndroid.class)); + Assert.assertTrue(constructorsMatch("org/chromium/chrome/browser/ntp/NewTabPage", + "org/chromium/chrome/browser/ntp/BraveNewTabPage", Activity.class, + BrowserControlsStateProvider.class, Supplier.class, SnackbarManager.class, + ActivityLifecycleDispatcher.class, TabModelSelector.class, boolean.class, + NewTabPageUma.class, boolean.class, NativePageHost.class, Tab.class, String.class, + BottomSheetController.class, ObservableSupplier.class, WindowAndroid.class)); } @Test diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveNewTabPageClassAdapter.java b/build/android/bytecode/java/org/brave/bytecode/BraveNewTabPageClassAdapter.java index 5b55fbc4f9d..45cfc9748e3 100644 --- a/build/android/bytecode/java/org/brave/bytecode/BraveNewTabPageClassAdapter.java +++ b/build/android/bytecode/java/org/brave/bytecode/BraveNewTabPageClassAdapter.java @@ -14,6 +14,8 @@ public class BraveNewTabPageClassAdapter extends BraveClassVisitor { public BraveNewTabPageClassAdapter(ClassVisitor visitor) { super(visitor); + redirectConstructor(sNewTabPageClassName, sBraveNewTabPageClassName); + deleteField(sBraveNewTabPageClassName, "mNewTabPageLayout"); makeProtectedField(sNewTabPageClassName, "mNewTabPageLayout"); diff --git a/patches/chrome-android-java-src-org-chromium-chrome-browser-native_page-NativePageFactory.java.patch b/patches/chrome-android-java-src-org-chromium-chrome-browser-native_page-NativePageFactory.java.patch deleted file mode 100644 index c163f076057..00000000000 --- a/patches/chrome-android-java-src-org-chromium-chrome-browser-native_page-NativePageFactory.java.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java -index 63ec16738870f37b4ecc9128155743d2fdb651aa..5f308a6034691dc9d6fca0ee5895403f7ec256bc 100644 ---- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java -@@ -90,7 +90,7 @@ public class NativePageFactory { - NativePageHost nativePageHost = new TabShim(tab, mActivity); - if (tab.isIncognito()) return new IncognitoNewTabPage(mActivity, nativePageHost); - -- return new NewTabPage(mActivity, mActivity.getBrowserControlsManager(), -+ return new org.chromium.chrome.browser.ntp.BraveNewTabPage(mActivity, mActivity.getBrowserControlsManager(), - mActivity.getActivityTabProvider(), mActivity.getSnackbarManager(), - mActivity.getLifecycleDispatcher(), mActivity.getTabModelSelector(), - mActivity.isTablet(), mUma.get(), ColorUtils.inNightMode(mActivity), diff --git a/test/BUILD.gn b/test/BUILD.gn index 447bbd3f9f2..6e0d951a270 100644 --- a/test/BUILD.gn +++ b/test/BUILD.gn @@ -1088,6 +1088,7 @@ if (is_android) { "//chrome/browser/tab:java", "//chrome/browser/tabmodel:java", "//chrome/browser/ui/android/appmenu:java", + "//chrome/browser/ui/android/native_page:java", "//chrome/browser/ui/android/theme:java", "//chrome/browser/ui/android/toolbar:java", "//chrome/browser/ui/messages/android:java",