| 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 913 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 924 // extension. | 924 // extension. |
| 925 profile_->RegisterExtensionWithRequestContexts(extension); | 925 profile_->RegisterExtensionWithRequestContexts(extension); |
| 926 | 926 |
| 927 // Tell subsystems that use the EXTENSION_LOADED notification about the new | 927 // Tell subsystems that use the EXTENSION_LOADED notification about the new |
| 928 // extension. | 928 // extension. |
| 929 content::NotificationService::current()->Notify( | 929 content::NotificationService::current()->Notify( |
| 930 chrome::NOTIFICATION_EXTENSION_LOADED, | 930 chrome::NOTIFICATION_EXTENSION_LOADED, |
| 931 content::Source<Profile>(profile_), | 931 content::Source<Profile>(profile_), |
| 932 content::Details<const Extension>(extension)); | 932 content::Details<const Extension>(extension)); |
| 933 | 933 |
| 934 // Tell renderers about the new extension. | 934 // Tell renderers about the new extension, unless it's a theme (renderers |
| 935 for (content::RenderProcessHost::iterator i( | 935 // don't need to know about themes). |
| 936 content::RenderProcessHost::AllHostsIterator()); | 936 if (!extension->is_theme()) { |
| 937 !i.IsAtEnd(); i.Advance()) { | 937 for (content::RenderProcessHost::iterator i( |
| 938 content::RenderProcessHost* host = i.GetCurrentValue(); | 938 content::RenderProcessHost::AllHostsIterator()); |
| 939 Profile* host_profile = | 939 !i.IsAtEnd(); i.Advance()) { |
| 940 Profile::FromBrowserContext(host->GetBrowserContext()); | 940 content::RenderProcessHost* host = i.GetCurrentValue(); |
| 941 if (host_profile->GetOriginalProfile() == profile_->GetOriginalProfile()) { | 941 Profile* host_profile = |
| 942 std::vector<ExtensionMsg_Loaded_Params> loaded_extensions( | 942 Profile::FromBrowserContext(host->GetBrowserContext()); |
| 943 1, ExtensionMsg_Loaded_Params(extension)); | 943 if (host_profile->GetOriginalProfile() == |
| 944 host->Send( | 944 profile_->GetOriginalProfile()) { |
| 945 new ExtensionMsg_Loaded(loaded_extensions)); | 945 std::vector<ExtensionMsg_Loaded_Params> loaded_extensions( |
| 946 1, ExtensionMsg_Loaded_Params(extension)); |
| 947 host->Send( |
| 948 new ExtensionMsg_Loaded(loaded_extensions)); |
| 949 } |
| 946 } | 950 } |
| 947 } | 951 } |
| 948 | 952 |
| 949 // Tell a random-ass collection of other subsystems about the new extension. | 953 // Tell a random-ass collection of other subsystems about the new extension. |
| 950 // TODO(aa): What should we do with all this goop? Can it move into the | 954 // TODO(aa): What should we do with all this goop? Can it move into the |
| 951 // relevant objects via EXTENSION_LOADED? | 955 // relevant objects via EXTENSION_LOADED? |
| 952 | 956 |
| 953 profile_->GetExtensionSpecialStoragePolicy()-> | 957 profile_->GetExtensionSpecialStoragePolicy()-> |
| 954 GrantRightsForExtension(extension); | 958 GrantRightsForExtension(extension); |
| 955 | 959 |
| (...skipping 1364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2320 | 2324 |
| 2321 // Scripting whitelist. This is modified by tests and must be communicated | 2325 // Scripting whitelist. This is modified by tests and must be communicated |
| 2322 // to renderers. | 2326 // to renderers. |
| 2323 process->Send(new ExtensionMsg_SetScriptingWhitelist( | 2327 process->Send(new ExtensionMsg_SetScriptingWhitelist( |
| 2324 *Extension::GetScriptingWhitelist())); | 2328 *Extension::GetScriptingWhitelist())); |
| 2325 | 2329 |
| 2326 // Loaded extensions. | 2330 // Loaded extensions. |
| 2327 std::vector<ExtensionMsg_Loaded_Params> loaded_extensions; | 2331 std::vector<ExtensionMsg_Loaded_Params> loaded_extensions; |
| 2328 for (ExtensionSet::const_iterator iter = extensions_.begin(); | 2332 for (ExtensionSet::const_iterator iter = extensions_.begin(); |
| 2329 iter != extensions_.end(); ++iter) { | 2333 iter != extensions_.end(); ++iter) { |
| 2330 loaded_extensions.push_back(ExtensionMsg_Loaded_Params(*iter)); | 2334 // Renderers don't need to know about themes. |
| 2335 if (!(*iter)->is_theme()) |
| 2336 loaded_extensions.push_back(ExtensionMsg_Loaded_Params(*iter)); |
| 2331 } | 2337 } |
| 2332 process->Send(new ExtensionMsg_Loaded(loaded_extensions)); | 2338 process->Send(new ExtensionMsg_Loaded(loaded_extensions)); |
| 2333 break; | 2339 break; |
| 2334 } | 2340 } |
| 2335 case content::NOTIFICATION_RENDERER_PROCESS_TERMINATED: { | 2341 case content::NOTIFICATION_RENDERER_PROCESS_TERMINATED: { |
| 2336 content::RenderProcessHost* process = | 2342 content::RenderProcessHost* process = |
| 2337 content::Source<content::RenderProcessHost>(source).ptr(); | 2343 content::Source<content::RenderProcessHost>(source).ptr(); |
| 2338 Profile* host_profile = | 2344 Profile* host_profile = |
| 2339 Profile::FromBrowserContext(process->GetBrowserContext()); | 2345 Profile::FromBrowserContext(process->GetBrowserContext()); |
| 2340 if (!profile_->IsSameProfile(host_profile->GetOriginalProfile())) | 2346 if (!profile_->IsSameProfile(host_profile->GetOriginalProfile())) |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2557 // | 2563 // |
| 2558 // To coexist with certain unit tests that don't have an IO thread message | 2564 // To coexist with certain unit tests that don't have an IO thread message |
| 2559 // loop available at ExtensionService shutdown, we lazy-initialize this | 2565 // loop available at ExtensionService shutdown, we lazy-initialize this |
| 2560 // object so that those cases neither create nor destroy a SocketController. | 2566 // object so that those cases neither create nor destroy a SocketController. |
| 2561 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 2567 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 2562 if (!socket_controller_) { | 2568 if (!socket_controller_) { |
| 2563 socket_controller_ = new extensions::SocketController(); | 2569 socket_controller_ = new extensions::SocketController(); |
| 2564 } | 2570 } |
| 2565 return socket_controller_; | 2571 return socket_controller_; |
| 2566 } | 2572 } |
| OLD | NEW |