1 // Copyright (c) 2012 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.
5 #include "chrome/browser/extensions/pack_extension_job.h"
8 #include "base/message_loop/message_loop.h"
9 #include "base/strings/sys_string_conversions.h"
10 #include "base/strings/utf_string_conversions.h"
11 #include "chrome/browser/extensions/extension_creator.h"
12 #include "extensions/common/constants.h"
13 #include "grit/generated_resources.h"
14 #include "ui/base/l10n/l10n_util.h"
16 using content::BrowserThread
;
18 namespace extensions
{
20 PackExtensionJob::PackExtensionJob(Client
* client
,
21 const base::FilePath
& root_directory
,
22 const base::FilePath
& key_file
,
24 : client_(client
), key_file_(key_file
), asynchronous_(true),
25 run_flags_(run_flags
| ExtensionCreator::kRequireModernManifestVersion
) {
26 root_directory_
= root_directory
.StripTrailingSeparators();
27 CHECK(BrowserThread::GetCurrentThreadIdentifier(&client_thread_id_
));
30 void PackExtensionJob::Start() {
32 BrowserThread::PostTask(
33 BrowserThread::FILE, FROM_HERE
,
34 base::Bind(&PackExtensionJob::Run
, this));
40 void PackExtensionJob::ClearClient() {
44 PackExtensionJob::~PackExtensionJob() {}
46 void PackExtensionJob::Run() {
47 crx_file_out_
= base::FilePath(root_directory_
.value() +
48 kExtensionFileExtension
);
50 if (key_file_
.empty())
51 key_file_out_
= base::FilePath(root_directory_
.value() +
52 kExtensionKeyFileExtension
);
54 // TODO(aa): Need to internationalize the errors that ExtensionCreator
55 // returns. See bug 20734.
56 ExtensionCreator creator
;
57 if (creator
.Run(root_directory_
, crx_file_out_
, key_file_
, key_file_out_
,
60 BrowserThread::PostTask(
61 client_thread_id_
, FROM_HERE
,
62 base::Bind(&PackExtensionJob::ReportSuccessOnClientThread
, this));
64 ReportSuccessOnClientThread();
68 BrowserThread::PostTask(
69 client_thread_id_
, FROM_HERE
,
71 &PackExtensionJob::ReportFailureOnClientThread
, this,
72 creator
.error_message(), creator
.error_type()));
74 ReportFailureOnClientThread(creator
.error_message(),
75 creator
.error_type());
80 void PackExtensionJob::ReportSuccessOnClientThread() {
82 client_
->OnPackSuccess(crx_file_out_
, key_file_out_
);
85 void PackExtensionJob::ReportFailureOnClientThread(
86 const std::string
& error
,
87 ExtensionCreator::ErrorType error_type
) {
89 client_
->OnPackFailure(error
, error_type
);
93 string16
PackExtensionJob::StandardSuccessMessage(
94 const base::FilePath
& crx_file
,
95 const base::FilePath
& key_file
) {
96 string16 crx_file_string
= crx_file
.LossyDisplayName();
97 string16 key_file_string
= key_file
.LossyDisplayName();
98 if (key_file_string
.empty()) {
99 return l10n_util::GetStringFUTF16(
100 IDS_EXTENSION_PACK_DIALOG_SUCCESS_BODY_UPDATE
,
103 return l10n_util::GetStringFUTF16(
104 IDS_EXTENSION_PACK_DIALOG_SUCCESS_BODY_NEW
,
110 } // namespace extensions