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

Side by Side Diff: chrome/test/data/pdf/gesture_detector_test.js

Issue 2400743002: Improved Pinch-Zoom for PDF. (Closed)
Patch Set: Small changes. Created 4 years, 1 month 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 | « chrome/browser/resources/pdf/viewport.js ('k') | pdf/out_of_process_instance.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 chrome.test.runTests(function() {
6 'use strict';
7
8 class StubElement {
9 constructor() {
10 this.listeners_ = new Map([
11 ['touchstart', []],
12 ['touchmove', []],
13 ['touchend', []],
14 ['touchcancel', []]
15 ]);
16 }
17
18 addEventListener(type, listener) {
19 if (this.listeners_.has(type))
20 this.listeners_.get(type).push(listener);
21 }
22
23 sendEvent(event) {
24 for (let l of this.listeners_.get(event.type))
25 l(event);
26 }
27 }
28
29 class MockTouchEvent {
30 constructor(type, touches) {
31 this.type = type;
32 this.touches = touches;
33 this.defaultPrevented = false;
34 }
35
36 preventDefault() {
37 this.defaultPrevented = true;
38 }
39 }
40
41 class PinchListener {
42 constructor(gestureDetector) {
43 this.lastEvent = null;
44 gestureDetector.addEventListener('pinchstart', this.onPinch_.bind(this));
45 gestureDetector.addEventListener('pinchupdate', this.onPinch_.bind(this));
46 gestureDetector.addEventListener('pinchend', this.onPinch_.bind(this));
47 }
48
49 onPinch_(pinchEvent) {
50 this.lastEvent = pinchEvent;
51 }
52 }
53
54 return [
55 function testPinchZoomIn() {
56 let stubElement = new StubElement();
57 let gestureDetector = new GestureDetector(stubElement);
58 let pinchListener = new PinchListener(gestureDetector);
59
60 stubElement.sendEvent(new MockTouchEvent('touchstart', [
61 {clientX: 0, clientY: 0},
62 {clientX: 0, clientY: 2}
63 ]));
64 chrome.test.assertEq({
65 type: 'pinchstart',
66 center: {x: 0, y: 1}
67 }, pinchListener.lastEvent);
68
69 stubElement.sendEvent(new MockTouchEvent('touchmove', [
70 {clientX: 0, clientY: 0},
71 {clientX: 0, clientY: 4}
72 ]));
73 chrome.test.assertEq({
74 type: 'pinchupdate',
75 scaleRatio: 2,
76 direction: 'in',
77 startScaleRatio: 2,
78 center: {x: 0, y: 2}
79 }, pinchListener.lastEvent);
80
81 stubElement.sendEvent(new MockTouchEvent('touchmove', [
82 {clientX: 0, clientY: 0},
83 {clientX: 0, clientY: 8}
84 ]));
85 chrome.test.assertEq({
86 type: 'pinchupdate',
87 scaleRatio: 2,
88 direction: 'in',
89 startScaleRatio: 4,
90 center: {x: 0, y: 4}
91 }, pinchListener.lastEvent);
92
93 stubElement.sendEvent(new MockTouchEvent('touchend', []));
94 chrome.test.assertEq({
95 type: 'pinchend',
96 startScaleRatio: 4,
97 center: {x: 0, y: 4}
98 }, pinchListener.lastEvent);
99
100 chrome.test.succeed();
101 },
102
103 function testPinchZoomInAndBackOut() {
104 let stubElement = new StubElement();
105 let gestureDetector = new GestureDetector(stubElement);
106 let pinchListener = new PinchListener(gestureDetector);
107
108 stubElement.sendEvent(new MockTouchEvent('touchstart', [
109 {clientX: 0, clientY: 0},
110 {clientX: 0, clientY: 2}
111 ]));
112 chrome.test.assertEq({
113 type: 'pinchstart',
114 center: {x: 0, y: 1}
115 }, pinchListener.lastEvent);
116
117 stubElement.sendEvent(new MockTouchEvent('touchmove', [
118 {clientX: 0, clientY: 0},
119 {clientX: 0, clientY: 4}
120 ]));
121 chrome.test.assertEq({
122 type: 'pinchupdate',
123 scaleRatio: 2,
124 direction: 'in',
125 startScaleRatio: 2,
126 center: {x: 0, y: 2}
127 }, pinchListener.lastEvent);
128
129 stubElement.sendEvent(new MockTouchEvent('touchmove', [
130 {clientX: 0, clientY: 0},
131 {clientX: 0, clientY: 2}
132 ]));
133 // This should be part of the same gesture as an update.
134 // A change in direction should not end the gesture and start a new one.
135 chrome.test.assertEq({
136 type: 'pinchupdate',
137 scaleRatio: 0.5,
138 direction: 'out',
139 startScaleRatio: 1,
140 center: {x: 0, y: 1}
141 }, pinchListener.lastEvent);
142
143 stubElement.sendEvent(new MockTouchEvent('touchend', []));
144 chrome.test.assertEq({
145 type: 'pinchend',
146 startScaleRatio: 1,
147 center: {x: 0, y: 1}
148 }, pinchListener.lastEvent);
149
150 chrome.test.succeed();
151 },
152
153 function testIgnoreTouchScrolling() {
154 let stubElement = new StubElement();
155 let gestureDetector = new GestureDetector(stubElement);
156 let pinchListener = new PinchListener(gestureDetector);
157
158 let touchScrollStartEvent = new MockTouchEvent('touchstart', [
159 {clientX: 0, clientY: 0},
160 ]);
161 stubElement.sendEvent(touchScrollStartEvent);
162 chrome.test.assertEq(null, pinchListener.lastEvent);
163 chrome.test.assertFalse(touchScrollStartEvent.defaultPrevented);
164
165 stubElement.sendEvent(new MockTouchEvent('touchmove', [
166 {clientX: 0, clientY: 1},
167 ]));
168 chrome.test.assertEq(null, pinchListener.lastEvent);
169
170 stubElement.sendEvent(new MockTouchEvent('touchend', []));
171 chrome.test.assertEq(null, pinchListener.lastEvent);
172
173 chrome.test.succeed();
174 },
175
176 function testPreventNativePinchZoom() {
177 let stubElement = new StubElement();
178 let gestureDetector = new GestureDetector(stubElement);
179 let pinchListener = new PinchListener(gestureDetector);
180
181 let pinchStartEvent = new MockTouchEvent('touchstart', [
182 {clientX: 0, clientY: 0},
183 {clientX: 0, clientY: 2}
184 ]);
185 stubElement.sendEvent(pinchStartEvent);
186 chrome.test.assertEq('pinchstart', pinchListener.lastEvent.type);
187 chrome.test.assertTrue(pinchStartEvent.defaultPrevented);
188
189 chrome.test.succeed();
190 }
191 ];
192 }());
OLDNEW
« no previous file with comments | « chrome/browser/resources/pdf/viewport.js ('k') | pdf/out_of_process_instance.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698