From 19ec7778d8349d1cf64c2febac9eb33c6bc6d10f Mon Sep 17 00:00:00 2001 From: samartnik Date: Thu, 9 Apr 2020 18:29:39 -0400 Subject: [PATCH] Replaced patch with asm --- .../browser/BraveLaunchIntentDispatcher.java | 8 +++++ .../org/brave/bytecode/BraveClassAdapter.java | 1 + .../org/brave/bytecode/BraveClassVisitor.java | 30 +++++++++++++++++++ ...aveLaunchIntentDispatcherClassAdapter.java | 18 +++++++++++ build/android/bytecode/java_sources.gni | 1 + ...-browser-LaunchIntentDispatcher.java.patch | 12 -------- 6 files changed, 58 insertions(+), 12 deletions(-) create mode 100644 build/android/bytecode/java/org/brave/bytecode/BraveLaunchIntentDispatcherClassAdapter.java delete mode 100644 patches/chrome-android-java-src-org-chromium-chrome-browser-LaunchIntentDispatcher.java.patch diff --git a/android/java/org/chromium/chrome/browser/BraveLaunchIntentDispatcher.java b/android/java/org/chromium/chrome/browser/BraveLaunchIntentDispatcher.java index 5e321f389a7..a5bb43de7ae 100644 --- a/android/java/org/chromium/chrome/browser/BraveLaunchIntentDispatcher.java +++ b/android/java/org/chromium/chrome/browser/BraveLaunchIntentDispatcher.java @@ -5,12 +5,20 @@ package org.chromium.chrome.browser; +import android.content.Intent; import android.content.SharedPreferences; import org.chromium.base.ContextUtils; import org.chromium.chrome.browser.preferences.BravePreferenceKeys; public class BraveLaunchIntentDispatcher { + public static boolean isCustomTabIntent(Intent intent) { + if (!useCustomTabs()) { + return false; + } + return LaunchIntentDispatcher.isCustomTabIntent(intent); + } + public static boolean useCustomTabs() { SharedPreferences sharedPreferences = ContextUtils.getAppSharedPreferences(); return sharedPreferences.getBoolean(BravePreferenceKeys.BRAVE_USE_CUSTOM_TABS, true); diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java b/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java index a8d84444e38..4789555a46b 100644 --- a/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java +++ b/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java @@ -12,6 +12,7 @@ public class BraveClassAdapter { chain = new BraveBookmarkModelClassAdapter(chain); chain = new BraveMainPreferenceBaseClassAdapter(chain); chain = new BraveAndroidSyncSettingsClassAdapter(chain); + chain = new BraveLaunchIntentDispatcherClassAdapter(chain); return chain; } } diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveClassVisitor.java b/build/android/bytecode/java/org/brave/bytecode/BraveClassVisitor.java index ce8716f57aa..eba75a28d16 100644 --- a/build/android/bytecode/java/org/brave/bytecode/BraveClassVisitor.java +++ b/build/android/bytecode/java/org/brave/bytecode/BraveClassVisitor.java @@ -73,6 +73,12 @@ class BraveClassVisitor extends ClassVisitor { // the method now opcode = INVOKEVIRTUAL; } + String newOwner = shouldChangeOwner(owner, name); + if (!newOwner.isEmpty()) { + System.out.println("changing owner for " + mName + "." + name + + " - new owner " + newOwner); + owner = newOwner; + } super.visitMethodInsn(opcode, owner, name, descriptor, isInterface); } } @@ -87,6 +93,8 @@ class BraveClassVisitor extends ClassVisitor { new HashMap>(); private Map> mMakePublicMethods = new HashMap>(); + private Map> mChangeOwnerMethods = + new HashMap>(); private Map> mMakeProtectedFields = new HashMap>(); private Map>> mAddAnnotations = @@ -147,6 +155,28 @@ class BraveClassVisitor extends ClassVisitor { methods.add(methodName); } + private String shouldChangeOwner(String owner, String methodName) { + if (mChangeOwnerMethods.containsKey(owner)) { + Map methods = mChangeOwnerMethods.get(owner); + if (methods.containsKey(methodName)) { + String newOwner = methods.get(methodName); + if (!newOwner.equals(mName)) { + return newOwner; + } + } + } + return ""; + } + + protected void changeMethodOwner(String currentOwner, String methodName, String newOwner) { + Map methods = mChangeOwnerMethods.get(currentOwner); + if (methods == null) { + methods = new HashMap(); + mChangeOwnerMethods.put(currentOwner, methods); + } + methods.put(methodName, newOwner); + } + private boolean shouldDeleteField(String fieldName) { for(Map.Entry> entry : mDeleteFields.entrySet()) { diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveLaunchIntentDispatcherClassAdapter.java b/build/android/bytecode/java/org/brave/bytecode/BraveLaunchIntentDispatcherClassAdapter.java new file mode 100644 index 00000000000..5d17073c083 --- /dev/null +++ b/build/android/bytecode/java/org/brave/bytecode/BraveLaunchIntentDispatcherClassAdapter.java @@ -0,0 +1,18 @@ +/* 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 BraveLaunchIntentDispatcherClassAdapter extends BraveClassVisitor { + static String sLaunchIntentDispatcherClassName = "org/chromium/chrome/browser/LaunchIntentDispatcher"; + static String sBraveLaunchIntentDispatcherClassName = "org/chromium/chrome/browser/BraveLaunchIntentDispatcher"; + + public BraveLaunchIntentDispatcherClassAdapter(ClassVisitor visitor) { + super(visitor); + changeMethodOwner(sLaunchIntentDispatcherClassName, "isCustomTabIntent", sBraveLaunchIntentDispatcherClassName); + } +} diff --git a/build/android/bytecode/java_sources.gni b/build/android/bytecode/java_sources.gni index 8e7c684d924..fa66db6e85e 100644 --- a/build/android/bytecode/java_sources.gni +++ b/build/android/bytecode/java_sources.gni @@ -1,6 +1,7 @@ brave_java_bytecode_files = [ "../../../brave/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java", "../../../brave/build/android/bytecode/java/org/brave/bytecode/BraveClassVisitor.java", + "../../../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/BraveBookmarkModelClassAdapter.java", "../../../brave/build/android/bytecode/java/org/brave/bytecode/BraveMainPreferenceBaseClassAdapter.java", diff --git a/patches/chrome-android-java-src-org-chromium-chrome-browser-LaunchIntentDispatcher.java.patch b/patches/chrome-android-java-src-org-chromium-chrome-browser-LaunchIntentDispatcher.java.patch deleted file mode 100644 index 887af665fdb..00000000000 --- a/patches/chrome-android-java-src-org-chromium-chrome-browser-LaunchIntentDispatcher.java.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java -index 9e614cdb61a591ab8bd7f33c686aa5c5a9ec7e8b..ad5411038b468041038f30904f27e56f0f439995 100644 ---- a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java -@@ -250,6 +250,7 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega - * @return Whether the intent is for launching a Custom Tab. - */ - public static boolean isCustomTabIntent(Intent intent) { -+ if(!BraveLaunchIntentDispatcher.useCustomTabs()) return false; - if (intent == null) return false; - if (CustomTabsIntent.shouldAlwaysUseBrowserUI(intent) - || !intent.hasExtra(CustomTabsIntent.EXTRA_SESSION)) {