| Index: chrome/browser/ui/webui/extensions/pack_extension_handler.cc
|
| diff --git a/chrome/browser/ui/webui/extensions/pack_extension_handler.cc b/chrome/browser/ui/webui/extensions/pack_extension_handler.cc
|
| index a372fa553787fa48e90df2af0a317f5f7e485e39..7df93cb2c607694280ea4fa786f56936240fb4ea 100644
|
| --- a/chrome/browser/ui/webui/extensions/pack_extension_handler.cc
|
| +++ b/chrome/browser/ui/webui/extensions/pack_extension_handler.cc
|
| @@ -7,6 +7,8 @@
|
| #include "chrome/browser/extensions/extension_creator.h"
|
| #include "base/bind.h"
|
| #include "base/utf_string_conversions.h"
|
| +#include "content/public/browser/web_contents.h"
|
| +#include "content/public/browser/web_contents_view.h"
|
| #include "content/public/browser/web_ui.h"
|
| #include "grit/generated_resources.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
| @@ -15,6 +17,11 @@ PackExtensionHandler::PackExtensionHandler() {
|
| }
|
|
|
| PackExtensionHandler::~PackExtensionHandler() {
|
| + // There may be pending file dialogs, we need to tell them that we've gone
|
| + // away so they don't try and call back to us.
|
| + if (load_extension_dialog_)
|
| + load_extension_dialog_->ListenerDestroyed();
|
| +
|
| if (pack_job_.get())
|
| pack_job_->ClearClient();
|
| }
|
| @@ -47,10 +54,14 @@ void PackExtensionHandler::GetLocalizedValues(
|
| }
|
|
|
| void PackExtensionHandler::RegisterMessages() {
|
| - // Setup handlers specific to this panel.
|
| - web_ui()->RegisterMessageCallback("pack",
|
| + web_ui()->RegisterMessageCallback(
|
| + "pack",
|
| base::Bind(&PackExtensionHandler::HandlePackMessage,
|
| base::Unretained(this)));
|
| + web_ui()->RegisterMessageCallback(
|
| + "packExtensionSelectFilePath",
|
| + base::Bind(&PackExtensionHandler::HandleSelectFilePathMessage,
|
| + base::Unretained(this)));
|
| }
|
|
|
| void PackExtensionHandler::OnPackSuccess(const FilePath& crx_file,
|
| @@ -79,14 +90,30 @@ void PackExtensionHandler::OnPackFailure(const std::string& error,
|
| }
|
| }
|
|
|
| +void PackExtensionHandler::FileSelected(const FilePath& path, int index,
|
| + void* params) {
|
| + ListValue results;
|
| + results.Append(Value::CreateStringValue(path.value()));
|
| + web_ui()->CallJavascriptFunction("window.handleFilePathSelected", results);
|
| +}
|
| +
|
| +void PackExtensionHandler::MultiFilesSelected(
|
| + const std::vector<FilePath>& files, void* params) {
|
| + NOTREACHED();
|
| +}
|
| +
|
| void PackExtensionHandler::HandlePackMessage(const ListValue* args) {
|
|
|
| - CHECK_EQ(3U, args->GetSize());
|
| - CHECK(args->GetString(0, &extension_path_));
|
| - CHECK(args->GetString(1, &private_key_path_));
|
| + DCHECK_EQ(3U, args->GetSize());
|
| +
|
| + if (!args->GetString(0, &extension_path_) ||
|
| + !args->GetString(1, &private_key_path_))
|
| + NOTREACHED();
|
|
|
| double flags_double = 0.0;
|
| - CHECK(args->GetDouble(2, &flags_double));
|
| + if (!args->GetDouble(2, &flags_double))
|
| + NOTREACHED();
|
| +
|
| int run_flags = static_cast<int>(flags_double);
|
|
|
| FilePath root_directory =
|
| @@ -115,6 +142,48 @@ void PackExtensionHandler::HandlePackMessage(const ListValue* args) {
|
| pack_job_->Start();
|
| }
|
|
|
| +void PackExtensionHandler::HandleSelectFilePathMessage(
|
| + const ListValue* args) {
|
| + DCHECK_EQ(2U, args->GetSize());
|
| +
|
| + std::string select_type;
|
| + if (!args->GetString(0, &select_type))
|
| + NOTREACHED();
|
| +
|
| + std::string operation;
|
| + if (!args->GetString(1, &operation))
|
| + NOTREACHED();
|
| +
|
| + SelectFileDialog::Type type = SelectFileDialog::SELECT_FOLDER;
|
| + SelectFileDialog::FileTypeInfo info;
|
| + int file_type_index = 0;
|
| + if (select_type == "file")
|
| + type = SelectFileDialog::SELECT_OPEN_FILE;
|
| +
|
| + string16 select_title;
|
| + if (operation == "load") {
|
| + select_title = l10n_util::GetStringUTF16(IDS_EXTENSION_LOAD_FROM_DIRECTORY);
|
| + } else if (operation == "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();
|
| + }
|
| +
|
| + load_extension_dialog_ = SelectFileDialog::Create(this);
|
| + load_extension_dialog_->SelectFile(
|
| + type, select_title, FilePath(), &info, file_type_index,
|
| + FILE_PATH_LITERAL(""), web_ui()->GetWebContents(),
|
| + web_ui()->GetWebContents()->GetView()->GetTopLevelNativeWindow(), NULL);
|
| +}
|
| +
|
| void PackExtensionHandler::ShowAlert(const std::string& message) {
|
| ListValue arguments;
|
| arguments.Append(Value::CreateStringValue(message));
|
|
|