Add-menu-option-to-toggle-global-Javascript-preference.patch 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. From: csagan5 <32685696+csagan5@users.noreply.github.com>
  2. Date: Wed, 18 Oct 2017 21:26:53 +0200
  3. Subject: Add menu option to toggle global Javascript preference
  4. ---
  5. chrome/android/java/res/menu/custom_tabs_menu.xml | 13 ++++++++
  6. chrome/android/java/res/menu/main_menu.xml | 13 ++++++++
  7. .../chromium/chrome/browser/ChromeActivity.java | 8 +++++
  8. .../chrome/browser/ChromeTabbedActivity.java | 8 +++++
  9. .../browser/appmenu/AppMenuPropertiesDelegate.java | 38 ++++++++++++++++++++++
  10. .../CustomTabAppMenuPropertiesDelegate.java | 1 +
  11. .../java/strings/android_chrome_strings.grd | 11 +++++++
  12. 7 files changed, 92 insertions(+)
  13. diff --git a/chrome/android/java/res/menu/custom_tabs_menu.xml b/chrome/android/java/res/menu/custom_tabs_menu.xml
  14. --- a/chrome/android/java/res/menu/custom_tabs_menu.xml
  15. +++ b/chrome/android/java/res/menu/custom_tabs_menu.xml
  16. @@ -49,6 +49,7 @@
  17. <item android:id="@+id/open_webapk_id"
  18. android:title="@string/menu_open_webapk"
  19. android:orderInCategory="2" />
  20. +
  21. <item android:id="@+id/request_desktop_site_row_menu_id"
  22. android:title="@null"
  23. android:orderInCategory="2">
  24. @@ -61,6 +62,18 @@
  25. </menu>
  26. </item>
  27. + <item android:id="@+id/enable_javascript_row_menu_id"
  28. + android:title="@null"
  29. + android:orderInCategory="2">
  30. + <menu>
  31. + <item android:id="@+id/enable_javascript_id"
  32. + android:title="@string/menu_enable_javascript" />
  33. + <item android:id="@+id/enable_javascript_check_id"
  34. + android:title="@null"
  35. + android:checkable="true" />
  36. + </menu>
  37. + </item>
  38. +
  39. <!-- Title is intentionally left blank in xml and will be set in java. -->
  40. <item android:id="@+id/open_in_browser_id"
  41. android:title=""
  42. diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml
  43. --- a/chrome/android/java/res/menu/main_menu.xml
  44. +++ b/chrome/android/java/res/menu/main_menu.xml
  45. @@ -61,6 +61,7 @@
  46. android:title="@string/menu_add_to_homescreen" />
  47. <item android:id="@+id/open_webapk_id"
  48. android:title="@string/menu_open_webapk" />
  49. +
  50. <item android:id="@+id/request_desktop_site_row_menu_id"
  51. android:title="@null">
  52. <menu>
  53. @@ -71,6 +72,18 @@
  54. android:checkable="true" />
  55. </menu>
  56. </item>
  57. +
  58. + <item android:id="@+id/enable_javascript_row_menu_id"
  59. + android:title="@null">
  60. + <menu>
  61. + <item android:id="@+id/enable_javascript_id"
  62. + android:title="@string/menu_enable_javascript" />
  63. + <item android:id="@+id/enable_javascript_check_id"
  64. + android:title="@null"
  65. + android:checkable="true" />
  66. + </menu>
  67. + </item>
  68. +
  69. <item android:id="@+id/reader_mode_prefs_id"
  70. android:title="@string/menu_reader_mode_prefs"
  71. android:icon="@drawable/reader_mode_prefs_icon" />
  72. diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
  73. --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
  74. +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
  75. @@ -2253,6 +2253,14 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
  76. currentTab.getWebContents().getNavigationController().setUseDesktopUserAgent(
  77. !usingDesktopUserAgent, reloadOnChange);
  78. RecordUserAction.record("MobileMenuRequestDesktopSite");
  79. + } else if (id == R.id.enable_javascript_id || id == R.id.enable_javascript_check_id) {
  80. + final boolean reloadOnChange = !currentTab.isNativePage();
  81. + final boolean jsEnabled = PrefServiceBridge.getInstance().isCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_JAVASCRIPT);
  82. + PrefServiceBridge.getInstance().setCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_JAVASCRIPT, !jsEnabled);
  83. + if (reloadOnChange) {
  84. + currentTab.reload();
  85. + }
  86. + RecordUserAction.record("MobileMenuRequestEnableJavascript");
  87. } else if (id == R.id.reader_mode_prefs_id) {
  88. DomDistillerUIUtils.openSettings(currentTab.getWebContents());
  89. } else {
  90. diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
  91. --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
  92. +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
  93. @@ -1857,6 +1857,14 @@ public class ChromeTabbedActivity
  94. NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_DOWNLOADS_MANAGER);
  95. }
  96. RecordUserAction.record("MobileMenuDownloadManager");
  97. + } else if (id == R.id.enable_javascript_id || id == R.id.enable_javascript_check_id) {
  98. + final boolean reloadOnChange = !currentTab.isNativePage();
  99. + final boolean jsEnabled = PrefServiceBridge.getInstance().isCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_JAVASCRIPT);
  100. + PrefServiceBridge.getInstance().setCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_JAVASCRIPT, !jsEnabled);
  101. + if (reloadOnChange) {
  102. + currentTab.reload();
  103. + }
  104. + RecordUserAction.record("MobileMenuRequestEnableJavascript");
  105. } else if (id == R.id.open_recently_closed_tab) {
  106. TabModel currentModel = mTabModelSelectorImpl.getCurrentModel();
  107. if (!currentModel.isIncognito()) currentModel.openMostRecentlyClosedTab();
  108. 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
  109. --- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java
  110. +++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java
  111. @@ -25,6 +25,7 @@ import org.chromium.chrome.R;
  112. import org.chromium.chrome.browser.ChromeActivity;
  113. import org.chromium.chrome.browser.ChromeFeatureList;
  114. import org.chromium.chrome.browser.ChromeSwitches;
  115. +import org.chromium.chrome.browser.ContentSettingsType;
  116. import org.chromium.chrome.browser.ShortcutHelper;
  117. import org.chromium.chrome.browser.UrlConstants;
  118. import org.chromium.chrome.browser.banners.AppBannerManager;
  119. @@ -196,6 +197,8 @@ public class AppMenuPropertiesDelegate {
  120. updateRequestDesktopSiteMenuItem(menu, currentTab, true /* can show */);
  121. + updateEnableJavascriptMenuItem(menu, currentTab);
  122. +
  123. // Only display reader mode settings menu option if the current page is in reader mode.
  124. menu.findItem(R.id.reader_mode_prefs_id)
  125. .setVisible(DomDistillerUrlUtils.isDistilledPage(currentTab.getUrl()));
  126. @@ -450,6 +453,41 @@ public class AppMenuPropertiesDelegate {
  127. }
  128. /**
  129. + * Updates the enable JavaScript item's state.
  130. + *
  131. + * @param menu {@link Menu} for enable javascript
  132. + * @param currentTab Current tab being displayed.
  133. + */
  134. + protected void updateEnableJavascriptMenuItem(
  135. + Menu menu, Tab currentTab) {
  136. + MenuItem enableMenuRow = menu.findItem(R.id.enable_javascript_row_menu_id);
  137. + MenuItem enableMenuLabel = menu.findItem(R.id.enable_javascript_id);
  138. + MenuItem enableMenuCheck = menu.findItem(R.id.enable_javascript_check_id);
  139. +
  140. + // Hide enable javascript on all chrome:// pages except for the NTP.
  141. + String url = currentTab.getUrl();
  142. + boolean isChromeScheme = url.startsWith(UrlConstants.CHROME_URL_PREFIX)
  143. + || url.startsWith(UrlConstants.CHROME_NATIVE_URL_PREFIX);
  144. + // Also hide enable javascsript on Reader Mode.
  145. + boolean isDistilledPage = DomDistillerUrlUtils.isDistilledPage(url);
  146. +
  147. + boolean itemVisible = (!isChromeScheme || currentTab.isNativePage()) && !isDistilledPage;
  148. + enableMenuRow.setVisible(itemVisible);
  149. + if (!itemVisible) return;
  150. +
  151. + boolean jsEnabled = PrefServiceBridge.getInstance().isCategoryEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_JAVASCRIPT);
  152. +
  153. + // Mark the checkbox if Javascript is activated on this tab.
  154. + enableMenuCheck.setChecked(jsEnabled);
  155. +
  156. + // This title doesn't seem to be displayed by Android, but it is used to set up
  157. + // accessibility text in {@link AppMenuAdapter#setupMenuButton}.
  158. + enableMenuLabel.setTitleCondensed(jsEnabled
  159. + ? mActivity.getString(R.string.menu_enable_javascript_on)
  160. + : mActivity.getString(R.string.menu_enable_javascript_off));
  161. + }
  162. +
  163. + /**
  164. * A notification that the header view has finished inflating.
  165. * @param view The view that was inflated.
  166. * @param appMenu The menu the view is inside of.
  167. 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
  168. --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
  169. +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
  170. @@ -182,6 +182,7 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat
  171. }
  172. updateRequestDesktopSiteMenuItem(menu, currentTab, requestDesktopSiteVisible);
  173. + updateEnableJavascriptMenuItem(menu, currentTab);
  174. prepareAddToHomescreenMenuItem(menu, currentTab, addToHomeScreenVisible);
  175. }
  176. }
  177. diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
  178. --- a/chrome/android/java/strings/android_chrome_strings.grd
  179. +++ b/chrome/android/java/strings/android_chrome_strings.grd
  180. @@ -3066,6 +3066,17 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
  181. <message name="IDS_MENU_FIND_IN_PAGE" desc="Menu item allowing users to find text within the current page. [CHAR-LIMIT=27]">
  182. Find in page
  183. </message>
  184. +
  185. + <message name="IDS_MENU_ENABLE_JAVASCRIPT" desc="Menu item in Chrome's overflow/options menu. If this menu item is unselected, Bromite will disable JavaScript support for the page. [CHAR-LIMIT=27]">
  186. + Enable JavaScript
  187. + </message>
  188. + <message name="IDS_MENU_ENABLE_JAVASCRIPT_ON" desc="Accessibility description for when Enable JavaScript is selected.">
  189. + Turn off JavaScript
  190. + </message>
  191. + <message name="IDS_MENU_ENABLE_JAVASCRIPT_OFF" desc="Accessibility description for when Enable JavaScript is unselected.">
  192. + Turn on JavaScript
  193. + </message>
  194. +
  195. <message name="IDS_MENU_REQUEST_DESKTOP_SITE" desc="Menu item in Chrome's overflow/options menu. By default, when a user navigates to a web page, Chrome shows the mobile site, that is, the version of the site designed for mobile phones. If this menu item is selected, however, Chrome will try to load the 'desktop' site instead, i.e. the site designed for desktop computers or laptop computers, which have larger screens. [CHAR-LIMIT=24]">
  196. Desktop site
  197. </message>
  198. --
  199. 2.11.0