| Index: chrome/browser/chromeos/extensions/file_browser_private_api.cc
|
| diff --git a/chrome/browser/chromeos/extensions/file_browser_private_api.cc b/chrome/browser/chromeos/extensions/file_browser_private_api.cc
|
| index 57c700d77e3ae81402a9e016b5ec08bd4d5634d2..819685c2d38c39c409b8df61a69bac215625219e 100644
|
| --- a/chrome/browser/chromeos/extensions/file_browser_private_api.cc
|
| +++ b/chrome/browser/chromeos/extensions/file_browser_private_api.cc
|
| @@ -590,7 +590,7 @@ class ExecuteTasksFileBrowserFunction::Executor: public FileTaskExecutor {
|
| protected:
|
| // FileTaskExecutor overrides.
|
| virtual Browser* browser() { return function_->GetCurrentBrowser(); }
|
| - virtual void Done(bool success) { function_->SendResponse(success); }
|
| + virtual void Done(bool success) { function_->OnTaskExecuted(success); }
|
|
|
| private:
|
| scoped_refptr<ExecuteTasksFileBrowserFunction> function_;
|
| @@ -635,15 +635,27 @@ bool ExecuteTasksFileBrowserFunction::RunImpl() {
|
| file_urls.push_back(GURL(origin_file_url));
|
| }
|
|
|
| - scoped_refptr<Executor> executor =
|
| - new Executor(profile(), source_url(), extension_id, action_id, this);
|
| - if (!executor->Execute(file_urls))
|
| + executor_ = new Executor(profile(), source_url(), extension_id, action_id,
|
| + this);
|
| +
|
| + if (!executor_->Execute(file_urls)) {
|
| + // Executor has our reference, so we have to unref it if we don't want to
|
| + // leak.
|
| + executor_ = NULL;
|
| return false;
|
| + }
|
|
|
| result_.reset(new base::FundamentalValue(true));
|
| return true;
|
| }
|
|
|
| +void ExecuteTasksFileBrowserFunction::OnTaskExecuted(bool success) {
|
| + SendResponse(success);
|
| + // Executor has our reference, so we have to unref it if we don't want to
|
| + // leak.
|
| + executor_ = NULL;
|
| +}
|
| +
|
| FileBrowserFunction::FileBrowserFunction() {
|
| }
|
|
|
|
|