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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeModel.js

Issue 1739533005: [DevTools] Add touch to sensors view. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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
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 /** 5 /**
6 * @constructor 6 * @constructor
7 * @param {function()} updateCallback 7 * @param {function()} updateCallback
8 * @implements {WebInspector.TargetManager.Observer} 8 * @implements {WebInspector.TargetManager.Observer}
9 */ 9 */
10 WebInspector.DeviceModeModel = function(updateCallback) 10 WebInspector.DeviceModeModel = function(updateCallback)
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 this._uaSetting.addChangeListener(this._uaSettingChanged, this); 44 this._uaSetting.addChangeListener(this._uaSettingChanged, this);
45 this._deviceScaleFactorSetting = WebInspector.settings.createSetting("emulat ion.deviceScaleFactor", 0); 45 this._deviceScaleFactorSetting = WebInspector.settings.createSetting("emulat ion.deviceScaleFactor", 0);
46 this._deviceScaleFactorSetting.addChangeListener(this._deviceScaleFactorSett ingChanged, this); 46 this._deviceScaleFactorSetting.addChangeListener(this._deviceScaleFactorSett ingChanged, this);
47 47
48 /** @type {!WebInspector.DeviceModeModel.Type} */ 48 /** @type {!WebInspector.DeviceModeModel.Type} */
49 this._type = WebInspector.DeviceModeModel.Type.None; 49 this._type = WebInspector.DeviceModeModel.Type.None;
50 /** @type {?WebInspector.EmulatedDevice} */ 50 /** @type {?WebInspector.EmulatedDevice} */
51 this._device = null; 51 this._device = null;
52 /** @type {?WebInspector.EmulatedDevice.Mode} */ 52 /** @type {?WebInspector.EmulatedDevice.Mode} */
53 this._mode = null; 53 this._mode = null;
54 /** @type {boolean} */
55 this._touchEnabled = false;
56 /** @type {string} */
57 this._touchConfiguration = "";
58 /** @type {number} */ 54 /** @type {number} */
59 this._fitScale = 1; 55 this._fitScale = 1;
60 56
61 /** @type {?WebInspector.Target} */ 57 /** @type {?WebInspector.Target} */
62 this._target = null; 58 this._target = null;
63 /** @type {?function()} */ 59 /** @type {?function()} */
64 this._onTargetAvailable = null; 60 this._onTargetAvailable = null;
65 WebInspector.targetManager.observeTargets(this, WebInspector.Target.Type.Pag e); 61 WebInspector.targetManager.observeTargets(this, WebInspector.Target.Type.Pag e);
66 } 62 }
67 63
(...skipping 30 matching lines...) Expand all
98 * @param {string} value 94 * @param {string} value
99 * @return {boolean} 95 * @return {boolean}
100 */ 96 */
101 WebInspector.DeviceModeModel.deviceScaleFactorValidator = function(value) 97 WebInspector.DeviceModeModel.deviceScaleFactorValidator = function(value)
102 { 98 {
103 if (!value || (/^[\d]+(\.\d+)?|\.\d+$/.test(value) && value >= 0 && value <= 10)) 99 if (!value || (/^[\d]+(\.\d+)?|\.\d+$/.test(value) && value >= 0 && value <= 10))
104 return true; 100 return true;
105 return false; 101 return false;
106 } 102 }
107 103
108 WebInspector.DeviceModeModel._touchEventsScriptIdSymbol = Symbol("DeviceModeMode l.touchEventsScriptIdSymbol");
109 WebInspector.DeviceModeModel._defaultMobileUserAgent = "Mozilla/5.0 (Linux; Andr oid 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46. 0.2490.76 Mobile Safari/537.36"; 104 WebInspector.DeviceModeModel._defaultMobileUserAgent = "Mozilla/5.0 (Linux; Andr oid 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46. 0.2490.76 Mobile Safari/537.36";
110 WebInspector.DeviceModeModel.defaultMobileScaleFactor = 2; 105 WebInspector.DeviceModeModel.defaultMobileScaleFactor = 2;
111 106
112 WebInspector.DeviceModeModel.prototype = { 107 WebInspector.DeviceModeModel.prototype = {
113 /** 108 /**
114 * @param {!Size} availableSize 109 * @param {!Size} availableSize
115 * @param {!Size} preferredSize 110 * @param {!Size} preferredSize
116 */ 111 */
117 setAvailableSize: function(availableSize, preferredSize) 112 setAvailableSize: function(availableSize, preferredSize)
118 { 113 {
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 }, 325 },
331 326
332 /** 327 /**
333 * @override 328 * @override
334 * @param {!WebInspector.Target} target 329 * @param {!WebInspector.Target} target
335 */ 330 */
336 targetAdded: function(target) 331 targetAdded: function(target)
337 { 332 {
338 if (!this._target) { 333 if (!this._target) {
339 this._target = target; 334 this._target = target;
340 var domModel = WebInspector.DOMModel.fromTarget(this._target);
341 if (domModel)
342 domModel.addEventListener(WebInspector.DOMModel.Events.InspectMo deWillBeToggled, this._reapplyTouch, this);
343 if (this._onTargetAvailable) { 335 if (this._onTargetAvailable) {
344 var callback = this._onTargetAvailable; 336 var callback = this._onTargetAvailable;
345 this._onTargetAvailable = null; 337 this._onTargetAvailable = null;
346 callback(); 338 callback();
347 } else {
348 this._reapplyTouch();
349 } 339 }
350 } 340 }
351 }, 341 },
352 342
353 /** 343 /**
354 * @override 344 * @override
355 * @param {!WebInspector.Target} target 345 * @param {!WebInspector.Target} target
356 */ 346 */
357 targetRemoved: function(target) 347 targetRemoved: function(target)
358 { 348 {
359 if (this._target === target) { 349 if (this._target === target)
360 var domModel = WebInspector.DOMModel.fromTarget(this._target);
361 if (domModel)
362 domModel.removeEventListener(WebInspector.DOMModel.Events.Inspec tModeWillBeToggled, this._reapplyTouch, this);
363 this._target = null; 350 this._target = null;
364 }
365 }, 351 },
366 352
367 _scaleSettingChanged: function() 353 _scaleSettingChanged: function()
368 { 354 {
369 this._calculateAndEmulate(false); 355 this._calculateAndEmulate(false);
370 }, 356 },
371 357
372 _widthSettingChanged: function() 358 _widthSettingChanged: function()
373 { 359 {
374 this._calculateAndEmulate(false); 360 this._calculateAndEmulate(false);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 401
416 if (this._type === WebInspector.DeviceModeModel.Type.Device) { 402 if (this._type === WebInspector.DeviceModeModel.Type.Device) {
417 var orientation = this._device.orientationByName(this._mode.orientat ion); 403 var orientation = this._device.orientationByName(this._mode.orientat ion);
418 this._fitScale = this._calculateFitScale(orientation.width, orientat ion.height); 404 this._fitScale = this._calculateFitScale(orientation.width, orientat ion.height);
419 if (this._device.mobile()) 405 if (this._device.mobile())
420 this._appliedUserAgentType = this._device.touch() ? WebInspector .DeviceModeModel.UA.Mobile : WebInspector.DeviceModeModel.UA.MobileNoTouch; 406 this._appliedUserAgentType = this._device.touch() ? WebInspector .DeviceModeModel.UA.Mobile : WebInspector.DeviceModeModel.UA.MobileNoTouch;
421 else 407 else
422 this._appliedUserAgentType = this._device.touch() ? WebInspector .DeviceModeModel.UA.DesktopTouch : WebInspector.DeviceModeModel.UA.Desktop; 408 this._appliedUserAgentType = this._device.touch() ? WebInspector .DeviceModeModel.UA.DesktopTouch : WebInspector.DeviceModeModel.UA.Desktop;
423 this._applyDeviceMetrics(new Size(orientation.width, orientation.hei ght), this._mode.insets, this._scaleSetting.get(), this._device.deviceScaleFacto r, this._device.mobile(), this._mode.orientation == WebInspector.EmulatedDevice. Horizontal ? "landscapePrimary" : "portraitPrimary", resetPageScaleFactor); 409 this._applyDeviceMetrics(new Size(orientation.width, orientation.hei ght), this._mode.insets, this._scaleSetting.get(), this._device.deviceScaleFacto r, this._device.mobile(), this._mode.orientation == WebInspector.EmulatedDevice. Horizontal ? "landscapePrimary" : "portraitPrimary", resetPageScaleFactor);
424 this._applyUserAgent(this._device.userAgent); 410 this._applyUserAgent(this._device.userAgent);
411 this._applyTouch(this._device.touch(), this._device.mobile());
425 } else if (this._type === WebInspector.DeviceModeModel.Type.None) { 412 } else if (this._type === WebInspector.DeviceModeModel.Type.None) {
426 this._fitScale = this._calculateFitScale(this._availableSize.width, this._availableSize.height); 413 this._fitScale = this._calculateFitScale(this._availableSize.width, this._availableSize.height);
427 this._appliedUserAgentType = WebInspector.DeviceModeModel.UA.Desktop ; 414 this._appliedUserAgentType = WebInspector.DeviceModeModel.UA.Desktop ;
428 this._applyDeviceMetrics(this._availableSize, new Insets(0, 0, 0, 0) , 1, 0, false, "", resetPageScaleFactor); 415 this._applyDeviceMetrics(this._availableSize, new Insets(0, 0, 0, 0) , 1, 0, false, "", resetPageScaleFactor);
429 this._applyUserAgent(""); 416 this._applyUserAgent("");
417 this._applyTouch(false, false);
430 } else if (this._type === WebInspector.DeviceModeModel.Type.Responsive) { 418 } else if (this._type === WebInspector.DeviceModeModel.Type.Responsive) {
431 var screenWidth = this._widthSetting.get(); 419 var screenWidth = this._widthSetting.get();
432 if (!screenWidth || screenWidth > this._preferredScaledWidth()) 420 if (!screenWidth || screenWidth > this._preferredScaledWidth())
433 screenWidth = this._preferredScaledWidth(); 421 screenWidth = this._preferredScaledWidth();
434 var screenHeight = this._heightSetting.get(); 422 var screenHeight = this._heightSetting.get();
435 if (!screenHeight || screenHeight > this._preferredScaledHeight()) 423 if (!screenHeight || screenHeight > this._preferredScaledHeight())
436 screenHeight = this._preferredScaledHeight(); 424 screenHeight = this._preferredScaledHeight();
437 var mobile = this._uaSetting.get() === WebInspector.DeviceModeModel. UA.Mobile || this._uaSetting.get() === WebInspector.DeviceModeModel.UA.MobileNoT ouch; 425 var mobile = this._uaSetting.get() === WebInspector.DeviceModeModel. UA.Mobile || this._uaSetting.get() === WebInspector.DeviceModeModel.UA.MobileNoT ouch;
438 var defaultDeviceScaleFactor = mobile ? WebInspector.DeviceModeModel .defaultMobileScaleFactor : 0; 426 var defaultDeviceScaleFactor = mobile ? WebInspector.DeviceModeModel .defaultMobileScaleFactor : 0;
439 this._fitScale = this._calculateFitScale(this._widthSetting.get(), t his._heightSetting.get()); 427 this._fitScale = this._calculateFitScale(this._widthSetting.get(), t his._heightSetting.get());
440 this._appliedUserAgentType = this._uaSetting.get(); 428 this._appliedUserAgentType = this._uaSetting.get();
441 this._applyDeviceMetrics(new Size(screenWidth, screenHeight), new In sets(0, 0, 0, 0), this._scaleSetting.get(), this._deviceScaleFactorSetting.get() || defaultDeviceScaleFactor, mobile, screenHeight >= screenWidth ? "portraitPri mary" : "landscapePrimary", resetPageScaleFactor); 429 this._applyDeviceMetrics(new Size(screenWidth, screenHeight), new In sets(0, 0, 0, 0), this._scaleSetting.get(), this._deviceScaleFactorSetting.get() || defaultDeviceScaleFactor, mobile, screenHeight >= screenWidth ? "portraitPri mary" : "landscapePrimary", resetPageScaleFactor);
442 this._applyUserAgent(mobile ? WebInspector.DeviceModeModel._defaultM obileUserAgent : ""); 430 this._applyUserAgent(mobile ? WebInspector.DeviceModeModel._defaultM obileUserAgent : "");
431 this._applyTouch(this._uaSetting.get() === WebInspector.DeviceModeMo del.UA.DesktopTouch || this._uaSetting.get() === WebInspector.DeviceModeModel.UA .Mobile, this._uaSetting.get() === WebInspector.DeviceModeModel.UA.Mobile);
443 } 432 }
444 this._reapplyTouch();
445 this._updateCallback.call(null); 433 this._updateCallback.call(null);
446 }, 434 },
447 435
448 /** 436 /**
449 * @param {number} screenWidth 437 * @param {number} screenWidth
450 * @param {number} screenHeight 438 * @param {number} screenHeight
451 * @return {number} 439 * @return {number}
452 */ 440 */
453 _calculateFitScale: function(screenWidth, screenHeight) 441 _calculateFitScale: function(screenWidth, screenHeight)
454 { 442 {
455 var scale = Math.min(screenWidth ? this._preferredSize.width / screenWid th: 1, screenHeight ? this._preferredSize.height / screenHeight : 1); 443 var scale = Math.min(screenWidth ? this._preferredSize.width / screenWid th: 1, screenHeight ? this._preferredSize.height / screenHeight : 1);
456 return Math.min(scale, 1); 444 return Math.min(scale, 1);
457 }, 445 },
458 446
459 /** 447 /**
460 * @param {number} width 448 * @param {number} width
461 * @param {number} height 449 * @param {number} height
462 */ 450 */
463 setSizeAndScaleToFit: function(width, height) 451 setSizeAndScaleToFit: function(width, height)
464 { 452 {
465 this._scaleSetting.set(this._calculateFitScale(width, height)); 453 this._scaleSetting.set(this._calculateFitScale(width, height));
466 this.setWidth(width); 454 this.setWidth(width);
467 }, 455 },
468 456
469 _reapplyTouch: function()
470 {
471 var domModel = this._target ? WebInspector.DOMModel.fromTarget(this._tar get) : null;
472 var inspectModeEnabled = domModel ? domModel.inspectModeEnabled() : fals e;
473 if (inspectModeEnabled) {
474 this._applyTouch(false, false);
475 return;
476 }
477
478 if (this._type === WebInspector.DeviceModeModel.Type.Device)
479 this._applyTouch(this._device.touch(), this._device.mobile());
480 else if (this._type === WebInspector.DeviceModeModel.Type.None)
481 this._applyTouch(false, false);
482 else if (this._type === WebInspector.DeviceModeModel.Type.Responsive)
483 this._applyTouch(this._uaSetting.get() === WebInspector.DeviceModeMo del.UA.DesktopTouch || this._uaSetting.get() === WebInspector.DeviceModeModel.UA .Mobile, this._uaSetting.get() === WebInspector.DeviceModeModel.UA.Mobile);
484 },
485
486 /** 457 /**
487 * @param {string} userAgent 458 * @param {string} userAgent
488 */ 459 */
489 _applyUserAgent: function(userAgent) 460 _applyUserAgent: function(userAgent)
490 { 461 {
491 WebInspector.multitargetNetworkManager.setUserAgentOverride(userAgent); 462 WebInspector.multitargetNetworkManager.setUserAgentOverride(userAgent);
492 }, 463 },
493 464
494 /** 465 /**
495 * @param {!Size} screenSize 466 * @param {!Size} screenSize
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 allPromises.push(setDevicePromise); 534 allPromises.push(setDevicePromise);
564 return Promise.all(allPromises); 535 return Promise.all(allPromises);
565 } 536 }
566 }, 537 },
567 538
568 _deviceMetricsOverrideAppliedForTest: function() 539 _deviceMetricsOverrideAppliedForTest: function()
569 { 540 {
570 // Used for sniffing in tests. 541 // Used for sniffing in tests.
571 }, 542 },
572 543
544 /**
545 * @param {boolean} touchEnabled
546 * @param {boolean} mobile
547 */
573 _applyTouch: function(touchEnabled, mobile) 548 _applyTouch: function(touchEnabled, mobile)
574 { 549 {
575 var configuration = mobile ? "mobile" : "desktop"; 550 WebInspector.MultitargetTouchModel.instance().setTouchEnabled(touchEnabl ed, mobile);
576 if (!this._target || (this._touchEnabled === touchEnabled && this._touch Configuration === configuration))
577 return;
578
579 var target = this._target;
580
581 /**
582 * @suppressGlobalPropertiesCheck
583 */
584 const injectedFunction = function() {
585 const touchEvents = ["ontouchstart", "ontouchend", "ontouchmove", "o ntouchcancel"];
586 var recepients = [window.__proto__, document.__proto__];
587 for (var i = 0; i < touchEvents.length; ++i) {
588 for (var j = 0; j < recepients.length; ++j) {
589 if (!(touchEvents[i] in recepients[j]))
590 Object.defineProperty(recepients[j], touchEvents[i], { v alue: null, writable: true, configurable: true, enumerable: true });
591 }
592 }
593 };
594
595 var symbol = WebInspector.DeviceModeModel._touchEventsScriptIdSymbol;
596
597 if (typeof target[symbol] !== "undefined") {
598 target.pageAgent().removeScriptToEvaluateOnLoad(target[symbol]);
599 delete target[symbol];
600 }
601
602 if (touchEnabled)
603 target.pageAgent().addScriptToEvaluateOnLoad("(" + injectedFunction. toString() + ")()", scriptAddedCallback);
604
605 /**
606 * @param {?Protocol.Error} error
607 * @param {string} scriptId
608 */
609 function scriptAddedCallback(error, scriptId)
610 {
611 if (error)
612 delete target[symbol];
613 else
614 target[symbol] = scriptId;
615 }
616
617 target.emulationAgent().setTouchEmulationEnabled(touchEnabled, configura tion);
618 this._touchEnabled = touchEnabled;
619 this._touchConfiguration = configuration;
620 } 551 }
621 } 552 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698