| 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 |