| Index: third_party/WebKit/Source/devtools/front_end/emulation/TouchModel.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/emulation/TouchModel.js b/third_party/WebKit/Source/devtools/front_end/emulation/TouchModel.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d0a39d7f48e980823373d06a019c4020fdecf49c
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Source/devtools/front_end/emulation/TouchModel.js
|
| @@ -0,0 +1,149 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +/**
|
| + * @constructor
|
| + * @implements {WebInspector.TargetManager.Observer}
|
| + */
|
| +WebInspector.MultitargetTouchModel = function()
|
| +{
|
| + this._touchEnabled = false;
|
| + this._touchMobile = false;
|
| + this._customTouchEnabled = false;
|
| +
|
| + WebInspector.targetManager.observeTargets(this, WebInspector.Target.Type.Page);
|
| +}
|
| +
|
| +WebInspector.MultitargetTouchModel._symbol = Symbol("MultitargetTouchModel.symbol");
|
| +
|
| +WebInspector.MultitargetTouchModel.prototype = {
|
| + /**
|
| + * @param {boolean} enabled
|
| + * @param {boolean} mobile
|
| + */
|
| + setTouchEnabled: function(enabled, mobile)
|
| + {
|
| + this._touchEnabled = enabled;
|
| + this._touchMobile = mobile;
|
| + this._updateAllTargets();
|
| + },
|
| +
|
| + /**
|
| + * @param {boolean} enabled
|
| + */
|
| + setCustomTouchEnabled: function(enabled)
|
| + {
|
| + this._customTouchEnabled = enabled;
|
| + this._updateAllTargets();
|
| + },
|
| +
|
| + _updateAllTargets: function()
|
| + {
|
| + for (var target of WebInspector.targetManager.targets(WebInspector.Target.Type.Page))
|
| + this._applyToTarget(target);
|
| + },
|
| +
|
| + /**
|
| + * @param {!WebInspector.Target} target
|
| + */
|
| + _applyToTarget: function(target)
|
| + {
|
| + var current = {enabled: this._touchEnabled, configuration : this._touchMobile ? "mobile" : "desktop"};
|
| + if (this._customTouchEnabled)
|
| + current = {enabled: true, configuration: "mobile"};
|
| +
|
| + var domModel = WebInspector.DOMModel.fromTarget(target);
|
| + var inspectModeEnabled = domModel ? domModel.inspectModeEnabled() : false;
|
| + if (inspectModeEnabled)
|
| + current = {enabled: false, configuration: "mobile"};
|
| +
|
| + /**
|
| + * @suppressGlobalPropertiesCheck
|
| + */
|
| + const injectedFunction = function() {
|
| + const touchEvents = ["ontouchstart", "ontouchend", "ontouchmove", "ontouchcancel"];
|
| + var recepients = [window.__proto__, document.__proto__];
|
| + for (var i = 0; i < touchEvents.length; ++i) {
|
| + for (var j = 0; j < recepients.length; ++j) {
|
| + if (!(touchEvents[i] in recepients[j]))
|
| + Object.defineProperty(recepients[j], touchEvents[i], { value: null, writable: true, configurable: true, enumerable: true });
|
| + }
|
| + }
|
| + };
|
| +
|
| + var symbol = WebInspector.MultitargetTouchModel._symbol;
|
| + var previous = target[symbol] || {enabled: false, configuration: "mobile", scriptId: ""};
|
| +
|
| + if (previous.enabled === current.enabled && (!current.enabled || previous.configuration === current.configuration))
|
| + return;
|
| +
|
| + if (previous.scriptId) {
|
| + target.pageAgent().removeScriptToEvaluateOnLoad(previous.scriptId);
|
| + target[symbol].scriptId = "";
|
| + }
|
| +
|
| + target[symbol] = current;
|
| + target[symbol].scriptId = "";
|
| +
|
| + if (current.enabled)
|
| + target.pageAgent().addScriptToEvaluateOnLoad("(" + injectedFunction.toString() + ")()", scriptAddedCallback);
|
| +
|
| + /**
|
| + * @param {?Protocol.Error} error
|
| + * @param {string} scriptId
|
| + */
|
| + function scriptAddedCallback(error, scriptId)
|
| + {
|
| + (target[symbol] || {}).scriptId = error ? "" : scriptId;
|
| + }
|
| +
|
| + target.emulationAgent().setTouchEmulationEnabled(current.enabled, current.configuration);
|
| + },
|
| +
|
| + /**
|
| + * @param {!WebInspector.Event} event
|
| + */
|
| + _inspectModeToggled: function(event)
|
| + {
|
| + var domModel = /** @type {!WebInspector.DOMModel} */ (event.target);
|
| + this._applyToTarget(domModel.target());
|
| + },
|
| +
|
| + /**
|
| + * @override
|
| + * @param {!WebInspector.Target} target
|
| + */
|
| + targetAdded: function(target)
|
| + {
|
| + var domModel = WebInspector.DOMModel.fromTarget(target);
|
| + if (domModel)
|
| + domModel.addEventListener(WebInspector.DOMModel.Events.InspectModeWillBeToggled, this._inspectModeToggled, this);
|
| + this._applyToTarget(target);
|
| + },
|
| +
|
| + /**
|
| + * @override
|
| + * @param {!WebInspector.Target} target
|
| + */
|
| + targetRemoved: function(target)
|
| + {
|
| + var domModel = WebInspector.DOMModel.fromTarget(target);
|
| + if (domModel)
|
| + domModel.removeEventListener(WebInspector.DOMModel.Events.InspectModeWillBeToggled, this._inspectModeToggled, this);
|
| + }
|
| +}
|
| +
|
| +
|
| +/** @type {?WebInspector.MultitargetTouchModel} */
|
| +WebInspector.MultitargetTouchModel._instance = null;
|
| +
|
| +/**
|
| + * @return {!WebInspector.MultitargetTouchModel}
|
| + */
|
| +WebInspector.MultitargetTouchModel.instance = function()
|
| +{
|
| + if (!WebInspector.MultitargetTouchModel._instance)
|
| + WebInspector.MultitargetTouchModel._instance = new WebInspector.MultitargetTouchModel();
|
| + return /** @type {!WebInspector.MultitargetTouchModel} */ (WebInspector.MultitargetTouchModel._instance);
|
| +}
|
|
|