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 |