OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 #include "chrome/common/extensions/extension_constants.h" | 80 #include "chrome/common/extensions/extension_constants.h" |
81 #include "chrome/common/extensions/extension_error_utils.h" | 81 #include "chrome/common/extensions/extension_error_utils.h" |
82 #include "chrome/common/extensions/extension_file_util.h" | 82 #include "chrome/common/extensions/extension_file_util.h" |
83 #include "chrome/common/extensions/extension_messages.h" | 83 #include "chrome/common/extensions/extension_messages.h" |
84 #include "chrome/common/extensions/extension_resource.h" | 84 #include "chrome/common/extensions/extension_resource.h" |
85 #include "chrome/common/pref_names.h" | 85 #include "chrome/common/pref_names.h" |
86 #include "chrome/common/url_constants.h" | 86 #include "chrome/common/url_constants.h" |
87 #include "content/browser/debugger/devtools_manager.h" | 87 #include "content/browser/debugger/devtools_manager.h" |
88 #include "content/browser/plugin_process_host.h" | 88 #include "content/browser/plugin_process_host.h" |
89 #include "content/browser/plugin_service.h" | 89 #include "content/browser/plugin_service.h" |
90 #include "content/browser/renderer_host/render_process_host.h" | |
91 #include "content/browser/user_metrics.h" | 90 #include "content/browser/user_metrics.h" |
92 #include "content/common/pepper_plugin_registry.h" | 91 #include "content/common/pepper_plugin_registry.h" |
93 #include "content/public/browser/browser_thread.h" | 92 #include "content/public/browser/browser_thread.h" |
94 #include "content/public/browser/notification_service.h" | 93 #include "content/public/browser/notification_service.h" |
95 #include "content/public/browser/notification_types.h" | 94 #include "content/public/browser/notification_types.h" |
| 95 #include "content/public/browser/render_process_host.h" |
96 #include "googleurl/src/gurl.h" | 96 #include "googleurl/src/gurl.h" |
97 #include "net/base/registry_controlled_domain.h" | 97 #include "net/base/registry_controlled_domain.h" |
98 #include "webkit/database/database_tracker.h" | 98 #include "webkit/database/database_tracker.h" |
99 #include "webkit/database/database_util.h" | 99 #include "webkit/database/database_util.h" |
100 | 100 |
101 #if defined(OS_CHROMEOS) | 101 #if defined(OS_CHROMEOS) |
102 #include "chrome/browser/chromeos/cros/cros_library.h" | 102 #include "chrome/browser/chromeos/cros/cros_library.h" |
103 #include "chrome/browser/chromeos/extensions/file_browser_event_router.h" | 103 #include "chrome/browser/chromeos/extensions/file_browser_event_router.h" |
104 #include "chrome/browser/chromeos/extensions/input_method_event_router.h" | 104 #include "chrome/browser/chromeos/extensions/input_method_event_router.h" |
105 #include "chrome/browser/chromeos/extensions/media_player_event_router.h" | 105 #include "chrome/browser/chromeos/extensions/media_player_event_router.h" |
(...skipping 807 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
913 content::NotificationService::current()->Notify( | 913 content::NotificationService::current()->Notify( |
914 chrome::NOTIFICATION_EXTENSION_LOADED, | 914 chrome::NOTIFICATION_EXTENSION_LOADED, |
915 content::Source<Profile>(profile_), | 915 content::Source<Profile>(profile_), |
916 content::Details<const Extension>(extension)); | 916 content::Details<const Extension>(extension)); |
917 | 917 |
918 // Tell renderers about the new extension. | 918 // Tell renderers about the new extension. |
919 for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator()); | 919 for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator()); |
920 !i.IsAtEnd(); i.Advance()) { | 920 !i.IsAtEnd(); i.Advance()) { |
921 RenderProcessHost* host = i.GetCurrentValue(); | 921 RenderProcessHost* host = i.GetCurrentValue(); |
922 Profile* host_profile = | 922 Profile* host_profile = |
923 Profile::FromBrowserContext(host->browser_context()); | 923 Profile::FromBrowserContext(host->GetBrowserContext()); |
924 if (host_profile->GetOriginalProfile() == profile_->GetOriginalProfile()) { | 924 if (host_profile->GetOriginalProfile() == profile_->GetOriginalProfile()) { |
925 std::vector<ExtensionMsg_Loaded_Params> loaded_extensions( | 925 std::vector<ExtensionMsg_Loaded_Params> loaded_extensions( |
926 1, ExtensionMsg_Loaded_Params(extension)); | 926 1, ExtensionMsg_Loaded_Params(extension)); |
927 host->Send( | 927 host->Send( |
928 new ExtensionMsg_Loaded(loaded_extensions)); | 928 new ExtensionMsg_Loaded(loaded_extensions)); |
929 } | 929 } |
930 } | 930 } |
931 | 931 |
932 // Tell a random-ass collection of other subsystems about the new extension. | 932 // Tell a random-ass collection of other subsystems about the new extension. |
933 // TODO(aa): What should we do with all this goop? Can it move into the | 933 // TODO(aa): What should we do with all this goop? Can it move into the |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1033 UnloadedExtensionInfo details(extension, reason); | 1033 UnloadedExtensionInfo details(extension, reason); |
1034 content::NotificationService::current()->Notify( | 1034 content::NotificationService::current()->Notify( |
1035 chrome::NOTIFICATION_EXTENSION_UNLOADED, | 1035 chrome::NOTIFICATION_EXTENSION_UNLOADED, |
1036 content::Source<Profile>(profile_), | 1036 content::Source<Profile>(profile_), |
1037 content::Details<UnloadedExtensionInfo>(&details)); | 1037 content::Details<UnloadedExtensionInfo>(&details)); |
1038 | 1038 |
1039 for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator()); | 1039 for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator()); |
1040 !i.IsAtEnd(); i.Advance()) { | 1040 !i.IsAtEnd(); i.Advance()) { |
1041 RenderProcessHost* host = i.GetCurrentValue(); | 1041 RenderProcessHost* host = i.GetCurrentValue(); |
1042 Profile* host_profile = | 1042 Profile* host_profile = |
1043 Profile::FromBrowserContext(host->browser_context()); | 1043 Profile::FromBrowserContext(host->GetBrowserContext()); |
1044 if (host_profile->GetOriginalProfile() == profile_->GetOriginalProfile()) | 1044 if (host_profile->GetOriginalProfile() == profile_->GetOriginalProfile()) |
1045 host->Send(new ExtensionMsg_Unloaded(extension->id())); | 1045 host->Send(new ExtensionMsg_Unloaded(extension->id())); |
1046 } | 1046 } |
1047 | 1047 |
1048 profile_->UnregisterExtensionWithRequestContexts(extension->id(), reason); | 1048 profile_->UnregisterExtensionWithRequestContexts(extension->id(), reason); |
1049 profile_->GetExtensionSpecialStoragePolicy()-> | 1049 profile_->GetExtensionSpecialStoragePolicy()-> |
1050 RevokeRightsForExtension(extension); | 1050 RevokeRightsForExtension(extension); |
1051 | 1051 |
1052 ExtensionWebUI::UnregisterChromeURLOverrides( | 1052 ExtensionWebUI::UnregisterChromeURLOverrides( |
1053 profile_, extension->GetChromeURLOverrides()); | 1053 profile_, extension->GetChromeURLOverrides()); |
(...skipping 1258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2312 base::Bind( | 2312 base::Bind( |
2313 &ExtensionService::TrackTerminatedExtension, | 2313 &ExtensionService::TrackTerminatedExtension, |
2314 AsWeakPtr(), | 2314 AsWeakPtr(), |
2315 host->extension())); | 2315 host->extension())); |
2316 break; | 2316 break; |
2317 } | 2317 } |
2318 case content::NOTIFICATION_RENDERER_PROCESS_CREATED: { | 2318 case content::NOTIFICATION_RENDERER_PROCESS_CREATED: { |
2319 RenderProcessHost* process = | 2319 RenderProcessHost* process = |
2320 content::Source<RenderProcessHost>(source).ptr(); | 2320 content::Source<RenderProcessHost>(source).ptr(); |
2321 Profile* host_profile = | 2321 Profile* host_profile = |
2322 Profile::FromBrowserContext(process->browser_context()); | 2322 Profile::FromBrowserContext(process->GetBrowserContext()); |
2323 if (!profile_->IsSameProfile(host_profile->GetOriginalProfile())) | 2323 if (!profile_->IsSameProfile(host_profile->GetOriginalProfile())) |
2324 break; | 2324 break; |
2325 | 2325 |
2326 // Valid extension function names, used to setup bindings in renderer. | 2326 // Valid extension function names, used to setup bindings in renderer. |
2327 std::vector<std::string> function_names; | 2327 std::vector<std::string> function_names; |
2328 ExtensionFunctionDispatcher::GetAllFunctionNames(&function_names); | 2328 ExtensionFunctionDispatcher::GetAllFunctionNames(&function_names); |
2329 process->Send(new ExtensionMsg_SetFunctionNames(function_names)); | 2329 process->Send(new ExtensionMsg_SetFunctionNames(function_names)); |
2330 | 2330 |
2331 // Scripting whitelist. This is modified by tests and must be communicated | 2331 // Scripting whitelist. This is modified by tests and must be communicated |
2332 // to renderers. | 2332 // to renderers. |
2333 process->Send(new ExtensionMsg_SetScriptingWhitelist( | 2333 process->Send(new ExtensionMsg_SetScriptingWhitelist( |
2334 *Extension::GetScriptingWhitelist())); | 2334 *Extension::GetScriptingWhitelist())); |
2335 | 2335 |
2336 // Loaded extensions. | 2336 // Loaded extensions. |
2337 std::vector<ExtensionMsg_Loaded_Params> loaded_extensions; | 2337 std::vector<ExtensionMsg_Loaded_Params> loaded_extensions; |
2338 for (size_t i = 0; i < extensions_.size(); ++i) { | 2338 for (size_t i = 0; i < extensions_.size(); ++i) { |
2339 loaded_extensions.push_back( | 2339 loaded_extensions.push_back( |
2340 ExtensionMsg_Loaded_Params(extensions_[i])); | 2340 ExtensionMsg_Loaded_Params(extensions_[i])); |
2341 } | 2341 } |
2342 process->Send(new ExtensionMsg_Loaded(loaded_extensions)); | 2342 process->Send(new ExtensionMsg_Loaded(loaded_extensions)); |
2343 break; | 2343 break; |
2344 } | 2344 } |
2345 case content::NOTIFICATION_RENDERER_PROCESS_TERMINATED: { | 2345 case content::NOTIFICATION_RENDERER_PROCESS_TERMINATED: { |
2346 RenderProcessHost* process = | 2346 RenderProcessHost* process = |
2347 content::Source<RenderProcessHost>(source).ptr(); | 2347 content::Source<RenderProcessHost>(source).ptr(); |
2348 Profile* host_profile = | 2348 Profile* host_profile = |
2349 Profile::FromBrowserContext(process->browser_context()); | 2349 Profile::FromBrowserContext(process->GetBrowserContext()); |
2350 if (!profile_->IsSameProfile(host_profile->GetOriginalProfile())) | 2350 if (!profile_->IsSameProfile(host_profile->GetOriginalProfile())) |
2351 break; | 2351 break; |
2352 | 2352 |
2353 installed_app_hosts_.erase(process->id()); | 2353 installed_app_hosts_.erase(process->GetID()); |
2354 | 2354 |
2355 process_map_.Remove(process->id()); | 2355 process_map_.Remove(process->GetID()); |
2356 BrowserThread::PostTask( | 2356 BrowserThread::PostTask( |
2357 BrowserThread::IO, FROM_HERE, | 2357 BrowserThread::IO, FROM_HERE, |
2358 base::Bind(&ExtensionInfoMap::UnregisterAllExtensionsInProcess, | 2358 base::Bind(&ExtensionInfoMap::UnregisterAllExtensionsInProcess, |
2359 profile_->GetExtensionInfoMap(), | 2359 profile_->GetExtensionInfoMap(), |
2360 process->id())); | 2360 process->GetID())); |
2361 break; | 2361 break; |
2362 } | 2362 } |
2363 case chrome::NOTIFICATION_PREF_CHANGED: { | 2363 case chrome::NOTIFICATION_PREF_CHANGED: { |
2364 std::string* pref_name = content::Details<std::string>(details).ptr(); | 2364 std::string* pref_name = content::Details<std::string>(details).ptr(); |
2365 if (*pref_name == prefs::kExtensionInstallAllowList || | 2365 if (*pref_name == prefs::kExtensionInstallAllowList || |
2366 *pref_name == prefs::kExtensionInstallDenyList) { | 2366 *pref_name == prefs::kExtensionInstallDenyList) { |
2367 CheckAdminBlacklist(); | 2367 CheckAdminBlacklist(); |
2368 } else { | 2368 } else { |
2369 NOTREACHED() << "Unexpected preference name."; | 2369 NOTREACHED() << "Unexpected preference name."; |
2370 } | 2370 } |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2502 | 2502 |
2503 ExtensionService::NaClModuleInfoList::iterator | 2503 ExtensionService::NaClModuleInfoList::iterator |
2504 ExtensionService::FindNaClModule(const GURL& url) { | 2504 ExtensionService::FindNaClModule(const GURL& url) { |
2505 for (NaClModuleInfoList::iterator iter = nacl_module_list_.begin(); | 2505 for (NaClModuleInfoList::iterator iter = nacl_module_list_.begin(); |
2506 iter != nacl_module_list_.end(); ++iter) { | 2506 iter != nacl_module_list_.end(); ++iter) { |
2507 if (iter->url == url) | 2507 if (iter->url == url) |
2508 return iter; | 2508 return iter; |
2509 } | 2509 } |
2510 return nacl_module_list_.end(); | 2510 return nacl_module_list_.end(); |
2511 } | 2511 } |
OLD | NEW |