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

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

Issue 1413543005: Use FrameTreeNode ID as frameId in extension APIs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: s/:/ / Created 4 years, 11 months 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 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 // This shouldn't ever be called, so it's a bit pointless. 253 // This shouldn't ever be called, so it's a bit pointless.
254 chrome.test.fail(); 254 chrome.test.fail();
255 }); 255 });
256 // Didn't crash. 256 // Didn't crash.
257 chrome.test.succeed(); 257 chrome.test.succeed();
258 } catch (e) { 258 } catch (e) {
259 chrome.test.fail(e.stack); 259 chrome.test.fail(e.stack);
260 } 260 }
261 }, 261 },
262 262
263 // Tests that reloading a child frame disconnects the port if it was the
264 // only recipient of the port (i.e. no onConnect in main frame).
265 function connectChildFrameAndNavigate() {
266 listenOnce(chrome.runtime.onMessage, function(msg) {
267 chrome.test.assertEq('testConnectChildFrameAndNavigateSetupDone', msg);
268 // Now we have set up a frame and ensured that there is no onConnect
269 // handler in the main frame. Run the actual test:
270 var port = chrome.tabs.connect(testTab.id);
271 listenOnce(port.onDisconnect, function() {});
272 port.postMessage({testConnectChildFrameAndNavigate: true});
273 });
274 chrome.tabs.connect(testTab.id)
275 .postMessage({testConnectChildFrameAndNavigateSetup: true});
276 },
277
263 // Tests that we get the disconnect event when the tab context closes. 278 // Tests that we get the disconnect event when the tab context closes.
264 function disconnectOnClose() { 279 function disconnectOnClose() {
265 var port = chrome.tabs.connect(testTab.id); 280 var port = chrome.tabs.connect(testTab.id);
266 port.postMessage({testDisconnectOnClose: true}); 281 port.postMessage({testDisconnectOnClose: true});
267 listenOnce(port.onDisconnect, function() { 282 listenOnce(port.onDisconnect, function() {
268 testTab = null; // the tab is about:blank now. 283 testTab = null; // the tab is about:blank now.
269 }); 284 });
270 }, 285 },
271 286
272 // Tests that the sendRequest API is disabled. 287 // Tests that the sendRequest API is disabled.
(...skipping 20 matching lines...) Expand all
293 // Tests that chrome.runtime.sendMessage is *not* delivered to the current 308 // Tests that chrome.runtime.sendMessage is *not* delivered to the current
294 // context, consistent behavior with chrome.runtime.connect() and web APIs 309 // context, consistent behavior with chrome.runtime.connect() and web APIs
295 // like localStorage changed listeners. 310 // like localStorage changed listeners.
296 // Regression test for http://crbug.com/479951. 311 // Regression test for http://crbug.com/479951.
297 function sendMessageToCurrentContextFails() { 312 function sendMessageToCurrentContextFails() {
298 var stopFailing = failWhileListening(chrome.runtime.onMessage); 313 var stopFailing = failWhileListening(chrome.runtime.onMessage);
299 chrome.runtime.sendMessage('ping', chrome.test.callbackFail( 314 chrome.runtime.sendMessage('ping', chrome.test.callbackFail(
300 'Could not establish connection. Receiving end does not exist.', 315 'Could not establish connection. Receiving end does not exist.',
301 function() { 316 function() {
302 stopFailing(); 317 stopFailing();
303 chrome.test.succeed();
304 } 318 }
305 )); 319 ));
306 }, 320 },
307 321
308 // Like sendMessageToCurrentContextFails, but with the sendMessage call not 322 // Like sendMessageToCurrentContextFails, but with the sendMessage call not
309 // given a callback. This requires a more creative test setup because there 323 // given a callback. This requires a more creative test setup because there
310 // is no callback to signal when it's supposed to have been done. 324 // is no callback to signal when it's supposed to have been done.
311 // Regression test for http://crbug.com/479951. 325 // Regression test for http://crbug.com/479951.
312 // 326 //
313 // NOTE(kalman): This test is correct. However, the patch which fixes it 327 // NOTE(kalman): This test is correct. However, the patch which fixes it
314 // (see bug) was reverted, and I don't plan on resubmitting, so instead 328 // (see bug) was reverted, and I don't plan on resubmitting, so instead
315 // I'll comment out this test, and leave it here for the record. 329 // I'll comment out this test, and leave it here for the record.
316 // 330 //
317 // function sendMessageToCurrentTextWithoutCallbackFails() { 331 // function sendMessageToCurrentTextWithoutCallbackFails() {
318 // // Make the iframe - in a different context - watch for the message 332 // // Make the iframe - in a different context - watch for the message
319 // // event. It *should* get it, while the current context's one doesn't. 333 // // event. It *should* get it, while the current context's one doesn't.
320 // var iframe = document.createElement('iframe'); 334 // var iframe = document.createElement('iframe');
321 // iframe.src = chrome.runtime.getURL('blank_iframe.html'); 335 // iframe.src = chrome.runtime.getURL('blank_iframe.html');
322 // document.body.appendChild(iframe); 336 // document.body.appendChild(iframe);
323 337
324 // var stopFailing = failWhileListening(chrome.runtime.onMessage); 338 // var stopFailing = failWhileListening(chrome.runtime.onMessage);
325 // chrome.test.listenOnce( 339 // chrome.test.listenOnce(
326 // iframe.contentWindow.chrome.runtime.onMessage, 340 // iframe.contentWindow.chrome.runtime.onMessage,
327 // function(msg, sender) { 341 // function(msg, sender) {
328 // chrome.test.assertEq('ping', msg); 342 // chrome.test.assertEq('ping', msg);
329 // chrome.test.assertEq(chrome.runtime.id, sender.id); 343 // chrome.test.assertEq(chrome.runtime.id, sender.id);
330 // chrome.test.assertEq(location.href, sender.url); 344 // chrome.test.assertEq(location.href, sender.url);
331 // setTimeout(function() { 345 // setTimeout(function() {
332 // stopFailing(); 346 // stopFailing();
333 // chrome.test.succeed();
334 // }, 0); 347 // }, 0);
335 // } 348 // }
336 // ); 349 // );
337 // 350 //
338 // chrome.runtime.sendMessage('ping'); 351 // chrome.runtime.sendMessage('ping');
339 // }, 352 // },
340
341 ]); 353 ]);
342 }); 354 });
343 355
344 function connectToTabWithFrameId(frameId, expectedMessages) { 356 function connectToTabWithFrameId(frameId, expectedMessages) {
345 var port = chrome.tabs.connect(testTab.id, { 357 var port = chrome.tabs.connect(testTab.id, {
346 frameId: frameId 358 frameId: frameId
347 }); 359 });
348 var messages = []; 360 var messages = [];
349 var isDone = false; 361 var isDone = false;
350 listenForever(port.onMessage, function(message) { 362 port.onMessage.addListener(function(message) {
351 if (isDone) // Should not get any messages after completing the test. 363 if (isDone) { // Should not get any messages after completing the test.
352 chrome.test.fail( 364 chrome.test.fail(
353 'Unexpected message from port to frame ' + frameId + ': ' + message); 365 'Unexpected message from port to frame ' + frameId + ': ' + message);
366 return;
367 }
354 368
355 messages.push(message); 369 messages.push(message);
356 isDone = messages.length == expectedMessages.length; 370 isDone = messages.length == expectedMessages.length;
357 if (isDone) { 371 if (isDone) {
358 chrome.test.assertEq(expectedMessages.sort(), messages.sort()); 372 chrome.test.assertEq(expectedMessages.sort(), messages.sort());
359 chrome.test.succeed(); 373 chrome.test.succeed();
360 } 374 }
361 }); 375 });
362 listenOnce(port.onDisconnect, function() { 376 port.onDisconnect.addListener(function() {
363 if (!isDone) // The event should never be triggered when we expect messages. 377 if (!isDone) // The event should never be triggered when we expect messages.
364 chrome.test.fail('Unexpected disconnect from port to frame ' + frameId); 378 chrome.test.fail('Unexpected disconnect from port to frame ' + frameId);
365 }); 379 });
366 port.postMessage({testSendMessageToFrame: true}); 380 port.postMessage({testSendMessageToFrame: true});
367 chrome.test.log('connectToTabWithFrameId: port to frame ' + frameId); 381 chrome.test.log('connectToTabWithFrameId: port to frame ' + frameId);
368 } 382 }
369 383
370 // Listens to |event| and returns a callback to run to stop listening. While 384 // Listens to |event| and returns a callback to run to stop listening. While
371 // listening, if |event| is fired, calls chrome.test.fail(). 385 // listening, if |event| is fired, calls chrome.test.fail().
372 function failWhileListening(event, doneListening) { 386 function failWhileListening(event, doneListening) {
373 var failListener = function() { 387 var failListener = function() {
374 chrome.test.fail('Event listener ran, but it shouldn\'t have. ' + 388 chrome.test.fail('Event listener ran, but it shouldn\'t have. ' +
375 'It\'s possible that may be triggered flakily, but this ' + 389 'It\'s possible that may be triggered flakily, but this ' +
376 'really is a real failure, not flaky sadness. Promise!'); 390 'really is a real failure, not flaky sadness. Promise!');
377 }; 391 };
378 var release = chrome.test.callbackAdded(); 392 var release = chrome.test.callbackAdded();
379 event.addListener(failListener); 393 event.addListener(failListener);
380 return function() { 394 return function() {
381 event.removeListener(failListener); 395 event.removeListener(failListener);
382 release(); 396 release();
383 }; 397 };
384 } 398 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698