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

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: Generate frameId in browser 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 listenOnce(
124 chrome.runtime.onMessage,
125 function(request, sender, sendResponse) {
126 chrome.test.log("sendMessageFromFrameInTab: got frameId " +
127 sender.frameId);
128 // Child frames have a positive frameId.
129 chrome.test.assertTrue(sender.frameId >= 1);
130 delete sender.frameId;
not at google - send to devlin 2014/11/11 00:03:04 Rather than deleting the frameId like this it woul
robwu 2014/11/11 00:34:26 I'll be checking frameId / URL below.
131 chrome.test.assertEq({
132 tab: testTab,
133 url: request.frameUrl,
134 id: chrome.runtime.id
135 }, sender);
136
137 // Now test whether the frameId that we got back makes sense...
138 chrome.webNavigation.getAllFrames({
139 tabId: testTab.id
140 }, chrome.test.callback(function(details) {
141 var frames = details.filter(function(frame) {
142 return frame.frameId === sender.frameId;
not at google - send to devlin 2014/11/11 00:03:04 Hasn't sender.frameId been deleted at this point?
robwu 2014/11/11 00:34:26 Done.
143 });
144 // If |frames.length| is zero, then the frameId was bogus.
145 // If it is higher than one, then the webNavigation API is broken.
146 chrome.test.assertEq(frames.length, 1);
147 chrome.test.assertEq(frames[0].url, request.frameUrl);
148 }));
149 }
150 );
151
152 var port = chrome.tabs.connect(testTab.id);
153 port.postMessage({testSendMessageFromFrame: true});
154 port.disconnect();
155 chrome.test.log("sendMessageFromFrameInTab: send 1st message to tab");
156 },
157
119 // Tests error handling when sending a request from a content script to an 158 // Tests error handling when sending a request from a content script to an
120 // invalid extension. 159 // invalid extension.
121 function sendMessageFromTabError() { 160 function sendMessageFromTabError() {
122 listenOnce( 161 listenOnce(
123 chrome.runtime.onMessage, 162 chrome.runtime.onMessage,
124 function(request, sender, sendResponse) { 163 function(request, sender, sendResponse) {
125 if (!request.success) 164 if (!request.success)
126 chrome.test.fail(); 165 chrome.test.fail();
127 } 166 }
128 ); 167 );
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 } catch(e) { 244 } catch(e) {
206 error = e; 245 error = e;
207 } 246 }
208 chrome.test.assertTrue(error != undefined); 247 chrome.test.assertTrue(error != undefined);
209 248
210 chrome.test.succeed(); 249 chrome.test.succeed();
211 }, 250 },
212 251
213 ]); 252 ]);
214 }); 253 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698