Index: chrome/browser/resources/sync_internals/chrome_sync.js |
diff --git a/chrome/browser/resources/sync_internals/chrome_sync.js b/chrome/browser/resources/sync_internals/chrome_sync.js |
index f8d9a2f97dda939ee4c278d646e1381d0168edad..e6e5d7d45a3ddb40ef1975296ff5cd23b381031b 100644 |
--- a/chrome/browser/resources/sync_internals/chrome_sync.js |
+++ b/chrome/browser/resources/sync_internals/chrome_sync.js |
@@ -9,40 +9,6 @@ |
cr.define('chrome.sync', function() { |
'use strict'; |
- function makeSyncFunction(name) { |
- var callbacks = []; |
- |
- // Calls the function, assuming the last argument is a callback to be |
- // called with the return value. |
- var fn = function() { |
- var args = Array.prototype.slice.call(arguments); |
- callbacks.push(args.pop()); |
- chrome.send(name, args); |
- }; |
- |
- // Handle a reply, assuming that messages are processed in FIFO order. |
- // Called by SyncInternalsUI::HandleJsReply(). |
- fn.handleReply = function() { |
- var args = Array.prototype.slice.call(arguments); |
- // Remove the callback before we call it since the callback may |
- // throw. |
- var callback = callbacks.shift(); |
- callback.apply(null, args); |
- }; |
- |
- return fn; |
- } |
- |
- var syncFunctions = [ |
- // Get an array containing a JSON representations of all known sync nodes. |
- 'getAllNodes', |
- ]; |
- |
- for (var i = 0; i < syncFunctions.length; ++i) { |
- var syncFunction = syncFunctions[i]; |
- chrome.sync[syncFunction] = makeSyncFunction(syncFunction); |
- } |
- |
/** |
* A simple timer to measure elapsed time. |
* @constructor |
@@ -103,11 +69,46 @@ cr.define('chrome.sync', 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. |
Dan Beam
2014/04/05 00:19:25
nit: @type {{number: !Function}} (though technical
rlarocque
2014/04/05 00:27:29
Done.
|
+ */ |
+ 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, |
requestUpdatedAboutInfo: requestUpdatedAboutInfo, |
requestListOfTypes: requestListOfTypes, |