Index: chrome/test/data/extensions/api_test/offscreen_tabs/test.js |
=================================================================== |
--- chrome/test/data/extensions/api_test/offscreen_tabs/test.js (revision 0) |
+++ chrome/test/data/extensions/api_test/offscreen_tabs/test.js (revision 0) |
@@ -0,0 +1,371 @@ |
+// 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. |
+ |
+// OffscreenTabs API test |
+// browser_tests.exe --gtest_filter=ExtensionApiTest.OffscreenTabs |
+ |
+var pass = chrome.test.callbackPass; |
+var fail = chrome.test.callbackFail; |
+var assertEq = chrome.test.assertEq; |
+var assertTrue = chrome.test.assertTrue; |
+ |
+var extensionPath = |
+ location.href.substring(0, location.href.lastIndexOf("/") + 1); |
+ |
+var inTabs = [ |
+ { "url":extensionPath + "a.html", |
+ "width":200, |
+ "height":200 |
+ }, |
+ { "url":extensionPath + "b.html", |
+ "width":200, |
+ "height":200 |
+ }, |
+ { "url":extensionPath + "c.html", |
+ "width":1000, |
+ "height":800 |
+ } |
+]; |
+ |
+// Tab management |
+var tabs = []; |
+ |
+// Mouse |
+ |
+var tabMouse = new Object(); |
+ |
+var mouseEvent = { |
+ "button":0, |
+ "altKey":false, |
+ "ctrlKey":false, |
+ "shiftKey":false |
+}; |
+ |
+var x = 11; |
+var y = 11; |
+ |
+// Keyboard |
+ |
+var tabKeyboard = new Object(); |
+ |
+// ToDataUrl |
+ |
+var tabsCaptured = []; |
+ |
+var nTabsCaptured = 2; |
+ |
+// Util |
+ |
+function compareTabs(tabA, tabB) { |
+ assertEq(tabA.id, tabB.id); |
+ assertEq(tabA.url, tabB.url); |
+ assertEq(tabA.width, tabB.width); |
+ assertEq(tabA.height, tabB.height); |
+} |
+ |
+function sortTab(tabA, tabB) { |
+ return tabA.id - tabB.id; |
+} |
+ |
+function verifyTabDoesNotExist(tabId) { |
+ chrome.experimental.offscreenTabs. |
+ get(tabId, fail("No offscreen tab with id: " + tabId + ".")); |
+} |
+ |
+// Tab management -------------------------------------------------------------- |
+ |
+function startTabManagement() { |
+ var nCallbacksNotDone = inTabs.length; |
+ |
+ for (var i=0; i<inTabs.length; i++) { |
+ chrome.experimental.offscreenTabs.create( |
+ { "url":inTabs[i].url, |
+ "width":inTabs[i].width, |
+ "height":inTabs[i].height |
+ }, |
+ function() { |
+ var j = i; |
+ return function(tab) { |
+ tabs[j] = tab; |
+ |
+ nCallbacksNotDone--; |
+ |
+ if (nCallbacksNotDone == 0) |
+ getAll(); |
+ } |
+ }() |
+ ); |
+ } |
+} |
+ |
+function getAll() { |
+ chrome.experimental.offscreenTabs.getAll(function(tabsResult) { |
+ assertEq(tabs.length, tabsResult.length); |
+ |
+ tabs.sort(sortTab); |
+ tabsResult.sort(sortTab); |
+ |
+ for (var i=0; i<tabs.length; i++) |
+ compareTabs(tabs[i], tabsResult[i]); |
+ |
+ get(); |
+ }); |
+} |
+ |
+function get() { |
+ var comparedTab = tabs[0]; |
+ |
+ chrome.experimental.offscreenTabs.get(comparedTab.id, function(tab) { |
+ compareTabs(comparedTab, tab); |
+ |
+ update(); |
+ }); |
+} |
+ |
+function update() { |
+ var replicatedTab = tabs[0]; |
+ |
+ chrome.experimental.offscreenTabs.update(tabs[1].id, |
+ { "url":replicatedTab.url, |
+ "width":replicatedTab.width, |
+ "height":replicatedTab.height |
+ }, |
+ function(tab) { |
+ assertEq(replicatedTab.url, tab.url); |
+ assertEq(replicatedTab.width, tab.width); |
+ assertEq(replicatedTab.height, tab.height); |
+ |
+ remove(); |
+ } |
+ ); |
+} |
+ |
+function remove() { |
+ for (var i=0; i<inTabs.length; i++) { |
+ chrome.experimental.offscreenTabs.remove(tabs[i].id); |
+ |
+ verifyTabDoesNotExist(tabs[i].id); |
+ } |
+} |
+ |
+// Mouse ----------------------------------------------------------------------- |
+ |
+function startMouseEvents() { |
+ chrome.experimental.offscreenTabs.onUpdated.addListener(listener = |
+ function (tabId, changeInfo, tab) { |
+ chrome.experimental.offscreenTabs.onUpdated.removeListener(listener); |
+ |
+ assertEq(inTabs[0].url, changeInfo.url); |
+ assertEq(inTabs[0].url, tab.url); |
+ assertEq(inTabs[0].width, tab.width); |
+ assertEq(inTabs[0].height, tab.height); |
+ |
+ tabMouse = tab; |
+ |
+ mouseClick(); |
+ }); |
+ |
+ chrome.experimental.offscreenTabs.create( |
+ { "url":inTabs[0].url, |
+ "width":inTabs[0].width, |
+ "height":inTabs[0].height |
+ } |
+ ); |
+} |
+ |
+function mouseClick() { |
+ chrome.experimental.offscreenTabs.onUpdated.addListener(listener = |
+ function(tabId, changeInfo, tab) { |
+ chrome.experimental.offscreenTabs.onUpdated.removeListener(listener); |
+ |
+ assertEq(tabMouse.id, tabId); |
+ assertEq(tabMouse.id, tab.id); |
+ assertEq(inTabs[1].url, changeInfo.url); |
+ assertEq(inTabs[1].url, tab.url); |
+ assertEq(tabMouse.width, tab.width); |
+ assertEq(tabMouse.height, tab.height); |
+ |
+ mouseWheel(); |
+ }); |
+ |
+ mouseEvent.type = "click"; |
+ chrome.experimental.offscreenTabs. |
+ sendMouseEvent(tabMouse.id, mouseEvent, x, y); |
+} |
+ |
+function mouseWheel() { |
+ mouseEvent.type = "mousewheel"; |
+ mouseEvent.wheelDeltaX = 0; |
+ mouseEvent.wheelDeltaY = -100; |
+ chrome.experimental.offscreenTabs. |
+ sendMouseEvent(tabMouse.id, mouseEvent, 0, 0, function(tab) { |
+ mouseDownUp(); |
+ } |
+ ); |
+} |
+ |
+function mouseDownUp() { |
+ chrome.experimental.offscreenTabs.onUpdated.addListener(listener = |
+ function(tabId, changeInfo, tab) { |
+ chrome.experimental.offscreenTabs.onUpdated.removeListener(listener); |
+ |
+ assertEq(inTabs[2].url, tab.url); |
+ |
+ removeMouse(); |
+ }); |
+ |
+ mouseEvent.type = "mousedown"; |
+ chrome.experimental.offscreenTabs. |
+ sendMouseEvent(tabMouse.id, mouseEvent, x, y); |
+ |
+ mouseEvent.type = "mouseup"; |
+ chrome.experimental.offscreenTabs. |
+ sendMouseEvent(tabMouse.id, mouseEvent, x, y); |
+} |
+ |
+function removeMouse() { |
+ chrome.experimental.offscreenTabs.remove(tabMouse.id); |
+ |
+ verifyTabDoesNotExist(tabMouse.id); |
+} |
+ |
+// Keyboard -------------------------------------------------------------------- |
+ |
+function startKeyboardEvents() { |
+ chrome.experimental.offscreenTabs.onUpdated.addListener(listener = |
+ function(tabId, changeInfo, tab) { |
+ chrome.experimental.offscreenTabs.onUpdated.removeListener(listener); |
+ |
+ tabKeyboard = tab; |
+ |
+ keyPress(); |
+ }); |
+ |
+ chrome.experimental.offscreenTabs.create( |
+ { "url":inTabs[0].url, |
+ "width":inTabs[0].width, |
+ "height":inTabs[0].height |
+ } |
+ ); |
+} |
+ |
+function keyPress() { |
+ chrome.experimental.offscreenTabs.onUpdated.addListener(listener = |
+ function(tabId, changeInfo, tab) { |
+ chrome.experimental.offscreenTabs.onUpdated.removeListener(listener); |
+ |
+ assertEq(inTabs[1].url, tab.url); |
+ |
+ removeKeyboard(); |
+ }); |
+ |
+ var keyboardEvent = { |
+ "type":"keypress", |
+ "charCode":113, // q |
+ "keyCode":113, |
+ "altKey":false, |
+ "ctrlKey":false, |
+ "shiftKey":false |
+ }; |
+ |
+ chrome.experimental.offscreenTabs. |
+ sendKeyboardEvent(tabKeyboard.id, keyboardEvent); |
+} |
+ |
+function removeKeyboard() { |
+ chrome.experimental.offscreenTabs.remove(tabKeyboard.id); |
+ |
+ verifyTabDoesNotExist(tabKeyboard.id); |
+} |
+ |
+// toDataUrl ------------------------------------------------------------------- |
+ |
+// In order to test that we don't get empty images back we can compare two |
+// images that are supposed to be different. We only need to make sure the two |
+// offscreen tabs have the same size (i.e. inTabs[0] and inTabs[1]) |
+function startToDataUrl() { |
+ var nCallbacksNotDone = nTabsCaptured; |
+ |
+ for (var i=0; i<nTabsCaptured; i++) { |
+ chrome.experimental.offscreenTabs.create( |
+ { "url":inTabs[i].url, |
+ "width":inTabs[i].width, |
+ "height":inTabs[i].height |
+ }, |
+ function() { |
+ var j = i; |
+ return function(tab) { |
+ tabsCaptured[j] = tab; |
+ |
+ nCallbacksNotDone--; |
+ |
+ if (nCallbacksNotDone == 0) |
+ toDataUrl(); |
+ } |
+ }() |
+ ); |
+ } |
+} |
+ |
+function toDataUrl() { |
+ var nCallbacksNotDone = nTabsCaptured; |
+ |
+ for (var i=0; i<nTabsCaptured; i++) { |
+ chrome.experimental.offscreenTabs.toDataUrl( |
+ tabsCaptured[i].id, |
+ {"format":"png"}, |
+ function(dataUrl) { |
+ var j = i; |
+ return function(dataUrl) { |
+ assertEq('string', typeof(dataUrl)); |
+ assertEq('data:image/png;base64,', dataUrl.substr(0,22)); |
+ |
+ tabsCaptured[j].dataUrl = dataUrl; |
+ |
+ nCallbacksNotDone--; |
+ |
+ if (nCallbacksNotDone == 0) { |
+ // Compare the dataUrls |
+ assertTrue(tabsCaptured[0].dataUrl != tabsCaptured[1].dataUrl); |
+ |
+ removeToDataUrl(); |
+ } |
+ } |
+ }() |
+ ); |
+ } |
+} |
+ |
+function removeToDataUrl() { |
+ for (var i=0; i<nTabsCaptured; i++) { |
+ chrome.experimental.offscreenTabs.remove(tabsCaptured[i].id); |
+ |
+ verifyTabDoesNotExist(tabsCaptured[i].id); |
+ } |
+} |
+ |
+// Run tests ------------------------------------------------------------------ |
+ |
+function run() { |
+chrome.test.runTests([ |
+ function tabManagement() { |
+ startTabManagement(); |
+ } |
+ , |
+ function mouseEvents() { |
+ startMouseEvents(); |
+ } |
+ , |
+ function keyboardEvents() { |
+ startKeyboardEvents(); |
+ } |
+ , |
+ function toDataUrl() { |
+ startToDataUrl(); |
+ } |
+]); |
+} |
+ |
+run(); |
+ |
Property changes on: chrome/test/data/extensions/api_test/offscreen_tabs/test.js |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |