OLD | NEW |
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 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_host.h" | 5 #include "chrome/browser/extensions/extension_host.h" |
6 | 6 |
7 #include <list> | 7 #include <list> |
8 | 8 |
9 #include "app/l10n_util.h" | 9 #include "app/l10n_util.h" |
10 #include "app/resource_bundle.h" | 10 #include "app/resource_bundle.h" |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 : extension_(extension), | 117 : extension_(extension), |
118 profile_(site_instance->browsing_instance()->profile()), | 118 profile_(site_instance->browsing_instance()->profile()), |
119 did_stop_loading_(false), | 119 did_stop_loading_(false), |
120 document_element_available_(false), | 120 document_element_available_(false), |
121 url_(url), | 121 url_(url), |
122 extension_host_type_(host_type) { | 122 extension_host_type_(host_type) { |
123 render_view_host_ = new RenderViewHost(site_instance, this, MSG_ROUTING_NONE); | 123 render_view_host_ = new RenderViewHost(site_instance, this, MSG_ROUTING_NONE); |
124 render_view_host_->AllowBindings(BindingsPolicy::EXTENSION); | 124 render_view_host_->AllowBindings(BindingsPolicy::EXTENSION); |
125 if (enable_dom_automation_) | 125 if (enable_dom_automation_) |
126 render_view_host_->AllowBindings(BindingsPolicy::DOM_AUTOMATION); | 126 render_view_host_->AllowBindings(BindingsPolicy::DOM_AUTOMATION); |
| 127 |
| 128 // Listen for when the render process' handle is available so we can add it |
| 129 // to the task manager then. |
| 130 registrar_.Add(this, NotificationType::RENDERER_PROCESS_CREATED, |
| 131 Source<RenderProcessHost>(render_process_host())); |
127 } | 132 } |
128 | 133 |
129 ExtensionHost::~ExtensionHost() { | 134 ExtensionHost::~ExtensionHost() { |
130 NotificationService::current()->Notify( | 135 NotificationService::current()->Notify( |
131 NotificationType::EXTENSION_HOST_DESTROYED, | 136 NotificationType::EXTENSION_HOST_DESTROYED, |
132 Source<Profile>(profile_), | 137 Source<Profile>(profile_), |
133 Details<ExtensionHost>(this)); | 138 Details<ExtensionHost>(this)); |
134 ProcessCreationQueue::get()->Remove(this); | 139 ProcessCreationQueue::get()->Remove(this); |
135 render_view_host_->Shutdown(); // deletes render_view_host | 140 render_view_host_->Shutdown(); // deletes render_view_host |
136 } | 141 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 void ExtensionHost::CreateRenderViewSoon(RenderWidgetHostView* host_view) { | 173 void ExtensionHost::CreateRenderViewSoon(RenderWidgetHostView* host_view) { |
169 LOG(INFO) << "Creating RenderView for " + extension_->name(); | 174 LOG(INFO) << "Creating RenderView for " + extension_->name(); |
170 render_view_host_->set_view(host_view); | 175 render_view_host_->set_view(host_view); |
171 ProcessCreationQueue::get()->CreateSoon(this); | 176 ProcessCreationQueue::get()->CreateSoon(this); |
172 } | 177 } |
173 | 178 |
174 void ExtensionHost::CreateRenderViewNow() { | 179 void ExtensionHost::CreateRenderViewNow() { |
175 render_view_host_->CreateRenderView(profile_->GetRequestContext()); | 180 render_view_host_->CreateRenderView(profile_->GetRequestContext()); |
176 NavigateToURL(url_); | 181 NavigateToURL(url_); |
177 DCHECK(IsRenderViewLive()); | 182 DCHECK(IsRenderViewLive()); |
178 LOG(INFO) << "Sending EXTENSION_PROCESS_CREATED"; | |
179 NotificationService::current()->Notify( | |
180 NotificationType::EXTENSION_PROCESS_CREATED, | |
181 Source<Profile>(profile_), | |
182 Details<ExtensionHost>(this)); | |
183 } | 183 } |
184 | 184 |
185 void ExtensionHost::NavigateToURL(const GURL& url) { | 185 void ExtensionHost::NavigateToURL(const GURL& url) { |
186 LOG(INFO) << "Request to NavigateToURL " << url.spec() << " for " | 186 LOG(INFO) << "Request to NavigateToURL " << url.spec() << " for " |
187 << extension_->name(); | 187 << extension_->name(); |
188 // Prevent explicit navigation to another extension id's pages. | 188 // Prevent explicit navigation to another extension id's pages. |
189 // This method is only called by some APIs, so we still need to protect | 189 // This method is only called by some APIs, so we still need to protect |
190 // DidNavigate below (location = ""). | 190 // DidNavigate below (location = ""). |
191 if (url.SchemeIs(chrome::kExtensionScheme) && | 191 if (url.SchemeIs(chrome::kExtensionScheme) && |
192 url.host() != extension_->id()) { | 192 url.host() != extension_->id()) { |
(...skipping 16 matching lines...) Expand all Loading... |
209 } | 209 } |
210 | 210 |
211 void ExtensionHost::Observe(NotificationType type, | 211 void ExtensionHost::Observe(NotificationType type, |
212 const NotificationSource& source, | 212 const NotificationSource& source, |
213 const NotificationDetails& details) { | 213 const NotificationDetails& details) { |
214 if (type == NotificationType::EXTENSION_BACKGROUND_PAGE_READY) { | 214 if (type == NotificationType::EXTENSION_BACKGROUND_PAGE_READY) { |
215 DCHECK(extension_->GetBackgroundPageReady()); | 215 DCHECK(extension_->GetBackgroundPageReady()); |
216 NavigateToURL(url_); | 216 NavigateToURL(url_); |
217 } else if (type == NotificationType::BROWSER_THEME_CHANGED) { | 217 } else if (type == NotificationType::BROWSER_THEME_CHANGED) { |
218 InsertThemeCSS(); | 218 InsertThemeCSS(); |
| 219 } else if (type == NotificationType::RENDERER_PROCESS_CREATED) { |
| 220 LOG(INFO) << "Sending EXTENSION_PROCESS_CREATED"; |
| 221 NotificationService::current()->Notify( |
| 222 NotificationType::EXTENSION_PROCESS_CREATED, |
| 223 Source<Profile>(profile_), |
| 224 Details<ExtensionHost>(this)); |
219 } else { | 225 } else { |
220 NOTREACHED(); | 226 NOTREACHED(); |
221 } | 227 } |
222 } | 228 } |
223 | 229 |
224 void ExtensionHost::UpdatePreferredSize(const gfx::Size& new_size) { | 230 void ExtensionHost::UpdatePreferredSize(const gfx::Size& new_size) { |
225 if (view_.get()) | 231 if (view_.get()) |
226 view_->UpdatePreferredSize(new_size); | 232 view_->UpdatePreferredSize(new_size); |
227 } | 233 } |
228 | 234 |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
565 window_id = ExtensionTabUtil::GetWindowId( | 571 window_id = ExtensionTabUtil::GetWindowId( |
566 const_cast<ExtensionHost* >(this)->GetBrowser()); | 572 const_cast<ExtensionHost* >(this)->GetBrowser()); |
567 } else if (extension_host_type_ == ViewType::EXTENSION_BACKGROUND_PAGE) { | 573 } else if (extension_host_type_ == ViewType::EXTENSION_BACKGROUND_PAGE) { |
568 // Background page is not attached to any browser window, so pass -1. | 574 // Background page is not attached to any browser window, so pass -1. |
569 window_id = -1; | 575 window_id = -1; |
570 } else { | 576 } else { |
571 NOTREACHED(); | 577 NOTREACHED(); |
572 } | 578 } |
573 return window_id; | 579 return window_id; |
574 } | 580 } |
OLD | NEW |