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/management/management_api.h" | 5 #include "chrome/browser/extensions/api/management/management_api.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 14 matching lines...) Expand all Loading... |
25 #include "chrome/browser/extensions/extension_uninstall_dialog.h" | 25 #include "chrome/browser/extensions/extension_uninstall_dialog.h" |
26 #include "chrome/browser/extensions/management_policy.h" | 26 #include "chrome/browser/extensions/management_policy.h" |
27 #include "chrome/browser/profiles/profile.h" | 27 #include "chrome/browser/profiles/profile.h" |
28 #include "chrome/browser/ui/extensions/application_launch.h" | 28 #include "chrome/browser/ui/extensions/application_launch.h" |
29 #include "chrome/browser/ui/webui/extensions/extension_icon_source.h" | 29 #include "chrome/browser/ui/webui/extensions/extension_icon_source.h" |
30 #include "chrome/common/chrome_notification_types.h" | 30 #include "chrome/common/chrome_notification_types.h" |
31 #include "chrome/common/chrome_utility_messages.h" | 31 #include "chrome/common/chrome_utility_messages.h" |
32 #include "chrome/common/extensions/api/management.h" | 32 #include "chrome/common/extensions/api/management.h" |
33 #include "chrome/common/extensions/extension.h" | 33 #include "chrome/common/extensions/extension.h" |
34 #include "chrome/common/extensions/extension_constants.h" | 34 #include "chrome/common/extensions/extension_constants.h" |
35 #include "chrome/common/extensions/extension_error_utils.h" | |
36 #include "chrome/common/extensions/extension_icon_set.h" | 35 #include "chrome/common/extensions/extension_icon_set.h" |
37 #include "chrome/common/extensions/permissions/permission_set.h" | 36 #include "chrome/common/extensions/permissions/permission_set.h" |
38 #include "content/public/browser/notification_details.h" | 37 #include "content/public/browser/notification_details.h" |
39 #include "content/public/browser/notification_source.h" | 38 #include "content/public/browser/notification_source.h" |
40 #include "content/public/browser/utility_process_host.h" | 39 #include "content/public/browser/utility_process_host.h" |
41 #include "content/public/browser/utility_process_host_client.h" | 40 #include "content/public/browser/utility_process_host_client.h" |
| 41 #include "extensions/common/error_utils.h" |
42 #include "extensions/common/url_pattern.h" | 42 #include "extensions/common/url_pattern.h" |
43 | 43 |
44 #if !defined(OS_ANDROID) | 44 #if !defined(OS_ANDROID) |
45 #include "chrome/browser/ui/webui/ntp/app_launcher_handler.h" | 45 #include "chrome/browser/ui/webui/ntp/app_launcher_handler.h" |
46 #endif | 46 #endif |
47 | 47 |
48 using base::IntToString; | 48 using base::IntToString; |
49 using content::BrowserThread; | 49 using content::BrowserThread; |
50 using content::UtilityProcessHost; | 50 using content::UtilityProcessHost; |
51 using content::UtilityProcessHostClient; | 51 using content::UtilityProcessHostClient; |
52 using extensions::api::management::ExtensionInfo; | 52 using extensions::api::management::ExtensionInfo; |
53 using extensions::api::management::IconInfo; | 53 using extensions::api::management::IconInfo; |
| 54 using extensions::ErrorUtils; |
54 using extensions::Extension; | 55 using extensions::Extension; |
55 using extensions::ExtensionSystem; | 56 using extensions::ExtensionSystem; |
56 using extensions::PermissionMessages; | 57 using extensions::PermissionMessages; |
57 | 58 |
58 namespace events = extensions::event_names; | 59 namespace events = extensions::event_names; |
59 namespace keys = extension_management_api_constants; | 60 namespace keys = extension_management_api_constants; |
60 namespace management = extensions::api::management; | 61 namespace management = extensions::api::management; |
61 | 62 |
62 namespace { | 63 namespace { |
63 | 64 |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 const std::set<std::string> perms = | 156 const std::set<std::string> perms = |
156 extension.GetActivePermissions()->GetAPIsAsStrings(); | 157 extension.GetActivePermissions()->GetAPIsAsStrings(); |
157 if (!perms.empty()) { | 158 if (!perms.empty()) { |
158 std::set<std::string>::const_iterator perms_iter; | 159 std::set<std::string>::const_iterator perms_iter; |
159 for (perms_iter = perms.begin(); perms_iter != perms.end(); ++perms_iter) | 160 for (perms_iter = perms.begin(); perms_iter != perms.end(); ++perms_iter) |
160 info->permissions.push_back(*perms_iter); | 161 info->permissions.push_back(*perms_iter); |
161 } | 162 } |
162 | 163 |
163 if (!extension.is_hosted_app()) { | 164 if (!extension.is_hosted_app()) { |
164 // Skip host permissions for hosted apps. | 165 // Skip host permissions for hosted apps. |
165 const URLPatternSet host_perms = | 166 const extensions::URLPatternSet host_perms = |
166 extension.GetActivePermissions()->explicit_hosts(); | 167 extension.GetActivePermissions()->explicit_hosts(); |
167 if (!host_perms.is_empty()) { | 168 if (!host_perms.is_empty()) { |
168 for (URLPatternSet::const_iterator iter = host_perms.begin(); | 169 for (extensions::URLPatternSet::const_iterator iter = host_perms.begin(); |
169 iter != host_perms.end(); ++iter) { | 170 iter != host_perms.end(); ++iter) { |
170 info->host_permissions.push_back(iter->GetAsString()); | 171 info->host_permissions.push_back(iter->GetAsString()); |
171 } | 172 } |
172 } | 173 } |
173 } | 174 } |
174 | 175 |
175 switch (extension.location()) { | 176 switch (extension.location()) { |
176 case Extension::INTERNAL: | 177 case Extension::INTERNAL: |
177 info->install_type = management::ExtensionInfo::INSTALL_TYPE_NORMAL; | 178 info->install_type = management::ExtensionInfo::INSTALL_TYPE_NORMAL; |
178 break; | 179 break; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 return true; | 233 return true; |
233 } | 234 } |
234 | 235 |
235 bool GetExtensionByIdFunction::RunImpl() { | 236 bool GetExtensionByIdFunction::RunImpl() { |
236 scoped_ptr<management::Get::Params> params( | 237 scoped_ptr<management::Get::Params> params( |
237 management::Get::Params::Create(*args_)); | 238 management::Get::Params::Create(*args_)); |
238 EXTENSION_FUNCTION_VALIDATE(params.get()); | 239 EXTENSION_FUNCTION_VALIDATE(params.get()); |
239 | 240 |
240 const Extension* extension = service()->GetExtensionById(params->id, true); | 241 const Extension* extension = service()->GetExtensionById(params->id, true); |
241 if (!extension) { | 242 if (!extension) { |
242 error_ = ExtensionErrorUtils::FormatErrorMessage(keys::kNoExtensionError, | 243 error_ = ErrorUtils::FormatErrorMessage(keys::kNoExtensionError, |
243 params->id); | 244 params->id); |
244 return false; | 245 return false; |
245 } | 246 } |
246 | 247 |
247 scoped_ptr<management::ExtensionInfo> info = CreateExtensionInfo( | 248 scoped_ptr<management::ExtensionInfo> info = CreateExtensionInfo( |
248 *extension, ExtensionSystem::Get(profile())); | 249 *extension, ExtensionSystem::Get(profile())); |
249 results_ = management::Get::Results::Create(*info); | 250 results_ = management::Get::Results::Create(*info); |
250 | 251 |
251 return true; | 252 return true; |
252 } | 253 } |
253 | 254 |
254 bool GetPermissionWarningsByIdFunction::RunImpl() { | 255 bool GetPermissionWarningsByIdFunction::RunImpl() { |
255 scoped_ptr<management::GetPermissionWarningsById::Params> params( | 256 scoped_ptr<management::GetPermissionWarningsById::Params> params( |
256 management::GetPermissionWarningsById::Params::Create(*args_)); | 257 management::GetPermissionWarningsById::Params::Create(*args_)); |
257 EXTENSION_FUNCTION_VALIDATE(params.get()); | 258 EXTENSION_FUNCTION_VALIDATE(params.get()); |
258 | 259 |
259 const Extension* extension = service()->GetExtensionById(params->id, true); | 260 const Extension* extension = service()->GetExtensionById(params->id, true); |
260 if (!extension) { | 261 if (!extension) { |
261 error_ = ExtensionErrorUtils::FormatErrorMessage(keys::kNoExtensionError, | 262 error_ = ErrorUtils::FormatErrorMessage(keys::kNoExtensionError, |
262 params->id); | 263 params->id); |
263 return false; | 264 return false; |
264 } | 265 } |
265 | 266 |
266 std::vector<std::string> warnings = CreateWarningsList(extension); | 267 std::vector<std::string> warnings = CreateWarningsList(extension); |
267 results_ = management::GetPermissionWarningsById::Results::Create(warnings); | 268 results_ = management::GetPermissionWarningsById::Results::Create(warnings); |
268 return true; | 269 return true; |
269 } | 270 } |
270 | 271 |
271 namespace { | 272 namespace { |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
404 // Matched with AddRef() in RunImpl(). | 405 // Matched with AddRef() in RunImpl(). |
405 Release(); | 406 Release(); |
406 } | 407 } |
407 | 408 |
408 bool LaunchAppFunction::RunImpl() { | 409 bool LaunchAppFunction::RunImpl() { |
409 scoped_ptr<management::LaunchApp::Params> params( | 410 scoped_ptr<management::LaunchApp::Params> params( |
410 management::LaunchApp::Params::Create(*args_)); | 411 management::LaunchApp::Params::Create(*args_)); |
411 EXTENSION_FUNCTION_VALIDATE(params.get()); | 412 EXTENSION_FUNCTION_VALIDATE(params.get()); |
412 const Extension* extension = service()->GetExtensionById(params->id, true); | 413 const Extension* extension = service()->GetExtensionById(params->id, true); |
413 if (!extension) { | 414 if (!extension) { |
414 error_ = ExtensionErrorUtils::FormatErrorMessage(keys::kNoExtensionError, | 415 error_ = ErrorUtils::FormatErrorMessage(keys::kNoExtensionError, |
415 params->id); | 416 params->id); |
416 return false; | 417 return false; |
417 } | 418 } |
418 if (!extension->is_app()) { | 419 if (!extension->is_app()) { |
419 error_ = ExtensionErrorUtils::FormatErrorMessage(keys::kNotAnAppError, | 420 error_ = ErrorUtils::FormatErrorMessage(keys::kNotAnAppError, |
420 params->id); | 421 params->id); |
421 return false; | 422 return false; |
422 } | 423 } |
423 | 424 |
424 // Look at prefs to find the right launch container. | 425 // Look at prefs to find the right launch container. |
425 // |default_pref_value| is set to LAUNCH_REGULAR so that if | 426 // |default_pref_value| is set to LAUNCH_REGULAR so that if |
426 // the user has not set a preference, we open the app in a tab. | 427 // the user has not set a preference, we open the app in a tab. |
427 extension_misc::LaunchContainer launch_container = | 428 extension_misc::LaunchContainer launch_container = |
428 service()->extension_prefs()->GetLaunchContainer( | 429 service()->extension_prefs()->GetLaunchContainer( |
429 extension, extensions::ExtensionPrefs::LAUNCH_DEFAULT); | 430 extension, extensions::ExtensionPrefs::LAUNCH_DEFAULT); |
(...skipping 15 matching lines...) Expand all Loading... |
445 | 446 |
446 bool SetEnabledFunction::RunImpl() { | 447 bool SetEnabledFunction::RunImpl() { |
447 scoped_ptr<management::SetEnabled::Params> params( | 448 scoped_ptr<management::SetEnabled::Params> params( |
448 management::SetEnabled::Params::Create(*args_)); | 449 management::SetEnabled::Params::Create(*args_)); |
449 EXTENSION_FUNCTION_VALIDATE(params.get()); | 450 EXTENSION_FUNCTION_VALIDATE(params.get()); |
450 | 451 |
451 extension_id_ = params->id; | 452 extension_id_ = params->id; |
452 | 453 |
453 const Extension* extension = service()->GetInstalledExtension(extension_id_); | 454 const Extension* extension = service()->GetInstalledExtension(extension_id_); |
454 if (!extension) { | 455 if (!extension) { |
455 error_ = ExtensionErrorUtils::FormatErrorMessage( | 456 error_ = ErrorUtils::FormatErrorMessage( |
456 keys::kNoExtensionError, extension_id_); | 457 keys::kNoExtensionError, extension_id_); |
457 return false; | 458 return false; |
458 } | 459 } |
459 | 460 |
460 const extensions::ManagementPolicy* policy = extensions::ExtensionSystem::Get( | 461 const extensions::ManagementPolicy* policy = extensions::ExtensionSystem::Get( |
461 profile())->management_policy(); | 462 profile())->management_policy(); |
462 if (!policy->UserMayModifySettings(extension, NULL)) { | 463 if (!policy->UserMayModifySettings(extension, NULL)) { |
463 error_ = ExtensionErrorUtils::FormatErrorMessage( | 464 error_ = ErrorUtils::FormatErrorMessage( |
464 keys::kUserCantModifyError, extension_id_); | 465 keys::kUserCantModifyError, extension_id_); |
465 return false; | 466 return false; |
466 } | 467 } |
467 | 468 |
468 bool currently_enabled = service()->IsExtensionEnabled(extension_id_); | 469 bool currently_enabled = service()->IsExtensionEnabled(extension_id_); |
469 | 470 |
470 if (!currently_enabled && params->enabled) { | 471 if (!currently_enabled && params->enabled) { |
471 extensions::ExtensionPrefs* prefs = service()->extension_prefs(); | 472 extensions::ExtensionPrefs* prefs = service()->extension_prefs(); |
472 if (prefs->DidExtensionEscalatePermissions(extension_id_)) { | 473 if (prefs->DidExtensionEscalatePermissions(extension_id_)) { |
473 if (!user_gesture()) { | 474 if (!user_gesture()) { |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
517 EXTENSION_FUNCTION_VALIDATE(params.get()); | 518 EXTENSION_FUNCTION_VALIDATE(params.get()); |
518 | 519 |
519 extension_id_ = params->id; | 520 extension_id_ = params->id; |
520 | 521 |
521 bool show_confirm_dialog = false; | 522 bool show_confirm_dialog = false; |
522 if (params->options.get() && params->options->show_confirm_dialog.get()) | 523 if (params->options.get() && params->options->show_confirm_dialog.get()) |
523 show_confirm_dialog = *params->options->show_confirm_dialog; | 524 show_confirm_dialog = *params->options->show_confirm_dialog; |
524 | 525 |
525 const Extension* extension = service()->GetExtensionById(extension_id_, true); | 526 const Extension* extension = service()->GetExtensionById(extension_id_, true); |
526 if (!extension) { | 527 if (!extension) { |
527 error_ = ExtensionErrorUtils::FormatErrorMessage( | 528 error_ = ErrorUtils::FormatErrorMessage( |
528 keys::kNoExtensionError, extension_id_); | 529 keys::kNoExtensionError, extension_id_); |
529 return false; | 530 return false; |
530 } | 531 } |
531 | 532 |
532 if (!extensions::ExtensionSystem::Get( | 533 if (!extensions::ExtensionSystem::Get( |
533 profile())->management_policy()->UserMayModifySettings(extension, NULL)) { | 534 profile())->management_policy()->UserMayModifySettings(extension, NULL)) { |
534 error_ = ExtensionErrorUtils::FormatErrorMessage( | 535 error_ = ErrorUtils::FormatErrorMessage( |
535 keys::kUserCantModifyError, extension_id_); | 536 keys::kUserCantModifyError, extension_id_); |
536 return false; | 537 return false; |
537 } | 538 } |
538 | 539 |
539 if (auto_confirm_for_test == DO_NOT_SKIP) { | 540 if (auto_confirm_for_test == DO_NOT_SKIP) { |
540 if (show_confirm_dialog) { | 541 if (show_confirm_dialog) { |
541 AddRef(); // Balanced in ExtensionUninstallAccepted/Canceled | 542 AddRef(); // Balanced in ExtensionUninstallAccepted/Canceled |
542 extension_uninstall_dialog_.reset(ExtensionUninstallDialog::Create( | 543 extension_uninstall_dialog_.reset(ExtensionUninstallDialog::Create( |
543 GetCurrentBrowser(), this)); | 544 GetCurrentBrowser(), this)); |
544 extension_uninstall_dialog_->ConfirmUninstall(extension); | 545 extension_uninstall_dialog_->ConfirmUninstall(extension); |
(...skipping 15 matching lines...) Expand all Loading... |
560 void UninstallFunction::Finish(bool should_uninstall) { | 561 void UninstallFunction::Finish(bool should_uninstall) { |
561 if (should_uninstall) { | 562 if (should_uninstall) { |
562 bool success = service()->UninstallExtension( | 563 bool success = service()->UninstallExtension( |
563 extension_id_, | 564 extension_id_, |
564 false, /* external uninstall */ | 565 false, /* external uninstall */ |
565 NULL); | 566 NULL); |
566 | 567 |
567 // TODO set error_ if !success | 568 // TODO set error_ if !success |
568 SendResponse(success); | 569 SendResponse(success); |
569 } else { | 570 } else { |
570 error_ = ExtensionErrorUtils::FormatErrorMessage( | 571 error_ = ErrorUtils::FormatErrorMessage( |
571 keys::kUninstallCanceledError, extension_id_); | 572 keys::kUninstallCanceledError, extension_id_); |
572 SendResponse(false); | 573 SendResponse(false); |
573 } | 574 } |
574 | 575 |
575 } | 576 } |
576 | 577 |
577 void UninstallFunction::ExtensionUninstallAccepted() { | 578 void UninstallFunction::ExtensionUninstallAccepted() { |
578 Finish(true); | 579 Finish(true); |
579 Release(); | 580 Release(); |
580 } | 581 } |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
645 CHECK(extension); | 646 CHECK(extension); |
646 scoped_ptr<management::ExtensionInfo> info = CreateExtensionInfo( | 647 scoped_ptr<management::ExtensionInfo> info = CreateExtensionInfo( |
647 *extension, ExtensionSystem::Get(profile)); | 648 *extension, ExtensionSystem::Get(profile)); |
648 args->Append(info->ToValue().release()); | 649 args->Append(info->ToValue().release()); |
649 } | 650 } |
650 | 651 |
651 extensions::ExtensionSystem::Get(profile)->event_router()-> | 652 extensions::ExtensionSystem::Get(profile)->event_router()-> |
652 DispatchEventToRenderers(event_name, args.Pass(), NULL, GURL(), | 653 DispatchEventToRenderers(event_name, args.Pass(), NULL, GURL(), |
653 extensions::EventFilteringInfo()); | 654 extensions::EventFilteringInfo()); |
654 } | 655 } |
OLD | NEW |