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

Side by Side Diff: chrome/browser/extensions/extension_webstore_private_api.cc

Issue 8375034: Update WebstoreInstaller to be ref counted. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 2 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/extensions/extension_webstore_private_api.h" 5 #include "chrome/browser/extensions/extension_webstore_private_api.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
11 #include "base/values.h" 11 #include "base/values.h"
12 #include "chrome/browser/browser_process.h" 12 #include "chrome/browser/browser_process.h"
13 #include "chrome/browser/extensions/crx_installer.h" 13 #include "chrome/browser/extensions/crx_installer.h"
14 #include "chrome/browser/extensions/extension_function_dispatcher.h" 14 #include "chrome/browser/extensions/extension_function_dispatcher.h"
15 #include "chrome/browser/extensions/extension_install_dialog.h" 15 #include "chrome/browser/extensions/extension_install_dialog.h"
16 #include "chrome/browser/extensions/extension_prefs.h" 16 #include "chrome/browser/extensions/extension_prefs.h"
17 #include "chrome/browser/extensions/extension_service.h" 17 #include "chrome/browser/extensions/extension_service.h"
18 #include "chrome/browser/extensions/webstore_installer.h"
18 #include "chrome/browser/net/gaia/token_service.h" 19 #include "chrome/browser/net/gaia/token_service.h"
19 #include "chrome/browser/profiles/profile_manager.h" 20 #include "chrome/browser/profiles/profile_manager.h"
20 #include "chrome/browser/sync/profile_sync_service.h" 21 #include "chrome/browser/sync/profile_sync_service.h"
21 #include "chrome/common/chrome_notification_types.h" 22 #include "chrome/common/chrome_notification_types.h"
22 #include "chrome/common/chrome_switches.h" 23 #include "chrome/common/chrome_switches.h"
23 #include "chrome/common/pref_names.h" 24 #include "chrome/common/pref_names.h"
24 #include "chrome/common/extensions/extension_constants.h" 25 #include "chrome/common/extensions/extension_constants.h"
25 #include "chrome/common/extensions/extension_error_utils.h" 26 #include "chrome/common/extensions/extension_error_utils.h"
26 #include "chrome/common/extensions/extension_l10n_util.h" 27 #include "chrome/common/extensions/extension_l10n_util.h"
27 #include "chrome/common/net/gaia/gaia_constants.h" 28 #include "chrome/common/net/gaia/gaia_constants.h"
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 160
160 if (details->HasKey(kAppInstallBubbleKey)) 161 if (details->HasKey(kAppInstallBubbleKey))
161 EXTENSION_FUNCTION_VALIDATE(details->GetBoolean( 162 EXTENSION_FUNCTION_VALIDATE(details->GetBoolean(
162 kAppInstallBubbleKey, &use_app_installed_bubble_)); 163 kAppInstallBubbleKey, &use_app_installed_bubble_));
163 164
164 net::URLRequestContextGetter* context_getter = NULL; 165 net::URLRequestContextGetter* context_getter = NULL;
165 if (!icon_url.is_empty()) 166 if (!icon_url.is_empty())
166 context_getter = profile()->GetRequestContext(); 167 context_getter = profile()->GetRequestContext();
167 168
168 scoped_refptr<WebstoreInstallHelper> helper = new WebstoreInstallHelper( 169 scoped_refptr<WebstoreInstallHelper> helper = new WebstoreInstallHelper(
169 this, manifest_, icon_data_, icon_url, context_getter); 170 this, id_, manifest_, icon_data_, icon_url, context_getter);
170 171
171 // The helper will call us back via OnWebstoreParseSuccess or 172 // The helper will call us back via OnWebstoreParseSuccess or
172 // OnWebstoreParseFailure. 173 // OnWebstoreParseFailure.
173 helper->Start(); 174 helper->Start();
174 175
175 // Matched with a Release in OnWebstoreParseSuccess/OnWebstoreParseFailure. 176 // Matched with a Release in OnWebstoreParseSuccess/OnWebstoreParseFailure.
176 AddRef(); 177 AddRef();
177 178
178 // The response is sent asynchronously in OnWebstoreParseSuccess/ 179 // The response is sent asynchronously in OnWebstoreParseSuccess/
179 // OnWebstoreParseFailure. 180 // OnWebstoreParseFailure.
(...skipping 26 matching lines...) Expand all
206 break; 207 break;
207 case INVALID_ICON_URL: 208 case INVALID_ICON_URL:
208 result_.reset(Value::CreateStringValue("invalid_icon_url")); 209 result_.reset(Value::CreateStringValue("invalid_icon_url"));
209 break; 210 break;
210 default: 211 default:
211 CHECK(false); 212 CHECK(false);
212 } 213 }
213 } 214 }
214 215
215 void BeginInstallWithManifestFunction::OnWebstoreParseSuccess( 216 void BeginInstallWithManifestFunction::OnWebstoreParseSuccess(
216 const SkBitmap& icon, DictionaryValue* parsed_manifest) { 217 const std::string& id,
218 const SkBitmap& icon,
219 DictionaryValue* parsed_manifest) {
220 CHECK_EQ(id_, id);
217 CHECK(parsed_manifest); 221 CHECK(parsed_manifest);
218 icon_ = icon; 222 icon_ = icon;
219 parsed_manifest_.reset(parsed_manifest); 223 parsed_manifest_.reset(parsed_manifest);
220 224
221 ExtensionInstallUI::Prompt prompt(ExtensionInstallUI::INSTALL_PROMPT); 225 ExtensionInstallUI::Prompt prompt(ExtensionInstallUI::INSTALL_PROMPT);
222 226
223 if (!ShowExtensionInstallDialogForManifest( 227 if (!ShowExtensionInstallDialogForManifest(
224 profile(), 228 profile(),
225 this, 229 this,
226 parsed_manifest, 230 parsed_manifest,
227 id_, 231 id_,
228 localized_name_, 232 localized_name_,
229 "", // no localized description 233 "", // no localized description
230 &icon_, 234 &icon_,
231 prompt, 235 prompt,
232 &dummy_extension_)) { 236 &dummy_extension_)) {
233 OnWebstoreParseFailure(WebstoreInstallHelper::Delegate::MANIFEST_ERROR, 237 OnWebstoreParseFailure(id_, WebstoreInstallHelper::Delegate::MANIFEST_ERROR,
234 kInvalidManifestError); 238 kInvalidManifestError);
235 return; 239 return;
236 } 240 }
237 241
238 // Control flow finishes up in InstallUIProceed or InstallUIAbort. 242 // Control flow finishes up in InstallUIProceed or InstallUIAbort.
239 } 243 }
240 244
241 void BeginInstallWithManifestFunction::OnWebstoreParseFailure( 245 void BeginInstallWithManifestFunction::OnWebstoreParseFailure(
246 const std::string& id,
242 WebstoreInstallHelper::Delegate::InstallHelperResultCode result_code, 247 WebstoreInstallHelper::Delegate::InstallHelperResultCode result_code,
243 const std::string& error_message) { 248 const std::string& error_message) {
249 CHECK_EQ(id_, id);
250
244 // Map from WebstoreInstallHelper's result codes to ours. 251 // Map from WebstoreInstallHelper's result codes to ours.
245 switch (result_code) { 252 switch (result_code) {
246 case WebstoreInstallHelper::Delegate::UNKNOWN_ERROR: 253 case WebstoreInstallHelper::Delegate::UNKNOWN_ERROR:
247 SetResult(UNKNOWN_ERROR); 254 SetResult(UNKNOWN_ERROR);
248 break; 255 break;
249 case WebstoreInstallHelper::Delegate::ICON_ERROR: 256 case WebstoreInstallHelper::Delegate::ICON_ERROR:
250 SetResult(ICON_ERROR); 257 SetResult(ICON_ERROR);
251 break; 258 break;
252 case WebstoreInstallHelper::Delegate::MANIFEST_ERROR: 259 case WebstoreInstallHelper::Delegate::MANIFEST_ERROR:
253 SetResult(MANIFEST_ERROR); 260 SetResult(MANIFEST_ERROR);
(...skipping 30 matching lines...) Expand all
284 Release(); 291 Release();
285 } 292 }
286 293
287 void BeginInstallWithManifestFunction::InstallUIAbort(bool user_initiated) { 294 void BeginInstallWithManifestFunction::InstallUIAbort(bool user_initiated) {
288 error_ = kUserCancelledError; 295 error_ = kUserCancelledError;
289 SetResult(USER_CANCELLED); 296 SetResult(USER_CANCELLED);
290 SendResponse(false); 297 SendResponse(false);
291 298
292 // The web store install histograms are a subset of the install histograms. 299 // The web store install histograms are a subset of the install histograms.
293 // We need to record both histograms here since CrxInstaller::InstallUIAbort 300 // We need to record both histograms here since CrxInstaller::InstallUIAbort
294 // is never called for web store install cancellations 301 // is never called for web store install cancellations.
295 std::string histogram_name = user_initiated ? 302 std::string histogram_name = user_initiated ?
296 "Extensions.Permissions_WebStoreInstallCancel" : 303 "Extensions.Permissions_WebStoreInstallCancel" :
297 "Extensions.Permissions_WebStoreInstallAbort"; 304 "Extensions.Permissions_WebStoreInstallAbort";
298 ExtensionService::RecordPermissionMessagesHistogram( 305 ExtensionService::RecordPermissionMessagesHistogram(
299 dummy_extension_, histogram_name.c_str()); 306 dummy_extension_, histogram_name.c_str());
300 307
301 histogram_name = user_initiated ? 308 histogram_name = user_initiated ?
302 "Extensions.Permissions_InstallCancel" : 309 "Extensions.Permissions_InstallCancel" :
303 "Extensions.Permissions_InstallAbort"; 310 "Extensions.Permissions_InstallAbort";
304 ExtensionService::RecordPermissionMessagesHistogram( 311 ExtensionService::RecordPermissionMessagesHistogram(
(...skipping 17 matching lines...) Expand all
322 if (!CrxInstaller::IsIdWhitelisted(id) && 329 if (!CrxInstaller::IsIdWhitelisted(id) &&
323 !CrxInstaller::GetWhitelistEntry(id)) { 330 !CrxInstaller::GetWhitelistEntry(id)) {
324 error_ = ExtensionErrorUtils::FormatErrorMessage( 331 error_ = ExtensionErrorUtils::FormatErrorMessage(
325 kNoPreviousBeginInstallWithManifestError, id); 332 kNoPreviousBeginInstallWithManifestError, id);
326 return false; 333 return false;
327 } 334 }
328 335
329 // The extension will install through the normal extension install flow, but 336 // The extension will install through the normal extension install flow, but
330 // the above call to SetWhitelistedInstallId will bypass the normal 337 // the above call to SetWhitelistedInstallId will bypass the normal
331 // permissions install dialog. 338 // permissions install dialog.
332 WebstoreInstaller* installer = 339 scoped_refptr<WebstoreInstaller> installer = new WebstoreInstaller(
333 profile()->GetExtensionService()->webstore_installer(); 340 profile(), test_webstore_installer_delegate,
334 installer->InstallExtension( 341 &(dispatcher()->delegate()->GetAssociatedTabContents()->controller()),
335 id, test_webstore_installer_delegate, WebstoreInstaller::FLAG_NONE); 342 id, WebstoreInstaller::FLAG_NONE);
343 installer->Start();
336 344
337 return true; 345 return true;
338 } 346 }
339 347
348
Mihai Parparita -not on Chrome 2011/10/24 22:36:18 Extra newline.
jstritar 2011/10/25 02:45:04 Done.
340 bool GetBrowserLoginFunction::RunImpl() { 349 bool GetBrowserLoginFunction::RunImpl() {
341 if (!IsWebStoreURL(profile_, source_url())) 350 if (!IsWebStoreURL(profile_, source_url()))
342 return false; 351 return false;
343 result_.reset(CreateLoginResult(profile_->GetOriginalProfile())); 352 result_.reset(CreateLoginResult(profile_->GetOriginalProfile()));
344 return true; 353 return true;
345 } 354 }
346 355
347 bool GetStoreLoginFunction::RunImpl() { 356 bool GetStoreLoginFunction::RunImpl() {
348 if (!IsWebStoreURL(profile_, source_url())) 357 if (!IsWebStoreURL(profile_, source_url()))
349 return false; 358 return false;
(...skipping 11 matching lines...) Expand all
361 bool SetStoreLoginFunction::RunImpl() { 370 bool SetStoreLoginFunction::RunImpl() {
362 if (!IsWebStoreURL(profile_, source_url())) 371 if (!IsWebStoreURL(profile_, source_url()))
363 return false; 372 return false;
364 std::string login; 373 std::string login;
365 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &login)); 374 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &login));
366 ExtensionService* service = profile_->GetExtensionService(); 375 ExtensionService* service = profile_->GetExtensionService();
367 ExtensionPrefs* prefs = service->extension_prefs(); 376 ExtensionPrefs* prefs = service->extension_prefs();
368 prefs->SetWebStoreLogin(login); 377 prefs->SetWebStoreLogin(login);
369 return true; 378 return true;
370 } 379 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698