Files
cromite/build/patches/Show-NTP-at-startup.patch
2026-05-19 10:48:25 +02:00

587 lines
33 KiB
Diff

From: uazo <uazo@users.noreply.github.com>
Date: Tue, 27 Feb 2024 16:20:43 +0000
Subject: Show NTP at startup
Adds an active option by default to automatically open the
NTP at each reboot and allows the user to continue the old browsing.
Until the real tab is opened, no data is retrieved.
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
.../java/res/xml/homepage_preferences.xml | 6 ++++
.../browser/BrowserRestartActivity.java | 1 +
.../browser/ChromeInactivityTracker.java | 14 ++++++++
.../chrome/browser/ChromeTabbedActivity.java | 10 +++---
.../browser/tasks/ReturnToChromeUtil.java | 19 ++++++++---
chrome/app/settings_strings.grdp | 2 +-
.../HomeTipsModulesProvider.java | 4 +--
.../flags/android/chrome_feature_list.cc | 1 +
.../cromite/sShowNtpAtStartupAndroid.java | 33 +++++++++++++++++++
.../magic_stack/HomeModulesMediator.java | 8 +++++
.../browser/magic_stack/ModuleRegistry.java | 3 +-
.../policies/background_tab_loading_policy.cc | 2 ++
.../preferences/ChromePreferenceKeys.java | 2 ++
.../LegacyChromePreferenceKeys.java | 1 +
.../on_startup_page/on_startup_page.ts | 1 +
.../client_util/HomeModulesRankingHelper.java | 2 --
chrome/browser/sessions/session_restore.cc | 9 ++++-
.../res/layout/single_tab_module_layout.xml | 17 +++++-----
.../SingleTabSwitcherCoordinator.java | 2 +-
.../SingleTabSwitcherOnNtpMediator.java | 5 +--
.../show-ntp-at-startup.grdp | 9 +++++
chrome/browser/ui/browser_tabrestore.cc | 2 +-
.../startup/startup_browser_creator_impl.cc | 8 +++++
.../about_flags_cc/show-ntp-at-startup.inc | 12 +++++++
.../show-ntp-at-startup.inc | 5 +++
.../show-ntp-at-startup.inc | 1 +
26 files changed, 150 insertions(+), 29 deletions(-)
create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sShowNtpAtStartupAndroid.java
create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/show-ntp-at-startup.grdp
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/show-ntp-at-startup.inc
create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/show-ntp-at-startup.inc
create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/show-ntp-at-startup.inc
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
@@ -19,6 +19,12 @@ found in the LICENSE file.
android:summaryOn="@string/options_ntp_is_homepage_label"
android:summaryOff="@string/options_ntp_is_homepage_label" />
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
+ android:title="@string/show_ntp_at_startup_title"
+ android:summary="@string/show_ntp_at_startup_summary"
+ app:featureName="enable-show-ntp-at-startup"
+ app:needRestart="true" />
+
<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/BrowserRestartActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/BrowserRestartActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/BrowserRestartActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/BrowserRestartActivity.java
@@ -71,6 +71,7 @@ public class BrowserRestartActivity extends Activity {
Intent restartIntent = new Intent(Intent.ACTION_MAIN);
restartIntent.setPackage(context.getPackageName());
restartIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ restartIntent.putExtra(BrowserRestartActivity.EXTRA_RESTART, true);
context.startActivity(restartIntent);
}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeInactivityTracker.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeInactivityTracker.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeInactivityTracker.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeInactivityTracker.java
@@ -16,8 +16,10 @@ import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.lifecycle.DestroyObserver;
import org.chromium.chrome.browser.lifecycle.PauseResumeWithNativeObserver;
import org.chromium.chrome.browser.lifecycle.StartStopWithNativeObserver;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
import org.chromium.chrome.browser.preferences.ChromeSharedPreferences;
+import org.chromium.chrome.browser.flags.cromite.sShowNtpAtStartupAndroid;
/**
* Manages pref that can track the delay since the last stop of the tracked activity.
@@ -73,6 +75,18 @@ public class ChromeInactivityTracker
mLifecycleDispatcher.register(this);
}
+ public void setIsStartup(boolean newStartup) {
+ ChromeSharedPreferences.getInstance().writeBoolean(
+ ChromePreferenceKeys.TABBED_ACTIVITY_IS_STARTUP, newStartup);
+ }
+
+ public boolean isNewStartup() {
+ return
+ sShowNtpAtStartupAndroid.getInstance().isEnabled() &&
+ ChromeSharedPreferences.getInstance().readBoolean(
+ ChromePreferenceKeys.TABBED_ACTIVITY_IS_STARTUP, false);
+ }
+
/**
* Updates the shared preferences to contain the given time. Used internally and for tests.
* @param timeInMillis the time to record.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -3279,6 +3279,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt
mInactivityTrackerSupplier.set(
new ChromeInactivityTracker(
ChromePreferenceKeys.TABBED_ACTIVITY_LAST_BACKGROUNDED_TIME_MS_PREF));
+ mInactivityTrackerSupplier.get().setIsStartup(
+ !CipherLazyHolder.sCipherInstance.restoreFromBundle(getSavedInstanceState()));
TabUsageTracker.initialize(this.getLifecycleDispatcher(), tabModelSelector);
TabGroupUsageTracker.initialize(
this.getLifecycleDispatcher(), tabModelSelector, this::isWarmOnResume);
@@ -3310,13 +3312,13 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt
getTabModelSelectorSupplier(),
getTabContentManagerSupplier(),
SetupListModuleUtils::isSetupListActive);
- moduleRegistry.registerModule(ModuleType.SINGLE_TAB, singleTabModuleBuilder);
+ moduleRegistry.registerModule(ModuleType.SINGLE_TAB, singleTabModuleBuilder, /*active*/ true);
if (ChromeFeatureList.sPriceChangeModule.isEnabled()) {
PriceChangeModuleBuilder priceChangeModuleBuilder =
new PriceChangeModuleBuilder(
this, getProfileProviderSupplier(), mTabModelSelector);
- moduleRegistry.registerModule(ModuleType.PRICE_CHANGE, priceChangeModuleBuilder);
+ moduleRegistry.registerModule(ModuleType.PRICE_CHANGE, priceChangeModuleBuilder, /*active*/ false);
}
SafetyHubMagicStackBuilder safetyHubMagicStackBuilder =
@@ -3325,7 +3327,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt
mTabModelProfileSupplier,
mTabModelSelector,
getModalDialogManagerSupplier());
- moduleRegistry.registerModule(ModuleType.SAFETY_HUB, safetyHubMagicStackBuilder);
+ moduleRegistry.registerModule(ModuleType.SAFETY_HUB, safetyHubMagicStackBuilder, /*active*/ false);
// Fetch and register the appropriate collection of educational tip or setup list modules.
HomeTipsModulesProvider.registerTipModules(
@@ -3342,7 +3344,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt
SettingsNavigationFactory.createSettingsNavigation()
.startSettings(this, TabsSettings.class);
});
- moduleRegistry.registerModule(ModuleType.AUXILIARY_SEARCH, auxiliarySearchModuleBuilder);
+ moduleRegistry.registerModule(ModuleType.AUXILIARY_SEARCH, auxiliarySearchModuleBuilder, /*active*/ false);
mModuleRegistrySupplier.set(moduleRegistry);
}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java
@@ -22,9 +22,11 @@ import org.chromium.base.metrics.RecordHistogram;
import org.chromium.build.annotations.NullMarked;
import org.chromium.build.annotations.Nullable;
import org.chromium.chrome.R;
+import org.chromium.chrome.browser.BrowserRestartActivity;
import org.chromium.chrome.browser.ChromeInactivityTracker;
import org.chromium.chrome.browser.app.ChromeActivity;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.flags.cromite.sShowNtpAtStartupAndroid;
import org.chromium.chrome.browser.ntp.NewTabPage;
import org.chromium.chrome.browser.ntp_customization.NtpCustomizationUtils;
import org.chromium.chrome.browser.profiles.Profile;
@@ -128,14 +130,21 @@ public final class ReturnToChromeUtil {
Bundle bundle,
PersistableBundle persistableBundle,
ChromeInactivityTracker inactivityTracker) {
- // If the device is android desktop, don't show a NTP homepage.
- if (NtpCustomizationUtils.isNtpSimplificationEnabledOnDesktop()) {
+ // If the current session is due to recreated, don't show a NTP homepage.
+ if (isFromRecreate(bundle) || isFromUpdate(persistableBundle)) {
return false;
}
- // If the current session is due to recreated, don't show a NTP homepage.
- if (isFromRecreate(bundle) || isFromUpdate(persistableBundle)) {
+ if (!sShowNtpAtStartupAndroid.getInstance().isEnabled())
return false;
+
+ boolean isMainIntentFromLauncherOrRestart =
+ IntentUtils.isMainIntentFromLauncher(intent)
+ || IntentUtils.safeGetBooleanExtra(
+ intent, BrowserRestartActivity.EXTRA_RESTART, false);
+ if (isMainIntentFromLauncherOrRestart && inactivityTracker.isNewStartup()) {
+ inactivityTracker.setIsStartup(false);
+ return true;
}
// Checks whether to show the NTP homepage due to feature flag
@@ -246,7 +255,7 @@ public final class ReturnToChromeUtil {
TabModel currentTabModel,
TabCreator tabCreator,
HomeSurfaceTracker homeSurfaceTracker) {
- if (isIncognito || !shouldShowNtpHomeSurfaceOnStartup) {
+ if (isIncognito || !shouldShowNtpHomeSurfaceOnStartup || homeSurfaceTracker == null) {
return false;
}
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -1001,7 +1001,7 @@
Open a specific page or set of pages
</message>
<message name="IDS_SETTINGS_ON_STARTUP_CONTINUE_AND_OPEN_SPECIFIC" desc="Radio button option to continue where you left off and open a specific set of pages.">
- Continue where you left off and open a specific set of pages
+ Continue where you left off and open a New Tab page
</message>
<message name="IDS_SETTINGS_ON_STARTUP_USE_CURRENT" desc="Button to use current pages.">
Use current pages
diff --git a/chrome/browser/educational_tip/java/src/org/chromium/chrome/browser/educational_tip/HomeTipsModulesProvider.java b/chrome/browser/educational_tip/java/src/org/chromium/chrome/browser/educational_tip/HomeTipsModulesProvider.java
--- a/chrome/browser/educational_tip/java/src/org/chromium/chrome/browser/educational_tip/HomeTipsModulesProvider.java
+++ b/chrome/browser/educational_tip/java/src/org/chromium/chrome/browser/educational_tip/HomeTipsModulesProvider.java
@@ -43,10 +43,10 @@ public class HomeTipsModulesProvider {
if (moduleType == ModuleType.SETUP_LIST_TWO_CELL_CONTAINER) {
moduleRegistry.registerModule(
moduleType,
- new EducationalTipModuleTwoCellBuilder(moduleType, actionDelegate));
+ new EducationalTipModuleTwoCellBuilder(moduleType, actionDelegate), /*active*/ false);
} else {
moduleRegistry.registerModule(
- moduleType, new EducationalTipModuleBuilder(moduleType, actionDelegate));
+ moduleType, new EducationalTipModuleBuilder(moduleType, actionDelegate), /*active*/ false);
}
}
}
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -449,6 +449,7 @@ const base::Feature* const kFeaturesExposedToJava[] = {
&kSearchInCCTAlternateTapHandlingIfEnabledByEmbedder,
&kSearchInCCTIfEnabledByEmbedder,
&kSettingsMultiColumn,
+ &kShowNtpAtStartupAndroid,
&kSettingsSingleActivity,
&kShareCustomActionsInCCT,
&kShortCircuitUnfocusAnimation,
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sShowNtpAtStartupAndroid.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sShowNtpAtStartupAndroid.java
new file mode 100644
--- /dev/null
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sShowNtpAtStartupAndroid.java
@@ -0,0 +1,33 @@
+/*
+ This file is part of Cromite.
+
+ Cromite is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Cromite is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Cromite. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+package org.chromium.chrome.browser.flags.cromite;
+
+import org.chromium.components.cached_flags.CachedFlag;
+import org.chromium.chrome.browser.flags.ChromeFeatureMap;
+
+public class sShowNtpAtStartupAndroid {
+ private static final CachedFlag sInstance =
+ new CachedFlag(ChromeFeatureMap.getInstance(),
+ "ShowNtpAtStartupAndroid", false);
+
+ private sShowNtpAtStartupAndroid() {}
+
+ public static CachedFlag getInstance() {
+ return sInstance;
+ }
+}
diff --git a/chrome/browser/magic_stack/android/java/src/org/chromium/chrome/browser/magic_stack/HomeModulesMediator.java b/chrome/browser/magic_stack/android/java/src/org/chromium/chrome/browser/magic_stack/HomeModulesMediator.java
--- a/chrome/browser/magic_stack/android/java/src/org/chromium/chrome/browser/magic_stack/HomeModulesMediator.java
+++ b/chrome/browser/magic_stack/android/java/src/org/chromium/chrome/browser/magic_stack/HomeModulesMediator.java
@@ -125,6 +125,14 @@ public class HomeModulesMediator {
// 0. Get the set of currently enabled (eligible) modules.
mEnabledModuleSet = null;
Set<Integer> enabledModuleSet = getFilteredEnabledModuleSet();
+ List<Integer> enabledModuleList = new ArrayList<>(enabledModuleSet);
+
+ buildModulesAndShow(
+ enabledModuleList,
+ moduleDelegate,
+ onHomeModulesChangedCallback,
+ /*durationMs*/ 0);
+ if ((true)) return;
// 1. Get the sorted list of manually ranked modules, filtered by eligibility.
List<Integer> manuallyRankedModules = getSortedManuallyRankedModules(enabledModuleSet);
diff --git a/chrome/browser/magic_stack/android/java/src/org/chromium/chrome/browser/magic_stack/ModuleRegistry.java b/chrome/browser/magic_stack/android/java/src/org/chromium/chrome/browser/magic_stack/ModuleRegistry.java
--- a/chrome/browser/magic_stack/android/java/src/org/chromium/chrome/browser/magic_stack/ModuleRegistry.java
+++ b/chrome/browser/magic_stack/android/java/src/org/chromium/chrome/browser/magic_stack/ModuleRegistry.java
@@ -68,7 +68,8 @@ public class ModuleRegistry {
* @param moduleType The type of the module.
* @param builder The object of the module builder.
*/
- public void registerModule(@ModuleType int moduleType, ModuleProviderBuilder builder) {
+ public void registerModule(@ModuleType int moduleType, ModuleProviderBuilder builder, boolean active) {
+ if (!active) return;
mModuleBuildersMap.put(moduleType, builder);
}
diff --git a/chrome/browser/performance_manager/policies/background_tab_loading_policy.cc b/chrome/browser/performance_manager/policies/background_tab_loading_policy.cc
--- a/chrome/browser/performance_manager/policies/background_tab_loading_policy.cc
+++ b/chrome/browser/performance_manager/policies/background_tab_loading_policy.cc
@@ -382,6 +382,7 @@ base::DictValue BackgroundTabLoadingPolicy::DescribeSystemNodeData(
bool BackgroundTabLoadingPolicy::ShouldLoad(
const PageNodeToLoadData& page_node_data) {
+ if ((true)) return false;
if (tab_loads_started_ < min_tabs_to_load_) {
return true;
}
@@ -583,6 +584,7 @@ void BackgroundTabLoadingPolicy::MaybeLoadSomeTabs() {
// Continue to load tabs while possible. This is in a loop with a
// recalculation of GetMaxNewTabLoads() as reentrancy can cause conditions
// to change as each tab load is initiated.
+ if ((false))
while (GetMaxNewTabLoads() > 0) {
LoadNextTab();
}
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
@@ -964,6 +964,8 @@ public final class ChromePreferenceKeys {
public static final String TABBED_ACTIVITY_LAST_BACKGROUNDED_TIME_MS_PREF =
"ChromeTabbedActivity.BackgroundTimeMs";
+ public static final String TABBED_ACTIVITY_IS_STARTUP =
+ "ChromeTabbedActivity.IsStartup";
public static final String TABBED_ACTIVITY_LAST_VISIBLE_TIME_MS =
"Chrome.StartSurface.LastVisibleTimeMs";
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
@@ -114,6 +114,7 @@ public class LegacyChromePreferenceKeys {
ChromePreferenceKeys.SNAPSHOT_DATABASE_REMOVED,
ChromePreferenceKeys.SYNC_ERROR_MESSAGE_SHOWN_AT_TIME,
ChromePreferenceKeys.TABBED_ACTIVITY_LAST_BACKGROUNDED_TIME_MS_PREF,
+ ChromePreferenceKeys.TABBED_ACTIVITY_IS_STARTUP,
ChromePreferenceKeys.TABMODEL_ACTIVE_TAB_ID,
ChromePreferenceKeys.TABMODEL_HAS_COMPUTED_MAX_ID,
ChromePreferenceKeys.TABMODEL_HAS_RUN_FILE_MIGRATION,
diff --git a/chrome/browser/resources/settings/on_startup_page/on_startup_page.ts b/chrome/browser/resources/settings/on_startup_page/on_startup_page.ts
--- a/chrome/browser/resources/settings/on_startup_page/on_startup_page.ts
+++ b/chrome/browser/resources/settings/on_startup_page/on_startup_page.ts
@@ -115,6 +115,7 @@ export class SettingsOnStartupPageElement extends
*/
private showContinueAndOpenSpecific_(pref: chrome.settingsPrivate.PrefObject):
boolean {
+ if ((true)) return true;
return pref.enforcement === chrome.settingsPrivate.Enforcement.ENFORCED ||
pref.enforcement === chrome.settingsPrivate.Enforcement.RECOMMENDED;
}
diff --git a/chrome/browser/segmentation_platform/android/java/src/org/chromium/chrome/browser/segmentation_platform/client_util/HomeModulesRankingHelper.java b/chrome/browser/segmentation_platform/android/java/src/org/chromium/chrome/browser/segmentation_platform/client_util/HomeModulesRankingHelper.java
--- a/chrome/browser/segmentation_platform/android/java/src/org/chromium/chrome/browser/segmentation_platform/client_util/HomeModulesRankingHelper.java
+++ b/chrome/browser/segmentation_platform/android/java/src/org/chromium/chrome/browser/segmentation_platform/client_util/HomeModulesRankingHelper.java
@@ -51,7 +51,6 @@ public final class HomeModulesRankingHelper {
* @param moduleLabel the module label to notify the module ranker
*/
public static void notifyCardInteracted(Profile profile, String moduleLabel) {
- HomeModulesRankingHelperJni.get().notifyCardInteracted(profile, moduleLabel);
}
/**
@@ -61,7 +60,6 @@ public final class HomeModulesRankingHelper {
* @param moduleLabel the module label to notify the module ranker
*/
public static void notifyCardShown(Profile profile, String moduleLabel) {
- HomeModulesRankingHelperJni.get().notifyCardShown(profile, moduleLabel);
}
/**
diff --git a/chrome/browser/sessions/session_restore.cc b/chrome/browser/sessions/session_restore.cc
--- a/chrome/browser/sessions/session_restore.cc
+++ b/chrome/browser/sessions/session_restore.cc
@@ -933,7 +933,13 @@ class SessionRestoreImpl : public BrowserCollectionObserver {
// be selected as ShowBrowser() will load the selected tab.
bool is_selected_tab =
(initial_tab_count == 0) && (i == selected_tab_index);
-
+ if (is_selected_tab && !startup_tabs_.empty()) {
+ is_selected_tab = false;
+ if (browser != browser_) {
+ browser->set_is_session_restore(false);
+ did_show_browser = true;
+ }
+ }
// Convert the last active time because WebContents needs a TimeTicks.
const base::TimeDelta delta = tab.last_active_time - epoch_time;
const base::TimeTicks last_active_time_ticks = epoch_time_ticks + delta;
@@ -1253,6 +1259,7 @@ class SessionRestoreImpl : public BrowserCollectionObserver {
}
if (last_normal_browser && !normal_startup_tabs.empty()) {
AppendURLsToBrowser(last_normal_browser, normal_startup_tabs);
+ last_normal_browser->window()->Show();
}
if (!startup_tabs_from_last_and_urls_pref.empty()) {
Browser::CreateParams params =
diff --git a/chrome/browser/single_tab/android/java/res/layout/single_tab_module_layout.xml b/chrome/browser/single_tab/android/java/res/layout/single_tab_module_layout.xml
--- a/chrome/browser/single_tab/android/java/res/layout/single_tab_module_layout.xml
+++ b/chrome/browser/single_tab/android/java/res/layout/single_tab_module_layout.xml
@@ -67,12 +67,12 @@ found in the LICENSE file.
<LinearLayout
android:layout_width="wrap_content"
- android:layout_height="match_parent">
+ android:layout_height="@dimen/single_tab_module_tab_thumbnail_size">
<RelativeLayout
android:id="@+id/tab_images"
android:layout_width="wrap_content"
- android:layout_height="match_parent"
+ android:layout_height="wrap_content"
android:background="@drawable/single_tab_thumbnail_background"
tools:ignore="UselessParent">
@@ -85,8 +85,6 @@ found in the LICENSE file.
android:layout_marginStart="@dimen/single_tab_thumbnail_margin"
android:layout_marginEnd="@dimen/single_tab_thumbnail_margin"
android:layout_alignParentStart="true"
- android:layout_alignParentBottom="true"
- android:layout_alignParentTop="true"
android:adjustViewBounds="false"
android:gravity="center_horizontal"
android:importantForAccessibility="no"
@@ -117,7 +115,7 @@ found in the LICENSE file.
<LinearLayout
android:id="@+id/tab_info"
android:layout_width="0dp"
- android:layout_height="match_parent"
+ android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingStart="@dimen/single_tab_module_padding_bottom"
android:baselineAligned="false"
@@ -125,21 +123,22 @@ found in the LICENSE file.
<TextView
android:id="@+id/tab_title_view"
android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1"
+ android:layout_height="wrap_content"
android:ellipsize="end"
android:gravity="start|top"
- android:maxLines="3"
+ android:singleLine="true"
android:textAppearance="@style/TextAppearance.Headline2Thick.Secondary"
tools:ignore="NestedWeights"/>
<TextView
android:id="@+id/tab_url_view"
+ android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="2dp"
+ android:minLines="6"
android:gravity="start"
- android:singleLine="true"
+ android:singleLine="false"
android:textAppearance="@style/TextAppearance.TextSmall.Secondary" />
</LinearLayout>
diff --git a/chrome/browser/single_tab/android/java/src/org/chromium/chrome/browser/single_tab/SingleTabSwitcherCoordinator.java b/chrome/browser/single_tab/android/java/src/org/chromium/chrome/browser/single_tab/SingleTabSwitcherCoordinator.java
--- a/chrome/browser/single_tab/android/java/src/org/chromium/chrome/browser/single_tab/SingleTabSwitcherCoordinator.java
+++ b/chrome/browser/single_tab/android/java/src/org/chromium/chrome/browser/single_tab/SingleTabSwitcherCoordinator.java
@@ -182,7 +182,7 @@ public class SingleTabSwitcherCoordinator implements ModuleProvider {
/** Returns the layout resource id for the single tab card. */
public static int getModuleLayoutId() {
- return R.layout.single_tab_module_layout;
+ return R.layout.single_tab_module_layout; // (uazo) check this
}
public void destroy() {
diff --git a/chrome/browser/single_tab/android/java/src/org/chromium/chrome/browser/single_tab/SingleTabSwitcherOnNtpMediator.java b/chrome/browser/single_tab/android/java/src/org/chromium/chrome/browser/single_tab/SingleTabSwitcherOnNtpMediator.java
--- a/chrome/browser/single_tab/android/java/src/org/chromium/chrome/browser/single_tab/SingleTabSwitcherOnNtpMediator.java
+++ b/chrome/browser/single_tab/android/java/src/org/chromium/chrome/browser/single_tab/SingleTabSwitcherOnNtpMediator.java
@@ -110,6 +110,7 @@ public class SingleTabSwitcherOnNtpMediator {
mSingleTabCardClickedCallback = null;
}
});
+ if (mSeeMoreLinkClickedCallback != null)
mPropertyModel.set(
SEE_MORE_LINK_CLICK_LISTENER,
() -> {
@@ -272,14 +273,14 @@ public class SingleTabSwitcherOnNtpMediator {
public void onPageLoadFinished(Tab tab, GURL url) {
super.onPageLoadFinished(tab, url);
mPropertyModel.set(TITLE, tab.getTitle());
- mPropertyModel.set(URL, getDomainUrl(tab.getUrl()));
+ mPropertyModel.set(URL, tab.getUrl().getPossiblyInvalidSpec());
tab.removeObserver(this);
}
};
mMostRecentTab.addObserver(tabObserver);
} else {
mPropertyModel.set(TITLE, mMostRecentTab.getTitle());
- mPropertyModel.set(URL, getDomainUrl(mMostRecentTab.getUrl()));
+ mPropertyModel.set(URL, mMostRecentTab.getUrl().getPossiblyInvalidSpec());
}
}
diff --git a/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/show-ntp-at-startup.grdp b/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/show-ntp-at-startup.grdp
new file mode 100644
--- /dev/null
+++ b/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/show-ntp-at-startup.grdp
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
+ <message name="IDS_SHOW_NTP_AT_STARTUP_TITLE" desc="Text for 'Show NTP at startup' settings option.">
+ Show NTP at startup
+ </message>
+ <message name="IDS_SHOW_NTP_AT_STARTUP_SUMMARY" desc="Summary text for 'Show NTP at startup' settings option.">
+ Enable showing a NewTabPage at startup and allows selection of the last open tab
+ </message>
+</grit-part>
diff --git a/chrome/browser/ui/browser_tabrestore.cc b/chrome/browser/ui/browser_tabrestore.cc
--- a/chrome/browser/ui/browser_tabrestore.cc
+++ b/chrome/browser/ui/browser_tabrestore.cc
@@ -243,7 +243,7 @@ WebContents* AddRestoredTabImpl(std::unique_ptr<WebContents> web_contents,
// Immediate load if the browser activeness is true or unknown. That is, do
// not do immediate load for browsers that are known to be inactive.
- bool should_load = is_active_browser.value_or(true);
+ bool should_load = false;
// On OS_MAC, `LoadRestoredTabIfVisible` by default so that its tab loading
// behaves like other platforms to make FirstWebContentsProfiler wor
diff --git a/chrome/browser/ui/startup/startup_browser_creator_impl.cc b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
--- a/chrome/browser/ui/startup/startup_browser_creator_impl.cc
+++ b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
@@ -650,6 +650,14 @@ StartupBrowserCreatorImpl::DetermineStartupTabs(
if (prefs_tabs.empty()) {
AppendTabs(provider.GetNewTabPageTabs(*command_line_, profile_), &tabs);
}
+
+ SessionStartupPref session_startup_pref =
+ SessionStartupPref::GetStartupPref(profile_);
+ if (session_startup_pref.type == SessionStartupPref::LAST_AND_URLS) {
+ StartupTabs new_tabs;
+ new_tabs.emplace_back(GURL(chrome::kChromeUINewTabURL));
+ AppendTabs(new_tabs, &tabs);
+ }
}
// Maybe add any tabs which the user has previously pinned.
diff --git a/cromite_flags/chrome/browser/about_flags_cc/show-ntp-at-startup.inc b/cromite_flags/chrome/browser/about_flags_cc/show-ntp-at-startup.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/about_flags_cc/show-ntp-at-startup.inc
@@ -0,0 +1,12 @@
+#if BUILDFLAG(IS_ANDROID)
+
+#ifdef FLAG_SECTION
+
+ {"enable-show-ntp-at-startup",
+ "Show a NewTabPage at startup",
+ "Enable showing a NewTabPage at startup after leaving Cromite for a while.", kOsAndroid,
+ FEATURE_VALUE_TYPE(chrome::android::kShowNtpAtStartupAndroid)},
+
+#endif
+
+#endif
diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/show-ntp-at-startup.inc b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/show-ntp-at-startup.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/show-ntp-at-startup.inc
@@ -0,0 +1,5 @@
+SET_CROMITE_FEATURE_ENABLED(kStartSurfaceReturnTime);
+
+CROMITE_FEATURE(kShowNtpAtStartupAndroid,
+ "ShowNtpAtStartupAndroid",
+ base::FEATURE_ENABLED_BY_DEFAULT);
diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/show-ntp-at-startup.inc b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/show-ntp-at-startup.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/show-ntp-at-startup.inc
@@ -0,0 +1 @@
+BASE_DECLARE_FEATURE(kShowNtpAtStartupAndroid);
--