OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/startup/startup_browser_creator_impl.h" | 5 #include "chrome/browser/ui/startup/startup_browser_creator_impl.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/environment.h" | 10 #include "base/environment.h" |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
64 #include "chrome/common/chrome_notification_types.h" | 64 #include "chrome/common/chrome_notification_types.h" |
65 #include "chrome/common/chrome_paths.h" | 65 #include "chrome/common/chrome_paths.h" |
66 #include "chrome/common/chrome_result_codes.h" | 66 #include "chrome/common/chrome_result_codes.h" |
67 #include "chrome/common/chrome_switches.h" | 67 #include "chrome/common/chrome_switches.h" |
68 #include "chrome/common/chrome_version_info.h" | 68 #include "chrome/common/chrome_version_info.h" |
69 #include "chrome/common/extensions/extension_constants.h" | 69 #include "chrome/common/extensions/extension_constants.h" |
70 #include "chrome/common/pref_names.h" | 70 #include "chrome/common/pref_names.h" |
71 #include "chrome/common/url_constants.h" | 71 #include "chrome/common/url_constants.h" |
72 #include "chrome/installer/util/browser_distribution.h" | 72 #include "chrome/installer/util/browser_distribution.h" |
73 #include "content/public/browser/child_process_security_policy.h" | 73 #include "content/public/browser/child_process_security_policy.h" |
74 #include "content/public/browser/notification_observer.h" | |
75 #include "content/public/browser/notification_registrar.h" | |
74 #include "content/public/browser/web_contents.h" | 76 #include "content/public/browser/web_contents.h" |
75 #include "content/public/browser/web_contents_view.h" | 77 #include "content/public/browser/web_contents_view.h" |
76 #include "grit/locale_settings.h" | 78 #include "grit/locale_settings.h" |
77 #include "ui/base/l10n/l10n_util.h" | 79 #include "ui/base/l10n/l10n_util.h" |
78 #include "ui/base/resource/resource_bundle.h" | 80 #include "ui/base/resource/resource_bundle.h" |
79 | 81 |
80 #if defined(OS_MACOSX) | 82 #if defined(OS_MACOSX) |
81 #include "base/mac/mac_util.h" | 83 #include "base/mac/mac_util.h" |
82 #include "chrome/browser/ui/cocoa/keystone_infobar_delegate.h" | 84 #include "chrome/browser/ui/cocoa/keystone_infobar_delegate.h" |
83 #endif | 85 #endif |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
217 } | 219 } |
218 } | 220 } |
219 for (size_t i = 0; i < autolaunch_tabs.size(); ++i) { | 221 for (size_t i = 0; i < autolaunch_tabs.size(); ++i) { |
220 if (extension_service->IsInstalledApp(autolaunch_tabs.at(i).url)) { | 222 if (extension_service->IsInstalledApp(autolaunch_tabs.at(i).url)) { |
221 AppLauncherHandler::RecordAppLaunchType( | 223 AppLauncherHandler::RecordAppLaunchType( |
222 extension_misc::APP_LAUNCH_AUTOLAUNCH); | 224 extension_misc::APP_LAUNCH_AUTOLAUNCH); |
223 } | 225 } |
224 } | 226 } |
225 } | 227 } |
226 | 228 |
229 class WebContentsCloseObserver : public content::NotificationObserver { | |
230 public: | |
231 WebContentsCloseObserver() : contents_(NULL) {} | |
232 virtual ~WebContentsCloseObserver() {} | |
233 | |
234 void SetContents(content::WebContents* contents) { | |
235 DCHECK(!contents); | |
Ben Goodger (Google)
2012/07/10 21:13:22
DCHECK(!contents_)?
xiyuan
2012/07/10 21:21:04
Oops. Fixed now. :p
| |
236 contents_ = contents; | |
237 | |
238 registrar_.Add(this, | |
239 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, | |
240 content::Source<content::WebContents>(contents_)); | |
241 } | |
242 | |
243 content::WebContents* contents() { return contents_; } | |
244 | |
245 private: | |
246 // content::NotificationObserver overrides: | |
247 virtual void Observe(int type, | |
248 const content::NotificationSource& source, | |
249 const content::NotificationDetails& details) OVERRIDE { | |
250 DCHECK_EQ(type, content::NOTIFICATION_WEB_CONTENTS_DESTROYED); | |
251 contents_ = NULL; | |
252 } | |
253 | |
254 content::WebContents* contents_; | |
255 content::NotificationRegistrar registrar_; | |
256 | |
257 DISALLOW_COPY_AND_ASSIGN(WebContentsCloseObserver); | |
258 }; | |
259 | |
227 } // namespace | 260 } // namespace |
228 | 261 |
229 StartupBrowserCreatorImpl::StartupBrowserCreatorImpl( | 262 StartupBrowserCreatorImpl::StartupBrowserCreatorImpl( |
230 const FilePath& cur_dir, | 263 const FilePath& cur_dir, |
231 const CommandLine& command_line, | 264 const CommandLine& command_line, |
232 chrome::startup::IsFirstRun is_first_run) | 265 chrome::startup::IsFirstRun is_first_run) |
233 : cur_dir_(cur_dir), | 266 : cur_dir_(cur_dir), |
234 command_line_(command_line), | 267 command_line_(command_line), |
235 profile_(NULL), | 268 profile_(NULL), |
236 browser_creator_(NULL), | 269 browser_creator_(NULL), |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
300 !browser_defaults::kAppRestoreSession) { | 333 !browser_defaults::kAppRestoreSession) { |
301 RecordLaunchModeHistogram(LM_AS_WEBAPP); | 334 RecordLaunchModeHistogram(LM_AS_WEBAPP); |
302 } else { | 335 } else { |
303 RecordLaunchModeHistogram(urls_to_open.empty() ? | 336 RecordLaunchModeHistogram(urls_to_open.empty() ? |
304 LM_TO_BE_DECIDED : LM_WITH_URLS); | 337 LM_TO_BE_DECIDED : LM_WITH_URLS); |
305 | 338 |
306 // Notify user if the Preferences backup is invalid or changes to settings | 339 // Notify user if the Preferences backup is invalid or changes to settings |
307 // affecting browser startup have been detected. | 340 // affecting browser startup have been detected. |
308 CheckPreferencesBackup(profile); | 341 CheckPreferencesBackup(profile); |
309 | 342 |
343 // Watch for |app_contents| closing since ProcessLaunchURLs might run a | |
344 // synchronous session restore which has a nested message loop and could | |
345 // close |app_contents|. | |
346 WebContentsCloseObserver app_contents_observer; | |
347 if (browser_defaults::kAppRestoreSession && app_contents) | |
348 app_contents_observer.SetContents(app_contents); | |
349 | |
310 ProcessLaunchURLs(process_startup, urls_to_open); | 350 ProcessLaunchURLs(process_startup, urls_to_open); |
311 | 351 |
312 // If this is an app launch, but we didn't open an app window, it may | 352 // If this is an app launch, but we didn't open an app window, it may |
313 // be an app tab. | 353 // be an app tab. |
314 OpenApplicationTab(profile); | 354 OpenApplicationTab(profile); |
315 | 355 |
316 // In case of app mode + session restore we want to focus that app. | 356 // In case of app mode + session restore we want to focus that app. |
317 if (browser_defaults::kAppRestoreSession && app_contents) | 357 if (app_contents_observer.contents()) |
318 app_contents->GetView()->SetInitialFocus(); | 358 app_contents_observer.contents()->GetView()->SetInitialFocus(); |
319 | 359 |
320 if (process_startup) { | 360 if (process_startup) { |
321 if (browser_defaults::kOSSupportsOtherBrowsers && | 361 if (browser_defaults::kOSSupportsOtherBrowsers && |
322 !command_line_.HasSwitch(switches::kNoDefaultBrowserCheck)) { | 362 !command_line_.HasSwitch(switches::kNoDefaultBrowserCheck)) { |
323 if (!chrome::ShowAutolaunchPrompt(profile)) | 363 if (!chrome::ShowAutolaunchPrompt(profile)) |
324 chrome::ShowDefaultBrowserPrompt(profile); | 364 chrome::ShowDefaultBrowserPrompt(profile); |
325 } | 365 } |
326 #if defined(OS_MACOSX) | 366 #if defined(OS_MACOSX) |
327 // Check whether the auto-update system needs to be promoted from user | 367 // Check whether the auto-update system needs to be promoted from user |
328 // to system. | 368 // to system. |
(...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
860 // New: | 900 // New: |
861 prefs->GetString(prefs::kHomePage), | 901 prefs->GetString(prefs::kHomePage), |
862 prefs->GetBoolean(prefs::kHomePageIsNewTabPage), | 902 prefs->GetBoolean(prefs::kHomePageIsNewTabPage), |
863 prefs->GetBoolean(prefs::kShowHomeButton), | 903 prefs->GetBoolean(prefs::kShowHomeButton), |
864 // Backup: | 904 // Backup: |
865 backup_homepage, | 905 backup_homepage, |
866 backup_homepage_is_ntp, | 906 backup_homepage_is_ntp, |
867 backup_show_home_button)); | 907 backup_show_home_button)); |
868 } | 908 } |
869 } | 909 } |
OLD | NEW |