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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // tabs api test 1 // tabs api test
2 // browser_tests.exe --gtest_filter=ExtensionApiTest.CaptureVisibleTab 2 // browser_tests.exe --gtest_filter=ExtensionApiTest.CaptureVisibleTab
3 3
4 var pass = chrome.test.callbackPass; 4 var pass = chrome.test.callbackPass;
5 var assertEq = chrome.test.assertEq; 5 var assertEq = chrome.test.assertEq;
6 var assertTrue = chrome.test.assertTrue; 6 var assertTrue = chrome.test.assertTrue;
7 7
8 function pageUrl(letter) { 8 var kWidth = 400;
9 return chrome.extension.getURL(letter + ".html"); 9 var kHeight = 400;
10
11 function pageUrl(base) {
12 return chrome.extension.getURL(base + ".html");
10 } 13 }
11 14
15 function testAllPixelsAreExpectedColor(imgUrl, color) {
16 assertEq("string", typeof(imgUrl));
17 var img = new Image();
18 img.width = kWidth;
19 img.height = kHeight;
20 img.src = imgUrl;
21 img.onload = pass(function() {
22 var canvas = document.createElement("canvas");
23
24 // Comparing pixels is slow enough to hit timeouts. Compare
25 // a 10x10 region.
26 canvas.setAttribute('width', 10);
27 canvas.setAttribute('height', 10);
28 var context = canvas.getContext('2d');
29 context.drawImage(img, 0, 0, 10, 10);
30
31 var imageData = context.getImageData(1, 1, 9, 9).data;
32
33 var badPixels = [];
34
35 for (var i = 0, n = imageData.length; i < n; i += 4) {
36 if (color[0] != imageData[i+0] ||
37 color[1] != imageData[i+1] ||
38 color[2] != imageData[i+2] ||
39 color[3] != imageData[i+3] ) {
40 badPixels.push({"i": i,
41 "color": [imageData[i+0], imageData[i+1],
42 imageData[i+2], imageData[i+3]]
43 });
44 }
45 }
46 assertEq("[]", JSON.stringify(badPixels, null, 2))
47 });
48 }
49
50 // Globals used to allow a test to read data from a previous test.
51 var blackImageUrl;
52 var whiteImageUrl;
53
12 chrome.test.runTests([ 54 chrome.test.runTests([
13 // Open a window with one tab, take a snapshot. 55 // Open a window with one tab, take a snapshot.
14 function captureVisibleTabSimple() { 56 function captureVisibleTabWhiteImage() {
15 // Keep the resulting image small by making the window small. 57 // Keep the resulting image small by making the window small.
16 createWindow([pageUrl("a")], {"width": 300, "height": 150}, 58 createWindow([pageUrl("white")], {"width": kWidth, "height": kHeight},
17 pass(function(winId, tabIds) { 59 pass(function(winId, tabIds) {
18 waitForAllTabs(pass(function() { 60 waitForAllTabs(pass(function() {
19 chrome.tabs.getSelected(winId, pass(function(tab) { 61 chrome.tabs.getSelected(winId, pass(function(tab) {
20 assertEq('complete', tab.status); // waitForAllTabs ensures this. 62 assertEq('complete', tab.status); // waitForAllTabs ensures this.
21 chrome.tabs.captureVisibleTab(winId, pass(function(imgDataUrl) { 63 chrome.tabs.captureVisibleTab(winId, pass(function(imgDataUrl) {
22 // The URL should be a data URL with has a JPEG mime type. 64 // The URL should be a data URL with has a JPEG mime type.
23 assertEq("string", typeof(imgDataUrl)); 65 assertEq("string", typeof(imgDataUrl));
24 assertEq('data:image/jpg;base64,', imgDataUrl.substr(0,22)); 66 assertEq('data:image/jpg;base64,', imgDataUrl.substr(0,22));
67 whiteImageUrl = imgDataUrl;
68
69 testAllPixelsAreExpectedColor(whiteImageUrl,
70 [255, 255, 255, 255]); // White.
25 })); 71 }));
26 })); 72 }));
27 })); 73 }));
28 })); 74 }));
29 }, 75 },
30 76
31 // Open a window with three tabs, take a snapshot of each. 77 function captureVisibleTabBlackImage() {
32 function captureVisibleTabMultiTab() { 78 // Keep the resulting image small by making the window small.
33 var snapshotAndRemoveSelectedTab = function(winId, callback) { 79 createWindow([pageUrl("black")], {"width": kWidth, "height": kHeight},
34 chrome.tabs.getSelected(winId, function(tab) { 80 pass(function(winId, tabIds) {
35 chrome.tabs.captureVisibleTab(winId, function(imgDataUrl) { 81 waitForAllTabs(pass(function() {
36 // Test that the URL we got is a data URL which encodes a JPEG image. 82 chrome.tabs.getSelected(winId, pass(function(tab) {
37 assertEq("string", typeof(imgDataUrl)); 83 assertEq('complete', tab.status); // waitForAllTabs ensures this.
38 assertEq('data:image/jpg;base64,', imgDataUrl.substr(0,22)); 84 chrome.tabs.captureVisibleTab(winId, pass(function(imgDataUrl) {
85 // The URL should be a data URL with has a JPEG mime type.
86 assertEq("string", typeof(imgDataUrl));
87 assertEq('data:image/jpg;base64,', imgDataUrl.substr(0,22));
88 blackImageUrl = imgDataUrl;
39 89
40 // TODO(skerner): Once an option allows captureVisibleTab to 90 // Check that previous capture was done.
41 // take a lossless snapshot with a set color depth, use 91 assertEq('string', typeof(whiteImageUrl));
42 // a canvas to compare |imgDataUrl| to an image of the tab
43 // we expect. This can't be done with JPEG, as the results
44 // vary based on the display settings.
45 chrome.tabs.remove(tab.id, callback);
46 });
47 });
48 };
49 92
50 createWindow(["a", "b", "c"].map(pageUrl), {"width": 300, "height": 150}, 93 assertTrue(whiteImageUrl != blackImageUrl);
51 function(winId, tabIds){ 94
52 waitForAllTabs(pass(function() { 95 testAllPixelsAreExpectedColor(blackImageUrl,
53 snapshotAndRemoveSelectedTab(winId, pass(function() { 96 [0, 0, 0, 255]); // Black.
54 snapshotAndRemoveSelectedTab(winId, pass(function() {
55 snapshotAndRemoveSelectedTab(winId, pass(function() {}));
56 }));
57 })); 97 }));
58 })); 98 }));
59 }); 99 }));
100 }));
101 },
102
103 function captureVisibleTabRedPng() {
104 // Keep the resulting image small by making the window small.
105 createWindow([pageUrl("red")], {"width": kWidth, "height": kHeight},
106 pass(function(winId, tabIds) {
107 waitForAllTabs(pass(function() {
108 chrome.tabs.getSelected(winId, pass(function(tab) {
109 assertEq('complete', tab.status); // waitForAllTabs ensures this.
110 chrome.tabs.captureVisibleTab(winId,
111 {"format": "png"},
112 pass(function(imgDataUrl) {
113 // The URL should be a data URL with has a PNG mime type.
114 assertEq("string", typeof(imgDataUrl));
115 assertEq('data:image/png;base64,', imgDataUrl.substr(0,22));
116
117 // TODO(skerner): The pixel comparison test fails on XP.
118 // Find out why.
119 //testAllPixelsAreExpectedColor(imgDataUrl,
120 // [255, 0, 0, 255]); // Red.
121 }));
122 }));
123 }));
124 }));
60 } 125 }
61 ]); 126 ]);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698