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_host.h" | 5 #include "extensions/browser/extension_host.h" |
6 | 6 |
7 #include <list> | 7 #include <list> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 browser_context_(site_instance->GetBrowserContext()), | 123 browser_context_(site_instance->GetBrowserContext()), |
124 render_view_host_(NULL), | 124 render_view_host_(NULL), |
125 did_stop_loading_(false), | 125 did_stop_loading_(false), |
126 document_element_available_(false), | 126 document_element_available_(false), |
127 initial_url_(url), | 127 initial_url_(url), |
128 extension_function_dispatcher_(browser_context_, this), | 128 extension_function_dispatcher_(browser_context_, this), |
129 extension_host_type_(host_type) { | 129 extension_host_type_(host_type) { |
130 // Not used for panels, see PanelHost. | 130 // Not used for panels, see PanelHost. |
131 DCHECK(host_type == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE || | 131 DCHECK(host_type == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE || |
132 host_type == VIEW_TYPE_EXTENSION_DIALOG || | 132 host_type == VIEW_TYPE_EXTENSION_DIALOG || |
133 host_type == VIEW_TYPE_EXTENSION_INFOBAR || | |
134 host_type == VIEW_TYPE_EXTENSION_POPUP); | 133 host_type == VIEW_TYPE_EXTENSION_POPUP); |
135 host_contents_.reset(WebContents::Create( | 134 host_contents_.reset(WebContents::Create( |
136 WebContents::CreateParams(browser_context_, site_instance))), | 135 WebContents::CreateParams(browser_context_, site_instance))), |
137 content::WebContentsObserver::Observe(host_contents_.get()); | 136 content::WebContentsObserver::Observe(host_contents_.get()); |
138 host_contents_->SetDelegate(this); | 137 host_contents_->SetDelegate(this); |
139 SetViewType(host_contents_.get(), host_type); | 138 SetViewType(host_contents_.get(), host_type); |
140 | 139 |
141 render_view_host_ = host_contents_->GetRenderViewHost(); | 140 render_view_host_ = host_contents_->GetRenderViewHost(); |
142 | 141 |
143 // Listen for when an extension is unloaded from the same profile, as it may | 142 // Listen for when an extension is unloaded from the same profile, as it may |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
339 DCHECK(extension_host_type_ == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE); | 338 DCHECK(extension_host_type_ == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE); |
340 // Nothing to do for background pages. | 339 // Nothing to do for background pages. |
341 } | 340 } |
342 | 341 |
343 void ExtensionHost::DocumentAvailableInMainFrame() { | 342 void ExtensionHost::DocumentAvailableInMainFrame() { |
344 // If the document has already been marked as available for this host, then | 343 // If the document has already been marked as available for this host, then |
345 // bail. No need for the redundant setup. http://crbug.com/31170 | 344 // bail. No need for the redundant setup. http://crbug.com/31170 |
346 if (document_element_available_) | 345 if (document_element_available_) |
347 return; | 346 return; |
348 document_element_available_ = true; | 347 document_element_available_ = true; |
349 OnDocumentAvailable(); | |
350 } | |
351 | 348 |
352 void ExtensionHost::OnDocumentAvailable() { | 349 if (extension_host_type_ == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE) { |
353 DCHECK(extension_host_type_ == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE); | 350 ExtensionSystem::Get(browser_context_) |
354 ExtensionSystem::Get(browser_context_) | 351 ->runtime_data() |
355 ->runtime_data() | 352 ->SetBackgroundPageReady(extension_->id(), true); |
356 ->SetBackgroundPageReady(extension_->id(), true); | 353 content::NotificationService::current()->Notify( |
357 content::NotificationService::current()->Notify( | 354 extensions::NOTIFICATION_EXTENSION_BACKGROUND_PAGE_READY, |
358 extensions::NOTIFICATION_EXTENSION_BACKGROUND_PAGE_READY, | 355 content::Source<const Extension>(extension_), |
359 content::Source<const Extension>(extension_), | 356 content::NotificationService::NoDetails()); |
360 content::NotificationService::NoDetails()); | 357 } |
361 } | 358 } |
362 | 359 |
363 void ExtensionHost::CloseContents(WebContents* contents) { | 360 void ExtensionHost::CloseContents(WebContents* contents) { |
364 Close(); | 361 Close(); |
365 } | 362 } |
366 | 363 |
367 bool ExtensionHost::OnMessageReceived(const IPC::Message& message) { | 364 bool ExtensionHost::OnMessageReceived(const IPC::Message& message) { |
368 bool handled = true; | 365 bool handled = true; |
369 IPC_BEGIN_MESSAGE_MAP(ExtensionHost, message) | 366 IPC_BEGIN_MESSAGE_MAP(ExtensionHost, message) |
370 IPC_MESSAGE_HANDLER(ExtensionHostMsg_Request, OnRequest) | 367 IPC_MESSAGE_HANDLER(ExtensionHostMsg_Request, OnRequest) |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
487 return delegate_->CheckMediaAccessPermission( | 484 return delegate_->CheckMediaAccessPermission( |
488 web_contents, security_origin, type, extension()); | 485 web_contents, security_origin, type, extension()); |
489 } | 486 } |
490 | 487 |
491 bool ExtensionHost::IsNeverVisible(content::WebContents* web_contents) { | 488 bool ExtensionHost::IsNeverVisible(content::WebContents* web_contents) { |
492 ViewType view_type = extensions::GetViewType(web_contents); | 489 ViewType view_type = extensions::GetViewType(web_contents); |
493 return view_type == extensions::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE; | 490 return view_type == extensions::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE; |
494 } | 491 } |
495 | 492 |
496 } // namespace extensions | 493 } // namespace extensions |
OLD | NEW |