| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 chrome.test.runTests(function() { | 5 chrome.test.runTests(function() { |
| 6 'use strict'; | 6 'use strict'; |
| 7 | 7 |
| 8 class StubElement { | 8 class StubElement { |
| 9 constructor() { | 9 constructor() { |
| 10 this.listeners_ = new Map([ | 10 this.listeners = new Map([ |
| 11 ['touchstart', []], | 11 ['touchstart', []], |
| 12 ['touchmove', []], | 12 ['touchmove', []], |
| 13 ['touchend', []], | 13 ['touchend', []], |
| 14 ['touchcancel', []] | 14 ['touchcancel', []] |
| 15 ]); | 15 ]); |
| 16 |
| 17 this.listenerOptions = new Map(); |
| 16 } | 18 } |
| 17 | 19 |
| 18 addEventListener(type, listener) { | 20 addEventListener(type, listener, options) { |
| 19 if (this.listeners_.has(type)) | 21 if (this.listeners.has(type)) { |
| 20 this.listeners_.get(type).push(listener); | 22 this.listeners.get(type).push(listener); |
| 23 this.listenerOptions.set(listener, options); |
| 24 } |
| 21 } | 25 } |
| 22 | 26 |
| 23 sendEvent(event) { | 27 sendEvent(event) { |
| 24 for (let l of this.listeners_.get(event.type)) | 28 for (let l of this.listeners.get(event.type)) |
| 25 l(event); | 29 l(event); |
| 26 } | 30 } |
| 27 } | 31 } |
| 28 | 32 |
| 29 class MockTouchEvent { | 33 class MockTouchEvent { |
| 30 constructor(type, touches) { | 34 constructor(type, touches) { |
| 31 this.type = type; | 35 this.type = type; |
| 32 this.touches = touches; | 36 this.touches = touches; |
| 33 this.defaultPrevented = false; | 37 this.defaultPrevented = false; |
| 34 } | 38 } |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 chrome.test.assertEq(null, pinchListener.lastEvent); | 175 chrome.test.assertEq(null, pinchListener.lastEvent); |
| 172 | 176 |
| 173 chrome.test.succeed(); | 177 chrome.test.succeed(); |
| 174 }, | 178 }, |
| 175 | 179 |
| 176 function testPreventNativePinchZoom() { | 180 function testPreventNativePinchZoom() { |
| 177 let stubElement = new StubElement(); | 181 let stubElement = new StubElement(); |
| 178 let gestureDetector = new GestureDetector(stubElement); | 182 let gestureDetector = new GestureDetector(stubElement); |
| 179 let pinchListener = new PinchListener(gestureDetector); | 183 let pinchListener = new PinchListener(gestureDetector); |
| 180 | 184 |
| 185 // Ensure that the touchstart listener is not passive, otherwise the |
| 186 // call to preventDefault will be ignored. Since listeners could default |
| 187 // to being passive, we must set the value explicitly |
| 188 // (see crbug.com/675730). |
| 189 for (let l of stubElement.listeners.get('touchstart')) { |
| 190 let options = stubElement.listenerOptions.get(l); |
| 191 chrome.test.assertTrue(!!options && |
| 192 typeof(options.passive) == 'boolean'); |
| 193 chrome.test.assertFalse(options.passive); |
| 194 } |
| 195 |
| 181 let pinchStartEvent = new MockTouchEvent('touchstart', [ | 196 let pinchStartEvent = new MockTouchEvent('touchstart', [ |
| 182 {clientX: 0, clientY: 0}, | 197 {clientX: 0, clientY: 0}, |
| 183 {clientX: 0, clientY: 2} | 198 {clientX: 0, clientY: 2} |
| 184 ]); | 199 ]); |
| 185 stubElement.sendEvent(pinchStartEvent); | 200 stubElement.sendEvent(pinchStartEvent); |
| 186 chrome.test.assertEq('pinchstart', pinchListener.lastEvent.type); | 201 chrome.test.assertEq('pinchstart', pinchListener.lastEvent.type); |
| 187 chrome.test.assertTrue(pinchStartEvent.defaultPrevented); | 202 chrome.test.assertTrue(pinchStartEvent.defaultPrevented); |
| 188 | 203 |
| 189 chrome.test.succeed(); | 204 chrome.test.succeed(); |
| 190 } | 205 } |
| 191 ]; | 206 ]; |
| 192 }()); | 207 }()); |
| OLD | NEW |