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

Unified 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 side-by-side diff with in-line comments
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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/data/pdf/gesture_detector_test.js
diff --git a/chrome/test/data/pdf/gesture_detector_test.js b/chrome/test/data/pdf/gesture_detector_test.js
new file mode 100644
index 0000000000000000000000000000000000000000..b73b85aed5bb7ad83fa04638b055c5b8bdc69e58
--- /dev/null
+++ b/chrome/test/data/pdf/gesture_detector_test.js
@@ -0,0 +1,192 @@
+// 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.
+
+chrome.test.runTests(function() {
+ 'use strict';
+
+ class StubElement {
+ constructor() {
+ this.listeners_ = new Map([
+ ['touchstart', []],
+ ['touchmove', []],
+ ['touchend', []],
+ ['touchcancel', []]
+ ]);
+ }
+
+ addEventListener(type, listener) {
+ if (this.listeners_.has(type))
+ this.listeners_.get(type).push(listener);
+ }
+
+ sendEvent(event) {
+ for (let l of this.listeners_.get(event.type))
+ l(event);
+ }
+ }
+
+ class MockTouchEvent {
+ constructor(type, touches) {
+ this.type = type;
+ this.touches = touches;
+ this.defaultPrevented = false;
+ }
+
+ preventDefault() {
+ this.defaultPrevented = true;
+ }
+ }
+
+ class PinchListener {
+ constructor(gestureDetector) {
+ this.lastEvent = null;
+ gestureDetector.addEventListener('pinchstart', this.onPinch_.bind(this));
+ gestureDetector.addEventListener('pinchupdate', this.onPinch_.bind(this));
+ gestureDetector.addEventListener('pinchend', this.onPinch_.bind(this));
+ }
+
+ onPinch_(pinchEvent) {
+ this.lastEvent = pinchEvent;
+ }
+ }
+
+ return [
+ function testPinchZoomIn() {
+ let stubElement = new StubElement();
+ let gestureDetector = new GestureDetector(stubElement);
+ let pinchListener = new PinchListener(gestureDetector);
+
+ stubElement.sendEvent(new MockTouchEvent('touchstart', [
+ {clientX: 0, clientY: 0},
+ {clientX: 0, clientY: 2}
+ ]));
+ chrome.test.assertEq({
+ type: 'pinchstart',
+ center: {x: 0, y: 1}
+ }, pinchListener.lastEvent);
+
+ stubElement.sendEvent(new MockTouchEvent('touchmove', [
+ {clientX: 0, clientY: 0},
+ {clientX: 0, clientY: 4}
+ ]));
+ chrome.test.assertEq({
+ type: 'pinchupdate',
+ scaleRatio: 2,
+ direction: 'in',
+ startScaleRatio: 2,
+ center: {x: 0, y: 2}
+ }, pinchListener.lastEvent);
+
+ stubElement.sendEvent(new MockTouchEvent('touchmove', [
+ {clientX: 0, clientY: 0},
+ {clientX: 0, clientY: 8}
+ ]));
+ chrome.test.assertEq({
+ type: 'pinchupdate',
+ scaleRatio: 2,
+ direction: 'in',
+ startScaleRatio: 4,
+ center: {x: 0, y: 4}
+ }, pinchListener.lastEvent);
+
+ stubElement.sendEvent(new MockTouchEvent('touchend', []));
+ chrome.test.assertEq({
+ type: 'pinchend',
+ startScaleRatio: 4,
+ center: {x: 0, y: 4}
+ }, pinchListener.lastEvent);
+
+ chrome.test.succeed();
+ },
+
+ function testPinchZoomInAndBackOut() {
+ let stubElement = new StubElement();
+ let gestureDetector = new GestureDetector(stubElement);
+ let pinchListener = new PinchListener(gestureDetector);
+
+ stubElement.sendEvent(new MockTouchEvent('touchstart', [
+ {clientX: 0, clientY: 0},
+ {clientX: 0, clientY: 2}
+ ]));
+ chrome.test.assertEq({
+ type: 'pinchstart',
+ center: {x: 0, y: 1}
+ }, pinchListener.lastEvent);
+
+ stubElement.sendEvent(new MockTouchEvent('touchmove', [
+ {clientX: 0, clientY: 0},
+ {clientX: 0, clientY: 4}
+ ]));
+ chrome.test.assertEq({
+ type: 'pinchupdate',
+ scaleRatio: 2,
+ direction: 'in',
+ startScaleRatio: 2,
+ center: {x: 0, y: 2}
+ }, pinchListener.lastEvent);
+
+ stubElement.sendEvent(new MockTouchEvent('touchmove', [
+ {clientX: 0, clientY: 0},
+ {clientX: 0, clientY: 2}
+ ]));
+ // This should be part of the same gesture as an update.
+ // A change in direction should not end the gesture and start a new one.
+ chrome.test.assertEq({
+ type: 'pinchupdate',
+ scaleRatio: 0.5,
+ direction: 'out',
+ startScaleRatio: 1,
+ center: {x: 0, y: 1}
+ }, pinchListener.lastEvent);
+
+ stubElement.sendEvent(new MockTouchEvent('touchend', []));
+ chrome.test.assertEq({
+ type: 'pinchend',
+ startScaleRatio: 1,
+ center: {x: 0, y: 1}
+ }, pinchListener.lastEvent);
+
+ chrome.test.succeed();
+ },
+
+ function testIgnoreTouchScrolling() {
+ let stubElement = new StubElement();
+ let gestureDetector = new GestureDetector(stubElement);
+ let pinchListener = new PinchListener(gestureDetector);
+
+ let touchScrollStartEvent = new MockTouchEvent('touchstart', [
+ {clientX: 0, clientY: 0},
+ ]);
+ stubElement.sendEvent(touchScrollStartEvent);
+ chrome.test.assertEq(null, pinchListener.lastEvent);
+ chrome.test.assertFalse(touchScrollStartEvent.defaultPrevented);
+
+ stubElement.sendEvent(new MockTouchEvent('touchmove', [
+ {clientX: 0, clientY: 1},
+ ]));
+ chrome.test.assertEq(null, pinchListener.lastEvent);
+
+ stubElement.sendEvent(new MockTouchEvent('touchend', []));
+ chrome.test.assertEq(null, pinchListener.lastEvent);
+
+ chrome.test.succeed();
+ },
+
+ function testPreventNativePinchZoom() {
+ let stubElement = new StubElement();
+ let gestureDetector = new GestureDetector(stubElement);
+ let pinchListener = new PinchListener(gestureDetector);
+
+ let pinchStartEvent = new MockTouchEvent('touchstart', [
+ {clientX: 0, clientY: 0},
+ {clientX: 0, clientY: 2}
+ ]);
+ stubElement.sendEvent(pinchStartEvent);
+ chrome.test.assertEq('pinchstart', pinchListener.lastEvent.type);
+ chrome.test.assertTrue(pinchStartEvent.defaultPrevented);
+
+ chrome.test.succeed();
+ }
+ ];
+}());
« 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