Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(98)

Side by Side Diff: chrome/test/data/extensions/api_test/messaging/connect/test.js

Issue 709933002: Add frameId to MessageSender (extension messaging API) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: test: sender.tab.status = 'complete' Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 var listenOnce = chrome.test.listenOnce; 5 var listenOnce = chrome.test.listenOnce;
6 var listenForever = chrome.test.listenForever; 6 var listenForever = chrome.test.listenForever;
7 7
8 JSON.parse = function() { 8 JSON.parse = function() {
9 return "JSON.parse clobbered by extension."; 9 return "JSON.parse clobbered by extension.";
10 }; 10 };
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 chrome.test.assertEq(msg.portName, portName); 63 chrome.test.assertEq(msg.portName, portName);
64 port.disconnect(); 64 port.disconnect();
65 }); 65 });
66 }, 66 },
67 67
68 // Tests that postMessage from the tab and its response works. 68 // Tests that postMessage from the tab and its response works.
69 function postMessageFromTab() { 69 function postMessageFromTab() {
70 listenOnce(chrome.runtime.onConnect, function(port) { 70 listenOnce(chrome.runtime.onConnect, function(port) {
71 chrome.test.assertEq({ 71 chrome.test.assertEq({
72 tab: testTab, 72 tab: testTab,
73 frameId: 0, // Main frame
73 url: testTab.url, 74 url: testTab.url,
74 id: chrome.runtime.id 75 id: chrome.runtime.id
75 }, port.sender); 76 }, port.sender);
76 listenOnce(port.onMessage, function(msg) { 77 listenOnce(port.onMessage, function(msg) {
77 chrome.test.assertTrue(msg.testPostMessageFromTab); 78 chrome.test.assertTrue(msg.testPostMessageFromTab);
78 port.postMessage({success: true, portName: port.name}); 79 port.postMessage({success: true, portName: port.name});
79 chrome.test.log("postMessageFromTab: got message from tab"); 80 chrome.test.log("postMessageFromTab: got message from tab");
80 }); 81 });
81 }); 82 });
82 83
83 var port = chrome.tabs.connect(testTab.id); 84 var port = chrome.tabs.connect(testTab.id);
84 port.postMessage({testPostMessageFromTab: true}); 85 port.postMessage({testPostMessageFromTab: true});
85 chrome.test.log("postMessageFromTab: sent first message to tab"); 86 chrome.test.log("postMessageFromTab: sent first message to tab");
86 listenOnce(port.onMessage, function(msg) { 87 listenOnce(port.onMessage, function(msg) {
87 port.disconnect(); 88 port.disconnect();
88 }); 89 });
89 }, 90 },
90 91
91 // Tests receiving a request from a content script and responding. 92 // Tests receiving a request from a content script and responding.
92 function sendMessageFromTab() { 93 function sendMessageFromTab() {
93 var doneListening = listenForever( 94 var doneListening = listenForever(
94 chrome.runtime.onMessage, 95 chrome.runtime.onMessage,
95 function(request, sender, sendResponse) { 96 function(request, sender, sendResponse) {
96 chrome.test.assertEq({ 97 chrome.test.assertEq({
97 tab: testTab, 98 tab: testTab,
99 frameId: 0, // Main frame
98 url: testTab.url, 100 url: testTab.url,
99 id: chrome.runtime.id 101 id: chrome.runtime.id
100 }, sender); 102 }, sender);
101 if (request.step == 1) { 103 if (request.step == 1) {
102 // Step 1: Page should send another request for step 2. 104 // Step 1: Page should send another request for step 2.
103 chrome.test.log("sendMessageFromTab: got step 1"); 105 chrome.test.log("sendMessageFromTab: got step 1");
104 sendResponse({nextStep: true}); 106 sendResponse({nextStep: true});
105 } else { 107 } else {
106 // Step 2. 108 // Step 2.
107 chrome.test.assertEq(request.step, 2); 109 chrome.test.assertEq(request.step, 2);
108 sendResponse(); 110 sendResponse();
109 doneListening(); 111 doneListening();
110 } 112 }
111 }); 113 });
112 114
113 var port = chrome.tabs.connect(testTab.id); 115 var port = chrome.tabs.connect(testTab.id);
114 port.postMessage({testSendMessageFromTab: true}); 116 port.postMessage({testSendMessageFromTab: true});
115 port.disconnect(); 117 port.disconnect();
116 chrome.test.log("sendMessageFromTab: sent first message to tab"); 118 chrome.test.log("sendMessageFromTab: sent first message to tab");
117 }, 119 },
118 120
121 // Tests that a message from a child frame has a correct frameId.
122 function sendMessageFromFrameInTab() {
123 var senders = [];
124 var doneListening = listenForever(
125 chrome.runtime.onMessage,
126 function(request, sender, sendResponse) {
127 // The tab's load status could either be "loading" or "complete",
128 // depending on whether all frames have finished loading. Since we
129 // want this test to be deterministic, set status to "complete".
130 sender.tab.status = 'complete';
131 // Child frames have a positive frameId.
132 senders.push(sender);
133
134 // testSendMessageFromFrame() in page.js adds 2 frames. Wait for
135 // messages from each.
136 if (senders.length == 2) {
137 chrome.webNavigation.getAllFrames({
138 tabId: testTab.id
139 }, function(details) {
140 function sortByFrameId(a, b) {
141 return a.frameId < b.frameId ? 1 : -1;
142 }
143 var expectedSenders = details.filter(function(frame) {
144 return frame.frameId > 0; // Exclude main frame.
145 }).map(function(frame) {
146 return {
147 tab: testTab,
148 frameId: frame.frameId,
149 url: frame.url,
150 id: chrome.runtime.id
151 };
152 }).sort(sortByFrameId);
153 senders.sort(sortByFrameId);
154 chrome.test.assertEq(expectedSenders, senders);
155 doneListening();
156 });
157 }
158 }
159 );
160
161 var port = chrome.tabs.connect(testTab.id);
162 port.postMessage({testSendMessageFromFrame: true});
163 port.disconnect();
164 chrome.test.log("sendMessageFromFrameInTab: send 1st message to tab");
165 },
166
119 // Tests error handling when sending a request from a content script to an 167 // Tests error handling when sending a request from a content script to an
120 // invalid extension. 168 // invalid extension.
121 function sendMessageFromTabError() { 169 function sendMessageFromTabError() {
122 listenOnce( 170 listenOnce(
123 chrome.runtime.onMessage, 171 chrome.runtime.onMessage,
124 function(request, sender, sendResponse) { 172 function(request, sender, sendResponse) {
125 if (!request.success) 173 if (!request.success)
126 chrome.test.fail(); 174 chrome.test.fail();
127 } 175 }
128 ); 176 );
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 } catch(e) { 253 } catch(e) {
206 error = e; 254 error = e;
207 } 255 }
208 chrome.test.assertTrue(error != undefined); 256 chrome.test.assertTrue(error != undefined);
209 257
210 chrome.test.succeed(); 258 chrome.test.succeed();
211 }, 259 },
212 260
213 ]); 261 ]);
214 }); 262 });
OLDNEW
« no previous file with comments | « chrome/test/data/extensions/api_test/messaging/connect/page.js ('k') | extensions/common/api/runtime.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698