Replaced patch with asm
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<String, ArrayList<String>>();
|
||||
private Map<String, ArrayList<String>> mMakePublicMethods =
|
||||
new HashMap<String, ArrayList<String>>();
|
||||
private Map<String, Map<String, String>> mChangeOwnerMethods =
|
||||
new HashMap<String, Map<String, String>>();
|
||||
private Map<String, ArrayList<String>> mMakeProtectedFields =
|
||||
new HashMap<String, ArrayList<String>>();
|
||||
private Map<String, Map<String, ArrayList<String>>> mAddAnnotations =
|
||||
@@ -147,6 +155,28 @@ class BraveClassVisitor extends ClassVisitor {
|
||||
methods.add(methodName);
|
||||
}
|
||||
|
||||
private String shouldChangeOwner(String owner, String methodName) {
|
||||
if (mChangeOwnerMethods.containsKey(owner)) {
|
||||
Map<String, String> 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<String, String>();
|
||||
mChangeOwnerMethods.put(currentOwner, methods);
|
||||
}
|
||||
methods.put(methodName, newOwner);
|
||||
}
|
||||
|
||||
private boolean shouldDeleteField(String fieldName) {
|
||||
for(Map.Entry<String, ArrayList<String>> entry :
|
||||
mDeleteFields.entrySet()) {
|
||||
|
||||
+18
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user