Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(979)

Unified Diff: chrome/browser/extensions/api/developer_private/developer_private_api.cc

Issue 11794034: Adds functionality to pack an extension / app from the app. (Closed) Base URL: http://git.chromium.org/chromium/src.git@bacha_lo
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/developer_private/developer_private_api.cc
diff --git a/chrome/browser/extensions/api/developer_private/developer_private_api.cc b/chrome/browser/extensions/api/developer_private/developer_private_api.cc
index 73c484031f0de6f72d75edf9631ada8625b6ac11..633262c1cad6a09cb756de63c5802ce31df78d49 100644
--- a/chrome/browser/extensions/api/developer_private/developer_private_api.cc
+++ b/chrome/browser/extensions/api/developer_private/developer_private_api.cc
@@ -589,13 +589,20 @@ bool DeveloperPrivateLoadUnpackedFunction::RunImpl() {
const FilePath& last_unpacked_directory =
DeveloperPrivateAPI::Get(profile())->getLastUnpackedDirectory();
SetResult(Value::CreateBooleanValue(true));
- return ShowPicker(kSelectType, last_unpacked_directory, select_title);
+ return
miket_OOO 2013/01/09 18:52:41 The newline after this return shouldn't be necessa
Gaurav 2013/01/12 01:08:26 Done.
+ ShowPicker(kSelectType,
+ last_unpacked_directory,
+ select_title,
+ ui::SelectFileDialog::FileTypeInfo(),
+ 0);
}
bool DeveloperPrivateChooseEntryFunction::ShowPicker(
asargent_no_longer_on_chrome 2013/01/09 00:48:05 nit: remove the extra space on this line between b
Gaurav 2013/01/12 01:08:26 Done.
ui::SelectFileDialog::Type picker_type,
const FilePath& last_directory,
- const string16& select_title) {
+ const string16& select_title,
+ const ui::SelectFileDialog::FileTypeInfo& info,
+ int file_type_index) {
ShellWindowRegistry* registry = ShellWindowRegistry::Get(profile());
DCHECK(registry);
ShellWindow* shell_window = registry->GetShellWindowForRenderViewHost(
@@ -610,7 +617,7 @@ bool DeveloperPrivateChooseEntryFunction::ShowPicker(
// At that point, the picker will delete itself, which will also free the
// function instance.
new EntryPicker(this, shell_window->web_contents(), picker_type,
- last_directory, select_title);
+ last_directory, select_title, info, file_type_index);
return true;
}
@@ -628,8 +635,142 @@ void DeveloperPrivateChooseEntryFunction::FileSelectionCanceled() {
SendResponse(false);
}
+
+void DeveloperPrivatePackItemFunction::OnPackSuccess(
+ const FilePath& crx_file,
+ const FilePath& pem_file) {
+ std::string success_message(UTF16ToUTF8(
+ extensions::PackExtensionJob::StandardSuccessMessage(
+ crx_file, pem_file)));
miket_OOO 2013/01/09 18:52:41 Similar comment as earlier in this file: why creat
Gaurav 2013/01/12 01:08:26 Done.
+ developer::PackItemResponse response;
+ response.message = success_message;
+ response.status = developer::DEVELOPER_PRIVATE_PACK_STATUS_SUCCESS;
+ results_ = developer::PackItem::Results::Create(response);
+ SendResponse(true);
+ Release();
+}
+
+void DeveloperPrivatePackItemFunction::OnPackFailure(
+ const std::string& error,
+ extensions::ExtensionCreator::ErrorType error_type) {
+ developer::PackItemResponse response;
+ response.message = error;
+ if (error_type == extensions::ExtensionCreator::kCRXExists) {
+ response.item_path = item_path_str_;
+ response.pem_path = key_path_str_;
+ response.override_flags = extensions::ExtensionCreator::kOverwriteCRX;
+ response.status = developer::DEVELOPER_PRIVATE_PACK_STATUS_WARNING;
+ } else {
+ response.status = developer::DEVELOPER_PRIVATE_PACK_STATUS_ERROR;
+ }
+ results_ = developer::PackItem::Results::Create(response);
+ SendResponse(true);
+ Release();
+}
+
+bool DeveloperPrivatePackItemFunction::RunImpl() {
+ int flags;
+ EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &item_path_str_));
+ EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &key_path_str_));
+ EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(2, &flags));
+
+ FilePath root_directory =
+ FilePath::FromWStringHack(UTF8ToWide(item_path_str_));
+
+ FilePath key_file =
+ FilePath::FromWStringHack(UTF8ToWide(key_path_str_));
+
+ developer::PackItemResponse response;
+ if (root_directory.empty()) {
+ if (item_path_str_.empty()) {
+ response.message = l10n_util::GetStringUTF8(
+ IDS_EXTENSION_PACK_DIALOG_ERROR_ROOT_REQUIRED);
+ } else {
+ response.message = l10n_util::GetStringUTF8(
miket_OOO 2013/01/09 18:52:41 These inner braces aren't needed.
Gaurav 2013/01/12 01:08:26 Done.
+ IDS_EXTENSION_PACK_DIALOG_ERROR_ROOT_INVALID);
+ }
+
+ response.status = developer::DEVELOPER_PRIVATE_PACK_STATUS_ERROR;
+ results_ = developer::PackItem::Results::Create(response);
+ SendResponse(true);
+ return true;
+ }
+
+ if (!key_path_str_.empty() && key_file.empty()) {
+ response.message = l10n_util::GetStringUTF8(
miket_OOO 2013/01/09 18:52:41 Did you mean to set response.status in this case?
Gaurav 2013/01/12 01:08:26 yes. Fixed now. On 2013/01/09 18:52:41, miket wrot
+ IDS_EXTENSION_PACK_DIALOG_ERROR_KEY_INVALID);
+ results_ = developer::PackItem::Results::Create(response);
+ SendResponse(true);
+ return true;
+ }
+
+ // Pack job will release the function instance.
+ AddRef();
+
+ pack_job_ = new extensions::PackExtensionJob(
+ this, root_directory, key_file, flags);
+ pack_job_->Start();
+ return true;
+}
+
+DeveloperPrivatePackItemFunction::DeveloperPrivatePackItemFunction() {}
+
+DeveloperPrivatePackItemFunction::~DeveloperPrivatePackItemFunction() {}
+
DeveloperPrivateLoadUnpackedFunction::~DeveloperPrivateLoadUnpackedFunction() {}
+bool DeveloperPrivateChooseItemFunction::RunImpl() {
+
+ std::string select_type;
+ std::string file_type;
+ EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &select_type));
+ EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &file_type));
+ ui::SelectFileDialog::Type type = ui::SelectFileDialog::SELECT_FOLDER;
+ ui::SelectFileDialog::FileTypeInfo info;
+ if (select_type == "file") {
+ type = ui::SelectFileDialog::SELECT_OPEN_FILE;
miket_OOO 2013/01/09 18:52:41 No braces
Gaurav 2013/01/12 01:08:26 Done.
+ }
+ string16 select_title;
+
+ int file_type_index = 0;
+ if (file_type == "load") {
+ select_title = l10n_util::GetStringUTF16(IDS_EXTENSION_LOAD_FROM_DIRECTORY);
+ } else if (file_type == "pem") {
+ select_title = l10n_util::GetStringUTF16(
+ IDS_EXTENSION_PACK_DIALOG_SELECT_KEY);
+ info.extensions.push_back(std::vector<FilePath::StringType>());
+ info.extensions.front().push_back(FILE_PATH_LITERAL("pem"));
+ info.extension_description_overrides.push_back(
+ l10n_util::GetStringUTF16(
+ IDS_EXTENSION_PACK_DIALOG_KEY_FILE_TYPE_DESCRIPTION));
+ info.include_all_files = true;
+ file_type_index = 1;
+ } else {
+ NOTREACHED();
+ }
+
+ const FilePath& last_unpacked_directory =
+ DeveloperPrivateAPI::Get(profile())->getLastUnpackedDirectory();
miket_OOO 2013/01/09 18:52:41 That's a weirdly capitalized method (probably not
Gaurav 2013/01/12 01:08:26 Done.
+ return
+ ShowPicker(type,
miket_OOO 2013/01/09 18:52:41 Don't wrap after the return.
Gaurav 2013/01/12 01:08:26 Done.
+ last_unpacked_directory,
+ select_title,
+ info,
+ file_type_index);
+}
+
+void DeveloperPrivateChooseItemFunction::FileSelected(const FilePath& path) {
+ std::string result(std::string(UTF16ToUTF8(path.LossyDisplayName())));
miket_OOO 2013/01/09 18:52:41 Similar to above (temp variable doesn't add anythi
Gaurav 2013/01/12 01:08:26 Done.
+ SetResult(base::Value::CreateStringValue(result));
+ SendResponse(true);
+}
+
+void DeveloperPrivateChooseItemFunction::FileSelectionCanceled() {
+ SendResponse(false);
+}
+
+DeveloperPrivateChooseItemFunction::~DeveloperPrivateChooseItemFunction() {}
+
bool DeveloperPrivateGetStringsFunction::RunImpl() {
DictionaryValue* dict = new DictionaryValue();
SetResult(dict);

Powered by Google App Engine
This is Rietveld 408576698