Chromium Code Reviews| 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 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 124 extension_host_type_(host_type) { | 124 extension_host_type_(host_type) { |
| 125 render_view_host_ = new RenderViewHost(site_instance, this, MSG_ROUTING_NONE); | 125 render_view_host_ = new RenderViewHost(site_instance, this, MSG_ROUTING_NONE); |
| 126 render_view_host_->AllowBindings(BindingsPolicy::EXTENSION); | 126 render_view_host_->AllowBindings(BindingsPolicy::EXTENSION); |
| 127 if (enable_dom_automation_) | 127 if (enable_dom_automation_) |
| 128 render_view_host_->AllowBindings(BindingsPolicy::DOM_AUTOMATION); | 128 render_view_host_->AllowBindings(BindingsPolicy::DOM_AUTOMATION); |
| 129 | 129 |
| 130 // Listen for when the render process' handle is available so we can add it | 130 // Listen for when the render process' handle is available so we can add it |
| 131 // to the task manager then. | 131 // to the task manager then. |
| 132 registrar_.Add(this, NotificationType::RENDERER_PROCESS_CREATED, | 132 registrar_.Add(this, NotificationType::RENDERER_PROCESS_CREATED, |
| 133 Source<RenderProcessHost>(render_process_host())); | 133 Source<RenderProcessHost>(render_process_host())); |
| 134 registrar_.Add(this, NotificationType::RENDERER_PROCESS_CLOSED, | |
| 135 Source<RenderProcessHost>(render_process_host())); | |
| 134 } | 136 } |
| 135 | 137 |
| 136 ExtensionHost::~ExtensionHost() { | 138 ExtensionHost::~ExtensionHost() { |
| 137 NotificationService::current()->Notify( | 139 NotificationService::current()->Notify( |
| 138 NotificationType::EXTENSION_HOST_DESTROYED, | 140 NotificationType::EXTENSION_HOST_DESTROYED, |
| 139 Source<Profile>(profile_), | 141 Source<Profile>(profile_), |
| 140 Details<ExtensionHost>(this)); | 142 Details<ExtensionHost>(this)); |
| 141 ProcessCreationQueue::get()->Remove(this); | 143 ProcessCreationQueue::get()->Remove(this); |
| 142 render_view_host_->Shutdown(); // deletes render_view_host | 144 render_view_host_->Shutdown(); // deletes render_view_host |
| 143 } | 145 } |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 224 DCHECK(extension_->GetBackgroundPageReady()); | 226 DCHECK(extension_->GetBackgroundPageReady()); |
| 225 NavigateToURL(url_); | 227 NavigateToURL(url_); |
| 226 } else if (type == NotificationType::BROWSER_THEME_CHANGED) { | 228 } else if (type == NotificationType::BROWSER_THEME_CHANGED) { |
| 227 InsertThemeCSS(); | 229 InsertThemeCSS(); |
| 228 } else if (type == NotificationType::RENDERER_PROCESS_CREATED) { | 230 } else if (type == NotificationType::RENDERER_PROCESS_CREATED) { |
| 229 LOG(INFO) << "Sending EXTENSION_PROCESS_CREATED"; | 231 LOG(INFO) << "Sending EXTENSION_PROCESS_CREATED"; |
| 230 NotificationService::current()->Notify( | 232 NotificationService::current()->Notify( |
| 231 NotificationType::EXTENSION_PROCESS_CREATED, | 233 NotificationType::EXTENSION_PROCESS_CREATED, |
| 232 Source<Profile>(profile_), | 234 Source<Profile>(profile_), |
| 233 Details<ExtensionHost>(this)); | 235 Details<ExtensionHost>(this)); |
| 236 } else if (type == NotificationType::RENDERER_PROCESS_CLOSED) { | |
| 237 Details<RenderProcessHost::RendererClosedDetails> closed_details = | |
| 238 static_cast<Details<RenderProcessHost::RendererClosedDetails> >( | |
| 239 details); | |
| 240 if (!closed_details->did_crash) | |
| 241 return; | |
| 242 | |
|
Matt Perry
2009/12/11 01:54:52
nit: add DCHECK(closed_details->was_extension_rend
| |
| 243 LOG(INFO) << "Sending EXTENSION_PROCESS_CRASHED for " + extension_->name(); | |
| 244 NotificationService::current()->Notify( | |
| 245 NotificationType::EXTENSION_PROCESS_CRASHED, | |
| 246 Source<Profile>(profile_), | |
| 247 Details<ExtensionHost>(this)); | |
| 234 } else { | 248 } else { |
| 235 NOTREACHED(); | 249 NOTREACHED(); |
| 236 } | 250 } |
| 237 } | 251 } |
| 238 | 252 |
| 239 void ExtensionHost::UpdatePreferredSize(const gfx::Size& new_size) { | 253 void ExtensionHost::UpdatePreferredSize(const gfx::Size& new_size) { |
| 240 if (view_.get()) | 254 if (view_.get()) |
| 241 view_->UpdatePreferredSize(new_size); | 255 view_->UpdatePreferredSize(new_size); |
| 242 } | 256 } |
| 243 | 257 |
| 244 void ExtensionHost::RenderViewGone(RenderViewHost* render_view_host) { | |
| 245 LOG(INFO) << "Sending EXTENSION_PROCESS_CRASHED for " + extension_->name(); | |
| 246 DCHECK_EQ(render_view_host_, render_view_host); | |
| 247 NotificationService::current()->Notify( | |
| 248 NotificationType::EXTENSION_PROCESS_CRASHED, | |
| 249 Source<Profile>(profile_), | |
| 250 Details<ExtensionHost>(this)); | |
| 251 } | |
| 252 | |
| 253 void ExtensionHost::DidNavigate(RenderViewHost* render_view_host, | 258 void ExtensionHost::DidNavigate(RenderViewHost* render_view_host, |
| 254 const ViewHostMsg_FrameNavigate_Params& params) { | 259 const ViewHostMsg_FrameNavigate_Params& params) { |
| 255 // We only care when the outer frame changes. | 260 // We only care when the outer frame changes. |
| 256 switch (params.transition) { | 261 switch (params.transition) { |
| 257 case PageTransition::AUTO_SUBFRAME: | 262 case PageTransition::AUTO_SUBFRAME: |
| 258 case PageTransition::MANUAL_SUBFRAME: | 263 case PageTransition::MANUAL_SUBFRAME: |
| 259 return; | 264 return; |
| 260 } | 265 } |
| 261 | 266 |
| 262 if (!params.url.SchemeIs(chrome::kExtensionScheme)) { | 267 if (!params.url.SchemeIs(chrome::kExtensionScheme)) { |
| (...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 618 // Extensions hosted in ExternalTabContainer objects may not have | 623 // Extensions hosted in ExternalTabContainer objects may not have |
| 619 // an associated browser. | 624 // an associated browser. |
| 620 Browser* browser = GetBrowser(); | 625 Browser* browser = GetBrowser(); |
| 621 if (browser) | 626 if (browser) |
| 622 window_id = ExtensionTabUtil::GetWindowId(browser); | 627 window_id = ExtensionTabUtil::GetWindowId(browser); |
| 623 } else if (extension_host_type_ != ViewType::EXTENSION_BACKGROUND_PAGE) { | 628 } else if (extension_host_type_ != ViewType::EXTENSION_BACKGROUND_PAGE) { |
| 624 NOTREACHED(); | 629 NOTREACHED(); |
| 625 } | 630 } |
| 626 return window_id; | 631 return window_id; |
| 627 } | 632 } |
| OLD | NEW |