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 <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <iterator> | 10 #include <iterator> |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 #include "content/public/browser/render_process_host.h" | 67 #include "content/public/browser/render_process_host.h" |
68 #include "content/public/browser/storage_partition.h" | 68 #include "content/public/browser/storage_partition.h" |
69 #include "extensions/browser/app_sorting.h" | 69 #include "extensions/browser/app_sorting.h" |
70 #include "extensions/browser/event_router.h" | 70 #include "extensions/browser/event_router.h" |
71 #include "extensions/browser/extension_host.h" | 71 #include "extensions/browser/extension_host.h" |
72 #include "extensions/browser/extension_registry.h" | 72 #include "extensions/browser/extension_registry.h" |
73 #include "extensions/browser/extension_system.h" | 73 #include "extensions/browser/extension_system.h" |
74 #include "extensions/browser/extensions_browser_client.h" | 74 #include "extensions/browser/extensions_browser_client.h" |
75 #include "extensions/browser/external_install_info.h" | 75 #include "extensions/browser/external_install_info.h" |
76 #include "extensions/browser/install_flag.h" | 76 #include "extensions/browser/install_flag.h" |
77 #include "extensions/browser/renderer_startup_helper.h" | |
78 #include "extensions/browser/runtime_data.h" | 77 #include "extensions/browser/runtime_data.h" |
79 #include "extensions/browser/uninstall_reason.h" | 78 #include "extensions/browser/uninstall_reason.h" |
80 #include "extensions/browser/update_observer.h" | 79 #include "extensions/browser/update_observer.h" |
81 #include "extensions/browser/updater/extension_cache.h" | 80 #include "extensions/browser/updater/extension_cache.h" |
82 #include "extensions/browser/updater/extension_downloader.h" | 81 #include "extensions/browser/updater/extension_downloader.h" |
83 #include "extensions/common/extension_messages.h" | 82 #include "extensions/common/extension_messages.h" |
84 #include "extensions/common/extension_urls.h" | 83 #include "extensions/common/extension_urls.h" |
85 #include "extensions/common/feature_switch.h" | 84 #include "extensions/common/feature_switch.h" |
86 #include "extensions/common/file_util.h" | 85 #include "extensions/common/file_util.h" |
87 #include "extensions/common/manifest_constants.h" | 86 #include "extensions/common/manifest_constants.h" |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
303 profile_(profile), | 302 profile_(profile), |
304 system_(extensions::ExtensionSystem::Get(profile)), | 303 system_(extensions::ExtensionSystem::Get(profile)), |
305 extension_prefs_(extension_prefs), | 304 extension_prefs_(extension_prefs), |
306 blacklist_(blacklist), | 305 blacklist_(blacklist), |
307 registry_(extensions::ExtensionRegistry::Get(profile)), | 306 registry_(extensions::ExtensionRegistry::Get(profile)), |
308 pending_extension_manager_(profile), | 307 pending_extension_manager_(profile), |
309 install_directory_(install_directory), | 308 install_directory_(install_directory), |
310 extensions_enabled_(extensions_enabled), | 309 extensions_enabled_(extensions_enabled), |
311 ready_(ready), | 310 ready_(ready), |
312 shared_module_service_(new extensions::SharedModuleService(profile_)), | 311 shared_module_service_(new extensions::SharedModuleService(profile_)), |
313 renderer_helper_( | |
314 extensions::RendererStartupHelperFactory::GetForBrowserContext( | |
315 profile_)), | |
316 app_data_migrator_(new extensions::AppDataMigrator(profile_, registry_)) { | 312 app_data_migrator_(new extensions::AppDataMigrator(profile_, registry_)) { |
317 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 313 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
318 TRACE_EVENT0("browser,startup", "ExtensionService::ExtensionService::ctor"); | 314 TRACE_EVENT0("browser,startup", "ExtensionService::ExtensionService::ctor"); |
319 | 315 |
320 // Figure out if extension installation should be enabled. | 316 // Figure out if extension installation should be enabled. |
321 if (extensions::ExtensionsBrowserClient::Get()->AreExtensionsDisabled( | 317 if (extensions::ExtensionsBrowserClient::Get()->AreExtensionsDisabled( |
322 *command_line, profile)) | 318 *command_line, profile)) |
323 extensions_enabled_ = false; | 319 extensions_enabled_ = false; |
324 | 320 |
325 registrar_.Add(this, chrome::NOTIFICATION_APP_TERMINATING, | 321 registrar_.Add(this, chrome::NOTIFICATION_APP_TERMINATING, |
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1027 // was loaded, otherwise a race can arise where a renderer that is created | 1023 // was loaded, otherwise a race can arise where a renderer that is created |
1028 // for the extension may try to load an extension URL with an extension id | 1024 // for the extension may try to load an extension URL with an extension id |
1029 // that the request context doesn't yet know about. The profile is responsible | 1025 // that the request context doesn't yet know about. The profile is responsible |
1030 // for ensuring its URLRequestContexts appropriately discover the loaded | 1026 // for ensuring its URLRequestContexts appropriately discover the loaded |
1031 // extension. | 1027 // extension. |
1032 system_->RegisterExtensionWithRequestContexts( | 1028 system_->RegisterExtensionWithRequestContexts( |
1033 extension, | 1029 extension, |
1034 base::Bind(&ExtensionService::OnExtensionRegisteredWithRequestContexts, | 1030 base::Bind(&ExtensionService::OnExtensionRegisteredWithRequestContexts, |
1035 AsWeakPtr(), make_scoped_refptr(extension))); | 1031 AsWeakPtr(), make_scoped_refptr(extension))); |
1036 | 1032 |
1037 renderer_helper_->OnExtensionLoaded(*extension); | 1033 // Tell renderers about the new extension, unless it's a theme (renderers |
| 1034 // don't need to know about themes). |
| 1035 if (!extension->is_theme()) { |
| 1036 for (content::RenderProcessHost::iterator i( |
| 1037 content::RenderProcessHost::AllHostsIterator()); |
| 1038 !i.IsAtEnd(); i.Advance()) { |
| 1039 content::RenderProcessHost* host = i.GetCurrentValue(); |
| 1040 Profile* host_profile = |
| 1041 Profile::FromBrowserContext(host->GetBrowserContext()); |
| 1042 if (host_profile->GetOriginalProfile() == |
| 1043 profile_->GetOriginalProfile()) { |
| 1044 // We don't need to include tab permisisons here, since the extension |
| 1045 // was just loaded. |
| 1046 std::vector<ExtensionMsg_Loaded_Params> loaded_extensions( |
| 1047 1, ExtensionMsg_Loaded_Params(extension, |
| 1048 false /* no tab permissions */)); |
| 1049 host->Send( |
| 1050 new ExtensionMsg_Loaded(loaded_extensions)); |
| 1051 } |
| 1052 } |
| 1053 } |
1038 | 1054 |
1039 // Tell subsystems that use the EXTENSION_LOADED notification about the new | 1055 // Tell subsystems that use the EXTENSION_LOADED notification about the new |
1040 // extension. | 1056 // extension. |
1041 // | 1057 // |
1042 // NOTE: It is important that this happen after notifying the renderers about | 1058 // NOTE: It is important that this happen after notifying the renderers about |
1043 // the new extensions so that if we navigate to an extension URL in | 1059 // the new extensions so that if we navigate to an extension URL in |
1044 // ExtensionRegistryObserver::OnLoaded or | 1060 // ExtensionRegistryObserver::OnLoaded or |
1045 // NOTIFICATION_EXTENSION_LOADED_DEPRECATED, the | 1061 // NOTIFICATION_EXTENSION_LOADED_DEPRECATED, the |
1046 // renderer is guaranteed to know about it. | 1062 // renderer is guaranteed to know about it. |
1047 registry_->TriggerOnLoaded(extension); | 1063 registry_->TriggerOnLoaded(extension); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1099 UnloadedExtensionInfo::Reason reason) { | 1115 UnloadedExtensionInfo::Reason reason) { |
1100 UnloadedExtensionInfo details(extension, reason); | 1116 UnloadedExtensionInfo details(extension, reason); |
1101 | 1117 |
1102 registry_->TriggerOnUnloaded(extension, reason); | 1118 registry_->TriggerOnUnloaded(extension, reason); |
1103 | 1119 |
1104 content::NotificationService::current()->Notify( | 1120 content::NotificationService::current()->Notify( |
1105 extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, | 1121 extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, |
1106 content::Source<Profile>(profile_), | 1122 content::Source<Profile>(profile_), |
1107 content::Details<UnloadedExtensionInfo>(&details)); | 1123 content::Details<UnloadedExtensionInfo>(&details)); |
1108 | 1124 |
1109 renderer_helper_->OnExtensionUnloaded(extension->id()); | 1125 for (content::RenderProcessHost::iterator i( |
| 1126 content::RenderProcessHost::AllHostsIterator()); |
| 1127 !i.IsAtEnd(); i.Advance()) { |
| 1128 content::RenderProcessHost* host = i.GetCurrentValue(); |
| 1129 Profile* host_profile = |
| 1130 Profile::FromBrowserContext(host->GetBrowserContext()); |
| 1131 if (host_profile->GetOriginalProfile() == profile_->GetOriginalProfile()) |
| 1132 host->Send(new ExtensionMsg_Unloaded(extension->id())); |
| 1133 } |
1110 | 1134 |
1111 system_->UnregisterExtensionWithRequestContexts(extension->id(), reason); | 1135 system_->UnregisterExtensionWithRequestContexts(extension->id(), reason); |
1112 | 1136 |
1113 // TODO(kalman): Convert ExtensionSpecialStoragePolicy to a | 1137 // TODO(kalman): Convert ExtensionSpecialStoragePolicy to a |
1114 // BrowserContextKeyedService and use ExtensionRegistryObserver. | 1138 // BrowserContextKeyedService and use ExtensionRegistryObserver. |
1115 profile_->GetExtensionSpecialStoragePolicy()-> | 1139 profile_->GetExtensionSpecialStoragePolicy()-> |
1116 RevokeRightsForExtension(extension); | 1140 RevokeRightsForExtension(extension); |
1117 | 1141 |
1118 #if defined(OS_CHROMEOS) | 1142 #if defined(OS_CHROMEOS) |
1119 // Revoke external file access for the extension from its file system context. | 1143 // Revoke external file access for the extension from its file system context. |
(...skipping 1323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2443 } | 2467 } |
2444 | 2468 |
2445 void ExtensionService::OnProfileDestructionStarted() { | 2469 void ExtensionService::OnProfileDestructionStarted() { |
2446 ExtensionIdSet ids_to_unload = registry_->enabled_extensions().GetIDs(); | 2470 ExtensionIdSet ids_to_unload = registry_->enabled_extensions().GetIDs(); |
2447 for (ExtensionIdSet::iterator it = ids_to_unload.begin(); | 2471 for (ExtensionIdSet::iterator it = ids_to_unload.begin(); |
2448 it != ids_to_unload.end(); | 2472 it != ids_to_unload.end(); |
2449 ++it) { | 2473 ++it) { |
2450 UnloadExtension(*it, UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN); | 2474 UnloadExtension(*it, UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN); |
2451 } | 2475 } |
2452 } | 2476 } |
OLD | NEW |