| 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 1204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1215 GetFileSystemContext(); | 1215 GetFileSystemContext(); |
| 1216 if (filesystem_context && filesystem_context->external_backend()) { | 1216 if (filesystem_context && filesystem_context->external_backend()) { |
| 1217 filesystem_context->external_backend()-> | 1217 filesystem_context->external_backend()-> |
| 1218 RevokeAccessForExtension(extension->id()); | 1218 RevokeAccessForExtension(extension->id()); |
| 1219 } | 1219 } |
| 1220 #endif | 1220 #endif |
| 1221 | 1221 |
| 1222 UpdateActiveExtensionsInCrashReporter(); | 1222 UpdateActiveExtensionsInCrashReporter(); |
| 1223 } | 1223 } |
| 1224 | 1224 |
| 1225 void ExtensionService::NotifyExtensionRemoved(const Extension* extension) { |
| 1226 for (size_t i = 0; i < extension_removed_callbacks_.size(); ++i) { |
| 1227 if (!extension_removed_callbacks_[i].is_null()) |
| 1228 extension_removed_callbacks_[i].Run(extension); |
| 1229 } |
| 1230 } |
| 1231 |
| 1225 Profile* ExtensionService::profile() { | 1232 Profile* ExtensionService::profile() { |
| 1226 return profile_; | 1233 return profile_; |
| 1227 } | 1234 } |
| 1228 | 1235 |
| 1229 extensions::ExtensionPrefs* ExtensionService::extension_prefs() { | 1236 extensions::ExtensionPrefs* ExtensionService::extension_prefs() { |
| 1230 return extension_prefs_; | 1237 return extension_prefs_; |
| 1231 } | 1238 } |
| 1232 | 1239 |
| 1233 extensions::SettingsFrontend* ExtensionService::settings_frontend() { | 1240 extensions::SettingsFrontend* ExtensionService::settings_frontend() { |
| 1234 return settings_frontend_.get(); | 1241 return settings_frontend_.get(); |
| (...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1948 // Make sure the profile cleans up its RequestContexts when an already | 1955 // Make sure the profile cleans up its RequestContexts when an already |
| 1949 // disabled extension is unloaded (since they are also tracking the disabled | 1956 // disabled extension is unloaded (since they are also tracking the disabled |
| 1950 // extensions). | 1957 // extensions). |
| 1951 system_->UnregisterExtensionWithRequestContexts(extension_id, reason); | 1958 system_->UnregisterExtensionWithRequestContexts(extension_id, reason); |
| 1952 } else { | 1959 } else { |
| 1953 // Remove the extension from our list. | 1960 // Remove the extension from our list. |
| 1954 extensions_.Remove(extension->id()); | 1961 extensions_.Remove(extension->id()); |
| 1955 NotifyExtensionUnloaded(extension.get(), reason); | 1962 NotifyExtensionUnloaded(extension.get(), reason); |
| 1956 } | 1963 } |
| 1957 | 1964 |
| 1958 content::NotificationService::current()->Notify( | 1965 NotifyExtensionRemoved(extension.get()); |
| 1959 chrome::NOTIFICATION_EXTENSION_REMOVED, | |
| 1960 content::Source<Profile>(profile_), | |
| 1961 content::Details<const Extension>(extension.get())); | |
| 1962 } | 1966 } |
| 1963 | 1967 |
| 1964 void ExtensionService::UnloadAllExtensions() { | 1968 void ExtensionService::UnloadAllExtensions() { |
| 1965 profile_->GetExtensionSpecialStoragePolicy()->RevokeRightsForAllExtensions(); | 1969 profile_->GetExtensionSpecialStoragePolicy()->RevokeRightsForAllExtensions(); |
| 1966 | 1970 |
| 1967 extensions_.Clear(); | 1971 extensions_.Clear(); |
| 1968 disabled_extensions_.Clear(); | 1972 disabled_extensions_.Clear(); |
| 1969 terminated_extensions_.Clear(); | 1973 terminated_extensions_.Clear(); |
| 1970 extension_runtime_data_.clear(); | 1974 extension_runtime_data_.clear(); |
| 1971 | 1975 |
| (...skipping 671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2643 if (!terminated_extensions_.Contains(extension->id())) | 2647 if (!terminated_extensions_.Contains(extension->id())) |
| 2644 terminated_extensions_.Insert(make_scoped_refptr(extension)); | 2648 terminated_extensions_.Insert(make_scoped_refptr(extension)); |
| 2645 | 2649 |
| 2646 UnloadExtension(extension->id(), extension_misc::UNLOAD_REASON_TERMINATE); | 2650 UnloadExtension(extension->id(), extension_misc::UNLOAD_REASON_TERMINATE); |
| 2647 } | 2651 } |
| 2648 | 2652 |
| 2649 void ExtensionService::UntrackTerminatedExtension(const std::string& id) { | 2653 void ExtensionService::UntrackTerminatedExtension(const std::string& id) { |
| 2650 std::string lowercase_id = StringToLowerASCII(id); | 2654 std::string lowercase_id = StringToLowerASCII(id); |
| 2651 const Extension* extension = terminated_extensions_.GetByID(lowercase_id); | 2655 const Extension* extension = terminated_extensions_.GetByID(lowercase_id); |
| 2652 terminated_extensions_.Remove(lowercase_id); | 2656 terminated_extensions_.Remove(lowercase_id); |
| 2653 if (extension) { | 2657 if (extension) |
| 2654 content::NotificationService::current()->Notify( | 2658 NotifyExtensionRemoved(extension); |
| 2655 chrome::NOTIFICATION_EXTENSION_REMOVED, | |
| 2656 content::Source<Profile>(profile_), | |
| 2657 content::Details<const Extension>(extension)); | |
| 2658 } | |
| 2659 } | 2659 } |
| 2660 | 2660 |
| 2661 const Extension* ExtensionService::GetTerminatedExtension( | 2661 const Extension* ExtensionService::GetTerminatedExtension( |
| 2662 const std::string& id) const { | 2662 const std::string& id) const { |
| 2663 return GetExtensionById(id, INCLUDE_TERMINATED); | 2663 return GetExtensionById(id, INCLUDE_TERMINATED); |
| 2664 } | 2664 } |
| 2665 | 2665 |
| 2666 const Extension* ExtensionService::GetInstalledExtension( | 2666 const Extension* ExtensionService::GetInstalledExtension( |
| 2667 const std::string& id) const { | 2667 const std::string& id) const { |
| 2668 int include_mask = INCLUDE_ENABLED | | 2668 int include_mask = INCLUDE_ENABLED | |
| (...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3163 } | 3163 } |
| 3164 | 3164 |
| 3165 void ExtensionService::AddUpdateObserver(extensions::UpdateObserver* observer) { | 3165 void ExtensionService::AddUpdateObserver(extensions::UpdateObserver* observer) { |
| 3166 update_observers_.AddObserver(observer); | 3166 update_observers_.AddObserver(observer); |
| 3167 } | 3167 } |
| 3168 | 3168 |
| 3169 void ExtensionService::RemoveUpdateObserver( | 3169 void ExtensionService::RemoveUpdateObserver( |
| 3170 extensions::UpdateObserver* observer) { | 3170 extensions::UpdateObserver* observer) { |
| 3171 update_observers_.RemoveObserver(observer); | 3171 update_observers_.RemoveObserver(observer); |
| 3172 } | 3172 } |
| 3173 |
| 3174 void ExtensionService::RegisterExtensionRemovedCallback( |
| 3175 const base::Callback<void(const extensions::Extension*)>& callback) { |
| 3176 extension_removed_callbacks_.push_back(callback); |
| 3177 } |
| 3178 |
| 3179 void ExtensionService::RemoveExtensionRemovedCallback( |
| 3180 const base::Callback<void(const extensions::Extension*)>& callback) { |
| 3181 for (size_t i = 0; i < extension_removed_callbacks_.size(); ++i) { |
| 3182 if (extension_removed_callbacks_[i].Equals(callback)) { |
| 3183 extension_removed_callbacks_.erase( |
| 3184 extension_removed_callbacks_.begin() + i); |
| 3185 return; |
| 3186 } |
| 3187 } |
| 3188 } |
| OLD | NEW |