blob: b41383c096ddd859695f487cd89308371e55134f [file] [log] [blame]
// Copyright 2014 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.
'use strict';
(function() {
function supportedByBrowser() {
return !!(window.chrome &&
chrome.gpuBenchmarking &&
chrome.gpuBenchmarking.scrollBounce);
}
function ScrollBounceAction(opt_callback) {
var self = this;
this.beginMeasuringHook = function() {}
this.endMeasuringHook = function() {}
this.callback_ = opt_callback;
}
ScrollBounceAction.prototype.start = function(options) {
this.options_ = options;
// Assign this.element_ here instead of constructor, because the constructor
// ensures this method will be called after the document is loaded.
this.element_ = this.options_.element;
requestAnimationFrame(this.startGesture_.bind(this));
};
ScrollBounceAction.prototype.startGesture_ = function() {
this.beginMeasuringHook();
var rect = __GestureCommon_GetBoundingVisibleRect(this.options_.element);
var start_left =
rect.left + rect.width * this.options_.left_start_ratio;
var start_top =
rect.top + rect.height * this.options_.top_start_ratio;
chrome.gpuBenchmarking.scrollBounce(this.options_.direction,
this.options_.distance,
this.options_.overscroll,
this.options_.repeat_count,
this.onGestureComplete_.bind(this),
start_left, start_top,
this.options_.speed);
};
ScrollBounceAction.prototype.onGestureComplete_ = function() {
this.endMeasuringHook();
// We're done.
if (this.callback_)
this.callback_();
};
window.__ScrollBounceAction = ScrollBounceAction;
window.__ScrollBounceAction_SupportedByBrowser = supportedByBrowser;
})();