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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  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 | 37 ++++++++++++++++++++++
  10. .../CustomTabAppMenuPropertiesDelegate.java | 1 +
  11. .../java/strings/android_chrome_strings.grd | 11 +++++++
  12. 7 files changed, 91 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. @@ -59,6 +59,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. @@ -69,6 +70,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. @@ -2079,6 +2079,14 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
  76. final boolean usingDesktopUserAgent = currentTab.getUseDesktopUserAgent();
  77. currentTab.setUseDesktopUserAgent(!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().javaScriptEnabled();
  82. + PrefServiceBridge.getInstance().setJavaScriptEnabled(!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. @@ -1644,6 +1644,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().javaScriptEnabled();
  100. + PrefServiceBridge.getInstance().setJavaScriptEnabled(!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. @@ -192,6 +192,8 @@ public class AppMenuPropertiesDelegate {
  112. updateRequestDesktopSiteMenuItem(menu, currentTab, true /* can show */);
  113. + updateEnableJavascriptMenuItem(menu, currentTab);
  114. +
  115. // Only display reader mode settings menu option if the current page is in reader mode.
  116. menu.findItem(R.id.reader_mode_prefs_id)
  117. .setVisible(DomDistillerUrlUtils.isDistilledPage(currentTab.getUrl()));
  118. @@ -412,4 +414,39 @@ public class AppMenuPropertiesDelegate {
  119. ? mActivity.getString(R.string.menu_request_desktop_site_on)
  120. : mActivity.getString(R.string.menu_request_desktop_site_off));
  121. }
  122. +
  123. + /**
  124. + * Updates the enable JavaScript item's state.
  125. + *
  126. + * @param menu {@link Menu} for enable javascript
  127. + * @param currentTab Current tab being displayed.
  128. + */
  129. + protected void updateEnableJavascriptMenuItem(
  130. + Menu menu, Tab currentTab) {
  131. + MenuItem enableMenuRow = menu.findItem(R.id.enable_javascript_row_menu_id);
  132. + MenuItem enableMenuLabel = menu.findItem(R.id.enable_javascript_id);
  133. + MenuItem enableMenuCheck = menu.findItem(R.id.enable_javascript_check_id);
  134. +
  135. + // Hide enable javascript on all chrome:// pages except for the NTP.
  136. + String url = currentTab.getUrl();
  137. + boolean isChromeScheme = url.startsWith(UrlConstants.CHROME_URL_PREFIX)
  138. + || url.startsWith(UrlConstants.CHROME_NATIVE_URL_PREFIX);
  139. + // Also hide enable javascsript on Reader Mode.
  140. + boolean isDistilledPage = DomDistillerUrlUtils.isDistilledPage(url);
  141. +
  142. + boolean itemVisible = (!isChromeScheme || currentTab.isNativePage()) && !isDistilledPage;
  143. + enableMenuRow.setVisible(itemVisible);
  144. + if (!itemVisible) return;
  145. +
  146. + boolean jsEnabled = PrefServiceBridge.getInstance().javaScriptEnabled();
  147. +
  148. + // Mark the checkbox if Javascript is activated on this tab.
  149. + enableMenuCheck.setChecked(jsEnabled);
  150. +
  151. + // This title doesn't seem to be displayed by Android, but it is used to set up
  152. + // accessibility text in {@link AppMenuAdapter#setupMenuButton}.
  153. + enableMenuLabel.setTitleCondensed(jsEnabled
  154. + ? mActivity.getString(R.string.menu_enable_javascript_on)
  155. + : mActivity.getString(R.string.menu_enable_javascript_off));
  156. + }
  157. }
  158. 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
  159. --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
  160. +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
  161. @@ -171,6 +171,7 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat
  162. }
  163. updateRequestDesktopSiteMenuItem(menu, currentTab, requestDesktopSiteVisible);
  164. + updateEnableJavascriptMenuItem(menu, currentTab);
  165. prepareAddToHomescreenMenuItem(menu, currentTab, addToHomeScreenVisible);
  166. }
  167. }
  168. diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
  169. --- a/chrome/android/java/strings/android_chrome_strings.grd
  170. +++ b/chrome/android/java/strings/android_chrome_strings.grd
  171. @@ -2663,6 +2663,17 @@ To obtain new licenses, connect to the internet and play your downloaded content
  172. <message name="IDS_MENU_FIND_IN_PAGE" desc="Menu item allowing users to find text within the current page. [CHAR-LIMIT=27]">
  173. Find in page
  174. </message>
  175. +
  176. + <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]">
  177. + Enable JavaScript
  178. + </message>
  179. + <message name="IDS_MENU_ENABLE_JAVASCRIPT_ON" desc="Accessibility description for when Enable JavaScript is selected.">
  180. + Turn off JavaScript
  181. + </message>
  182. + <message name="IDS_MENU_ENABLE_JAVASCRIPT_OFF" desc="Accessibility description for when Enable JavaScript is unselected.">
  183. + Turn on JavaScript
  184. + </message>
  185. +
  186. <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]">
  187. Desktop site
  188. </message>
  189. --
  190. 2.7.4