Roll src/third_party/WebKit 9f7fb92:f103b33 (svn 202621:202622)
[chromium-blink-merge.git] / components / sync_driver / resources / chrome_sync.js
blob93121fde889e76c39f8d4a0655b192a78ced7492
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.
5 // require cr.js
6 // require cr/event_target.js
7 // require cr/util.js
9 cr.define('chrome.sync', function() {
10   'use strict';
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   }
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   };
33   /** @return {!Timer} An object which measures elapsed time. */
34   var makeTimer = function() {
35     return new Timer;
36   };
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   };
48   /**
49    * Registers to receive a stream of events through
50    * chrome.sync.dispatchEvent().
51    */
52   var registerForEvents = function() {
53     chrome.send('registerForEvents');
54   };
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   }
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   };
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   };
80   /**
81    * Counter to uniquely identify requests while they're in progress.
82    * Used in the implementation of GetAllNodes.
83    */
84   var requestId = 0;
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 = {};
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   };
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   };
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   };