diff --git a/android/brave_java_sources.gni b/android/brave_java_sources.gni index 3ce054a9147..0124a7e8347 100644 --- a/android/brave_java_sources.gni +++ b/android/brave_java_sources.gni @@ -311,6 +311,7 @@ brave_components_browser_ui_site_settings_android_java = [ "//brave/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BraveContentSettingsResources.java", "//brave/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BraveSingleCategorySettings.java", "//brave/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BraveSingleWebsiteSettings.java", + "//brave/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BraveSiteSettingsCategory.java", "//brave/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BraveSiteSettingsPreferencesBase.java", "//brave/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BraveWebsite.java", "//brave/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BraveWebsitePermissionsFetcher.java", diff --git a/android/java/apk_for_test.flags b/android/java/apk_for_test.flags index a4b014875f3..f6aa2e60cff 100644 --- a/android/java/apk_for_test.flags +++ b/android/java/apk_for_test.flags @@ -278,6 +278,7 @@ -keep class org.chromium.components.browser_ui.site_settings.SingleCategorySettings { public (...); + *** onOptionsItemSelected(...); } -keep class org.chromium.chrome.browser.site_settings.ChromeSiteSettingsDelegate { @@ -375,3 +376,31 @@ -keep class org.chromium.chrome.browser.share.BraveShareDelegateImpl { public (...); } + +-keep class org.chromium.components.browser_ui.site_settings.ContentSettingsResources$ResourceItem { + public (...); +} + +-keep class org.chromium.components.browser_ui.site_settings.WebsitePermissionsFetcher { + *** getPermissionsType(...); +} + +-keep class org.chromium.components.browser_ui.site_settings.SingleWebsiteSettings { + public (...); +} + +-keep class org.chromium.components.browser_ui.site_settings.BraveSingleWebsiteSettings { + public (...); +} + +-keep class org.chromium.components.browser_ui.site_settings.Website { + public (...); +} + +-keep class org.chromium.components.browser_ui.site_settings.BraveWebsite { + public (...); +} + +-keep class org.chromium.components.browser_ui.site_settings.BraveContentSettingsResources { + *** getResourceItem(...); +} diff --git a/android/java/proguard.flags b/android/java/proguard.flags index ade33910079..52da16babf0 100644 --- a/android/java/proguard.flags +++ b/android/java/proguard.flags @@ -10,24 +10,26 @@ } -keep class org.chromium.components.browser_ui.site_settings.ContentSettingsResources { - private static *** getResourceItem(...); + *** getResourceItem(...); } -keep class org.chromium.components.browser_ui.site_settings.SingleCategorySettings { - private *** getAddExceptionDialogMessage(); - private void resetList(); + *** mCategory; + *** getAddExceptionDialogMessage(...); + *** resetList(...); } -keep class org.chromium.components.browser_ui.site_settings.SingleWebsiteSettings { - private static *** getPreferenceKey(...); - private void setupContentSettingsPreferences(); - private void setupContentSettingsPreference(...); + *** mSite; + *** getPreferenceKey(...); + *** setupContentSettingsPreferences(...); + *** setupContentSettingsPreference(...); } -keep class org.chromium.components.browser_ui.site_settings.Website { - public *** getPermissionInfo(...); - public *** getContentSettingException(...); - public *** getAddress(); - public void setContentSettingException(...); - public void setContentSetting(...); + *** getPermissionInfo(...); + *** getContentSettingException(...); + *** getAddress(...); + *** setContentSettingException(...); + *** setContentSetting(...); } diff --git a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java index 8c9e785b6c2..10dff60d554 100644 --- a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java +++ b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java @@ -74,6 +74,8 @@ import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.site_settings.ContentSettingException; import org.chromium.components.browser_ui.site_settings.PermissionInfo; +import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory; +import org.chromium.components.browser_ui.site_settings.Website; import org.chromium.components.browser_ui.site_settings.WebsiteAddress; import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator; import org.chromium.components.permissions.PermissionDialogController; @@ -318,8 +320,6 @@ public class BytecodeTest { "getPreferenceKey", false, null)); Assert.assertTrue(methodExists("org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings", "setupContentSettingsPreferences", false, null)); - Assert.assertTrue(methodExists("org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings", - "isActionableContentSettingsEnabled", false, null)); Assert.assertTrue(methodExists("org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings", "setupContentSettingsPreference", false, null)); Assert.assertTrue(methodExists("org/chromium/components/browser_ui/site_settings/Website", @@ -336,15 +336,11 @@ public class BytecodeTest { Assert.assertTrue( methodExists("org/chromium/components/browser_ui/site_settings/BraveContentSettingsResources", "getResourceItem", true, - Class.forName("org/chromium/components/browser_ui/site_settings/ContentSettingsResources$ResourceItem"), int.class)); - - // NOTE: Add new checks above. For each new check in this method add proguard exception in - // `brave/android/java/proguard.flags` file under `Add methods for invocation below` - // section. Both test and regular apks should have the same exceptions. + getClassForPath("org/chromium/components/browser_ui/site_settings/ContentSettingsResources$ResourceItem"), int.class)); Assert.assertTrue( methodExists("org/chromium/components/browser_ui/site_settings/ContentSettingsResources", "getResourceItem", true, - Class.forName("org/chromium/components/browser_ui/site_settings/ContentSettingsResources$ResourceItem"), int.class)); + getClassForPath("org/chromium/components/browser_ui/site_settings/ContentSettingsResources$ResourceItem"), int.class)); Assert.assertTrue( methodExists("org/chromium/components/browser_ui/site_settings/SingleCategorySettings", "getAddExceptionDialogMessage", true, String.class)); @@ -371,10 +367,13 @@ public class BytecodeTest { "getAddress", true, WebsiteAddress.class)); Assert.assertTrue( methodExists("org/chromium/components/browser_ui/site_settings/Website", - "setContentSettingException", true, void.class)); + "setContentSettingException", true, void.class, int.class, ContentSettingException.class)); Assert.assertTrue( methodExists("org/chromium/components/browser_ui/site_settings/Website", - "setContentSetting", true, void.class, BrowserContextHandle.class)); + "setContentSetting", true, void.class, BrowserContextHandle.class, int.class, int.class)); + // NOTE: Add new checks above. For each new check in this method add proguard exception in + // `brave/android/java/proguard.flags` file under `Add methods for invocation below` + // section. Both test and regular apks should have the same exceptions. } @Test @@ -624,10 +623,10 @@ public class BytecodeTest { "mSearchEngineAdapter")); Assert.assertTrue(fieldExists( "org/chromium/components/browser_ui/site_settings/SingleCategorySettings", - "mCategory")); + "mCategory", true, SiteSettingsCategory.class)); Assert.assertTrue(fieldExists( "org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings", - "mSite")); + "mSite", true, Website.class)); } @Test @@ -716,13 +715,22 @@ public class BytecodeTest { } private boolean fieldExists(String className, String fieldName) { + return fieldExists(className, fieldName, false, null); + } + + private boolean fieldExists(String className, String fieldName, Boolean checkTypes, + Class fieldType) { Class c = getClassForPath(className); if (c == null) { return false; } for (Field f : c.getDeclaredFields()) { if (f.getName().equals(fieldName)) { - return true; + if (checkTypes) { + if (fieldType != null && f.getType().equals(fieldType)) + return true; + } else + return true; } } return false; diff --git a/build/android/bytecode/BUILD.gn b/build/android/bytecode/BUILD.gn index 373255560dc..f06ec888458 100644 --- a/build/android/bytecode/BUILD.gn +++ b/build/android/bytecode/BUILD.gn @@ -42,6 +42,7 @@ java_binary("java_bytecode_rewriter") { "//brave/build/android/bytecode/java/org/brave/bytecode/BraveShareDelegateImplClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveSingleCategorySettingsClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveSingleWebsiteSettingsClassAdapter.java", + "//brave/build/android/bytecode/java/org/brave/bytecode/BraveSiteSettingsCategoryClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveSiteSettingsDelegateClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveStatusMediatorClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveTabGroupUiCoordinatorClassAdapter.java", diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java b/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java index 416651be6d5..c7110d9bc67 100644 --- a/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java +++ b/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java @@ -41,6 +41,7 @@ public class BraveClassAdapter { chain = new BraveShareDelegateImplClassAdapter(chain); chain = new BraveSingleCategorySettingsClassAdapter(chain); chain = new BraveSingleWebsiteSettingsClassAdapter(chain); + chain = new BraveSiteSettingsCategoryClassAdapter(chain); chain = new BraveSiteSettingsDelegateClassAdapter(chain); chain = new BraveStatusMediatorClassAdapter(chain); chain = new BraveTabGroupUiCoordinatorClassAdapter(chain); diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveClassVisitor.java b/build/android/bytecode/java/org/brave/bytecode/BraveClassVisitor.java index 4aadc25528a..db62fca6511 100644 --- a/build/android/bytecode/java/org/brave/bytecode/BraveClassVisitor.java +++ b/build/android/bytecode/java/org/brave/bytecode/BraveClassVisitor.java @@ -166,11 +166,7 @@ class BraveClassVisitor extends ClassVisitor { mMakePublicMethods.entrySet()) { String entryClassName = entry.getKey(); ArrayList methodNames = entry.getValue(); - // Why className.contains(entryClassName)? This seems erroneous - if (methodNames.contains(methodName) && className.equals(entryClassName) != className.contains(entryClassName)) { - System.out.println("Warning: class name " + className + " may not be written correctly!"); - } - return className.contains(entryClassName) && + return className.equals(entryClassName) && methodNames.contains(methodName); } @@ -289,16 +285,11 @@ class BraveClassVisitor extends ClassVisitor { } private boolean shouldMakeNonFinalClass(String className) { - int idx = mMakeNonFinalClasses.indexOf(className); - if (idx != -1) - return true; - - return false; + return mMakeNonFinalClasses.contains(className); } protected void makeNonFinalClass(String className) { - int idx = mMakeNonFinalClasses.indexOf(className); - if (idx == -1) + if (!mMakeNonFinalClasses.contains(className)) mMakeNonFinalClasses.add(className); } diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveSingleWebsiteSettingsClassAdapter.java b/build/android/bytecode/java/org/brave/bytecode/BraveSingleWebsiteSettingsClassAdapter.java index 2b978cc1ece..a537b905787 100644 --- a/build/android/bytecode/java/org/brave/bytecode/BraveSingleWebsiteSettingsClassAdapter.java +++ b/build/android/bytecode/java/org/brave/bytecode/BraveSingleWebsiteSettingsClassAdapter.java @@ -19,9 +19,6 @@ public class BraveSingleWebsiteSettingsClassAdapter extends BraveClassVisitor { changeMethodOwner(sSingleWebsiteSettingsClassName, "getPreferenceKey", sBraveSingleWebsiteSettingsClassName); changeMethodOwner(sSingleWebsiteSettingsClassName, "setupContentSettingsPreferences", sBraveSingleWebsiteSettingsClassName); - makePublicMethod(sSingleWebsiteSettingsClassName, "isActionableContentSettingsEnabled"); - changeMethodOwner(sBraveSingleWebsiteSettingsClassName, "isActionableContentSettingsEnabled", sSingleWebsiteSettingsClassName); - makePublicMethod(sSingleWebsiteSettingsClassName, "setupContentSettingsPreference"); changeMethodOwner(sBraveSingleWebsiteSettingsClassName, "setupContentSettingsPreference", sSingleWebsiteSettingsClassName); } diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveSiteSettingsCategoryClassAdapter.java b/build/android/bytecode/java/org/brave/bytecode/BraveSiteSettingsCategoryClassAdapter.java new file mode 100644 index 00000000000..fec0d944d74 --- /dev/null +++ b/build/android/bytecode/java/org/brave/bytecode/BraveSiteSettingsCategoryClassAdapter.java @@ -0,0 +1,20 @@ +/* Copyright (c) 2021 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 BraveSiteSettingsCategoryClassAdapter extends BraveClassVisitor { + static String sSiteSettingsCategoryClassName = "org/chromium/components/browser_ui/site_settings/SiteSettingsCategory"; + static String sBraveSiteSettingsCategoryClassName = "org/chromium/components/browser_ui/site_settings/BraveSiteSettingsCategory"; + + public BraveSiteSettingsCategoryClassAdapter(ClassVisitor visitor) { + super(visitor); + + changeMethodOwner(sSiteSettingsCategoryClassName, "contentSettingsType", sBraveSiteSettingsCategoryClassName); + changeMethodOwner(sSiteSettingsCategoryClassName, "preferenceKey", sBraveSiteSettingsCategoryClassName); + } +} diff --git a/chromium_src/components/browser_ui/site_settings/android/DEPS b/chromium_src/components/browser_ui/site_settings/android/DEPS new file mode 100644 index 00000000000..f985691e293 --- /dev/null +++ b/chromium_src/components/browser_ui/site_settings/android/DEPS @@ -0,0 +1,5 @@ +include_rules = [ + "+../../../../../components/browser_ui/site_settings/android", + "+components/browser_ui/site_settings/android", + "+components/permissions", +] diff --git a/chromium_src/components/browser_ui/site_settings/android/website_preference_bridge.cc b/chromium_src/components/browser_ui/site_settings/android/website_preference_bridge.cc new file mode 100644 index 00000000000..3f193dc6804 --- /dev/null +++ b/chromium_src/components/browser_ui/site_settings/android/website_preference_bridge.cc @@ -0,0 +1,10 @@ +/* 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/. */ + +#include "../../../../../../components/content_settings/core/common/content_settings_types.h" +#include "../../../../../../components/permissions/permission_manager.h" + +#define BACKGROUND_SYNC AUTOPLAY: case ContentSettingsType::BACKGROUND_SYNC +#include "../../../../../../components/browser_ui/site_settings/android/website_preference_bridge.cc" +#undef BACKGROUND_SYNC diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BraveSingleWebsiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BraveSingleWebsiteSettings.java index e43f8184cb6..6e1bfe8e8a9 100644 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BraveSingleWebsiteSettings.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BraveSingleWebsiteSettings.java @@ -35,9 +35,7 @@ public class BraveSingleWebsiteSettings extends SiteSettingsPreferenceFragment { } public void setupContentSettingsPreferences() { - Preference preference = isActionableContentSettingsEnabled() - ? new ChromeSwitchPreference(getStyledContext()) - : new ListPreference(getStyledContext()); + Preference preference = new ChromeSwitchPreference(getStyledContext()); preference.setKey(getPreferenceKey(ContentSettingsType.AUTOPLAY)); setUpAutoplayPreference(preference); @@ -72,10 +70,4 @@ public class BraveSingleWebsiteSettings extends SiteSettingsPreferenceFragment { private Context getStyledContext() { return getPreferenceManager().getContext(); } - - // Placeholders - private static boolean isActionableContentSettingsEnabled() { - assert (false); - return false; - } } diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BraveSiteSettingsCategory.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BraveSiteSettingsCategory.java new file mode 100644 index 00000000000..f926f4d7ea5 --- /dev/null +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BraveSiteSettingsCategory.java @@ -0,0 +1,29 @@ +/* Copyright (c) 2021 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.chromium.components.browser_ui.site_settings; + +import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory.Type; +import org.chromium.components.content_settings.ContentSettingsType; + +public class BraveSiteSettingsCategory { + public static int contentSettingsType(@Type int type) { + switch (type) { + case Type.AUTOPLAY: + return ContentSettingsType.AUTOPLAY; + default: + return SiteSettingsCategory.contentSettingsType(type); + } + } + + public static String preferenceKey(@Type int type) { + switch (type) { + case Type.AUTOPLAY: + return "autoplay"; + default: + return SiteSettingsCategory.preferenceKey(type); + } + } +} diff --git a/patches/components-browser_ui-site_settings-android-java-src-org-chromium-components-browser_ui-site_settings-SiteSettingsCategory.java.patch b/patches/components-browser_ui-site_settings-android-java-src-org-chromium-components-browser_ui-site_settings-SiteSettingsCategory.java.patch index bfad0945b1d..dc404fe47f3 100644 --- a/patches/components-browser_ui-site_settings-android-java-src-org-chromium-components-browser_ui-site_settings-SiteSettingsCategory.java.patch +++ b/patches/components-browser_ui-site_settings-android-java-src-org-chromium-components-browser_ui-site_settings-SiteSettingsCategory.java.patch @@ -24,21 +24,3 @@ index 5c0f84d697b29..0944d227e28c5 100644 } private final BrowserContextHandle mBrowserContextHandle; -@@ -193,6 +194,8 @@ public class SiteSettingsCategory { - return ContentSettingsType.VR; - // case Type.ALL_SITES - // case Type.USE_STORAGE -+ case Type.AUTOPLAY: -+ return ContentSettingsType.AUTOPLAY; - default: - return -1; // Conversion unavailable. - } -@@ -264,6 +267,8 @@ public class SiteSettingsCategory { - return "use_storage"; - case Type.VIRTUAL_REALITY: - return "virtual_reality"; -+ case Type.AUTOPLAY: -+ return "autoplay"; - default: - assert false; - return ""; diff --git a/patches/components-browser_ui-site_settings-android-website_preference_bridge.cc.patch b/patches/components-browser_ui-site_settings-android-website_preference_bridge.cc.patch deleted file mode 100644 index df77f430948..00000000000 --- a/patches/components-browser_ui-site_settings-android-website_preference_bridge.cc.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/components/browser_ui/site_settings/android/website_preference_bridge.cc b/components/browser_ui/site_settings/android/website_preference_bridge.cc -index a5316d02726f1..0a587c71d8268 100644 ---- a/components/browser_ui/site_settings/android/website_preference_bridge.cc -+++ b/components/browser_ui/site_settings/android/website_preference_bridge.cc -@@ -813,6 +813,7 @@ static void JNI_WebsitePreferenceBridge_SetContentSettingEnabled( - case ContentSettingsType::POPUPS: - case ContentSettingsType::SENSORS: - case ContentSettingsType::SOUND: -+ case ContentSettingsType::AUTOPLAY: - value = CONTENT_SETTING_ALLOW; - break; - default: