15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)'use strict'; 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)(function() { 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) function SwipeGestureOptions(opt_options) { 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (opt_options) { 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.element_ = opt_options.element; 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this.left_start_ratio_ = opt_options.left_start_ratio; 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this.top_start_ratio_ = opt_options.top_start_ratio; 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.direction_ = opt_options.direction; 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.distance_ = opt_options.distance; 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.speed_ = opt_options.speed; 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else { 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.element_ = document.body; 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this.left_start_ratio_ = 0.5; 19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this.top_start_ratio_ = 0.5; 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.direction_ = 'left'; 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.distance_ = 0; 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.speed_ = 800; 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) function supportedByBrowser() { 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return !!(window.chrome && 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome.gpuBenchmarking && 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome.gpuBenchmarking.swipe); 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // This class swipes a page for a specified distance. 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) function SwipeAction(opt_callback) { 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var self = this; 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.beginMeasuringHook = function() {} 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.endMeasuringHook = function() {} 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.callback_ = opt_callback; 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SwipeAction.prototype.start = function(opt_options) { 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.options_ = new SwipeGestureOptions(opt_options); 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Assign this.element_ here instead of constructor, because the constructor 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // ensures this method will be called after the document is loaded. 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.element_ = this.options_.element_; 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) requestAnimationFrame(this.startGesture_.bind(this)); 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SwipeAction.prototype.startGesture_ = function() { 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.beginMeasuringHook(); 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var rect = __GestureCommon_GetBoundingVisibleRect(this.options_.element_); 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var start_left = 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) rect.left + rect.width * this.options_.left_start_ratio_; 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var start_top = 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) rect.top + rect.height * this.options_.top_start_ratio_; 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome.gpuBenchmarking.swipe(this.options_.direction_, 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.options_.distance_, 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.onGestureComplete_.bind(this), 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) start_left, start_top, 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.options_.speed_); 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SwipeAction.prototype.onGestureComplete_ = function() { 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.endMeasuringHook(); 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // We're done. 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (this.callback_) 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.callback_(); 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window.__SwipeAction = SwipeAction; 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window.__SwipeAction_SupportedByBrowser = supportedByBrowser; 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)})(); 76