Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2146)

Unified Diff: chrome/browser/ui/startup/startup_browser_creator_impl.cc

Issue 2164033002: Refactoring startup logic for upcoming FRE changes (non-Win 10). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Using new welcome page URL Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/startup/startup_browser_creator_impl.cc
diff --git a/chrome/browser/ui/startup/startup_browser_creator_impl.cc b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
index 272d6786e7ee274b7e52a5da8436f06aa65271a6..ba04dc8a04f303328f00ddc44affec01e5f1b895 100644
--- a/chrome/browser/ui/startup/startup_browser_creator_impl.cc
+++ b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
@@ -18,6 +18,7 @@
#include "base/command_line.h"
#include "base/compiler_specific.h"
#include "base/environment.h"
+#include "base/feature_list.h"
#include "base/lazy_instance.h"
#include "base/metrics/histogram_macros.h"
#include "base/metrics/statistics_recorder.h"
@@ -70,6 +71,7 @@
#include "chrome/browser/ui/startup/obsolete_system_infobar_delegate.h"
#include "chrome/browser/ui/startup/session_crashed_infobar_delegate.h"
#include "chrome/browser/ui/startup/startup_browser_creator.h"
+#include "chrome/browser/ui/startup/startup_features.h"
#include "chrome/browser/ui/tabs/pinned_tab_codec.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/chrome_constants.h"
@@ -260,6 +262,12 @@ const Extension* GetPlatformApp(Profile* profile,
return extension && extension->is_platform_app() ? extension : NULL;
}
+// Appends the contents of |from| to the end of |to|.
+void AppendTabs(const StartupTabs& from, StartupTabs* to) {
+ if (!from.empty())
+ to->insert(to->end(), from.begin(), from.end());
+}
+
} // namespace
namespace internals {
@@ -346,7 +354,11 @@ bool StartupBrowserCreatorImpl::Launch(Profile* profile,
RecordLaunchModeHistogram(urls_to_open.empty() ?
LM_TO_BE_DECIDED : LM_WITH_URLS);
- ProcessLaunchURLs(process_startup, urls_to_open);
+ if (base::FeatureList::IsEnabled(features::kUseConsolidatedStartupFlow)) {
Peter Kasting 2016/10/06 05:49:08 Nit: No {}
+ ProcessLaunchUrlsUsingConsolidatedFlow(process_startup, urls_to_open);
+ } else {
+ ProcessLaunchURLs(process_startup, urls_to_open);
+ }
if (command_line_.HasSwitch(switches::kInstallChromeApp)) {
install_chrome_app::InstallChromeApp(
@@ -508,15 +520,6 @@ void StartupBrowserCreatorImpl::ProcessLaunchURLs(
// Determine whether or not this launch must include the welcome page.
InitializeWelcomeRunType(urls_to_open);
-// TODO(tapted): Move this to startup_browser_creator_win.cc after refactor.
-#if defined(OS_WIN)
- if (base::win::GetVersion() >= base::win::VERSION_WIN8) {
- // See if there are apps for this profile that should be launched on startup
- // due to a switch from Metro mode.
- app_metro_launch::HandleAppLaunchForMetroRestart(profile_);
- }
-#endif
-
if (process_startup && ProcessStartupURLs(urls_to_open)) {
// ProcessStartupURLs processed the urls, nothing else to do.
return;
@@ -568,6 +571,105 @@ void StartupBrowserCreatorImpl::ProcessLaunchURLs(
AddInfoBarsIfNecessary(browser, is_process_startup);
}
+void StartupBrowserCreatorImpl::ProcessLaunchUrlsUsingConsolidatedFlow(
+ bool process_startup,
+ const std::vector<GURL>& cmd_line_urls) {
+ // Don't open any browser windows if starting up in "background mode".
+ if (process_startup && command_line_.HasSwitch(switches::kNoStartupWindow))
+ return;
+
+ StartupTabs cmd_line_tabs;
+ UrlsToTabs(cmd_line_urls, &cmd_line_tabs);
+
+ bool is_incognito = IncognitoModePrefs::ShouldLaunchIncognito(
+ command_line_, profile_->GetPrefs());
+ bool is_post_crash_launch = HasPendingUncleanExit(profile_);
+ StartupTabs tabs =
+ DetermineStartupTabs(StartupTabProviderImpl(), cmd_line_tabs,
+ is_incognito, is_post_crash_launch);
+
+ // TODO(tmartino): If this is not process startup, attempt to restore
+ // asynchronously and return here. This logic is self-contained in
+ // SessionService and therefore can't be combined with the other Browser
+ // creation logic.
+
+ // TODO(tmartino): Function which determines what behavior of session
+ // restore, if any, is necessary, and passes the result to a new function
+ // which opens tabs in a restored or newly-created Browser accordingly.
+ // Incorporates code from ProcessStartupUrls.
+
+ Browser* browser = OpenTabsInBrowser(nullptr, process_startup, tabs);
+
+ // Finally, add info bars.
+ AddInfoBarsIfNecessary(
+ browser, process_startup ? chrome::startup::IS_PROCESS_STARTUP
+ : chrome::startup::IS_NOT_PROCESS_STARTUP);
+}
+
+StartupTabs StartupBrowserCreatorImpl::DetermineStartupTabs(
+ const StartupTabProvider& provider,
+ const StartupTabs& cmd_line_tabs,
+ bool is_incognito,
+ bool is_post_crash_launch) {
+ StartupTabs tabs;
+
+ // Only the New Tab Page or command line URLs may be shown in incognito mode.
+ // A similar policy exists for crash recovery launches, to prevent getting the
+ // user stuck in a crash loop.
+ if (is_incognito || is_post_crash_launch) {
+ if (cmd_line_tabs.empty()) {
+ tabs.emplace_back(GURL(chrome::kChromeUINewTabURL), false);
+ return tabs;
+ }
+ return cmd_line_tabs;
Peter Kasting 2016/10/06 05:49:08 Nit: Hmm, I made an error in the previous suggesti
tmartino 2016/10/06 18:27:28 Went back to the old way, mostly out of preference
+ }
+
Peter Kasting 2016/10/06 05:49:08 Nit: Some reordering of these next few blocks prod
tmartino 2016/10/06 18:27:28 This is great! Thanks.
+ // A Master Preferences file provided with this distribution may specify
+ // tabs to be displayed on first run, overriding any other tabs which would
+ // normally be shown. Only command line tabs take priority.
+ if (cmd_line_tabs.empty()) {
+ StartupTabs distribution_tabs =
Peter Kasting 2016/10/06 05:49:08 Nit: Could just use |tabs| here (but not if you ta
+ provider.GetDistributionFirstRunTabs(browser_creator_);
+ if (!distribution_tabs.empty()) {
Peter Kasting 2016/10/06 05:49:08 Nit: No {}
+ return distribution_tabs;
+ }
+ }
+
+ // A trigger on a profile may indicate that we should show a tab which
+ // offers to reset the user's settings. Unlike other policy-based tabs,
+ // this may be shown alongside command line tabs, and always appears first.
+ AppendTabs(provider.GetResetTriggerTabs(profile_), &tabs);
+
+ // URLs passed at the command line supersede onboarding content as well as
+ // user-specified defaults.
+ if (!cmd_line_tabs.empty()) {
+ AppendTabs(cmd_line_tabs, &tabs);
+ return tabs;
+ }
+
+ // Policies for onboarding (e.g., first run) may show promotional and
+ // introductory content depending on a number of system status factors,
+ // including OS and whether or not this is First Run.
+ StartupTabs onboarding_tabs = provider.GetOnboardingTabs();
+ AppendTabs(onboarding_tabs, &tabs);
+
+ // If the user has set the preference indicating URLs to show on opening,
+ // read and add those.
+ StartupTabs prefs_tabs = provider.GetPreferencesTabs();
+ AppendTabs(prefs_tabs, &tabs);
+
+ // Potentially add the New Tab Page. Onboarding content is designed to
+ // replace (and eventually funnel the user to) the NTP. Likewise, URLs read
+ // from preferences are explicitly meant to override showing the NTP.
+ if (onboarding_tabs.empty() && prefs_tabs.empty())
+ tabs.emplace_back(GURL(chrome::kChromeUINewTabURL), false);
+
+ // Add any tabs which the user has previously pinned.
+ AppendTabs(provider.GetPinnedTabs(), &tabs);
+
+ return tabs;
+}
+
bool StartupBrowserCreatorImpl::ProcessStartupURLs(
const std::vector<GURL>& urls_to_open) {
VLOG(1) << "StartupBrowserCreatorImpl::ProcessStartupURLs";
@@ -829,9 +931,6 @@ void StartupBrowserCreatorImpl::AddInfoBarsIfNecessary(
void StartupBrowserCreatorImpl::AddStartupURLs(
std::vector<GURL>* startup_urls) const {
- // TODO(atwilson): Simplify the logic that decides which tabs to open on
- // start-up and make it more consistent. http://crbug.com/248883
-
// If we have urls specified by the first run master preferences use them
// and nothing else.
if (browser_creator_ && startup_urls->empty()) {

Powered by Google App Engine
This is Rietveld 408576698