diff options
author | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-25 23:19:51 +0000 |
---|---|---|
committer | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-25 23:19:51 +0000 |
commit | 1c35a4843a9b0b4db2d317c08a1dd3181c3c7be8 (patch) | |
tree | 021d68d85e1f8082e54146d199f1b6be6d05e59c /chrome/browser/service/service_process_control.cc | |
parent | f824f91a3b11fabc98dce7c5f9339b7046971f29 (diff) | |
download | chromium_src-1c35a4843a9b0b4db2d317c08a1dd3181c3c7be8.zip chromium_src-1c35a4843a9b0b4db2d317c08a1dd3181c3c7be8.tar.gz chromium_src-1c35a4843a9b0b4db2d317c08a1dd3181c3c7be8.tar.bz2 |
base::Bind: Convert CloudPrintProxyService.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/8368014
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@107235 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/service/service_process_control.cc')
-rw-r--r-- | chrome/browser/service/service_process_control.cc | 54 |
1 files changed, 18 insertions, 36 deletions
diff --git a/chrome/browser/service/service_process_control.cc b/chrome/browser/service/service_process_control.cc index 368ff75..de257f6 100644 --- a/chrome/browser/service/service_process_control.cc +++ b/chrome/browser/service/service_process_control.cc @@ -27,9 +27,6 @@ ServiceProcessControl::ServiceProcessControl() { } ServiceProcessControl::~ServiceProcessControl() { - STLDeleteElements(&connect_done_tasks_); - STLDeleteElements(&connect_success_tasks_); - STLDeleteElements(&connect_failure_tasks_); } void ServiceProcessControl::ConnectInternal() { @@ -55,60 +52,48 @@ void ServiceProcessControl::RunConnectDoneTasks() { // them to the stack before executing them. This way recursion is // avoided. TaskList tasks; - tasks.swap(connect_done_tasks_); - RunAllTasksHelper(&tasks); - DCHECK(tasks.empty()); if (is_connected()) { tasks.swap(connect_success_tasks_); RunAllTasksHelper(&tasks); DCHECK(tasks.empty()); - - STLDeleteElements(&connect_failure_tasks_); + connect_failure_tasks_.clear(); } else { tasks.swap(connect_failure_tasks_); RunAllTasksHelper(&tasks); DCHECK(tasks.empty()); - - STLDeleteElements(&connect_success_tasks_); + connect_success_tasks_.clear(); } - DCHECK(connect_done_tasks_.empty()); - DCHECK(connect_success_tasks_.empty()); - DCHECK(connect_failure_tasks_.empty()); + // If the same callback is passed for both success and failure tasks, one + // container or the other may not be empty. + connect_success_tasks_.clear(); + connect_failure_tasks_.clear(); } // static void ServiceProcessControl::RunAllTasksHelper(TaskList* task_list) { TaskList::iterator index = task_list->begin(); while (index != task_list->end()) { - (*index)->Run(); - delete (*index); + (*index).Run(); index = task_list->erase(index); } } -void ServiceProcessControl::Launch(Task* success_task, Task* failure_task) { +void ServiceProcessControl::Launch(const base::Closure& success_task, + const base::Closure& failure_task) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - if (success_task) { - if (success_task == failure_task) { - // If the tasks are the same, then the same task needs to be invoked - // for success and failure. - failure_task = NULL; - connect_done_tasks_.push_back(success_task); - } else { - connect_success_tasks_.push_back(success_task); - } - } + base::Closure failure = failure_task; + if (!success_task.is_null()) + connect_success_tasks_.push_back(success_task); - if (failure_task) - connect_failure_tasks_.push_back(failure_task); + if (!failure.is_null()) + connect_failure_tasks_.push_back(failure); // If we already in the process of launching, then we are done. - if (launcher_) { + if (launcher_) return; - } // If the service process is already running then connects to it. if (CheckServiceProcessReady()) { @@ -126,9 +111,8 @@ void ServiceProcessControl::Launch(Task* success_task, Task* failure_task) { #endif FilePath exe_path = ChildProcessHost::GetChildPath(flags); - if (exe_path.empty()) { + if (exe_path.empty()) NOTREACHED() << "Unable to get service process binary name."; - } CommandLine* cmd_line = new CommandLine(exe_path); cmd_line->AppendSwitchASCII(switches::kProcessType, @@ -155,13 +139,11 @@ void ServiceProcessControl::Launch(Task* success_task, Task* failure_task) { if (!v_modules.empty()) cmd_line->AppendSwitchASCII(switches::kVModule, v_modules); - if (browser_command_line.HasSwitch(switches::kWaitForDebuggerChildren)) { + if (browser_command_line.HasSwitch(switches::kWaitForDebuggerChildren)) cmd_line->AppendSwitch(switches::kWaitForDebugger); - } - if (browser_command_line.HasSwitch(switches::kEnableLogging)) { + if (browser_command_line.HasSwitch(switches::kEnableLogging)) cmd_line->AppendSwitch(switches::kEnableLogging); - } std::string locale = g_browser_process->GetApplicationLocale(); cmd_line->AppendSwitchASCII(switches::kLang, locale); |