| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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_service.h" | 5 #include "chrome/browser/extensions/extension_service.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <iterator> | 8 #include <iterator> |
| 9 #include <set> | 9 #include <set> |
| 10 | 10 |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 271 extensions::ExtensionPrefs* extension_prefs, | 271 extensions::ExtensionPrefs* extension_prefs, |
| 272 extensions::Blacklist* blacklist, | 272 extensions::Blacklist* blacklist, |
| 273 bool autoupdate_enabled, | 273 bool autoupdate_enabled, |
| 274 bool extensions_enabled, | 274 bool extensions_enabled, |
| 275 extensions::OneShotEvent* ready) | 275 extensions::OneShotEvent* ready) |
| 276 : extensions::Blacklist::Observer(blacklist), | 276 : extensions::Blacklist::Observer(blacklist), |
| 277 profile_(profile), | 277 profile_(profile), |
| 278 system_(extensions::ExtensionSystem::Get(profile)), | 278 system_(extensions::ExtensionSystem::Get(profile)), |
| 279 extension_prefs_(extension_prefs), | 279 extension_prefs_(extension_prefs), |
| 280 blacklist_(blacklist), | 280 blacklist_(blacklist), |
| 281 extension_sync_service_(NULL), | |
| 282 registry_(extensions::ExtensionRegistry::Get(profile)), | 281 registry_(extensions::ExtensionRegistry::Get(profile)), |
| 283 pending_extension_manager_(profile), | 282 pending_extension_manager_(profile), |
| 284 install_directory_(install_directory), | 283 install_directory_(install_directory), |
| 285 extensions_enabled_(extensions_enabled), | 284 extensions_enabled_(extensions_enabled), |
| 286 show_extensions_prompts_(true), | 285 show_extensions_prompts_(true), |
| 287 install_updates_when_idle_(true), | 286 install_updates_when_idle_(true), |
| 288 ready_(ready), | 287 ready_(ready), |
| 289 update_once_all_providers_are_ready_(false), | 288 update_once_all_providers_are_ready_(false), |
| 290 browser_terminating_(false), | 289 browser_terminating_(false), |
| 291 installs_delayed_for_gc_(false), | 290 installs_delayed_for_gc_(false), |
| (...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 769 profile_, extension.get(), deletion_done_callback); | 768 profile_, extension.get(), deletion_done_callback); |
| 770 | 769 |
| 771 UntrackTerminatedExtension(extension->id()); | 770 UntrackTerminatedExtension(extension->id()); |
| 772 | 771 |
| 773 // Notify interested parties that we've uninstalled this extension. | 772 // Notify interested parties that we've uninstalled this extension. |
| 774 ExtensionRegistry::Get(profile_) | 773 ExtensionRegistry::Get(profile_) |
| 775 ->TriggerOnUninstalled(extension.get(), reason); | 774 ->TriggerOnUninstalled(extension.get(), reason); |
| 776 | 775 |
| 777 // Don't sync the uninstall if we're going to reinstall the extension | 776 // Don't sync the uninstall if we're going to reinstall the extension |
| 778 // momentarily. | 777 // momentarily. |
| 779 if (extension_sync_service_ && | 778 if (reason != extensions::UNINSTALL_REASON_REINSTALL) { |
| 780 reason != extensions::UNINSTALL_REASON_REINSTALL) { | 779 ExtensionSyncService::Get(profile_)->SyncUninstallExtension(*extension); |
| 781 extension_sync_service_->SyncUninstallExtension(*extension); | |
| 782 } | 780 } |
| 783 | 781 |
| 784 delayed_installs_.Remove(extension->id()); | 782 delayed_installs_.Remove(extension->id()); |
| 785 | 783 |
| 786 extension_prefs_->OnExtensionUninstalled( | 784 extension_prefs_->OnExtensionUninstalled( |
| 787 extension->id(), extension->location(), external_uninstall); | 785 extension->id(), extension->location(), external_uninstall); |
| 788 | 786 |
| 789 // Track the uninstallation. | 787 // Track the uninstallation. |
| 790 UMA_HISTOGRAM_ENUMERATION("Extensions.ExtensionUninstalled", 1, 2); | 788 UMA_HISTOGRAM_ENUMERATION("Extensions.ExtensionUninstalled", 1, 2); |
| 791 | 789 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 859 registry_->RemoveDisabled(extension->id()); | 857 registry_->RemoveDisabled(extension->id()); |
| 860 | 858 |
| 861 NotifyExtensionLoaded(extension); | 859 NotifyExtensionLoaded(extension); |
| 862 | 860 |
| 863 // Notify listeners that the extension was enabled. | 861 // Notify listeners that the extension was enabled. |
| 864 content::NotificationService::current()->Notify( | 862 content::NotificationService::current()->Notify( |
| 865 extensions::NOTIFICATION_EXTENSION_ENABLED, | 863 extensions::NOTIFICATION_EXTENSION_ENABLED, |
| 866 content::Source<Profile>(profile_), | 864 content::Source<Profile>(profile_), |
| 867 content::Details<const Extension>(extension)); | 865 content::Details<const Extension>(extension)); |
| 868 | 866 |
| 869 if (extension_sync_service_) | 867 ExtensionSyncService::Get(profile_)->SyncExtensionChangeIfNeeded(*extension); |
| 870 extension_sync_service_->SyncEnableExtension(*extension); | |
| 871 } | 868 } |
| 872 | 869 |
| 873 void ExtensionService::DisableExtension(const std::string& extension_id, | 870 void ExtensionService::DisableExtension(const std::string& extension_id, |
| 874 int disable_reasons) { | 871 int disable_reasons) { |
| 875 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 872 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 876 | 873 |
| 877 // The extension may have been disabled already. Just add a disable reason. | 874 // The extension may have been disabled already. Just add a disable reason. |
| 878 if (!IsExtensionEnabled(extension_id)) { | 875 if (!IsExtensionEnabled(extension_id)) { |
| 879 extension_prefs_->AddDisableReasons(extension_id, disable_reasons); | 876 extension_prefs_->AddDisableReasons(extension_id, disable_reasons); |
| 880 return; | 877 return; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 910 // Move it over to the disabled list. Don't send a second unload notification | 907 // Move it over to the disabled list. Don't send a second unload notification |
| 911 // for terminated extensions being disabled. | 908 // for terminated extensions being disabled. |
| 912 registry_->AddDisabled(make_scoped_refptr(extension)); | 909 registry_->AddDisabled(make_scoped_refptr(extension)); |
| 913 if (registry_->enabled_extensions().Contains(extension->id())) { | 910 if (registry_->enabled_extensions().Contains(extension->id())) { |
| 914 registry_->RemoveEnabled(extension->id()); | 911 registry_->RemoveEnabled(extension->id()); |
| 915 NotifyExtensionUnloaded(extension, UnloadedExtensionInfo::REASON_DISABLE); | 912 NotifyExtensionUnloaded(extension, UnloadedExtensionInfo::REASON_DISABLE); |
| 916 } else { | 913 } else { |
| 917 registry_->RemoveTerminated(extension->id()); | 914 registry_->RemoveTerminated(extension->id()); |
| 918 } | 915 } |
| 919 | 916 |
| 920 if (extension_sync_service_) | 917 ExtensionSyncService::Get(profile_)->SyncExtensionChangeIfNeeded(*extension); |
| 921 extension_sync_service_->SyncDisableExtension(*extension); | |
| 922 } | 918 } |
| 923 | 919 |
| 924 void ExtensionService::DisableUserExtensions( | 920 void ExtensionService::DisableUserExtensions( |
| 925 const std::vector<std::string>& except_ids) { | 921 const std::vector<std::string>& except_ids) { |
| 926 extensions::ManagementPolicy* management_policy = | 922 extensions::ManagementPolicy* management_policy = |
| 927 system_->management_policy(); | 923 system_->management_policy(); |
| 928 extensions::ExtensionList to_disable; | 924 extensions::ExtensionList to_disable; |
| 929 | 925 |
| 930 const ExtensionSet& enabled_set = registry_->enabled_extensions(); | 926 const ExtensionSet& enabled_set = registry_->enabled_extensions(); |
| 931 for (ExtensionSet::const_iterator extension = enabled_set.begin(); | 927 for (ExtensionSet::const_iterator extension = enabled_set.begin(); |
| (...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1503 // Only prefs is checked for the blacklist. We rely on callers to check the | 1499 // Only prefs is checked for the blacklist. We rely on callers to check the |
| 1504 // blacklist before calling into here, e.g. CrxInstaller checks before | 1500 // blacklist before calling into here, e.g. CrxInstaller checks before |
| 1505 // installation then threads through the install and pending install flow | 1501 // installation then threads through the install and pending install flow |
| 1506 // of this class, and we check when loading installed extensions. | 1502 // of this class, and we check when loading installed extensions. |
| 1507 registry_->AddBlacklisted(extension); | 1503 registry_->AddBlacklisted(extension); |
| 1508 } else if (block_extensions_ && CanBlockExtension(extension)) { | 1504 } else if (block_extensions_ && CanBlockExtension(extension)) { |
| 1509 registry_->AddBlocked(extension); | 1505 registry_->AddBlocked(extension); |
| 1510 } else if (!reloading && | 1506 } else if (!reloading && |
| 1511 extension_prefs_->IsExtensionDisabled(extension->id())) { | 1507 extension_prefs_->IsExtensionDisabled(extension->id())) { |
| 1512 registry_->AddDisabled(extension); | 1508 registry_->AddDisabled(extension); |
| 1513 if (extension_sync_service_) | 1509 ExtensionSyncService::Get(profile_)->SyncExtensionChangeIfNeeded( |
| 1514 extension_sync_service_->SyncExtensionChangeIfNeeded(*extension); | 1510 *extension); |
| 1515 content::NotificationService::current()->Notify( | 1511 content::NotificationService::current()->Notify( |
| 1516 extensions::NOTIFICATION_EXTENSION_UPDATE_DISABLED, | 1512 extensions::NOTIFICATION_EXTENSION_UPDATE_DISABLED, |
| 1517 content::Source<Profile>(profile_), | 1513 content::Source<Profile>(profile_), |
| 1518 content::Details<const Extension>(extension)); | 1514 content::Details<const Extension>(extension)); |
| 1519 | 1515 |
| 1520 // Show the extension disabled error if a permissions increase or a remote | 1516 // Show the extension disabled error if a permissions increase or a remote |
| 1521 // installation is the reason it was disabled, and no other reasons exist. | 1517 // installation is the reason it was disabled, and no other reasons exist. |
| 1522 int reasons = extension_prefs_->GetDisableReasons(extension->id()); | 1518 int reasons = extension_prefs_->GetDisableReasons(extension->id()); |
| 1523 const int kReasonMask = Extension::DISABLE_PERMISSIONS_INCREASE | | 1519 const int kReasonMask = Extension::DISABLE_PERMISSIONS_INCREASE | |
| 1524 Extension::DISABLE_REMOTE_INSTALL; | 1520 Extension::DISABLE_REMOTE_INSTALL; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1541 extension->id(), | 1537 extension->id(), |
| 1542 extension->ShouldDisplayInNewTabPage() && | 1538 extension->ShouldDisplayInNewTabPage() && |
| 1543 !extension_prefs_->IsEphemeralApp(extension->id())); | 1539 !extension_prefs_->IsEphemeralApp(extension->id())); |
| 1544 if (!extension_prefs_->IsEphemeralApp(extension->id())) { | 1540 if (!extension_prefs_->IsEphemeralApp(extension->id())) { |
| 1545 extension_prefs_->app_sorting()->EnsureValidOrdinals( | 1541 extension_prefs_->app_sorting()->EnsureValidOrdinals( |
| 1546 extension->id(), syncer::StringOrdinal()); | 1542 extension->id(), syncer::StringOrdinal()); |
| 1547 } | 1543 } |
| 1548 } | 1544 } |
| 1549 | 1545 |
| 1550 registry_->AddEnabled(extension); | 1546 registry_->AddEnabled(extension); |
| 1551 if (extension_sync_service_) | 1547 ExtensionSyncService::Get(profile_)->SyncExtensionChangeIfNeeded( |
| 1552 extension_sync_service_->SyncExtensionChangeIfNeeded(*extension); | 1548 *extension); |
| 1553 NotifyExtensionLoaded(extension); | 1549 NotifyExtensionLoaded(extension); |
| 1554 } | 1550 } |
| 1555 system_->runtime_data()->SetBeingUpgraded(extension->id(), false); | 1551 system_->runtime_data()->SetBeingUpgraded(extension->id(), false); |
| 1556 } | 1552 } |
| 1557 | 1553 |
| 1558 void ExtensionService::AddComponentExtension(const Extension* extension) { | 1554 void ExtensionService::AddComponentExtension(const Extension* extension) { |
| 1559 const std::string old_version_string( | 1555 const std::string old_version_string( |
| 1560 extension_prefs_->GetVersionString(extension->id())); | 1556 extension_prefs_->GetVersionString(extension->id())); |
| 1561 const Version old_version(old_version_string); | 1557 const Version old_version(old_version_string); |
| 1562 | 1558 |
| (...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2055 if (!other_disable_reasons) { | 2051 if (!other_disable_reasons) { |
| 2056 if (extension_prefs_->DidExtensionEscalatePermissions(extension->id())) | 2052 if (extension_prefs_->DidExtensionEscalatePermissions(extension->id())) |
| 2057 GrantPermissionsAndEnableExtension(extension); | 2053 GrantPermissionsAndEnableExtension(extension); |
| 2058 else | 2054 else |
| 2059 EnableExtension(extension->id()); | 2055 EnableExtension(extension->id()); |
| 2060 } | 2056 } |
| 2061 } | 2057 } |
| 2062 | 2058 |
| 2063 registry_->TriggerOnInstalled(extension, true); | 2059 registry_->TriggerOnInstalled(extension, true); |
| 2064 | 2060 |
| 2065 if (!is_from_sync && extension_sync_service_) | 2061 if (!is_from_sync) { |
| 2066 extension_sync_service_->SyncExtensionChangeIfNeeded(*extension); | 2062 ExtensionSyncService::Get(profile_)->SyncExtensionChangeIfNeeded( |
| 2063 *extension); |
| 2064 } |
| 2067 } | 2065 } |
| 2068 | 2066 |
| 2069 const Extension* ExtensionService::GetPendingExtensionUpdate( | 2067 const Extension* ExtensionService::GetPendingExtensionUpdate( |
| 2070 const std::string& id) const { | 2068 const std::string& id) const { |
| 2071 return delayed_installs_.GetByID(id); | 2069 return delayed_installs_.GetByID(id); |
| 2072 } | 2070 } |
| 2073 | 2071 |
| 2074 void ExtensionService::RegisterContentSettings( | 2072 void ExtensionService::RegisterContentSettings( |
| 2075 HostContentSettingsMap* host_content_settings_map) { | 2073 HostContentSettingsMap* host_content_settings_map) { |
| 2076 TRACE_EVENT0("browser,startup", "ExtensionService::RegisterContentSettings"); | 2074 TRACE_EVENT0("browser,startup", "ExtensionService::RegisterContentSettings"); |
| (...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2578 } | 2576 } |
| 2579 | 2577 |
| 2580 void ExtensionService::OnProfileDestructionStarted() { | 2578 void ExtensionService::OnProfileDestructionStarted() { |
| 2581 ExtensionIdSet ids_to_unload = registry_->enabled_extensions().GetIDs(); | 2579 ExtensionIdSet ids_to_unload = registry_->enabled_extensions().GetIDs(); |
| 2582 for (ExtensionIdSet::iterator it = ids_to_unload.begin(); | 2580 for (ExtensionIdSet::iterator it = ids_to_unload.begin(); |
| 2583 it != ids_to_unload.end(); | 2581 it != ids_to_unload.end(); |
| 2584 ++it) { | 2582 ++it) { |
| 2585 UnloadExtension(*it, UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN); | 2583 UnloadExtension(*it, UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN); |
| 2586 } | 2584 } |
| 2587 } | 2585 } |
| OLD | NEW |