Replaced patch with asm

This commit is contained in:
samartnik
2020-04-09 18:29:39 -04:00
parent ce7395bd11
commit 19ec7778d8
6 changed files with 58 additions and 12 deletions
@@ -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()) {
@@ -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
View File
@@ -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",