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

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: User scoped_ptr instead of ref, refactor test 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 listenForever(
125 chrome.runtime.onMessage,
126 function(request, sender, sendResponse) {
127 // Child frames have a positive frameId.
128 senders.push(sender);
129
not at google - send to devlin 2014/11/12 01:02:46 Add comment: // testSendMessageFromFrame() in pag
robwu 2014/11/12 10:00:21 Done.
130 if (senders.length == 2) {
131 chrome.webNavigation.getAllFrames({
132 tabId: testTab.id
133 }, function(details) {
134 var expectedSenders = details.filter(function() {
135 return frame.frameId > 0; // Exlude main frame.
not at google - send to devlin 2014/11/12 01:02:46 Exlude -> Exclude.
robwu 2014/11/12 10:00:21 Done.
136 }).map(function(frame) {
137 return {
138 tab: testTab,
139 frameId: frame.frameId,
140 url: frame.url,
141 id: chrome.runtime.id
142 };
143 }).sort(sortByFrameId);
144 senders.sort(sortByFrameId);
145 chrome.test.assertEq(expectedSenders, senders);
146 doneListening();
147 });
148 }
149 }
150 );
151 function sortByFrameId(a, b) {
not at google - send to devlin 2014/11/12 01:02:46 nit: put this before it's used, not after. You cou
robwu 2014/11/12 10:00:21 Done.
152 return a.frameId < b.frameId ? 1 : -1;
153 }
154
155 var port = chrome.tabs.connect(testTab.id);
156 port.postMessage({testSendMessageFromFrame: true});
157 port.disconnect();
158 chrome.test.log("sendMessageFromFrameInTab: send 1st message to tab");
159 },
160
119 // Tests error handling when sending a request from a content script to an 161 // Tests error handling when sending a request from a content script to an
120 // invalid extension. 162 // invalid extension.
121 function sendMessageFromTabError() { 163 function sendMessageFromTabError() {
122 listenOnce( 164 listenOnce(
123 chrome.runtime.onMessage, 165 chrome.runtime.onMessage,
124 function(request, sender, sendResponse) { 166 function(request, sender, sendResponse) {
125 if (!request.success) 167 if (!request.success)
126 chrome.test.fail(); 168 chrome.test.fail();
127 } 169 }
128 ); 170 );
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 } catch(e) { 247 } catch(e) {
206 error = e; 248 error = e;
207 } 249 }
208 chrome.test.assertTrue(error != undefined); 250 chrome.test.assertTrue(error != undefined);
209 251
210 chrome.test.succeed(); 252 chrome.test.succeed();
211 }, 253 },
212 254
213 ]); 255 ]);
214 }); 256 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698