diff options
Diffstat (limited to 'devtools/client/webconsole/net/data-provider.js')
-rw-r--r-- | devtools/client/webconsole/net/data-provider.js | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/devtools/client/webconsole/net/data-provider.js b/devtools/client/webconsole/net/data-provider.js new file mode 100644 index 000000000..d8a70d72d --- /dev/null +++ b/devtools/client/webconsole/net/data-provider.js @@ -0,0 +1,66 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +"use strict"; + +const promise = require("promise"); + +/** + * Map of pending requests. Used mainly by tests to wait + * till things are ready. + */ +var promises = new Map(); + +/** + * This object is used to fetch network data from the backend. + * Communication with the chrome scope is based on message + * exchange. + */ +var DataProvider = { + hasPendingRequests: function () { + return promises.size > 0; + }, + + requestData: function (client, actor, method) { + let key = actor + ":" + method; + let p = promises.get(key); + if (p) { + return p; + } + + let deferred = promise.defer(); + let realMethodName = "get" + method.charAt(0).toUpperCase() + + method.slice(1); + + if (!client[realMethodName]) { + return null; + } + + client[realMethodName](actor, response => { + promises.delete(key); + deferred.resolve(response); + }); + + promises.set(key, deferred.promise); + return deferred.promise; + }, + + resolveString: function (client, stringGrip) { + let key = stringGrip.actor + ":getString"; + let p = promises.get(key); + if (p) { + return p; + } + + p = client.getString(stringGrip).then(result => { + promises.delete(key); + return result; + }); + + promises.set(key, p); + return p; + }, +}; + +// Exports from this module +module.exports = DataProvider; |