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 | 13 ++++++++ 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 | 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 @@ + @@ -61,6 +62,18 @@ + + + + + + + + @@ -69,6 +70,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 @@ -2111,6 +2111,14 @@ public abstract class ChromeActivity extends AsyncInitializationActivity final boolean usingDesktopUserAgent = currentTab.getUseDesktopUserAgent(); currentTab.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 @@ -1711,6 +1711,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/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 @@ -25,6 +25,7 @@ import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.ChromeSwitches; +import org.chromium.chrome.browser.ContentSettingsType; import org.chromium.chrome.browser.ShortcutHelper; import org.chromium.chrome.browser.UrlConstants; import org.chromium.chrome.browser.banners.AppBannerManager; @@ -197,6 +198,8 @@ public class 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())); @@ -436,6 +439,41 @@ public class 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 + ? mActivity.getString(R.string.menu_enable_javascript_on) + : mActivity.getString(R.string.menu_enable_javascript_off)); + } + + /** * A notification that the header view has finished inflating. * @param view The view that was inflated. * @param appMenu The menu the view is inside of. 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 @@ -172,6 +172,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 @@ -2906,6 +2906,17 @@ To obtain new licenses, connect to the internet and play your downloaded content Find in page + + + Enable JavaScript + + + Turn off JavaScript + + + Turn on JavaScript + + Desktop site -- 2.11.0