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

Unified Diff: chrome/browser/chrome_browser_main.cc

Issue 12096114: Extract locking behaviour from ProcessSingleton. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Comment clarification. Created 7 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/chrome_browser_main.cc
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc
index 6db886d01903b2f3558fc061d07414acacbd76e7..0ba249133da9d65467254a6ada38fa7e94dd7873 100644
--- a/chrome/browser/chrome_browser_main.cc
+++ b/chrome/browser/chrome_browser_main.cc
@@ -466,6 +466,7 @@ void RegisterComponentsForUpdate(const CommandLine& command_line) {
cus->Start();
}
+#if !defined(OS_ANDROID)
bool ProcessSingletonNotificationCallback(
const CommandLine& command_line,
const base::FilePath& current_directory) {
@@ -505,6 +506,7 @@ bool ProcessSingletonNotificationCallback(
command_line, current_directory, startup_profile_dir);
return true;
}
+#endif
void LaunchDevToolsHandlerIfNeeded(Profile* profile,
const CommandLine& command_line) {
@@ -580,6 +582,10 @@ ChromeBrowserMainParts::ChromeBrowserMainParts(
shutdown_watcher_(new ShutdownWatcherHelper()),
startup_timer_(new performance_monitor::StartupTimer()),
browser_field_trials_(parameters.command_line),
+#if !defined(OS_ANDROID)
+ startup_lock_(base::Bind(&ProcessSingletonNotificationCallback)),
+ modal_dialog_lock_(startup_lock_.AsNotificationCallback()),
+#endif
record_search_engine_(false),
translate_manager_(NULL),
profile_(NULL),
@@ -793,11 +799,10 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() {
// Android's first run is done in Java instead of native.
#if !defined(OS_ANDROID)
+ // Pass command-line invocations through modal_dialog_lock_ and
+ // startup_lock_ before handling them ourselves.
process_singleton_.reset(new ProcessSingleton(
- user_data_dir_, base::Bind(&ProcessSingletonNotificationCallback)));
- // Ensure ProcessSingleton won't process messages too early. It will be
- // unlocked in PostBrowserStart().
- process_singleton_->Lock(NULL);
+ user_data_dir_, modal_dialog_lock_.AsNotificationCallback()));
bool force_first_run =
parsed_command_line().HasSwitch(switches::kForceFirstRun);
@@ -1047,7 +1052,7 @@ void ChromeBrowserMainParts::PostBrowserStart() {
chrome_extra_parts_[i]->PostBrowserStart();
#if !defined(OS_ANDROID)
// Allow ProcessSingleton to process messages.
- process_singleton_->Unlock();
+ startup_lock_.Unlock();
#endif
}
@@ -1222,8 +1227,11 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() {
// sucessfully grabbed above.
int try_chrome_int;
base::StringToInt(try_chrome, &try_chrome_int);
- TryChromeDialogView::Result answer =
- TryChromeDialogView::Show(try_chrome_int, process_singleton_.get());
+ TryChromeDialogView::Result answer = TryChromeDialogView::Show(
+ try_chrome_int,
+ base::Bind(
+ &ProcessSingletonModalDialogLock::SetActiveModalDialog,
+ base::Unretained(&modal_dialog_lock_)));
if (answer == TryChromeDialogView::NOT_NOW)
return chrome::RESULT_CODE_NORMAL_EXIT_CANCEL;
if (answer == TryChromeDialogView::UNINSTALL_CHROME)
@@ -1325,8 +1333,7 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() {
first_run::AutoImport(profile_,
master_prefs_->homepage_defined,
master_prefs_->do_import_items,
- master_prefs_->dont_import_items,
- process_singleton_.get());
+ master_prefs_->dont_import_items);
// Note: this can pop the first run consent dialog on linux.
first_run::DoPostImportTasks(profile_, master_prefs_->make_chrome_default);

Powered by Google App Engine
This is Rietveld 408576698