diff --git a/patches/BRM053_Add-menu-option-to-toggle-global-Adblock-preference.patch b/patches/BRM053_Add-menu-option-to-toggle-global-Adblock-preference.patch new file mode 100644 index 00000000..f1849fde --- /dev/null +++ b/patches/BRM053_Add-menu-option-to-toggle-global-Adblock-preference.patch @@ -0,0 +1,259 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Thu, 26 Apr 2018 10:37:05 +0200 +Subject: Add menu option to toggle global Adblock preference + +Allow toggling Chromium's "ads enabled" content settings option together with Bromite adblock engine. +--- + chrome/android/java/res/menu/custom_tabs_menu.xml | 12 +++++++ + chrome/android/java/res/menu/main_menu.xml | 13 ++++++++ + .../chromium/chrome/browser/ChromeActivity.java | 8 +++++ + .../chrome/browser/ChromeTabbedActivity.java | 8 +++++ + .../browser/appmenu/AppMenuPropertiesDelegate.java | 38 ++++++++++++++++++++++ + .../CustomTabAppMenuPropertiesDelegate.java | 2 ++ + .../java/strings/android_chrome_strings.grd | 11 +++++++ + .../subresource_filter_content_settings_manager.cc | 3 ++ + net/url_request/adblock_intercept.cc | 2 ++ + net/url_request/adblock_intercept.h | 2 ++ + net/url_request/url_request.cc | 4 +++ + 11 files changed, 103 insertions(+) + +diff --git a/chrome/android/java/res/menu/custom_tabs_menu.xml b/chrome/android/java/res/menu/custom_tabs_menu.xml +--- a/chrome/android/java/res/menu/custom_tabs_menu.xml ++++ b/chrome/android/java/res/menu/custom_tabs_menu.xml +@@ -74,6 +74,18 @@ + + + ++ ++ ++ ++ ++ ++ ++ + + + + ++ ++ ++ ++ ++ ++ ++ ++ + +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java +@@ -2060,6 +2060,14 @@ public abstract class ChromeActivity extends AsyncInitializationActivity + RecordUserAction.record("MobileMenuRequestEnableJavascript"); + } else if (id == R.id.reader_mode_prefs_id) { + DomDistillerUIUtils.openSettings(currentTab.getWebContents()); ++ } else if (id == R.id.enable_adblock_id || id == R.id.enable_adblock_check_id) { ++ final boolean reloadOnChange = !currentTab.isNativePage(); ++ final boolean adBlockEnabled = !PrefServiceBridge.getInstance().adsEnabled(); ++ PrefServiceBridge.getInstance().setAllowAdsEnabled(adBlockEnabled); ++ if (reloadOnChange) { ++ currentTab.reload(); ++ } ++ RecordUserAction.record("MobileMenuRequestEnableAdBlock"); + } else { + return false; + } +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +@@ -1724,6 +1724,14 @@ public class ChromeTabbedActivity + RecordUserAction.record("MobileTabClosedUndoShortCut"); + } else if (id == R.id.enter_vr_id) { + VrShellDelegate.enterVrIfNecessary(); ++ } else if (id == R.id.enable_adblock_id || id == R.id.enable_adblock_check_id) { ++ final boolean reloadOnChange = !currentTab.isNativePage(); ++ final boolean adBlockEnabled = !PrefServiceBridge.getInstance().adsEnabled(); ++ PrefServiceBridge.getInstance().setAllowAdsEnabled(adBlockEnabled); ++ if (reloadOnChange) { ++ currentTab.reload(); ++ } ++ RecordUserAction.record("MobileMenuRequestEnableAdBlock"); + } else { + return super.onMenuOrKeyboardAction(id, fromMenu); + } +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java +@@ -212,6 +212,8 @@ public class AppMenuPropertiesDelegate { + && !TextUtils.isEmpty(url); + prepareAddToHomescreenMenuItem(menu, currentTab, canShowHomeScreenMenuItem); + ++ updateEnableAdBlockMenuItem(menu, currentTab); ++ + updateRequestDesktopSiteMenuItem(menu, currentTab, true /* can show */); + + updateEnableJavascriptMenuItem(menu, currentTab); +@@ -445,6 +447,42 @@ public class AppMenuPropertiesDelegate { + } + + /** ++ * Updates the enable AdBlock item's state. ++ * ++ * @param menu {@link Menu} for enable adblock ++ * @param currentTab Current tab being displayed. ++ */ ++ protected void updateEnableAdBlockMenuItem( ++ Menu menu, Tab currentTab) { ++ MenuItem enableMenuRow = menu.findItem(R.id.enable_adblock_row_menu_id); ++ MenuItem enableMenuLabel = menu.findItem(R.id.enable_adblock_id); ++ MenuItem enableMenuCheck = menu.findItem(R.id.enable_adblock_check_id); ++ ++ ++ // Hide enable adblock on all chrome:// pages except for the NTP. ++ String url = currentTab.getUrl(); ++ boolean isChromeScheme = url.startsWith(UrlConstants.CHROME_URL_PREFIX) ++ || url.startsWith(UrlConstants.CHROME_NATIVE_URL_PREFIX); ++ // Also hide enable javascsript on Reader Mode. ++ boolean isDistilledPage = DomDistillerUrlUtils.isDistilledPage(url); ++ ++ boolean itemVisible = (!isChromeScheme || currentTab.isNativePage()) && !isDistilledPage; ++ enableMenuRow.setVisible(itemVisible); ++ if (!itemVisible) return; ++ ++ boolean adBlockEnabled = !PrefServiceBridge.getInstance().adsEnabled(); ++ ++ // Mark the checkbox if adblock is globally activate. ++ enableMenuCheck.setChecked(adBlockEnabled); ++ ++ // This title doesn't seem to be displayed by Android, but it is used to set up ++ // accessibility text in {@link AppMenuAdapter#setupMenuButton}. ++ enableMenuLabel.setTitleCondensed(adBlockEnabled ++ ? mActivity.getString(R.string.menu_enable_adblock_on) ++ : mActivity.getString(R.string.menu_enable_adblock_off)); ++ } ++ ++ /** + * @return Whether bookmarks, downloads, and history should be shown in the menu. + */ + public static boolean shouldShowNavMenuItems() { +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java +@@ -170,6 +170,8 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat + } + } + ++ updateEnableAdBlockMenuItem(menu, currentTab); ++ + updateRequestDesktopSiteMenuItem(menu, currentTab, requestDesktopSiteVisible); + updateEnableJavascriptMenuItem(menu, currentTab); + prepareAddToHomescreenMenuItem(menu, currentTab, addToHomeScreenVisible); +diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd +--- a/chrome/android/java/strings/android_chrome_strings.grd ++++ b/chrome/android/java/strings/android_chrome_strings.grd +@@ -2568,6 +2568,17 @@ Google may use your browsing activity, content on some sites you visit, and othe + + Turn on Request desktop site + ++ ++ ++ Enable AdBlock ++ ++ ++ Turn off AdBlock ++ ++ ++ Turn on AdBlock ++ ++ + + Appearance + +diff --git a/chrome/browser/subresource_filter/subresource_filter_content_settings_manager.cc b/chrome/browser/subresource_filter/subresource_filter_content_settings_manager.cc +--- a/chrome/browser/subresource_filter/subresource_filter_content_settings_manager.cc ++++ b/chrome/browser/subresource_filter/subresource_filter_content_settings_manager.cc +@@ -22,6 +22,7 @@ + #include "components/keyed_service/core/service_access_type.h" + #include "components/subresource_filter/core/browser/subresource_filter_features.h" + #include "url/gurl.h" ++#include "net/url_request/adblock_intercept.h" + + namespace { + +@@ -160,9 +161,11 @@ void SubresourceFilterContentSettingsManager::OnContentSettingChanged( + if (global_setting == CONTENT_SETTING_ALLOW) { + ChromeSubresourceFilterClient::LogAction( + kActionContentSettingsAllowedGlobal); ++ net::adblock_enabled = false; + } else if (global_setting == CONTENT_SETTING_BLOCK) { + ChromeSubresourceFilterClient::LogAction( + kActionContentSettingsBlockedGlobal); ++ net::adblock_enabled = true; + } else { + NOTREACHED(); + } +diff --git a/net/url_request/adblock_intercept.cc b/net/url_request/adblock_intercept.cc +--- a/net/url_request/adblock_intercept.cc ++++ b/net/url_request/adblock_intercept.cc +@@ -19,6 +19,8 @@ + + namespace net { + ++bool adblock_enabled = true; ++ + const char *LOG_TAG = "Bromite"; + + #ifdef ADB_TESTER +diff --git a/net/url_request/adblock_intercept.h b/net/url_request/adblock_intercept.h +--- a/net/url_request/adblock_intercept.h ++++ b/net/url_request/adblock_intercept.h +@@ -11,6 +11,8 @@ int adblock_rules_count(); + + int adblock_intercept(const GURL &url, const std::string &origin_host); + ++extern bool adblock_enabled; ++ + } // namespace net + + #endif // NET_URL_REQUEST_ADBLOCK_INTERCEPT_H_ +diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc +--- a/net/url_request/url_request.cc ++++ b/net/url_request/url_request.cc +@@ -590,6 +590,7 @@ URLRequest::URLRequest(const GURL& url, + DCHECK(base::ThreadTaskRunnerHandle::IsSet()); + + #if defined(OS_ANDROID) ++ if (net::adblock_enabled) { + std::string initiatorHost; + if (initiator_.has_value()) { + initiatorHost = initiator_.value().host(); +@@ -600,6 +601,9 @@ URLRequest::URLRequest(const GURL& url, + } else { + url_chain_ = { url }; + } ++ } else { ++ url_chain_ = { url }; ++ } + #endif + + context->url_requests()->insert(this); +-- +2.7.4 +