pack_extension_job.cc revision 3345a6884c488ff3a535c2c9acdd33d74b37e311
1// Copyright (c) 2009 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/extensions/pack_extension_job.h" 6 7#include "app/l10n_util.h" 8#include "base/message_loop.h" 9#include "base/utf_string_conversions.h" 10#include "base/task.h" 11#include "chrome/browser/extensions/extension_creator.h" 12#include "chrome/common/chrome_constants.h" 13#include "grit/generated_resources.h" 14 15PackExtensionJob::PackExtensionJob(Client* client, 16 const FilePath& root_directory, 17 const FilePath& key_file) 18 : client_(client), key_file_(key_file) { 19 root_directory_ = root_directory.StripTrailingSeparators(); 20 CHECK(ChromeThread::GetCurrentThreadIdentifier(&client_thread_id_)); 21} 22 23void PackExtensionJob::Start() { 24 ChromeThread::PostTask( 25 ChromeThread::FILE, FROM_HERE, 26 NewRunnableMethod(this, &PackExtensionJob::RunOnFileThread)); 27} 28 29void PackExtensionJob::ClearClient() { 30 client_ = NULL; 31} 32 33void PackExtensionJob::RunOnFileThread() { 34 crx_file_out_ = FilePath(root_directory_.value() + 35 chrome::kExtensionFileExtension); 36 37 if (key_file_.empty()) 38 key_file_out_ = FilePath(root_directory_.value() + 39 chrome::kExtensionKeyFileExtension); 40 41 // TODO(aa): Need to internationalize the errors that ExtensionCreator 42 // returns. See bug 20734. 43 ExtensionCreator creator; 44 if (creator.Run(root_directory_, crx_file_out_, key_file_, key_file_out_)) { 45 ChromeThread::PostTask( 46 client_thread_id_, FROM_HERE, 47 NewRunnableMethod(this, 48 &PackExtensionJob::ReportSuccessOnClientThread)); 49 } else { 50 ChromeThread::PostTask( 51 client_thread_id_, FROM_HERE, 52 NewRunnableMethod( 53 this, &PackExtensionJob::ReportFailureOnClientThread, 54 creator.error_message())); 55 } 56} 57 58void PackExtensionJob::ReportSuccessOnClientThread() { 59 if (client_) 60 client_->OnPackSuccess(crx_file_out_, key_file_out_); 61} 62 63void PackExtensionJob::ReportFailureOnClientThread(const std::string& error) { 64 if (client_) 65 client_->OnPackFailure(error); 66} 67 68// static 69std::wstring PackExtensionJob::StandardSuccessMessage(const FilePath& crx_file, 70 const FilePath& key_file) 71{ 72 // TODO(isherman): we should use string16 instead of wstring. 73 // See crbug.com/23581 and crbug.com/24672 74 std::wstring message; 75 if (key_file.empty()) { 76 return l10n_util::GetStringF( 77 IDS_EXTENSION_PACK_DIALOG_SUCCESS_BODY_UPDATE, 78 crx_file.ToWStringHack()); 79 } else { 80 return l10n_util::GetStringF( 81 IDS_EXTENSION_PACK_DIALOG_SUCCESS_BODY_NEW, 82 crx_file.ToWStringHack(), 83 key_file.ToWStringHack()); 84 } 85} 86