| // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/extensions/pack_extension_job.h" |
| |
| #include "app/l10n_util.h" |
| #include "base/message_loop.h" |
| #include "base/utf_string_conversions.h" |
| #include "base/task.h" |
| #include "chrome/browser/extensions/extension_creator.h" |
| #include "chrome/common/chrome_constants.h" |
| #include "grit/generated_resources.h" |
| |
| PackExtensionJob::PackExtensionJob(Client* client, |
| const FilePath& root_directory, |
| const FilePath& key_file) |
| : client_(client), key_file_(key_file) { |
| root_directory_ = root_directory.StripTrailingSeparators(); |
| CHECK(BrowserThread::GetCurrentThreadIdentifier(&client_thread_id_)); |
| } |
| |
| void PackExtensionJob::Start() { |
| BrowserThread::PostTask( |
| BrowserThread::FILE, FROM_HERE, |
| NewRunnableMethod(this, &PackExtensionJob::RunOnFileThread)); |
| } |
| |
| void PackExtensionJob::ClearClient() { |
| client_ = NULL; |
| } |
| |
| PackExtensionJob::~PackExtensionJob() {} |
| |
| void PackExtensionJob::RunOnFileThread() { |
| crx_file_out_ = FilePath(root_directory_.value() + |
| chrome::kExtensionFileExtension); |
| |
| if (key_file_.empty()) |
| key_file_out_ = FilePath(root_directory_.value() + |
| chrome::kExtensionKeyFileExtension); |
| |
| // TODO(aa): Need to internationalize the errors that ExtensionCreator |
| // returns. See bug 20734. |
| ExtensionCreator creator; |
| if (creator.Run(root_directory_, crx_file_out_, key_file_, key_file_out_)) { |
| BrowserThread::PostTask( |
| client_thread_id_, FROM_HERE, |
| NewRunnableMethod(this, |
| &PackExtensionJob::ReportSuccessOnClientThread)); |
| } else { |
| BrowserThread::PostTask( |
| client_thread_id_, FROM_HERE, |
| NewRunnableMethod( |
| this, &PackExtensionJob::ReportFailureOnClientThread, |
| creator.error_message())); |
| } |
| } |
| |
| void PackExtensionJob::ReportSuccessOnClientThread() { |
| if (client_) |
| client_->OnPackSuccess(crx_file_out_, key_file_out_); |
| } |
| |
| void PackExtensionJob::ReportFailureOnClientThread(const std::string& error) { |
| if (client_) |
| client_->OnPackFailure(error); |
| } |
| |
| // static |
| std::wstring PackExtensionJob::StandardSuccessMessage(const FilePath& crx_file, |
| const FilePath& key_file) |
| { |
| // TODO(isherman): we should use string16 instead of wstring. |
| // See crbug.com/23581 and crbug.com/24672 |
| std::wstring message; |
| if (key_file.empty()) { |
| return l10n_util::GetStringF( |
| IDS_EXTENSION_PACK_DIALOG_SUCCESS_BODY_UPDATE, |
| crx_file.ToWStringHack()); |
| } else { |
| return l10n_util::GetStringF( |
| IDS_EXTENSION_PACK_DIALOG_SUCCESS_BODY_NEW, |
| crx_file.ToWStringHack(), |
| key_file.ToWStringHack()); |
| } |
| } |