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

Side by Side Diff: chrome/browser/ui/webui/extensions/pack_extension_handler.cc

Issue 9703039: Extensions: Don't pass the selected unpacked extension path from JS to C++ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Created 8 years, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/extensions/pack_extension_handler.h" 5 #include "chrome/browser/ui/webui/extensions/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::GetLocalizedValues( 29 void PackExtensionHandler::GetLocalizedValues(
23 DictionaryValue* localized_strings) { 30 DictionaryValue* localized_strings) {
24 DCHECK(localized_strings); 31 DCHECK(localized_strings);
25 32
26 localized_strings->SetString("packExtensionOverlay", 33 localized_strings->SetString("packExtensionOverlay",
27 l10n_util::GetStringUTF16(IDS_EXTENSION_PACK_DIALOG_TITLE)); 34 l10n_util::GetStringUTF16(IDS_EXTENSION_PACK_DIALOG_TITLE));
(...skipping 12 matching lines...) Expand all
40 l10n_util::GetStringUTF16(IDS_EXTENSION_PACK_DIALOG_BROWSE)); 47 l10n_util::GetStringUTF16(IDS_EXTENSION_PACK_DIALOG_BROWSE));
41 localized_strings->SetString("packExtensionProceedAnyway", 48 localized_strings->SetString("packExtensionProceedAnyway",
42 l10n_util::GetStringUTF16(IDS_EXTENSION_PROCEED_ANYWAY)); 49 l10n_util::GetStringUTF16(IDS_EXTENSION_PROCEED_ANYWAY));
43 localized_strings->SetString("packExtensionWarningTitle", 50 localized_strings->SetString("packExtensionWarningTitle",
44 l10n_util::GetStringUTF16(IDS_EXTENSION_PACK_WARNING_TITLE)); 51 l10n_util::GetStringUTF16(IDS_EXTENSION_PACK_WARNING_TITLE));
45 localized_strings->SetString("packExtensionErrorTitle", 52 localized_strings->SetString("packExtensionErrorTitle",
46 l10n_util::GetStringUTF16(IDS_EXTENSION_PACK_ERROR_TITLE)); 53 l10n_util::GetStringUTF16(IDS_EXTENSION_PACK_ERROR_TITLE));
47 } 54 }
48 55
49 void PackExtensionHandler::RegisterMessages() { 56 void PackExtensionHandler::RegisterMessages() {
50 // Setup handlers specific to this panel. 57 web_ui()->RegisterMessageCallback(
51 web_ui()->RegisterMessageCallback("pack", 58 "pack",
52 base::Bind(&PackExtensionHandler::HandlePackMessage, 59 base::Bind(&PackExtensionHandler::HandlePackMessage,
53 base::Unretained(this))); 60 base::Unretained(this)));
61 web_ui()->RegisterMessageCallback(
62 "packExtensionSelectFilePath",
63 base::Bind(&PackExtensionHandler::HandleSelectFilePathMessage,
64 base::Unretained(this)));
54 } 65 }
55 66
56 void PackExtensionHandler::OnPackSuccess(const FilePath& crx_file, 67 void PackExtensionHandler::OnPackSuccess(const FilePath& crx_file,
57 const FilePath& pem_file) { 68 const FilePath& pem_file) {
58 ListValue arguments; 69 ListValue arguments;
59 arguments.Append(Value::CreateStringValue( 70 arguments.Append(Value::CreateStringValue(
60 UTF16ToUTF8(PackExtensionJob::StandardSuccessMessage(crx_file, 71 UTF16ToUTF8(PackExtensionJob::StandardSuccessMessage(crx_file,
61 pem_file)))); 72 pem_file))));
62 web_ui()->CallJavascriptFunction( 73 web_ui()->CallJavascriptFunction(
63 "PackExtensionOverlay.showSuccessMessage", arguments); 74 "PackExtensionOverlay.showSuccessMessage", arguments);
64 } 75 }
65 76
66 void PackExtensionHandler::OnPackFailure(const std::string& error, 77 void PackExtensionHandler::OnPackFailure(const std::string& error,
67 ExtensionCreator::ErrorType type) { 78 ExtensionCreator::ErrorType type) {
68 if (type == ExtensionCreator::kCRXExists) { 79 if (type == ExtensionCreator::kCRXExists) {
69 base::StringValue error_str(error); 80 base::StringValue error_str(error);
70 base::StringValue extension_path_str(extension_path_); 81 base::StringValue extension_path_str(extension_path_);
71 base::StringValue key_path_str(private_key_path_); 82 base::StringValue key_path_str(private_key_path_);
72 base::FundamentalValue overwrite_flag(ExtensionCreator::kOverwriteCRX); 83 base::FundamentalValue overwrite_flag(ExtensionCreator::kOverwriteCRX);
73 84
74 web_ui()->CallJavascriptFunction( 85 web_ui()->CallJavascriptFunction(
75 "ExtensionSettings.askToOverrideWarning", error_str, extension_path_str, 86 "ExtensionSettings.askToOverrideWarning", error_str, extension_path_str,
76 key_path_str, overwrite_flag); 87 key_path_str, overwrite_flag);
77 } else { 88 } else {
78 ShowAlert(error); 89 ShowAlert(error);
79 } 90 }
80 } 91 }
81 92
93 void PackExtensionHandler::FileSelected(const FilePath& path, int index,
94 void* params) {
95 ListValue results;
96 results.Append(Value::CreateStringValue(path.value()));
97 web_ui()->CallJavascriptFunction("window.handleFilePathSelected", results);
98 }
99
100 void PackExtensionHandler::MultiFilesSelected(
101 const std::vector<FilePath>& files, void* params) {
102 NOTREACHED();
103 }
104
82 void PackExtensionHandler::HandlePackMessage(const ListValue* args) { 105 void PackExtensionHandler::HandlePackMessage(const ListValue* args) {
83 106
84 CHECK_EQ(3U, args->GetSize()); 107 DCHECK_EQ(3U, args->GetSize());
85 CHECK(args->GetString(0, &extension_path_)); 108
86 CHECK(args->GetString(1, &private_key_path_)); 109 if (!args->GetString(0, &extension_path_) ||
110 !args->GetString(1, &private_key_path_))
111 NOTREACHED();
87 112
88 double flags_double = 0.0; 113 double flags_double = 0.0;
89 CHECK(args->GetDouble(2, &flags_double)); 114 if (!args->GetDouble(2, &flags_double))
115 NOTREACHED();
116
90 int run_flags = static_cast<int>(flags_double); 117 int run_flags = static_cast<int>(flags_double);
91 118
92 FilePath root_directory = 119 FilePath root_directory =
93 FilePath::FromWStringHack(UTF8ToWide(extension_path_)); 120 FilePath::FromWStringHack(UTF8ToWide(extension_path_));
94 FilePath key_file = FilePath::FromWStringHack(UTF8ToWide(private_key_path_)); 121 FilePath key_file = FilePath::FromWStringHack(UTF8ToWide(private_key_path_));
95 122
96 if (root_directory.empty()) { 123 if (root_directory.empty()) {
97 if (extension_path_.empty()) { 124 if (extension_path_.empty()) {
98 ShowAlert(l10n_util::GetStringUTF8( 125 ShowAlert(l10n_util::GetStringUTF8(
99 IDS_EXTENSION_PACK_DIALOG_ERROR_ROOT_REQUIRED)); 126 IDS_EXTENSION_PACK_DIALOG_ERROR_ROOT_REQUIRED));
100 } else { 127 } else {
101 ShowAlert(l10n_util::GetStringUTF8( 128 ShowAlert(l10n_util::GetStringUTF8(
102 IDS_EXTENSION_PACK_DIALOG_ERROR_ROOT_INVALID)); 129 IDS_EXTENSION_PACK_DIALOG_ERROR_ROOT_INVALID));
103 } 130 }
104 131
105 return; 132 return;
106 } 133 }
107 134
108 if (!private_key_path_.empty() && key_file.empty()) { 135 if (!private_key_path_.empty() && key_file.empty()) {
109 ShowAlert(l10n_util::GetStringUTF8( 136 ShowAlert(l10n_util::GetStringUTF8(
110 IDS_EXTENSION_PACK_DIALOG_ERROR_KEY_INVALID)); 137 IDS_EXTENSION_PACK_DIALOG_ERROR_KEY_INVALID));
111 return; 138 return;
112 } 139 }
113 140
114 pack_job_ = new PackExtensionJob(this, root_directory, key_file, run_flags); 141 pack_job_ = new PackExtensionJob(this, root_directory, key_file, run_flags);
115 pack_job_->Start(); 142 pack_job_->Start();
116 } 143 }
117 144
145 void PackExtensionHandler::HandleSelectFilePathMessage(
146 const ListValue* args) {
147 DCHECK_EQ(2U, args->GetSize());
148
149 std::string select_type;
150 if (!args->GetString(0, &select_type))
151 NOTREACHED();
152
153 std::string operation;
154 if (!args->GetString(1, &operation))
155 NOTREACHED();
156
157 SelectFileDialog::Type type = SelectFileDialog::SELECT_FOLDER;
158 SelectFileDialog::FileTypeInfo info;
159 int file_type_index = 0;
160 if (select_type == "file")
161 type = SelectFileDialog::SELECT_OPEN_FILE;
162
163 string16 select_title;
164 if (operation == "load") {
165 select_title = l10n_util::GetStringUTF16(IDS_EXTENSION_LOAD_FROM_DIRECTORY);
166 } else if (operation == "pem") {
167 select_title = l10n_util::GetStringUTF16(
168 IDS_EXTENSION_PACK_DIALOG_SELECT_KEY);
169 info.extensions.push_back(std::vector<FilePath::StringType>());
170 info.extensions.front().push_back(FILE_PATH_LITERAL("pem"));
171 info.extension_description_overrides.push_back(
172 l10n_util::GetStringUTF16(
173 IDS_EXTENSION_PACK_DIALOG_KEY_FILE_TYPE_DESCRIPTION));
174 info.include_all_files = true;
175 file_type_index = 1;
176 } else {
177 NOTREACHED();
178 }
179
180 load_extension_dialog_ = SelectFileDialog::Create(this);
181 load_extension_dialog_->SelectFile(
182 type, select_title, FilePath(), &info, file_type_index,
183 FILE_PATH_LITERAL(""), web_ui()->GetWebContents(),
184 web_ui()->GetWebContents()->GetView()->GetTopLevelNativeWindow(), NULL);
185 }
186
118 void PackExtensionHandler::ShowAlert(const std::string& message) { 187 void PackExtensionHandler::ShowAlert(const std::string& message) {
119 ListValue arguments; 188 ListValue arguments;
120 arguments.Append(Value::CreateStringValue(message)); 189 arguments.Append(Value::CreateStringValue(message));
121 web_ui()->CallJavascriptFunction("PackExtensionOverlay.showError", arguments); 190 web_ui()->CallJavascriptFunction("PackExtensionOverlay.showError", arguments);
122 } 191 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/extensions/pack_extension_handler.h ('k') | chrome/browser/ui/webui/options2/options_ui2.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698