BRM055_Add-menu-option-to-toggle-global-Javascript-preference.patch 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  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,19 @@
  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/enable_javascript_row_menu_id"
  22. + android:title="@null"
  23. + android:orderInCategory="2">
  24. + <menu>
  25. + <item android:id="@+id/enable_javascript_id"
  26. + android:title="@string/menu_enable_javascript" />
  27. + <item android:id="@+id/enable_javascript_check_id"
  28. + android:title="@null"
  29. + android:checkable="true" />
  30. + </menu>
  31. + </item>
  32. +
  33. <item android:id="@+id/request_desktop_site_row_menu_id"
  34. android:title="@null"
  35. android:orderInCategory="2">
  36. diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml
  37. --- a/chrome/android/java/res/menu/main_menu.xml
  38. +++ b/chrome/android/java/res/menu/main_menu.xml
  39. @@ -59,6 +59,19 @@
  40. android:title="@string/menu_add_to_homescreen" />
  41. <item android:id="@+id/open_webapk_id"
  42. android:title="@string/menu_open_webapk" />
  43. +
  44. + <item android:id="@+id/enable_javascript_row_menu_id"
  45. + android:title="@null"
  46. + android:orderInCategory="2">
  47. + <menu>
  48. + <item android:id="@+id/enable_javascript_id"
  49. + android:title="@string/menu_enable_javascript" />
  50. + <item android:id="@+id/enable_javascript_check_id"
  51. + android:title="@null"
  52. + android:checkable="true" />
  53. + </menu>
  54. + </item>
  55. +
  56. <item android:id="@+id/request_desktop_site_row_menu_id"
  57. android:title="@null">
  58. <menu>
  59. diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
  60. --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
  61. +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
  62. @@ -2054,6 +2054,14 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
  63. final boolean usingDesktopUserAgent = currentTab.getUseDesktopUserAgent();
  64. currentTab.setUseDesktopUserAgent(!usingDesktopUserAgent, reloadOnChange);
  65. RecordUserAction.record("MobileMenuRequestDesktopSite");
  66. + } else if (id == R.id.enable_javascript_id || id == R.id.enable_javascript_check_id) {
  67. + final boolean reloadOnChange = !currentTab.isNativePage();
  68. + final boolean jsEnabled = PrefServiceBridge.getInstance().javaScriptEnabled();
  69. + PrefServiceBridge.getInstance().setJavaScriptEnabled(!jsEnabled);
  70. + if (reloadOnChange) {
  71. + currentTab.reload();
  72. + }
  73. + RecordUserAction.record("MobileMenuRequestEnableJavascript");
  74. } else if (id == R.id.reader_mode_prefs_id) {
  75. DomDistillerUIUtils.openSettings(currentTab.getWebContents());
  76. } else {
  77. diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
  78. --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
  79. +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
  80. @@ -1710,6 +1710,14 @@ public class ChromeTabbedActivity
  81. NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_DOWNLOADS_MANAGER);
  82. }
  83. RecordUserAction.record("MobileMenuDownloadManager");
  84. + } else if (id == R.id.enable_javascript_id || id == R.id.enable_javascript_check_id) {
  85. + final boolean reloadOnChange = !currentTab.isNativePage();
  86. + final boolean jsEnabled = PrefServiceBridge.getInstance().javaScriptEnabled();
  87. + PrefServiceBridge.getInstance().setJavaScriptEnabled(!jsEnabled);
  88. + if (reloadOnChange) {
  89. + currentTab.reload();
  90. + }
  91. + RecordUserAction.record("MobileMenuRequestEnableJavascript");
  92. } else if (id == R.id.open_recently_closed_tab) {
  93. TabModel currentModel = mTabModelSelectorImpl.getCurrentModel();
  94. if (!currentModel.isIncognito()) currentModel.openMostRecentlyClosedTab();
  95. 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
  96. --- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java
  97. +++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java
  98. @@ -214,6 +214,8 @@ public class AppMenuPropertiesDelegate {
  99. updateRequestDesktopSiteMenuItem(menu, currentTab, true /* can show */);
  100. + updateEnableJavascriptMenuItem(menu, currentTab);
  101. +
  102. // Only display reader mode settings menu option if the current page is in reader mode.
  103. menu.findItem(R.id.reader_mode_prefs_id)
  104. .setVisible(DomDistillerUrlUtils.isDistilledPage(currentTab.getUrl()));
  105. @@ -469,4 +471,39 @@ public class AppMenuPropertiesDelegate {
  106. return chromeHomeMenuItemFlagEnabled && !sHideChromeHomeMenuItems;
  107. }
  108. +
  109. + /**
  110. + * Updates the enable JavaScript item's state.
  111. + *
  112. + * @param menu {@link Menu} for enable javascript
  113. + * @param currentTab Current tab being displayed.
  114. + */
  115. + protected void updateEnableJavascriptMenuItem(
  116. + Menu menu, Tab currentTab) {
  117. + MenuItem enableMenuRow = menu.findItem(R.id.enable_javascript_row_menu_id);
  118. + MenuItem enableMenuLabel = menu.findItem(R.id.enable_javascript_id);
  119. + MenuItem enableMenuCheck = menu.findItem(R.id.enable_javascript_check_id);
  120. +
  121. + // Hide enable javascript on all chrome:// pages except for the NTP.
  122. + String url = currentTab.getUrl();
  123. + boolean isChromeScheme = url.startsWith(UrlConstants.CHROME_URL_PREFIX)
  124. + || url.startsWith(UrlConstants.CHROME_NATIVE_URL_PREFIX);
  125. + // Also hide enable javascsript on Reader Mode.
  126. + boolean isDistilledPage = DomDistillerUrlUtils.isDistilledPage(url);
  127. +
  128. + boolean itemVisible = (!isChromeScheme || currentTab.isNativePage()) && !isDistilledPage;
  129. + enableMenuRow.setVisible(itemVisible);
  130. + if (!itemVisible) return;
  131. +
  132. + boolean jsEnabled = PrefServiceBridge.getInstance().javaScriptEnabled();
  133. +
  134. + // Mark the checkbox if Javascript is activated on this tab.
  135. + enableMenuCheck.setChecked(jsEnabled);
  136. +
  137. + // This title doesn't seem to be displayed by Android, but it is used to set up
  138. + // accessibility text in {@link AppMenuAdapter#setupMenuButton}.
  139. + enableMenuLabel.setTitleCondensed(jsEnabled
  140. + ? mActivity.getString(R.string.menu_enable_javascript_on)
  141. + : mActivity.getString(R.string.menu_enable_javascript_off));
  142. + }
  143. }
  144. 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
  145. --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
  146. +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
  147. @@ -171,6 +171,7 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat
  148. }
  149. updateRequestDesktopSiteMenuItem(menu, currentTab, requestDesktopSiteVisible);
  150. + updateEnableJavascriptMenuItem(menu, currentTab);
  151. prepareAddToHomescreenMenuItem(menu, currentTab, addToHomeScreenVisible);
  152. }
  153. }
  154. diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
  155. --- a/chrome/android/java/strings/android_chrome_strings.grd
  156. +++ b/chrome/android/java/strings/android_chrome_strings.grd
  157. @@ -2548,6 +2548,17 @@ Google may use your browsing activity, content on some sites you visit, and othe
  158. <message name="IDS_MENU_FIND_IN_PAGE" desc="Menu item allowing users to find text within the current page. [CHAR-LIMIT=27]">
  159. Find in page
  160. </message>
  161. +
  162. + <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]">
  163. + Enable JavaScript
  164. + </message>
  165. + <message name="IDS_MENU_ENABLE_JAVASCRIPT_ON" desc="Accessibility description for when Enable JavaScript is selected.">
  166. + Turn off JavaScript
  167. + </message>
  168. + <message name="IDS_MENU_ENABLE_JAVASCRIPT_OFF" desc="Accessibility description for when Enable JavaScript is unselected.">
  169. + Turn on JavaScript
  170. + </message>
  171. +
  172. <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]">
  173. Desktop site
  174. </message>
  175. --
  176. 2.7.4