pack_extension_job.cc revision 21d179b334e59e9a3bfcaed4c4430bef1bc5759d
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), asynchronous_(true) { 19 root_directory_ = root_directory.StripTrailingSeparators(); 20 CHECK(BrowserThread::GetCurrentThreadIdentifier(&client_thread_id_)); 21} 22 23void PackExtensionJob::Start() { 24 if (asynchronous_) { 25 BrowserThread::PostTask( 26 BrowserThread::FILE, FROM_HERE, 27 NewRunnableMethod(this, &PackExtensionJob::Run)); 28 } else { 29 Run(); 30 } 31} 32 33void PackExtensionJob::ClearClient() { 34 client_ = NULL; 35} 36 37PackExtensionJob::~PackExtensionJob() {} 38 39void PackExtensionJob::Run() { 40 crx_file_out_ = FilePath(root_directory_.value() + 41 chrome::kExtensionFileExtension); 42 43 if (key_file_.empty()) 44 key_file_out_ = FilePath(root_directory_.value() + 45 chrome::kExtensionKeyFileExtension); 46 47 // TODO(aa): Need to internationalize the errors that ExtensionCreator 48 // returns. See bug 20734. 49 ExtensionCreator creator; 50 if (creator.Run(root_directory_, crx_file_out_, key_file_, key_file_out_)) { 51 if (asynchronous_) { 52 BrowserThread::PostTask( 53 client_thread_id_, FROM_HERE, 54 NewRunnableMethod(this, 55 &PackExtensionJob::ReportSuccessOnClientThread)); 56 } else { 57 ReportSuccessOnClientThread(); 58 } 59 } else { 60 if (asynchronous_) { 61 BrowserThread::PostTask( 62 client_thread_id_, FROM_HERE, 63 NewRunnableMethod( 64 this, &PackExtensionJob::ReportFailureOnClientThread, 65 creator.error_message())); 66 } else { 67 ReportFailureOnClientThread(creator.error_message()); 68 } 69 } 70} 71 72void PackExtensionJob::ReportSuccessOnClientThread() { 73 if (client_) 74 client_->OnPackSuccess(crx_file_out_, key_file_out_); 75} 76 77void PackExtensionJob::ReportFailureOnClientThread(const std::string& error) { 78 if (client_) 79 client_->OnPackFailure(error); 80} 81 82// static 83std::wstring PackExtensionJob::StandardSuccessMessage(const FilePath& crx_file, 84 const FilePath& key_file) 85{ 86 // TODO(isherman): we should use string16 instead of wstring. 87 // See crbug.com/23581 and crbug.com/24672 88 std::wstring message; 89 if (key_file.empty()) { 90 return l10n_util::GetStringF( 91 IDS_EXTENSION_PACK_DIALOG_SUCCESS_BODY_UPDATE, 92 crx_file.ToWStringHack()); 93 } else { 94 return l10n_util::GetStringF( 95 IDS_EXTENSION_PACK_DIALOG_SUCCESS_BODY_NEW, 96 crx_file.ToWStringHack(), 97 key_file.ToWStringHack()); 98 } 99} 100