diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-20 17:03:07 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-20 17:03:07 +0000 |
commit | 6dd625e74fdc972f52ab08d39adc22555389e1e8 (patch) | |
tree | 77193b19d0da42f31d62b20558281998c3ee7e0e | |
parent | bd4fdd4f4d129207a7d699768990c50afa126b7d (diff) | |
download | chromium_src-6dd625e74fdc972f52ab08d39adc22555389e1e8.zip chromium_src-6dd625e74fdc972f52ab08d39adc22555389e1e8.tar.gz chromium_src-6dd625e74fdc972f52ab08d39adc22555389e1e8.tar.bz2 |
Make PepperWebPlugin not use RenderView.
BUG=304341
R=nasko@chromium.org, yoz@chromium.org, yzshen@chromium.org
Review URL: https://codereview.chromium.org/105553005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@242110 0039d316-1c4b-4281-b951-d872f2087c98
54 files changed, 412 insertions, 295 deletions
diff --git a/chrome/browser/extensions/api/page_capture/page_capture_api.cc b/chrome/browser/extensions/api/page_capture/page_capture_api.cc index 1dd31b7..9454b2a 100644 --- a/chrome/browser/extensions/api/page_capture/page_capture_api.cc +++ b/chrome/browser/extensions/api/page_capture/page_capture_api.cc @@ -66,7 +66,7 @@ bool PageCaptureSaveAsMHTMLFunction::RunImpl() { return true; } -bool PageCaptureSaveAsMHTMLFunction::OnMessageReceivedFromRenderView( +bool PageCaptureSaveAsMHTMLFunction::OnMessageReceived( const IPC::Message& message) { if (message.type() != ExtensionHostMsg_ResponseAck::ID) return false; @@ -181,8 +181,8 @@ void PageCaptureSaveAsMHTMLFunction::ReturnSuccess(int64 file_size) { SendResponse(true); // Note that we'll wait for a response ack message received in - // OnMessageReceivedFromRenderView before we call Release() (to prevent the - // blob file from being deleted). + // OnMessageReceived before we call Release() (to prevent the blob file from + // being deleted). } WebContents* PageCaptureSaveAsMHTMLFunction::GetWebContents() { diff --git a/chrome/browser/extensions/api/page_capture/page_capture_api.h b/chrome/browser/extensions/api/page_capture/page_capture_api.h index b7619c6..1bc5611 100644 --- a/chrome/browser/extensions/api/page_capture/page_capture_api.h +++ b/chrome/browser/extensions/api/page_capture/page_capture_api.h @@ -38,8 +38,7 @@ class PageCaptureSaveAsMHTMLFunction : public ChromeAsyncExtensionFunction { private: virtual ~PageCaptureSaveAsMHTMLFunction(); virtual bool RunImpl() OVERRIDE; - virtual bool OnMessageReceivedFromRenderView( - const IPC::Message& message) OVERRIDE; + virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; // Called on the file thread. void CreateTemporaryFile(); diff --git a/chrome/browser/extensions/extension_function_dispatcher.cc b/chrome/browser/extensions/extension_function_dispatcher.cc index 733d79a..3f54f5b 100644 --- a/chrome/browser/extensions/extension_function_dispatcher.cc +++ b/chrome/browser/extensions/extension_function_dispatcher.cc @@ -25,6 +25,7 @@ #include "chrome/common/extensions/extension_messages.h" #include "chrome/common/url_constants.h" #include "content/public/browser/browser_thread.h" +#include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_view_host.h" #include "content/public/browser/user_metrics.h" @@ -311,14 +312,24 @@ void ExtensionFunctionDispatcher::Dispatch( callback_wrapper = iter->second; } - DispatchWithCallback(params, render_view_host, - callback_wrapper->CreateCallback(params.request_id)); + DispatchWithCallbackInternal( + params, render_view_host, NULL, + callback_wrapper->CreateCallback(params.request_id)); } void ExtensionFunctionDispatcher::DispatchWithCallback( const ExtensionHostMsg_Request_Params& params, + content::RenderFrameHost* render_frame_host, + const ExtensionFunction::ResponseCallback& callback) { + DispatchWithCallbackInternal(params, NULL, render_frame_host, callback); +} + +void ExtensionFunctionDispatcher::DispatchWithCallbackInternal( + const ExtensionHostMsg_Request_Params& params, RenderViewHost* render_view_host, + content::RenderFrameHost* render_frame_host, const ExtensionFunction::ResponseCallback& callback) { + DCHECK(render_view_host || render_frame_host); // TODO(yzshen): There is some shared logic between this method and // DispatchOnIOThread(). It is nice to deduplicate. ExtensionSystem* extension_system = @@ -333,10 +344,12 @@ void ExtensionFunctionDispatcher::DispatchWithCallback( if (!extension) extension = service->extensions()->GetHostedAppByURL(params.source_url); + int process_id = render_view_host ? render_view_host->GetProcess()->GetID() : + render_frame_host->GetProcess()->GetID(); scoped_refptr<ExtensionFunction> function( CreateExtensionFunction(params, extension, - render_view_host->GetProcess()->GetID(), + process_id, *process_map, extensions::ExtensionAPI::GetSharedInstance(), browser_context_, @@ -352,7 +365,11 @@ void ExtensionFunctionDispatcher::DispatchWithCallback( NOTREACHED(); return; } - function_ui->SetRenderViewHost(render_view_host); + if (render_view_host) { + function_ui->SetRenderViewHost(render_view_host); + } else { + function_ui->SetRenderFrameHost(render_frame_host); + } function_ui->set_dispatcher(AsWeakPtr()); function_ui->set_context(browser_context_); function->set_include_incognito(extension_util::CanCrossIncognito(extension, diff --git a/chrome/browser/extensions/extension_function_dispatcher.h b/chrome/browser/extensions/extension_function_dispatcher.h index 9e80fca..9261a89 100644 --- a/chrome/browser/extensions/extension_function_dispatcher.h +++ b/chrome/browser/extensions/extension_function_dispatcher.h @@ -19,6 +19,7 @@ struct ExtensionHostMsg_Request_Params; namespace content { class BrowserContext; +class RenderFrameHost; class RenderViewHost; class WebContents; } @@ -106,12 +107,14 @@ class ExtensionFunctionDispatcher // Message handlers. // The response is sent to the corresponding render view in an // ExtensionMsg_Response message. + // TODO (jam): convert all callers to use RenderFrameHost. void Dispatch(const ExtensionHostMsg_Request_Params& params, content::RenderViewHost* render_view_host); - // |callback| is called when the function execution completes. + // Dispatch an extension function and calls |callback| when the execution + // completes. void DispatchWithCallback( const ExtensionHostMsg_Request_Params& params, - content::RenderViewHost* render_view_host, + content::RenderFrameHost* render_frame_host, const ExtensionFunction::ResponseCallback& callback); // Called when an ExtensionFunction is done executing, after it has sent @@ -156,6 +159,12 @@ class ExtensionFunctionDispatcher static void SendAccessDenied( const ExtensionFunction::ResponseCallback& callback); + void DispatchWithCallbackInternal( + const ExtensionHostMsg_Request_Params& params, + content::RenderViewHost* render_view_host, + content::RenderFrameHost* render_frame_host, + const ExtensionFunction::ResponseCallback& callback); + content::BrowserContext* browser_context_; Delegate* delegate_; diff --git a/chrome/browser/nacl_host/nacl_browser_delegate_impl.cc b/chrome/browser/nacl_host/nacl_browser_delegate_impl.cc index 96e0c1f..9e32c6c 100644 --- a/chrome/browser/nacl_host/nacl_browser_delegate_impl.cc +++ b/chrome/browser/nacl_host/nacl_browser_delegate_impl.cc @@ -19,7 +19,7 @@ #include "chrome/common/chrome_version_info.h" #include "chrome/common/logging_chrome.h" #include "content/public/browser/browser_thread.h" -#include "content/public/browser/render_view_host.h" +#include "content/public/browser/render_frame_host.h" #include "content/public/browser/site_instance.h" #include "extensions/browser/info_map.h" #include "extensions/browser/process_manager.h" @@ -58,12 +58,13 @@ void OnKeepaliveOnUIThread( if (instance_data.size() < 1) return; - content::RenderViewHost* render_view_host = content::RenderViewHost::FromID( - instance_data[0].render_process_id, instance_data[0].render_view_id); - if (!render_view_host) + content::RenderFrameHost* render_frame_host = + content::RenderFrameHost::FromID( + instance_data[0].render_process_id, instance_data[0].render_frame_id); + if (!render_frame_host) return; - content::SiteInstance* site_instance = render_view_host->GetSiteInstance(); + content::SiteInstance* site_instance = render_frame_host->GetSiteInstance(); if (!site_instance) return; diff --git a/chrome/browser/renderer_host/pepper/pepper_broker_message_filter.cc b/chrome/browser/renderer_host/pepper/pepper_broker_message_filter.cc index 60ffa5c8..aecc2a2 100644 --- a/chrome/browser/renderer_host/pepper/pepper_broker_message_filter.cc +++ b/chrome/browser/renderer_host/pepper/pepper_broker_message_filter.cc @@ -29,7 +29,7 @@ PepperBrokerMessageFilter::PepperBrokerMessageFilter( BrowserPpapiHost* host) : document_url_(host->GetDocumentURLForInstance(instance)) { int unused; - host->GetRenderViewIDsForInstance(instance, &render_process_id_, &unused); + host->GetRenderFrameIDsForInstance(instance, &render_process_id_, &unused); } PepperBrokerMessageFilter::~PepperBrokerMessageFilter() { diff --git a/chrome/browser/renderer_host/pepper/pepper_extensions_common_message_filter.cc b/chrome/browser/renderer_host/pepper/pepper_extensions_common_message_filter.cc index 1ce27bf..351b9262 100644 --- a/chrome/browser/renderer_host/pepper/pepper_extensions_common_message_filter.cc +++ b/chrome/browser/renderer_host/pepper/pepper_extensions_common_message_filter.cc @@ -14,7 +14,7 @@ #include "chrome/common/extensions/extension_messages.h" #include "content/public/browser/browser_ppapi_host.h" #include "content/public/browser/browser_thread.h" -#include "content/public/browser/render_view_host.h" +#include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" #include "extensions/common/constants.h" @@ -33,10 +33,10 @@ class PepperExtensionsCommonMessageFilter::DispatcherOwner public: DispatcherOwner(PepperExtensionsCommonMessageFilter* message_filter, Profile* profile, - content::RenderViewHost* view_host, + content::RenderFrameHost* frame_host, content::WebContents* web_contents) : content::WebContentsObserver(web_contents), - render_view_host_(view_host), + render_frame_host_(frame_host), message_filter_(message_filter), dispatcher_(profile, this) { } @@ -46,9 +46,9 @@ class PepperExtensionsCommonMessageFilter::DispatcherOwner } // content::WebContentsObserver implementation. - virtual void RenderViewDeleted( - content::RenderViewHost* render_view_host) OVERRIDE { - if (render_view_host == render_view_host_) + virtual void RenderFrameDeleted( + content::RenderFrameHost* render_frame_host) OVERRIDE { + if (render_frame_host == render_frame_host_) delete this; } @@ -65,10 +65,10 @@ class PepperExtensionsCommonMessageFilter::DispatcherOwner } ExtensionFunctionDispatcher* dispatcher() { return &dispatcher_; } - content::RenderViewHost* render_view_host() { return render_view_host_; } + content::RenderFrameHost* render_frame_host() { return render_frame_host_; } private: - content::RenderViewHost* render_view_host_; + content::RenderFrameHost* render_frame_host_; scoped_refptr<PepperExtensionsCommonMessageFilter> message_filter_; ExtensionFunctionDispatcher dispatcher_; @@ -82,9 +82,9 @@ PepperExtensionsCommonMessageFilter::Create(content::BrowserPpapiHost* host, DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); int render_process_id = 0; - int render_view_id = 0; - if (!host->GetRenderViewIDsForInstance(instance, &render_process_id, - &render_view_id)) { + int render_frame_id = 0; + if (!host->GetRenderFrameIDsForInstance(instance, &render_process_id, + &render_frame_id)) { return NULL; } @@ -92,18 +92,18 @@ PepperExtensionsCommonMessageFilter::Create(content::BrowserPpapiHost* host, GURL document_url = host->GetDocumentURLForInstance(instance); return new PepperExtensionsCommonMessageFilter(render_process_id, - render_view_id, + render_frame_id, profile_directory, document_url); } PepperExtensionsCommonMessageFilter::PepperExtensionsCommonMessageFilter( int render_process_id, - int render_view_id, + int render_frame_id, const base::FilePath& profile_directory, const GURL& document_url) : render_process_id_(render_process_id), - render_view_id_(render_view_id), + render_frame_id_(render_frame_id), profile_directory_(profile_directory), document_url_(document_url), dispatcher_owner_(NULL), @@ -159,12 +159,12 @@ void PepperExtensionsCommonMessageFilter::EnsureDispatcherOwnerInitialized() { dispatcher_owner_initialized_ = true; DCHECK(!dispatcher_owner_); - content::RenderViewHost* view_host = content::RenderViewHost::FromID( - render_process_id_, render_view_id_); - if (!view_host) + content::RenderFrameHost* frame_host = content::RenderFrameHost::FromID( + render_process_id_, render_frame_id_); + if (!frame_host) return; content::WebContents* web_contents = - content::WebContents::FromRenderViewHost(view_host); + content::WebContents::FromRenderFrameHost(frame_host); if (!document_url_.SchemeIs(extensions::kExtensionScheme)) return; @@ -176,7 +176,7 @@ void PepperExtensionsCommonMessageFilter::EnsureDispatcherOwnerInitialized() { // It will be automatically destroyed when |view_host| goes away. dispatcher_owner_ = new DispatcherOwner( - this, profile, view_host, web_contents); + this, profile, frame_host, web_contents); } void PepperExtensionsCommonMessageFilter::DetachDispatcherOwner() { @@ -249,7 +249,7 @@ bool PepperExtensionsCommonMessageFilter::HandleRequest( } dispatcher_owner_->dispatcher()->DispatchWithCallback( - params, dispatcher_owner_->render_view_host(), + params, dispatcher_owner_->render_frame_host(), base::Bind( &PepperExtensionsCommonMessageFilter::OnExtensionFunctionCompleted, this, diff --git a/chrome/browser/renderer_host/pepper/pepper_extensions_common_message_filter.h b/chrome/browser/renderer_host/pepper/pepper_extensions_common_message_filter.h index 87a11a3..5776719 100644 --- a/chrome/browser/renderer_host/pepper/pepper_extensions_common_message_filter.h +++ b/chrome/browser/renderer_host/pepper/pepper_extensions_common_message_filter.h @@ -44,7 +44,7 @@ class PepperExtensionsCommonMessageFilter protected: PepperExtensionsCommonMessageFilter(int render_process_id, - int render_view_id, + int render_frame_id, const base::FilePath& profile_directory, const GURL& document_url); virtual ~PepperExtensionsCommonMessageFilter(); @@ -97,7 +97,7 @@ class PepperExtensionsCommonMessageFilter // All the members are initialized on the IO thread when the object is // constructed, and accessed only on the UI thread afterwards. int render_process_id_; - int render_view_id_; + int render_frame_id_; base::FilePath profile_directory_; GURL document_url_; diff --git a/chrome/browser/renderer_host/pepper/pepper_flash_browser_host.cc b/chrome/browser/renderer_host/pepper/pepper_flash_browser_host.cc index 85849cf..b408d0f 100644 --- a/chrome/browser/renderer_host/pepper/pepper_flash_browser_host.cc +++ b/chrome/browser/renderer_host/pepper/pepper_flash_browser_host.cc @@ -57,7 +57,7 @@ PepperFlashBrowserHost::PepperFlashBrowserHost( host_(host), weak_factory_(this) { int unused; - host->GetRenderViewIDsForInstance(instance, &render_process_id_, &unused); + host->GetRenderFrameIDsForInstance(instance, &render_process_id_, &unused); } PepperFlashBrowserHost::~PepperFlashBrowserHost() { diff --git a/chrome/browser/renderer_host/pepper/pepper_flash_drm_host.cc b/chrome/browser/renderer_host/pepper/pepper_flash_drm_host.cc index 99d76a1..db47ce3 100644 --- a/chrome/browser/renderer_host/pepper/pepper_flash_drm_host.cc +++ b/chrome/browser/renderer_host/pepper/pepper_flash_drm_host.cc @@ -15,8 +15,7 @@ #include "content/public/browser/browser_ppapi_host.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/child_process_security_policy.h" -#include "content/public/browser/render_widget_host.h" -#include "content/public/browser/render_widget_host_view.h" +#include "content/public/browser/render_frame_host.h" #include "content/public/common/pepper_plugin_info.h" #include "ppapi/c/pp_errors.h" #include "ppapi/host/dispatch_host_message.h" @@ -46,9 +45,9 @@ const base::FilePath::CharType kVoucherFilename[] = // right monitor. class MonitorFinder : public base::RefCountedThreadSafe<MonitorFinder> { public: - MonitorFinder(int process_id, int render_id) + MonitorFinder(int process_id, int render_frame_id) : process_id_(process_id), - render_id_(render_id), + render_frame_id_(render_frame_id), monitor_(NULL), request_sent_(0) { } @@ -72,14 +71,11 @@ class MonitorFinder : public base::RefCountedThreadSafe<MonitorFinder> { void FetchMonitorFromWidget() { InterlockedExchange(&request_sent_, 0); - content::RenderWidgetHost* rwh = - content::RenderWidgetHost::FromID(process_id_, render_id_); - if (!rwh) + content::RenderFrameHost* rfh = + content::RenderFrameHost::FromID(process_id_, render_frame_id_); + if (!rfh) return; - content::RenderWidgetHostView* view = rwh->GetView(); - if (!view) - return; - gfx::NativeView native_view = view->GetNativeView(); + gfx::NativeView native_view = rfh->GetNativeView(); #if defined(USE_AURA) aura::WindowEventDispatcher* dispatcher = native_view->GetDispatcher(); if (!dispatcher) @@ -94,7 +90,7 @@ class MonitorFinder : public base::RefCountedThreadSafe<MonitorFinder> { } const int process_id_; - const int render_id_; + const int render_frame_id_; volatile HMONITOR monitor_; volatile long request_sent_; }; @@ -118,10 +114,10 @@ PepperFlashDRMHost::PepperFlashDRMHost(BrowserPpapiHost* host, weak_factory_(this){ // Grant permissions to read the flash voucher file. int render_process_id; - int render_view_id; + int render_frame_id; bool success = - host->GetRenderViewIDsForInstance( - instance, &render_process_id, &render_view_id); + host->GetRenderFrameIDsForInstance( + instance, &render_process_id, &render_frame_id); base::FilePath plugin_dir = host->GetPluginPath().DirName(); DCHECK(!plugin_dir.empty() && success); base::FilePath voucher_file = plugin_dir.Append( @@ -130,7 +126,7 @@ PepperFlashDRMHost::PepperFlashDRMHost(BrowserPpapiHost* host, render_process_id, voucher_file); fetcher_ = new DeviceIDFetcher(render_process_id); - monitor_finder_ = new MonitorFinder(render_process_id, render_view_id); + monitor_finder_ = new MonitorFinder(render_process_id, render_frame_id); monitor_finder_->GetMonitor(); } diff --git a/chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.cc b/chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.cc index 415ee0b..ca1555e 100644 --- a/chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.cc +++ b/chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.cc @@ -42,10 +42,10 @@ PepperIsolatedFileSystemMessageFilter* PepperIsolatedFileSystemMessageFilter::Create( PP_Instance instance, content::BrowserPpapiHost* host) { int render_process_id; - int unused_render_view_id; - if (!host->GetRenderViewIDsForInstance(instance, - &render_process_id, - &unused_render_view_id)) { + int unused_render_frame_id; + if (!host->GetRenderFrameIDsForInstance(instance, + &render_process_id, + &unused_render_frame_id)) { return NULL; } return new PepperIsolatedFileSystemMessageFilter( diff --git a/chrome/browser/renderer_host/pepper/pepper_output_protection_message_filter.cc b/chrome/browser/renderer_host/pepper/pepper_output_protection_message_filter.cc index eaa9340..5ffd4b2 100644 --- a/chrome/browser/renderer_host/pepper/pepper_output_protection_message_filter.cc +++ b/chrome/browser/renderer_host/pepper/pepper_output_protection_message_filter.cc @@ -8,8 +8,7 @@ #include "chrome/browser/media/media_capture_devices_dispatcher.h" #include "content/public/browser/browser_ppapi_host.h" #include "content/public/browser/browser_thread.h" -#include "content/public/browser/render_view_host.h" -#include "content/public/browser/render_widget_host_view.h" +#include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" #include "ppapi/c/pp_errors.h" #include "ppapi/c/private/ppb_output_protection_private.h" @@ -72,12 +71,9 @@ COMPILE_ASSERT( static_cast<int>(chromeos::OUTPUT_PROTECTION_METHOD_HDCP), PP_OUTPUT_PROTECTION_METHOD_PRIVATE_HDCP); -bool GetCurrentDisplayId(content::RenderViewHost* rvh, int64* display_id) { +bool GetCurrentDisplayId(content::RenderFrameHost* rfh, int64* display_id) { DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); - content::RenderWidgetHostView* view = rvh->GetView(); - if (!view) - return false; - gfx::NativeView native_view = view->GetNativeView(); + gfx::NativeView native_view = rfh->GetNativeView(); gfx::Screen* screen = gfx::Screen::GetScreenFor(native_view); if (!screen) return false; @@ -95,7 +91,7 @@ bool GetCurrentDisplayId(content::RenderViewHost* rvh, int64* display_id) { class PepperOutputProtectionMessageFilter::Delegate : public aura::WindowObserver { public: - Delegate(int render_process_id, int render_view_id); + Delegate(int render_process_id, int render_frame_id); virtual ~Delegate(); // aura::WindowObserver overrides. @@ -110,7 +106,7 @@ class PepperOutputProtectionMessageFilter::Delegate // Used to lookup the WebContents associated with this PP_Instance. int render_process_id_; - int render_view_id_; + int render_frame_id_; chromeos::OutputConfigurator::OutputProtectionClientId client_id_; // The display id which the renderer currently uses. @@ -121,9 +117,9 @@ class PepperOutputProtectionMessageFilter::Delegate }; PepperOutputProtectionMessageFilter::Delegate::Delegate(int render_process_id, - int render_view_id) + int render_frame_id) : render_process_id_(render_process_id), - render_view_id_(render_view_id), + render_frame_id_(render_frame_id), client_id_(chromeos::OutputConfigurator::kInvalidClientId), display_id_(0) { DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); @@ -137,14 +133,11 @@ PepperOutputProtectionMessageFilter::Delegate::~Delegate() { ash::Shell::GetInstance()->output_configurator(); configurator->UnregisterOutputProtectionClient(client_id_); - content::RenderViewHost* rvh = - content::RenderViewHost::FromID(render_process_id_, render_view_id_); - if (rvh) { - content::RenderWidgetHostView* view = rvh->GetView(); - if (view) { - gfx::NativeView native_view = view->GetNativeView(); - native_view->RemoveObserver(this); - } + content::RenderFrameHost* rfh = + content::RenderFrameHost::FromID(render_process_id_, render_frame_id_); + if (rfh) { + gfx::NativeView native_view = rfh->GetNativeView(); + native_view->RemoveObserver(this); } } @@ -152,15 +145,12 @@ chromeos::OutputConfigurator::OutputProtectionClientId PepperOutputProtectionMessageFilter::Delegate::GetClientId() { DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); if (client_id_ == chromeos::OutputConfigurator::kInvalidClientId) { - content::RenderViewHost* rvh = - content::RenderViewHost::FromID(render_process_id_, render_view_id_); - if (!GetCurrentDisplayId(rvh, &display_id_)) - return chromeos::OutputConfigurator::kInvalidClientId; - content::RenderWidgetHostView* view = rvh->GetView(); - if (!view) + content::RenderFrameHost* rfh = + content::RenderFrameHost::FromID(render_process_id_, render_frame_id_); + if (!GetCurrentDisplayId(rfh, &display_id_)) return chromeos::OutputConfigurator::kInvalidClientId; - gfx::NativeView native_view = view->GetNativeView(); - if (!view) + gfx::NativeView native_view = rfh->GetNativeView(); + if (!native_view) return chromeos::OutputConfigurator::kInvalidClientId; native_view->AddObserver(this); @@ -175,10 +165,10 @@ int32_t PepperOutputProtectionMessageFilter::Delegate::OnQueryStatus( uint32_t* link_mask, uint32_t* protection_mask) { DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); - content::RenderViewHost* rvh = - content::RenderViewHost::FromID(render_process_id_, render_view_id_); - if (!rvh) { - LOG(WARNING) << "RenderViewHost is not alive."; + content::RenderFrameHost* rfh = + content::RenderFrameHost::FromID(render_process_id_, render_frame_id_); + if (!rfh) { + LOG(WARNING) << "RenderFrameHost is not alive."; return PP_ERROR_FAILED; } @@ -191,7 +181,8 @@ int32_t PepperOutputProtectionMessageFilter::Delegate::OnQueryStatus( if (result) { const bool capture_detected = // Check for tab capture on the current tab. - content::WebContents::FromRenderViewHost(rvh)->GetCapturerCount() > 0 || + content::WebContents::FromRenderFrameHost(rfh)-> + GetCapturerCount() > 0 || // Check for desktop capture. MediaCaptureDevicesDispatcher::GetInstance() ->IsDesktopCaptureInProgress(); @@ -216,15 +207,15 @@ int32_t PepperOutputProtectionMessageFilter::Delegate::OnEnableProtection( void PepperOutputProtectionMessageFilter::Delegate::OnWindowHierarchyChanged( const aura::WindowObserver::HierarchyChangeParams& params) { - content::RenderViewHost* rvh = - content::RenderViewHost::FromID(render_process_id_, render_view_id_); - if (!rvh) { - LOG(WARNING) << "RenderViewHost is not alive."; + content::RenderFrameHost* rfh = + content::RenderFrameHost::FromID(render_process_id_, render_frame_id_); + if (!rfh) { + LOG(WARNING) << "RenderFrameHost is not alive."; return; } int64 new_display_id = 0; - if (!GetCurrentDisplayId(rvh, &new_display_id)) + if (!GetCurrentDisplayId(rfh, &new_display_id)) return; if (display_id_ == new_display_id) return; @@ -250,10 +241,10 @@ PepperOutputProtectionMessageFilter::PepperOutputProtectionMessageFilter( #if defined(OS_CHROMEOS) DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); int render_process_id = 0; - int render_view_id = 0; - host->GetRenderViewIDsForInstance( - instance, &render_process_id, &render_view_id); - delegate_ = new Delegate(render_process_id, render_view_id); + int render_frame_id = 0; + host->GetRenderFrameIDsForInstance( + instance, &render_process_id, &render_frame_id); + delegate_ = new Delegate(render_process_id, render_frame_id); #else NOTIMPLEMENTED(); #endif diff --git a/chrome/browser/renderer_host/pepper/pepper_platform_verification_message_filter.cc b/chrome/browser/renderer_host/pepper/pepper_platform_verification_message_filter.cc index 29ae36c..1cd07f7 100644 --- a/chrome/browser/renderer_host/pepper/pepper_platform_verification_message_filter.cc +++ b/chrome/browser/renderer_host/pepper/pepper_platform_verification_message_filter.cc @@ -7,7 +7,7 @@ #include "base/bind_helpers.h" #include "content/public/browser/browser_ppapi_host.h" #include "content/public/browser/browser_thread.h" -#include "content/public/browser/render_view_host.h" +#include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" #include "ppapi/c/pp_errors.h" #include "ppapi/host/dispatch_host_message.h" @@ -22,9 +22,9 @@ namespace chrome { PepperPlatformVerificationMessageFilter:: PepperPlatformVerificationMessageFilter(content::BrowserPpapiHost* host, PP_Instance instance) - : render_process_id_(0), render_view_id_(0) { - host->GetRenderViewIDsForInstance( - instance, &render_process_id_, &render_view_id_); + : render_process_id_(0), render_frame_id_(0) { + host->GetRenderFrameIDsForInstance( + instance, &render_process_id_, &render_frame_id_); } PepperPlatformVerificationMessageFilter:: @@ -57,10 +57,10 @@ int32_t PepperPlatformVerificationMessageFilter::OnChallengePlatform( const std::vector<uint8_t>& challenge) { DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); - // Ensure the RenderViewHost is still alive. - content::RenderViewHost* rvh = - content::RenderViewHost::FromID(render_process_id_, render_view_id_); - if (!rvh) { + // Ensure the RenderFrameHost is still alive. + content::RenderFrameHost* rfh = + content::RenderFrameHost::FromID(render_process_id_, render_frame_id_); + if (!rfh) { ppapi::host::ReplyMessageContext reply_context = context->MakeReplyMessageContext(); reply_context.params.set_result(PP_ERROR_FAILED); @@ -75,7 +75,7 @@ int32_t PepperPlatformVerificationMessageFilter::OnChallengePlatform( pv_ = new PlatformVerificationFlow(); pv_->ChallengePlatformKey( - content::WebContents::FromRenderViewHost(rvh), + content::WebContents::FromRenderFrameHost(rfh), service_id, std::string(challenge.begin(), challenge.end()), base::Bind( diff --git a/chrome/browser/renderer_host/pepper/pepper_platform_verification_message_filter.h b/chrome/browser/renderer_host/pepper/pepper_platform_verification_message_filter.h index 90b3eff..5ca7035 100644 --- a/chrome/browser/renderer_host/pepper/pepper_platform_verification_message_filter.h +++ b/chrome/browser/renderer_host/pepper/pepper_platform_verification_message_filter.h @@ -52,7 +52,7 @@ class PepperPlatformVerificationMessageFilter // Used to lookup the WebContents associated with this PP_Instance. int render_process_id_; - int render_view_id_; + int render_frame_id_; // Must only be accessed on the UI thread. scoped_refptr<chromeos::attestation::PlatformVerificationFlow> pv_; diff --git a/chrome/browser/renderer_host/pepper/pepper_talk_host.cc b/chrome/browser/renderer_host/pepper/pepper_talk_host.cc index 5fe65ad..ac24052 100644 --- a/chrome/browser/renderer_host/pepper/pepper_talk_host.cc +++ b/chrome/browser/renderer_host/pepper/pepper_talk_host.cc @@ -7,7 +7,7 @@ #include "base/bind.h" #include "content/public/browser/browser_ppapi_host.h" #include "content/public/browser/browser_thread.h" -#include "content/public/browser/render_view_host.h" +#include "content/public/browser/render_frame_host.h" #include "grit/generated_resources.h" #include "ppapi/c/pp_errors.h" #include "ppapi/host/dispatch_host_message.h" @@ -31,15 +31,15 @@ namespace { ppapi::host::ReplyMessageContext GetPermissionOnUIThread( PP_TalkPermission permission, int render_process_id, - int render_view_id, + int render_frame_id, ppapi::host::ReplyMessageContext reply) { DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); reply.params.set_result(0); - content::RenderViewHost* render_view_host = - content::RenderViewHost::FromID(render_process_id, render_view_id); - if (!render_view_host) - return reply; // RVH destroyed while task was pending. + content::RenderFrameHost* render_frame_host = + content::RenderFrameHost::FromID(render_process_id, render_frame_id); + if (!render_frame_host) + return reply; // RFH destroyed while task was pending. #if defined(USE_ASH) base::string16 title; @@ -91,14 +91,14 @@ void OnTerminateRemotingEventOnUIThread(const base::Closure& stop_callback) { ppapi::host::ReplyMessageContext StartRemotingOnUIThread( const base::Closure& stop_callback, int render_process_id, - int render_view_id, + int render_frame_id, ppapi::host::ReplyMessageContext reply) { DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); - content::RenderViewHost* render_view_host = - content::RenderViewHost::FromID(render_process_id, render_view_id); - if (!render_view_host) { + content::RenderFrameHost* render_frame_host = + content::RenderFrameHost::FromID(render_process_id, render_frame_id); + if (!render_frame_host) { reply.params.set_result(PP_ERROR_FAILED); - return reply; // RVH destroyed while task was pending. + return reply; // RFH destroyed while task was pending. } #if defined(USE_ASH) && defined(OS_CHROMEOS) @@ -175,14 +175,14 @@ int32_t PepperTalkHost::OnRequestPermission( return PP_ERROR_BADARGUMENT; int render_process_id = 0; - int render_view_id = 0; - browser_ppapi_host_->GetRenderViewIDsForInstance( - pp_instance(), &render_process_id, &render_view_id); + int render_frame_id = 0; + browser_ppapi_host_->GetRenderFrameIDsForInstance( + pp_instance(), &render_process_id, &render_frame_id); content::BrowserThread::PostTaskAndReplyWithResult( content::BrowserThread::UI, FROM_HERE, base::Bind(&GetPermissionOnUIThread, permission, render_process_id, - render_view_id, context->MakeReplyMessageContext()), + render_frame_id, context->MakeReplyMessageContext()), base::Bind(&PepperTalkHost::OnRequestPermissionCompleted, weak_factory_.GetWeakPtr())); return PP_OK_COMPLETIONPENDING; @@ -191,9 +191,9 @@ int32_t PepperTalkHost::OnRequestPermission( int32_t PepperTalkHost::OnStartRemoting( ppapi::host::HostMessageContext* context) { int render_process_id = 0; - int render_view_id = 0; - browser_ppapi_host_->GetRenderViewIDsForInstance( - pp_instance(), &render_process_id, &render_view_id); + int render_frame_id = 0; + browser_ppapi_host_->GetRenderFrameIDsForInstance( + pp_instance(), &render_process_id, &render_frame_id); base::Closure remoting_stop_callback = base::Bind( &PepperTalkHost::OnRemotingStopEvent, @@ -202,7 +202,7 @@ int32_t PepperTalkHost::OnStartRemoting( content::BrowserThread::PostTaskAndReplyWithResult( content::BrowserThread::UI, FROM_HERE, base::Bind(&StartRemotingOnUIThread, remoting_stop_callback, - render_process_id, render_view_id, + render_process_id, render_frame_id, context->MakeReplyMessageContext()), base::Bind(&PepperTalkHost::OnStartRemotingCompleted, weak_factory_.GetWeakPtr())); diff --git a/chrome/chrome_renderer.gypi b/chrome/chrome_renderer.gypi index ff7467a..ef0bc09 100644 --- a/chrome/chrome_renderer.gypi +++ b/chrome/chrome_renderer.gypi @@ -88,6 +88,8 @@ 'renderer/extensions/dom_activity_logger.h', 'renderer/extensions/event_bindings.cc', 'renderer/extensions/event_bindings.h', + 'renderer/extensions/extension_frame_helper.cc', + 'renderer/extensions/extension_frame_helper.h', 'renderer/extensions/extension_groups.h', 'renderer/extensions/extension_helper.cc', 'renderer/extensions/extension_helper.h', diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc index b49148c..2052bc6 100644 --- a/chrome/renderer/chrome_content_renderer_client.cc +++ b/chrome/renderer/chrome_content_renderer_client.cc @@ -34,6 +34,7 @@ #include "chrome/renderer/extensions/chrome_v8_context.h" #include "chrome/renderer/extensions/chrome_v8_extension.h" #include "chrome/renderer/extensions/dispatcher.h" +#include "chrome/renderer/extensions/extension_frame_helper.h" #include "chrome/renderer/extensions/extension_helper.h" #include "chrome/renderer/extensions/renderer_permissions_policy_delegate.h" #include "chrome/renderer/extensions/resource_request_policy.h" @@ -358,6 +359,8 @@ void ChromeContentRendererClient::RenderFrameCreated( chrome_observer_->content_setting_rules()); } + new extensions::ExtensionFrameHelper(render_frame); + #if defined(ENABLE_PLUGINS) new PepperHelper(render_frame); #endif diff --git a/chrome/renderer/extensions/extension_frame_helper.cc b/chrome/renderer/extensions/extension_frame_helper.cc new file mode 100644 index 0000000..9db9f1b --- /dev/null +++ b/chrome/renderer/extensions/extension_frame_helper.cc @@ -0,0 +1,39 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/renderer/extensions/extension_frame_helper.h" + +#include "chrome/common/extensions/extension_messages.h" +#include "chrome/renderer/extensions/console.h" +#include "content/public/renderer/render_frame.h" +#include "third_party/WebKit/public/web/WebConsoleMessage.h" +#include "third_party/WebKit/public/web/WebFrame.h" + +namespace extensions { + +ExtensionFrameHelper::ExtensionFrameHelper(content::RenderFrame* render_frame) + : content::RenderFrameObserver(render_frame), + content::RenderFrameObserverTracker<ExtensionFrameHelper>(render_frame) { +} + +ExtensionFrameHelper::~ExtensionFrameHelper() { +} + +bool ExtensionFrameHelper::OnMessageReceived(const IPC::Message& message) { + bool handled = true; + IPC_BEGIN_MESSAGE_MAP(ExtensionFrameHelper, message) + IPC_MESSAGE_HANDLER(ExtensionMsg_AddMessageToConsole, + OnAddMessageToConsole) + IPC_MESSAGE_UNHANDLED(handled = false) + IPC_END_MESSAGE_MAP() + return handled; +} + +void ExtensionFrameHelper::OnAddMessageToConsole( + content::ConsoleMessageLevel level, + const std::string& message) { + console::AddMessage(render_frame()->GetRenderView(), level, message); +} + +} // namespace extensions diff --git a/chrome/renderer/extensions/extension_frame_helper.h b/chrome/renderer/extensions/extension_frame_helper.h new file mode 100644 index 0000000..b9ee44c --- /dev/null +++ b/chrome/renderer/extensions/extension_frame_helper.h @@ -0,0 +1,35 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_RENDERER_EXTENSIONS_EXTENSION_FRAME_HELPER_H_ +#define CHROME_RENDERER_EXTENSIONS_EXTENSION_FRAME_HELPER_H_ + +#include "content/public/common/console_message_level.h" +#include "content/public/renderer/render_frame_observer.h" +#include "content/public/renderer/render_frame_observer_tracker.h" + +namespace extensions { + +// RenderFrame-level plumbing for extension features. +class ExtensionFrameHelper + : public content::RenderFrameObserver, + public content::RenderFrameObserverTracker<ExtensionFrameHelper> { + public: + explicit ExtensionFrameHelper(content::RenderFrame* render_frame); + virtual ~ExtensionFrameHelper(); + + private: + // RenderFrameObserver implementation. + virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; + + // IPC handlers. + void OnAddMessageToConsole(content::ConsoleMessageLevel level, + const std::string& message); + + DISALLOW_COPY_AND_ASSIGN(ExtensionFrameHelper); +}; + +} // namespace extensions + +#endif // CHROME_RENDERER_EXTENSIONS_EXTENSION_FRAME_HELPER_H_ diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc index 135bfd6..e021d19 100644 --- a/content/browser/frame_host/render_frame_host_impl.cc +++ b/content/browser/frame_host/render_frame_host_impl.cc @@ -14,6 +14,7 @@ #include "content/common/frame_messages.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/render_process_host.h" +#include "content/public/browser/render_widget_host_view.h" #include "content/public/browser/user_metrics.h" #include "url/gurl.h" @@ -73,6 +74,10 @@ RenderFrameHostImpl::~RenderFrameHostImpl() { frame_tree_->UnregisterRenderFrameHost(this); } +SiteInstance* RenderFrameHostImpl::GetSiteInstance() { + return render_view_host_->GetSiteInstance(); +} + RenderProcessHost* RenderFrameHostImpl::GetProcess() { // TODO(nasko): This should return its own process, once we have working // cross-process navigation for subframes. @@ -83,6 +88,13 @@ int RenderFrameHostImpl::GetRoutingID() { return routing_id_; } +gfx::NativeView RenderFrameHostImpl::GetNativeView() { + RenderWidgetHostView* view = render_view_host_->GetView(); + if (!view) + return NULL; + return view->GetNativeView(); +} + bool RenderFrameHostImpl::Send(IPC::Message* message) { return GetProcess()->Send(message); } diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h index e12d07a..8dfc7e5 100644 --- a/content/browser/frame_host/render_frame_host_impl.h +++ b/content/browser/frame_host/render_frame_host_impl.h @@ -32,8 +32,10 @@ class CONTENT_EXPORT RenderFrameHostImpl : public RenderFrameHost { virtual ~RenderFrameHostImpl(); // RenderFrameHost + virtual SiteInstance* GetSiteInstance() OVERRIDE; virtual RenderProcessHost* GetProcess() OVERRIDE; virtual int GetRoutingID() OVERRIDE; + virtual gfx::NativeView GetNativeView() OVERRIDE; // IPC::Sender virtual bool Send(IPC::Message* msg) OVERRIDE; diff --git a/content/browser/renderer_host/pepper/browser_ppapi_host_impl.cc b/content/browser/renderer_host/pepper/browser_ppapi_host_impl.cc index fd2c82e..562ca7e 100644 --- a/content/browser/renderer_host/pepper/browser_ppapi_host_impl.cc +++ b/content/browser/renderer_host/pepper/browser_ppapi_host_impl.cc @@ -84,19 +84,19 @@ bool BrowserPpapiHostImpl::IsValidInstance(PP_Instance instance) const { return instance_map_.find(instance) != instance_map_.end(); } -bool BrowserPpapiHostImpl::GetRenderViewIDsForInstance( +bool BrowserPpapiHostImpl::GetRenderFrameIDsForInstance( PP_Instance instance, int* render_process_id, - int* render_view_id) const { + int* render_frame_id) const { InstanceMap::const_iterator found = instance_map_.find(instance); if (found == instance_map_.end()) { *render_process_id = 0; - *render_view_id = 0; + *render_frame_id = 0; return false; } *render_process_id = found->second.render_process_id; - *render_view_id = found->second.render_view_id; + *render_frame_id = found->second.render_frame_id; return true; } @@ -202,7 +202,7 @@ void BrowserPpapiHostImpl::OnKeepalive() { int i = 0; while (instance != instance_map_.end()) { instance_data[i].render_process_id = instance->second.render_process_id; - instance_data[i].render_view_id = instance->second.render_view_id; + instance_data[i].render_frame_id = instance->second.render_frame_id; instance_data[i].document_url = instance->second.document_url; ++instance; ++i; diff --git a/content/browser/renderer_host/pepper/browser_ppapi_host_impl.h b/content/browser/renderer_host/pepper/browser_ppapi_host_impl.h index d987bd4..2ad5ca8 100644 --- a/content/browser/renderer_host/pepper/browser_ppapi_host_impl.h +++ b/content/browser/renderer_host/pepper/browser_ppapi_host_impl.h @@ -45,9 +45,10 @@ class CONTENT_EXPORT BrowserPpapiHostImpl : public BrowserPpapiHost { virtual ppapi::host::PpapiHost* GetPpapiHost() OVERRIDE; virtual base::ProcessHandle GetPluginProcessHandle() const OVERRIDE; virtual bool IsValidInstance(PP_Instance instance) const OVERRIDE; - virtual bool GetRenderViewIDsForInstance(PP_Instance instance, - int* render_process_id, - int* render_view_id) const OVERRIDE; + virtual bool GetRenderFrameIDsForInstance( + PP_Instance instance, + int* render_process_id, + int* render_frame_id) const OVERRIDE; virtual const std::string& GetPluginName() OVERRIDE; virtual const base::FilePath& GetPluginPath() OVERRIDE; virtual const base::FilePath& GetProfileDataDirectory() OVERRIDE; diff --git a/content/browser/renderer_host/pepper/pepper_file_io_host.cc b/content/browser/renderer_host/pepper/pepper_file_io_host.cc index 7a27e27..6f7b55f 100644 --- a/content/browser/renderer_host/pepper/pepper_file_io_host.cc +++ b/content/browser/renderer_host/pepper/pepper_file_io_host.cc @@ -94,9 +94,9 @@ PepperFileIOHost::PepperFileIOHost(BrowserPpapiHostImpl* host, check_quota_(false), weak_factory_(this) { int unused; - if (!host->GetRenderViewIDsForInstance(instance, - &render_process_id_, - &unused)) { + if (!host->GetRenderFrameIDsForInstance(instance, + &render_process_id_, + &unused)) { render_process_id_ = -1; } file_message_loop_ = BrowserThread::GetMessageLoopProxyForThread( diff --git a/content/browser/renderer_host/pepper/pepper_file_ref_host.cc b/content/browser/renderer_host/pepper/pepper_file_ref_host.cc index 75350a0..bf2fb76 100644 --- a/content/browser/renderer_host/pepper/pepper_file_ref_host.cc +++ b/content/browser/renderer_host/pepper/pepper_file_ref_host.cc @@ -39,9 +39,9 @@ PepperFileRefHost::PepperFileRefHost(BrowserPpapiHost* host, int render_process_id; int unused; - if (!host->GetRenderViewIDsForInstance(instance, - &render_process_id, - &unused)) { + if (!host->GetRenderFrameIDsForInstance(instance, + &render_process_id, + &unused)) { return; } @@ -88,9 +88,9 @@ PepperFileRefHost::PepperFileRefHost(BrowserPpapiHost* host, int render_process_id; int unused; - if (!host->GetRenderViewIDsForInstance(instance, - &render_process_id, - &unused)) { + if (!host->GetRenderFrameIDsForInstance(instance, + &render_process_id, + &unused)) { return; } diff --git a/content/browser/renderer_host/pepper/pepper_file_system_browser_host.cc b/content/browser/renderer_host/pepper/pepper_file_system_browser_host.cc index b95f79c..9161ad7 100644 --- a/content/browser/renderer_host/pepper/pepper_file_system_browser_host.cc +++ b/content/browser/renderer_host/pepper/pepper_file_system_browser_host.cc @@ -85,7 +85,7 @@ void PepperFileSystemBrowserHost::OpenExisting(const GURL& root_url, root_url_ = root_url; int render_process_id = 0; int unused; - if (!browser_ppapi_host_->GetRenderViewIDsForInstance( + if (!browser_ppapi_host_->GetRenderFrameIDsForInstance( pp_instance(), &render_process_id, &unused)) { NOTREACHED(); } @@ -197,9 +197,9 @@ int32_t PepperFileSystemBrowserHost::OnHostMsgOpen( int render_process_id = 0; int unused; - if (!browser_ppapi_host_->GetRenderViewIDsForInstance(pp_instance(), - &render_process_id, - &unused)) { + if (!browser_ppapi_host_->GetRenderFrameIDsForInstance(pp_instance(), + &render_process_id, + &unused)) { return PP_ERROR_FAILED; } @@ -360,9 +360,9 @@ int32_t PepperFileSystemBrowserHost::OnHostMsgInitIsolatedFileSystem( int render_process_id = 0; int unused; - if (!browser_ppapi_host_->GetRenderViewIDsForInstance(pp_instance(), - &render_process_id, - &unused)) { + if (!browser_ppapi_host_->GetRenderFrameIDsForInstance(pp_instance(), + &render_process_id, + &unused)) { fileapi::IsolatedContext::GetInstance()->RevokeFileSystem(fsid); return PP_ERROR_FAILED; } diff --git a/content/browser/renderer_host/pepper/pepper_flash_file_message_filter.cc b/content/browser/renderer_host/pepper/pepper_flash_file_message_filter.cc index ba8a8b9..8ddf86a 100644 --- a/content/browser/renderer_host/pepper/pepper_flash_file_message_filter.cc +++ b/content/browser/renderer_host/pepper/pepper_flash_file_message_filter.cc @@ -43,7 +43,7 @@ PepperFlashFileMessageFilter::PepperFlashFileMessageFilter( BrowserPpapiHost* host) : plugin_process_handle_(host->GetPluginProcessHandle()) { int unused; - host->GetRenderViewIDsForInstance(instance, &render_process_id_, &unused); + host->GetRenderFrameIDsForInstance(instance, &render_process_id_, &unused); base::FilePath profile_data_directory = host->GetProfileDataDirectory(); std::string plugin_name = host->GetPluginName(); diff --git a/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.cc b/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.cc index bdbdf87..897fc4d 100644 --- a/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.cc +++ b/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.cc @@ -86,13 +86,13 @@ PepperHostResolverMessageFilter::PepperHostResolverMessageFilter( : external_plugin_(host->external_plugin()), private_api_(private_api), render_process_id_(0), - render_view_id_(0) { + render_frame_id_(0) { DCHECK(host); - if (!host->GetRenderViewIDsForInstance( + if (!host->GetRenderFrameIDsForInstance( instance, &render_process_id_, - &render_view_id_)) { + &render_frame_id_)) { NOTREACHED(); } } @@ -127,13 +127,11 @@ int32_t PepperHostResolverMessageFilter::OnMsgResolve( // Check plugin permissions. SocketPermissionRequest request( SocketPermissionRequest::RESOLVE_HOST, host_port.host, host_port.port); - RenderViewHost* render_view_host = - RenderViewHost::FromID(render_process_id_, render_view_id_); - if (!render_view_host || - !pepper_socket_utils::CanUseSocketAPIs(external_plugin_, + if (!pepper_socket_utils::CanUseSocketAPIs(external_plugin_, private_api_, &request, - render_view_host)) { + render_process_id_, + render_frame_id_)) { return PP_ERROR_NOACCESS; } diff --git a/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.h b/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.h index cc93603..8fb404d 100644 --- a/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.h +++ b/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.h @@ -79,7 +79,7 @@ class CONTENT_EXPORT PepperHostResolverMessageFilter bool external_plugin_; bool private_api_; int render_process_id_; - int render_view_id_; + int render_frame_id_; DISALLOW_COPY_AND_ASSIGN(PepperHostResolverMessageFilter); }; diff --git a/content/browser/renderer_host/pepper/pepper_network_monitor_host.cc b/content/browser/renderer_host/pepper/pepper_network_monitor_host.cc index 32ed3cf..bc48bc9 100644 --- a/content/browser/renderer_host/pepper/pepper_network_monitor_host.cc +++ b/content/browser/renderer_host/pepper/pepper_network_monitor_host.cc @@ -20,14 +20,14 @@ namespace { bool CanUseNetworkMonitor(bool external_plugin, int render_process_id, - int render_view_id) { + int render_frame_id) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); SocketPermissionRequest request = SocketPermissionRequest( SocketPermissionRequest::NETWORK_STATE, std::string(), 0); return pepper_socket_utils::CanUseSocketAPIs( external_plugin, false /* private_api */, &request, render_process_id, - render_view_id); + render_frame_id); } scoped_ptr<net::NetworkInterfaceList> GetNetworkList() { @@ -45,15 +45,15 @@ PepperNetworkMonitorHost::PepperNetworkMonitorHost( : ResourceHost(host->GetPpapiHost(), instance, resource), weak_factory_(this) { int render_process_id; - int render_view_id; - host->GetRenderViewIDsForInstance(instance, - &render_process_id, - &render_view_id); + int render_frame_id; + host->GetRenderFrameIDsForInstance(instance, + &render_process_id, + &render_frame_id); BrowserThread::PostTaskAndReplyWithResult( BrowserThread::UI, FROM_HERE, base::Bind(&CanUseNetworkMonitor, host->external_plugin(), - render_process_id, render_view_id), + render_process_id, render_frame_id), base::Bind(&PepperNetworkMonitorHost::OnPermissionCheckResult, weak_factory_.GetWeakPtr())); } diff --git a/content/browser/renderer_host/pepper/pepper_network_proxy_host.cc b/content/browser/renderer_host/pepper/pepper_network_proxy_host.cc index 13f0fc3..8f44537 100644 --- a/content/browser/renderer_host/pepper/pepper_network_proxy_host.cc +++ b/content/browser/renderer_host/pepper/pepper_network_proxy_host.cc @@ -30,15 +30,15 @@ PepperNetworkProxyHost::PepperNetworkProxyHost(BrowserPpapiHostImpl* host, is_allowed_(false), waiting_for_ui_thread_data_(true), weak_factory_(this) { - int render_process_id(0), render_view_id(0); - host->GetRenderViewIDsForInstance(instance, + int render_process_id(0), render_frame_id(0); + host->GetRenderFrameIDsForInstance(instance, &render_process_id, - &render_view_id); + &render_frame_id); BrowserThread::PostTaskAndReplyWithResult( BrowserThread::UI, FROM_HERE, base::Bind(&GetUIThreadDataOnUIThread, render_process_id, - render_view_id, + render_frame_id, host->external_plugin()), base::Bind(&PepperNetworkProxyHost::DidGetUIThreadData, weak_factory_.GetWeakPtr())); @@ -65,7 +65,7 @@ PepperNetworkProxyHost::UIThreadData::~UIThreadData() { // static PepperNetworkProxyHost::UIThreadData PepperNetworkProxyHost::GetUIThreadDataOnUIThread(int render_process_id, - int render_view_id, + int render_frame_id, bool is_external_plugin) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); PepperNetworkProxyHost::UIThreadData result; @@ -76,17 +76,14 @@ PepperNetworkProxyHost::GetUIThreadDataOnUIThread(int render_process_id, GetRequestContextForRenderProcess(render_process_id); } - RenderViewHost* render_view_host = - RenderViewHost::FromID(render_process_id, render_view_id); - if (render_view_host) { - SocketPermissionRequest request( - content::SocketPermissionRequest::RESOLVE_PROXY, std::string(), 0); - result.is_allowed = pepper_socket_utils::CanUseSocketAPIs( - is_external_plugin, - false /* is_private_api */, - &request, - render_view_host); - } + SocketPermissionRequest request( + content::SocketPermissionRequest::RESOLVE_PROXY, std::string(), 0); + result.is_allowed = pepper_socket_utils::CanUseSocketAPIs( + is_external_plugin, + false /* is_private_api */, + &request, + render_process_id, + render_frame_id); return result; } diff --git a/content/browser/renderer_host/pepper/pepper_network_proxy_host.h b/content/browser/renderer_host/pepper/pepper_network_proxy_host.h index 38e36cb..28f52b6 100644 --- a/content/browser/renderer_host/pepper/pepper_network_proxy_host.h +++ b/content/browser/renderer_host/pepper/pepper_network_proxy_host.h @@ -50,7 +50,7 @@ class CONTENT_EXPORT PepperNetworkProxyHost : public ppapi::host::ResourceHost { scoped_refptr<net::URLRequestContextGetter> context_getter; }; static UIThreadData GetUIThreadDataOnUIThread(int render_process_id, - int render_view_id, + int render_frame_id, bool is_external_plugin); void DidGetUIThreadData(const UIThreadData&); diff --git a/content/browser/renderer_host/pepper/pepper_socket_utils.cc b/content/browser/renderer_host/pepper/pepper_socket_utils.cc index 2f109cd..9fc17c5 100644 --- a/content/browser/renderer_host/pepper/pepper_socket_utils.cc +++ b/content/browser/renderer_host/pepper/pepper_socket_utils.cc @@ -9,9 +9,10 @@ #include "base/logging.h" #include "base/memory/ref_counted.h" +#include "base/strings/string_util.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/content_browser_client.h" -#include "content/public/browser/render_view_host.h" +#include "content/public/browser/render_frame_host.h" #include "content/public/browser/site_instance.h" #include "content/public/common/content_client.h" #include "net/cert/x509_certificate.h" @@ -39,22 +40,8 @@ bool CanUseSocketAPIs(bool external_plugin, bool private_api, const SocketPermissionRequest* params, int render_process_id, - int render_view_id) { + int render_frame_id) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - RenderViewHost* render_view_host = RenderViewHost::FromID(render_process_id, - render_view_id); - return render_view_host && CanUseSocketAPIs(external_plugin, - private_api, - params, - render_view_host); -} - -bool CanUseSocketAPIs(bool external_plugin, - bool private_api, - const SocketPermissionRequest* params, - RenderViewHost* render_view_host) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - if (!external_plugin) { // Always allow socket APIs for out-process plugins (other than external // plugins instantiated by the embeeder through @@ -62,9 +49,11 @@ bool CanUseSocketAPIs(bool external_plugin, return true; } - if (!render_view_host) + RenderFrameHost* render_frame_host = + RenderFrameHost::FromID(render_process_id, render_frame_id); + if (!render_frame_host) return false; - SiteInstance* site_instance = render_view_host->GetSiteInstance(); + SiteInstance* site_instance = render_frame_host->GetSiteInstance(); if (!site_instance) return false; if (!GetContentClient()->browser()->AllowPepperSocketAPI( diff --git a/content/browser/renderer_host/pepper/pepper_socket_utils.h b/content/browser/renderer_host/pepper/pepper_socket_utils.h index 1a1a26c..e7bc1e3 100644 --- a/content/browser/renderer_host/pepper/pepper_socket_utils.h +++ b/content/browser/renderer_host/pepper/pepper_socket_utils.h @@ -20,8 +20,6 @@ class PPB_X509Certificate_Fields; namespace content { -class RenderViewHost; - namespace pepper_socket_utils { SocketPermissionRequest CreateSocketPermissionRequest( @@ -35,13 +33,7 @@ bool CanUseSocketAPIs(bool external_plugin, bool private_api, const SocketPermissionRequest* params, int render_process_id, - int render_view_id); - -// TODO (ygorshenin@): remove this method. -bool CanUseSocketAPIs(bool external_plugin, - bool private_api, - const SocketPermissionRequest* params, - RenderViewHost* render_view_host); + int render_frame_id); // Extracts the certificate field data from a net::X509Certificate into // PPB_X509Certificate_Fields. diff --git a/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc b/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc index 063c11e..5c59870 100644 --- a/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc +++ b/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc @@ -49,13 +49,13 @@ PepperTCPServerSocketMessageFilter::PepperTCPServerSocketMessageFilter( external_plugin_(host->external_plugin()), private_api_(private_api), render_process_id_(0), - render_view_id_(0) { + render_frame_id_(0) { ++g_num_instances; DCHECK(factory_); DCHECK(ppapi_host_); - if (!host->GetRenderViewIDsForInstance(instance, - &render_process_id_, - &render_view_id_)) { + if (!host->GetRenderFrameIDsForInstance(instance, + &render_process_id_, + &render_frame_id_)) { NOTREACHED(); } } @@ -110,7 +110,7 @@ int32_t PepperTCPServerSocketMessageFilter::OnMsgListen( private_api_, &request, render_process_id_, - render_view_id_)) { + render_frame_id_)) { return PP_ERROR_NOACCESS; } diff --git a/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.h b/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.h index 5d17333..3f5e70d 100644 --- a/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.h +++ b/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.h @@ -105,7 +105,7 @@ class CONTENT_EXPORT PepperTCPServerSocketMessageFilter const bool external_plugin_; const bool private_api_; int render_process_id_; - int render_view_id_; + int render_frame_id_; DISALLOW_COPY_AND_ASSIGN(PepperTCPServerSocketMessageFilter); }; diff --git a/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc b/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc index f943f39..9727616 100644 --- a/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc +++ b/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc @@ -56,7 +56,7 @@ PepperTCPSocketMessageFilter::PepperTCPSocketMessageFilter( : version_(version), external_plugin_(host->external_plugin()), render_process_id_(0), - render_view_id_(0), + render_frame_id_(0), ppapi_host_(host->GetPpapiHost()), factory_(factory), instance_(instance), @@ -69,9 +69,9 @@ PepperTCPSocketMessageFilter::PepperTCPSocketMessageFilter( pending_accept_(false) { DCHECK(host); ++g_num_instances; - if (!host->GetRenderViewIDsForInstance(instance, - &render_process_id_, - &render_view_id_)) { + if (!host->GetRenderFrameIDsForInstance(instance, + &render_process_id_, + &render_frame_id_)) { NOTREACHED(); } } @@ -84,7 +84,7 @@ PepperTCPSocketMessageFilter::PepperTCPSocketMessageFilter( : version_(version), external_plugin_(host->external_plugin()), render_process_id_(0), - render_view_id_(0), + render_frame_id_(0), ppapi_host_(host->GetPpapiHost()), factory_(NULL), instance_(instance), @@ -99,9 +99,9 @@ PepperTCPSocketMessageFilter::PepperTCPSocketMessageFilter( DCHECK_NE(version, ppapi::TCP_SOCKET_VERSION_1_0); ++g_num_instances; - if (!host->GetRenderViewIDsForInstance(instance, - &render_process_id_, - &render_view_id_)) { + if (!host->GetRenderFrameIDsForInstance(instance, + &render_process_id_, + &render_frame_id_)) { NOTREACHED(); } } @@ -181,7 +181,7 @@ int32_t PepperTCPSocketMessageFilter::OnMsgBind( if (!pepper_socket_utils::CanUseSocketAPIs( external_plugin_, false /* private_api */, NULL, render_process_id_, - render_view_id_)) { + render_frame_id_)) { return PP_ERROR_NOACCESS; } @@ -211,7 +211,7 @@ int32_t PepperTCPSocketMessageFilter::OnMsgConnect( port); if (!pepper_socket_utils::CanUseSocketAPIs( external_plugin_, true /* private_api */, &request, - render_process_id_, render_view_id_)) { + render_process_id_, render_frame_id_)) { return PP_ERROR_NOACCESS; } @@ -241,7 +241,7 @@ int32_t PepperTCPSocketMessageFilter::OnMsgConnectWithNetAddress( content::SocketPermissionRequest::TCP_CONNECT, net_addr); if (!pepper_socket_utils::CanUseSocketAPIs(external_plugin_, IsPrivateAPI(), &request, render_process_id_, - render_view_id_)) { + render_frame_id_)) { return PP_ERROR_NOACCESS; } @@ -381,7 +381,7 @@ int32_t PepperTCPSocketMessageFilter::OnMsgListen( content::SocketPermissionRequest::TCP_LISTEN, bind_input_addr_); if (!pepper_socket_utils::CanUseSocketAPIs( external_plugin_, false /* private_api */, &request, - render_process_id_, render_view_id_)) { + render_process_id_, render_frame_id_)) { return PP_ERROR_NOACCESS; } diff --git a/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.h b/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.h index fb34b98..35fdabd 100644 --- a/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.h +++ b/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.h @@ -169,7 +169,7 @@ class CONTENT_EXPORT PepperTCPSocketMessageFilter const bool external_plugin_; int render_process_id_; - int render_view_id_; + int render_frame_id_; // The following fields are used only on the IO thread. // Non-owning ptr. diff --git a/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc b/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc index 3127ed2..82805cd 100644 --- a/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc +++ b/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc @@ -49,13 +49,13 @@ PepperUDPSocketMessageFilter::PepperUDPSocketMessageFilter( external_plugin_(host->external_plugin()), private_api_(private_api), render_process_id_(0), - render_view_id_(0) { + render_frame_id_(0) { ++g_num_instances; DCHECK(host); - if (!host->GetRenderViewIDsForInstance(instance, - &render_process_id_, - &render_view_id_)) { + if (!host->GetRenderFrameIDsForInstance(instance, + &render_process_id_, + &render_frame_id_)) { NOTREACHED(); } } @@ -174,7 +174,7 @@ int32_t PepperUDPSocketMessageFilter::OnMsgBind( SocketPermissionRequest::UDP_BIND, addr); if (!pepper_socket_utils::CanUseSocketAPIs(external_plugin_, private_api_, &request, render_process_id_, - render_view_id_)) { + render_frame_id_)) { return PP_ERROR_NOACCESS; } @@ -237,7 +237,7 @@ int32_t PepperUDPSocketMessageFilter::OnMsgSendTo( SocketPermissionRequest::UDP_SEND_TO, addr); if (!pepper_socket_utils::CanUseSocketAPIs(external_plugin_, private_api_, &request, render_process_id_, - render_view_id_)) { + render_frame_id_)) { return PP_ERROR_NOACCESS; } diff --git a/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.h b/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.h index 2df4cee..64dc32f 100644 --- a/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.h +++ b/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.h @@ -121,7 +121,7 @@ class CONTENT_EXPORT PepperUDPSocketMessageFilter bool private_api_; int render_process_id_; - int render_view_id_; + int render_frame_id_; DISALLOW_COPY_AND_ASSIGN(PepperUDPSocketMessageFilter); }; diff --git a/content/common/pepper_renderer_instance_data.cc b/content/common/pepper_renderer_instance_data.cc index 73b67a7..6fda4bf 100644 --- a/content/common/pepper_renderer_instance_data.cc +++ b/content/common/pepper_renderer_instance_data.cc @@ -8,16 +8,16 @@ namespace content { PepperRendererInstanceData::PepperRendererInstanceData() : render_process_id(0), - render_view_id(0) { + render_frame_id(0) { } PepperRendererInstanceData::PepperRendererInstanceData( int render_process, - int render_view, + int render_frame, const GURL& document, const GURL& plugin) : render_process_id(render_process), - render_view_id(render_view), + render_frame_id(render_frame), document_url(document), plugin_url(plugin) { } diff --git a/content/common/pepper_renderer_instance_data.h b/content/common/pepper_renderer_instance_data.h index ffa0106..e39017d 100644 --- a/content/common/pepper_renderer_instance_data.h +++ b/content/common/pepper_renderer_instance_data.h @@ -16,12 +16,12 @@ namespace content { struct PepperRendererInstanceData { PepperRendererInstanceData(); PepperRendererInstanceData(int render_process, - int render_view, + int render_frame_id, const GURL& document, const GURL& plugin); ~PepperRendererInstanceData(); int render_process_id; - int render_view_id; + int render_frame_id; GURL document_url; GURL plugin_url; }; diff --git a/content/common/view_messages.h b/content/common/view_messages.h index 3fe538f..37af7c7 100644 --- a/content/common/view_messages.h +++ b/content/common/view_messages.h @@ -246,7 +246,7 @@ IPC_STRUCT_TRAITS_END() IPC_STRUCT_TRAITS_BEGIN(content::PepperRendererInstanceData) IPC_STRUCT_TRAITS_MEMBER(render_process_id) - IPC_STRUCT_TRAITS_MEMBER(render_view_id) + IPC_STRUCT_TRAITS_MEMBER(render_frame_id) IPC_STRUCT_TRAITS_MEMBER(document_url) IPC_STRUCT_TRAITS_MEMBER(plugin_url) IPC_STRUCT_TRAITS_END() diff --git a/content/public/browser/browser_ppapi_host.h b/content/public/browser/browser_ppapi_host.h index ce76d16..81b78b6 100644 --- a/content/public/browser/browser_ppapi_host.h +++ b/content/public/browser/browser_ppapi_host.h @@ -36,7 +36,7 @@ class CONTENT_EXPORT BrowserPpapiHost { public: struct OnKeepaliveInstanceStruct { int render_process_id; - int render_view_id; + int render_frame_id; GURL document_url; }; typedef std::vector<OnKeepaliveInstanceStruct> OnKeepaliveInstanceData; @@ -67,7 +67,7 @@ class CONTENT_EXPORT BrowserPpapiHost { // Returns true if the given PP_Instance is valid. virtual bool IsValidInstance(PP_Instance instance) const = 0; - // Retrieves the process/view Ids associated with the RenderView containing + // Retrieves the process/frame Ids associated with the RenderFrame containing // the given instance and returns true on success. If the instance is // invalid, the ids will be 0 and false will be returned. // @@ -75,10 +75,10 @@ class CONTENT_EXPORT BrowserPpapiHost { // validated, and the resource hosts will be deleted when the resource is // destroyed. So it should not generally be necessary to check for errors // from this function except as a last-minute sanity check if you convert the - // IDs to a RenderView/ProcessHost on the UI thread. - virtual bool GetRenderViewIDsForInstance(PP_Instance instance, - int* render_process_id, - int* render_view_id) const = 0; + // IDs to a RenderFrame/ProcessHost on the UI thread. + virtual bool GetRenderFrameIDsForInstance(PP_Instance instance, + int* render_process_id, + int* render_frame_id) const = 0; // Returns the name of the plugin. virtual const std::string& GetPluginName() = 0; diff --git a/content/public/browser/render_frame_host.h b/content/public/browser/render_frame_host.h index ed14b40..3aaec7c 100644 --- a/content/public/browser/render_frame_host.h +++ b/content/public/browser/render_frame_host.h @@ -8,9 +8,11 @@ #include "content/common/content_export.h" #include "ipc/ipc_listener.h" #include "ipc/ipc_sender.h" +#include "ui/gfx/native_widget_types.h" namespace content { class RenderProcessHost; +class SiteInstance; // The interface provides a communication conduit with a frame in the renderer. class CONTENT_EXPORT RenderFrameHost : public IPC::Listener, @@ -22,12 +24,17 @@ class CONTENT_EXPORT RenderFrameHost : public IPC::Listener, virtual ~RenderFrameHost() {} + virtual SiteInstance* GetSiteInstance() = 0; + // Returns the process for this frame. virtual RenderProcessHost* GetProcess() = 0; // Returns the route id for this frame. virtual int GetRoutingID() = 0; + // Returns the associated widget's native view. + virtual gfx::NativeView GetNativeView() = 0; + private: // This interface should only be implemented inside content. friend class RenderFrameHostImpl; diff --git a/content/renderer/pepper/host_dispatcher_wrapper.cc b/content/renderer/pepper/host_dispatcher_wrapper.cc index 8707d94..2c568a4 100644 --- a/content/renderer/pepper/host_dispatcher_wrapper.cc +++ b/content/renderer/pepper/host_dispatcher_wrapper.cc @@ -11,7 +11,7 @@ #include "content/renderer/pepper/plugin_module.h" #include "content/renderer/pepper/renderer_ppapi_host_impl.h" #include "content/renderer/pepper/renderer_restrict_dispatch_group.h" -#include "content/renderer/render_view_impl.h" +#include "content/renderer/render_frame_impl.h" namespace content { @@ -76,14 +76,14 @@ void HostDispatcherWrapper::AddInstance(PP_Instance instance) { // always give us an instance we can find in the map otherwise, but that // isn't true for browser tag support. if (host) { - RenderView* render_view = host->GetRenderViewForInstance(instance); + RenderFrame* render_frame = host->GetRenderFrameForInstance(instance); PepperPluginInstance* plugin_instance = host->GetPluginInstance(instance); - render_view->Send(new ViewHostMsg_DidCreateOutOfProcessPepperInstance( + render_frame->Send(new ViewHostMsg_DidCreateOutOfProcessPepperInstance( plugin_child_id_, instance, PepperRendererInstanceData( 0, // The render process id will be supplied in the browser. - render_view->GetRoutingID(), + render_frame->GetRoutingID(), host->GetDocumentURL(instance), plugin_instance->GetPluginURL()), is_external_)); @@ -97,8 +97,8 @@ void HostDispatcherWrapper::RemoveInstance(PP_Instance instance) { RendererPpapiHostImpl::GetForPPInstance(instance); // TODO(brettw) remove null check as described in AddInstance. if (host) { - RenderView* render_view = host->GetRenderViewForInstance(instance); - render_view->Send(new ViewHostMsg_DidDeleteOutOfProcessPepperInstance( + RenderFrame* render_frame = host->GetRenderFrameForInstance(instance); + render_frame->Send(new ViewHostMsg_DidDeleteOutOfProcessPepperInstance( plugin_child_id_, instance, is_external_)); diff --git a/content/renderer/pepper/pepper_browser_connection.cc b/content/renderer/pepper/pepper_browser_connection.cc index dfb2429..91b25ec 100644 --- a/content/renderer/pepper/pepper_browser_connection.cc +++ b/content/renderer/pepper/pepper_browser_connection.cc @@ -41,14 +41,14 @@ bool PepperBrowserConnection::OnMessageReceived(const IPC::Message& msg) { void PepperBrowserConnection::DidCreateInProcessInstance( PP_Instance instance, - int render_view_id, + int render_frame_id, const GURL& document_url, const GURL& plugin_url) { Send(new ViewHostMsg_DidCreateInProcessInstance( instance, // Browser provides the render process id. PepperRendererInstanceData(0, - render_view_id, + render_frame_id, document_url, plugin_url))); } diff --git a/content/renderer/pepper/pepper_browser_connection.h b/content/renderer/pepper/pepper_browser_connection.h index cfc5603..c79a6ec 100644 --- a/content/renderer/pepper/pepper_browser_connection.h +++ b/content/renderer/pepper/pepper_browser_connection.h @@ -49,7 +49,7 @@ class PepperBrowserConnection // Called when the renderer creates an in-process instance. void DidCreateInProcessInstance(PP_Instance instance, - int render_view_id, + int render_frame_id, const GURL& document_url, const GURL& plugin_url); diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.cc b/content/renderer/pepper/pepper_plugin_instance_impl.cc index 1277c63..7e5c968 100644 --- a/content/renderer/pepper/pepper_plugin_instance_impl.cc +++ b/content/renderer/pepper/pepper_plugin_instance_impl.cc @@ -548,7 +548,7 @@ PepperPluginInstanceImpl::PepperPluginInstanceImpl( PepperBrowserConnection::Get(render_frame_); browser_connection->DidCreateInProcessInstance( pp_instance(), - render_frame_->render_view()->GetRoutingID(), + render_frame_->GetRoutingID(), container_->element().document().url(), GetPluginURL()); } diff --git a/content/renderer/pepper/pepper_webplugin_impl.cc b/content/renderer/pepper/pepper_webplugin_impl.cc index 129ee45..8947d73 100644 --- a/content/renderer/pepper/pepper_webplugin_impl.cc +++ b/content/renderer/pepper/pepper_webplugin_impl.cc @@ -14,7 +14,7 @@ #include "content/renderer/pepper/npobject_var.h" #include "content/renderer/pepper/pepper_plugin_instance_impl.h" #include "content/renderer/pepper/plugin_module.h" -#include "content/renderer/render_view_impl.h" +#include "content/renderer/render_frame_impl.h" #include "ppapi/shared_impl/ppapi_globals.h" #include "ppapi/shared_impl/var_tracker.h" #include "third_party/WebKit/public/platform/WebPoint.h" @@ -48,8 +48,7 @@ namespace content { struct PepperWebPluginImpl::InitData { scoped_refptr<PluginModule> module; - base::WeakPtr<RenderViewImpl> render_view; - RenderFrame* render_frame; + RenderFrameImpl* render_frame; std::vector<std::string> arg_names; std::vector<std::string> arg_values; GURL url; @@ -58,15 +57,13 @@ struct PepperWebPluginImpl::InitData { PepperWebPluginImpl::PepperWebPluginImpl( PluginModule* plugin_module, const WebPluginParams& params, - const base::WeakPtr<RenderViewImpl>& render_view, - RenderFrame* render_frame) + RenderFrameImpl* render_frame) : init_data_(new InitData()), full_frame_(params.loadManually), instance_object_(PP_MakeUndefined()), container_(NULL) { DCHECK(plugin_module); init_data_->module = plugin_module; - init_data_->render_view = render_view; init_data_->render_frame = render_frame; for (size_t i = 0; i < params.attributeNames.size(); ++i) { init_data_->arg_names.push_back(params.attributeNames[i].utf8()); @@ -88,7 +85,7 @@ blink::WebPluginContainer* PepperWebPluginImpl::container() const { bool PepperWebPluginImpl::initialize(WebPluginContainer* container) { // The plugin delegate may have gone away. instance_ = init_data_->module->CreateInstance( - init_data_->render_view->main_render_frame(), container, init_data_->url); + init_data_->render_frame, container, init_data_->url); if (!instance_.get()) return false; diff --git a/content/renderer/pepper/pepper_webplugin_impl.h b/content/renderer/pepper/pepper_webplugin_impl.h index 600dd57..cee6690 100644 --- a/content/renderer/pepper/pepper_webplugin_impl.h +++ b/content/renderer/pepper/pepper_webplugin_impl.h @@ -27,15 +27,13 @@ namespace content { class PepperPluginInstanceImpl; class PluginModule; class PPB_URLLoader_Impl; -class RenderFrame; -class RenderViewImpl; +class RenderFrameImpl; class PepperWebPluginImpl : public blink::WebPlugin { public: PepperWebPluginImpl(PluginModule* module, const blink::WebPluginParams& params, - const base::WeakPtr<RenderViewImpl>& render_view, - RenderFrame* render_frame); + RenderFrameImpl* render_frame); PepperPluginInstanceImpl* instance() { return instance_.get(); } diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 836be18..3be9c30 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc @@ -497,9 +497,7 @@ blink::WebPlugin* RenderFrameImpl::CreatePlugin( this, info, &pepper_plugin_was_registered)); if (pepper_plugin_was_registered) { if (pepper_module.get()) { - // TODO(jam): change to take RenderFrame. - return new PepperWebPluginImpl( - pepper_module.get(), params, render_view_->AsWeakPtr(), this); + return new PepperWebPluginImpl(pepper_module.get(), params, this); } } #if defined(OS_CHROMEOS) diff --git a/extensions/browser/extension_function.cc b/extensions/browser/extension_function.cc index a06d2c4..d1e2a9f 100644 --- a/extensions/browser/extension_function.cc +++ b/extensions/browser/extension_function.cc @@ -12,6 +12,7 @@ #include "chrome/common/extensions/extension_messages.h" #include "content/public/browser/notification_source.h" #include "content/public/browser/notification_types.h" +#include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_view_host.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" @@ -28,15 +29,18 @@ void ExtensionFunctionDeleteTraits::Destruct(const ExtensionFunction* x) { x->Destruct(); } -// Helper class to track the lifetime of ExtensionFunction's RenderViewHost -// pointer and NULL it out when it dies. It also allows us to filter IPC -// messages coming from the RenderViewHost. -class UIThreadExtensionFunction::RenderViewHostTracker +// Helper class to track the lifetime of ExtensionFunction's RenderViewHost or +// RenderFrameHost pointer and NULL it out when it dies. It also allows us to +// filter IPC messages coming from the RenderViewHost/RenderFrameHost. +class UIThreadExtensionFunction::RenderHostTracker : public content::WebContentsObserver { public: - explicit RenderViewHostTracker(UIThreadExtensionFunction* function) + explicit RenderHostTracker(UIThreadExtensionFunction* function) : content::WebContentsObserver( - WebContents::FromRenderViewHost(function->render_view_host())), + function->render_view_host() ? + WebContents::FromRenderViewHost(function->render_view_host()) : + WebContents::FromRenderFrameHost( + function->render_frame_host())), function_(function) { } @@ -49,14 +53,21 @@ class UIThreadExtensionFunction::RenderViewHostTracker function_->SetRenderViewHost(NULL); } + virtual void RenderFrameDeleted( + content::RenderFrameHost* render_frame_host) OVERRIDE { + if (render_frame_host != function_->render_frame_host()) + return; + + function_->SetRenderFrameHost(NULL); + } virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE { - return function_->OnMessageReceivedFromRenderView(message); + return function_->OnMessageReceived(message); } UIThreadExtensionFunction* function_; - DISALLOW_COPY_AND_ASSIGN(RenderViewHostTracker); + DISALLOW_COPY_AND_ASSIGN(RenderHostTracker); }; ExtensionFunction::ExtensionFunction() @@ -146,7 +157,8 @@ void ExtensionFunction::SendResponseImpl(bool success) { } UIThreadExtensionFunction::UIThreadExtensionFunction() - : render_view_host_(NULL), context_(NULL), delegate_(NULL) {} + : render_view_host_(NULL), render_frame_host_(NULL), context_(NULL), + delegate_(NULL) {} UIThreadExtensionFunction::~UIThreadExtensionFunction() { if (dispatcher() && render_view_host()) @@ -158,8 +170,7 @@ UIThreadExtensionFunction::AsUIThreadExtensionFunction() { return this; } -bool UIThreadExtensionFunction::OnMessageReceivedFromRenderView( - const IPC::Message& message) { +bool UIThreadExtensionFunction::OnMessageReceived(const IPC::Message& message) { return false; } @@ -169,8 +180,16 @@ void UIThreadExtensionFunction::Destruct() const { void UIThreadExtensionFunction::SetRenderViewHost( RenderViewHost* render_view_host) { + DCHECK(!render_frame_host_); render_view_host_ = render_view_host; - tracker_.reset(render_view_host ? new RenderViewHostTracker(this) : NULL); + tracker_.reset(render_view_host ? new RenderHostTracker(this) : NULL); +} + +void UIThreadExtensionFunction::SetRenderFrameHost( + content::RenderFrameHost* render_frame_host) { + DCHECK(!render_view_host_); + render_frame_host_ = render_frame_host; + tracker_.reset(render_frame_host ? new RenderHostTracker(this) : NULL); } content::WebContents* UIThreadExtensionFunction::GetAssociatedWebContents() { @@ -191,8 +210,13 @@ void UIThreadExtensionFunction::SendResponse(bool success) { void UIThreadExtensionFunction::WriteToConsole( content::ConsoleMessageLevel level, const std::string& message) { - render_view_host_->Send(new ExtensionMsg_AddMessageToConsole( - render_view_host_->GetRoutingID(), level, message)); + if (render_view_host_) { + render_view_host_->Send(new ExtensionMsg_AddMessageToConsole( + render_view_host_->GetRoutingID(), level, message)); + } else { + render_frame_host_->Send(new ExtensionMsg_AddMessageToConsole( + render_frame_host_->GetRoutingID(), level, message)); + } } IOThreadExtensionFunction::IOThreadExtensionFunction() diff --git a/extensions/browser/extension_function.h b/extensions/browser/extension_function.h index aa0ed03..49d370e 100644 --- a/extensions/browser/extension_function.h +++ b/extensions/browser/extension_function.h @@ -35,6 +35,7 @@ class Value; namespace content { class BrowserContext; +class RenderFrameHost; class RenderViewHost; class WebContents; } @@ -290,7 +291,7 @@ class UIThreadExtensionFunction : public ExtensionFunction { // Called when a message was received. // Should return true if it processed the message. - virtual bool OnMessageReceivedFromRenderView(const IPC::Message& message); + virtual bool OnMessageReceived(const IPC::Message& message); // Set the browser context which contains the extension that has originated // this function call. @@ -301,6 +302,10 @@ class UIThreadExtensionFunction : public ExtensionFunction { content::RenderViewHost* render_view_host() const { return render_view_host_; } + void SetRenderFrameHost(content::RenderFrameHost* render_frame_host); + content::RenderFrameHost* render_frame_host() const { + return render_frame_host_; + } void set_dispatcher( const base::WeakPtr<ExtensionFunctionDispatcher>& dispatcher) { @@ -330,18 +335,23 @@ class UIThreadExtensionFunction : public ExtensionFunction { // The dispatcher that will service this extension function call. base::WeakPtr<ExtensionFunctionDispatcher> dispatcher_; - // The RenderViewHost we will send responses too. + // The RenderViewHost we will send responses to. content::RenderViewHost* render_view_host_; + // The RenderFrameHost we will send responses to. + // NOTE: either render_view_host_ or render_frame_host_ will be set, as we + // port code to use RenderFrames for OOPIF. See http://crbug.com/304341. + content::RenderFrameHost* render_frame_host_; + // The content::BrowserContext of this function's extension. content::BrowserContext* context_; private: - class RenderViewHostTracker; + class RenderHostTracker; virtual void Destruct() const OVERRIDE; - scoped_ptr<RenderViewHostTracker> tracker_; + scoped_ptr<RenderHostTracker> tracker_; DelegateForTests* delegate_; }; |