From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Wed, 18 Oct 2017 21:26:53 +0200 Subject: Add menu option to toggle global Javascript preference --- 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 +++++ .../appmenu/AppMenuPropertiesDelegateImpl.java | 39 ++++++++++++++++++++++ .../CustomTabAppMenuPropertiesDelegate.java | 1 + .../java/strings/android_chrome_strings.grd | 11 ++++++ 7 files changed, 92 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 @@ -49,6 +49,7 @@ + @@ -63,6 +64,17 @@ + + + + + + + @@ -71,6 +72,18 @@ android:checkable="true" /> + + + + + + + + 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 @@ -2160,6 +2160,14 @@ public abstract class ChromeActivity currentTab.getWebContents().getNavigationController().setUseDesktopUserAgent( !usingDesktopUserAgent, reloadOnChange); RecordUserAction.record("MobileMenuRequestDesktopSite"); + } else if (id == R.id.enable_javascript_id || id == R.id.enable_javascript_check_id) { + final boolean reloadOnChange = !currentTab.isNativePage(); + final boolean jsEnabled = PrefServiceBridge.getInstance().isCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_JAVASCRIPT); + PrefServiceBridge.getInstance().setCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_JAVASCRIPT, !jsEnabled); + if (reloadOnChange) { + currentTab.reload(); + } + RecordUserAction.record("MobileMenuRequestEnableJavascript"); } else if (id == R.id.reader_mode_prefs_id) { DomDistillerUIUtils.openSettings(currentTab.getWebContents()); } else { 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 @@ -1751,6 +1751,14 @@ public class ChromeTabbedActivity NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_DOWNLOADS_MANAGER); } RecordUserAction.record("MobileMenuDownloadManager"); + } else if (id == R.id.enable_javascript_id || id == R.id.enable_javascript_check_id) { + final boolean reloadOnChange = !currentTab.isNativePage(); + final boolean jsEnabled = PrefServiceBridge.getInstance().isCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_JAVASCRIPT); + PrefServiceBridge.getInstance().setCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_JAVASCRIPT, !jsEnabled); + if (reloadOnChange) { + currentTab.reload(); + } + RecordUserAction.record("MobileMenuRequestEnableJavascript"); } else if (id == R.id.open_recently_closed_tab) { TabModel currentModel = mTabModelSelectorImpl.getCurrentModel(); if (!currentModel.isIncognito()) currentModel.openMostRecentlyClosedTab(); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java @@ -242,6 +242,8 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate updateRequestDesktopSiteMenuItem(menu, currentTab, true /* can show */); + updateEnableJavascriptMenuItem(menu, currentTab); + // Only display reader mode settings menu option if the current page is in reader mode. menu.findItem(R.id.reader_mode_prefs_id) .setVisible(DomDistillerUrlUtils.isDistilledPage(currentTab.getUrl())); @@ -437,6 +439,43 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate } } + /** + * Updates the enable JavaScript item's state. + * + * @param menu {@link Menu} for enable javascript + * @param currentTab Current tab being displayed. + */ + protected void updateEnableJavascriptMenuItem( + Menu menu, Tab currentTab) { + MenuItem enableMenuRow = menu.findItem(R.id.enable_javascript_row_menu_id); + MenuItem enableMenuLabel = menu.findItem(R.id.enable_javascript_id); + MenuItem enableMenuCheck = menu.findItem(R.id.enable_javascript_check_id); + + // Hide enable javascript 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 jsEnabled = PrefServiceBridge.getInstance().isCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_JAVASCRIPT); + + // Mark the checkbox if Javascript is activated on this tab. + enableMenuCheck.setChecked(jsEnabled); + + // 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(jsEnabled + ? mContext.getString(R.string.menu_enable_javascript_on) + : mContext.getString(R.string.menu_enable_javascript_off)); + } + + + /** * Updates the request desktop site item's state. * 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 @@ -202,6 +202,7 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat } 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 @@ -2944,6 +2944,17 @@ To change this setting, <resetlink>reset sync

Find in page + + + Enable JavaScript + + + Turn off JavaScript + + + Turn on JavaScript + + Desktop site -- 2.11.0