Index: chrome/browser/ui/startup/startup_tab_provider.cc |
diff --git a/chrome/browser/ui/startup/startup_tab_provider.cc b/chrome/browser/ui/startup/startup_tab_provider.cc |
index 7ba207290c6578779ebebbf6cb0478b5ab8c1e7e..c3aaac70b7bbe9977bbde058d627d38934769f65 100644 |
--- a/chrome/browser/ui/startup/startup_tab_provider.cc |
+++ b/chrome/browser/ui/startup/startup_tab_provider.cc |
@@ -9,8 +9,11 @@ |
#include "chrome/browser/profile_resetter/triggered_profile_resetter.h" |
#include "chrome/browser/profile_resetter/triggered_profile_resetter_factory.h" |
#include "chrome/browser/signin/signin_manager_factory.h" |
+#include "chrome/browser/ui/browser.h" |
+#include "chrome/browser/ui/browser_list.h" |
#include "chrome/browser/ui/chrome_pages.h" |
#include "chrome/browser/ui/tabs/pinned_tab_codec.h" |
+#include "chrome/browser/ui/tabs/tab_strip_model.h" |
#include "chrome/common/pref_names.h" |
#include "chrome/common/url_constants.h" |
#include "chrome/grit/locale_settings.h" |
@@ -26,6 +29,10 @@ |
#endif |
StartupTabs StartupTabProviderImpl::GetOnboardingTabs(Profile* profile) const { |
+// Onboarding content has not been launched on Chrome OS. |
+#if defined(OS_CHROMEOS) |
+ return StartupTabs(); |
+#else |
if (!profile) |
return StartupTabs(); |
@@ -50,10 +57,11 @@ StartupTabs StartupTabProviderImpl::GetOnboardingTabs(Profile* profile) const { |
has_seen_win10_promo, is_signed_in, |
is_default_browser); |
} |
-#endif |
+#endif // defined(OS_WIN) |
return CheckStandardOnboardingTabPolicy(is_first_run, has_seen_welcome_page, |
is_signed_in); |
+#endif // defined(OS_CHROMEOS) |
} |
StartupTabs StartupTabProviderImpl::GetDistributionFirstRunTabs( |
@@ -86,8 +94,20 @@ StartupTabs StartupTabProviderImpl::GetPinnedTabs( |
StartupTabs StartupTabProviderImpl::GetPreferencesTabs( |
const base::CommandLine& command_line, |
Profile* profile) const { |
+ // Attempt to find an existing, non-empty tabbed browser for this profile. If |
+ // one exists, preferences tabs are not used. |
+ BrowserList* browser_list = BrowserList::GetInstance(); |
+ auto other_tabbed_browser = std::find_if( |
+ browser_list->begin(), browser_list->end(), [profile](Browser* browser) { |
+ return browser->profile() == profile && browser->is_type_tabbed() && |
+ !browser->tab_strip_model()->empty(); |
+ }); |
+ bool profile_has_other_tabbed_browser = |
+ other_tabbed_browser != browser_list->end(); |
+ |
return CheckPreferencesTabPolicy( |
- StartupBrowserCreator::GetSessionStartupPref(command_line, profile)); |
+ StartupBrowserCreator::GetSessionStartupPref(command_line, profile), |
+ profile_has_other_tabbed_browser); |
} |
StartupTabs StartupTabProviderImpl::GetNewTabPageTabs( |
@@ -167,9 +187,11 @@ StartupTabs StartupTabProviderImpl::CheckPinnedTabPolicy( |
// static |
StartupTabs StartupTabProviderImpl::CheckPreferencesTabPolicy( |
- const SessionStartupPref& pref) { |
+ const SessionStartupPref& pref, |
+ bool profile_has_other_tabbed_browser) { |
StartupTabs tabs; |
- if (pref.type == SessionStartupPref::Type::URLS && !pref.urls.empty()) { |
+ if (pref.type == SessionStartupPref::Type::URLS && !pref.urls.empty() && |
+ !profile_has_other_tabbed_browser) { |
for (const auto& url : pref.urls) |
tabs.push_back(StartupTab(url, false)); |
} |