| // 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/extensions/test_file.html" |
| .replace(/PORT/, config.testServer.port); |
| |
| // Test that chrome.extension.inIncognitoContext 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.runtime.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.runtime.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)); |
| })); |
| }, |
| |
| // Tests that it is not possible to create a new window with a tab from a |
| // different profile. |
| function createWindowWithTabFromOtherProfile() { |
| chrome.windows.create({ |
| tabId: incognitoTab.id, |
| }, fail('Tabs can only be moved between windows in the same profile.')); |
| }, |
| |
| // Similarly, try to move a non-incognito tab to an incognito window. |
| function createWindowWithTabFromOtherProfile2() { |
| chrome.windows.create({ |
| tabId: normalTab.id, |
| incognito: true, |
| }, fail('Tabs can only be moved between windows in the same profile.')); |
| } |
| ]); |
| }); |