294 lines
18 KiB
Diff
294 lines
18 KiB
Diff
From: csagan5 <32685696+csagan5@users.noreply.github.com>
|
|
Date: Sat, 20 Nov 2021 15:36:54 +0000
|
|
Subject: Add option to use home page as NTP
|
|
|
|
And allow use about:blank as default homepage
|
|
|
|
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
|
|
---
|
|
.../tab_management/TabGridDialogMediator.java | 12 +++++++++++-
|
|
.../tasks/tab_management/TabGroupUiMediator.java | 8 +++++++-
|
|
.../java/res/xml/homepage_preferences.xml | 5 +++++
|
|
.../strip/TabGroupContextMenuCoordinator.java | 10 +++++++++-
|
|
.../chrome/browser/homepage/HomepageManager.java | 16 ++++++++++++++++
|
|
.../homepage/settings/HomepageSettings.java | 12 ++++++++++++
|
|
.../chrome/browser/metrics/LaunchMetrics.java | 1 -
|
|
.../browser/tabmodel/ChromeTabCreator.java | 8 ++++++++
|
|
.../preferences/ChromePreferenceKeys.java | 1 +
|
|
.../preferences/LegacyChromePreferenceKeys.java | 1 +
|
|
.../android/strings/android_chrome_strings.grd | 3 +++
|
|
chrome/browser/ui/browser_ui_prefs.cc | 2 ++
|
|
chrome/common/pref_names.h | 4 ++++
|
|
13 files changed, 79 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java
|
|
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java
|
|
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java
|
|
@@ -102,6 +102,7 @@ import org.chromium.components.collaboration.messaging.PersistentNotificationTyp
|
|
import org.chromium.components.data_sharing.DataSharingService;
|
|
import org.chromium.components.data_sharing.GroupMember;
|
|
import org.chromium.components.data_sharing.member_role.MemberRole;
|
|
+import org.chromium.components.embedder_support.util.UrlConstants;
|
|
import org.chromium.components.tab_group_sync.EitherId.EitherGroupId;
|
|
import org.chromium.components.tab_group_sync.LocalTabGroupId;
|
|
import org.chromium.components.tab_group_sync.TabGroupSyncService;
|
|
@@ -122,6 +123,9 @@ import java.util.Objects;
|
|
import java.util.Set;
|
|
import java.util.function.Supplier;
|
|
|
|
+import org.chromium.chrome.browser.homepage.HomepageManager;
|
|
+import org.chromium.url.GURL;
|
|
+
|
|
/**
|
|
* A mediator for the TabGridDialog component, responsible for communicating with the components'
|
|
* coordinator as well as managing the business logic for dialog show/hide.
|
|
@@ -1017,9 +1021,15 @@ public class TabGridDialogMediator
|
|
UrlConstantResolver urlConstantResolver =
|
|
UrlConstantResolverFactory.getForProfile(profile);
|
|
|
|
+ String url = urlConstantResolver.getNtpUrl();
|
|
+ if (UrlConstants.NTP_URL.equals(url)
|
|
+ && HomepageManager.getInstance().getPrefNTPIsHomepageEnabled()) {
|
|
+ GURL gurl = HomepageManager.getInstance().getHomepageGurl(profile.isIncognitoBranded());
|
|
+ url = gurl != null ? gurl.getSpec() : url;
|
|
+ }
|
|
TabGroupUtils.openUrlInGroup(
|
|
assumeNonNull(mCurrentTabGroupModelFilterSupplier.get()),
|
|
- urlConstantResolver.getNtpUrl(),
|
|
+ url,
|
|
tabsInGroup.get(tabsInGroup.size() - 1).getId(),
|
|
TabLaunchType.FROM_TAB_GROUP_UI);
|
|
RecordUserAction.record("MobileNewTabOpened." + mComponentName);
|
|
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java
|
|
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java
|
|
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java
|
|
@@ -37,6 +37,7 @@ import org.chromium.chrome.browser.data_sharing.DataSharingServiceFactory;
|
|
import org.chromium.chrome.browser.data_sharing.ui.shared_image_tiles.SharedImageTilesConfig;
|
|
import org.chromium.chrome.browser.data_sharing.ui.shared_image_tiles.SharedImageTilesCoordinator;
|
|
import org.chromium.chrome.browser.layouts.LayoutStateProvider;
|
|
+import org.chromium.chrome.browser.homepage.HomepageManager;
|
|
import org.chromium.chrome.browser.layouts.LayoutStateProvider.LayoutStateObserver;
|
|
import org.chromium.chrome.browser.layouts.LayoutType;
|
|
import org.chromium.chrome.browser.profiles.Profile;
|
|
@@ -426,10 +427,15 @@ public class TabGroupUiMediator implements BackPressHandler {
|
|
UrlConstantResolverFactory.getForProfile(currentTabProfile);
|
|
|
|
Tab parentTabToAttach = relatedTabs.get(relatedTabs.size() - 1);
|
|
+ String url = urlConstantResolver.getNtpUrl();
|
|
+ if (HomepageManager.getInstance().getPrefNTPIsHomepageEnabled()) {
|
|
+ GURL gurl = HomepageManager.getInstance().getHomepageGurl(currentTab.isIncognito());
|
|
+ url = gurl != null ? gurl.getSpec() : url;
|
|
+ }
|
|
mTabCreatorManager
|
|
.getTabCreator(currentTab.isIncognito())
|
|
.createNewTab(
|
|
- new LoadUrlParams(urlConstantResolver.getNtpUrl()),
|
|
+ new LoadUrlParams(url),
|
|
TabLaunchType.FROM_TAB_GROUP_UI,
|
|
parentTabToAttach);
|
|
RecordUserAction.record(
|
|
diff --git a/chrome/android/java/res/xml/homepage_preferences.xml b/chrome/android/java/res/xml/homepage_preferences.xml
|
|
--- a/chrome/android/java/res/xml/homepage_preferences.xml
|
|
+++ b/chrome/android/java/res/xml/homepage_preferences.xml
|
|
@@ -14,6 +14,11 @@ found in the LICENSE file.
|
|
android:summaryOn="@string/text_on"
|
|
android:summaryOff="@string/text_off" />
|
|
|
|
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
|
|
+ android:key="ntp_is_homepage_switch"
|
|
+ android:summaryOn="@string/options_ntp_is_homepage_label"
|
|
+ android:summaryOff="@string/options_ntp_is_homepage_label" />
|
|
+
|
|
<org.chromium.chrome.browser.homepage.settings.RadioButtonGroupHomepagePreference
|
|
android:key="homepage_radio_group"
|
|
android:selectable="false"
|
|
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/TabGroupContextMenuCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/TabGroupContextMenuCoordinator.java
|
|
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/TabGroupContextMenuCoordinator.java
|
|
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/TabGroupContextMenuCoordinator.java
|
|
@@ -96,6 +96,9 @@ import java.util.List;
|
|
import java.util.function.BiConsumer;
|
|
import java.util.function.Supplier;
|
|
|
|
+import org.chromium.chrome.browser.homepage.HomepageManager;
|
|
+import org.chromium.url.GURL;
|
|
+
|
|
/**
|
|
* A coordinator for the context menu on the tab strip by long-pressing on the group titles. It is
|
|
* responsible for creating a list of menu items, setting up the menu and displaying the menu.
|
|
@@ -249,9 +252,14 @@ public class TabGroupContextMenuCoordinator extends TabStripReorderingHelper<Tok
|
|
UrlConstantResolver resolver =
|
|
UrlConstantResolverFactory.getForProfile(
|
|
tabGroupModelFilter.getTabModel().getProfile());
|
|
+ String url = resolver.getNtpUrl();
|
|
+ if (HomepageManager.getInstance().getPrefNTPIsHomepageEnabled()) {
|
|
+ GURL gurl = HomepageManager.getInstance().getHomepageGurl(tabModelSupplier.get().isIncognitoBranded());
|
|
+ url = gurl != null ? gurl.getSpec() : url;
|
|
+ }
|
|
TabGroupUtils.openUrlInGroup(
|
|
tabGroupModelFilter,
|
|
- resolver.getNtpUrl(),
|
|
+ url,
|
|
tabId,
|
|
TabLaunchType.FROM_TAB_GROUP_UI);
|
|
RecordUserAction.record("MobileToolbarTabGroupMenu.NewTabInGroup");
|
|
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
|
|
--- a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java
|
|
+++ b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java
|
|
@@ -264,6 +264,22 @@ public class HomepageManager
|
|
notifyHomepageUpdated();
|
|
}
|
|
|
|
+ /**
|
|
+ * Returns the user preference for whether the New Tab Page is the homepage or not.
|
|
+ *
|
|
+ */
|
|
+ public boolean getPrefNTPIsHomepageEnabled() {
|
|
+ return mSharedPreferencesManager.readBoolean(ChromePreferenceKeys.HOMEPAGE_NTP_IS_HOMEPAGE, false);
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Sets the user preference for whether the new tab page is the homepage or not.
|
|
+ */
|
|
+ public void setPrefNTPIsHomepageEnabled(boolean enabled) {
|
|
+ mSharedPreferencesManager.writeBoolean(ChromePreferenceKeys.HOMEPAGE_NTP_IS_HOMEPAGE, enabled);
|
|
+ notifyHomepageUpdated();
|
|
+ }
|
|
+
|
|
/**
|
|
* @return User specified homepage custom GURL.
|
|
*/
|
|
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
|
|
--- 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
|
|
@@ -28,6 +28,7 @@ import org.chromium.components.browser_ui.settings.SettingsUtils;
|
|
import org.chromium.components.embedder_support.util.UrlUtilities;
|
|
import org.chromium.components.url_formatter.UrlFormatter;
|
|
import org.chromium.url.GURL;
|
|
+import org.chromium.components.embedder_support.util.UrlConstants;
|
|
|
|
/** Fragment that allows the user to configure homepage related preferences. */
|
|
@NullMarked
|
|
@@ -37,6 +38,8 @@ public class HomepageSettings extends ChromeBaseSettingsFragment {
|
|
@VisibleForTesting
|
|
public static final String PREF_HOMEPAGE_RADIO_GROUP = "homepage_radio_group";
|
|
|
|
+ private static final String PREF_NTP_HOMEPAGE_SWITCH = "ntp_is_homepage_switch";
|
|
+
|
|
private HomepageManager mHomepageManager;
|
|
private RadioButtonGroupHomepagePreference mRadioButtons;
|
|
private final SettableMonotonicObservableSupplier<String> mPageTitle =
|
|
@@ -105,6 +108,15 @@ public class HomepageSettings extends ChromeBaseSettingsFragment {
|
|
mRadioButtons.setOnHomepagePreferenceChangeListener(this::onRadioButtonGroupChanged);
|
|
mRadioButtons.setupPreferenceValues(createPreferenceValuesForRadioGroup());
|
|
|
|
+ ChromeSwitchPreference mNTPIsHomepageSwitch =
|
|
+ (ChromeSwitchPreference) findPreference(PREF_NTP_HOMEPAGE_SWITCH);
|
|
+ boolean isHomepageNTPEnabled = mHomepageManager.getPrefNTPIsHomepageEnabled();
|
|
+ mNTPIsHomepageSwitch.setChecked(isHomepageNTPEnabled);
|
|
+ mNTPIsHomepageSwitch.setOnPreferenceChangeListener((preference, newValue) -> {
|
|
+ mHomepageManager.setPrefNTPIsHomepageEnabled((boolean) newValue);
|
|
+ return true;
|
|
+ });
|
|
+
|
|
RecordUserAction.record("Settings.Homepage.Opened");
|
|
}
|
|
|
|
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
|
|
--- a/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java
|
|
+++ b/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java
|
|
@@ -136,7 +136,6 @@ public class LaunchMetrics {
|
|
public static void recordHomePageLaunchMetrics(
|
|
boolean showHomeButton, boolean homepageIsNtp, GURL homepageGurl) {
|
|
if (homepageGurl.isEmpty()) {
|
|
- assert !showHomeButton : "Homepage should be disabled for an empty GURL";
|
|
}
|
|
LaunchMetricsJni.get()
|
|
.recordHomePageLaunchMetrics(showHomeButton, homepageIsNtp, homepageGurl);
|
|
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
|
|
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
|
|
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
|
|
@@ -24,6 +24,7 @@ import org.chromium.chrome.browser.app.tab_activity_glue.ReparentingDelegateFact
|
|
import org.chromium.chrome.browser.app.tab_activity_glue.ReparentingTask;
|
|
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
|
|
import org.chromium.chrome.browser.flags.ChromeFeatureList;
|
|
+import org.chromium.chrome.browser.homepage.HomepageManager;
|
|
import org.chromium.chrome.browser.prefetch.settings.PreloadPagesSettingsBridge;
|
|
import org.chromium.chrome.browser.prefetch.settings.PreloadPagesState;
|
|
import org.chromium.chrome.browser.profiles.Profile;
|
|
@@ -575,6 +576,13 @@ public class ChromeTabCreator implements TabCreator, NeedsTabModel, NeedsTabMode
|
|
*/
|
|
public @Nullable Tab launchUrl(
|
|
String url, @TabLaunchType int type, @Nullable Intent intent, long intentTimestamp) {
|
|
+ if (!mIncognito && url.equals(UrlConstants.NTP_URL)) {
|
|
+ if (HomepageManager.getInstance().getPrefNTPIsHomepageEnabled()) {
|
|
+ GURL gurl = HomepageManager.getInstance().getHomepageGurl(mIncognito);
|
|
+ url = gurl != null ? gurl.getSpec() : url;
|
|
+ }
|
|
+ }
|
|
+
|
|
LoadUrlParams loadUrlParams = new LoadUrlParams(url);
|
|
loadUrlParams.setIntentReceivedTimestamp(intentTimestamp);
|
|
return createNewTab(loadUrlParams, type, null, intent);
|
|
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
|
|
--- 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
|
|
@@ -426,6 +426,7 @@ public final class ChromePreferenceKeys {
|
|
public static final String HOMEPAGE_USE_CHROME_NTP = "Chrome.Homepage.UseNTP";
|
|
public static final String HOMEPAGE_USE_DEFAULT_URI = "homepage_partner_enabled";
|
|
|
|
+ public static final String HOMEPAGE_NTP_IS_HOMEPAGE = "newtabpage_is_homepage";
|
|
/** Key used to save homepage location set by enterprise policy */
|
|
public static final String DEPRECATED_HOMEPAGE_LOCATION_POLICY =
|
|
"Chrome.Policy.HomepageLocation";
|
|
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
|
|
--- 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
|
|
@@ -60,6 +60,7 @@ public class LegacyChromePreferenceKeys {
|
|
ChromePreferenceKeys.HISTORY_SHOW_HISTORY_INFO,
|
|
ChromePreferenceKeys.HOMEPAGE_ENABLED,
|
|
ChromePreferenceKeys.HOMEPAGE_USE_DEFAULT_URI,
|
|
+ ChromePreferenceKeys.HOMEPAGE_NTP_IS_HOMEPAGE,
|
|
ChromePreferenceKeys.INCOGNITO_SHORTCUT_ADDED,
|
|
ChromePreferenceKeys.LATEST_UNSUPPORTED_VERSION,
|
|
ChromePreferenceKeys.LOCALE_MANAGER_AUTO_SWITCH,
|
|
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
|
|
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
|
|
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
|
|
@@ -1465,6 +1465,9 @@ Your Google account may have other forms of browsing history like searches and a
|
|
<message name="IDS_CLEAR_BROWSING_DATA_TAB_PERIOD_HOUR" desc="The option to delete browsing data from the last hour.">
|
|
Last hour
|
|
</message>
|
|
+ <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.">
|
|
+ Use for new tabs
|
|
+ </message>
|
|
<message name="IDS_CLEAR_BROWSING_DATA_TAB_PERIOD_24_HOURS" desc="The option to delete browsing data from the last 24 hours.">
|
|
Last 24 hours
|
|
</message>
|
|
diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_ui_prefs.cc
|
|
--- a/chrome/browser/ui/browser_ui_prefs.cc
|
|
+++ b/chrome/browser/ui/browser_ui_prefs.cc
|
|
@@ -128,6 +128,8 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) {
|
|
pref_registration_flags);
|
|
registry->RegisterBooleanPref(prefs::kPinSplitTabButton, false,
|
|
pref_registration_flags);
|
|
+ registry->RegisterBooleanPref(prefs::kNewTabPageIsHomePage, false,
|
|
+ PrefRegistry::NO_REGISTRATION_FLAGS);
|
|
|
|
registry->RegisterInt64Pref(prefs::kDefaultBrowserInfobarLastDeclined, 0);
|
|
registry->RegisterBooleanPref(prefs::kWebAppCreateOnDesktop, true);
|
|
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
|
|
--- a/chrome/common/pref_names.h
|
|
+++ b/chrome/common/pref_names.h
|
|
@@ -868,6 +868,10 @@ inline constexpr char kSplitViewDragAndDropNudgeUsedCount[] =
|
|
// by enterprise policy.
|
|
inline constexpr char kGeminiSettings[] = "browser.gemini_settings";
|
|
|
|
+// A boolean specifying whether opening a new tab should open the Home page
|
|
+// instead of the New Tab page.
|
|
+inline constexpr char kNewTabPageIsHomePage[] = "newtabpage_is_homepage";
|
|
+
|
|
// Comma separated list of domain names (e.g. "google.com,school.edu").
|
|
// When this pref is set, the user will be able to access Google Apps
|
|
// only using an account that belongs to one of the domains from this pref.
|
|
--
|