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/extensions/api/webstore_private/webstore_private_api.h" | 5 #include "chrome/browser/extensions/api/webstore_private/webstore_private_api.h" |
6 | 6 |
7 #include "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
8 #include "base/memory/scoped_vector.h" | 8 #include "base/memory/scoped_vector.h" |
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" |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
253 | 253 |
254 BeginInstallWithManifestFunction::~BeginInstallWithManifestFunction() {} | 254 BeginInstallWithManifestFunction::~BeginInstallWithManifestFunction() {} |
255 | 255 |
256 bool BeginInstallWithManifestFunction::RunImpl() { | 256 bool BeginInstallWithManifestFunction::RunImpl() { |
257 DictionaryValue* details = NULL; | 257 DictionaryValue* details = NULL; |
258 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &details)); | 258 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &details)); |
259 CHECK(details); | 259 CHECK(details); |
260 | 260 |
261 EXTENSION_FUNCTION_VALIDATE(details->GetString(kIdKey, &id_)); | 261 EXTENSION_FUNCTION_VALIDATE(details->GetString(kIdKey, &id_)); |
262 if (!extensions::Extension::IdIsValid(id_)) { | 262 if (!extensions::Extension::IdIsValid(id_)) { |
263 SetResult(INVALID_ID); | 263 SetResultCode(INVALID_ID); |
264 error_ = kInvalidIdError; | 264 error_ = kInvalidIdError; |
265 return false; | 265 return false; |
266 } | 266 } |
267 | 267 |
268 EXTENSION_FUNCTION_VALIDATE(details->GetString(kManifestKey, &manifest_)); | 268 EXTENSION_FUNCTION_VALIDATE(details->GetString(kManifestKey, &manifest_)); |
269 | 269 |
270 if (details->HasKey(kIconDataKey) && details->HasKey(kIconUrlKey)) { | 270 if (details->HasKey(kIconDataKey) && details->HasKey(kIconUrlKey)) { |
271 SetResult(ICON_ERROR); | 271 SetResultCode(ICON_ERROR); |
272 error_ = kCannotSpecifyIconDataAndUrlError; | 272 error_ = kCannotSpecifyIconDataAndUrlError; |
273 return false; | 273 return false; |
274 } | 274 } |
275 | 275 |
276 if (details->HasKey(kIconDataKey)) | 276 if (details->HasKey(kIconDataKey)) |
277 EXTENSION_FUNCTION_VALIDATE(details->GetString(kIconDataKey, &icon_data_)); | 277 EXTENSION_FUNCTION_VALIDATE(details->GetString(kIconDataKey, &icon_data_)); |
278 | 278 |
279 GURL icon_url; | 279 GURL icon_url; |
280 if (details->HasKey(kIconUrlKey)) { | 280 if (details->HasKey(kIconUrlKey)) { |
281 std::string tmp_url; | 281 std::string tmp_url; |
282 EXTENSION_FUNCTION_VALIDATE(details->GetString(kIconUrlKey, &tmp_url)); | 282 EXTENSION_FUNCTION_VALIDATE(details->GetString(kIconUrlKey, &tmp_url)); |
283 icon_url = source_url().Resolve(tmp_url); | 283 icon_url = source_url().Resolve(tmp_url); |
284 if (!icon_url.is_valid()) { | 284 if (!icon_url.is_valid()) { |
285 SetResult(INVALID_ICON_URL); | 285 SetResultCode(INVALID_ICON_URL); |
286 error_ = kInvalidIconUrlError; | 286 error_ = kInvalidIconUrlError; |
287 return false; | 287 return false; |
288 } | 288 } |
289 } | 289 } |
290 | 290 |
291 if (details->HasKey(kLocalizedNameKey)) | 291 if (details->HasKey(kLocalizedNameKey)) |
292 EXTENSION_FUNCTION_VALIDATE(details->GetString(kLocalizedNameKey, | 292 EXTENSION_FUNCTION_VALIDATE(details->GetString(kLocalizedNameKey, |
293 &localized_name_)); | 293 &localized_name_)); |
294 | 294 |
295 if (details->HasKey(kAppInstallBubbleKey)) | 295 if (details->HasKey(kAppInstallBubbleKey)) |
(...skipping 13 matching lines...) Expand all Loading... |
309 | 309 |
310 // Matched with a Release in OnWebstoreParseSuccess/OnWebstoreParseFailure. | 310 // Matched with a Release in OnWebstoreParseSuccess/OnWebstoreParseFailure. |
311 AddRef(); | 311 AddRef(); |
312 | 312 |
313 // The response is sent asynchronously in OnWebstoreParseSuccess/ | 313 // The response is sent asynchronously in OnWebstoreParseSuccess/ |
314 // OnWebstoreParseFailure. | 314 // OnWebstoreParseFailure. |
315 return true; | 315 return true; |
316 } | 316 } |
317 | 317 |
318 | 318 |
319 void BeginInstallWithManifestFunction::SetResult(ResultCode code) { | 319 void BeginInstallWithManifestFunction::SetResultCode(ResultCode code) { |
320 switch (code) { | 320 switch (code) { |
321 case ERROR_NONE: | 321 case ERROR_NONE: |
322 result_.reset(Value::CreateStringValue("")); | 322 SetResult(Value::CreateStringValue("")); |
323 break; | 323 break; |
324 case UNKNOWN_ERROR: | 324 case UNKNOWN_ERROR: |
325 result_.reset(Value::CreateStringValue("unknown_error")); | 325 SetResult(Value::CreateStringValue("unknown_error")); |
326 break; | 326 break; |
327 case USER_CANCELLED: | 327 case USER_CANCELLED: |
328 result_.reset(Value::CreateStringValue("user_cancelled")); | 328 SetResult(Value::CreateStringValue("user_cancelled")); |
329 break; | 329 break; |
330 case MANIFEST_ERROR: | 330 case MANIFEST_ERROR: |
331 result_.reset(Value::CreateStringValue("manifest_error")); | 331 SetResult(Value::CreateStringValue("manifest_error")); |
332 break; | 332 break; |
333 case ICON_ERROR: | 333 case ICON_ERROR: |
334 result_.reset(Value::CreateStringValue("icon_error")); | 334 SetResult(Value::CreateStringValue("icon_error")); |
335 break; | 335 break; |
336 case INVALID_ID: | 336 case INVALID_ID: |
337 result_.reset(Value::CreateStringValue("invalid_id")); | 337 SetResult(Value::CreateStringValue("invalid_id")); |
338 break; | 338 break; |
339 case PERMISSION_DENIED: | 339 case PERMISSION_DENIED: |
340 result_.reset(Value::CreateStringValue("permission_denied")); | 340 SetResult(Value::CreateStringValue("permission_denied")); |
341 break; | 341 break; |
342 case INVALID_ICON_URL: | 342 case INVALID_ICON_URL: |
343 result_.reset(Value::CreateStringValue("invalid_icon_url")); | 343 SetResult(Value::CreateStringValue("invalid_icon_url")); |
344 break; | 344 break; |
345 default: | 345 default: |
346 CHECK(false); | 346 CHECK(false); |
347 } | 347 } |
348 } | 348 } |
349 | 349 |
350 void BeginInstallWithManifestFunction::OnWebstoreParseSuccess( | 350 void BeginInstallWithManifestFunction::OnWebstoreParseSuccess( |
351 const std::string& id, | 351 const std::string& id, |
352 const SkBitmap& icon, | 352 const SkBitmap& icon, |
353 DictionaryValue* parsed_manifest) { | 353 DictionaryValue* parsed_manifest) { |
(...skipping 20 matching lines...) Expand all Loading... |
374 | 374 |
375 void BeginInstallWithManifestFunction::OnWebstoreParseFailure( | 375 void BeginInstallWithManifestFunction::OnWebstoreParseFailure( |
376 const std::string& id, | 376 const std::string& id, |
377 WebstoreInstallHelper::Delegate::InstallHelperResultCode result_code, | 377 WebstoreInstallHelper::Delegate::InstallHelperResultCode result_code, |
378 const std::string& error_message) { | 378 const std::string& error_message) { |
379 CHECK_EQ(id_, id); | 379 CHECK_EQ(id_, id); |
380 | 380 |
381 // Map from WebstoreInstallHelper's result codes to ours. | 381 // Map from WebstoreInstallHelper's result codes to ours. |
382 switch (result_code) { | 382 switch (result_code) { |
383 case WebstoreInstallHelper::Delegate::UNKNOWN_ERROR: | 383 case WebstoreInstallHelper::Delegate::UNKNOWN_ERROR: |
384 SetResult(UNKNOWN_ERROR); | 384 SetResultCode(UNKNOWN_ERROR); |
385 break; | 385 break; |
386 case WebstoreInstallHelper::Delegate::ICON_ERROR: | 386 case WebstoreInstallHelper::Delegate::ICON_ERROR: |
387 SetResult(ICON_ERROR); | 387 SetResultCode(ICON_ERROR); |
388 break; | 388 break; |
389 case WebstoreInstallHelper::Delegate::MANIFEST_ERROR: | 389 case WebstoreInstallHelper::Delegate::MANIFEST_ERROR: |
390 SetResult(MANIFEST_ERROR); | 390 SetResultCode(MANIFEST_ERROR); |
391 break; | 391 break; |
392 default: | 392 default: |
393 CHECK(false); | 393 CHECK(false); |
394 } | 394 } |
395 error_ = error_message; | 395 error_ = error_message; |
396 SendResponse(false); | 396 SendResponse(false); |
397 | 397 |
398 // Matches the AddRef in RunImpl(). | 398 // Matches the AddRef in RunImpl(). |
399 Release(); | 399 Release(); |
400 } | 400 } |
401 | 401 |
402 void BeginInstallWithManifestFunction::InstallUIProceed() { | 402 void BeginInstallWithManifestFunction::InstallUIProceed() { |
403 // This gets cleared in CrxInstaller::ConfirmInstall(). TODO(asargent) - in | 403 // This gets cleared in CrxInstaller::ConfirmInstall(). TODO(asargent) - in |
404 // the future we may also want to add time-based expiration, where a whitelist | 404 // the future we may also want to add time-based expiration, where a whitelist |
405 // entry is only valid for some number of minutes. | 405 // entry is only valid for some number of minutes. |
406 scoped_ptr<WebstoreInstaller::Approval> approval( | 406 scoped_ptr<WebstoreInstaller::Approval> approval( |
407 WebstoreInstaller::Approval::CreateWithNoInstallPrompt( | 407 WebstoreInstaller::Approval::CreateWithNoInstallPrompt( |
408 profile(), id_, parsed_manifest_.Pass())); | 408 profile(), id_, parsed_manifest_.Pass())); |
409 approval->use_app_installed_bubble = use_app_installed_bubble_; | 409 approval->use_app_installed_bubble = use_app_installed_bubble_; |
410 approval->record_oauth2_grant = install_prompt_->record_oauth2_grant(); | 410 approval->record_oauth2_grant = install_prompt_->record_oauth2_grant(); |
411 g_pending_approvals.Get().PushApproval(approval.Pass()); | 411 g_pending_approvals.Get().PushApproval(approval.Pass()); |
412 | 412 |
413 SetResult(ERROR_NONE); | 413 SetResultCode(ERROR_NONE); |
414 SendResponse(true); | 414 SendResponse(true); |
415 | 415 |
416 // The Permissions_Install histogram is recorded from the ExtensionService | 416 // The Permissions_Install histogram is recorded from the ExtensionService |
417 // for all extension installs, so we only need to record the web store | 417 // for all extension installs, so we only need to record the web store |
418 // specific histogram here. | 418 // specific histogram here. |
419 ExtensionService::RecordPermissionMessagesHistogram( | 419 ExtensionService::RecordPermissionMessagesHistogram( |
420 dummy_extension_, "Extensions.Permissions_WebStoreInstall"); | 420 dummy_extension_, "Extensions.Permissions_WebStoreInstall"); |
421 | 421 |
422 // Matches the AddRef in RunImpl(). | 422 // Matches the AddRef in RunImpl(). |
423 Release(); | 423 Release(); |
424 } | 424 } |
425 | 425 |
426 void BeginInstallWithManifestFunction::InstallUIAbort(bool user_initiated) { | 426 void BeginInstallWithManifestFunction::InstallUIAbort(bool user_initiated) { |
427 error_ = kUserCancelledError; | 427 error_ = kUserCancelledError; |
428 SetResult(USER_CANCELLED); | 428 SetResultCode(USER_CANCELLED); |
429 SendResponse(false); | 429 SendResponse(false); |
430 | 430 |
431 // The web store install histograms are a subset of the install histograms. | 431 // The web store install histograms are a subset of the install histograms. |
432 // We need to record both histograms here since CrxInstaller::InstallUIAbort | 432 // We need to record both histograms here since CrxInstaller::InstallUIAbort |
433 // is never called for web store install cancellations. | 433 // is never called for web store install cancellations. |
434 std::string histogram_name = user_initiated ? | 434 std::string histogram_name = user_initiated ? |
435 "Extensions.Permissions_WebStoreInstallCancel" : | 435 "Extensions.Permissions_WebStoreInstallCancel" : |
436 "Extensions.Permissions_WebStoreInstallAbort"; | 436 "Extensions.Permissions_WebStoreInstallAbort"; |
437 ExtensionService::RecordPermissionMessagesHistogram( | 437 ExtensionService::RecordPermissionMessagesHistogram( |
438 dummy_extension_, histogram_name.c_str()); | 438 dummy_extension_, histogram_name.c_str()); |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
545 const std::string& id, const std::string& error) { | 545 const std::string& id, const std::string& error) { |
546 CHECK_EQ(id_, id); | 546 CHECK_EQ(id_, id); |
547 | 547 |
548 error_ = error; | 548 error_ = error; |
549 SendResponse(false); | 549 SendResponse(false); |
550 | 550 |
551 Release(); // Matches the AddRef() in RunImpl(). | 551 Release(); // Matches the AddRef() in RunImpl(). |
552 } | 552 } |
553 | 553 |
554 bool GetBrowserLoginFunction::RunImpl() { | 554 bool GetBrowserLoginFunction::RunImpl() { |
555 result_.reset(CreateLoginResult(profile_->GetOriginalProfile())); | 555 SetResult(CreateLoginResult(profile_->GetOriginalProfile())); |
556 return true; | 556 return true; |
557 } | 557 } |
558 | 558 |
559 bool GetStoreLoginFunction::RunImpl() { | 559 bool GetStoreLoginFunction::RunImpl() { |
560 ExtensionService* service = profile_->GetExtensionService(); | 560 ExtensionService* service = profile_->GetExtensionService(); |
561 ExtensionPrefs* prefs = service->extension_prefs(); | 561 ExtensionPrefs* prefs = service->extension_prefs(); |
562 std::string login; | 562 std::string login; |
563 if (prefs->GetWebStoreLogin(&login)) { | 563 if (prefs->GetWebStoreLogin(&login)) { |
564 result_.reset(Value::CreateStringValue(login)); | 564 SetResult(Value::CreateStringValue(login)); |
565 } else { | 565 } else { |
566 result_.reset(Value::CreateStringValue(std::string())); | 566 SetResult(Value::CreateStringValue(std::string())); |
567 } | 567 } |
568 return true; | 568 return true; |
569 } | 569 } |
570 | 570 |
571 bool SetStoreLoginFunction::RunImpl() { | 571 bool SetStoreLoginFunction::RunImpl() { |
572 std::string login; | 572 std::string login; |
573 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &login)); | 573 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &login)); |
574 ExtensionService* service = profile_->GetExtensionService(); | 574 ExtensionService* service = profile_->GetExtensionService(); |
575 ExtensionPrefs* prefs = service->extension_prefs(); | 575 ExtensionPrefs* prefs = service->extension_prefs(); |
576 prefs->SetWebStoreLogin(login); | 576 prefs->SetWebStoreLogin(login); |
577 return true; | 577 return true; |
578 } | 578 } |
579 | 579 |
580 GetWebGLStatusFunction::GetWebGLStatusFunction() { | 580 GetWebGLStatusFunction::GetWebGLStatusFunction() { |
581 feature_checker_ = new GPUFeatureChecker( | 581 feature_checker_ = new GPUFeatureChecker( |
582 content::GPU_FEATURE_TYPE_WEBGL, | 582 content::GPU_FEATURE_TYPE_WEBGL, |
583 base::Bind(&GetWebGLStatusFunction::OnFeatureCheck, this)); | 583 base::Bind(&GetWebGLStatusFunction::OnFeatureCheck, this)); |
584 } | 584 } |
585 | 585 |
586 GetWebGLStatusFunction::~GetWebGLStatusFunction() {} | 586 GetWebGLStatusFunction::~GetWebGLStatusFunction() {} |
587 | 587 |
588 void GetWebGLStatusFunction::CreateResult(bool webgl_allowed) { | 588 void GetWebGLStatusFunction::CreateResult(bool webgl_allowed) { |
589 result_.reset(Value::CreateStringValue( | 589 SetResult(Value::CreateStringValue( |
590 webgl_allowed ? "webgl_allowed" : "webgl_blocked")); | 590 webgl_allowed ? "webgl_allowed" : "webgl_blocked")); |
591 } | 591 } |
592 | 592 |
593 bool GetWebGLStatusFunction::RunImpl() { | 593 bool GetWebGLStatusFunction::RunImpl() { |
594 feature_checker_->CheckGPUFeatureAvailability(); | 594 feature_checker_->CheckGPUFeatureAvailability(); |
595 return true; | 595 return true; |
596 } | 596 } |
597 | 597 |
598 void GetWebGLStatusFunction::OnFeatureCheck(bool feature_allowed) { | 598 void GetWebGLStatusFunction::OnFeatureCheck(bool feature_allowed) { |
599 CreateResult(feature_allowed); | 599 CreateResult(feature_allowed); |
600 SendResponse(true); | 600 SendResponse(true); |
601 } | 601 } |
602 | 602 |
603 } // namespace extensions | 603 } // namespace extensions |
OLD | NEW |