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

Unified Diff: chrome/test/data/extensions/api_test/tabs/capture_visible_tab/test.js

Issue 1631015: Fix chrome os flakyness for test ExtensionApiTest.CaptureVisibleTab.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 8 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
Index: chrome/test/data/extensions/api_test/tabs/capture_visible_tab/test.js
===================================================================
--- chrome/test/data/extensions/api_test/tabs/capture_visible_tab/test.js (revision 44660)
+++ chrome/test/data/extensions/api_test/tabs/capture_visible_tab/test.js (working copy)
@@ -5,15 +5,57 @@
var assertEq = chrome.test.assertEq;
var assertTrue = chrome.test.assertTrue;
-function pageUrl(letter) {
- return chrome.extension.getURL(letter + ".html");
+var kWidth = 400;
+var kHeight = 400;
+
+function pageUrl(base) {
+ return chrome.extension.getURL(base + ".html");
}
+function testAllPixelsAreExpectedColor(imgUrl, color) {
+ assertEq("string", typeof(imgUrl));
+ var img = new Image();
+ img.width = kWidth;
+ img.height = kHeight;
+ img.src = imgUrl;
+ img.onload = pass(function() {
+ var canvas = document.createElement("canvas");
+
+ // Comparing pixels is slow enough to hit timeouts. Compare
+ // a 10x10 region.
+ canvas.setAttribute('width', 10);
+ canvas.setAttribute('height', 10);
+ var context = canvas.getContext('2d');
+ context.drawImage(img, 0, 0, 10, 10);
+
+ var imageData = context.getImageData(1, 1, 9, 9).data;
+
+ var badPixels = [];
+
+ for (var i = 0, n = imageData.length; i < n; i += 4) {
+ if (color[0] != imageData[i+0] ||
+ color[1] != imageData[i+1] ||
+ color[2] != imageData[i+2] ||
+ color[3] != imageData[i+3] ) {
+ badPixels.push({"i": i,
+ "color": [imageData[i+0], imageData[i+1],
+ imageData[i+2], imageData[i+3]]
+ });
+ }
+ }
+ assertEq("[]", JSON.stringify(badPixels, null, 2))
+ });
+}
+
+// Globals used to allow a test to read data from a previous test.
+var blackImageUrl;
+var whiteImageUrl;
+
chrome.test.runTests([
// Open a window with one tab, take a snapshot.
- function captureVisibleTabSimple() {
+ function captureVisibleTabWhiteImage() {
// Keep the resulting image small by making the window small.
- createWindow([pageUrl("a")], {"width": 300, "height": 150},
+ createWindow([pageUrl("white")], {"width": kWidth, "height": kHeight},
pass(function(winId, tabIds) {
waitForAllTabs(pass(function() {
chrome.tabs.getSelected(winId, pass(function(tab) {
@@ -22,40 +64,63 @@
// The URL should be a data URL with has a JPEG mime type.
assertEq("string", typeof(imgDataUrl));
assertEq('data:image/jpg;base64,', imgDataUrl.substr(0,22));
+ whiteImageUrl = imgDataUrl;
+
+ testAllPixelsAreExpectedColor(whiteImageUrl,
+ [255, 255, 255, 255]); // White.
}));
}));
}));
}));
},
- // Open a window with three tabs, take a snapshot of each.
- function captureVisibleTabMultiTab() {
- var snapshotAndRemoveSelectedTab = function(winId, callback) {
- chrome.tabs.getSelected(winId, function(tab) {
- chrome.tabs.captureVisibleTab(winId, function(imgDataUrl) {
- // Test that the URL we got is a data URL which encodes a JPEG image.
- assertEq("string", typeof(imgDataUrl));
- assertEq('data:image/jpg;base64,', imgDataUrl.substr(0,22));
+ function captureVisibleTabBlackImage() {
+ // Keep the resulting image small by making the window small.
+ createWindow([pageUrl("black")], {"width": kWidth, "height": kHeight},
+ pass(function(winId, tabIds) {
+ waitForAllTabs(pass(function() {
+ chrome.tabs.getSelected(winId, pass(function(tab) {
+ assertEq('complete', tab.status); // waitForAllTabs ensures this.
+ chrome.tabs.captureVisibleTab(winId, pass(function(imgDataUrl) {
+ // The URL should be a data URL with has a JPEG mime type.
+ assertEq("string", typeof(imgDataUrl));
+ assertEq('data:image/jpg;base64,', imgDataUrl.substr(0,22));
+ blackImageUrl = imgDataUrl;
- // TODO(skerner): Once an option allows captureVisibleTab to
- // take a lossless snapshot with a set color depth, use
- // a canvas to compare |imgDataUrl| to an image of the tab
- // we expect. This can't be done with JPEG, as the results
- // vary based on the display settings.
- chrome.tabs.remove(tab.id, callback);
- });
- });
- };
+ // Check that previous capture was done.
+ assertEq('string', typeof(whiteImageUrl));
- createWindow(["a", "b", "c"].map(pageUrl), {"width": 300, "height": 150},
- function(winId, tabIds){
- waitForAllTabs(pass(function() {
- snapshotAndRemoveSelectedTab(winId, pass(function() {
- snapshotAndRemoveSelectedTab(winId, pass(function() {
- snapshotAndRemoveSelectedTab(winId, pass(function() {}));
- }));
+ assertTrue(whiteImageUrl != blackImageUrl);
+
+ testAllPixelsAreExpectedColor(blackImageUrl,
+ [0, 0, 0, 255]); // Black.
}));
}));
- });
+ }));
+ }));
+ },
+
+ function captureVisibleTabRedPng() {
+ // Keep the resulting image small by making the window small.
+ createWindow([pageUrl("red")], {"width": kWidth, "height": kHeight},
+ pass(function(winId, tabIds) {
+ waitForAllTabs(pass(function() {
+ chrome.tabs.getSelected(winId, pass(function(tab) {
+ assertEq('complete', tab.status); // waitForAllTabs ensures this.
+ chrome.tabs.captureVisibleTab(winId,
+ {"format": "png"},
+ pass(function(imgDataUrl) {
+ // The URL should be a data URL with has a PNG mime type.
+ assertEq("string", typeof(imgDataUrl));
+ assertEq('data:image/png;base64,', imgDataUrl.substr(0,22));
+
+ // TODO(skerner): The pixel comparison test fails on XP.
+ // Find out why.
+ //testAllPixelsAreExpectedColor(imgDataUrl,
+ // [255, 0, 0, 255]); // Red.
+ }));
+ }));
+ }));
+ }));
}
]);

Powered by Google App Engine
This is Rietveld 408576698