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 714 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1949 // Make sure the profile cleans up its RequestContexts when an already | 1956 // Make sure the profile cleans up its RequestContexts when an already |
1950 // disabled extension is unloaded (since they are also tracking the disabled | 1957 // disabled extension is unloaded (since they are also tracking the disabled |
1951 // extensions). | 1958 // extensions). |
1952 system_->UnregisterExtensionWithRequestContexts(extension_id, reason); | 1959 system_->UnregisterExtensionWithRequestContexts(extension_id, reason); |
1953 } else { | 1960 } else { |
1954 // Remove the extension from our list. | 1961 // Remove the extension from our list. |
1955 extensions_.Remove(extension->id()); | 1962 extensions_.Remove(extension->id()); |
1956 NotifyExtensionUnloaded(extension.get(), reason); | 1963 NotifyExtensionUnloaded(extension.get(), reason); |
1957 } | 1964 } |
1958 | 1965 |
1959 content::NotificationService::current()->Notify( | 1966 NotifyExtensionRemoved(extension.get()); |
1960 chrome::NOTIFICATION_EXTENSION_REMOVED, | |
1961 content::Source<Profile>(profile_), | |
1962 content::Details<const Extension>(extension.get())); | |
1963 } | 1967 } |
1964 | 1968 |
1965 void ExtensionService::UnloadAllExtensions() { | 1969 void ExtensionService::UnloadAllExtensions() { |
1966 profile_->GetExtensionSpecialStoragePolicy()->RevokeRightsForAllExtensions(); | 1970 profile_->GetExtensionSpecialStoragePolicy()->RevokeRightsForAllExtensions(); |
1967 | 1971 |
1968 extensions_.Clear(); | 1972 extensions_.Clear(); |
1969 disabled_extensions_.Clear(); | 1973 disabled_extensions_.Clear(); |
1970 terminated_extensions_.Clear(); | 1974 terminated_extensions_.Clear(); |
1971 extension_runtime_data_.clear(); | 1975 extension_runtime_data_.clear(); |
1972 | 1976 |
(...skipping 671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2644 if (!terminated_extensions_.Contains(extension->id())) | 2648 if (!terminated_extensions_.Contains(extension->id())) |
2645 terminated_extensions_.Insert(make_scoped_refptr(extension)); | 2649 terminated_extensions_.Insert(make_scoped_refptr(extension)); |
2646 | 2650 |
2647 UnloadExtension(extension->id(), extension_misc::UNLOAD_REASON_TERMINATE); | 2651 UnloadExtension(extension->id(), extension_misc::UNLOAD_REASON_TERMINATE); |
2648 } | 2652 } |
2649 | 2653 |
2650 void ExtensionService::UntrackTerminatedExtension(const std::string& id) { | 2654 void ExtensionService::UntrackTerminatedExtension(const std::string& id) { |
2651 std::string lowercase_id = StringToLowerASCII(id); | 2655 std::string lowercase_id = StringToLowerASCII(id); |
2652 const Extension* extension = terminated_extensions_.GetByID(lowercase_id); | 2656 const Extension* extension = terminated_extensions_.GetByID(lowercase_id); |
2653 terminated_extensions_.Remove(lowercase_id); | 2657 terminated_extensions_.Remove(lowercase_id); |
2654 if (extension) { | 2658 if (extension) |
2655 content::NotificationService::current()->Notify( | 2659 NotifyExtensionRemoved(extension); |
2656 chrome::NOTIFICATION_EXTENSION_REMOVED, | |
2657 content::Source<Profile>(profile_), | |
2658 content::Details<const Extension>(extension)); | |
2659 } | |
2660 } | 2660 } |
2661 | 2661 |
2662 const Extension* ExtensionService::GetTerminatedExtension( | 2662 const Extension* ExtensionService::GetTerminatedExtension( |
2663 const std::string& id) const { | 2663 const std::string& id) const { |
2664 return GetExtensionById(id, INCLUDE_TERMINATED); | 2664 return GetExtensionById(id, INCLUDE_TERMINATED); |
2665 } | 2665 } |
2666 | 2666 |
2667 const Extension* ExtensionService::GetInstalledExtension( | 2667 const Extension* ExtensionService::GetInstalledExtension( |
2668 const std::string& id) const { | 2668 const std::string& id) const { |
2669 int include_mask = INCLUDE_ENABLED | | 2669 int include_mask = INCLUDE_ENABLED | |
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3168 } | 3168 } |
3169 | 3169 |
3170 void ExtensionService::AddUpdateObserver(extensions::UpdateObserver* observer) { | 3170 void ExtensionService::AddUpdateObserver(extensions::UpdateObserver* observer) { |
3171 update_observers_.AddObserver(observer); | 3171 update_observers_.AddObserver(observer); |
3172 } | 3172 } |
3173 | 3173 |
3174 void ExtensionService::RemoveUpdateObserver( | 3174 void ExtensionService::RemoveUpdateObserver( |
3175 extensions::UpdateObserver* observer) { | 3175 extensions::UpdateObserver* observer) { |
3176 update_observers_.RemoveObserver(observer); | 3176 update_observers_.RemoveObserver(observer); |
3177 } | 3177 } |
| 3178 |
| 3179 void ExtensionService::RegisterExtensionRemovedCallback( |
| 3180 const base::Callback<void(const extensions::Extension*)>& callback) { |
| 3181 extension_removed_callbacks_.push_back(callback); |
| 3182 } |
| 3183 |
| 3184 void ExtensionService::RemoveExtensionRemovedCallback( |
| 3185 const base::Callback<void(const extensions::Extension*)>& callback) { |
| 3186 for (size_t i = 0; i < extension_removed_callbacks_.size(); ++i) { |
| 3187 if (extension_removed_callbacks_[i].Equals(callback)) { |
| 3188 extension_removed_callbacks_.erase( |
| 3189 extension_removed_callbacks_.begin() + i); |
| 3190 return; |
| 3191 } |
| 3192 } |
| 3193 } |
OLD | NEW |