diff --git a/mobile/android/base/tests/testGeckoRequest.js b/mobile/android/base/tests/testGeckoRequest.js index e30f6d5e18e5..d3a264ac0dfe 100644 --- a/mobile/android/base/tests/testGeckoRequest.js +++ b/mobile/android/base/tests/testGeckoRequest.js @@ -8,13 +8,13 @@ do_register_cleanup(() => { do_test_pending(); function add_request_listener(message) { - RequestService.addListener(function (data) { + Messaging.addListener(function (data) { return { result: data + "bar" }; }, message); } function add_exception_listener(message) { - RequestService.addListener(function (data) { + Messaging.addListener(function (data) { throw "error!"; }, message); } @@ -23,7 +23,7 @@ function add_second_request_listener(message) { let exceptionCaught = false; try { - RequestService.addListener(() => {}, message); + Messaging.addListener(() => {}, message); } catch (e) { exceptionCaught = true; } @@ -32,7 +32,7 @@ function add_second_request_listener(message) { } function remove_request_listener(message) { - RequestService.removeListener(message); + Messaging.removeListener(message); } function finish_test() { diff --git a/mobile/android/modules/Messaging.jsm b/mobile/android/modules/Messaging.jsm index b7e3dd8307f8..da11769272cc 100644 --- a/mobile/android/modules/Messaging.jsm +++ b/mobile/android/modules/Messaging.jsm @@ -9,49 +9,26 @@ Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Task.jsm"); -this.EXPORTED_SYMBOLS = ["sendMessageToJava", "RequestService"]; +this.EXPORTED_SYMBOLS = ["sendMessageToJava", "Messaging"]; XPCOMUtils.defineLazyServiceGetter(this, "uuidgen", "@mozilla.org/uuid-generator;1", "nsIUUIDGenerator"); function sendMessageToJava(aMessage, aCallback) { - if (aCallback) { - let id = uuidgen.generateUUID().toString(); - let obs = { - observe: function(aSubject, aTopic, aData) { - let data = JSON.parse(aData); - if (data.__guid__ != id) { - return; - } + Cu.reportError("sendMessageToJava is deprecated. Use Messaging API instead."); - Services.obs.removeObserver(obs, aMessage.type + ":Response", false); - - if (data.status === "cancel") { - // No Java-side listeners handled our callback. - return; - } - - aCallback(data.status === "success" ? data.response : null, - data.status === "error" ? data.response : null); - } - } - - aMessage.__guid__ = id; - Services.obs.addObserver(obs, aMessage.type + ":Response", false); - } - - return Services.androidBridge.handleGeckoMessage(aMessage); + Messaging.sendRequest(aMessage, aCallback); } -let RequestService = { +let Messaging = { /** * Add a listener for the given message. * * Only one request listener can be registered for a given message. * * Example usage: - * RequestService.addListener({ + * Messaging.addListener({ * // aMessage is the message name. * // aData is data sent from Java with the request. * // The return value is used to respond to the request. The return @@ -66,7 +43,7 @@ let RequestService = { * * The listener may also be a generator function, useful for performing a * task asynchronously. For example: - * RequestService.addListener({ + * Messaging.addListener({ * onRequest: function* (aMessage, aData) { * yield new Promise(resolve => setTimeout(resolve, 2000)); * return { response: "bar" }; @@ -89,6 +66,41 @@ let RequestService = { removeListener: function (aMessage) { requestHandler.removeListener(aMessage); }, + + /** + * Sends a request to Java. + * + * @param aMessage Message to send; must be an object with a "type" property + * @param aCallback Callback function, required if this request expects a response. + */ + sendRequest: function (aMessage, aCallback) { + if (aCallback) { + let id = uuidgen.generateUUID().toString(); + let obs = { + observe: function(aSubject, aTopic, aData) { + let data = JSON.parse(aData); + if (data.__guid__ != id) { + return; + } + + Services.obs.removeObserver(obs, aMessage.type + ":Response", false); + + if (data.status === "cancel") { + // No Java-side listeners handled our callback. + return; + } + + aCallback(data.status === "success" ? data.response : null, + data.status === "error" ? data.response : null); + } + } + + aMessage.__guid__ = id; + Services.obs.addObserver(obs, aMessage.type + ":Response", false); + } + + return Services.androidBridge.handleGeckoMessage(aMessage); + }, }; let requestHandler = { @@ -135,7 +147,7 @@ let requestHandler = { Cu.reportError(e); } - sendMessageToJava({ + Messaging.sendRequest({ type: "Gecko:Request" + wrapper.id, response: response });