| Index: chrome/test/data/extensions/api_test/messaging/interstitial_component/background.js
|
| diff --git a/chrome/test/data/extensions/api_test/messaging/interstitial_component/background.js b/chrome/test/data/extensions/api_test/messaging/interstitial_component/background.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..cc2a199569360dd178363f097c6f5433780f9fd4
|
| --- /dev/null
|
| +++ b/chrome/test/data/extensions/api_test/messaging/interstitial_component/background.js
|
| @@ -0,0 +1,110 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// This port is opened by a content script in an interstitial. This is used by
|
| +// the tests to drive the tests.
|
| +var testPort;
|
| +var testPortPromise = new Promise(function(resolve) {
|
| + chrome.test.listenOnce(chrome.runtime.onConnect, function(port) {
|
| + testPort = port;
|
| + resolve();
|
| + });
|
| +});
|
| +
|
| +// Start a test and wait until the set-up (not necessarily the test!) is done.
|
| +function sendToInterstitialAndWait(testName) {
|
| + testPort.postMessage(testName);
|
| + chrome.test.listenOnce(testPort.onMessage, function(msg) {
|
| + chrome.test.assertEq(testName, msg);
|
| + });
|
| +}
|
| +
|
| +function assertIsPortFromInterstitial(port, expectedName) {
|
| + chrome.test.assertEq(expectedName, port.name);
|
| + chrome.test.assertEq(undefined, port.sender.tab);
|
| + chrome.test.assertEq(undefined, port.sender.frameId);
|
| + chrome.test.assertTrue(port.sender.url.startsWith('data:'));
|
| +}
|
| +
|
| +var httpsTabId;
|
| +var httpsTabIdPromise = new Promise(function(resolve) {
|
| + // The test runner will open a https page after loading the extension.
|
| + chrome.tabs.onUpdated.addListener(function listener(tabId, changeInfo, tab) {
|
| + if (tab.url.startsWith('https://')) {
|
| + chrome.tabs.onUpdated.removeListener(listener);
|
| + httpsTabId = tabId;
|
| + resolve();
|
| + }
|
| + });
|
| +});
|
| +
|
| +chrome.test.runTests([
|
| + function waitForHttpsPage() {
|
| + httpsTabIdPromise.then(chrome.test.callbackPass(function() {
|
| + chrome.tabs.query({
|
| + url: 'https://*/*'
|
| + }, chrome.test.callbackPass(function(tabs) {
|
| + // Sanity check. There should only be one https tab.
|
| + chrome.test.assertEq(1, tabs.length);
|
| + }));
|
| + }));
|
| + },
|
| +
|
| + // All following tests rely on testPort, so ensure that it exists!
|
| + function waitForPortFromInterstitial() {
|
| + testPortPromise.then(chrome.test.callbackPass(function() {
|
| + assertIsPortFromInterstitial(testPort, 'port from interstitial');
|
| + }));
|
| + },
|
| +
|
| + // Tests whether ping-ponging with sendMessage works.
|
| + function testSendMessage() {
|
| + chrome.test.listenOnce(chrome.runtime.onMessage,
|
| + function(msg, sender, sendResponse) {
|
| + chrome.test.assertEq('First from interstitial', msg);
|
| +
|
| + var kResponse = 'hello me!';
|
| + chrome.test.listenOnce(chrome.runtime.onMessage, function(msg) {
|
| + chrome.test.assertEq('interstitial received: ' + kResponse, msg);
|
| + });
|
| + sendResponse(kResponse);
|
| + });
|
| + sendToInterstitialAndWait('testSendMessage');
|
| + },
|
| +
|
| + // Tests whether the onDisconnect event is fired in the interstitial page.
|
| + function testDisconnectByBackground() {
|
| + chrome.test.listenOnce(chrome.runtime.onConnect,
|
| + function(port) {
|
| + assertIsPortFromInterstitial(port, 'disconnect by background');
|
| + port.disconnect();
|
| + });
|
| + sendToInterstitialAndWait('testDisconnectByBackground');
|
| + },
|
| +
|
| + // Tests whether the onDisconnect event is fired when the port is closed from
|
| + // the content script in the interstitial page.
|
| + function testDisconnectByInterstitial() {
|
| + chrome.test.listenOnce(chrome.runtime.onConnect,
|
| + function(port) {
|
| + assertIsPortFromInterstitial(port, 'disconnect by interstitial');
|
| + chrome.test.listenOnce(port.onDisconnect, function() {
|
| + chrome.test.assertNoLastError();
|
| + });
|
| + });
|
| + sendToInterstitialAndWait('testDisconnectByInterstitial');
|
| + },
|
| +
|
| + // Closing the interstitial should cause the ports to disconnect.
|
| + function testDisconnectByClosingInterstitial() {
|
| + chrome.test.listenOnce(testPort.onDisconnect, function() {
|
| + chrome.test.assertNoLastError();
|
| + testPort = null;
|
| + });
|
| + // Close the interstitial. Should trigger onDisconnect.
|
| + chrome.tabs.update(httpsTabId, {
|
| + url: 'about:blank'
|
| + });
|
| + },
|
| +]);
|
|
|