blob: 93121fde889e76c39f8d4a0655b192a78ced7492 [file] [log] [blame]
// Copyright (c) 2012 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.
// require cr.js
// require cr/event_target.js
// require cr/util.js
cr.define('chrome.sync', function() {
'use strict';
/**
* A simple timer to measure elapsed time.
* @constructor
*/
function Timer() {
/**
* The time that this Timer was created.
* @type {number}
* @private
* @const
*/
this.start_ = Date.now();
}
/**
* @return {number} The elapsed seconds since this Timer was created.
*/
Timer.prototype.getElapsedSeconds = function() {
return (Date.now() - this.start_) / 1000;
};
/** @return {!Timer} An object which measures elapsed time. */
var makeTimer = function() {
return new Timer;
};
/**
* @param {string} name The name of the event type.
* @param {!Object} details A collection of event-specific details.
*/
var dispatchEvent = function(name, details) {
var e = new Event(name);
e.details = details;
chrome.sync.events.dispatchEvent(e);
};
/**
* Registers to receive a stream of events through
* chrome.sync.dispatchEvent().
*/
var registerForEvents = function() {
chrome.send('registerForEvents');
};
/**
* Registers to receive a stream of status counter update events
* chrome.sync.dispatchEvent().
*/
var registerForPerTypeCounters = function() {
chrome.send('registerForPerTypeCounters');
}
/**
* Asks the browser to refresh our snapshot of sync state. Should result
* in an onAboutInfoUpdated event being emitted.
*/
var requestUpdatedAboutInfo = function() {
chrome.send('requestUpdatedAboutInfo');
};
/**
* Asks the browser to send us the list of registered types. Should result
* in an onReceivedListOfTypes event being emitted.
*/
var requestListOfTypes = function() {
chrome.send('requestListOfTypes');
};
/**
* Counter to uniquely identify requests while they're in progress.
* Used in the implementation of GetAllNodes.
*/
var requestId = 0;
/**
* A map from counter values to asynchronous request callbacks.
* Used in the implementation of GetAllNodes.
* @type {{number: !Function}}
*/
var requestCallbacks = {};
/**
* Asks the browser to send us a copy of all existing sync nodes.
* Will eventually invoke the given callback with the results.
*
* @param {function(!Object)} callback The function to call with the response.
*/
var getAllNodes = function(callback) {
requestId++;
requestCallbacks[requestId] = callback;
chrome.send('getAllNodes', [requestId]);
};
/**
* Called from C++ with the response to a getAllNodes request.
* @param {number} id The requestId passed in with the request.
* @param {Object} response The response to the request.
*/
var getAllNodesCallback = function(id, response) {
requestCallbacks[id](response);
requestCallbacks[id] = undefined;
};
return {
makeTimer: makeTimer,
dispatchEvent: dispatchEvent,
events: new cr.EventTarget(),
getAllNodes: getAllNodes,
getAllNodesCallback: getAllNodesCallback,
registerForEvents: registerForEvents,
registerForPerTypeCounters: registerForPerTypeCounters,
requestUpdatedAboutInfo: requestUpdatedAboutInfo,
requestListOfTypes: requestListOfTypes,
};
});