1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// found in the LICENSE file. 4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)'use strict'; 6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 7010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)(function() { 8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) function supportedByBrowser() { 9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return !!(window.chrome && 10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) chrome.gpuBenchmarking && 11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) chrome.gpuBenchmarking.scrollBounce); 12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) function ScrollBounceAction(opt_callback) { 15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) var self = this; 16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.beginMeasuringHook = function() {} 18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.endMeasuringHook = function() {} 19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.callback_ = opt_callback; 21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ScrollBounceAction.prototype.start = function(options) { 24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.options_ = options; 25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Assign this.element_ here instead of constructor, because the constructor 26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // ensures this method will be called after the document is loaded. 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.element_ = this.options_.element; 28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) requestAnimationFrame(this.startGesture_.bind(this)); 29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) }; 30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ScrollBounceAction.prototype.startGesture_ = function() { 32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.beginMeasuringHook(); 33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) var rect = __GestureCommon_GetBoundingVisibleRect(this.options_.element); 35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) var start_left = 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rect.left + rect.width * this.options_.left_start_ratio; 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) var start_top = 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rect.top + rect.height * this.options_.top_start_ratio; 39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) chrome.gpuBenchmarking.scrollBounce(this.options_.direction, 40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.options_.distance, 41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.options_.overscroll, 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.options_.repeat_count, 43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.onGestureComplete_.bind(this), 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) start_left, start_top, 45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.options_.speed); 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) }; 47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ScrollBounceAction.prototype.onGestureComplete_ = function() { 49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.endMeasuringHook(); 50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // We're done. 52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (this.callback_) 53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.callback_(); 54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) }; 55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) window.__ScrollBounceAction = ScrollBounceAction; 57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) window.__ScrollBounceAction_SupportedByBrowser = supportedByBrowser; 58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)})(); 59