Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/webui/options/pack_extension_handler.h" | 5 #include "chrome/browser/ui/webui/options/pack_extension_handler.h" |
| 6 | 6 |
| 7 #include "chrome/browser/extensions/extension_creator.h" | 7 #include "chrome/browser/extensions/extension_creator.h" |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
| 10 #include "content/public/browser/web_contents.h" | |
| 11 #include "content/public/browser/web_contents_view.h" | |
| 10 #include "content/public/browser/web_ui.h" | 12 #include "content/public/browser/web_ui.h" |
| 11 #include "grit/generated_resources.h" | 13 #include "grit/generated_resources.h" |
| 12 #include "ui/base/l10n/l10n_util.h" | 14 #include "ui/base/l10n/l10n_util.h" |
| 13 | 15 |
| 14 PackExtensionHandler::PackExtensionHandler() { | 16 PackExtensionHandler::PackExtensionHandler() { |
| 15 } | 17 } |
| 16 | 18 |
| 17 PackExtensionHandler::~PackExtensionHandler() { | 19 PackExtensionHandler::~PackExtensionHandler() { |
| 20 // There may be pending file dialogs, we need to tell them that we've gone | |
| 21 // away so they don't try and call back to us. | |
| 22 if (load_extension_dialog_) | |
| 23 load_extension_dialog_->ListenerDestroyed(); | |
| 24 | |
| 18 if (pack_job_.get()) | 25 if (pack_job_.get()) |
| 19 pack_job_->ClearClient(); | 26 pack_job_->ClearClient(); |
| 20 } | 27 } |
| 21 | 28 |
| 22 void PackExtensionHandler::Initialize() { | 29 void PackExtensionHandler::Initialize() { |
| 23 } | 30 } |
| 24 | 31 |
| 25 void PackExtensionHandler::GetLocalizedValues( | 32 void PackExtensionHandler::GetLocalizedValues( |
| 26 DictionaryValue* localized_strings) { | 33 DictionaryValue* localized_strings) { |
| 27 DCHECK(localized_strings); | 34 DCHECK(localized_strings); |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 45 l10n_util::GetStringUTF16(IDS_EXTENSION_PACK_DIALOG_BROWSE)); | 52 l10n_util::GetStringUTF16(IDS_EXTENSION_PACK_DIALOG_BROWSE)); |
| 46 localized_strings->SetString("packExtensionProceedAnyway", | 53 localized_strings->SetString("packExtensionProceedAnyway", |
| 47 l10n_util::GetStringUTF16(IDS_EXTENSION_PROCEED_ANYWAY)); | 54 l10n_util::GetStringUTF16(IDS_EXTENSION_PROCEED_ANYWAY)); |
| 48 localized_strings->SetString("packExtensionWarningTitle", | 55 localized_strings->SetString("packExtensionWarningTitle", |
| 49 l10n_util::GetStringUTF16(IDS_EXTENSION_PACK_WARNING_TITLE)); | 56 l10n_util::GetStringUTF16(IDS_EXTENSION_PACK_WARNING_TITLE)); |
| 50 localized_strings->SetString("packExtensionErrorTitle", | 57 localized_strings->SetString("packExtensionErrorTitle", |
| 51 l10n_util::GetStringUTF16(IDS_EXTENSION_PACK_ERROR_TITLE)); | 58 l10n_util::GetStringUTF16(IDS_EXTENSION_PACK_ERROR_TITLE)); |
| 52 } | 59 } |
| 53 | 60 |
| 54 void PackExtensionHandler::RegisterMessages() { | 61 void PackExtensionHandler::RegisterMessages() { |
| 55 // Setup handlers specific to this panel. | 62 web_ui()->RegisterMessageCallback( |
| 56 web_ui()->RegisterMessageCallback("pack", | 63 "pack", |
| 57 base::Bind(&PackExtensionHandler::HandlePackMessage, | 64 base::Bind(&PackExtensionHandler::HandlePackMessage, |
| 58 base::Unretained(this))); | 65 base::Unretained(this))); |
| 66 web_ui()->RegisterMessageCallback( | |
| 67 "packExtensionSelectFilePath", | |
| 68 base::Bind(&PackExtensionHandler::HandleSelectFilePathMessage, | |
| 69 base::Unretained(this))); | |
| 59 } | 70 } |
| 60 | 71 |
| 61 void PackExtensionHandler::OnPackSuccess(const FilePath& crx_file, | 72 void PackExtensionHandler::OnPackSuccess(const FilePath& crx_file, |
| 62 const FilePath& pem_file) { | 73 const FilePath& pem_file) { |
| 63 ListValue arguments; | 74 ListValue arguments; |
| 64 arguments.Append(Value::CreateStringValue( | 75 arguments.Append(Value::CreateStringValue( |
| 65 UTF16ToUTF8(PackExtensionJob::StandardSuccessMessage(crx_file, | 76 UTF16ToUTF8(PackExtensionJob::StandardSuccessMessage(crx_file, |
| 66 pem_file)))); | 77 pem_file)))); |
| 67 web_ui()->CallJavascriptFunction( | 78 web_ui()->CallJavascriptFunction( |
| 68 "PackExtensionOverlay.showSuccessMessage", arguments); | 79 "PackExtensionOverlay.showSuccessMessage", arguments); |
| 69 } | 80 } |
| 70 | 81 |
| 71 void PackExtensionHandler::OnPackFailure(const std::string& error, | 82 void PackExtensionHandler::OnPackFailure(const std::string& error, |
| 72 ExtensionCreator::ErrorType type) { | 83 ExtensionCreator::ErrorType type) { |
| 73 if (type == ExtensionCreator::kCRXExists) { | 84 if (type == ExtensionCreator::kCRXExists) { |
| 74 base::StringValue error_str(error); | 85 base::StringValue error_str(error); |
| 75 base::StringValue extension_path_str(extension_path_); | 86 base::StringValue extension_path_str(extension_path_); |
| 76 base::StringValue key_path_str(private_key_path_); | 87 base::StringValue key_path_str(private_key_path_); |
| 77 base::FundamentalValue overwrite_flag(ExtensionCreator::kOverwriteCRX); | 88 base::FundamentalValue overwrite_flag(ExtensionCreator::kOverwriteCRX); |
| 78 | 89 |
| 79 web_ui()->CallJavascriptFunction( | 90 web_ui()->CallJavascriptFunction( |
| 80 "ExtensionSettings.askToOverrideWarning", error_str, extension_path_str, | 91 "ExtensionSettings.askToOverrideWarning", error_str, extension_path_str, |
| 81 key_path_str, overwrite_flag); | 92 key_path_str, overwrite_flag); |
| 82 } else { | 93 } else { |
| 83 ShowAlert(error); | 94 ShowAlert(error); |
| 84 } | 95 } |
| 85 } | 96 } |
| 86 | 97 |
| 98 void PackExtensionHandler::FileSelected(const FilePath& path, int index, | |
| 99 void* params) { | |
| 100 ListValue results; | |
| 101 results.Append(Value::CreateStringValue(path.value())); | |
| 102 web_ui()->CallJavascriptFunction("window.handleFilePathSelected", results); | |
| 103 } | |
| 104 | |
| 105 void PackExtensionHandler::MultiFilesSelected( | |
| 106 const std::vector<FilePath>& files, void* params) { | |
| 107 NOTREACHED(); | |
| 108 } | |
| 109 | |
| 87 void PackExtensionHandler::HandlePackMessage(const ListValue* args) { | 110 void PackExtensionHandler::HandlePackMessage(const ListValue* args) { |
| 88 | 111 |
| 89 CHECK_EQ(3U, args->GetSize()); | 112 DCHECK_EQ(3U, args->GetSize()); |
| 90 CHECK(args->GetString(0, &extension_path_)); | 113 |
| 91 CHECK(args->GetString(1, &private_key_path_)); | 114 if (!args->GetString(0, &extension_path_) || |
| 115 !args->GetString(1, &private_key_path_)) | |
|
Evan Stade
2012/03/20 19:56:07
curlies
James Hawkins
2012/03/23 21:49:38
The C++ style guide does not require braces for mu
Evan Stade
2012/03/23 21:54:09
chrome convention, supported by style guide: "cond
James Hawkins
2012/03/23 22:04:34
OK, then it's an 'Optional nit'. I've seen plenty
| |
| 116 NOTREACHED(); | |
| 92 | 117 |
| 93 double flags_double = 0.0; | 118 double flags_double = 0.0; |
| 94 CHECK(args->GetDouble(2, &flags_double)); | 119 if (!args->GetDouble(2, &flags_double)) |
| 120 NOTREACHED(); | |
| 121 | |
| 95 int run_flags = static_cast<int>(flags_double); | 122 int run_flags = static_cast<int>(flags_double); |
| 96 | 123 |
| 97 FilePath root_directory = | 124 FilePath root_directory = |
| 98 FilePath::FromWStringHack(UTF8ToWide(extension_path_)); | 125 FilePath::FromWStringHack(UTF8ToWide(extension_path_)); |
| 99 FilePath key_file = FilePath::FromWStringHack(UTF8ToWide(private_key_path_)); | 126 FilePath key_file = FilePath::FromWStringHack(UTF8ToWide(private_key_path_)); |
| 100 | 127 |
| 101 if (root_directory.empty()) { | 128 if (root_directory.empty()) { |
| 102 if (extension_path_.empty()) { | 129 if (extension_path_.empty()) { |
| 103 ShowAlert(l10n_util::GetStringUTF8( | 130 ShowAlert(l10n_util::GetStringUTF8( |
| 104 IDS_EXTENSION_PACK_DIALOG_ERROR_ROOT_REQUIRED)); | 131 IDS_EXTENSION_PACK_DIALOG_ERROR_ROOT_REQUIRED)); |
| 105 } else { | 132 } else { |
| 106 ShowAlert(l10n_util::GetStringUTF8( | 133 ShowAlert(l10n_util::GetStringUTF8( |
| 107 IDS_EXTENSION_PACK_DIALOG_ERROR_ROOT_INVALID)); | 134 IDS_EXTENSION_PACK_DIALOG_ERROR_ROOT_INVALID)); |
| 108 } | 135 } |
| 109 | 136 |
| 110 return; | 137 return; |
| 111 } | 138 } |
| 112 | 139 |
| 113 if (!private_key_path_.empty() && key_file.empty()) { | 140 if (!private_key_path_.empty() && key_file.empty()) { |
| 114 ShowAlert(l10n_util::GetStringUTF8( | 141 ShowAlert(l10n_util::GetStringUTF8( |
| 115 IDS_EXTENSION_PACK_DIALOG_ERROR_KEY_INVALID)); | 142 IDS_EXTENSION_PACK_DIALOG_ERROR_KEY_INVALID)); |
| 116 return; | 143 return; |
| 117 } | 144 } |
| 118 | 145 |
| 119 pack_job_ = new PackExtensionJob(this, root_directory, key_file, run_flags); | 146 pack_job_ = new PackExtensionJob(this, root_directory, key_file, run_flags); |
| 120 pack_job_->Start(); | 147 pack_job_->Start(); |
| 121 } | 148 } |
| 122 | 149 |
| 150 void PackExtensionHandler::HandleSelectFilePathMessage( | |
| 151 const ListValue* args) { | |
| 152 DCHECK_EQ(2U, args->GetSize()); | |
| 153 | |
| 154 std::string select_type; | |
| 155 if (!args->GetString(0, &select_type)) | |
| 156 NOTREACHED(); | |
| 157 | |
| 158 std::string operation; | |
| 159 if (!args->GetString(1, &operation)) | |
| 160 NOTREACHED(); | |
| 161 | |
| 162 SelectFileDialog::Type type = SelectFileDialog::SELECT_FOLDER; | |
| 163 SelectFileDialog::FileTypeInfo info; | |
| 164 int file_type_index = 0; | |
| 165 if (select_type == "file") | |
| 166 type = SelectFileDialog::SELECT_OPEN_FILE; | |
| 167 | |
| 168 string16 select_title; | |
| 169 if (operation == "load") { | |
| 170 select_title = l10n_util::GetStringUTF16(IDS_EXTENSION_LOAD_FROM_DIRECTORY); | |
| 171 } else if (operation == "pem") { | |
| 172 select_title = l10n_util::GetStringUTF16( | |
| 173 IDS_EXTENSION_PACK_DIALOG_SELECT_KEY); | |
| 174 info.extensions.push_back(std::vector<FilePath::StringType>()); | |
| 175 info.extensions.front().push_back(FILE_PATH_LITERAL("pem")); | |
| 176 info.extension_description_overrides.push_back( | |
| 177 l10n_util::GetStringUTF16( | |
| 178 IDS_EXTENSION_PACK_DIALOG_KEY_FILE_TYPE_DESCRIPTION)); | |
| 179 info.include_all_files = true; | |
| 180 file_type_index = 1; | |
| 181 } else { | |
| 182 NOTREACHED(); | |
| 183 } | |
| 184 | |
| 185 load_extension_dialog_ = SelectFileDialog::Create(this); | |
| 186 load_extension_dialog_->SelectFile( | |
| 187 type, select_title, FilePath(), &info, file_type_index, | |
| 188 FILE_PATH_LITERAL(""), web_ui()->GetWebContents(), | |
| 189 web_ui()->GetWebContents()->GetView()->GetTopLevelNativeWindow(), NULL); | |
| 190 } | |
| 191 | |
| 123 void PackExtensionHandler::ShowAlert(const std::string& message) { | 192 void PackExtensionHandler::ShowAlert(const std::string& message) { |
| 124 ListValue arguments; | 193 ListValue arguments; |
| 125 arguments.Append(Value::CreateStringValue(message)); | 194 arguments.Append(Value::CreateStringValue(message)); |
| 126 web_ui()->CallJavascriptFunction("PackExtensionOverlay.showError", arguments); | 195 web_ui()->CallJavascriptFunction("PackExtensionOverlay.showError", arguments); |
| 127 } | 196 } |
| OLD | NEW |