From 921b91dc141b2ce277fa3f69a4fdf77a411c19a6 Mon Sep 17 00:00:00 2001 From: samartnik Date: Mon, 13 Jul 2020 18:09:30 -0400 Subject: [PATCH] [Android] Method clobberCurrentTabWithFallbackUrl was removed from ExternalNavigationHandler Chromium change: https://chromium.googlesource.com/chromium/src/+/37b5b744bc83f630d3121b46868818bb4e848c2a Don't launch external fallback URLs when not allowed to launch external URLs Ensure that we don't launch external fallback URLs, when we've otherwise decided that we should not launch an external navigation (even if it was possible to). Also prevent auto subframe navigation from launching external fallback URLs. Bug: 1094442 --- .../BraveExternalNavigationHandler.java | 17 +++++++---- .../chromium/chrome/browser/BytecodeTest.java | 3 -- .../org/brave/bytecode/BraveClassAdapter.java | 1 - ...ExternalNavigationHandlerClassAdapter.java | 29 ------------------- build/android/bytecode/java_sources.gni | 1 - 5 files changed, 11 insertions(+), 40 deletions(-) delete mode 100644 build/android/bytecode/java/org/brave/bytecode/BraveExternalNavigationHandlerClassAdapter.java diff --git a/android/java/org/chromium/chrome/browser/externalnav/BraveExternalNavigationHandler.java b/android/java/org/chromium/chrome/browser/externalnav/BraveExternalNavigationHandler.java index 7222ca10f3b..8604ac6f6a1 100644 --- a/android/java/org/chromium/chrome/browser/externalnav/BraveExternalNavigationHandler.java +++ b/android/java/org/chromium/chrome/browser/externalnav/BraveExternalNavigationHandler.java @@ -37,13 +37,18 @@ public class BraveExternalNavigationHandler extends ExternalNavigationHandler { mBraveUphold.CompleteUpholdVerification(params, this); } - /** - * This function will be removed by ASM byte-code patching tool - * and redirected to ExternalNavigationHandler. - */ public @OverrideUrlLoadingResult int clobberCurrentTabWithFallbackUrl( String browserFallbackUrl, ExternalNavigationParams params) { - assert false; - return OverrideUrlLoadingResult.OVERRIDE_WITH_CLOBBERING_TAB; + // Below is an actual code that was used prior to deletion of + // clobberCurrentTabWithFallbackUrl introduced here + // https://chromium.googlesource.com/chromium/src/+/37b5b744bc83f630d3121b46868818bb4e848c2a + if (!params.isMainFrame()) { + return OverrideUrlLoadingResult.NO_OVERRIDE; + } + + if (params.getRedirectHandler() != null) { + params.getRedirectHandler().setShouldNotOverrideUrlLoadingOnCurrentRedirectChain(); + } + return clobberCurrentTab(browserFallbackUrl, params.getReferrerUrl()); } } \ No newline at end of file diff --git a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java index 861c248c121..2331ae22006 100644 --- a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java +++ b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java @@ -29,7 +29,6 @@ public class BytecodeTest { Assert.assertTrue(classExists("org/chromium/chrome/browser/settings/MainSettings")); Assert.assertTrue(classExists("org/chromium/chrome/browser/sync/AndroidSyncSettings")); Assert.assertTrue(classExists("org/chromium/chrome/browser/bookmarks/BookmarkBridge")); - Assert.assertTrue(classExists("org/chromium/components/external_intents/ExternalNavigationHandler")); Assert.assertTrue(classExists("org/chromium/chrome/browser/LaunchIntentDispatcher")); Assert.assertTrue(classExists("org/chromium/chrome/browser/ntp/NewTabPageLayout")); Assert.assertTrue(classExists("org/chromium/chrome/browser/feed/FeedSurfaceCoordinator")); @@ -53,8 +52,6 @@ public class BytecodeTest { Assert.assertTrue( methodExists("org/chromium/chrome/browser/bookmarks/BookmarkBridge", "extensiveBookmarkChangesEnded")); Assert.assertTrue(methodExists("org/chromium/chrome/browser/bookmarks/BookmarkBridge", "createBookmarkItem")); - Assert.assertTrue(methodExists("org/chromium/components/external_intents/ExternalNavigationHandler", - "clobberCurrentTabWithFallbackUrl")); Assert.assertTrue(methodExists("org/chromium/chrome/browser/LaunchIntentDispatcher", "isCustomTabIntent")); Assert.assertTrue(methodExists("org/chromium/chrome/browser/homepage/HomepageManager", "shouldCloseAppWithZeroTabs")); Assert.assertTrue(methodExists("org/chromium/chrome/browser/ntp/NewTabPageLayout", "insertSiteSectionView")); diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java b/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java index 1c228962e8d..212a0652654 100644 --- a/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java +++ b/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java @@ -12,7 +12,6 @@ public class BraveClassAdapter { chain = new BraveMainPreferenceBaseClassAdapter(chain); chain = new BraveAndroidSyncSettingsClassAdapter(chain); chain = new BraveLaunchIntentDispatcherClassAdapter(chain); - chain = new BraveExternalNavigationHandlerClassAdapter(chain); chain = new BraveHomepageManagerClassAdapter(chain); chain = new BraveManageSyncSettingsClassAdapter(chain); chain = new BraveNewTabPageLayoutClassAdapter(chain); diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveExternalNavigationHandlerClassAdapter.java b/build/android/bytecode/java/org/brave/bytecode/BraveExternalNavigationHandlerClassAdapter.java deleted file mode 100644 index 0fe3bef09ba..00000000000 --- a/build/android/bytecode/java/org/brave/bytecode/BraveExternalNavigationHandlerClassAdapter.java +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (c) 2020 The Brave Authors. All rights reserved. - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -package org.brave.bytecode; - -import org.objectweb.asm.ClassVisitor; - -public class BraveExternalNavigationHandlerClassAdapter extends BraveClassVisitor { - - static String sBraveExternalNavigationHandlerClassName = - "org/chromium/chrome/browser/externalnav/BraveExternalNavigationHandler"; - - static String sExternalNavigationHandlerClassName = - "org/chromium/components/external_intents/ExternalNavigationHandler"; - - static String sMethodClobberCurrentTabWithFallbackUrl = - "clobberCurrentTabWithFallbackUrl"; - - public BraveExternalNavigationHandlerClassAdapter(ClassVisitor visitor) { - super(visitor); - - deleteMethod(sBraveExternalNavigationHandlerClassName, - sMethodClobberCurrentTabWithFallbackUrl); - makePublicMethod(sExternalNavigationHandlerClassName, - sMethodClobberCurrentTabWithFallbackUrl); - } -} diff --git a/build/android/bytecode/java_sources.gni b/build/android/bytecode/java_sources.gni index 9f06eed03c2..3c1a680a4c8 100644 --- a/build/android/bytecode/java_sources.gni +++ b/build/android/bytecode/java_sources.gni @@ -5,7 +5,6 @@ brave_java_bytecode_files = [ "../../../brave/build/android/bytecode/java/org/brave/bytecode/BraveLaunchIntentDispatcherClassAdapter.java", "../../../brave/build/android/bytecode/java/org/brave/bytecode/BraveAndroidSyncSettingsClassAdapter.java", "../../../brave/build/android/bytecode/java/org/brave/bytecode/BraveEditUrlSuggestionProcessorClassAdapter.java", - "../../../brave/build/android/bytecode/java/org/brave/bytecode/BraveExternalNavigationHandlerClassAdapter.java", "../../../brave/build/android/bytecode/java/org/brave/bytecode/BraveFeedSurfaceCoordinatorClassAdapter.java", "../../../brave/build/android/bytecode/java/org/brave/bytecode/BraveMainPreferenceBaseClassAdapter.java", "../../../brave/build/android/bytecode/java/org/brave/bytecode/BraveManageSyncSettingsClassAdapter.java",