Files
tubestation/devtools/client/responsive.html/utils/message.js
J. Ryan Stinnett 1f81faff72 Bug 1338604 - Tell manager when custom devices are removed. r=gl
The action creator for removing custom devices calls the one for remove device
association directly, which skips the step of also messaging the manager.

I've made the simplest change to fix just this issue, which moves the message
sending into the action creator for this one case.  Bug 1332754 will apply the
same approach to other messages (they aren't causing issues yet since they are
not called from other action creators in the same way).

MozReview-Commit-ID: AICcT2vG1wl
2017-02-10 14:51:26 -06:00

60 lines
1.4 KiB
JavaScript

/* 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");
const REQUEST_DONE_SUFFIX = ":done";
function wait(win, type) {
let deferred = promise.defer();
let onMessage = event => {
if (event.data.type !== type) {
return;
}
win.removeEventListener("message", onMessage);
deferred.resolve();
};
win.addEventListener("message", onMessage);
return deferred.promise;
}
/**
* Post a message to some window.
*
* @param win
* The window to post to.
* @param typeOrMessage
* Either a string or and an object representing the message to send.
* If this is a string, it will be expanded into an object with the string as the
* `type` field. If this is an object, it will be sent as is.
*/
function post(win, typeOrMessage) {
// When running unit tests on XPCShell, there is no window to send messages to.
if (!win) {
return;
}
let message = typeOrMessage;
if (typeof typeOrMessage == "string") {
message = {
type: typeOrMessage,
};
}
win.postMessage(message, "*");
}
function request(win, type) {
let done = wait(win, type + REQUEST_DONE_SUFFIX);
post(win, type);
return done;
}
exports.wait = wait;
exports.post = post;
exports.request = request;