Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(64)

Side by Side Diff: third_party/WebKit/Source/web/DevToolsEmulator.cpp

Issue 1622633003: [DevTools] Check that mainFrameImpl() has been initalized before accessing it. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: more checks, better comments Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698