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 |