diff options
Diffstat (limited to 'toolkit/components/thumbnails')
39 files changed, 4 insertions, 1988 deletions
diff --git a/toolkit/components/thumbnails/PageThumbUtils.jsm b/toolkit/components/thumbnails/PageThumbUtils.jsm index dda3a81b3..fb5d67ddb 100644 --- a/toolkit/components/thumbnails/PageThumbUtils.jsm +++ b/toolkit/components/thumbnails/PageThumbUtils.jsm @@ -14,7 +14,6 @@ const { classes: Cc, interfaces: Ci, utils: Cu } = Components; Cu.import("resource://gre/modules/XPCOMUtils.jsm", this); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/Promise.jsm", this); -Cu.import("resource://gre/modules/AppConstants.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "BrowserUtils", "resource://gre/modules/BrowserUtils.jsm"); @@ -72,15 +71,17 @@ this.PageThumbUtils = { let windowScale = aWindow ? aWindow.devicePixelRatio : systemScale; let scale = Math.max(systemScale, windowScale); +#ifdef XP_MACOSX /** * * On retina displays, we can sometimes go down this path * without a window object. In those cases, force 2x scaling * as the system scale doesn't represent the 2x scaling * on OS X. */ - if (AppConstants.platform == "macosx" && !aWindow) { + if (!aWindow) { scale = 2; } +#endif /** * * THESE VALUES ARE DEFINED IN newtab.css and hard coded. diff --git a/toolkit/components/thumbnails/moz.build b/toolkit/components/thumbnails/moz.build index e4a178998..bd88532c0 100644 --- a/toolkit/components/thumbnails/moz.build +++ b/toolkit/components/thumbnails/moz.build @@ -4,9 +4,6 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -BROWSER_CHROME_MANIFESTS += ['test/browser.ini'] -XPCSHELL_TESTS_MANIFESTS += ['test/xpcshell.ini'] - EXTRA_COMPONENTS += [ 'BrowserPageThumbs.manifest', 'PageThumbsProtocol.js', @@ -15,12 +12,11 @@ EXTRA_COMPONENTS += [ EXTRA_JS_MODULES += [ 'PageThumbs.jsm', 'PageThumbsWorker.js', - 'PageThumbUtils.jsm', ] EXTRA_PP_JS_MODULES += [ 'BackgroundPageThumbs.jsm', + 'PageThumbUtils.jsm', ] - JAR_MANIFESTS += ['jar.mn'] diff --git a/toolkit/components/thumbnails/test/.eslintrc.js b/toolkit/components/thumbnails/test/.eslintrc.js deleted file mode 100644 index f6f8d62c2..000000000 --- a/toolkit/components/thumbnails/test/.eslintrc.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -module.exports = { - "extends": [ - "../../../../testing/mochitest/browser.eslintrc.js", - "../../../../testing/xpcshell/xpcshell.eslintrc.js" - ] -}; diff --git a/toolkit/components/thumbnails/test/authenticate.sjs b/toolkit/components/thumbnails/test/authenticate.sjs deleted file mode 100644 index 58da655cf..000000000 --- a/toolkit/components/thumbnails/test/authenticate.sjs +++ /dev/null @@ -1,220 +0,0 @@ -function handleRequest(request, response) -{ - try { - reallyHandleRequest(request, response); - } catch (e) { - response.setStatusLine("1.0", 200, "AlmostOK"); - response.write("Error handling request: " + e); - } -} - - -function reallyHandleRequest(request, response) { - var match; - var requestAuth = true, requestProxyAuth = true; - - // Allow the caller to drive how authentication is processed via the query. - // Eg, http://localhost:8888/authenticate.sjs?user=foo&realm=bar - // The extra ? allows the user/pass/realm checks to succeed if the name is - // at the beginning of the query string. - var query = "?" + request.queryString; - - var expected_user = "", expected_pass = "", realm = "mochitest"; - var proxy_expected_user = "", proxy_expected_pass = "", proxy_realm = "mochi-proxy"; - var huge = false, plugin = false, anonymous = false; - var authHeaderCount = 1; - // user=xxx - match = /[^_]user=([^&]*)/.exec(query); - if (match) - expected_user = match[1]; - - // pass=xxx - match = /[^_]pass=([^&]*)/.exec(query); - if (match) - expected_pass = match[1]; - - // realm=xxx - match = /[^_]realm=([^&]*)/.exec(query); - if (match) - realm = match[1]; - - // proxy_user=xxx - match = /proxy_user=([^&]*)/.exec(query); - if (match) - proxy_expected_user = match[1]; - - // proxy_pass=xxx - match = /proxy_pass=([^&]*)/.exec(query); - if (match) - proxy_expected_pass = match[1]; - - // proxy_realm=xxx - match = /proxy_realm=([^&]*)/.exec(query); - if (match) - proxy_realm = match[1]; - - // huge=1 - match = /huge=1/.exec(query); - if (match) - huge = true; - - // plugin=1 - match = /plugin=1/.exec(query); - if (match) - plugin = true; - - // multiple=1 - match = /multiple=([^&]*)/.exec(query); - if (match) - authHeaderCount = match[1]+0; - - // anonymous=1 - match = /anonymous=1/.exec(query); - if (match) - anonymous = true; - - // Look for an authentication header, if any, in the request. - // - // EG: Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== - // - // This test only supports Basic auth. The value sent by the client is - // "username:password", obscured with base64 encoding. - - var actual_user = "", actual_pass = "", authHeader, authPresent = false; - if (request.hasHeader("Authorization")) { - authPresent = true; - authHeader = request.getHeader("Authorization"); - match = /Basic (.+)/.exec(authHeader); - if (match.length != 2) - throw "Couldn't parse auth header: " + authHeader; - - var userpass = base64ToString(match[1]); // no atob() :-( - match = /(.*):(.*)/.exec(userpass); - if (match.length != 3) - throw "Couldn't decode auth header: " + userpass; - actual_user = match[1]; - actual_pass = match[2]; - } - - var proxy_actual_user = "", proxy_actual_pass = ""; - if (request.hasHeader("Proxy-Authorization")) { - authHeader = request.getHeader("Proxy-Authorization"); - match = /Basic (.+)/.exec(authHeader); - if (match.length != 2) - throw "Couldn't parse auth header: " + authHeader; - - var userpass = base64ToString(match[1]); // no atob() :-( - match = /(.*):(.*)/.exec(userpass); - if (match.length != 3) - throw "Couldn't decode auth header: " + userpass; - proxy_actual_user = match[1]; - proxy_actual_pass = match[2]; - } - - // Don't request authentication if the credentials we got were what we - // expected. - if (expected_user == actual_user && - expected_pass == actual_pass) { - requestAuth = false; - } - if (proxy_expected_user == proxy_actual_user && - proxy_expected_pass == proxy_actual_pass) { - requestProxyAuth = false; - } - - if (anonymous) { - if (authPresent) { - response.setStatusLine("1.0", 400, "Unexpected authorization header found"); - } else { - response.setStatusLine("1.0", 200, "Authorization header not found"); - } - } else { - if (requestProxyAuth) { - response.setStatusLine("1.0", 407, "Proxy authentication required"); - for (i = 0; i < authHeaderCount; ++i) - response.setHeader("Proxy-Authenticate", "basic realm=\"" + proxy_realm + "\"", true); - } else if (requestAuth) { - response.setStatusLine("1.0", 401, "Authentication required"); - for (i = 0; i < authHeaderCount; ++i) - response.setHeader("WWW-Authenticate", "basic realm=\"" + realm + "\"", true); - } else { - response.setStatusLine("1.0", 200, "OK"); - } - } - - response.setHeader("Content-Type", "application/xhtml+xml", false); - response.write("<html xmlns='http://www.w3.org/1999/xhtml'>"); - response.write("<p>Login: <span id='ok'>" + (requestAuth ? "FAIL" : "PASS") + "</span></p>\n"); - response.write("<p>Proxy: <span id='proxy'>" + (requestProxyAuth ? "FAIL" : "PASS") + "</span></p>\n"); - response.write("<p>Auth: <span id='auth'>" + authHeader + "</span></p>\n"); - response.write("<p>User: <span id='user'>" + actual_user + "</span></p>\n"); - response.write("<p>Pass: <span id='pass'>" + actual_pass + "</span></p>\n"); - - if (huge) { - response.write("<div style='display: none'>"); - for (i = 0; i < 100000; i++) { - response.write("123456789\n"); - } - response.write("</div>"); - response.write("<span id='footnote'>This is a footnote after the huge content fill</span>"); - } - - if (plugin) { - response.write("<embed id='embedtest' style='width: 400px; height: 100px;' " + - "type='application/x-test'></embed>\n"); - } - - response.write("</html>"); -} - - -// base64 decoder -// -// Yoinked from extensions/xml-rpc/src/nsXmlRpcClient.js because btoa() -// doesn't seem to exist. :-( -/* Convert Base64 data to a string */ -const toBinaryTable = [ - -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, - -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, - -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63, - 52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1, 0,-1,-1, - -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14, - 15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1, - -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, - 41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1 -]; -const base64Pad = '='; - -function base64ToString(data) { - - var result = ''; - var leftbits = 0; // number of bits decoded, but yet to be appended - var leftdata = 0; // bits decoded, but yet to be appended - - // Convert one by one. - for (var i = 0; i < data.length; i++) { - var c = toBinaryTable[data.charCodeAt(i) & 0x7f]; - var padding = (data[i] == base64Pad); - // Skip illegal characters and whitespace - if (c == -1) continue; - - // Collect data into leftdata, update bitcount - leftdata = (leftdata << 6) | c; - leftbits += 6; - - // If we have 8 or more bits, append 8 bits to the result - if (leftbits >= 8) { - leftbits -= 8; - // Append if not padding. - if (!padding) - result += String.fromCharCode((leftdata >> leftbits) & 0xff); - leftdata &= (1 << leftbits) - 1; - } - } - - // If there are any bits left, the base64 string was corrupted - if (leftbits) - throw Components.Exception('Corrupted base64 string'); - - return result; -} diff --git a/toolkit/components/thumbnails/test/background_red.html b/toolkit/components/thumbnails/test/background_red.html deleted file mode 100644 index 95159dd29..000000000 --- a/toolkit/components/thumbnails/test/background_red.html +++ /dev/null @@ -1,3 +0,0 @@ -<html> - <body bgcolor=ff0000></body> -</html> diff --git a/toolkit/components/thumbnails/test/background_red_redirect.sjs b/toolkit/components/thumbnails/test/background_red_redirect.sjs deleted file mode 100644 index 5f0852e19..000000000 --- a/toolkit/components/thumbnails/test/background_red_redirect.sjs +++ /dev/null @@ -1,10 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -function handleRequest(aRequest, aResponse) { - // Set HTTP Status. - aResponse.setStatusLine(aRequest.httpVersion, 301, "Moved Permanently"); - - // Set redirect URI. - aResponse.setHeader("Location", "http://mochi.test:8888/browser/toolkit/components/thumbnails/test/background_red.html"); -} diff --git a/toolkit/components/thumbnails/test/background_red_scroll.html b/toolkit/components/thumbnails/test/background_red_scroll.html deleted file mode 100644 index 1e30bd3c6..000000000 --- a/toolkit/components/thumbnails/test/background_red_scroll.html +++ /dev/null @@ -1,3 +0,0 @@ -<html> - <body bgcolor=ff0000 style="overflow: scroll;"></body> -</html> diff --git a/toolkit/components/thumbnails/test/browser.ini b/toolkit/components/thumbnails/test/browser.ini deleted file mode 100644 index 3b87815ff..000000000 --- a/toolkit/components/thumbnails/test/browser.ini +++ /dev/null @@ -1,38 +0,0 @@ -[DEFAULT] -support-files = - authenticate.sjs - background_red.html - background_red_redirect.sjs - background_red_scroll.html - head.js - privacy_cache_control.sjs - thumbnails_background.sjs - thumbnails_crash_content_helper.js - thumbnails_update.sjs - -[browser_thumbnails_bg_bad_url.js] -[browser_thumbnails_bg_crash_during_capture.js] -skip-if = !crashreporter -[browser_thumbnails_bg_crash_while_idle.js] -skip-if = !crashreporter -[browser_thumbnails_bg_basic.js] -[browser_thumbnails_bg_queueing.js] -[browser_thumbnails_bg_timeout.js] -[browser_thumbnails_bg_redirect.js] -[browser_thumbnails_bg_destroy_browser.js] -[browser_thumbnails_bg_no_cookies_sent.js] -[browser_thumbnails_bg_no_cookies_stored.js] -[browser_thumbnails_bg_no_auth_prompt.js] -[browser_thumbnails_bg_no_alert.js] -[browser_thumbnails_bg_no_duplicates.js] -[browser_thumbnails_bg_captureIfMissing.js] -[browser_thumbnails_bug726727.js] -[browser_thumbnails_bug727765.js] -[browser_thumbnails_bug818225.js] -[browser_thumbnails_capture.js] -[browser_thumbnails_expiration.js] -[browser_thumbnails_privacy.js] -[browser_thumbnails_redirect.js] -[browser_thumbnails_storage.js] -[browser_thumbnails_storage_migrate3.js] -[browser_thumbnails_update.js] diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_bg_bad_url.js b/toolkit/components/thumbnails/test/browser_thumbnails_bg_bad_url.js deleted file mode 100644 index df8ef8d96..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_bg_bad_url.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -function* runTests() { - let url = "invalid-protocol://ffggfsdfsdf/"; - ok(!thumbnailExists(url), "Thumbnail should not be cached already."); - let numCalls = 0; - BackgroundPageThumbs.capture(url, { - onDone: function onDone(capturedURL) { - is(capturedURL, url, "Captured URL should be URL passed to capture"); - is(numCalls++, 0, "onDone should be called only once"); - ok(!thumbnailExists(url), - "Capture failed so thumbnail should not be cached"); - next(); - }, - }); - yield new Promise(resolve => { - bgAddPageThumbObserver(url).catch(function(err) { - ok(true, "page-thumbnail error produced"); - resolve(); - }); - }); -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_bg_basic.js b/toolkit/components/thumbnails/test/browser_thumbnails_bg_basic.js deleted file mode 100644 index 027e0bfb7..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_bg_basic.js +++ /dev/null @@ -1,20 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -function* runTests() { - let url = "http://www.example.com/"; - ok(!thumbnailExists(url), "Thumbnail should not be cached yet."); - - let capturePromise = new Promise(resolve => { - bgAddPageThumbObserver(url).then(() => { - ok(true, `page-thumbnail created for ${url}`); - resolve(); - }); - }); - let capturedURL = yield bgCapture(url); - is(capturedURL, url, "Captured URL should be URL passed to capture"); - yield capturePromise; - - ok(thumbnailExists(url), "Thumbnail should be cached after capture"); - removeThumbnail(url); -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_bg_captureIfMissing.js b/toolkit/components/thumbnails/test/browser_thumbnails_bg_captureIfMissing.js deleted file mode 100644 index cd1f1c5c2..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_bg_captureIfMissing.js +++ /dev/null @@ -1,35 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -function* runTests() { - let numNotifications = 0; - function observe(subject, topic, data) { - is(topic, "page-thumbnail:create", "got expected topic"); - numNotifications += 1; - } - - Services.obs.addObserver(observe, "page-thumbnail:create", false); - - let url = "http://example.com/"; - let file = thumbnailFile(url); - ok(!file.exists(), "Thumbnail file should not already exist."); - - let capturedURL = yield bgCaptureIfMissing(url); - is(numNotifications, 1, "got notification of item being created."); - is(capturedURL, url, "Captured URL should be URL passed to capture"); - ok(file.exists(url), "Thumbnail should be cached after capture"); - - let past = Date.now() - 1000000000; - let pastFudge = past + 30000; - file.lastModifiedTime = past; - ok(file.lastModifiedTime < pastFudge, "Last modified time should stick!"); - capturedURL = yield bgCaptureIfMissing(url); - is(numNotifications, 1, "still only 1 notification of item being created."); - is(capturedURL, url, "Captured URL should be URL passed to second capture"); - ok(file.exists(), "Thumbnail should remain cached after second capture"); - ok(file.lastModifiedTime < pastFudge, - "File should not have been overwritten"); - - file.remove(false); - Services.obs.removeObserver(observe, "page-thumbnail:create"); -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_bg_crash_during_capture.js b/toolkit/components/thumbnails/test/browser_thumbnails_bg_crash_during_capture.js deleted file mode 100644 index db67a04a8..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_bg_crash_during_capture.js +++ /dev/null @@ -1,49 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -function* runTests() { - let crashObserver = bgAddCrashObserver(); - - // make a good capture first - this ensures we have the <browser> - let goodUrl = bgTestPageURL(); - yield bgCapture(goodUrl); - ok(thumbnailExists(goodUrl), "Thumbnail should be cached after capture"); - removeThumbnail(goodUrl); - - // inject our content script. - let mm = bgInjectCrashContentScript(); - - // queue up 2 captures - the first has a wait, so this is the one that - // will die. The second one should immediately capture after the crash. - let waitUrl = bgTestPageURL({ wait: 30000 }); - let sawWaitUrlCapture = false; - bgCapture(waitUrl, { onDone: () => { - sawWaitUrlCapture = true; - ok(!thumbnailExists(waitUrl), "Thumbnail should not have been saved due to the crash"); - }}); - bgCapture(goodUrl, { onDone: () => { - ok(sawWaitUrlCapture, "waitUrl capture should have finished first"); - ok(thumbnailExists(goodUrl), "We should have recovered and completed the 2nd capture after the crash"); - removeThumbnail(goodUrl); - // Test done. - ok(crashObserver.crashed, "Saw a crash from this test"); - next(); - }}); - let crashPromise = new Promise(resolve => { - bgAddPageThumbObserver(waitUrl).catch(function(err) { - ok(true, `page-thumbnail error thrown for ${waitUrl}`); - resolve(); - }); - }); - let capturePromise = new Promise(resolve => { - bgAddPageThumbObserver(goodUrl).then(() => { - ok(true, `page-thumbnail created for ${goodUrl}`); - resolve(); - }); - }); - - info("Crashing the thumbnail content process."); - mm.sendAsyncMessage("thumbnails-test:crash"); - yield crashPromise; - yield capturePromise; -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_bg_crash_while_idle.js b/toolkit/components/thumbnails/test/browser_thumbnails_bg_crash_while_idle.js deleted file mode 100644 index 8ff6a3509..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_bg_crash_while_idle.js +++ /dev/null @@ -1,38 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -function* runTests() { - let crashObserver = bgAddCrashObserver(); - - // make a good capture first - this ensures we have the <browser> - let goodUrl = bgTestPageURL(); - yield bgCapture(goodUrl); - ok(thumbnailExists(goodUrl), "Thumbnail should be cached after capture"); - removeThumbnail(goodUrl); - - // inject our content script. - let mm = bgInjectCrashContentScript(); - - // the observer for the crashing process is basically async, so it's hard - // to know when the <browser> has actually seen it. Easist is to just add - // our own observer. - Services.obs.addObserver(function onCrash() { - Services.obs.removeObserver(onCrash, "oop-frameloader-crashed"); - // spin the event loop to ensure the BPT observer was called. - executeSoon(function() { - // Now queue another capture and ensure it recovers. - bgCapture(goodUrl, { onDone: () => { - ok(thumbnailExists(goodUrl), "We should have recovered and handled new capture requests"); - removeThumbnail(goodUrl); - // Test done. - ok(crashObserver.crashed, "Saw a crash from this test"); - next(); - }}); - }); - }, "oop-frameloader-crashed", false); - - // Nothing is pending - crash the process. - info("Crashing the thumbnail content process."); - mm.sendAsyncMessage("thumbnails-test:crash"); - yield true; -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_bg_destroy_browser.js b/toolkit/components/thumbnails/test/browser_thumbnails_bg_destroy_browser.js deleted file mode 100644 index b83fdf583..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_bg_destroy_browser.js +++ /dev/null @@ -1,33 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -function* runTests() { - yield SpecialPowers.pushPrefEnv({ - set: [["dom.ipc.processCount", 1]] - }); - - let url1 = "http://example.com/1"; - ok(!thumbnailExists(url1), "First file should not exist yet."); - - let url2 = "http://example.com/2"; - ok(!thumbnailExists(url2), "Second file should not exist yet."); - - let defaultTimeout = BackgroundPageThumbs._destroyBrowserTimeout; - BackgroundPageThumbs._destroyBrowserTimeout = 1000; - - yield bgCapture(url1); - ok(thumbnailExists(url1), "First file should exist after capture."); - removeThumbnail(url1); - - yield wait(2000); - is(BackgroundPageThumbs._thumbBrowser, undefined, - "Thumb browser should be destroyed after timeout."); - BackgroundPageThumbs._destroyBrowserTimeout = defaultTimeout; - - yield bgCapture(url2); - ok(thumbnailExists(url2), "Second file should exist after capture."); - removeThumbnail(url2); - - isnot(BackgroundPageThumbs._thumbBrowser, undefined, - "Thumb browser should exist immediately after capture."); -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_bg_no_alert.js b/toolkit/components/thumbnails/test/browser_thumbnails_bg_no_alert.js deleted file mode 100644 index 5d6bd81f8..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_bg_no_alert.js +++ /dev/null @@ -1,13 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -function* runTests() { - let url = "data:text/html,<script>try { alert('yo!'); } catch (e) {}</script>"; - ok(!thumbnailExists(url), "Thumbnail file should not already exist."); - - let capturedURL = yield bgCapture(url); - is(capturedURL, url, "Captured URL should be URL passed to capture."); - ok(thumbnailExists(url), - "Thumbnail file should exist even though it alerted."); - removeThumbnail(url); -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_bg_no_auth_prompt.js b/toolkit/components/thumbnails/test/browser_thumbnails_bg_no_auth_prompt.js deleted file mode 100644 index 0eb9df7a9..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_bg_no_auth_prompt.js +++ /dev/null @@ -1,21 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -// the following tests attempt to display modal dialogs. The test just -// relies on the fact that if the dialog was displayed the test will hang -// and timeout. IOW - the tests would pass if the dialogs appear and are -// manually closed by the user - so don't do that :) (obviously there is -// noone available to do that when run via tbpl etc, so this should be safe, -// and it's tricky to use the window-watcher to check a window *does not* -// appear - how long should the watcher be active before assuming it's not -// going to appear?) -function* runTests() { - let url = "http://mochi.test:8888/browser/toolkit/components/thumbnails/test/authenticate.sjs?user=anyone"; - ok(!thumbnailExists(url), "Thumbnail file should not already exist."); - - let capturedURL = yield bgCapture(url); - is(capturedURL, url, "Captured URL should be URL passed to capture."); - ok(thumbnailExists(url), - "Thumbnail file should exist even though it requires auth."); - removeThumbnail(url); -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_bg_no_cookies_sent.js b/toolkit/components/thumbnails/test/browser_thumbnails_bg_no_cookies_sent.js deleted file mode 100644 index afbedb382..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_bg_no_cookies_sent.js +++ /dev/null @@ -1,40 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -function* runTests() { - // Visit the test page in the browser and tell it to set a cookie. - let url = bgTestPageURL({ setGreenCookie: true }); - let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, url); - let browser = tab.linkedBrowser; - - // The root element of the page shouldn't be green yet. - yield ContentTask.spawn(browser, null, function () { - Assert.notEqual(content.document.documentElement.style.backgroundColor, - "rgb(0, 255, 0)", - "The page shouldn't be green yet."); - }); - - // Cookie should be set now. Reload the page to verify. Its root element - // will be green if the cookie's set. - browser.reload(); - yield BrowserTestUtils.browserLoaded(browser); - yield ContentTask.spawn(browser, null, function () { - Assert.equal(content.document.documentElement.style.backgroundColor, - "rgb(0, 255, 0)", - "The page should be green now."); - }); - - // Capture the page. Get the image data of the capture and verify it's not - // green. (Checking only the first pixel suffices.) - yield bgCapture(url); - ok(thumbnailExists(url), "Thumbnail file should exist after capture."); - - retrieveImageDataForURL(url, function ([r, g, b]) { - isnot([r, g, b].toString(), [0, 255, 0].toString(), - "The captured page should not be green."); - gBrowser.removeTab(tab); - removeThumbnail(url); - next(); - }); - yield true; -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_bg_no_cookies_stored.js b/toolkit/components/thumbnails/test/browser_thumbnails_bg_no_cookies_stored.js deleted file mode 100644 index 90a1a890b..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_bg_no_cookies_stored.js +++ /dev/null @@ -1,32 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -// check that if a page captured in the background attempts to set a cookie, -// that cookie is not saved for subsequent requests. -function* runTests() { - yield SpecialPowers.pushPrefEnv({ - set: [["privacy.usercontext.about_newtab_segregation.enabled", true]] - }); - let url = bgTestPageURL({ - setRedCookie: true, - iframe: bgTestPageURL({ setRedCookie: true}), - xhr: bgTestPageURL({ setRedCookie: true}) - }); - ok(!thumbnailExists(url), "Thumbnail file should not exist before capture."); - yield bgCapture(url); - ok(thumbnailExists(url), "Thumbnail file should exist after capture."); - removeThumbnail(url); - // now load it up in a browser - it should *not* be red, otherwise the - // cookie above was saved. - let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, url); - let browser = tab.linkedBrowser; - - // The root element of the page shouldn't be red. - yield ContentTask.spawn(browser, null, function() { - Assert.notEqual(content.document.documentElement.style.backgroundColor, - "rgb(255, 0, 0)", - "The page shouldn't be red."); - }); - - gBrowser.removeTab(tab); -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_bg_no_duplicates.js b/toolkit/components/thumbnails/test/browser_thumbnails_bg_no_duplicates.js deleted file mode 100644 index 31b504335..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_bg_no_duplicates.js +++ /dev/null @@ -1,31 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -function* runTests() { - let url = "http://example.com/1"; - ok(!thumbnailExists(url), "Thumbnail file should not already exist."); - let numCallbacks = 0; - let doneCallback = function(doneUrl) { - is(doneUrl, url, "called back with correct url"); - numCallbacks += 1; - // We will delete the file after the first callback, then check it - // still doesn't exist on the second callback, which should give us - // confidence that we didn't end up with 2 different captures happening - // for the same url... - if (numCallbacks == 1) { - ok(thumbnailExists(url), "Thumbnail file should now exist."); - removeThumbnail(url); - return; - } - if (numCallbacks == 2) { - ok(!thumbnailExists(url), "Thumbnail file should still be deleted."); - // and that's all we expect, so we are done... - next(); - return; - } - ok(false, "only expecting 2 callbacks"); - } - BackgroundPageThumbs.capture(url, {onDone: doneCallback}); - BackgroundPageThumbs.capture(url, {onDone: doneCallback}); - yield true; -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_bg_queueing.js b/toolkit/components/thumbnails/test/browser_thumbnails_bg_queueing.js deleted file mode 100644 index 1426f6f4e..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_bg_queueing.js +++ /dev/null @@ -1,38 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -function* runTests() { - let urls = [ - "http://www.example.com/0", - "http://www.example.com/1", - // an item that will timeout to ensure timeouts work and we resume. - bgTestPageURL({ wait: 2002 }), - "http://www.example.com/2", - ]; - dontExpireThumbnailURLs(urls); - urls.forEach(url => { - ok(!thumbnailExists(url), "Thumbnail should not exist yet: " + url); - let isTimeoutTest = url.indexOf("wait") >= 0; - BackgroundPageThumbs.capture(url, { - timeout: isTimeoutTest ? 100 : 30000, - onDone: function onDone(capturedURL) { - ok(urls.length > 0, "onDone called, so URLs should still remain"); - is(capturedURL, urls.shift(), - "Captured URL should be currently expected URL (i.e., " + - "capture() callbacks should be called in the correct order)"); - if (isTimeoutTest) { - ok(!thumbnailExists(capturedURL), - "Thumbnail shouldn't exist for timed out capture"); - } else { - ok(thumbnailExists(capturedURL), - "Thumbnail should be cached after capture"); - removeThumbnail(url); - } - if (!urls.length) - // Test done. - next(); - }, - }); - }); - yield true; -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_bg_redirect.js b/toolkit/components/thumbnails/test/browser_thumbnails_bg_redirect.js deleted file mode 100644 index baa1b6d68..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_bg_redirect.js +++ /dev/null @@ -1,39 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -function* runTests() { - let finalURL = "http://example.com/redirected"; - let originalURL = bgTestPageURL({ redirect: finalURL }); - - ok(!thumbnailExists(originalURL), - "Thumbnail file for original URL should not exist yet."); - ok(!thumbnailExists(finalURL), - "Thumbnail file for final URL should not exist yet."); - - let captureOriginalPromise = new Promise(resolve => { - bgAddPageThumbObserver(originalURL).then(() => { - ok(true, `page-thumbnail created for ${originalURL}`); - resolve(); - }); - }); - - let captureFinalPromise = new Promise(resolve => { - bgAddPageThumbObserver(finalURL).then(() => { - ok(true, `page-thumbnail created for ${finalURL}`); - resolve(); - }); - }); - - let capturedURL = yield bgCapture(originalURL); - is(capturedURL, originalURL, - "Captured URL should be URL passed to capture"); - yield captureOriginalPromise; - yield captureFinalPromise; - ok(thumbnailExists(originalURL), - "Thumbnail for original URL should be cached"); - ok(thumbnailExists(finalURL), - "Thumbnail for final URL should be cached"); - - removeThumbnail(originalURL); - removeThumbnail(finalURL); -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_bg_timeout.js b/toolkit/components/thumbnails/test/browser_thumbnails_bg_timeout.js deleted file mode 100644 index da05b4355..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_bg_timeout.js +++ /dev/null @@ -1,24 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -function* runTests() { - let url = bgTestPageURL({ wait: 30000 }); - ok(!thumbnailExists(url), "Thumbnail should not be cached already."); - let numCalls = 0; - BackgroundPageThumbs.capture(url, { - timeout: 0, - onDone: function onDone(capturedURL) { - is(capturedURL, url, "Captured URL should be URL passed to capture"); - is(numCalls++, 0, "onDone should be called only once"); - ok(!thumbnailExists(url), - "Capture timed out so thumbnail should not be cached"); - next(); - }, - }); - yield new Promise(resolve => { - bgAddPageThumbObserver(url).catch(function(err) { - ok(true, `page-thumbnail error thrown for ${url}`); - resolve(); - }); - }); -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_bug726727.js b/toolkit/components/thumbnails/test/browser_thumbnails_bug726727.js deleted file mode 100644 index f7f1f3deb..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_bug726727.js +++ /dev/null @@ -1,19 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -/** - * These tests ensure that capturing a sites's thumbnail, saving it and - * retrieving it from the cache works. - */ -function* runTests() { - // Create a tab that shows an error page. - let tab = gBrowser.addTab("http://127.0.0.1:1/"); - let browser = tab.linkedBrowser; - yield browser.addEventListener("DOMContentLoaded", function onLoad() { - browser.removeEventListener("DOMContentLoaded", onLoad, false); - PageThumbs.shouldStoreThumbnail(browser, (aResult) => { - ok(!aResult, "we're not going to capture an error page"); - executeSoon(next); - }); - }, false); -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_bug727765.js b/toolkit/components/thumbnails/test/browser_thumbnails_bug727765.js deleted file mode 100644 index c4faac685..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_bug727765.js +++ /dev/null @@ -1,29 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -const URL = "http://mochi.test:8888/browser/toolkit/components/thumbnails/" + - "test/background_red_scroll.html"; - -function isRedThumbnailFuzz(r, g, b, expectedR, expectedB, expectedG, aFuzz) -{ - return (Math.abs(r - expectedR) <= aFuzz) && - (Math.abs(g - expectedG) <= aFuzz) && - (Math.abs(b - expectedB) <= aFuzz); -} - -// Test for black borders caused by scrollbars. -function* runTests() { - // Create a tab with a page with a red background and scrollbars. - yield addTab(URL); - yield captureAndCheckColor(255, 0, 0, "we have a red thumbnail"); - - // Check the thumbnail color of the bottom right pixel. - yield whenFileExists(URL); - yield retrieveImageDataForURL(URL, function (aData) { - let [r, g, b] = [].slice.call(aData, -4); - let fuzz = 2; // Windows 8 x64 blends with the scrollbar a bit. - var message = "Expected red thumbnail rgb(255, 0, 0), got " + r + "," + g + "," + b; - ok(isRedThumbnailFuzz(r, g, b, 255, 0, 0, fuzz), message); - next(); - }); -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_bug818225.js b/toolkit/components/thumbnails/test/browser_thumbnails_bug818225.js deleted file mode 100644 index a7e1caa04..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_bug818225.js +++ /dev/null @@ -1,42 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -const URL = "http://mochi.test:8888/browser/toolkit/components/thumbnails/" + - "test/background_red.html?" + Date.now(); - -// Test PageThumbs API function getThumbnailPath -function* runTests() { - - let path = PageThumbs.getThumbnailPath(URL); - yield testIfExists(path, false, "Thumbnail file does not exist"); - - yield addVisitsAndRepopulateNewTabLinks(URL, next); - yield createThumbnail(URL); - - path = PageThumbs.getThumbnailPath(URL); - let expectedPath = PageThumbsStorage.getFilePathForURL(URL); - is(path, expectedPath, "Thumbnail file has correct path"); - - yield testIfExists(path, true, "Thumbnail file exists"); - -} - -function createThumbnail(aURL) { - addTab(aURL, function () { - whenFileExists(aURL, function () { - gBrowser.removeTab(gBrowser.selectedTab); - next(); - }); - }); -} - -function testIfExists(aPath, aExpected, aMessage) { - return OS.File.exists(aPath).then( - function onSuccess(exists) { - is(exists, aExpected, aMessage); - }, - function onFailure(error) { - ok(false, "OS.File.exists() failed " + error); - } - ); -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_capture.js b/toolkit/components/thumbnails/test/browser_thumbnails_capture.js deleted file mode 100644 index 47d94d31b..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_capture.js +++ /dev/null @@ -1,20 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -/** - * These tests ensure that capturing a sites's thumbnail, saving it and - * retrieving it from the cache works. - */ -function* runTests() { - // Create a tab with a red background. - yield addTab("data:text/html,<body bgcolor=ff0000></body>"); - yield captureAndCheckColor(255, 0, 0, "we have a red thumbnail"); - - // Load a page with a green background. - yield navigateTo("data:text/html,<body bgcolor=00ff00></body>"); - yield captureAndCheckColor(0, 255, 0, "we have a green thumbnail"); - - // Load a page with a blue background. - yield navigateTo("data:text/html,<body bgcolor=0000ff></body>"); - yield captureAndCheckColor(0, 0, 255, "we have a blue thumbnail"); -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_expiration.js b/toolkit/components/thumbnails/test/browser_thumbnails_expiration.js deleted file mode 100644 index 4c73e17be..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_expiration.js +++ /dev/null @@ -1,97 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -const URL = "http://mochi.test:8888/?t=" + Date.now(); -const URL1 = URL + "#1"; -const URL2 = URL + "#2"; -const URL3 = URL + "#3"; - -var tmp = {}; -Cc["@mozilla.org/moz/jssubscript-loader;1"] - .getService(Ci.mozIJSSubScriptLoader) - .loadSubScript("resource://gre/modules/PageThumbs.jsm", tmp); - -const EXPIRATION_MIN_CHUNK_SIZE = 50; -const {PageThumbsExpiration} = tmp; - -function* runTests() { - // Create dummy URLs. - let dummyURLs = []; - for (let i = 0; i < EXPIRATION_MIN_CHUNK_SIZE + 10; i++) { - dummyURLs.push(URL + "#dummy" + i); - } - - // Make sure our thumbnails aren't expired too early. - dontExpireThumbnailURLs([URL1, URL2, URL3].concat(dummyURLs)); - - // Create three thumbnails. - yield createDummyThumbnail(URL1); - ok(thumbnailExists(URL1), "first thumbnail created"); - - yield createDummyThumbnail(URL2); - ok(thumbnailExists(URL2), "second thumbnail created"); - - yield createDummyThumbnail(URL3); - ok(thumbnailExists(URL3), "third thumbnail created"); - - // Remove the third thumbnail. - yield expireThumbnails([URL1, URL2]); - ok(thumbnailExists(URL1), "first thumbnail still exists"); - ok(thumbnailExists(URL2), "second thumbnail still exists"); - ok(!thumbnailExists(URL3), "third thumbnail has been removed"); - - // Remove the second thumbnail. - yield expireThumbnails([URL1]); - ok(thumbnailExists(URL1), "first thumbnail still exists"); - ok(!thumbnailExists(URL2), "second thumbnail has been removed"); - - // Remove all thumbnails. - yield expireThumbnails([]); - ok(!thumbnailExists(URL1), "all thumbnails have been removed"); - - // Create some more files than the min chunk size. - for (let url of dummyURLs) { - yield createDummyThumbnail(url); - } - - ok(dummyURLs.every(thumbnailExists), "all dummy thumbnails created"); - - // Expire thumbnails and expect 10 remaining. - yield expireThumbnails([]); - let remainingURLs = dummyURLs.filter(thumbnailExists); - is(remainingURLs.length, 10, "10 dummy thumbnails remaining"); - - // Expire thumbnails again. All should be gone by now. - yield expireThumbnails([]); - remainingURLs = remainingURLs.filter(thumbnailExists); - is(remainingURLs.length, 0, "no dummy thumbnails remaining"); -} - -function createDummyThumbnail(aURL) { - info("Creating dummy thumbnail for " + aURL); - let dummy = new Uint8Array(10); - for (let i = 0; i < 10; ++i) { - dummy[i] = i; - } - PageThumbsStorage.writeData(aURL, dummy).then( - function onSuccess() { - info("createDummyThumbnail succeeded"); - executeSoon(next); - }, - function onFailure(error) { - ok(false, "createDummyThumbnail failed " + error); - } - ); -} - -function expireThumbnails(aKeep) { - PageThumbsExpiration.expireThumbnails(aKeep).then( - function onSuccess() { - info("expireThumbnails succeeded"); - executeSoon(next); - }, - function onFailure(error) { - ok(false, "expireThumbnails failed " + error); - } - ); -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_privacy.js b/toolkit/components/thumbnails/test/browser_thumbnails_privacy.js deleted file mode 100644 index e7dc7b4d5..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_privacy.js +++ /dev/null @@ -1,74 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -const PREF_DISK_CACHE_SSL = "browser.cache.disk_cache_ssl"; -const URL = "://example.com/browser/toolkit/components/thumbnails/" + - "test/privacy_cache_control.sjs"; - -function* runTests() { - registerCleanupFunction(function () { - Services.prefs.clearUserPref(PREF_DISK_CACHE_SSL); - }); - - let positive = [ - // A normal HTTP page without any Cache-Control header. - {scheme: "http", cacheControl: null, diskCacheSSL: false}, - - // A normal HTTP page with 'Cache-Control: private'. - {scheme: "http", cacheControl: "private", diskCacheSSL: false}, - - // Capture HTTPS pages if browser.cache.disk_cache_ssl == true. - {scheme: "https", cacheControl: null, diskCacheSSL: true}, - {scheme: "https", cacheControl: "public", diskCacheSSL: true}, - {scheme: "https", cacheControl: "private", diskCacheSSL: true} - ]; - - let negative = [ - // Never capture pages with 'Cache-Control: no-store'. - {scheme: "http", cacheControl: "no-store", diskCacheSSL: false}, - {scheme: "http", cacheControl: "no-store", diskCacheSSL: true}, - {scheme: "https", cacheControl: "no-store", diskCacheSSL: false}, - {scheme: "https", cacheControl: "no-store", diskCacheSSL: true}, - - // Don't capture HTTPS pages by default. - {scheme: "https", cacheControl: null, diskCacheSSL: false}, - {scheme: "https", cacheControl: "public", diskCacheSSL: false}, - {scheme: "https", cacheControl: "private", diskCacheSSL: false} - ]; - - yield checkCombinations(positive, true); - yield checkCombinations(negative, false); -} - -function checkCombinations(aCombinations, aResult) { - let combi = aCombinations.shift(); - if (!combi) { - next(); - return; - } - - let url = combi.scheme + URL; - if (combi.cacheControl) - url += "?" + combi.cacheControl; - Services.prefs.setBoolPref(PREF_DISK_CACHE_SSL, combi.diskCacheSSL); - - // Add the test page as a top link so it has a chance to be thumbnailed - addVisitsAndRepopulateNewTabLinks(url, _ => { - testCombination(combi, url, aCombinations, aResult); - }); -} - -function testCombination(combi, url, aCombinations, aResult) { - let tab = gBrowser.selectedTab = gBrowser.addTab(url); - let browser = gBrowser.selectedBrowser; - - whenLoaded(browser, () => { - let msg = JSON.stringify(combi) + " == " + aResult; - PageThumbs.shouldStoreThumbnail(browser, (aIsSafeSite) => { - is(aIsSafeSite, aResult, msg); - gBrowser.removeTab(tab); - // Continue with the next combination. - checkCombinations(aCombinations, aResult); - }); - }); -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_redirect.js b/toolkit/components/thumbnails/test/browser_thumbnails_redirect.js deleted file mode 100644 index 482dbc803..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_redirect.js +++ /dev/null @@ -1,30 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -const URL = "http://mochi.test:8888/browser/toolkit/components/thumbnails/" + - "test/background_red_redirect.sjs"; -// loading URL will redirect us to... -const FINAL_URL = "http://mochi.test:8888/browser/toolkit/components/" + - "thumbnails/test/background_red.html"; - -/** - * These tests ensure that we save and provide thumbnails for redirecting sites. - */ -function* runTests() { - dontExpireThumbnailURLs([URL, FINAL_URL]); - - // Kick off history by loading a tab first or the test fails in single mode. - yield addTab(URL); - gBrowser.removeTab(gBrowser.selectedTab); - - // Create a tab, redirecting to a page with a red background. - yield addTab(URL); - yield captureAndCheckColor(255, 0, 0, "we have a red thumbnail"); - - // Wait until the referrer's thumbnail's file has been written. - yield whenFileExists(URL); - yield retrieveImageDataForURL(URL, function ([r, g, b]) { - is("" + [r, g, b], "255,0,0", "referrer has a red thumbnail"); - next(); - }); -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_storage.js b/toolkit/components/thumbnails/test/browser_thumbnails_storage.js deleted file mode 100644 index 972f956e5..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_storage.js +++ /dev/null @@ -1,112 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -const URL = "http://mochi.test:8888/"; -const URL_COPY = URL + "#copy"; - -XPCOMUtils.defineLazyGetter(this, "Sanitizer", function () { - let tmp = {}; - Cc["@mozilla.org/moz/jssubscript-loader;1"] - .getService(Ci.mozIJSSubScriptLoader) - .loadSubScript("chrome://browser/content/sanitize.js", tmp); - return tmp.Sanitizer; -}); - -/** - * These tests ensure that the thumbnail storage is working as intended. - * Newly captured thumbnails should be saved as files and they should as well - * be removed when the user sanitizes their history. - */ -function* runTests() { - yield Task.spawn(function*() { - dontExpireThumbnailURLs([URL, URL_COPY]); - - yield promiseClearHistory(); - yield promiseAddVisitsAndRepopulateNewTabLinks(URL); - yield promiseCreateThumbnail(); - - // Make sure Storage.copy() updates an existing file. - yield PageThumbsStorage.copy(URL, URL_COPY); - let copy = new FileUtils.File(PageThumbsStorage.getFilePathForURL(URL_COPY)); - let mtime = copy.lastModifiedTime -= 60; - - yield PageThumbsStorage.copy(URL, URL_COPY); - isnot(new FileUtils.File(PageThumbsStorage.getFilePathForURL(URL_COPY)).lastModifiedTime, mtime, - "thumbnail file was updated"); - - let file = new FileUtils.File(PageThumbsStorage.getFilePathForURL(URL)); - let fileCopy = new FileUtils.File(PageThumbsStorage.getFilePathForURL(URL_COPY)); - - // Clear the browser history. Retry until the files are gone because Windows - // locks them sometimes. - info("Clearing history"); - while (file.exists() || fileCopy.exists()) { - yield promiseClearHistory(); - } - info("History is clear"); - - info("Repopulating"); - yield promiseAddVisitsAndRepopulateNewTabLinks(URL); - yield promiseCreateThumbnail(); - - info("Clearing the last 10 minutes of browsing history"); - // Clear the last 10 minutes of browsing history. - yield promiseClearHistory(true); - - info("Attempt to clear file"); - // Retry until the file is gone because Windows locks it sometimes. - yield promiseClearFile(file, URL); - - info("Done"); - }); -} - -var promiseClearFile = Task.async(function*(aFile, aURL) { - if (!aFile.exists()) { - return undefined; - } - // Re-add our URL to the history so that history observer's onDeleteURI() - // is called again. - yield PlacesTestUtils.addVisits(makeURI(aURL)); - yield promiseClearHistory(true); - // Then retry. - return promiseClearFile(aFile, aURL); -}); - -function promiseClearHistory(aUseRange) { - let s = new Sanitizer(); - s.prefDomain = "privacy.cpd."; - - let prefs = gPrefService.getBranch(s.prefDomain); - prefs.setBoolPref("history", true); - prefs.setBoolPref("downloads", false); - prefs.setBoolPref("cache", false); - prefs.setBoolPref("cookies", false); - prefs.setBoolPref("formdata", false); - prefs.setBoolPref("offlineApps", false); - prefs.setBoolPref("passwords", false); - prefs.setBoolPref("sessions", false); - prefs.setBoolPref("siteSettings", false); - - if (aUseRange) { - let usec = Date.now() * 1000; - s.range = [usec - 10 * 60 * 1000 * 1000, usec]; - s.ignoreTimespan = false; - } - - return s.sanitize().then(() => { - s.range = null; - s.ignoreTimespan = true; - }); -} - -function promiseCreateThumbnail() { - return new Promise(resolve => { - addTab(URL, function () { - whenFileExists(URL, function () { - gBrowser.removeTab(gBrowser.selectedTab); - resolve(); - }); - }); - }); -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_storage_migrate3.js b/toolkit/components/thumbnails/test/browser_thumbnails_storage_migrate3.js deleted file mode 100644 index e7f150f87..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_storage_migrate3.js +++ /dev/null @@ -1,102 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -const URL = "http://mochi.test:8888/migration3"; -const URL2 = URL + "#2"; -const URL3 = URL + "#3"; -const THUMBNAIL_DIRECTORY = "thumbnails"; -const PREF_STORAGE_VERSION = "browser.pagethumbnails.storage_version"; - -var tmp = {}; -Cc["@mozilla.org/moz/jssubscript-loader;1"] - .getService(Ci.mozIJSSubScriptLoader) - .loadSubScript("resource://gre/modules/PageThumbs.jsm", tmp); -var {PageThumbsStorageMigrator} = tmp; - -XPCOMUtils.defineLazyServiceGetter(this, "gDirSvc", - "@mozilla.org/file/directory_service;1", "nsIProperties"); - -/** - * This test makes sure we correctly migrate to thumbnail storage version 3. - * This means copying existing thumbnails from the roaming to the local profile - * directory and should just apply to Linux. - */ -function* runTests() { - // Prepare a local profile directory. - let localProfile = FileUtils.getDir("ProfD", ["local-test"], true); - changeLocation("ProfLD", localProfile); - - let roaming = FileUtils.getDir("ProfD", [THUMBNAIL_DIRECTORY], true); - - // Set up some data in the roaming profile. - let name = PageThumbsStorage.getLeafNameForURL(URL); - let file = FileUtils.getFile("ProfD", [THUMBNAIL_DIRECTORY, name]); - writeDummyFile(file); - - name = PageThumbsStorage.getLeafNameForURL(URL2); - file = FileUtils.getFile("ProfD", [THUMBNAIL_DIRECTORY, name]); - writeDummyFile(file); - - name = PageThumbsStorage.getLeafNameForURL(URL3); - file = FileUtils.getFile("ProfD", [THUMBNAIL_DIRECTORY, name]); - writeDummyFile(file); - - // Pretend to have one of the thumbnails - // already in place at the new storage site. - name = PageThumbsStorage.getLeafNameForURL(URL3); - file = FileUtils.getFile("ProfLD", [THUMBNAIL_DIRECTORY, name]); - writeDummyFile(file, "no-overwrite-plz"); - - // Kick off thumbnail storage migration. - PageThumbsStorageMigrator.migrateToVersion3(localProfile.path); - ok(true, "migration finished"); - - // Wait until the first thumbnail was moved to its new location. - yield whenFileExists(URL); - ok(true, "first thumbnail moved"); - - // Wait for the second thumbnail to be moved as well. - yield whenFileExists(URL2); - ok(true, "second thumbnail moved"); - - yield whenFileRemoved(roaming); - ok(true, "roaming thumbnail directory removed"); - - // Check that our existing thumbnail wasn't overwritten. - is(getFileContents(file), "no-overwrite-plz", - "existing thumbnail was not overwritten"); - - // Sanity check: ensure that, until it is removed, deprecated - // function |getFileForURL| points to the same path as - // |getFilePathForURL|. - if ("getFileForURL" in PageThumbsStorage) { - file = PageThumbsStorage.getFileForURL(URL); - is(file.path, PageThumbsStorage.getFilePathForURL(URL), - "Deprecated getFileForURL and getFilePathForURL return the same path"); - } -} - -function changeLocation(aLocation, aNewDir) { - let oldDir = gDirSvc.get(aLocation, Ci.nsILocalFile); - gDirSvc.undefine(aLocation); - gDirSvc.set(aLocation, aNewDir); - - registerCleanupFunction(function () { - gDirSvc.undefine(aLocation); - gDirSvc.set(aLocation, oldDir); - }); -} - -function writeDummyFile(aFile, aContents) { - let fos = FileUtils.openSafeFileOutputStream(aFile); - let data = aContents || "dummy"; - fos.write(data, data.length); - FileUtils.closeSafeFileOutputStream(fos); -} - -function getFileContents(aFile) { - let istream = Cc["@mozilla.org/network/file-input-stream;1"] - .createInstance(Ci.nsIFileInputStream); - istream.init(aFile, FileUtils.MODE_RDONLY, FileUtils.PERMS_FILE, 0); - return NetUtil.readInputStreamToString(istream, istream.available()); -} diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_update.js b/toolkit/components/thumbnails/test/browser_thumbnails_update.js deleted file mode 100644 index 971a2994e..000000000 --- a/toolkit/components/thumbnails/test/browser_thumbnails_update.js +++ /dev/null @@ -1,169 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -/** - * These tests check the auto-update facility of the thumbnail service. - */ - -function* runTests() { - // A "trampoline" - a generator that iterates over sub-iterators - let tests = [ - simpleCaptureTest, - capIfStaleErrorResponseUpdateTest, - capIfStaleGoodResponseUpdateTest, - regularCapErrorResponseUpdateTest, - regularCapGoodResponseUpdateTest - ]; - for (let test of tests) { - info("Running subtest " + test.name); - for (let iterator of test()) - yield iterator; - } -} - -function ensureThumbnailStale(url) { - // We go behind the back of the thumbnail service and change the - // mtime of the file to be in the past. - let fname = PageThumbsStorage.getFilePathForURL(url); - let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); - file.initWithPath(fname); - ok(file.exists(), fname + " should exist"); - // Set it as very stale... - file.lastModifiedTime = Date.now() - 1000000000; -} - -function getThumbnailModifiedTime(url) { - let fname = PageThumbsStorage.getFilePathForURL(url); - let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); - file.initWithPath(fname); - return file.lastModifiedTime; -} - -// The tests! -/* Check functionality of a normal captureAndStoreIfStale request */ -function* simpleCaptureTest() { - let numNotifications = 0; - const URL = "http://mochi.test:8888/browser/toolkit/components/thumbnails/test/thumbnails_update.sjs?simple"; - - function observe(subject, topic, data) { - is(topic, "page-thumbnail:create", "got expected topic"); - is(data, URL, "data is our test URL"); - if (++numNotifications == 2) { - // This is the final notification and signals test success... - Services.obs.removeObserver(observe, "page-thumbnail:create"); - gBrowser.removeTab(gBrowser.selectedTab); - next(); - } - } - - Services.obs.addObserver(observe, "page-thumbnail:create", false); - // Create a tab - we don't care what the content is. - yield addTab(URL); - let browser = gBrowser.selectedBrowser; - - // Capture the screenshot. - PageThumbs.captureAndStore(browser, function () { - // We've got a capture so should have seen the observer. - is(numNotifications, 1, "got notification of item being created."); - // The capture is now "fresh" - so requesting the URL should not cause - // a new capture. - PageThumbs.captureAndStoreIfStale(browser, function() { - is(numNotifications, 1, "still only 1 notification of item being created."); - - ensureThumbnailStale(URL); - // Ask for it to be updated. - PageThumbs.captureAndStoreIfStale(browser); - // But it's async, so wait - our observer above will call next() when - // the notification comes. - }); - }); - yield undefined // wait for callbacks to call 'next'... -} - -/* Check functionality of captureAndStoreIfStale when there is an error response - from the server. - */ -function* capIfStaleErrorResponseUpdateTest() { - const URL = "http://mochi.test:8888/browser/toolkit/components/thumbnails/test/thumbnails_update.sjs?fail"; - yield addTab(URL); - - yield captureAndCheckColor(0, 255, 0, "we have a green thumbnail"); - // update the thumbnail to be stale, then re-request it. The server will - // return a 400 response and a red thumbnail. - // The service should not save the thumbnail - so we (a) check the thumbnail - // remains green and (b) check the mtime of the file is < now. - ensureThumbnailStale(URL); - yield navigateTo(URL); - // now() returns a higher-precision value than the modified time of a file. - // As we set the thumbnail very stale, allowing 1 second of "slop" here - // works around this while still keeping the test valid. - let now = Date.now() - 1000 ; - PageThumbs.captureAndStoreIfStale(gBrowser.selectedBrowser, () => { - ok(getThumbnailModifiedTime(URL) < now, "modified time should be < now"); - retrieveImageDataForURL(URL, function ([r, g, b]) { - is("" + [r, g, b], "" + [0, 255, 0], "thumbnail is still green"); - gBrowser.removeTab(gBrowser.selectedTab); - next(); - }); - }); - yield undefined; // wait for callback to call 'next'... -} - -/* Check functionality of captureAndStoreIfStale when there is a non-error - response from the server. This test is somewhat redundant - although it is - using a http:// URL instead of a data: url like most others. - */ -function* capIfStaleGoodResponseUpdateTest() { - const URL = "http://mochi.test:8888/browser/toolkit/components/thumbnails/test/thumbnails_update.sjs?ok"; - yield addTab(URL); - let browser = gBrowser.selectedBrowser; - - yield captureAndCheckColor(0, 255, 0, "we have a green thumbnail"); - // update the thumbnail to be stale, then re-request it. The server will - // return a 200 response and a red thumbnail - so that new thumbnail should - // end up captured. - ensureThumbnailStale(URL); - yield navigateTo(URL); - // now() returns a higher-precision value than the modified time of a file. - // As we set the thumbnail very stale, allowing 1 second of "slop" here - // works around this while still keeping the test valid. - let now = Date.now() - 1000 ; - PageThumbs.captureAndStoreIfStale(browser, () => { - ok(getThumbnailModifiedTime(URL) >= now, "modified time should be >= now"); - // the captureAndStoreIfStale request saw a 200 response with the red body, - // so we expect to see the red version here. - retrieveImageDataForURL(URL, function ([r, g, b]) { - is("" + [r, g, b], "" + [255, 0, 0], "thumbnail is now red"); - next(); - }); - }); - yield undefined; // wait for callback to call 'next'... -} - -/* Check functionality of captureAndStore when there is an error response - from the server. - */ -function* regularCapErrorResponseUpdateTest() { - const URL = "http://mochi.test:8888/browser/toolkit/components/thumbnails/test/thumbnails_update.sjs?fail"; - yield addTab(URL); - yield captureAndCheckColor(0, 255, 0, "we have a green thumbnail"); - gBrowser.removeTab(gBrowser.selectedTab); - // do it again - the server will return a 400, so the foreground service - // should not update it. - yield addTab(URL); - yield captureAndCheckColor(0, 255, 0, "we still have a green thumbnail"); -} - -/* Check functionality of captureAndStore when there is an OK response - from the server. - */ -function* regularCapGoodResponseUpdateTest() { - const URL = "http://mochi.test:8888/browser/toolkit/components/thumbnails/test/thumbnails_update.sjs?ok"; - yield addTab(URL); - yield captureAndCheckColor(0, 255, 0, "we have a green thumbnail"); - gBrowser.removeTab(gBrowser.selectedTab); - // do it again - the server will return a 200, so the foreground service - // should update it. - yield addTab(URL); - yield captureAndCheckColor(255, 0, 0, "we now have a red thumbnail"); -} diff --git a/toolkit/components/thumbnails/test/head.js b/toolkit/components/thumbnails/test/head.js deleted file mode 100644 index e8229508a..000000000 --- a/toolkit/components/thumbnails/test/head.js +++ /dev/null @@ -1,356 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -var tmp = {}; -Cu.import("resource://gre/modules/PageThumbs.jsm", tmp); -Cu.import("resource://gre/modules/BackgroundPageThumbs.jsm", tmp); -Cu.import("resource://gre/modules/NewTabUtils.jsm", tmp); -Cu.import("resource:///modules/sessionstore/SessionStore.jsm", tmp); -Cu.import("resource://gre/modules/FileUtils.jsm", tmp); -Cu.import("resource://gre/modules/osfile.jsm", tmp); -var {PageThumbs, BackgroundPageThumbs, NewTabUtils, PageThumbsStorage, SessionStore, FileUtils, OS} = tmp; - -XPCOMUtils.defineLazyModuleGetter(this, "PlacesTestUtils", - "resource://testing-common/PlacesTestUtils.jsm"); - -var oldEnabledPref = Services.prefs.getBoolPref("browser.pagethumbnails.capturing_disabled"); -Services.prefs.setBoolPref("browser.pagethumbnails.capturing_disabled", false); - -registerCleanupFunction(function () { - while (gBrowser.tabs.length > 1) - gBrowser.removeTab(gBrowser.tabs[1]); - Services.prefs.setBoolPref("browser.pagethumbnails.capturing_disabled", oldEnabledPref) -}); - -/** - * Provide the default test function to start our test runner. - */ -function test() { - TestRunner.run(); -} - -/** - * The test runner that controls the execution flow of our tests. - */ -var TestRunner = { - /** - * Starts the test runner. - */ - run: function () { - waitForExplicitFinish(); - - SessionStore.promiseInitialized.then(function () { - this._iter = runTests(); - if (this._iter) { - this.next(); - } else { - finish(); - } - }.bind(this)); - }, - - /** - * Runs the next available test or finishes if there's no test left. - * @param aValue This value will be passed to the yielder via the runner's - * iterator. - */ - next: function (aValue) { - let obj = TestRunner._iter.next(aValue); - if (obj.done) { - finish(); - return; - } - - let value = obj.value || obj; - if (value && typeof value.then == "function") { - value.then(result => { - next(result); - }, error => { - ok(false, error + "\n" + error.stack); - }); - } - } -}; - -/** - * Continues the current test execution. - * @param aValue This value will be passed to the yielder via the runner's - * iterator. - */ -function next(aValue) { - TestRunner.next(aValue); -} - -/** - * Creates a new tab with the given URI. - * @param aURI The URI that's loaded in the tab. - * @param aCallback The function to call when the tab has loaded. - */ -function addTab(aURI, aCallback) { - let tab = gBrowser.selectedTab = gBrowser.addTab(aURI); - whenLoaded(tab.linkedBrowser, aCallback); -} - -/** - * Loads a new URI into the currently selected tab. - * @param aURI The URI to load. - */ -function navigateTo(aURI) { - let browser = gBrowser.selectedBrowser; - whenLoaded(browser); - browser.loadURI(aURI); -} - -/** - * Continues the current test execution when a load event for the given element - * has been received. - * @param aElement The DOM element to listen on. - * @param aCallback The function to call when the load event was dispatched. - */ -function whenLoaded(aElement, aCallback = next) { - aElement.addEventListener("load", function onLoad() { - aElement.removeEventListener("load", onLoad, true); - executeSoon(aCallback); - }, true); -} - -/** - * Captures a screenshot for the currently selected tab, stores it in the cache, - * retrieves it from the cache and compares pixel color values. - * @param aRed The red component's intensity. - * @param aGreen The green component's intensity. - * @param aBlue The blue component's intensity. - * @param aMessage The info message to print when comparing the pixel color. - */ -function captureAndCheckColor(aRed, aGreen, aBlue, aMessage) { - let browser = gBrowser.selectedBrowser; - // We'll get oranges if the expiration filter removes the file during the - // test. - dontExpireThumbnailURLs([browser.currentURI.spec]); - - // Capture the screenshot. - PageThumbs.captureAndStore(browser, function () { - retrieveImageDataForURL(browser.currentURI.spec, function ([r, g, b]) { - is("" + [r, g, b], "" + [aRed, aGreen, aBlue], aMessage); - next(); - }); - }); -} - -/** - * For a given URL, loads the corresponding thumbnail - * to a canvas and passes its image data to the callback. - * Note, not compat with e10s! - * @param aURL The url associated with the thumbnail. - * @param aCallback The function to pass the image data to. - */ -function retrieveImageDataForURL(aURL, aCallback) { - let width = 100, height = 100; - let thumb = PageThumbs.getThumbnailURL(aURL, width, height); - - let htmlns = "http://www.w3.org/1999/xhtml"; - let img = document.createElementNS(htmlns, "img"); - img.setAttribute("src", thumb); - - whenLoaded(img, function () { - let canvas = document.createElementNS(htmlns, "canvas"); - canvas.setAttribute("width", width); - canvas.setAttribute("height", height); - - // Draw the image to a canvas and compare the pixel color values. - let ctx = canvas.getContext("2d"); - ctx.drawImage(img, 0, 0, width, height); - let result = ctx.getImageData(0, 0, 100, 100).data; - aCallback(result); - }); -} - -/** - * Returns the file of the thumbnail with the given URL. - * @param aURL The URL of the thumbnail. - */ -function thumbnailFile(aURL) { - return new FileUtils.File(PageThumbsStorage.getFilePathForURL(aURL)); -} - -/** - * Checks if a thumbnail for the given URL exists. - * @param aURL The url associated to the thumbnail. - */ -function thumbnailExists(aURL) { - let file = thumbnailFile(aURL); - return file.exists() && file.fileSize; -} - -/** - * Removes the thumbnail for the given URL. - * @param aURL The URL associated with the thumbnail. - */ -function removeThumbnail(aURL) { - let file = thumbnailFile(aURL); - file.remove(false); -} - -/** - * Calls addVisits, and then forces the newtab module to repopulate its links. - * See addVisits for parameter descriptions. - */ -function addVisitsAndRepopulateNewTabLinks(aPlaceInfo, aCallback) { - PlacesTestUtils.addVisits(makeURI(aPlaceInfo)).then(() => { - NewTabUtils.links.populateCache(aCallback, true); - }); -} -function promiseAddVisitsAndRepopulateNewTabLinks(aPlaceInfo) { - return new Promise(resolve => addVisitsAndRepopulateNewTabLinks(aPlaceInfo, resolve)); -} - -/** - * Calls a given callback when the thumbnail for a given URL has been found - * on disk. Keeps trying until the thumbnail has been created. - * - * @param aURL The URL of the thumbnail's page. - * @param [optional] aCallback - * Function to be invoked on completion. - */ -function whenFileExists(aURL, aCallback = next) { - let callback = aCallback; - if (!thumbnailExists(aURL)) { - callback = () => whenFileExists(aURL, aCallback); - } - - executeSoon(callback); -} - -/** - * Calls a given callback when the given file has been removed. - * Keeps trying until the file is removed. - * - * @param aFile The file that is being removed - * @param [optional] aCallback - * Function to be invoked on completion. - */ -function whenFileRemoved(aFile, aCallback) { - let callback = aCallback; - if (aFile.exists()) { - callback = () => whenFileRemoved(aFile, aCallback); - } - - executeSoon(callback || next); -} - -function wait(aMillis) { - setTimeout(next, aMillis); -} - -/** - * Makes sure that a given list of URLs is not implicitly expired. - * - * @param aURLs The list of URLs that should not be expired. - */ -function dontExpireThumbnailURLs(aURLs) { - let dontExpireURLs = (cb) => cb(aURLs); - PageThumbs.addExpirationFilter(dontExpireURLs); - - registerCleanupFunction(function () { - PageThumbs.removeExpirationFilter(dontExpireURLs); - }); -} - -function bgCapture(aURL, aOptions) { - bgCaptureWithMethod("capture", aURL, aOptions); -} - -function bgCaptureIfMissing(aURL, aOptions) { - bgCaptureWithMethod("captureIfMissing", aURL, aOptions); -} - -function bgCaptureWithMethod(aMethodName, aURL, aOptions = {}) { - // We'll get oranges if the expiration filter removes the file during the - // test. - dontExpireThumbnailURLs([aURL]); - if (!aOptions.onDone) - aOptions.onDone = next; - BackgroundPageThumbs[aMethodName](aURL, aOptions); -} - -function bgTestPageURL(aOpts = {}) { - let TEST_PAGE_URL = "http://mochi.test:8888/browser/toolkit/components/thumbnails/test/thumbnails_background.sjs"; - return TEST_PAGE_URL + "?" + encodeURIComponent(JSON.stringify(aOpts)); -} - -function bgAddPageThumbObserver(url) { - return new Promise((resolve, reject) => { - function observe(subject, topic, data) { // jshint ignore:line - if (data === url) { - switch (topic) { - case "page-thumbnail:create": - resolve(); - break; - case "page-thumbnail:error": - reject(new Error("page-thumbnail:error")); - break; - } - Services.obs.removeObserver(observe, "page-thumbnail:create"); - Services.obs.removeObserver(observe, "page-thumbnail:error"); - } - } - Services.obs.addObserver(observe, "page-thumbnail:create", false); - Services.obs.addObserver(observe, "page-thumbnail:error", false); - }); -} - -function bgAddCrashObserver() { - let crashed = false; - Services.obs.addObserver(function crashObserver(subject, topic, data) { - is(topic, 'ipc:content-shutdown', 'Received correct observer topic.'); - ok(subject instanceof Components.interfaces.nsIPropertyBag2, - 'Subject implements nsIPropertyBag2.'); - // we might see this called as the process terminates due to previous tests. - // We are only looking for "abnormal" exits... - if (!subject.hasKey("abnormal")) { - info("This is a normal termination and isn't the one we are looking for..."); - return; - } - Services.obs.removeObserver(crashObserver, 'ipc:content-shutdown'); - crashed = true; - - var dumpID; - if ('nsICrashReporter' in Components.interfaces) { - dumpID = subject.getPropertyAsAString('dumpID'); - ok(dumpID, "dumpID is present and not an empty string"); - } - - if (dumpID) { - var minidumpDirectory = getMinidumpDirectory(); - removeFile(minidumpDirectory, dumpID + '.dmp'); - removeFile(minidumpDirectory, dumpID + '.extra'); - } - }, 'ipc:content-shutdown', false); - return { - get crashed() { - return crashed; - } - }; -} - -function bgInjectCrashContentScript() { - const TEST_CONTENT_HELPER = "chrome://mochitests/content/browser/toolkit/components/thumbnails/test/thumbnails_crash_content_helper.js"; - let thumbnailBrowser = BackgroundPageThumbs._thumbBrowser; - let mm = thumbnailBrowser.messageManager; - mm.loadFrameScript(TEST_CONTENT_HELPER, false); - return mm; -} - -function getMinidumpDirectory() { - var dir = Services.dirsvc.get('ProfD', Components.interfaces.nsIFile); - dir.append("minidumps"); - return dir; -} - -function removeFile(directory, filename) { - var file = directory.clone(); - file.append(filename); - if (file.exists()) { - file.remove(false); - } -} diff --git a/toolkit/components/thumbnails/test/privacy_cache_control.sjs b/toolkit/components/thumbnails/test/privacy_cache_control.sjs deleted file mode 100644 index 6c7c16edb..000000000 --- a/toolkit/components/thumbnails/test/privacy_cache_control.sjs +++ /dev/null @@ -1,16 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -function handleRequest(aRequest, aResponse) { - // Set HTTP Status - aResponse.setStatusLine(aRequest.httpVersion, 200, "OK"); - - // Set Cache-Control header. - let value = aRequest.queryString; - if (value) - aResponse.setHeader("Cache-Control", value); - - // Set the response body. - aResponse.write("<!DOCTYPE html><html><body></body></html>"); -} diff --git a/toolkit/components/thumbnails/test/test_thumbnails_interfaces.js b/toolkit/components/thumbnails/test/test_thumbnails_interfaces.js deleted file mode 100644 index a8fe51418..000000000 --- a/toolkit/components/thumbnails/test/test_thumbnails_interfaces.js +++ /dev/null @@ -1,25 +0,0 @@ -// tests to check that moz-page-thumb URLs correctly resolve as file:// URLS -"use strict"; - -const Cu = Components.utils; -const Cc = Components.classes; -const Cr = Components.results; -const Ci = Components.interfaces; - -Cu.import("resource://gre/modules/Services.jsm"); - -// need profile so that PageThumbsStorage can resolve the path to the underlying file -do_get_profile(); - -function run_test() { - // first check the protocol handler implements the correct interface - let handler = Services.io.getProtocolHandler("moz-page-thumb"); - ok(handler instanceof Ci.nsISubstitutingProtocolHandler, - "moz-page-thumb handler provides substituting interface"); - - // then check that the file URL resolution works - let uri = Services.io.newURI("moz-page-thumb://thumbnail/?url=http%3A%2F%2Fwww.mozilla.org%2F", - null, null); - ok(uri instanceof Ci.nsIFileURL, "moz-page-thumb:// is a FileURL"); - ok(uri.file, "This moz-page-thumb:// object is backed by a file"); -} diff --git a/toolkit/components/thumbnails/test/thumbnails_background.sjs b/toolkit/components/thumbnails/test/thumbnails_background.sjs deleted file mode 100644 index f1cce96a0..000000000 --- a/toolkit/components/thumbnails/test/thumbnails_background.sjs +++ /dev/null @@ -1,79 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -// The timer never fires if it's not declared and set to this variable outside -// handleRequest, as if it's getting GC'ed when handleRequest's scope goes away. -// Shouldn't the timer thread hold a strong reference to it? -var timer; - -function handleRequest(req, resp) { - resp.processAsync(); - resp.setHeader("Cache-Control", "no-cache, no-store", false); - resp.setHeader("Content-Type", "text/html;charset=utf-8", false); - - let opts = {}; - try { - opts = JSON.parse(decodeURIComponent(req.queryString)); - } - catch (err) {} - - let setCookieScript = ""; - if (opts.setRedCookie) { - resp.setHeader("Set-Cookie", "red", false); - setCookieScript = '<script>document.cookie="red";</script>'; - } - - if (opts.setGreenCookie) { - resp.setHeader("Set-Cookie", "green", false); - setCookieScript = '<script>document.cookie="green";</script>'; - } - - if (opts.iframe) { - setCookieScript += '<iframe src="' + opts.iframe + '" />'; - } - - if (opts.xhr) { - setCookieScript += ` - <script> - var req = new XMLHttpRequest(); - req.open("GET", "${opts.xhr}", true); - req.send(); - </script> - `; - } - - if (req.hasHeader("Cookie") && - req.getHeader("Cookie").split(";").indexOf("red") >= 0) { - resp.write('<html style="background: #f00;">' + setCookieScript + '</html>'); - resp.finish(); - return; - } - - if (req.hasHeader("Cookie") && - req.getHeader("Cookie").split(";").indexOf("green") >= 0) { - resp.write('<html style="background: #0f0;">' + setCookieScript + '</html>'); - resp.finish(); - return; - } - - if (opts.redirect) { - resp.setHeader("Location", opts.redirect); - resp.setStatusLine(null, 303, null); - resp.finish(); - return; - } - - if (opts.wait) { - resp.write("Waiting " + opts.wait + " ms... "); - timer = Components.classes["@mozilla.org/timer;1"]. - createInstance(Components.interfaces.nsITimer); - timer.init(function ding() { - resp.write("OK!"); - resp.finish(); - }, opts.wait, Components.interfaces.nsITimer.TYPE_ONE_SHOT); - return; - } - - resp.write("<pre>" + JSON.stringify(opts, undefined, 2) + "</pre>" + setCookieScript); - resp.finish(); -} diff --git a/toolkit/components/thumbnails/test/thumbnails_crash_content_helper.js b/toolkit/components/thumbnails/test/thumbnails_crash_content_helper.js deleted file mode 100644 index 935175f86..000000000 --- a/toolkit/components/thumbnails/test/thumbnails_crash_content_helper.js +++ /dev/null @@ -1,31 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. -* http://creativecommons.org/publicdomain/zero/1.0/ */ - -var Cu = Components.utils; - -// Ideally we would use CrashTestUtils.jsm, but that's only available for -// xpcshell tests - so we just copy a ctypes crasher from it. -Cu.import("resource://gre/modules/ctypes.jsm"); -var crash = function() { // this will crash when called. - let zero = new ctypes.intptr_t(8); - let badptr = ctypes.cast(zero, ctypes.PointerType(ctypes.int32_t)); - badptr.contents -}; - - -var TestHelper = { - init: function() { - addMessageListener("thumbnails-test:crash", this); - }, - - receiveMessage: function(msg) { - switch (msg.name) { - case "thumbnails-test:crash": - privateNoteIntentionalCrash(); - crash(); - break; - } - }, -} - -TestHelper.init(); diff --git a/toolkit/components/thumbnails/test/thumbnails_update.sjs b/toolkit/components/thumbnails/test/thumbnails_update.sjs deleted file mode 100644 index 4d8ab406a..000000000 --- a/toolkit/components/thumbnails/test/thumbnails_update.sjs +++ /dev/null @@ -1,56 +0,0 @@ -/* Any copyright is dedicated to the Public Domain.
- http://creativecommons.org/publicdomain/zero/1.0/ */
-
-// This server-side script is used for browser_thumbnails_update. One of the
-// main things it must do in all cases is ensure a Cache-Control: no-store
-// header, so the foreground capture doesn't interfere with the testing.
-
-// If the querystring is "simple", then all it does it return some content -
-// it doesn't really matter what that content is.
-
-// Otherwise, its main role is that it must return different *content* for the
-// second request than it did for the first.
-// Also, it should be able to return an error response when requested for the
-// second response.
-// So the basic tests will be to grab the thumbnail, then request it to be
-// grabbed again:
-// * If the second request succeeded, the new thumbnail should exist.
-// * If the second request is an error, the new thumbnail should be ignored.
-
-function handleRequest(aRequest, aResponse) {
- aResponse.setHeader("Content-Type", "text/html;charset=utf-8", false);
- // we want to disable gBrowserThumbnails on-load capture for these responses,
- // so set as a "no-store" response.
- aResponse.setHeader("Cache-Control", "no-store");
-
- // for the simple test - just return some content.
- if (aRequest.queryString == "simple") {
- aResponse.write("<html><body></body></html>");
- aResponse.setStatusLine(aRequest.httpVersion, 200, "Its simply OK");
- return;
- }
-
- // it's one of the more complex tests where the first request for the given
- // URL must return different content than the second, and possibly an error
- // response for the second
- let doneError = getState(aRequest.queryString);
- if (!doneError) {
- // first request - return a response with a green body and 200 response.
- aResponse.setStatusLine(aRequest.httpVersion, 200, "OK - It's green");
- aResponse.write("<html><body bgcolor=00ff00></body></html>");
- // set the state so the next request does the "second request" thing below.
- setState(aRequest.queryString, "yep");
- } else {
- // second request - this will be done by the b/g service.
- // We always return a red background, but depending on the query string we
- // return either a 200 or 401 response.
- if (aRequest.queryString == "fail")
- aResponse.setStatusLine(aRequest.httpVersion, 401, "Oh no you don't");
- else
- aResponse.setStatusLine(aRequest.httpVersion, 200, "OK - It's red");
- aResponse.write("<html><body bgcolor=ff0000></body></html>");
- // reset the error state incase this ends up being reused for the
- // same url and querystring.
- setState(aRequest.queryString, "");
- }
-}
diff --git a/toolkit/components/thumbnails/test/xpcshell.ini b/toolkit/components/thumbnails/test/xpcshell.ini deleted file mode 100644 index 4dae8cced..000000000 --- a/toolkit/components/thumbnails/test/xpcshell.ini +++ /dev/null @@ -1,6 +0,0 @@ -[DEFAULT] -head = -tail = - -[test_thumbnails_interfaces.js] -skip-if = os == 'android' # xpcom interface not packaged |