summaryrefslogtreecommitdiffstats
path: root/toolkit/modules/tests/browser/browser_RemotePageManager.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/modules/tests/browser/browser_RemotePageManager.js')
-rw-r--r--toolkit/modules/tests/browser/browser_RemotePageManager.js400
1 files changed, 0 insertions, 400 deletions
diff --git a/toolkit/modules/tests/browser/browser_RemotePageManager.js b/toolkit/modules/tests/browser/browser_RemotePageManager.js
deleted file mode 100644
index 774d33034..000000000
--- a/toolkit/modules/tests/browser/browser_RemotePageManager.js
+++ /dev/null
@@ -1,400 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-const TEST_URL = "http://www.example.com/browser/toolkit/modules/tests/browser/testremotepagemanager.html";
-
-var { RemotePages, RemotePageManager } = Cu.import("resource://gre/modules/RemotePageManager.jsm", {});
-
-function failOnMessage(message) {
- ok(false, "Should not have seen message " + message.name);
-}
-
-function waitForMessage(port, message, expectedPort = port) {
- return new Promise((resolve) => {
- function listener(message) {
- is(message.target, expectedPort, "Message should be from the right port.");
-
- port.removeMessageListener(listener);
- resolve(message);
- }
-
- port.addMessageListener(message, listener);
- });
-}
-
-function waitForPort(url, createTab = true) {
- return new Promise((resolve) => {
- RemotePageManager.addRemotePageListener(url, (port) => {
- RemotePageManager.removeRemotePageListener(url);
-
- waitForMessage(port, "RemotePage:Load").then(() => resolve(port));
- });
-
- if (createTab)
- gBrowser.selectedTab = gBrowser.addTab(url);
- });
-}
-
-function waitForPage(pages) {
- return new Promise((resolve) => {
- function listener({ target }) {
- pages.removeMessageListener("RemotePage:Init", listener);
-
- waitForMessage(target, "RemotePage:Load").then(() => resolve(target));
- }
-
- pages.addMessageListener("RemotePage:Init", listener);
- gBrowser.selectedTab = gBrowser.addTab(TEST_URL);
- });
-}
-
-function swapDocShells(browser1, browser2) {
- // Swap frameLoaders.
- browser1.swapDocShells(browser2);
-
- // Swap permanentKeys.
- let tmp = browser1.permanentKey;
- browser1.permanentKey = browser2.permanentKey;
- browser2.permanentKey = tmp;
-}
-
-// Test that opening a page creates a port, sends the load event and then
-// navigating to a new page sends the unload event. Going back should create a
-// new port
-add_task(function* init_navigate() {
- let port = yield waitForPort(TEST_URL);
- is(port.browser, gBrowser.selectedBrowser, "Port is for the correct browser");
-
- let loaded = new Promise(resolve => {
- function listener() {
- gBrowser.selectedBrowser.removeEventListener("load", listener, true);
- resolve();
- }
- gBrowser.selectedBrowser.addEventListener("load", listener, true);
- gBrowser.loadURI("about:blank");
- });
-
- yield waitForMessage(port, "RemotePage:Unload");
-
- // Port should be destroyed now
- try {
- port.addMessageListener("Foo", failOnMessage);
- ok(false, "Should have seen exception");
- }
- catch (e) {
- ok(true, "Should have seen exception");
- }
-
- try {
- port.sendAsyncMessage("Foo");
- ok(false, "Should have seen exception");
- }
- catch (e) {
- ok(true, "Should have seen exception");
- }
-
- yield loaded;
-
- gBrowser.goBack();
- port = yield waitForPort(TEST_URL, false);
-
- port.sendAsyncMessage("Ping2");
- let message = yield waitForMessage(port, "Pong2");
- port.destroy();
-
- gBrowser.removeCurrentTab();
-});
-
-// Test that opening a page creates a port, sends the load event and then
-// closing the tab sends the unload event
-add_task(function* init_close() {
- let port = yield waitForPort(TEST_URL);
- is(port.browser, gBrowser.selectedBrowser, "Port is for the correct browser");
-
- let unloadPromise = waitForMessage(port, "RemotePage:Unload");
- gBrowser.removeCurrentTab();
- yield unloadPromise;
-
- // Port should be destroyed now
- try {
- port.addMessageListener("Foo", failOnMessage);
- ok(false, "Should have seen exception");
- }
- catch (e) {
- ok(true, "Should have seen exception");
- }
-
- try {
- port.sendAsyncMessage("Foo");
- ok(false, "Should have seen exception");
- }
- catch (e) {
- ok(true, "Should have seen exception");
- }
-});
-
-// Tests that we can send messages to individual pages even when more than one
-// is open
-add_task(function* multiple_ports() {
- let port1 = yield waitForPort(TEST_URL);
- is(port1.browser, gBrowser.selectedBrowser, "Port is for the correct browser");
-
- let port2 = yield waitForPort(TEST_URL);
- is(port2.browser, gBrowser.selectedBrowser, "Port is for the correct browser");
-
- port2.addMessageListener("Pong", failOnMessage);
- port1.sendAsyncMessage("Ping", { str: "foobar", counter: 0 });
- let message = yield waitForMessage(port1, "Pong");
- port2.removeMessageListener("Pong", failOnMessage);
- is(message.data.str, "foobar", "String should pass through");
- is(message.data.counter, 1, "Counter should be incremented");
-
- port1.addMessageListener("Pong", failOnMessage);
- port2.sendAsyncMessage("Ping", { str: "foobaz", counter: 5 });
- message = yield waitForMessage(port2, "Pong");
- port1.removeMessageListener("Pong", failOnMessage);
- is(message.data.str, "foobaz", "String should pass through");
- is(message.data.counter, 6, "Counter should be incremented");
-
- let unloadPromise = waitForMessage(port2, "RemotePage:Unload");
- gBrowser.removeTab(gBrowser.getTabForBrowser(port2.browser));
- yield unloadPromise;
-
- try {
- port2.addMessageListener("Pong", failOnMessage);
- ok(false, "Should not have been able to add a new message listener to a destroyed port.");
- }
- catch (e) {
- ok(true, "Should not have been able to add a new message listener to a destroyed port.");
- }
-
- port1.sendAsyncMessage("Ping", { str: "foobar", counter: 0 });
- message = yield waitForMessage(port1, "Pong");
- is(message.data.str, "foobar", "String should pass through");
- is(message.data.counter, 1, "Counter should be incremented");
-
- unloadPromise = waitForMessage(port1, "RemotePage:Unload");
- gBrowser.removeTab(gBrowser.getTabForBrowser(port1.browser));
- yield unloadPromise;
-});
-
-// Tests that swapping browser docshells doesn't break the ports
-add_task(function* browser_switch() {
- let port1 = yield waitForPort(TEST_URL);
- is(port1.browser, gBrowser.selectedBrowser, "Port is for the correct browser");
- let browser1 = gBrowser.selectedBrowser;
- port1.sendAsyncMessage("SetCookie", { value: "om nom" });
-
- let port2 = yield waitForPort(TEST_URL);
- is(port2.browser, gBrowser.selectedBrowser, "Port is for the correct browser");
- let browser2 = gBrowser.selectedBrowser;
- port2.sendAsyncMessage("SetCookie", { value: "om nom nom" });
-
- port2.addMessageListener("Cookie", failOnMessage);
- port1.sendAsyncMessage("GetCookie");
- let message = yield waitForMessage(port1, "Cookie");
- port2.removeMessageListener("Cookie", failOnMessage);
- is(message.data.value, "om nom", "Should have the right cookie");
-
- port1.addMessageListener("Cookie", failOnMessage);
- port2.sendAsyncMessage("GetCookie", { str: "foobaz", counter: 5 });
- message = yield waitForMessage(port2, "Cookie");
- port1.removeMessageListener("Cookie", failOnMessage);
- is(message.data.value, "om nom nom", "Should have the right cookie");
-
- swapDocShells(browser1, browser2);
- is(port1.browser, browser2, "Should have noticed the swap");
- is(port2.browser, browser1, "Should have noticed the swap");
-
- // Cookies should have stayed the same
- port2.addMessageListener("Cookie", failOnMessage);
- port1.sendAsyncMessage("GetCookie");
- message = yield waitForMessage(port1, "Cookie");
- port2.removeMessageListener("Cookie", failOnMessage);
- is(message.data.value, "om nom", "Should have the right cookie");
-
- port1.addMessageListener("Cookie", failOnMessage);
- port2.sendAsyncMessage("GetCookie", { str: "foobaz", counter: 5 });
- message = yield waitForMessage(port2, "Cookie");
- port1.removeMessageListener("Cookie", failOnMessage);
- is(message.data.value, "om nom nom", "Should have the right cookie");
-
- swapDocShells(browser1, browser2);
- is(port1.browser, browser1, "Should have noticed the swap");
- is(port2.browser, browser2, "Should have noticed the swap");
-
- // Cookies should have stayed the same
- port2.addMessageListener("Cookie", failOnMessage);
- port1.sendAsyncMessage("GetCookie");
- message = yield waitForMessage(port1, "Cookie");
- port2.removeMessageListener("Cookie", failOnMessage);
- is(message.data.value, "om nom", "Should have the right cookie");
-
- port1.addMessageListener("Cookie", failOnMessage);
- port2.sendAsyncMessage("GetCookie", { str: "foobaz", counter: 5 });
- message = yield waitForMessage(port2, "Cookie");
- port1.removeMessageListener("Cookie", failOnMessage);
- is(message.data.value, "om nom nom", "Should have the right cookie");
-
- let unloadPromise = waitForMessage(port2, "RemotePage:Unload");
- gBrowser.removeTab(gBrowser.getTabForBrowser(browser2));
- yield unloadPromise;
-
- unloadPromise = waitForMessage(port1, "RemotePage:Unload");
- gBrowser.removeTab(gBrowser.getTabForBrowser(browser1));
- yield unloadPromise;
-});
-
-// Tests that removeMessageListener in chrome works
-add_task(function* remove_chrome_listener() {
- let port = yield waitForPort(TEST_URL);
- is(port.browser, gBrowser.selectedBrowser, "Port is for the correct browser");
-
- // This relies on messages sent arriving in the same order. Pong will be
- // sent back before Pong2 so if removeMessageListener fails the test will fail
- port.addMessageListener("Pong", failOnMessage);
- port.removeMessageListener("Pong", failOnMessage);
- port.sendAsyncMessage("Ping", { str: "remove_listener", counter: 27 });
- port.sendAsyncMessage("Ping2");
- yield waitForMessage(port, "Pong2");
-
- let unloadPromise = waitForMessage(port, "RemotePage:Unload");
- gBrowser.removeCurrentTab();
- yield unloadPromise;
-});
-
-// Tests that removeMessageListener in content works
-add_task(function* remove_content_listener() {
- let port = yield waitForPort(TEST_URL);
- is(port.browser, gBrowser.selectedBrowser, "Port is for the correct browser");
-
- // This relies on messages sent arriving in the same order. Pong3 would be
- // sent back before Pong2 so if removeMessageListener fails the test will fail
- port.addMessageListener("Pong3", failOnMessage);
- port.sendAsyncMessage("Ping3");
- port.sendAsyncMessage("Ping2");
- yield waitForMessage(port, "Pong2");
-
- let unloadPromise = waitForMessage(port, "RemotePage:Unload");
- gBrowser.removeCurrentTab();
- yield unloadPromise;
-});
-
-// Test RemotePages works
-add_task(function* remote_pages_basic() {
- let pages = new RemotePages(TEST_URL);
- let port = yield waitForPage(pages);
- is(port.browser, gBrowser.selectedBrowser, "Port is for the correct browser");
-
- // Listening to global messages should work
- let unloadPromise = waitForMessage(pages, "RemotePage:Unload", port);
- gBrowser.removeCurrentTab();
- yield unloadPromise;
-
- pages.destroy();
-
- // RemotePages should be destroyed now
- try {
- pages.addMessageListener("Foo", failOnMessage);
- ok(false, "Should have seen exception");
- }
- catch (e) {
- ok(true, "Should have seen exception");
- }
-
- try {
- pages.sendAsyncMessage("Foo");
- ok(false, "Should have seen exception");
- }
- catch (e) {
- ok(true, "Should have seen exception");
- }
-});
-
-// Test sending messages to all remote pages works
-add_task(function* remote_pages_multiple() {
- let pages = new RemotePages(TEST_URL);
- let port1 = yield waitForPage(pages);
- let port2 = yield waitForPage(pages);
-
- let pongPorts = [];
- yield new Promise((resolve) => {
- function listener({ name, target, data }) {
- is(name, "Pong", "Should have seen the right response.");
- is(data.str, "remote_pages", "String should pass through");
- is(data.counter, 43, "Counter should be incremented");
- pongPorts.push(target);
- if (pongPorts.length == 2)
- resolve();
- }
-
- pages.addMessageListener("Pong", listener);
- pages.sendAsyncMessage("Ping", { str: "remote_pages", counter: 42 });
- });
-
- // We don't make any guarantees about which order messages are sent to known
- // pages so the pongs could have come back in any order.
- isnot(pongPorts[0], pongPorts[1], "Should have received pongs from different ports");
- ok(pongPorts.indexOf(port1) >= 0, "Should have seen a pong from port1");
- ok(pongPorts.indexOf(port2) >= 0, "Should have seen a pong from port2");
-
- // After destroy we should see no messages
- pages.addMessageListener("RemotePage:Unload", failOnMessage);
- pages.destroy();
-
- gBrowser.removeTab(gBrowser.getTabForBrowser(port1.browser));
- gBrowser.removeTab(gBrowser.getTabForBrowser(port2.browser));
-});
-
-// Test sending various types of data across the boundary
-add_task(function* send_data() {
- let port = yield waitForPort(TEST_URL);
- is(port.browser, gBrowser.selectedBrowser, "Port is for the correct browser");
-
- let data = {
- integer: 45,
- real: 45.78,
- str: "foobar",
- array: [1, 2, 3, 5, 27]
- };
-
- port.sendAsyncMessage("SendData", data);
- let message = yield waitForMessage(port, "ReceivedData");
-
- ok(message.data.result, message.data.status);
-
- gBrowser.removeCurrentTab();
-});
-
-// Test sending an object of data across the boundary
-add_task(function* send_data2() {
- let port = yield waitForPort(TEST_URL);
- is(port.browser, gBrowser.selectedBrowser, "Port is for the correct browser");
-
- let data = {
- integer: 45,
- real: 45.78,
- str: "foobar",
- array: [1, 2, 3, 5, 27]
- };
-
- port.sendAsyncMessage("SendData2", {data});
- let message = yield waitForMessage(port, "ReceivedData2");
-
- ok(message.data.result, message.data.status);
-
- gBrowser.removeCurrentTab();
-});
-
-add_task(function* get_ports_for_browser() {
- let pages = new RemotePages(TEST_URL);
- let port = yield waitForPage(pages);
- // waitForPage creates a new tab and selects it by default, so
- // the selected tab should be the one hosting this port.
- let browser = gBrowser.selectedBrowser;
- let foundPorts = pages.portsForBrowser(browser);
- is(foundPorts.length, 1, "There should only be one port for this simple page");
- is(foundPorts[0], port, "Should find the port");
- gBrowser.removeCurrentTab();
-});