OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 JSON.parse = function() { |
| 6 return "JSON.parse clobbered by extension."; |
| 7 }; |
| 8 |
| 9 JSON.stringify = function() { |
| 10 return "JSON.stringify clobbered by extension."; |
| 11 }; |
| 12 |
| 13 Array.prototype.toJSON = function() { |
| 14 return "Array.prototype.toJSON clobbered by extension."; |
| 15 }; |
| 16 |
| 17 Object.prototype.toJSON = function() { |
| 18 return "Object.prototype.toJSON clobbered by extension."; |
| 19 }; |
| 20 |
| 21 // Keep track of the tab that we're running tests in, for simplicity. |
| 22 var testTab = null; |
| 23 |
| 24 chrome.test.getConfig(function(config) { |
| 25 chrome.test.runTests([ |
| 26 function setupTestTab() { |
| 27 chrome.test.log("Creating tab..."); |
| 28 chrome.tabs.create({ |
| 29 url: "http://localhost:PORT/files/extensions/test_file.html" |
| 30 .replace(/PORT/, config.testServer.port) |
| 31 }, function(tab) { |
| 32 chrome.tabs.onUpdated.addListener(function listener(tabid, info) { |
| 33 if (tab.id == tabid && info.status == 'complete') { |
| 34 chrome.test.log("Created tab: " + tab.url); |
| 35 chrome.tabs.onUpdated.removeListener(listener); |
| 36 testTab = tab; |
| 37 chrome.test.succeed(); |
| 38 } |
| 39 }); |
| 40 }); |
| 41 }, |
| 42 |
| 43 // Tests that postMessage to the tab and its response works. |
| 44 function postMessage() { |
| 45 var port = chrome.tabs.connect(testTab.id); |
| 46 port.postMessage({testPostMessage: true}); |
| 47 port.onMessage.addListener(function(msg) { |
| 48 port.disconnect(); |
| 49 chrome.test.succeed(); |
| 50 }); |
| 51 }, |
| 52 |
| 53 // Tests that port name is sent & received correctly. |
| 54 function portName() { |
| 55 var portName = "lemonjello"; |
| 56 var port = chrome.tabs.connect(testTab.id, {name: portName}); |
| 57 port.postMessage({testPortName: true}); |
| 58 port.onMessage.addListener(function(msg) { |
| 59 chrome.test.assertEq(msg.portName, portName); |
| 60 port.disconnect(); |
| 61 chrome.test.succeed(); |
| 62 }); |
| 63 }, |
| 64 |
| 65 // Tests that postMessage from the tab and its response works. |
| 66 function postMessageFromTab() { |
| 67 chrome.extension.onConnect.addListener(function(port) { |
| 68 port.onMessage.addListener(function(msg) { |
| 69 chrome.test.assertTrue(msg.testPostMessageFromTab); |
| 70 port.postMessage({success: true, portName: port.name}); |
| 71 chrome.test.log("postMessageFromTab: got message from tab"); |
| 72 }); |
| 73 }); |
| 74 |
| 75 var port = chrome.tabs.connect(testTab.id); |
| 76 port.postMessage({testPostMessageFromTab: true}); |
| 77 chrome.test.log("postMessageFromTab: sent first message to tab"); |
| 78 port.onMessage.addListener(function(msg) { |
| 79 port.disconnect(); |
| 80 chrome.test.succeed(); |
| 81 }); |
| 82 }, |
| 83 |
| 84 // Tests receiving a request from a content script and responding. |
| 85 function sendRequestFromTab() { |
| 86 var doneListening = chrome.test.listenForever( |
| 87 chrome.extension.onRequest, |
| 88 function(request, sender, sendResponse) { |
| 89 chrome.test.assertTrue("url" in sender.tab, "no tab available."); |
| 90 chrome.test.assertEq(sender.id, location.host); |
| 91 if (request.step == 1) { |
| 92 // Step 1: Page should send another request for step 2. |
| 93 chrome.test.log("sendRequestFromTab: got step 1"); |
| 94 sendResponse({nextStep: true}); |
| 95 } else { |
| 96 // Step 2. |
| 97 chrome.test.assertEq(request.step, 2); |
| 98 sendResponse(); |
| 99 doneListening(); |
| 100 } |
| 101 }); |
| 102 |
| 103 var port = chrome.tabs.connect(testTab.id); |
| 104 port.postMessage({testSendRequestFromTab: true}); |
| 105 port.disconnect(); |
| 106 chrome.test.log("sendRequestFromTab: sent first message to tab"); |
| 107 }, |
| 108 |
| 109 // Tests error handling when sending a request from a content script to an |
| 110 // invalid extension. |
| 111 function sendRequestFromTabError() { |
| 112 chrome.test.listenOnce( |
| 113 chrome.extension.onRequest, |
| 114 function(request, sender, sendResponse) { |
| 115 if (!request.success) |
| 116 chrome.test.fail(); |
| 117 } |
| 118 ); |
| 119 |
| 120 var port = chrome.tabs.connect(testTab.id); |
| 121 port.postMessage({testSendRequestFromTabError: true}); |
| 122 port.disconnect(); |
| 123 chrome.test.log("testSendRequestFromTabError: send 1st message to tab"); |
| 124 }, |
| 125 |
| 126 // Tests error handling when connecting to an invalid extension from a |
| 127 // content script. |
| 128 function connectFromTabError() { |
| 129 chrome.test.listenOnce( |
| 130 chrome.extension.onRequest, |
| 131 function(request, sender, sendResponse) { |
| 132 if (!request.success) |
| 133 chrome.test.fail(); |
| 134 } |
| 135 ); |
| 136 |
| 137 var port = chrome.tabs.connect(testTab.id); |
| 138 port.postMessage({testConnectFromTabError: true}); |
| 139 port.disconnect(); |
| 140 chrome.test.log("testConnectFromTabError: sent 1st message to tab"); |
| 141 }, |
| 142 |
| 143 // Tests sending a request to a tab and receiving a response. |
| 144 function sendRequest() { |
| 145 chrome.tabs.sendRequest(testTab.id, {step2: 1}, function(response) { |
| 146 chrome.test.assertTrue(response.success); |
| 147 chrome.test.succeed(); |
| 148 }); |
| 149 }, |
| 150 |
| 151 // Tests that we get the disconnect event when the tab disconnect. |
| 152 function disconnect() { |
| 153 var port = chrome.tabs.connect(testTab.id); |
| 154 port.postMessage({testDisconnect: true}); |
| 155 port.onDisconnect.addListener(function() { |
| 156 chrome.test.succeed(); |
| 157 }); |
| 158 }, |
| 159 |
| 160 // Tests that we get the disconnect event when the tab context closes. |
| 161 function disconnectOnClose() { |
| 162 var port = chrome.tabs.connect(testTab.id); |
| 163 port.postMessage({testDisconnectOnClose: true}); |
| 164 port.onDisconnect.addListener(function() { |
| 165 chrome.test.succeed(); |
| 166 testTab = null; // the tab is about:blank now. |
| 167 }); |
| 168 }, |
| 169 ]); |
| 170 }); |
OLD | NEW |