1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// require cr.js 6// require cr/event_target.js 7// require cr/util.js 8 9cr.define('chrome.sync', function() { 10 'use strict'; 11 12 /** 13 * A simple timer to measure elapsed time. 14 * @constructor 15 */ 16 function Timer() { 17 /** 18 * The time that this Timer was created. 19 * @type {number} 20 * @private 21 * @const 22 */ 23 this.start_ = Date.now(); 24 } 25 26 /** 27 * @return {number} The elapsed seconds since this Timer was created. 28 */ 29 Timer.prototype.getElapsedSeconds = function() { 30 return (Date.now() - this.start_) / 1000; 31 }; 32 33 /** @return {!Timer} An object which measures elapsed time. */ 34 var makeTimer = function() { 35 return new Timer; 36 }; 37 38 /** 39 * @param {string} name The name of the event type. 40 * @param {!Object} details A collection of event-specific details. 41 */ 42 var dispatchEvent = function(name, details) { 43 var e = new Event(name); 44 e.details = details; 45 chrome.sync.events.dispatchEvent(e); 46 }; 47 48 /** 49 * Registers to receive a stream of events through 50 * chrome.sync.dispatchEvent(). 51 */ 52 var registerForEvents = function() { 53 chrome.send('registerForEvents'); 54 }; 55 56 /** 57 * Registers to receive a stream of status counter update events 58 * chrome.sync.dispatchEvent(). 59 */ 60 var registerForPerTypeCounters = function() { 61 chrome.send('registerForPerTypeCounters'); 62 } 63 64 /** 65 * Asks the browser to refresh our snapshot of sync state. Should result 66 * in an onAboutInfoUpdated event being emitted. 67 */ 68 var requestUpdatedAboutInfo = function() { 69 chrome.send('requestUpdatedAboutInfo'); 70 }; 71 72 /** 73 * Asks the browser to send us the list of registered types. Should result 74 * in an onReceivedListOfTypes event being emitted. 75 */ 76 var requestListOfTypes = function() { 77 chrome.send('requestListOfTypes'); 78 }; 79 80 /** 81 * Counter to uniquely identify requests while they're in progress. 82 * Used in the implementation of GetAllNodes. 83 */ 84 var requestId = 0; 85 86 /** 87 * A map from counter values to asynchronous request callbacks. 88 * Used in the implementation of GetAllNodes. 89 * @type {{number: !Function}} 90 */ 91 var requestCallbacks = {}; 92 93 /** 94 * Asks the browser to send us a copy of all existing sync nodes. 95 * Will eventually invoke the given callback with the results. 96 * 97 * @param {function(!Object)} callback The function to call with the response. 98 */ 99 var getAllNodes = function(callback) { 100 requestId++; 101 requestCallbacks[requestId] = callback; 102 chrome.send('getAllNodes', [requestId]); 103 }; 104 105 /** 106 * Called from C++ with the response to a getAllNodes request. 107 * @param {number} id The requestId passed in with the request. 108 * @param {Object} response The response to the request. 109 */ 110 var getAllNodesCallback = function(id, response) { 111 requestCallbacks[id](response); 112 requestCallbacks[id] = undefined; 113 }; 114 115 return { 116 makeTimer: makeTimer, 117 dispatchEvent: dispatchEvent, 118 events: new cr.EventTarget(), 119 getAllNodes: getAllNodes, 120 getAllNodesCallback: getAllNodesCallback, 121 registerForEvents: registerForEvents, 122 registerForPerTypeCounters: registerForPerTypeCounters, 123 requestUpdatedAboutInfo: requestUpdatedAboutInfo, 124 requestListOfTypes: requestListOfTypes, 125 }; 126}); 127