OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/browser/extension_web_contents_observer.h" | 5 #include "extensions/browser/extension_web_contents_observer.h" |
6 | 6 |
7 #include "content/public/browser/child_process_security_policy.h" | 7 #include "content/public/browser/child_process_security_policy.h" |
8 #include "content/public/browser/render_frame_host.h" | 8 #include "content/public/browser/render_frame_host.h" |
9 #include "content/public/browser/render_process_host.h" | 9 #include "content/public/browser/render_process_host.h" |
10 #include "content/public/browser/render_view_host.h" | 10 #include "content/public/browser/render_view_host.h" |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 // Some extensions use file:// URLs. | 83 // Some extensions use file:// URLs. |
84 if (type == Manifest::TYPE_EXTENSION || | 84 if (type == Manifest::TYPE_EXTENSION || |
85 type == Manifest::TYPE_LEGACY_PACKAGED_APP) { | 85 type == Manifest::TYPE_LEGACY_PACKAGED_APP) { |
86 ExtensionPrefs* prefs = ExtensionPrefs::Get(browser_context_); | 86 ExtensionPrefs* prefs = ExtensionPrefs::Get(browser_context_); |
87 if (prefs->AllowFileAccess(extension->id())) { | 87 if (prefs->AllowFileAccess(extension->id())) { |
88 content::ChildProcessSecurityPolicy::GetInstance()->GrantScheme( | 88 content::ChildProcessSecurityPolicy::GetInstance()->GrantScheme( |
89 process->GetID(), url::kFileScheme); | 89 process->GetID(), url::kFileScheme); |
90 } | 90 } |
91 } | 91 } |
92 | 92 |
93 switch (type) { | 93 // Tells the new view that it's hosted in an extension process. |
94 case Manifest::TYPE_EXTENSION: | 94 // |
95 case Manifest::TYPE_USER_SCRIPT: | 95 // This will often be a rendant IPC, because activating extensions happens at |
96 case Manifest::TYPE_HOSTED_APP: | 96 // the process level, not at the view level. However, without some mild |
97 case Manifest::TYPE_LEGACY_PACKAGED_APP: | 97 // refactoring this isn't trivial to do, and this way is simpler. |
98 case Manifest::TYPE_PLATFORM_APP: | 98 // |
99 // Always send a Loaded message before ActivateExtension so that | 99 // Plus, we can delete the concept of activating an extension once site |
100 // ExtensionDispatcher knows what Extension is active, not just its ID. | 100 // isolation is turned on. |
101 // This is important for classifying the Extension's JavaScript context | 101 render_view_host->Send(new ExtensionMsg_ActivateExtension(extension->id())); |
102 // correctly (see ExtensionDispatcher::ClassifyJavaScriptContext). | |
103 // We also have to include the tab-specific permissions here, since it's | |
104 // an extension process. | |
105 render_view_host->Send( | |
106 new ExtensionMsg_Loaded(std::vector<ExtensionMsg_Loaded_Params>( | |
107 1, ExtensionMsg_Loaded_Params( | |
108 extension, true /* include tab permissions */)))); | |
109 render_view_host->Send( | |
110 new ExtensionMsg_ActivateExtension(extension->id())); | |
111 break; | |
112 | |
113 case Manifest::TYPE_UNKNOWN: | |
114 case Manifest::TYPE_THEME: | |
115 case Manifest::TYPE_SHARED_MODULE: | |
116 break; | |
117 | |
118 case Manifest::NUM_LOAD_TYPES: | |
119 NOTREACHED(); | |
120 } | |
121 } | 102 } |
122 | 103 |
123 void ExtensionWebContentsObserver::RenderFrameCreated( | 104 void ExtensionWebContentsObserver::RenderFrameCreated( |
124 content::RenderFrameHost* render_frame_host) { | 105 content::RenderFrameHost* render_frame_host) { |
125 const Extension* extension = GetExtensionForRenderFrame(render_frame_host); | 106 const Extension* extension = GetExtensionForRenderFrame(render_frame_host); |
126 if (extension) { | 107 if (extension) { |
127 ExtensionsBrowserClient::Get()->RegisterMojoServices(render_frame_host, | 108 ExtensionsBrowserClient::Get()->RegisterMojoServices(render_frame_host, |
128 extension); | 109 extension); |
129 } | 110 } |
130 } | 111 } |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
193 // site, so we can ignore that wrinkle here. | 174 // site, so we can ignore that wrinkle here. |
194 const GURL& site = render_view_host->GetSiteInstance()->GetSiteURL(); | 175 const GURL& site = render_view_host->GetSiteInstance()->GetSiteURL(); |
195 | 176 |
196 if (!site.SchemeIs(kExtensionScheme)) | 177 if (!site.SchemeIs(kExtensionScheme)) |
197 return std::string(); | 178 return std::string(); |
198 | 179 |
199 return site.host(); | 180 return site.host(); |
200 } | 181 } |
201 | 182 |
202 } // namespace extensions | 183 } // namespace extensions |
OLD | NEW |