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 |
11 #include "base/basictypes.h" | 11 #include "base/basictypes.h" |
12 #include "base/bind.h" | 12 #include "base/bind.h" |
13 #include "base/json/json_writer.h" | 13 #include "base/json/json_writer.h" |
14 #include "base/lazy_instance.h" | 14 #include "base/lazy_instance.h" |
15 #include "base/logging.h" | 15 #include "base/logging.h" |
16 #include "base/memory/linked_ptr.h" | 16 #include "base/memory/linked_ptr.h" |
17 #include "base/memory/scoped_ptr.h" | 17 #include "base/memory/scoped_ptr.h" |
18 #include "base/metrics/histogram.h" | 18 #include "base/metrics/histogram.h" |
19 #include "base/strings/string_number_conversions.h" | 19 #include "base/strings/string_number_conversions.h" |
20 #include "base/strings/string_util.h" | 20 #include "base/strings/string_util.h" |
21 #include "base/strings/utf_string_conversions.h" | 21 #include "base/strings/utf_string_conversions.h" |
22 #include "chrome/browser/chrome_notification_types.h" | 22 #include "chrome/browser/chrome_notification_types.h" |
23 #include "chrome/browser/extensions/api/management/management_api_constants.h" | 23 #include "chrome/browser/extensions/api/management/management_api_constants.h" |
24 #include "chrome/browser/extensions/extension_service.h" | 24 #include "chrome/browser/extensions/extension_service.h" |
| 25 #include "chrome/browser/extensions/extension_ui_util.h" |
25 #include "chrome/browser/extensions/extension_uninstall_dialog.h" | 26 #include "chrome/browser/extensions/extension_uninstall_dialog.h" |
26 #include "chrome/browser/extensions/launch_util.h" | 27 #include "chrome/browser/extensions/launch_util.h" |
27 #include "chrome/browser/profiles/profile.h" | 28 #include "chrome/browser/profiles/profile.h" |
28 #include "chrome/browser/ui/browser_dialogs.h" | 29 #include "chrome/browser/ui/browser_dialogs.h" |
29 #include "chrome/browser/ui/browser_finder.h" | 30 #include "chrome/browser/ui/browser_finder.h" |
30 #include "chrome/browser/ui/browser_window.h" | 31 #include "chrome/browser/ui/browser_window.h" |
31 #include "chrome/browser/ui/extensions/application_launch.h" | 32 #include "chrome/browser/ui/extensions/application_launch.h" |
32 #include "chrome/browser/ui/webui/extensions/extension_icon_source.h" | 33 #include "chrome/browser/ui/webui/extensions/extension_icon_source.h" |
33 #include "chrome/common/chrome_utility_messages.h" | 34 #include "chrome/common/chrome_utility_messages.h" |
34 #include "chrome/common/extensions/api/management.h" | 35 #include "chrome/common/extensions/api/management.h" |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
208 case Manifest::EXTERNAL_COMPONENT: | 209 case Manifest::EXTERNAL_COMPONENT: |
209 info->install_type = management::ExtensionInfo::INSTALL_TYPE_OTHER; | 210 info->install_type = management::ExtensionInfo::INSTALL_TYPE_OTHER; |
210 break; | 211 break; |
211 } | 212 } |
212 | 213 |
213 return info.Pass(); | 214 return info.Pass(); |
214 } | 215 } |
215 | 216 |
216 void AddExtensionInfo(const ExtensionSet& extensions, | 217 void AddExtensionInfo(const ExtensionSet& extensions, |
217 ExtensionSystem* system, | 218 ExtensionSystem* system, |
218 ExtensionInfoList* extension_list) { | 219 ExtensionInfoList* extension_list, |
| 220 content::BrowserContext* context) { |
219 for (ExtensionSet::const_iterator iter = extensions.begin(); | 221 for (ExtensionSet::const_iterator iter = extensions.begin(); |
220 iter != extensions.end(); ++iter) { | 222 iter != extensions.end(); ++iter) { |
221 const Extension& extension = *iter->get(); | 223 const Extension& extension = *iter->get(); |
222 | 224 |
223 if (extension.ShouldNotBeVisible()) | 225 if (ui_util::ShouldNotBeVisible(&extension, context)) |
224 continue; // Skip built-in extensions/apps. | 226 continue; // Skip built-in extensions/apps. |
225 | 227 |
226 extension_list->push_back(make_linked_ptr<management::ExtensionInfo>( | 228 extension_list->push_back(make_linked_ptr<management::ExtensionInfo>( |
227 CreateExtensionInfo(extension, system).release())); | 229 CreateExtensionInfo(extension, system).release())); |
228 } | 230 } |
229 } | 231 } |
230 | 232 |
231 } // namespace | 233 } // namespace |
232 | 234 |
233 ExtensionService* ManagementFunction::service() { | 235 ExtensionService* ManagementFunction::service() { |
234 return GetProfile()->GetExtensionService(); | 236 return GetProfile()->GetExtensionService(); |
235 } | 237 } |
236 | 238 |
237 ExtensionService* AsyncManagementFunction::service() { | 239 ExtensionService* AsyncManagementFunction::service() { |
238 return GetProfile()->GetExtensionService(); | 240 return GetProfile()->GetExtensionService(); |
239 } | 241 } |
240 | 242 |
241 bool ManagementGetAllFunction::RunSync() { | 243 bool ManagementGetAllFunction::RunSync() { |
242 ExtensionInfoList extensions; | 244 ExtensionInfoList extensions; |
243 ExtensionRegistry* registry = ExtensionRegistry::Get(GetProfile()); | 245 ExtensionRegistry* registry = ExtensionRegistry::Get(GetProfile()); |
244 ExtensionSystem* system = ExtensionSystem::Get(GetProfile()); | 246 ExtensionSystem* system = ExtensionSystem::Get(GetProfile()); |
245 | 247 |
246 AddExtensionInfo(registry->enabled_extensions(), system, &extensions); | 248 AddExtensionInfo(registry->enabled_extensions(), |
247 AddExtensionInfo(registry->disabled_extensions(), system, &extensions); | 249 system, &extensions, browser_context()); |
248 AddExtensionInfo(registry->terminated_extensions(), system, &extensions); | 250 AddExtensionInfo(registry->disabled_extensions(), |
| 251 system, &extensions, browser_context()); |
| 252 AddExtensionInfo(registry->terminated_extensions(), |
| 253 system, &extensions, browser_context()); |
249 | 254 |
250 results_ = management::GetAll::Results::Create(extensions); | 255 results_ = management::GetAll::Results::Create(extensions); |
251 return true; | 256 return true; |
252 } | 257 } |
253 | 258 |
254 bool ManagementGetFunction::RunSync() { | 259 bool ManagementGetFunction::RunSync() { |
255 scoped_ptr<management::Get::Params> params( | 260 scoped_ptr<management::Get::Params> params( |
256 management::Get::Params::Create(*args_)); | 261 management::Get::Params::Create(*args_)); |
257 EXTENSION_FUNCTION_VALIDATE(params.get()); | 262 EXTENSION_FUNCTION_VALIDATE(params.get()); |
258 | 263 |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
461 } | 466 } |
462 | 467 |
463 bool ManagementSetEnabledFunction::RunAsync() { | 468 bool ManagementSetEnabledFunction::RunAsync() { |
464 scoped_ptr<management::SetEnabled::Params> params( | 469 scoped_ptr<management::SetEnabled::Params> params( |
465 management::SetEnabled::Params::Create(*args_)); | 470 management::SetEnabled::Params::Create(*args_)); |
466 EXTENSION_FUNCTION_VALIDATE(params.get()); | 471 EXTENSION_FUNCTION_VALIDATE(params.get()); |
467 | 472 |
468 extension_id_ = params->id; | 473 extension_id_ = params->id; |
469 | 474 |
470 const Extension* extension = service()->GetInstalledExtension(extension_id_); | 475 const Extension* extension = service()->GetInstalledExtension(extension_id_); |
471 if (!extension || extension->ShouldNotBeVisible()) { | 476 if (!extension || ui_util::ShouldNotBeVisible(extension, browser_context())) { |
472 error_ = ErrorUtils::FormatErrorMessage( | 477 error_ = ErrorUtils::FormatErrorMessage( |
473 keys::kNoExtensionError, extension_id_); | 478 keys::kNoExtensionError, extension_id_); |
474 return false; | 479 return false; |
475 } | 480 } |
476 | 481 |
477 const ManagementPolicy* policy = | 482 const ManagementPolicy* policy = |
478 ExtensionSystem::Get(GetProfile())->management_policy(); | 483 ExtensionSystem::Get(GetProfile())->management_policy(); |
479 if (!policy->UserMayModifySettings(extension, NULL) || | 484 if (!policy->UserMayModifySettings(extension, NULL) || |
480 (!params->enabled && policy->MustRemainEnabled(extension, NULL)) || | 485 (!params->enabled && policy->MustRemainEnabled(extension, NULL)) || |
481 (params->enabled && policy->MustRemainDisabled(extension, NULL, NULL))) { | 486 (params->enabled && policy->MustRemainDisabled(extension, NULL, NULL))) { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
529 | 534 |
530 ManagementUninstallFunctionBase::~ManagementUninstallFunctionBase() { | 535 ManagementUninstallFunctionBase::~ManagementUninstallFunctionBase() { |
531 } | 536 } |
532 | 537 |
533 bool ManagementUninstallFunctionBase::Uninstall( | 538 bool ManagementUninstallFunctionBase::Uninstall( |
534 const std::string& target_extension_id, | 539 const std::string& target_extension_id, |
535 bool show_confirm_dialog) { | 540 bool show_confirm_dialog) { |
536 extension_id_ = target_extension_id; | 541 extension_id_ = target_extension_id; |
537 const Extension* target_extension = | 542 const Extension* target_extension = |
538 service()->GetExtensionById(extension_id_, true); | 543 service()->GetExtensionById(extension_id_, true); |
539 if (!target_extension || target_extension->ShouldNotBeVisible()) { | 544 if (!target_extension || |
| 545 ui_util::ShouldNotBeVisible(target_extension, browser_context())) { |
540 error_ = ErrorUtils::FormatErrorMessage( | 546 error_ = ErrorUtils::FormatErrorMessage( |
541 keys::kNoExtensionError, extension_id_); | 547 keys::kNoExtensionError, extension_id_); |
542 return false; | 548 return false; |
543 } | 549 } |
544 | 550 |
545 if (!ExtensionSystem::Get(GetProfile()) | 551 if (!ExtensionSystem::Get(GetProfile()) |
546 ->management_policy() | 552 ->management_policy() |
547 ->UserMayModifySettings(target_extension, NULL)) { | 553 ->UserMayModifySettings(target_extension, NULL)) { |
548 error_ = ErrorUtils::FormatErrorMessage( | 554 error_ = ErrorUtils::FormatErrorMessage( |
549 keys::kUserCantModifyError, extension_id_); | 555 keys::kUserCantModifyError, extension_id_); |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
766 extension = | 772 extension = |
767 content::Details<const UnloadedExtensionInfo>(details)->extension; | 773 content::Details<const UnloadedExtensionInfo>(details)->extension; |
768 break; | 774 break; |
769 default: | 775 default: |
770 NOTREACHED(); | 776 NOTREACHED(); |
771 return; | 777 return; |
772 } | 778 } |
773 DCHECK(event_name); | 779 DCHECK(event_name); |
774 DCHECK(extension); | 780 DCHECK(extension); |
775 | 781 |
776 if (extension->ShouldNotBeVisible()) | 782 if (ui_util::ShouldNotBeVisible(extension, profile_)) |
777 return; // Don't dispatch events for built-in extensions. | 783 return; // Don't dispatch events for built-in extensions. |
778 | 784 |
779 scoped_ptr<base::ListValue> args(new base::ListValue()); | 785 scoped_ptr<base::ListValue> args(new base::ListValue()); |
780 if (event_name == management::OnUninstalled::kEventName) { | 786 if (event_name == management::OnUninstalled::kEventName) { |
781 args->Append(new base::StringValue(extension->id())); | 787 args->Append(new base::StringValue(extension->id())); |
782 } else { | 788 } else { |
783 scoped_ptr<management::ExtensionInfo> info = CreateExtensionInfo( | 789 scoped_ptr<management::ExtensionInfo> info = CreateExtensionInfo( |
784 *extension, ExtensionSystem::Get(profile)); | 790 *extension, ExtensionSystem::Get(profile)); |
785 args->Append(info->ToValue().release()); | 791 args->Append(info->ToValue().release()); |
786 } | 792 } |
(...skipping 27 matching lines...) Expand all Loading... |
814 return g_factory.Pointer(); | 820 return g_factory.Pointer(); |
815 } | 821 } |
816 | 822 |
817 void ManagementAPI::OnListenerAdded(const EventListenerInfo& details) { | 823 void ManagementAPI::OnListenerAdded(const EventListenerInfo& details) { |
818 management_event_router_.reset( | 824 management_event_router_.reset( |
819 new ManagementEventRouter(Profile::FromBrowserContext(browser_context_))); | 825 new ManagementEventRouter(Profile::FromBrowserContext(browser_context_))); |
820 EventRouter::Get(browser_context_)->UnregisterObserver(this); | 826 EventRouter::Get(browser_context_)->UnregisterObserver(this); |
821 } | 827 } |
822 | 828 |
823 } // namespace extensions | 829 } // namespace extensions |
OLD | NEW |