| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "web/DevToolsEmulator.h" | 5 #include "web/DevToolsEmulator.h" |
| 6 | 6 |
| 7 #include "core/frame/FrameHost.h" | 7 #include "core/frame/FrameHost.h" |
| 8 #include "core/frame/FrameView.h" | 8 #include "core/frame/FrameView.h" |
| 9 #include "core/frame/Settings.h" | 9 #include "core/frame/Settings.h" |
| 10 #include "core/page/Page.h" | 10 #include "core/page/Page.h" |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 | 222 |
| 223 m_webViewImpl->page()->settings().setDeviceScaleAdjustment(calculateDeviceSc
aleAdjustment(params.viewSize.width, params.viewSize.height, params.deviceScaleF
actor)); | 223 m_webViewImpl->page()->settings().setDeviceScaleAdjustment(calculateDeviceSc
aleAdjustment(params.viewSize.width, params.viewSize.height, params.deviceScaleF
actor)); |
| 224 | 224 |
| 225 if (params.screenPosition == WebDeviceEmulationParams::Mobile) | 225 if (params.screenPosition == WebDeviceEmulationParams::Mobile) |
| 226 enableMobileEmulation(); | 226 enableMobileEmulation(); |
| 227 else | 227 else |
| 228 disableMobileEmulation(); | 228 disableMobileEmulation(); |
| 229 | 229 |
| 230 m_webViewImpl->setCompositorDeviceScaleFactorOverride(params.deviceScaleFact
or); | 230 m_webViewImpl->setCompositorDeviceScaleFactorOverride(params.deviceScaleFact
or); |
| 231 m_webViewImpl->setRootLayerTransform(WebSize(params.offset.x, params.offset.
y), params.scale); | 231 m_webViewImpl->setRootLayerTransform(WebSize(params.offset.x, params.offset.
y), params.scale); |
| 232 if (Document* document = m_webViewImpl->mainFrameImpl()->frame()->document()
) | 232 // TODO(dgozman): mainFrameImpl() is null when it's remote. Figure out how |
| 233 document->mediaQueryAffectingValueChanged(); | 233 // we end up with enabling emulation in this case. |
| 234 if (m_webViewImpl->mainFrameImpl()) { |
| 235 if (Document* document = m_webViewImpl->mainFrameImpl()->frame()->docume
nt()) |
| 236 document->mediaQueryAffectingValueChanged(); |
| 237 } |
| 234 } | 238 } |
| 235 | 239 |
| 236 void DevToolsEmulator::disableDeviceEmulation() | 240 void DevToolsEmulator::disableDeviceEmulation() |
| 237 { | 241 { |
| 238 if (!m_deviceMetricsEnabled) | 242 if (!m_deviceMetricsEnabled) |
| 239 return; | 243 return; |
| 240 | 244 |
| 241 m_deviceMetricsEnabled = false; | 245 m_deviceMetricsEnabled = false; |
| 242 m_webViewImpl->setBackgroundColorOverride(Color::transparent); | 246 m_webViewImpl->setBackgroundColorOverride(Color::transparent); |
| 243 m_webViewImpl->updateShowFPSCounter(); | 247 m_webViewImpl->updateShowFPSCounter(); |
| 244 m_webViewImpl->page()->settings().setDeviceScaleAdjustment(m_embedderDeviceS
caleAdjustment); | 248 m_webViewImpl->page()->settings().setDeviceScaleAdjustment(m_embedderDeviceS
caleAdjustment); |
| 245 disableMobileEmulation(); | 249 disableMobileEmulation(); |
| 246 m_webViewImpl->setCompositorDeviceScaleFactorOverride(0.f); | 250 m_webViewImpl->setCompositorDeviceScaleFactorOverride(0.f); |
| 247 m_webViewImpl->setRootLayerTransform(WebSize(0.f, 0.f), 1.f); | 251 m_webViewImpl->setRootLayerTransform(WebSize(0.f, 0.f), 1.f); |
| 248 m_webViewImpl->setPageScaleFactor(1.f); | 252 m_webViewImpl->setPageScaleFactor(1.f); |
| 249 if (Document* document = m_webViewImpl->mainFrameImpl()->frame()->document()
) | 253 // mainFrameImpl() could be null during cleanup or remote <-> local swap. |
| 250 document->mediaQueryAffectingValueChanged(); | 254 if (m_webViewImpl->mainFrameImpl()) { |
| 255 if (Document* document = m_webViewImpl->mainFrameImpl()->frame()->docume
nt()) |
| 256 document->mediaQueryAffectingValueChanged(); |
| 257 } |
| 251 } | 258 } |
| 252 | 259 |
| 253 bool DevToolsEmulator::resizeIsDeviceSizeChange() | 260 bool DevToolsEmulator::resizeIsDeviceSizeChange() |
| 254 { | 261 { |
| 255 return m_deviceMetricsEnabled && m_emulateMobileEnabled; | 262 return m_deviceMetricsEnabled && m_emulateMobileEnabled; |
| 256 } | 263 } |
| 257 | 264 |
| 258 void DevToolsEmulator::enableMobileEmulation() | 265 void DevToolsEmulator::enableMobileEmulation() |
| 259 { | 266 { |
| 260 if (m_emulateMobileEnabled) | 267 if (m_emulateMobileEnabled) |
| (...skipping 12 matching lines...) Expand all Loading... |
| 273 m_webViewImpl->page()->settings().setAvailablePointerTypes(PointerTypeCoarse
); | 280 m_webViewImpl->page()->settings().setAvailablePointerTypes(PointerTypeCoarse
); |
| 274 m_webViewImpl->page()->settings().setPrimaryPointerType(PointerTypeCoarse); | 281 m_webViewImpl->page()->settings().setPrimaryPointerType(PointerTypeCoarse); |
| 275 m_webViewImpl->page()->settings().setAvailableHoverTypes(HoverTypeOnDemand); | 282 m_webViewImpl->page()->settings().setAvailableHoverTypes(HoverTypeOnDemand); |
| 276 m_webViewImpl->page()->settings().setPrimaryHoverType(HoverTypeOnDemand); | 283 m_webViewImpl->page()->settings().setPrimaryHoverType(HoverTypeOnDemand); |
| 277 m_webViewImpl->page()->settings().setResizeIsDeviceSizeChange(true); | 284 m_webViewImpl->page()->settings().setResizeIsDeviceSizeChange(true); |
| 278 m_webViewImpl->setZoomFactorOverride(1); | 285 m_webViewImpl->setZoomFactorOverride(1); |
| 279 | 286 |
| 280 m_originalDefaultMinimumPageScaleFactor = m_webViewImpl->defaultMinimumPageS
caleFactor(); | 287 m_originalDefaultMinimumPageScaleFactor = m_webViewImpl->defaultMinimumPageS
caleFactor(); |
| 281 m_originalDefaultMaximumPageScaleFactor = m_webViewImpl->defaultMaximumPageS
caleFactor(); | 288 m_originalDefaultMaximumPageScaleFactor = m_webViewImpl->defaultMaximumPageS
caleFactor(); |
| 282 m_webViewImpl->setDefaultPageScaleLimits(0.25f, 5); | 289 m_webViewImpl->setDefaultPageScaleLimits(0.25f, 5); |
| 283 m_webViewImpl->mainFrameImpl()->frameView()->layout(); | 290 // TODO(dgozman): mainFrameImpl() is null when it's remote. Figure out how |
| 291 // we end up with enabling emulation in this case. |
| 292 if (m_webViewImpl->mainFrameImpl()) |
| 293 m_webViewImpl->mainFrameImpl()->frameView()->layout(); |
| 284 } | 294 } |
| 285 | 295 |
| 286 void DevToolsEmulator::disableMobileEmulation() | 296 void DevToolsEmulator::disableMobileEmulation() |
| 287 { | 297 { |
| 288 if (!m_emulateMobileEnabled) | 298 if (!m_emulateMobileEnabled) |
| 289 return; | 299 return; |
| 290 RuntimeEnabledFeatures::setOverlayScrollbarsEnabled(m_isOverlayScrollbarsEna
bled); | 300 RuntimeEnabledFeatures::setOverlayScrollbarsEnabled(m_isOverlayScrollbarsEna
bled); |
| 291 m_webViewImpl->disableViewport(); | 301 m_webViewImpl->disableViewport(); |
| 292 m_webViewImpl->settings()->setViewportMetaEnabled(false); | 302 m_webViewImpl->settings()->setViewportMetaEnabled(false); |
| 293 m_webViewImpl->page()->frameHost().visualViewport().initializeScrollbars(); | 303 m_webViewImpl->page()->frameHost().visualViewport().initializeScrollbars(); |
| 294 m_webViewImpl->settings()->setShrinksViewportContentToFit(false); | 304 m_webViewImpl->settings()->setShrinksViewportContentToFit(false); |
| 295 m_webViewImpl->page()->settings().setTextAutosizingEnabled(m_embedderTextAut
osizingEnabled); | 305 m_webViewImpl->page()->settings().setTextAutosizingEnabled(m_embedderTextAut
osizingEnabled); |
| 296 m_webViewImpl->page()->settings().setPreferCompositingToLCDTextEnabled(m_emb
edderPreferCompositingToLCDTextEnabled); | 306 m_webViewImpl->page()->settings().setPreferCompositingToLCDTextEnabled(m_emb
edderPreferCompositingToLCDTextEnabled); |
| 297 m_webViewImpl->page()->settings().setUseMobileViewportStyle(m_embedderUseMob
ileViewport); | 307 m_webViewImpl->page()->settings().setUseMobileViewportStyle(m_embedderUseMob
ileViewport); |
| 298 m_webViewImpl->page()->settings().setPluginsEnabled(m_embedderPluginsEnabled
); | 308 m_webViewImpl->page()->settings().setPluginsEnabled(m_embedderPluginsEnabled
); |
| 299 m_webViewImpl->page()->settings().setAvailablePointerTypes(m_embedderAvailab
lePointerTypes); | 309 m_webViewImpl->page()->settings().setAvailablePointerTypes(m_embedderAvailab
lePointerTypes); |
| 300 m_webViewImpl->page()->settings().setPrimaryPointerType(m_embedderPrimaryPoi
nterType); | 310 m_webViewImpl->page()->settings().setPrimaryPointerType(m_embedderPrimaryPoi
nterType); |
| 301 m_webViewImpl->page()->settings().setAvailableHoverTypes(m_embedderAvailable
HoverTypes); | 311 m_webViewImpl->page()->settings().setAvailableHoverTypes(m_embedderAvailable
HoverTypes); |
| 302 m_webViewImpl->page()->settings().setPrimaryHoverType(m_embedderPrimaryHover
Type); | 312 m_webViewImpl->page()->settings().setPrimaryHoverType(m_embedderPrimaryHover
Type); |
| 303 m_webViewImpl->page()->settings().setResizeIsDeviceSizeChange(false); | 313 m_webViewImpl->page()->settings().setResizeIsDeviceSizeChange(false); |
| 304 m_webViewImpl->setZoomFactorOverride(0); | 314 m_webViewImpl->setZoomFactorOverride(0); |
| 305 m_emulateMobileEnabled = false; | 315 m_emulateMobileEnabled = false; |
| 306 m_webViewImpl->setDefaultPageScaleLimits( | 316 m_webViewImpl->setDefaultPageScaleLimits( |
| 307 m_originalDefaultMinimumPageScaleFactor, | 317 m_originalDefaultMinimumPageScaleFactor, |
| 308 m_originalDefaultMaximumPageScaleFactor); | 318 m_originalDefaultMaximumPageScaleFactor); |
| 309 m_webViewImpl->mainFrameImpl()->frameView()->layout(); | 319 // mainFrameImpl() could be null during cleanup or remote <-> local swap. |
| 320 if (m_webViewImpl->mainFrameImpl()) |
| 321 m_webViewImpl->mainFrameImpl()->frameView()->layout(); |
| 310 } | 322 } |
| 311 | 323 |
| 312 void DevToolsEmulator::setTouchEventEmulationEnabled(bool enabled) | 324 void DevToolsEmulator::setTouchEventEmulationEnabled(bool enabled) |
| 313 { | 325 { |
| 314 if (m_touchEventEmulationEnabled == enabled) | 326 if (m_touchEventEmulationEnabled == enabled) |
| 315 return; | 327 return; |
| 316 if (!m_touchEventEmulationEnabled) { | 328 if (!m_touchEventEmulationEnabled) { |
| 317 m_originalTouchEnabled = RuntimeEnabledFeatures::touchEnabled(); | 329 m_originalTouchEnabled = RuntimeEnabledFeatures::touchEnabled(); |
| 318 m_originalDeviceSupportsMouse = m_webViewImpl->page()->settings().device
SupportsMouse(); | 330 m_originalDeviceSupportsMouse = m_webViewImpl->page()->settings().device
SupportsMouse(); |
| 319 m_originalDeviceSupportsTouch = m_webViewImpl->page()->settings().device
SupportsTouch(); | 331 m_originalDeviceSupportsTouch = m_webViewImpl->page()->settings().device
SupportsTouch(); |
| 320 m_originalMaxTouchPoints = m_webViewImpl->page()->settings().maxTouchPoi
nts(); | 332 m_originalMaxTouchPoints = m_webViewImpl->page()->settings().maxTouchPoi
nts(); |
| 321 } | 333 } |
| 322 RuntimeEnabledFeatures::setTouchEnabled(enabled ? true : m_originalTouchEnab
led); | 334 RuntimeEnabledFeatures::setTouchEnabled(enabled ? true : m_originalTouchEnab
led); |
| 323 if (!m_originalDeviceSupportsTouch) { | 335 if (!m_originalDeviceSupportsTouch) { |
| 324 m_webViewImpl->page()->settings().setDeviceSupportsMouse(enabled ? false
: m_originalDeviceSupportsMouse); | 336 m_webViewImpl->page()->settings().setDeviceSupportsMouse(enabled ? false
: m_originalDeviceSupportsMouse); |
| 325 m_webViewImpl->page()->settings().setDeviceSupportsTouch(enabled ? true
: m_originalDeviceSupportsTouch); | 337 m_webViewImpl->page()->settings().setDeviceSupportsTouch(enabled ? true
: m_originalDeviceSupportsTouch); |
| 326 // Currently emulation does not provide multiple touch points. | 338 // Currently emulation does not provide multiple touch points. |
| 327 m_webViewImpl->page()->settings().setMaxTouchPoints(enabled ? 1 : m_orig
inalMaxTouchPoints); | 339 m_webViewImpl->page()->settings().setMaxTouchPoints(enabled ? 1 : m_orig
inalMaxTouchPoints); |
| 328 } | 340 } |
| 329 m_touchEventEmulationEnabled = enabled; | 341 m_touchEventEmulationEnabled = enabled; |
| 330 m_webViewImpl->mainFrameImpl()->frameView()->layout(); | 342 // TODO(dgozman): mainFrameImpl() check in this class should be unnecessary. |
| 343 // It is only needed when we reattach and restore InspectorEmulationAgent, |
| 344 // which happens before everything has been setup correctly, and therefore |
| 345 // fails during remote -> local main frame transition. |
| 346 // We should instead route emulation from browser through the WebViewImpl |
| 347 // to the local main frame, and remove InspectorEmulationAgent entirely. |
| 348 if (m_webViewImpl->mainFrameImpl()) |
| 349 m_webViewImpl->mainFrameImpl()->frameView()->layout(); |
| 331 } | 350 } |
| 332 | 351 |
| 333 void DevToolsEmulator::setScriptExecutionDisabled(bool scriptExecutionDisabled) | 352 void DevToolsEmulator::setScriptExecutionDisabled(bool scriptExecutionDisabled) |
| 334 { | 353 { |
| 335 m_scriptExecutionDisabled = scriptExecutionDisabled; | 354 m_scriptExecutionDisabled = scriptExecutionDisabled; |
| 336 m_webViewImpl->page()->settings().setScriptEnabled(m_scriptExecutionDisabled
? false : m_embedderScriptEnabled); | 355 m_webViewImpl->page()->settings().setScriptEnabled(m_scriptExecutionDisabled
? false : m_embedderScriptEnabled); |
| 337 } | 356 } |
| 338 | 357 |
| 339 bool DevToolsEmulator::handleInputEvent(const WebInputEvent& inputEvent) | 358 bool DevToolsEmulator::handleInputEvent(const WebInputEvent& inputEvent) |
| 340 { | 359 { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 365 m_lastPinchAnchorCss.clear(); | 384 m_lastPinchAnchorCss.clear(); |
| 366 m_lastPinchAnchorDip.clear(); | 385 m_lastPinchAnchorDip.clear(); |
| 367 } | 386 } |
| 368 return true; | 387 return true; |
| 369 } | 388 } |
| 370 | 389 |
| 371 return false; | 390 return false; |
| 372 } | 391 } |
| 373 | 392 |
| 374 } // namespace blink | 393 } // namespace blink |
| OLD | NEW |