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

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

Issue 2798143004: Fix for URL opening code (Closed)
Patch Set: Created 3 years, 8 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 92e1e9bcbef548cfef54c3fc71bbd5c7e94bc40c..d98b5765441bdc6ff089f8b79bedddab78cb3157 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;
Avi (use Gerrit) 2017/04/06 15:54:42 Why would this need to be global? Can't it be an i
eugenebng 2017/04/10 11:54:08 This cannot be an instance variable, because diffe
+
// Utility functions ----------------------------------------------------------
enum LaunchMode {
@@ -435,6 +437,59 @@ Browser* StartupBrowserCreatorImpl::OpenURLsInBrowser(
return OpenTabsInBrowser(browser, process_startup, tabs);
}
+void StartupBrowserCreatorImpl::OpenURLsAfterSessionRestore(
+ Browser* browser,
+ bool process_startup,
+ 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;
+}
+
+bool StartupBrowserCreatorImpl::WillRestoreSession(
Avi (use Gerrit) 2017/04/06 15:54:42 This seems like a bunch of logic that must already
gab 2017/04/06 16:02:21 That's probably true and if you can avoid touching
gab 2017/04/06 16:02:21 That's probably true and if you can avoid touching
eugenebng 2017/04/10 11:54:08 True, this logic was taken from conditions for cal
+ Browser* browser,
+ Profile* profile,
+ bool process_startup,
+ const std::vector<GURL>& urls) {
+ // First condition.
+ BrowserOpenBehaviorOptions behavior_options = 0;
+ bool is_post_crash_launch = HasPendingUncleanExit(profile);
+ if (process_startup)
+ behavior_options |= PROCESS_STARTUP;
+ if (is_post_crash_launch)
+ behavior_options |= IS_POST_CRASH_LAUNCH;
+ if (command_line_.HasSwitch(switches::kRestoreLastSession))
+ behavior_options |= HAS_RESTORE_SWITCH;
+ if (command_line_.HasSwitch(switches::kOpenInNewWindow))
+ behavior_options |= HAS_NEW_WINDOW_SWITCH;
+ if (!urls.empty())
+ behavior_options |= HAS_CMD_LINE_TABS;
+ BrowserOpenBehavior behavior = DetermineBrowserOpenBehavior(
+ StartupBrowserCreator::GetSessionStartupPref(command_line_, profile),
+ behavior_options);
+ if (behavior == BrowserOpenBehavior::SYNCHRONOUS_RESTORE)
+ return true;
+ // Second contition.
+ SessionStartupPref pref =
+ StartupBrowserCreator::GetSessionStartupPref(command_line_, profile);
+ if (pref.type == SessionStartupPref::LAST && !is_first_run_&&
+ (!(profile->GetLastSessionExitType() == Profile::EXIT_CRASHED) ||
+ command_line_.HasSwitch(switches::kRestoreLastSession)))
+ return true;
+ return false;
+}
+
+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 +817,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,7 +1084,7 @@ 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;
}

Powered by Google App Engine
This is Rietveld 408576698