Add-option-to-use-home-page-as-NTP.patch 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. From: csagan5 <32685696+csagan5@users.noreply.github.com>
  2. Date: Sat, 20 Nov 2021 15:36:54 +0000
  3. Subject: Add option to use home page as NTP
  4. And allow use about:blank as default homepage
  5. ---
  6. .../java/res/xml/homepage_preferences.xml | 5 +++++
  7. .../chrome/browser/homepage/HomepageManager.java | 16 ++++++++++++++++
  8. .../homepage/settings/HomepageSettings.java | 12 ++++++++++++
  9. .../chrome/browser/metrics/LaunchMetrics.java | 1 -
  10. .../browser/tabmodel/ChromeTabCreator.java | 7 +++++++
  11. .../preferences/ChromePreferenceKeys.java | 1 +
  12. .../preferences/LegacyChromePreferenceKeys.java | 1 +
  13. .../android/strings/android_chrome_strings.grd | 3 +++
  14. chrome/browser/ui/browser_ui_prefs.cc | 2 ++
  15. chrome/common/pref_names.cc | 4 ++++
  16. chrome/common/pref_names.h | 1 +
  17. 11 files changed, 52 insertions(+), 1 deletion(-)
  18. diff --git a/chrome/android/java/res/xml/homepage_preferences.xml b/chrome/android/java/res/xml/homepage_preferences.xml
  19. --- a/chrome/android/java/res/xml/homepage_preferences.xml
  20. +++ b/chrome/android/java/res/xml/homepage_preferences.xml
  21. @@ -12,6 +12,11 @@
  22. android:summaryOn="@string/text_on"
  23. android:summaryOff="@string/text_off" />
  24. + <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
  25. + android:key="ntp_is_homepage_switch"
  26. + android:summaryOn="@string/options_ntp_is_homepage_label"
  27. + android:summaryOff="@string/options_ntp_is_homepage_label" />
  28. +
  29. <org.chromium.chrome.browser.homepage.settings.RadioButtonGroupHomepagePreference
  30. android:key="homepage_radio_group"
  31. android:selectable="false"
  32. diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java
  33. --- a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java
  34. +++ b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java
  35. @@ -214,6 +214,22 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat
  36. notifyHomepageUpdated();
  37. }
  38. + /**
  39. + * Returns the user preference for whether the New Tab Page is the homepage or not.
  40. + *
  41. + */
  42. + public boolean getPrefNTPIsHomepageEnabled() {
  43. + return mSharedPreferencesManager.readBoolean(ChromePreferenceKeys.HOMEPAGE_NTP_IS_HOMEPAGE, false);
  44. + }
  45. +
  46. + /**
  47. + * Sets the user preference for whether the new tab page is the homepage or not.
  48. + */
  49. + public void setPrefNTPIsHomepageEnabled(boolean enabled) {
  50. + mSharedPreferencesManager.writeBoolean(ChromePreferenceKeys.HOMEPAGE_NTP_IS_HOMEPAGE, enabled);
  51. + notifyHomepageUpdated();
  52. + }
  53. +
  54. /**
  55. * @return User specified homepage custom URI string.
  56. */
  57. diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/settings/HomepageSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/homepage/settings/HomepageSettings.java
  58. --- a/chrome/android/java/src/org/chromium/chrome/browser/homepage/settings/HomepageSettings.java
  59. +++ b/chrome/android/java/src/org/chromium/chrome/browser/homepage/settings/HomepageSettings.java
  60. @@ -22,6 +22,7 @@ import org.chromium.components.browser_ui.settings.ChromeSwitchPreference;
  61. import org.chromium.components.browser_ui.settings.SettingsUtils;
  62. import org.chromium.components.embedder_support.util.UrlUtilities;
  63. import org.chromium.components.url_formatter.UrlFormatter;
  64. +import org.chromium.components.embedder_support.util.UrlConstants;
  65. /**
  66. * Fragment that allows the user to configure homepage related preferences.
  67. @@ -32,6 +33,8 @@ public class HomepageSettings extends PreferenceFragmentCompat {
  68. @VisibleForTesting
  69. public static final String PREF_HOMEPAGE_RADIO_GROUP = "homepage_radio_group";
  70. + private static final String PREF_NTP_HOMEPAGE_SWITCH = "ntp_is_homepage_switch";
  71. +
  72. /**
  73. * Delegate used to mark that the homepage is being managed.
  74. * Created for {@link org.chromium.chrome.browser.settings.HomepagePreferences}
  75. @@ -72,6 +75,15 @@ public class HomepageSettings extends PreferenceFragmentCompat {
  76. });
  77. mRadioButtons.setupPreferenceValues(createPreferenceValuesForRadioGroup());
  78. + ChromeSwitchPreference mNTPIsHomepageSwitch =
  79. + (ChromeSwitchPreference) findPreference(PREF_NTP_HOMEPAGE_SWITCH);
  80. + boolean isHomepageNTPEnabled = mHomepageManager.getPrefNTPIsHomepageEnabled();
  81. + mNTPIsHomepageSwitch.setChecked(isHomepageNTPEnabled);
  82. + mNTPIsHomepageSwitch.setOnPreferenceChangeListener((preference, newValue) -> {
  83. + mHomepageManager.setPrefNTPIsHomepageEnabled((boolean) newValue);
  84. + return true;
  85. + });
  86. +
  87. RecordUserAction.record("Settings.Homepage.Opened");
  88. }
  89. diff --git a/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java b/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java
  90. --- a/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java
  91. +++ b/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java
  92. @@ -103,7 +103,6 @@ public class LaunchMetrics {
  93. boolean showHomeButton, boolean homepageIsNtp, String homepageUrl) {
  94. if (homepageUrl == null) {
  95. homepageUrl = "";
  96. - assert !showHomeButton : "Homepage should be disabled for a null URL";
  97. }
  98. LaunchMetricsJni.get().recordHomePageLaunchMetrics(
  99. showHomeButton, homepageIsNtp, homepageUrl);
  100. diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
  101. --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
  102. +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
  103. @@ -20,6 +20,7 @@ import org.chromium.chrome.browser.ServiceTabLauncher;
  104. import org.chromium.chrome.browser.app.tab_activity_glue.ReparentingDelegateFactory;
  105. import org.chromium.chrome.browser.app.tab_activity_glue.ReparentingTask;
  106. import org.chromium.chrome.browser.compositor.CompositorViewHolder;
  107. +import org.chromium.chrome.browser.homepage.HomepageManager;
  108. import org.chromium.chrome.browser.init.StartupTabPreloader;
  109. import org.chromium.chrome.browser.ntp.NewTabPageLaunchOrigin;
  110. import org.chromium.chrome.browser.ntp.NewTabPageUtils;
  111. @@ -327,6 +328,12 @@ public class ChromeTabCreator extends TabCreator {
  112. * @return the created tab.
  113. */
  114. public Tab launchUrl(String url, @TabLaunchType int type, Intent intent, long intentTimestamp) {
  115. + if (!mIncognito && url.equals(UrlConstants.NTP_URL)) {
  116. + if (HomepageManager.getInstance().getPrefNTPIsHomepageEnabled()) {
  117. + url = HomepageManager.getInstance().getHomepageUri();
  118. + }
  119. + }
  120. +
  121. LoadUrlParams loadUrlParams = new LoadUrlParams(url);
  122. loadUrlParams.setIntentReceivedTimestamp(intentTimestamp);
  123. return createNewTab(loadUrlParams, type, null, intent);
  124. diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
  125. --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
  126. +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
  127. @@ -524,6 +524,7 @@ public final class ChromePreferenceKeys {
  128. public static final String HOMEPAGE_USE_DEFAULT_URI = "homepage_partner_enabled";
  129. public static final String HOMEPAGE_PARTNER_CUSTOMIZED_DEFAULT_URI =
  130. "Chrome.Homepage.PartnerCustomizedDefaultUri";
  131. + public static final String HOMEPAGE_NTP_IS_HOMEPAGE = "newtabpage_is_homepage";
  132. /**
  133. * Key used to save homepage location set by enterprise policy
  134. diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java
  135. --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java
  136. +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java
  137. @@ -103,6 +103,7 @@ public class LegacyChromePreferenceKeys {
  138. ChromePreferenceKeys.HOMEPAGE_CUSTOM_URI,
  139. ChromePreferenceKeys.HOMEPAGE_ENABLED,
  140. ChromePreferenceKeys.HOMEPAGE_USE_DEFAULT_URI,
  141. + ChromePreferenceKeys.HOMEPAGE_NTP_IS_HOMEPAGE,
  142. ChromePreferenceKeys.INCOGNITO_SHORTCUT_ADDED,
  143. ChromePreferenceKeys.LATEST_UNSUPPORTED_VERSION,
  144. ChromePreferenceKeys.LOCALE_MANAGER_AUTO_SWITCH,
  145. diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
  146. --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
  147. +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
  148. @@ -1010,6 +1010,9 @@ Your Google account may have other forms of browsing history like searches and a
  149. <message name="IDS_CLEAR_BROWSING_DATA_TAB_PERIOD_HOUR" desc="The option to delete browsing data from the last hour.">
  150. Last hour
  151. </message>
  152. + <message name="IDS_OPTIONS_NTP_IS_HOMEPAGE_LABEL" desc="The label for switch that allows the user to toggle whether opening a new tab leads to the new tab page or the home page.">
  153. + Use for new tabs
  154. + </message>
  155. <message name="IDS_CLEAR_BROWSING_DATA_TAB_PERIOD_24_HOURS" desc="The option to delete browsing data from the last 24 hours.">
  156. Last 24 hours
  157. </message>
  158. diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_ui_prefs.cc
  159. --- a/chrome/browser/ui/browser_ui_prefs.cc
  160. +++ b/chrome/browser/ui/browser_ui_prefs.cc
  161. @@ -65,6 +65,8 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) {
  162. GetHomeButtonAndHomePageIsNewTabPageFlags());
  163. registry->RegisterBooleanPref(prefs::kShowHomeButton, false,
  164. GetHomeButtonAndHomePageIsNewTabPageFlags());
  165. + registry->RegisterBooleanPref(prefs::kNewTabPageIsHomePage, false,
  166. + GetHomeButtonAndHomePageIsNewTabPageFlags());
  167. registry->RegisterInt64Pref(prefs::kDefaultBrowserLastDeclined, 0);
  168. bool reset_check_default = false;
  169. diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
  170. --- a/chrome/common/pref_names.cc
  171. +++ b/chrome/common/pref_names.cc
  172. @@ -55,6 +55,10 @@ const char kForceEphemeralProfiles[] = "profile.ephemeral_mode";
  173. // A boolean specifying whether the New Tab page is the home page or not.
  174. const char kHomePageIsNewTabPage[] = "homepage_is_newtabpage";
  175. +// A boolean specifying whether opening a new tab should open the Home page
  176. +// instead of the New Tab page.
  177. +const char kNewTabPageIsHomePage[] = "newtabpage_is_homepage";
  178. +
  179. // This is the URL of the page to load when opening new tabs.
  180. const char kHomePage[] = "homepage";
  181. diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
  182. --- a/chrome/common/pref_names.h
  183. +++ b/chrome/common/pref_names.h
  184. @@ -356,6 +356,7 @@ extern const char kExternalStorageReadOnly[];
  185. extern const char kSettingsShowOSBanner[];
  186. #endif // defined(OS_CHROMEOS)
  187. extern const char kShowHomeButton[];
  188. +extern const char kNewTabPageIsHomePage[];
  189. extern const char kSpeechRecognitionFilterProfanities[];
  190. extern const char kAllowDeletingBrowserHistory[];
  191. extern const char kForceGoogleSafeSearch[];
  192. --
  193. 2.20.1