Index: chrome/test/data/extensions/api_test/incognito/apis/background.js |
=================================================================== |
--- chrome/test/data/extensions/api_test/incognito/apis/background.js (revision 0) |
+++ chrome/test/data/extensions/api_test/incognito/apis/background.js (revision 0) |
@@ -0,0 +1,131 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+var normalWindow, normalTab; |
+var incognitoWindow, incognitoTab; |
+ |
+var pass = chrome.test.callbackPass; |
+var fail = chrome.test.callbackFail; |
+var assertEq = chrome.test.assertEq; |
+var assertTrue = chrome.test.assertTrue; |
+ |
+chrome.test.getConfig(function(config) { |
+ chrome.test.runTests([ |
+ function setupWindows() { |
+ // The test harness should have set us up with 2 windows: 1 incognito |
+ // and 1 regular. Verify that we can see both when we ask for it. |
+ chrome.windows.getAll({populate: true}, pass(function(windows) { |
+ assertEq(2, windows.length); |
+ |
+ if (windows[0].incognito) { |
+ incognitoWindow = windows[0]; |
+ normalWindow = windows[1]; |
+ } else { |
+ normalWindow = windows[0]; |
+ incognitoWindow = windows[1]; |
+ } |
+ normalTab = normalWindow.tabs[0]; |
+ incognitoTab = incognitoWindow.tabs[0]; |
+ assertTrue(!normalWindow.incognito); |
+ assertTrue(incognitoWindow.incognito); |
+ })); |
+ }, |
+ |
+ // Tests that we can update an incognito tab and get the event for it. |
+ function tabUpdate() { |
+ var newUrl = "about:blank"; |
+ |
+ // Prepare the event listeners first. |
+ var done = chrome.test.listenForever(chrome.tabs.onUpdated, |
+ function(id, info, tab) { |
+ if (id == incognitoTab.id) { |
+ assertTrue(tab.incognito); |
+ assertEq(newUrl, tab.url); |
+ if (info.status == "complete") |
+ done(); |
+ } |
+ }); |
+ |
+ // Update our tabs. |
+ chrome.tabs.update(incognitoTab.id, {"url": newUrl}, pass()); |
+ }, |
+ |
+ // Tests a sequence of tab API calls. |
+ function tabNested() { |
+ // Setup our listeners. We check that the events fire in order. |
+ var eventCounter = 0; |
+ chrome.test.listenOnce(chrome.tabs.onCreated, function(tab) { |
+ assertEq(1, ++eventCounter); |
+ assertEq(incognitoTab.windowId, tab.windowId); |
+ assertTrue(tab.incognito); |
+ }); |
+ chrome.test.listenOnce(chrome.tabs.onMoved, function(tabId) { |
+ assertEq(2, ++eventCounter); |
+ }); |
+ chrome.test.listenOnce(chrome.tabs.onRemoved, function(tabId) { |
+ assertEq(3, ++eventCounter); |
+ }); |
+ |
+ // Create, select, move, and close a tab in our incognito window. |
+ chrome.tabs.create({windowId: incognitoTab.windowId}, |
+ pass(function(tab) { |
+ chrome.tabs.move(tab.id, {index: 0}, |
+ pass(function(tab) { |
+ assertEq(incognitoTab.incognito, tab.incognito); |
+ chrome.tabs.remove(tab.id, pass()); |
+ })); |
+ })); |
+ }, |
+ |
+ // Tests content script injection to verify that the script can tell its |
+ // in incongnito. |
+ function contentScriptTestIncognito() { |
+ assertTrue(!chrome.extension.inIncognitoContext); |
+ |
+ var testUrl = "http://localhost:PORT/files/extensions/test_file.html" |
+ .replace(/PORT/, config.testServer.port); |
+ |
+ // Test that chrome.extension.inIncognitoTab is true for incognito tabs. |
+ chrome.tabs.create({windowId: incognitoWindow.id, url: testUrl}, |
+ pass(function(tab) { |
+ chrome.tabs.executeScript(tab.id, |
+ {code: 'document.title = chrome.extension.inIncognitoContext'}, |
+ pass(function() { |
+ assertEq(undefined, chrome.extension.lastError); |
+ chrome.tabs.get(tab.id, pass(function(tab) { |
+ assertEq("true", tab.title); |
+ })); |
+ })); |
+ })); |
+ |
+ // ... and false for normal tabs. |
+ chrome.tabs.create({windowId: normalWindow.id, url: testUrl}, |
+ pass(function(tab) { |
+ chrome.tabs.executeScript(tab.id, |
+ {code: 'document.title = chrome.extension.inIncognitoContext'}, |
+ pass(function() { |
+ assertEq(undefined, chrome.extension.lastError); |
+ chrome.tabs.get(tab.id, pass(function(tab) { |
+ assertEq("false", tab.title); |
+ })); |
+ })); |
+ })); |
+ }, |
+ |
+ // Tests that extensions can't move tabs between incognito and |
+ // non-incognito windows. |
+ function moveTabBetweenProfiles() { |
+ var errorMsg = "Tabs can only be moved between " + |
+ "windows in the same profile."; |
+ |
+ // Create a tab in the non-incognito window... |
+ chrome.tabs.create({windowId: normalWindow.id, url: 'about:blank'}, |
+ pass(function(tab) { |
+ // ... and then try to move it to the incognito window. |
+ chrome.tabs.move(tab.id, |
+ {windowId: incognitoWindow.id, index: 0}, fail(errorMsg)); |
+ })); |
+ } |
+ ]); |
+}); |