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

Side by Side Diff: chrome/browser/ui/startup/startup_browser_creator_impl.cc

Issue 10700145: chromeos: Fix StartupBrowserCreatorImpl::Launch crash. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase + fix comment in #1 Created 8 years, 5 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 #include "chrome/common/chrome_notification_types.h" 65 #include "chrome/common/chrome_notification_types.h"
66 #include "chrome/common/chrome_paths.h" 66 #include "chrome/common/chrome_paths.h"
67 #include "chrome/common/chrome_result_codes.h" 67 #include "chrome/common/chrome_result_codes.h"
68 #include "chrome/common/chrome_switches.h" 68 #include "chrome/common/chrome_switches.h"
69 #include "chrome/common/chrome_version_info.h" 69 #include "chrome/common/chrome_version_info.h"
70 #include "chrome/common/extensions/extension_constants.h" 70 #include "chrome/common/extensions/extension_constants.h"
71 #include "chrome/common/pref_names.h" 71 #include "chrome/common/pref_names.h"
72 #include "chrome/common/url_constants.h" 72 #include "chrome/common/url_constants.h"
73 #include "chrome/installer/util/browser_distribution.h" 73 #include "chrome/installer/util/browser_distribution.h"
74 #include "content/public/browser/child_process_security_policy.h" 74 #include "content/public/browser/child_process_security_policy.h"
75 #include "content/public/browser/notification_observer.h"
76 #include "content/public/browser/notification_registrar.h"
75 #include "content/public/browser/web_contents.h" 77 #include "content/public/browser/web_contents.h"
76 #include "content/public/browser/web_contents_view.h" 78 #include "content/public/browser/web_contents_view.h"
77 #include "grit/locale_settings.h" 79 #include "grit/locale_settings.h"
78 #include "ui/base/l10n/l10n_util.h" 80 #include "ui/base/l10n/l10n_util.h"
79 #include "ui/base/resource/resource_bundle.h" 81 #include "ui/base/resource/resource_bundle.h"
80 82
81 #if defined(OS_MACOSX) 83 #if defined(OS_MACOSX)
82 #include "base/mac/mac_util.h" 84 #include "base/mac/mac_util.h"
83 #include "chrome/browser/ui/cocoa/keystone_infobar_delegate.h" 85 #include "chrome/browser/ui/cocoa/keystone_infobar_delegate.h"
84 #endif 86 #endif
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 } 220 }
219 } 221 }
220 for (size_t i = 0; i < autolaunch_tabs.size(); ++i) { 222 for (size_t i = 0; i < autolaunch_tabs.size(); ++i) {
221 if (extension_service->IsInstalledApp(autolaunch_tabs.at(i).url)) { 223 if (extension_service->IsInstalledApp(autolaunch_tabs.at(i).url)) {
222 AppLauncherHandler::RecordAppLaunchType( 224 AppLauncherHandler::RecordAppLaunchType(
223 extension_misc::APP_LAUNCH_AUTOLAUNCH); 225 extension_misc::APP_LAUNCH_AUTOLAUNCH);
224 } 226 }
225 } 227 }
226 } 228 }
227 229
230 class WebContentsCloseObserver : public content::NotificationObserver {
231 public:
232 WebContentsCloseObserver() : contents_(NULL) {}
233 virtual ~WebContentsCloseObserver() {}
234
235 void SetContents(content::WebContents* contents) {
236 DCHECK(!contents_);
237 contents_ = contents;
238
239 registrar_.Add(this,
240 content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
241 content::Source<content::WebContents>(contents_));
242 }
243
244 content::WebContents* contents() { return contents_; }
245
246 private:
247 // content::NotificationObserver overrides:
248 virtual void Observe(int type,
249 const content::NotificationSource& source,
250 const content::NotificationDetails& details) OVERRIDE {
251 DCHECK_EQ(type, content::NOTIFICATION_WEB_CONTENTS_DESTROYED);
252 contents_ = NULL;
253 }
254
255 content::WebContents* contents_;
256 content::NotificationRegistrar registrar_;
257
258 DISALLOW_COPY_AND_ASSIGN(WebContentsCloseObserver);
259 };
260
228 } // namespace 261 } // namespace
229 262
230 StartupBrowserCreatorImpl::StartupBrowserCreatorImpl( 263 StartupBrowserCreatorImpl::StartupBrowserCreatorImpl(
231 const FilePath& cur_dir, 264 const FilePath& cur_dir,
232 const CommandLine& command_line, 265 const CommandLine& command_line,
233 chrome::startup::IsFirstRun is_first_run) 266 chrome::startup::IsFirstRun is_first_run)
234 : cur_dir_(cur_dir), 267 : cur_dir_(cur_dir),
235 command_line_(command_line), 268 command_line_(command_line),
236 profile_(NULL), 269 profile_(NULL),
237 browser_creator_(NULL), 270 browser_creator_(NULL),
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 !browser_defaults::kAppRestoreSession) { 334 !browser_defaults::kAppRestoreSession) {
302 RecordLaunchModeHistogram(LM_AS_WEBAPP); 335 RecordLaunchModeHistogram(LM_AS_WEBAPP);
303 } else { 336 } else {
304 RecordLaunchModeHistogram(urls_to_open.empty() ? 337 RecordLaunchModeHistogram(urls_to_open.empty() ?
305 LM_TO_BE_DECIDED : LM_WITH_URLS); 338 LM_TO_BE_DECIDED : LM_WITH_URLS);
306 339
307 // Notify user if the Preferences backup is invalid or changes to settings 340 // Notify user if the Preferences backup is invalid or changes to settings
308 // affecting browser startup have been detected. 341 // affecting browser startup have been detected.
309 CheckPreferencesBackup(profile); 342 CheckPreferencesBackup(profile);
310 343
344 // Watch for |app_contents| closing since ProcessLaunchURLs might run a
345 // synchronous session restore which has a nested message loop and could
346 // close |app_contents|.
347 WebContentsCloseObserver app_contents_observer;
348 if (browser_defaults::kAppRestoreSession && app_contents)
349 app_contents_observer.SetContents(app_contents);
350
311 ProcessLaunchURLs(process_startup, urls_to_open); 351 ProcessLaunchURLs(process_startup, urls_to_open);
312 352
313 // If this is an app launch, but we didn't open an app window, it may 353 // If this is an app launch, but we didn't open an app window, it may
314 // be an app tab. 354 // be an app tab.
315 OpenApplicationTab(profile); 355 OpenApplicationTab(profile);
316 356
317 // In case of app mode + session restore we want to focus that app. 357 // In case of app mode + session restore we want to focus that app.
318 if (browser_defaults::kAppRestoreSession && app_contents) 358 if (app_contents_observer.contents())
319 app_contents->GetView()->SetInitialFocus(); 359 app_contents_observer.contents()->GetView()->SetInitialFocus();
320 360
321 if (process_startup) { 361 if (process_startup) {
322 if (browser_defaults::kOSSupportsOtherBrowsers && 362 if (browser_defaults::kOSSupportsOtherBrowsers &&
323 !command_line_.HasSwitch(switches::kNoDefaultBrowserCheck)) { 363 !command_line_.HasSwitch(switches::kNoDefaultBrowserCheck)) {
324 if (!chrome::ShowAutolaunchPrompt(profile)) 364 if (!chrome::ShowAutolaunchPrompt(profile))
325 chrome::ShowDefaultBrowserPrompt(profile); 365 chrome::ShowDefaultBrowserPrompt(profile);
326 } 366 }
327 #if defined(OS_MACOSX) 367 #if defined(OS_MACOSX)
328 // Check whether the auto-update system needs to be promoted from user 368 // Check whether the auto-update system needs to be promoted from user
329 // to system. 369 // to system.
(...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after
861 // New: 901 // New:
862 prefs->GetString(prefs::kHomePage), 902 prefs->GetString(prefs::kHomePage),
863 prefs->GetBoolean(prefs::kHomePageIsNewTabPage), 903 prefs->GetBoolean(prefs::kHomePageIsNewTabPage),
864 prefs->GetBoolean(prefs::kShowHomeButton), 904 prefs->GetBoolean(prefs::kShowHomeButton),
865 // Backup: 905 // Backup:
866 backup_homepage, 906 backup_homepage,
867 backup_homepage_is_ntp, 907 backup_homepage_is_ntp,
868 backup_show_home_button)); 908 backup_show_home_button));
869 } 909 }
870 } 910 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698