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 92e1e9bcbef548cfef54c3fc71bbd5c7e94bc40c..29a3e2417554c1ebb86bdf8c539ab868264bb371 100644 |
--- a/chrome/browser/ui/startup/startup_browser_creator_impl.cc |
+++ b/chrome/browser/ui/startup/startup_browser_creator_impl.cc |
@@ -130,6 +130,8 @@ using extensions::Extension; |
namespace { |
+std::vector<GURL>* g_startup_urls = nullptr; |
+ |
// Utility functions ---------------------------------------------------------- |
enum LaunchMode { |
@@ -435,6 +437,25 @@ Browser* StartupBrowserCreatorImpl::OpenURLsInBrowser( |
return OpenTabsInBrowser(browser, process_startup, tabs); |
} |
+// static |
+void StartupBrowserCreatorImpl::OpenURLsAfterSessionRestore( |
+ const std::vector<GURL>& urls) { |
+ // Save URLs for deferred opening |
+ if (!g_startup_urls) |
+ g_startup_urls = new std::vector<GURL>(); |
+ *g_startup_urls = urls; |
+} |
+ |
+void StartupBrowserCreatorImpl::OpenDeferredURLs(Browser* browser) { |
+ if (g_startup_urls && !g_startup_urls->empty()) { |
+ StartupBrowserCreator::in_synchronous_profile_launch_ = true; |
+ OpenURLsInBrowser(browser, false, *g_startup_urls); |
+ StartupBrowserCreator::in_synchronous_profile_launch_ = false; |
+ delete g_startup_urls; |
+ g_startup_urls = nullptr; |
+ } |
+} |
+ |
Browser* StartupBrowserCreatorImpl::OpenTabsInBrowser(Browser* browser, |
bool process_startup, |
const StartupTabs& tabs) { |
@@ -762,8 +783,10 @@ Browser* StartupBrowserCreatorImpl::RestoreOrCreateBrowser( |
if (behavior == BrowserOpenBehavior::SYNCHRONOUS_RESTORE) { |
browser = SessionRestore::RestoreSession(profile_, nullptr, restore_options, |
TabsToUrls(tabs)); |
- if (browser) |
+ if (browser) { |
+ OpenDeferredURLs(browser); |
return browser; |
+ } |
} else if (behavior == BrowserOpenBehavior::USE_EXISTING) { |
browser = chrome::FindTabbedBrowser(profile_, process_startup); |
} |
@@ -1027,12 +1050,15 @@ bool StartupBrowserCreatorImpl::ProcessStartupURLs( |
// should never get here. |
Browser* browser = SessionRestore::RestoreSession( |
profile_, NULL, restore_behavior, adjusted_urls); |
- |
+ OpenDeferredURLs(browser); |
AddInfoBarsIfNecessary(browser, chrome::startup::IS_PROCESS_STARTUP); |
return true; |
} |
Browser* browser = ProcessSpecifiedURLs(urls_to_open); |
+ if (pref.type == SessionStartupPref::URLS) { |
+ OpenDeferredURLs(browser); |
+ } |
if (!browser) |
return false; |