OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <set> | 8 #include <set> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 #include "chrome/browser/extensions/unpacked_installer.h" | 73 #include "chrome/browser/extensions/unpacked_installer.h" |
74 #include "chrome/browser/extensions/updater/extension_updater.h" | 74 #include "chrome/browser/extensions/updater/extension_updater.h" |
75 #include "chrome/browser/extensions/window_event_router.h" | 75 #include "chrome/browser/extensions/window_event_router.h" |
76 #include "chrome/browser/history/history_extension_api.h" | 76 #include "chrome/browser/history/history_extension_api.h" |
77 #include "chrome/browser/net/chrome_url_request_context.h" | 77 #include "chrome/browser/net/chrome_url_request_context.h" |
78 #include "chrome/browser/prefs/pref_service.h" | 78 #include "chrome/browser/prefs/pref_service.h" |
79 #include "chrome/browser/profiles/profile.h" | 79 #include "chrome/browser/profiles/profile.h" |
80 #include "chrome/browser/profiles/profile_manager.h" | 80 #include "chrome/browser/profiles/profile_manager.h" |
81 #include "chrome/browser/search_engines/template_url_service.h" | 81 #include "chrome/browser/search_engines/template_url_service.h" |
82 #include "chrome/browser/search_engines/template_url_service_factory.h" | 82 #include "chrome/browser/search_engines/template_url_service_factory.h" |
| 83 #include "chrome/browser/themes/theme_service.h" |
| 84 #include "chrome/browser/themes/theme_service_factory.h" |
83 #include "chrome/browser/ui/webui/chrome_url_data_manager.h" | 85 #include "chrome/browser/ui/webui/chrome_url_data_manager.h" |
84 #include "chrome/browser/ui/webui/favicon_source.h" | 86 #include "chrome/browser/ui/webui/favicon_source.h" |
85 #include "chrome/browser/ui/webui/ntp/thumbnail_source.h" | 87 #include "chrome/browser/ui/webui/ntp/thumbnail_source.h" |
86 #include "chrome/browser/ui/webui/theme_source.h" | 88 #include "chrome/browser/ui/webui/theme_source.h" |
87 #include "chrome/common/child_process_logging.h" | 89 #include "chrome/common/child_process_logging.h" |
88 #include "chrome/common/chrome_notification_types.h" | 90 #include "chrome/common/chrome_notification_types.h" |
89 #include "chrome/common/chrome_paths.h" | 91 #include "chrome/common/chrome_paths.h" |
90 #include "chrome/common/chrome_switches.h" | 92 #include "chrome/common/chrome_switches.h" |
91 #include "chrome/common/chrome_version_info.h" | 93 #include "chrome/common/chrome_version_info.h" |
92 #include "chrome/common/extensions/extension.h" | 94 #include "chrome/common/extensions/extension.h" |
(...skipping 16 matching lines...) Expand all Loading... |
109 #include "content/public/common/pepper_plugin_info.h" | 111 #include "content/public/common/pepper_plugin_info.h" |
110 #include "extensions/common/error_utils.h" | 112 #include "extensions/common/error_utils.h" |
111 #include "googleurl/src/gurl.h" | 113 #include "googleurl/src/gurl.h" |
112 #include "grit/generated_resources.h" | 114 #include "grit/generated_resources.h" |
113 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" | 115 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" |
114 #include "sync/api/sync_change.h" | 116 #include "sync/api/sync_change.h" |
115 #include "sync/api/sync_error_factory.h" | 117 #include "sync/api/sync_error_factory.h" |
116 #include "webkit/database/database_tracker.h" | 118 #include "webkit/database/database_tracker.h" |
117 #include "webkit/database/database_util.h" | 119 #include "webkit/database/database_util.h" |
118 | 120 |
119 #if defined(ENABLE_THEMES) | |
120 #include "chrome/browser/themes/theme_service.h" | |
121 #include "chrome/browser/themes/theme_service_factory.h" | |
122 #endif | |
123 | |
124 #if defined(OS_CHROMEOS) | 121 #if defined(OS_CHROMEOS) |
125 #include "chrome/browser/chromeos/cros/cros_library.h" | 122 #include "chrome/browser/chromeos/cros/cros_library.h" |
126 #include "chrome/browser/chromeos/extensions/file_browser_event_router.h" | 123 #include "chrome/browser/chromeos/extensions/file_browser_event_router.h" |
127 #include "chrome/browser/chromeos/extensions/input_method_event_router.h" | 124 #include "chrome/browser/chromeos/extensions/input_method_event_router.h" |
128 #include "chrome/browser/chromeos/extensions/media_player_event_router.h" | 125 #include "chrome/browser/chromeos/extensions/media_player_event_router.h" |
129 #include "chrome/browser/chromeos/input_method/input_method_manager.h" | 126 #include "chrome/browser/chromeos/input_method/input_method_manager.h" |
130 #include "chrome/browser/extensions/api/input_ime/input_ime_api.h" | 127 #include "chrome/browser/extensions/api/input_ime/input_ime_api.h" |
131 #include "content/public/browser/storage_partition.h" | 128 #include "content/public/browser/storage_partition.h" |
132 #include "webkit/fileapi/file_system_context.h" | 129 #include "webkit/fileapi/file_system_context.h" |
133 #include "webkit/fileapi/file_system_mount_point_provider.h" | 130 #include "webkit/fileapi/file_system_mount_point_provider.h" |
(...skipping 893 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1027 | 1024 |
1028 void ExtensionService::NotifyExtensionLoaded(const Extension* extension) { | 1025 void ExtensionService::NotifyExtensionLoaded(const Extension* extension) { |
1029 // The ChromeURLRequestContexts need to be first to know that the extension | 1026 // The ChromeURLRequestContexts need to be first to know that the extension |
1030 // was loaded, otherwise a race can arise where a renderer that is created | 1027 // was loaded, otherwise a race can arise where a renderer that is created |
1031 // for the extension may try to load an extension URL with an extension id | 1028 // for the extension may try to load an extension URL with an extension id |
1032 // that the request context doesn't yet know about. The profile is responsible | 1029 // that the request context doesn't yet know about. The profile is responsible |
1033 // for ensuring its URLRequestContexts appropriately discover the loaded | 1030 // for ensuring its URLRequestContexts appropriately discover the loaded |
1034 // extension. | 1031 // extension. |
1035 system_->RegisterExtensionWithRequestContexts(extension); | 1032 system_->RegisterExtensionWithRequestContexts(extension); |
1036 | 1033 |
| 1034 // Tell renderers about the new extension, unless it's a theme (renderers |
| 1035 // don't need to know about themes). |
1037 if (!extension->is_theme()) { | 1036 if (!extension->is_theme()) { |
1038 // Tell renderers about non-theme extensions (renderers don't need | |
1039 // to know about themes). | |
1040 for (content::RenderProcessHost::iterator i( | 1037 for (content::RenderProcessHost::iterator i( |
1041 content::RenderProcessHost::AllHostsIterator()); | 1038 content::RenderProcessHost::AllHostsIterator()); |
1042 !i.IsAtEnd(); i.Advance()) { | 1039 !i.IsAtEnd(); i.Advance()) { |
1043 content::RenderProcessHost* host = i.GetCurrentValue(); | 1040 content::RenderProcessHost* host = i.GetCurrentValue(); |
1044 Profile* host_profile = | 1041 Profile* host_profile = |
1045 Profile::FromBrowserContext(host->GetBrowserContext()); | 1042 Profile::FromBrowserContext(host->GetBrowserContext()); |
1046 if (host_profile->GetOriginalProfile() == | 1043 if (host_profile->GetOriginalProfile() == |
1047 profile_->GetOriginalProfile()) { | 1044 profile_->GetOriginalProfile()) { |
1048 std::vector<ExtensionMsg_Loaded_Params> loaded_extensions( | 1045 std::vector<ExtensionMsg_Loaded_Params> loaded_extensions( |
1049 1, ExtensionMsg_Loaded_Params(extension)); | 1046 1, ExtensionMsg_Loaded_Params(extension)); |
(...skipping 972 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2022 install_directory_, | 2019 install_directory_, |
2023 extension_paths))) { | 2020 extension_paths))) { |
2024 NOTREACHED(); | 2021 NOTREACHED(); |
2025 } | 2022 } |
2026 | 2023 |
2027 #if defined(ENABLE_THEMES) | 2024 #if defined(ENABLE_THEMES) |
2028 // Also garbage-collect themes. We check |profile_| to be | 2025 // Also garbage-collect themes. We check |profile_| to be |
2029 // defensive; in the future, we may call GarbageCollectExtensions() | 2026 // defensive; in the future, we may call GarbageCollectExtensions() |
2030 // from somewhere other than Init() (e.g., in a timer). | 2027 // from somewhere other than Init() (e.g., in a timer). |
2031 if (profile_) { | 2028 if (profile_) { |
2032 ThemeService::RemoveUnusedThemesForProfile(profile_); | 2029 ThemeServiceFactory::GetForProfile(profile_)->RemoveUnusedThemes(); |
2033 } | 2030 } |
2034 #endif | 2031 #endif |
2035 } | 2032 } |
2036 | 2033 |
2037 void ExtensionService::SyncExtensionChangeIfNeeded(const Extension& extension) { | 2034 void ExtensionService::SyncExtensionChangeIfNeeded(const Extension& extension) { |
2038 if (app_sync_bundle_.HandlesApp(extension)) { | 2035 if (app_sync_bundle_.HandlesApp(extension)) { |
2039 app_sync_bundle_.SyncChangeIfNeeded(extension); | 2036 app_sync_bundle_.SyncChangeIfNeeded(extension); |
2040 } else if (extension_sync_bundle_.HandlesExtension(extension)) { | 2037 } else if (extension_sync_bundle_.HandlesExtension(extension)) { |
2041 extension_sync_bundle_.SyncChangeIfNeeded(extension); | 2038 extension_sync_bundle_.SyncChangeIfNeeded(extension); |
2042 } | 2039 } |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2103 // so we must ensure they have valid ordinals. | 2100 // so we must ensure they have valid ordinals. |
2104 if (extension->RequiresSortOrdinal()) { | 2101 if (extension->RequiresSortOrdinal()) { |
2105 extension_prefs_->extension_sorting()->EnsureValidOrdinals( | 2102 extension_prefs_->extension_sorting()->EnsureValidOrdinals( |
2106 extension->id(), syncer::StringOrdinal()); | 2103 extension->id(), syncer::StringOrdinal()); |
2107 } | 2104 } |
2108 | 2105 |
2109 extensions_.Insert(extension); | 2106 extensions_.Insert(extension); |
2110 SyncExtensionChangeIfNeeded(*extension); | 2107 SyncExtensionChangeIfNeeded(*extension); |
2111 NotifyExtensionLoaded(extension); | 2108 NotifyExtensionLoaded(extension); |
2112 DoPostLoadTasks(extension); | 2109 DoPostLoadTasks(extension); |
2113 | |
2114 #if defined(ENABLE_THEMES) | |
2115 if (extension->is_theme()) { | |
2116 // Notify the ThemeService about the newly-installed theme. | |
2117 ThemeServiceFactory::SetThemeForProfile(profile_, extension); | |
2118 } | |
2119 #endif | |
2120 } | 2110 } |
2121 | 2111 |
2122 void ExtensionService::AddComponentExtension(const Extension* extension) { | 2112 void ExtensionService::AddComponentExtension(const Extension* extension) { |
2123 const std::string old_version_string( | 2113 const std::string old_version_string( |
2124 extension_prefs_->GetVersionString(extension->id())); | 2114 extension_prefs_->GetVersionString(extension->id())); |
2125 const Version old_version(old_version_string); | 2115 const Version old_version(old_version_string); |
2126 | 2116 |
2127 if (!old_version.IsValid() || !old_version.Equals(*extension->version())) { | 2117 if (!old_version.IsValid() || !old_version.Equals(*extension->version())) { |
2128 VLOG(1) << "Component extension " << extension->name() << " (" | 2118 VLOG(1) << "Component extension " << extension->name() << " (" |
2129 << extension->id() << ") installing/upgrading from '" | 2119 << extension->id() << ") installing/upgrading from '" |
(...skipping 902 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3032 extension_id, kOnUpdateAvailableEvent); | 3022 extension_id, kOnUpdateAvailableEvent); |
3033 } else { | 3023 } else { |
3034 // Delay installation if the extension is not idle. | 3024 // Delay installation if the extension is not idle. |
3035 return !IsExtensionIdle(extension_id); | 3025 return !IsExtensionIdle(extension_id); |
3036 } | 3026 } |
3037 } | 3027 } |
3038 | 3028 |
3039 void ExtensionService::OnBlacklistUpdated() { | 3029 void ExtensionService::OnBlacklistUpdated() { |
3040 CheckManagementPolicy(); | 3030 CheckManagementPolicy(); |
3041 } | 3031 } |
OLD | NEW |