diff options
author | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-16 15:31:38 +0000 |
---|---|---|
committer | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-16 15:31:38 +0000 |
commit | 85b70863c59d2306d2c8fb5353d99c8a5bb779f0 (patch) | |
tree | b98d7a43df5a5e2dadf81520c9863705a7c3b969 /content | |
parent | f0e222a9f23b7717b6442b65c64e1d30e533a893 (diff) | |
download | chromium_src-85b70863c59d2306d2c8fb5353d99c8a5bb779f0.zip chromium_src-85b70863c59d2306d2c8fb5353d99c8a5bb779f0.tar.gz chromium_src-85b70863c59d2306d2c8fb5353d99c8a5bb779f0.tar.bz2 |
DevTools: follow up to r288297, check rvh for being null in all branches.
Review URL: https://codereview.chromium.org/482503002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@290151 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
4 files changed, 70 insertions, 59 deletions
diff --git a/content/browser/devtools/render_view_devtools_agent_host.cc b/content/browser/devtools/render_view_devtools_agent_host.cc index f0c9c8f..86c0867 100644 --- a/content/browser/devtools/render_view_devtools_agent_host.cc +++ b/content/browser/devtools/render_view_devtools_agent_host.cc @@ -107,7 +107,7 @@ void RenderViewDevToolsAgentHost::OnCancelPendingNavigation( RenderViewDevToolsAgentHost::RenderViewDevToolsAgentHost(RenderViewHost* rvh) : render_view_host_(NULL), - overrides_handler_(new RendererOverridesHandler(this)), + overrides_handler_(new RendererOverridesHandler()), tracing_handler_( new DevToolsTracingHandler(DevToolsTracingHandler::Renderer)), power_handler_(new DevToolsPowerHandler()), @@ -254,8 +254,8 @@ void RenderViewDevToolsAgentHost::AboutToNavigateRenderView( if (!render_view_host_) return; - if (render_view_host_ == dest_rvh && static_cast<RenderViewHostImpl*>( - render_view_host_)->render_view_termination_status() == + if (render_view_host_ == dest_rvh && + render_view_host_->render_view_termination_status() == base::TERMINATION_STATUS_STILL_RUNNING) return; ReattachToRenderViewHost(dest_rvh); @@ -342,10 +342,10 @@ void RenderViewDevToolsAgentHost::Observe(int type, void RenderViewDevToolsAgentHost::SetRenderViewHost(RenderViewHost* rvh) { DCHECK(!render_view_host_); - render_view_host_ = rvh; + render_view_host_ = static_cast<RenderViewHostImpl*>(rvh); WebContentsObserver::Observe(WebContents::FromRenderViewHost(rvh)); - overrides_handler_->OnRenderViewHostChanged(); + overrides_handler_->SetRenderViewHost(render_view_host_); registrar_.Add( this, @@ -360,6 +360,7 @@ void RenderViewDevToolsAgentHost::ClearRenderViewHost() { content::NOTIFICATION_RENDER_WIDGET_VISIBILITY_CHANGED, content::Source<RenderWidgetHost>(render_view_host_)); render_view_host_ = NULL; + overrides_handler_->ClearRenderViewHost(); } void RenderViewDevToolsAgentHost::DisconnectWebContents() { diff --git a/content/browser/devtools/render_view_devtools_agent_host.h b/content/browser/devtools/render_view_devtools_agent_host.h index b1f3e07..5a9d5b4 100644 --- a/content/browser/devtools/render_view_devtools_agent_host.h +++ b/content/browser/devtools/render_view_devtools_agent_host.h @@ -26,6 +26,7 @@ class DevToolsPowerHandler; class DevToolsTracingHandler; class RendererOverridesHandler; class RenderViewHost; +class RenderViewHostImpl; #if defined(OS_ANDROID) class PowerSaveBlockerImpl; @@ -96,7 +97,7 @@ class CONTENT_EXPORT RenderViewDevToolsAgentHost void InnerOnClientAttached(); void InnerClientDetachedFromRenderer(); - RenderViewHost* render_view_host_; + RenderViewHostImpl* render_view_host_; scoped_ptr<RendererOverridesHandler> overrides_handler_; scoped_ptr<DevToolsTracingHandler> tracing_handler_; scoped_ptr<DevToolsPowerHandler> power_handler_; diff --git a/content/browser/devtools/renderer_overrides_handler.cc b/content/browser/devtools/renderer_overrides_handler.cc index d700dee..b068a85 100644 --- a/content/browser/devtools/renderer_overrides_handler.cc +++ b/content/browser/devtools/renderer_overrides_handler.cc @@ -67,9 +67,8 @@ static int kCaptureRetryLimit = 2; } // namespace -RendererOverridesHandler::RendererOverridesHandler(DevToolsAgentHost* agent) - : agent_(agent), - has_last_compositor_frame_metadata_(false), +RendererOverridesHandler::RendererOverridesHandler() + : has_last_compositor_frame_metadata_(false), capture_retry_count_(0), weak_factory_(this) { RegisterCommandHandler( @@ -151,9 +150,8 @@ RendererOverridesHandler::RendererOverridesHandler(DevToolsAgentHost* agent) RendererOverridesHandler::~RendererOverridesHandler() {} void RendererOverridesHandler::OnClientDetached() { - RenderViewHostImpl* host = GetRenderViewHostImpl(); - if (screencast_command_ && host) - host->SetTouchEventEmulationEnabled(false, false); + if (screencast_command_ && host_) + host_->SetTouchEventEmulationEnabled(false, false); screencast_command_ = NULL; } @@ -172,12 +170,17 @@ void RendererOverridesHandler::OnVisibilityChanged(bool visible) { NotifyScreencastVisibility(visible); } -void RendererOverridesHandler::OnRenderViewHostChanged() { - RenderViewHostImpl* host = GetRenderViewHostImpl(); +void RendererOverridesHandler::SetRenderViewHost( + RenderViewHostImpl* host) { + host_ = host; if (screencast_command_ && host) host->SetTouchEventEmulationEnabled(true, true); } +void RendererOverridesHandler::ClearRenderViewHost() { + host_ = NULL; +} + bool RendererOverridesHandler::OnSetTouchEventEmulationEnabled() { return screencast_command_.get() != NULL; } @@ -188,14 +191,13 @@ void RendererOverridesHandler::InnerSwapCompositorFrame() { return; } - RenderViewHost* host = GetRenderViewHostImpl(); - if (!host->GetView()) + if (!host_ || !host_->GetView()) return; last_frame_time_ = base::TimeTicks::Now(); RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( - host->GetView()); + host_->GetView()); // TODO(vkuzkokov): do not use previous frame metadata. cc::CompositorFrameMetadata& metadata = last_compositor_frame_metadata_; @@ -270,8 +272,7 @@ RendererOverridesHandler::GrantPermissionsForSetFileInputFiles( devtools::DOM::setFileInputFiles::kParamFiles; if (!params || !params->GetList(param, &file_list)) return command->InvalidParamResponse(param); - RenderViewHost* host = GetRenderViewHostImpl(); - if (!host) + if (!host_) return NULL; for (size_t i = 0; i < file_list->GetSize(); ++i) { @@ -279,7 +280,7 @@ RendererOverridesHandler::GrantPermissionsForSetFileInputFiles( if (!file_list->GetString(i, &file)) return command->InvalidParamResponse(param); ChildProcessSecurityPolicyImpl::GetInstance()->GrantReadFile( - host->GetProcess()->GetID(), base::FilePath(file)); + host_->GetProcess()->GetID(), base::FilePath(file)); } return NULL; } @@ -290,14 +291,14 @@ RendererOverridesHandler::GrantPermissionsForSetFileInputFiles( scoped_refptr<DevToolsProtocol::Response> RendererOverridesHandler::ClearBrowserCache( scoped_refptr<DevToolsProtocol::Command> command) { - GetContentClient()->browser()->ClearCache(GetRenderViewHostImpl()); + GetContentClient()->browser()->ClearCache(host_); return command->SuccessResponse(NULL); } scoped_refptr<DevToolsProtocol::Response> RendererOverridesHandler::ClearBrowserCookies( scoped_refptr<DevToolsProtocol::Command> command) { - GetContentClient()->browser()->ClearCookies(GetRenderViewHostImpl()); + GetContentClient()->browser()->ClearCookies(host_); return command->SuccessResponse(NULL); } @@ -307,9 +308,8 @@ RendererOverridesHandler::ClearBrowserCookies( scoped_refptr<DevToolsProtocol::Response> RendererOverridesHandler::PageDisable( scoped_refptr<DevToolsProtocol::Command> command) { - RenderViewHostImpl* host = GetRenderViewHostImpl(); - if (screencast_command_ && host) - host->SetTouchEventEmulationEnabled(false, false); + if (screencast_command_ && host_) + host_->SetTouchEventEmulationEnabled(false, false); screencast_command_ = NULL; return NULL; } @@ -331,7 +331,10 @@ RendererOverridesHandler::PageHandleJavaScriptDialog( prompt_override_ptr = NULL; } - WebContents* web_contents = agent_->GetWebContents(); + if (!host_) + return command->InternalErrorResponse("Could not connect to view"); + + WebContents* web_contents = WebContents::FromRenderViewHost(host_); if (web_contents) { JavaScriptDialogManager* manager = web_contents->GetDelegate()->GetJavaScriptDialogManager(); @@ -356,7 +359,10 @@ RendererOverridesHandler::PageNavigate( if (!gurl.is_valid()) return command->InternalErrorResponse("Cannot navigate to invalid URL"); - WebContents* web_contents = agent_->GetWebContents(); + if (!host_) + return command->InternalErrorResponse("Could not connect to view"); + + WebContents* web_contents = WebContents::FromRenderViewHost(host_); if (web_contents) { web_contents->GetController() .LoadURL(gurl, Referrer(), PAGE_TRANSITION_TYPED, std::string()); @@ -370,7 +376,10 @@ RendererOverridesHandler::PageNavigate( scoped_refptr<DevToolsProtocol::Response> RendererOverridesHandler::PageReload( scoped_refptr<DevToolsProtocol::Command> command) { - WebContents* web_contents = agent_->GetWebContents(); + if (!host_) + return command->InternalErrorResponse("Could not connect to view"); + + WebContents* web_contents = WebContents::FromRenderViewHost(host_); if (web_contents) { // Override only if it is crashed. if (!web_contents->IsCrashed()) @@ -385,7 +394,9 @@ RendererOverridesHandler::PageReload( scoped_refptr<DevToolsProtocol::Response> RendererOverridesHandler::PageGetNavigationHistory( scoped_refptr<DevToolsProtocol::Command> command) { - WebContents* web_contents = agent_->GetWebContents(); + if (!host_) + return command->InternalErrorResponse("Could not connect to view"); + WebContents* web_contents = WebContents::FromRenderViewHost(host_); if (web_contents) { base::DictionaryValue* result = new base::DictionaryValue(); NavigationController& controller = web_contents->GetController(); @@ -425,7 +436,10 @@ RendererOverridesHandler::PageNavigateToHistoryEntry( return command->InvalidParamResponse(param); } - WebContents* web_contents = agent_->GetWebContents(); + if (!host_) + return command->InternalErrorResponse("Could not connect to view"); + + WebContents* web_contents = WebContents::FromRenderViewHost(host_); if (web_contents) { NavigationController& controller = web_contents->GetController(); for (int i = 0; i != controller.GetEntryCount(); ++i) { @@ -442,11 +456,10 @@ RendererOverridesHandler::PageNavigateToHistoryEntry( scoped_refptr<DevToolsProtocol::Response> RendererOverridesHandler::PageCaptureScreenshot( scoped_refptr<DevToolsProtocol::Command> command) { - RenderViewHostImpl* host = GetRenderViewHostImpl(); - if (!host->GetView()) - return command->InternalErrorResponse("Unable to access the view"); + if (!host_ || !host_->GetView()) + return command->InternalErrorResponse("Could not connect to view"); - host->GetSnapshotFromBrowser( + host_->GetSnapshotFromBrowser( base::Bind(&RendererOverridesHandler::ScreenshotCaptured, weak_factory_.GetWeakPtr(), command)); return command->AsyncResponsePromise(); @@ -490,15 +503,16 @@ scoped_refptr<DevToolsProtocol::Response> RendererOverridesHandler::PageStartScreencast( scoped_refptr<DevToolsProtocol::Command> command) { screencast_command_ = command; - RenderViewHostImpl* host = GetRenderViewHostImpl(); - host->SetTouchEventEmulationEnabled(true, true); - bool visible = !host->is_hidden(); + if (!host_) + return command->InternalErrorResponse("Could not connect to view"); + host_->SetTouchEventEmulationEnabled(true, true); + bool visible = !host_->is_hidden(); NotifyScreencastVisibility(visible); if (visible) { if (has_last_compositor_frame_metadata_) InnerSwapCompositorFrame(); else - host->Send(new ViewMsg_ForceRedraw(host->GetRoutingID(), 0)); + host_->Send(new ViewMsg_ForceRedraw(host_->GetRoutingID(), 0)); } return command->SuccessResponse(NULL); } @@ -508,9 +522,8 @@ RendererOverridesHandler::PageStopScreencast( scoped_refptr<DevToolsProtocol::Command> command) { last_frame_time_ = base::TimeTicks(); screencast_command_ = NULL; - RenderViewHostImpl* host = GetRenderViewHostImpl(); - if (host) - host->SetTouchEventEmulationEnabled(false, false); + if (host_) + host_->SetTouchEventEmulationEnabled(false, false); return command->SuccessResponse(NULL); } @@ -801,10 +814,11 @@ RendererOverridesHandler::PageQueryUsageAndQuota( weak_factory_.GetWeakPtr(), command); - scoped_refptr<quota::QuotaManager> quota_manager = GetRenderViewHostImpl() - ->GetProcess() - ->GetStoragePartition() - ->GetQuotaManager(); + if (!host_) + return command->InternalErrorResponse("Could not connect to view"); + + scoped_refptr<quota::QuotaManager> quota_manager = + host_->GetProcess()->GetStoragePartition()->GetQuotaManager(); BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, @@ -954,17 +968,14 @@ RendererOverridesHandler::InputEmulateTouchFromMouseEvent( devtools::Input::emulateTouchFromMouseEvent::kParamButton); } - RenderViewHost* host = GetRenderViewHostImpl(); + if (!host_) + return command->InternalErrorResponse("Could not connect to view"); + if (event->type == WebInputEvent::MouseWheel) - host->ForwardWheelEvent(wheel_event); + host_->ForwardWheelEvent(wheel_event); else - host->ForwardMouseEvent(mouse_event); + host_->ForwardMouseEvent(mouse_event); return command->SuccessResponse(NULL); } -RenderViewHostImpl* RendererOverridesHandler::GetRenderViewHostImpl() { - return static_cast<RenderViewHostImpl*>( - agent_->GetWebContents()->GetRenderViewHost()); -} - } // namespace content diff --git a/content/browser/devtools/renderer_overrides_handler.h b/content/browser/devtools/renderer_overrides_handler.h index 4f5076e..774a683 100644 --- a/content/browser/devtools/renderer_overrides_handler.h +++ b/content/browser/devtools/renderer_overrides_handler.h @@ -23,7 +23,6 @@ class Message; namespace content { -class DevToolsAgentHost; class DevToolsTracingHandler; class RenderViewHostImpl; @@ -33,13 +32,14 @@ class RenderViewHostImpl; class CONTENT_EXPORT RendererOverridesHandler : public DevToolsProtocol::Handler { public: - explicit RendererOverridesHandler(DevToolsAgentHost* agent); + RendererOverridesHandler(); virtual ~RendererOverridesHandler(); void OnClientDetached(); void OnSwapCompositorFrame(const cc::CompositorFrameMetadata& frame_metadata); void OnVisibilityChanged(bool visible); - void OnRenderViewHostChanged(); + void SetRenderViewHost(RenderViewHostImpl* host); + void ClearRenderViewHost(); bool OnSetTouchEventEmulationEnabled(); private: @@ -102,9 +102,7 @@ class CONTENT_EXPORT RendererOverridesHandler scoped_refptr<DevToolsProtocol::Response> InputEmulateTouchFromMouseEvent( scoped_refptr<DevToolsProtocol::Command> command); - RenderViewHostImpl* GetRenderViewHostImpl(); - - DevToolsAgentHost* agent_; + RenderViewHostImpl* host_; scoped_refptr<DevToolsProtocol::Command> screencast_command_; bool has_last_compositor_frame_metadata_; cc::CompositorFrameMetadata last_compositor_frame_metadata_; |