Chromium Code Reviews| Index: chrome/browser/app_controller_mac.mm |
| diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm |
| index 434e3e72ba261b284c2b3360666dd258e6be8b6e..2f8f2b59f78ed717f266fffea33803cc26de9bbb 100644 |
| --- a/chrome/browser/app_controller_mac.mm |
| +++ b/chrome/browser/app_controller_mac.mm |
| @@ -213,7 +213,6 @@ bool IsProfileSignedOut(Profile* profile) { |
| - (void)updateConfirmToQuitPrefMenuItem:(NSMenuItem*)item; |
| - (void)updateDisplayMessageCenterPrefMenuItem:(NSMenuItem*)item; |
| - (void)registerServicesMenuTypesTo:(NSApplication*)app; |
| -- (void)openUrls:(const std::vector<GURL>&)urls; |
| - (void)getUrl:(NSAppleEventDescriptor*)event |
| withReply:(NSAppleEventDescriptor*)reply; |
| - (void)windowLayeringDidChange:(NSNotification*)inNotification; |
| @@ -223,6 +222,20 @@ bool IsProfileSignedOut(Profile* profile) { |
| - (BOOL)shouldQuitWithInProgressDownloads; |
| - (void)executeApplication:(id)sender; |
| - (void)profileWasRemoved:(const base::FilePath&)profilePath; |
| + |
| +// Opens a tab for each GURL in |urls|. |
| +- (void)openUrls:(const std::vector<GURL>&)urls; |
| + |
| +// This class cannot open urls until startup has finished. The urls that cannot |
| +// be opened are cached in |startupUrls_|. This method must be called exactly |
| +// once after startup has completed. It opens the urls in |startupUrls_|, and |
| +// clears |startupUrls_|. |
| +- (void)openStartupUrls; |
| + |
| +// Opens a tab for each GURL in |urls|. If there exactly 1 tab open before this |
|
Avi (use Gerrit)
2014/10/29 14:38:59
"If there is exactly one tab"...
erikchen
2014/10/29 17:18:02
Done.
|
| +// method is called, and that tab is the NTP, then this method closes the NTP |
| +// after all the |urls| have been opened. |
| +- (void)openUrlsReplacingNTP:(const std::vector<GURL>&)urls; |
| @end |
| class AppControllerProfileObserver : public ProfileInfoCacheObserver { |
| @@ -660,6 +673,15 @@ class AppControllerProfileObserver : public ProfileInfoCacheObserver { |
| } |
| - (void)openStartupUrls { |
| + DCHECK(startupComplete_); |
| + [self openUrlsReplacingNTP:startupUrls_]; |
| + startupUrls_.clear(); |
| +} |
| + |
| +- (void)openUrlsReplacingNTP:(const std::vector<GURL>&)urls { |
| + if (urls.empty()) |
| + return; |
| + |
| // On Mac, the URLs are passed in via Cocoa, not command line. The Chrome |
| // NSApplication is created in MainMessageLoop, and then the shortcut urls |
| // are passed in via Apple events. At this point, the first browser is |
| @@ -667,8 +689,12 @@ class AppControllerProfileObserver : public ProfileInfoCacheObserver { |
| // before PreMainMessageLoop to capture shortcut URL events, it may cause |
| // more problems because it relies on things created in PreMainMessageLoop |
| // and may break existing message loop design. |
| - if (startupUrls_.empty()) |
| + |
| + // If the browser hasn't started yet, just queue up the URLs. |
| + if (!startupComplete_) { |
| + startupUrls_.insert(startupUrls_.end(), urls.begin(), urls.end()); |
| return; |
| + } |
| // If there's only 1 tab and the tab is NTP, close this NTP tab and open all |
| // startup urls in new tabs, because the omnibox will stay focused if we |
| @@ -682,10 +708,7 @@ class AppControllerProfileObserver : public ProfileInfoCacheObserver { |
| startupContent = browser->tab_strip_model()->GetActiveWebContents(); |
| } |
| - if (startupUrls_.size()) { |
| - [self openUrls:startupUrls_]; |
| - startupUrls_.clear(); |
| - } |
| + [self openUrls:urls]; |
| if (startupIndex != TabStripModel::kNoTab && |
| startupContent->GetVisibleURL() == GURL(chrome::kChromeUINewTabURL)) { |
| @@ -1315,9 +1338,7 @@ class AppControllerProfileObserver : public ProfileInfoCacheObserver { |
| // StartupBrowserCreator here because on the other platforms, URLs to open come |
| // through the ProcessSingleton, and it calls StartupBrowserCreator. It's best |
| // to bottleneck the openings through that for uniform handling. |
| - |
| - (void)openUrls:(const std::vector<GURL>&)urls { |
| - // If the browser hasn't started yet, just queue up the URLs. |
| if (!startupComplete_) { |
| startupUrls_.insert(startupUrls_.end(), urls.begin(), urls.end()); |
| return; |
| @@ -1347,7 +1368,7 @@ class AppControllerProfileObserver : public ProfileInfoCacheObserver { |
| std::vector<GURL> gurlVector; |
| gurlVector.push_back(gurl); |
| - [self openUrls:gurlVector]; |
| + [self openUrlsReplacingNTP:gurlVector]; |
| } |
| - (void)application:(NSApplication*)sender |
| @@ -1359,7 +1380,7 @@ class AppControllerProfileObserver : public ProfileInfoCacheObserver { |
| gurlVector.push_back(gurl); |
| } |
| if (!gurlVector.empty()) |
| - [self openUrls:gurlVector]; |
| + [self openUrlsReplacingNTP:gurlVector]; |
| else |
| NOTREACHED() << "Nothing to open!"; |
| @@ -1559,7 +1580,7 @@ class AppControllerProfileObserver : public ProfileInfoCacheObserver { |
| std::vector<GURL> gurlVector; |
| gurlVector.push_back(gurl); |
| - [self openUrls:gurlVector]; |
| + [self openUrlsReplacingNTP:gurlVector]; |
| return YES; |
| } |