Index: content/browser/devtools/protocol/emulation_handler.cc |
diff --git a/content/browser/devtools/protocol/emulation_handler.cc b/content/browser/devtools/protocol/emulation_handler.cc |
index c57d8999dacc729c0be2ccba774181b441605b21..e5f2fed27be85190242e44ceec143a5b4c688491 100644 |
--- a/content/browser/devtools/protocol/emulation_handler.cc |
+++ b/content/browser/devtools/protocol/emulation_handler.cc |
@@ -40,7 +40,7 @@ EmulationHandler::EmulationHandler(page::PageHandler* page_handler) |
: touch_emulation_enabled_(false), |
device_emulation_enabled_(false), |
page_handler_(page_handler), |
- host_(nullptr) |
+ web_contents_(nullptr) |
{ |
page_handler->SetScreencastListener(this); |
} |
@@ -52,11 +52,11 @@ void EmulationHandler::ScreencastEnabledChanged() { |
UpdateTouchEventEmulationState(); |
} |
-void EmulationHandler::SetRenderViewHost(RenderViewHostImpl* host) { |
- if (host_ == host) |
+void EmulationHandler::SetWebContents(WebContentsImpl* web_contents) { |
+ if (web_contents_ == web_contents) |
return; |
- host_ = host; |
+ web_contents_ = web_contents; |
UpdateTouchEventEmulationState(); |
UpdateDeviceEmulationState(); |
} |
@@ -70,16 +70,11 @@ void EmulationHandler::Detached() { |
Response EmulationHandler::SetGeolocationOverride( |
double* latitude, double* longitude, double* accuracy) { |
- if (!host_) |
+ if (!web_contents_) |
return Response::InternalError("Could not connect to view"); |
- WebContentsImpl* web_contents = static_cast<WebContentsImpl*>( |
- WebContents::FromRenderViewHost(host_)); |
- if (!web_contents) |
- return Response::InternalError("No WebContents to override"); |
- |
GeolocationServiceContext* geolocation_context = |
- web_contents->GetGeolocationServiceContext(); |
+ web_contents_->GetGeolocationServiceContext(); |
scoped_ptr<Geoposition> geoposition(new Geoposition()); |
if (latitude && longitude && accuracy) { |
geoposition->latitude = *latitude; |
@@ -97,16 +92,11 @@ Response EmulationHandler::SetGeolocationOverride( |
} |
Response EmulationHandler::ClearGeolocationOverride() { |
- if (!host_) |
+ if (!web_contents_) |
return Response::InternalError("Could not connect to view"); |
- WebContentsImpl* web_contents = static_cast<WebContentsImpl*>( |
- WebContents::FromRenderViewHost(host_)); |
- if (!web_contents) |
- return Response::InternalError("No WebContents to override"); |
- |
GeolocationServiceContext* geolocation_context = |
- web_contents->GetGeolocationServiceContext(); |
+ web_contents_->GetGeolocationServiceContext(); |
geolocation_context->ClearOverride(); |
return Response::OK(); |
} |
@@ -124,15 +114,11 @@ Response EmulationHandler::CanEmulate(bool* result) { |
#if defined(OS_ANDROID) |
*result = false; |
#else |
- if (host_) { |
- if (WebContents* web_contents = WebContents::FromRenderViewHost(host_)) { |
- *result = web_contents->GetMainFrame()->GetRenderViewHost() == host_; |
+ if (web_contents_) { |
+ *result = true; |
#if defined(DEBUG_DEVTOOLS) |
- *result &= !web_contents->GetVisibleURL().SchemeIs(kChromeDevToolsScheme); |
+ *result &= !web_contents_->GetVisibleURL().SchemeIs(kChromeDevToolsScheme); |
#endif // defined(DEBUG_DEVTOOLS) |
- } else { |
- *result = true; |
- } |
} else { |
*result = true; |
} |
@@ -147,7 +133,7 @@ Response EmulationHandler::SetDeviceMetricsOverride( |
const static int max_size = 10000000; |
const static double max_scale = 10; |
- if (!host_) |
+ if (!web_contents_) |
return Response::InternalError("Could not connect to view"); |
if (width < 0 || height < 0 || width > max_size || height > max_size) { |
@@ -194,28 +180,35 @@ Response EmulationHandler::ClearDeviceMetricsOverride() { |
return Response::OK(); |
} |
+RenderWidgetHostImpl* EmulationHandler::GetRenderWidgetHost() { |
+ // TODO(dgozman): there should be a way to get main RenderWidgetHost from |
+ // WebContents without RenderViewHost. |
nasko
2015/03/31 14:43:36
WebContentsImpl::GetMainFrame()->GetRenderWidgetHo
dgozman
2015/03/31 15:05:23
So, do you think it's a property of frame? This cl
dgozman
2015/03/31 16:44:59
Done.
|
+ return web_contents_ ? |
+ static_cast<RenderViewHostImpl*>(web_contents_->GetRenderViewHost()) : |
+ nullptr; |
+} |
+ |
void EmulationHandler::UpdateTouchEventEmulationState() { |
- if (!host_) |
+ if (!web_contents_) |
return; |
bool enabled = touch_emulation_enabled_ || |
page_handler_->screencast_enabled(); |
ui::GestureProviderConfigType config_type = |
TouchEmulationConfigurationToType(touch_emulation_configuration_); |
- host_->SetTouchEventEmulationEnabled(enabled, config_type); |
- WebContentsImpl* web_contents = static_cast<WebContentsImpl*>( |
- WebContents::FromRenderViewHost(host_)); |
- if (web_contents) |
- web_contents->SetForceDisableOverscrollContent(enabled); |
+ GetRenderWidgetHost()->SetTouchEventEmulationEnabled(enabled, config_type); |
+ web_contents_->SetForceDisableOverscrollContent(enabled); |
} |
void EmulationHandler::UpdateDeviceEmulationState() { |
- if (!host_) |
+ if (!web_contents_) |
return; |
+ RenderWidgetHostImpl* widget_host = GetRenderWidgetHost(); |
if (device_emulation_enabled_) { |
- host_->Send(new ViewMsg_EnableDeviceEmulation( |
- host_->GetRoutingID(), device_emulation_params_)); |
+ widget_host->Send(new ViewMsg_EnableDeviceEmulation( |
+ widget_host->GetRoutingID(), device_emulation_params_)); |
} else { |
- host_->Send(new ViewMsg_DisableDeviceEmulation(host_->GetRoutingID())); |
+ widget_host->Send(new ViewMsg_DisableDeviceEmulation( |
+ widget_host->GetRoutingID())); |
} |
} |