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

Unified Diff: chrome/test/data/extensions/api_test/offscreen_tabs/test.js

Issue 7720002: Chrome Extensions chrome.experimental.offscreenTabs.* API implementation, docs, and test. (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 9 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/test/data/extensions/api_test/offscreen_tabs/test.html ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,364 @@
+// 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=ExperimentalApiTest.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 (create, get, getAll, update, remove)
+var tabs = [];
+
+// Mouse (sendMouseEvent)
+var tabMouse = new Object();
+
+var mouseEvent = {
+ "button": 0,
+ "altKey": false,
+ "ctrlKey": false,
+ "shiftKey": false
+};
+
+var x = 11;
+var y = 11;
+
+// Keyboard (sendKeyboardEvent)
+
+var tabKeyboard = new Object();
+
+// Display (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 (create, get, getAll, update, remove) ------------------------
+
+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
+ },
+ pass(function() {
+ var j = i;
+ return function(tab) {
+ tabs[j] = tab;
+
+ nCallbacksNotDone--;
+
+ if (nCallbacksNotDone == 0)
+ getAll();
+ }
+ }())
+ );
+ }
+}
+
+function getAll() {
+ chrome.experimental.offscreenTabs.getAll(pass(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, pass(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
+ },
+ pass(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<nTabsCaptured; i++) {
+ chrome.experimental.offscreenTabs.remove(tabs[i].id);
+ verifyTabDoesNotExist(tabs[i].id);
+ }
+}
+
+// Mouse (sendMouseEvent) ------------------------------------------------------
+
+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);
+
+ chrome.experimental.offscreenTabs.remove(tabMouse.id);
+ verifyTabDoesNotExist(tabMouse.id);
+ });
+
+ mouseEvent.type = "mousedown";
+ chrome.experimental.offscreenTabs.
+ sendMouseEvent(tabMouse.id, mouseEvent, x, y);
+
+ mouseEvent.type = "mouseup";
+ chrome.experimental.offscreenTabs.
+ sendMouseEvent(tabMouse.id, mouseEvent, x, y);
+}
+
+// Keyboard (sendKeyboardEvent) ------------------------------------------------
+
+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);
+
+ chrome.experimental.offscreenTabs.remove(tabKeyboard.id);
+ verifyTabDoesNotExist(tabKeyboard.id);
+ });
+
+ var keyboardEvent = {
+ "type": "keypress",
+ "charCode": 113, // q
+ "keyCode": 113,
+ "altKey": false,
+ "ctrlKey": false,
+ "shiftKey": false
+ };
+
+ chrome.experimental.offscreenTabs.
+ sendKeyboardEvent(tabKeyboard.id, keyboardEvent);
+}
+
+
+// Display (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 startDisplay() {
+ var nCallbacksNotDone = nTabsCaptured;
+
+ chrome.experimental.offscreenTabs.onUpdated.addListener(listener =
+ function (tabId, changeInfo, tab) {
+ tabsCaptured[nTabsCaptured - nCallbacksNotDone] = tab;
+
+ nCallbacksNotDone--;
+
+ if (nCallbacksNotDone == 0) {
+ chrome.experimental.offscreenTabs.onUpdated.removeListener(listener);
+
+ toDataUrl();
+ }
+ });
+
+ for (var i=0; i<nTabsCaptured; i++) {
+ chrome.experimental.offscreenTabs.create(
+ {
+ "url": inTabs[i].url,
+ "width": inTabs[i].width,
+ "height": inTabs[i].height
+ }
+ );
+ }
+}
+
+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 pass(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);
+
+ for (var i=0; i<nTabsCaptured; i++) {
+ chrome.experimental.offscreenTabs.remove(tabsCaptured[i].id);
+ verifyTabDoesNotExist(tabsCaptured[i].id);
+ }
+ }
+ })
+ }()
+ );
+ }
+}
+
+// Run tests ------------------------------------------------------------------
+
+chrome.test.runTests([
+ // Tab Management (create, get, getAll, update, remove)
+ function tabManagement() {
+ startTabManagement();
+ },
+
+ // Mouse (sendMouseEvent)
+ function mouseEvents() {
+ startMouseEvents();
+ },
+
+ // Keyboard (sendKeyboardEvent)
+ function keyboardEvents() {
+ startKeyboardEvents();
+ },
+
+ // Display (toDataUrl)
+ function display() {
+ startDisplay();
+ }
+]);
+
Property changes on: chrome/test/data/extensions/api_test/offscreen_tabs/test.js
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « chrome/test/data/extensions/api_test/offscreen_tabs/test.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698