author | Tim Huang <tihuang@mozilla.com> |
Wed, 23 Aug 2017 16:31:51 +0800 | |
changeset 710230 | c6f26f8befd5257bd262e9cf4181df79fb08383c |
parent 710229 | 14ab0e063a87ae6f6980b926bf6ed9df9b288916 |
child 743551 | b4e968a58f84ba23afa4b1bef48969abb47d688d |
push id | 92788 |
push user | bmo:tihuang@mozilla.com |
push date | Fri, 08 Dec 2017 23:11:53 +0000 |
reviewers | leplatrem, jfkthame, arthuredelstein |
bugs | 1336208 |
milestone | 59.0a1 |
new file mode 100644 index 0000000000000000000000000000000000000000..521f1cc90e9e925ce087231d7e9b9049ba254b23 GIT binary patch literal 23792 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 YgZmlbm4$Ze)z>#IG^9(Lt#97^AK3pWc>n+a
new file mode 100644 index 0000000000000000000000000000000000000000..446e63168aadad89ff824a309d7b04f8de59162b GIT binary patch literal 19155 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
--- a/browser/components/resistfingerprinting/test/browser/browser.ini +++ b/browser/components/resistfingerprinting/test/browser/browser.ini @@ -1,19 +1,22 @@ [DEFAULT] tags = resistfingerprinting support-files = file_dummy.html file_navigator.html file_navigatorWorker.js file_workerNetInfo.js file_workerPerformance.js + NotoSansKhmer-Regular.ttf.gz + NotoSansLao-Regular.ttf.gz head.js [browser_block_mozAddonManager.js] +[browser_fonts_downloading.js] [browser_navigator.js] [browser_netInfo.js] [browser_performanceAPI.js] [browser_roundedWindow_dialogWindow.js] [browser_roundedWindow_newWindow.js] [browser_roundedWindow_open_max_inner.js] [browser_roundedWindow_open_max_outer.js] [browser_roundedWindow_open_mid_inner.js]
new file mode 100644 --- /dev/null +++ b/browser/components/resistfingerprinting/test/browser/browser_fonts_downloading.js @@ -0,0 +1,458 @@ +/** + * Bug 1336208 - A test case to verify that fonts downloading for fingerprinting + * resistance is working correctly. + */ + +const { classes: Cc, Constructor: CC, interfaces: Ci, utils: Cu } = Components; + +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); +Cu.import("resource://gre/modules/Services.jsm"); + +XPCOMUtils.defineLazyModuleGetter(this, "HttpServer", + "resource://testing-common/httpd.js"); +XPCOMUtils.defineLazyModuleGetter(this, "gFontsClient", + "resource://services-common/blocklist-clients.js", "FontsRFPClient"); +XPCOMUtils.defineLazyModuleGetter(this, "OS", + "resource://gre/modules/osfile.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, "FirefoxAdapter", + "resource://services-common/kinto-storage-adapter.js"); +XPCOMUtils.defineLazyModuleGetter(this, "FontsDownloader", + "resource:///modules/FontsDownloader.jsm"); + +const TEST_BASE_PATH = "http://www.example.com/browser/browser/components/resistfingerprinting/test/browser/"; +const RFP_FONT_DIR = "rfp-fonts"; +const RFP_FONT_STAGING_DIR = "rfp-fonts-staging"; + +let server; + +let gFontData = []; + +/** + * A helper function for load testing fonts from the local files and build the meta data + * for describing it for Kinto server. + * + * @param {Sting} aName The font's file name. + * @param {Sting} aOriginHash The hash value for the original font file. + * @param {Sting} aOriginSize The file size of the original font file. + * @param {Sting} aAttachmentName The the name of the font which should be displayed + * at the attachment of Kinto server. + */ +function getFontFile(aName, aOriginHash, aOriginSize, aAttachmentName) { + return new Promise(resolve => { + NetUtil.asyncFetch({ + uri: TEST_BASE_PATH + aName + ".gz", + loadUsingSystemPrincipal: true, + contentPolicyType: Ci.nsIContentPolicy.TYPE_OTHER + }, function(inputStream, status) { + let size = inputStream.available(); + let data = NetUtil.readInputStreamToString(inputStream, size); + resolve({ + data, + filename: aName, + hash: aOriginHash, + size: aOriginSize, + gzippedSize: size, + attachment_name: aAttachmentName + }); + }); + }); +} + +/** + * A clean up function for removing downloaded fonts. + */ +async function clearFontFiles() { + let greDir = Services.dirsvc.get("GreD", Ci.nsIFile); + + for (let font of gFontData) { + let fontFilePath = OS.Path.join(greDir.path, RFP_FONT_DIR, font.filename); + await OS.File.remove(fontFilePath); + } +} + +/** + * A helper function for waiting a specific observer topic after calling certain + * function. + * + * @param {*} aTopic The observer topic to wait. + * @param {*} aFunc The function should be called. + */ +async function waitObserverAfterFunction(aTopic, aFunc) { + return new Promise(resolve => { + function observer() { + Services.obs.removeObserver(observer, aTopic); + ok(true, `Got ${aTopic}.`); + resolve(); + } + + Services.obs.addObserver(observer, aTopic); + aFunc(); + }); +} + +add_task(async function setup() { + // Create a fake server to act as a Kinto server. + server = new HttpServer(); + server.start(-1); + + // Load font data. + gFontData.push( + await getFontFile("NotoSansKhmer-Regular.ttf", + "8bbc4388f9af2bfbe3635b2e79f0d76269d8e892f7884d8055c593203494ac25", + 47584, + "fbf1ebf4-6761-404e-ac64-b55bc2b07e65.ttf") + ); + + gFontData.push( + await getFontFile("NotoSansLao-Regular.ttf", + "e870d1c4c7f74e7bf315240479150a7f43bb28f60af9740e02c9af3ce494dcc8", + 40148, + "af5c9984-1498-49ed-9244-c2479a4343b1.ttf") + ); + + // Point the blocklist clients to use this local HTTP server. + await SpecialPowers.pushPrefEnv({"set": + [["services.settings.server", `http://localhost:${server.identity.primaryPort}/v1`]] + }); + + // Point the font downloader to use this local HTTP server. + await SpecialPowers.pushPrefEnv({"set": + [["privacy.resistFingerprinting.fonts.server", + `http://localhost:${server.identity.primaryPort}/`]] + }); + + // Ensure that signature verification is disabled to prevent interference + // with tests. + await SpecialPowers.pushPrefEnv({"set": + [["services.blocklist.signing.enforced", false]] + }); + + // Setup server fake responses. + function handleResponse(request, response) { + try { + const sample = getSampleResponse(request, server.identity.primaryPort); + if (!sample) { + ok(false, `unexpected ${request.method} request for ${request.path}?${request.queryString}`); + } + + response.setStatusLine(null, sample.status.status, + sample.status.statusText); + // send the headers + for (let headerLine of sample.sampleHeaders) { + let headerElements = headerLine.split(":"); + response.setHeader(headerElements[0], headerElements[1].trimLeft()); + } + response.setHeader("Date", (new Date()).toUTCString()); + + response.write(sample.responseBody); + } catch (e) { + ok(false, e); + } + } + + const configPath = "/v1/"; + const fontRecordsPath = "/v1/buckets/fingerprinting-defenses/collections/fonts/records"; + const attachmentPath = "/attachments/"; + + server.registerPathHandler(configPath, handleResponse); + server.registerPathHandler(fontRecordsPath, handleResponse); + server.registerPathHandler(attachmentPath + gFontData[0].attachment_name, handleResponse); + server.registerPathHandler(attachmentPath + gFontData[1].attachment_name, handleResponse); + server.registerPathHandler(attachmentPath + "must_fail.ttf", (request, response) => { + response.setStatusLine(null, 404, "Not Found"); + ok(false, `This should not be accessed.`); + }) +}); + +/** + * Get a response for a given request from sample data + */ +function getSampleResponse(req, port) { + const responses = { + "OPTIONS": { + "sampleHeaders": [ + "Access-Control-Allow-Headers: Content-Length,Expires,Backoff,Retry-After,Last-Modified,Total-Records,ETag,Pragma,Cache-Control,authorization,content-type,if-none-match,Alert,Next-Page", + "Access-Control-Allow-Methods: GET,HEAD,OPTIONS,POST,DELETE,OPTIONS", + "Access-Control-Allow-Origin: *", + "Content-Type: application/json; charset=UTF-8", + "Server: waitress" + ], + "status": {status: 200, statusText: "OK"}, + "responseBody": "null" + }, + "GET:/v1/?": { + "sampleHeaders": [ + "Access-Control-Allow-Origin: *", + "Access-Control-Expose-Headers: Retry-After, Content-Length, Alert, Backoff", + "Content-Type: application/json; charset=UTF-8", + "Server: waitress" + ], + "status": {status: 200, statusText: "OK"}, + "responseBody": JSON.stringify({ + "settings": { + "batch_max_requests": 25 + }, + "url": `http://localhost:${port}/v1/`, + "documentation": "https://kinto.readthedocs.org/", + "version": "1.5.1", + "commit": "cbc6f58", + "hello": "kinto" + }) + }, + "GET:/v1/buckets/fingerprinting-defenses/collections/fonts/records?_sort=-last_modified": { + "sampleHeaders": [ + "Access-Control-Allow-Origin: *", + "Access-Control-Expose-Headers: Retry-After, Content-Length, Alert, Backoff", + "Content-Type: application/json; charset=UTF-8", + "Server: waitress", + "Etag: \"3000\"" + ], + "status": {status: 200, statusText: "OK"}, + "responseBody": JSON.stringify({"data": [{ + "attachment": { + "hash": gFontData[0].hash, + "mimetype": "application/x-font-ttf", + "location": `attachments/${gFontData[0].attachment_name}`, + "size": gFontData[0].size, + "filename": `${gFontData[0].filename}` + }, + "last_modified": 3000, + "id": "88cb8e59-2918-21ee-3f46-61ec2bc8d636", + "platforms": [ + "macosx", + "win", + "linux" + ] + }]}) + }, + "GET:/v1/buckets/fingerprinting-defenses/collections/fonts/records?_sort=-last_modified&_since=3000": { + "sampleHeaders": [ + "Access-Control-Allow-Origin: *", + "Access-Control-Expose-Headers: Retry-After, Content-Length, Alert, Backoff", + "Content-Type: application/json; charset=UTF-8", + "Server: waitress", + "Etag: \"4000\"" + ], + "status": {status: 200, statusText: "OK"}, + "responseBody": JSON.stringify({"data": [{ + "attachment": { + "hash": gFontData[0].hash, + "mimetype": "application/x-font-ttf", + "location": `attachments/${gFontData[0].attachment_name}`, + "size": gFontData[0].size, + "filename": `${gFontData[0].filename}` + }, + "last_modified": 4000, + "id": "344be8b1-b76f-48f6-83f6-3cd625350ce2", + "platforms": [ + "macosx", + "win", + "linux" + ] + }, + { + "attachment": { + "hash": gFontData[1].hash, + "mimetype": "application/x-font-ttf", + "location": `attachments/${gFontData[1].attachment_name}`, + "size": gFontData[1].size, + "filename": `${gFontData[1].filename}` + }, + "last_modified": 4000, + "id": "981b9dfa-11e0-94b2-a6e3-e245f832f8b7", + "platforms": [ + "macosx", + "win", + "linux" + ] + }]}) + }, + "GET:/v1/buckets/fingerprinting-defenses/collections/fonts/records?_sort=-last_modified&_since=4000": { + "sampleHeaders": [ + "Access-Control-Allow-Origin: *", + "Access-Control-Expose-Headers: Retry-After, Content-Length, Alert, Backoff", + "Content-Type: application/json; charset=UTF-8", + "Server: waitress", + "Etag: \"4000\"" + ], + "status": {status: 200, statusText: "OK"}, + "responseBody": JSON.stringify({"data": [{ + "attachment": { + "hash": gFontData[0].hash, + "mimetype": "application/x-font-ttf", + "location": `attachments/${gFontData[0].attachment_name}`, + "size": gFontData[0].size, + "filename": `${gFontData[0].filename}` + }, + "last_modified": 4000, + "id": "344be8b1-b76f-48f6-83f6-3cd625350ce2", + "platforms": [ + "macosx", + "win", + "linux" + ] + }, + { + "attachment": { + "hash": gFontData[1].hash, + "mimetype": "application/x-font-ttf", + "location": `attachments/${gFontData[1].attachment_name}`, + "size": gFontData[1].size, + "filename": `${gFontData[1].filename}` + }, + "last_modified": 4000, + "id": "981b9dfa-11e0-94b2-a6e3-e245f832f8b7", + "platforms": [ + "macosx", + "win", + "linux" + ] + }, + { + "attachment": { + "hash": "fakeHash", + "mimetype": "application/x-font-ttf", + "location": "attachments/must_fail.ttf", + "size": 0, + "filename": "fakeFont.ttf" + }, + "last_modified": Date.now() - 3000, + "id": "47ed60f5-b395-4384-8da8-d55c2eb2d6a9", + "platforms": [ + "macosx", + "win", + "linux" + ] + }]}) + }, + "GET:/attachments/fbf1ebf4-6761-404e-ac64-b55bc2b07e65.ttf?": { + "sampleHeaders": [ + "Access-Control-Allow-Origin: *", + "Content-Type: application/x-font-ttf", + "Content-Encoding: gzip", + "Server: waitress", + `Content-Length: ${gFontData[0].gzippedSize}` + ], + "status": {status: 200, statusText: "OK"}, + "responseBody": gFontData[0].data + }, + "GET:/attachments/af5c9984-1498-49ed-9244-c2479a4343b1.ttf?": { + "sampleHeaders": [ + "Access-Control-Allow-Origin: *", + "Content-Type: application/x-font-ttf", + "Content-Encoding: gzip", + "Server: waitress", + `Content-Length: ${gFontData[1].gzippedSize}` + ], + "status": {status: 200, statusText: "OK"}, + "responseBody": gFontData[1].data + } + }; + return responses[`${req.method}:${req.path}?${req.queryString}`] || + responses[req.method]; + +} + +registerCleanupFunction(() => { + server.stop(() => { + server = null; + }); +}); + +add_task(async function test_download_fonts() { + // First, fetch records from the server and wait until the + // 'resist-fingerprinting:download-fonts' notified. This topic indicates + // the font list has been loaded. + await waitObserverAfterFunction("resist-fingerprinting:download-fonts", () => { + gFontsClient.maybeSync(2000, Date.now(), {loadDump: false}); + }); + + let fontListPath = `${gFontsClient.identifier}.json`; + + let fontListFullPath = OS.Path.join(OS.Constants.Path.profileDir, + ...fontListPath.split("/")); + ok(await OS.File.exists(fontListFullPath), "Font list has been loaded successfully."); + + await FontsDownloader.maybeDownloadFonts(); + + // Check that fonts have been put at the correct place. + let fontFilePath = OS.Path.join(OS.Constants.Path.profileDir, + RFP_FONT_STAGING_DIR, + gFontData[0].filename); + ok(await OS.File.exists(fontFilePath), "The font has been put at the staging directory."); + + // Notify the observer to start moving fonts and wait until it finishes. + await waitObserverAfterFunction("resist-fingerprinting:move-fonts-finish", () => { + Services.obs.notifyObservers(null, "resist-fingerprinting:move-fonts"); + }); + + let greDir = Services.dirsvc.get("GreD", Ci.nsIFile); + let localFontPath = OS.Path.join(greDir.path, RFP_FONT_DIR, + gFontData[0].filename); + + ok(await OS.File.exists(localFontPath), "The font has been put at the font directory."); +}); + +add_task(async function test_download_font_when_font_list_get_updated() { + // Fetch the updated font list. + await waitObserverAfterFunction("resist-fingerprinting:download-fonts", () => { + gFontsClient.maybeSync(3001, Date.now(), {loadDump: false}); + }); + + // Set the pref "privacy.resistFingerprinting.fonts.last_update_time" to a proper + // time. + await SpecialPowers.pushPrefEnv({"set": + [["privacy.resistFingerprinting.fonts.last_update_time", 3]] + }); + + await FontsDownloader.maybeDownloadFonts(); + + // Check that the first downloaded font should not be downloaded again. + let stagingFontPath = OS.Path.join(OS.Constants.Path.profileDir, + RFP_FONT_STAGING_DIR, gFontData[0].filename); + ok(!await OS.File.exists(stagingFontPath), "The first downloaded font should not be downloaded again."); + + // Check that the font has been put at the staging directory. + stagingFontPath = OS.Path.join(OS.Constants.Path.profileDir, + RFP_FONT_STAGING_DIR, gFontData[1].filename); + ok(await OS.File.exists(stagingFontPath), "The second downloaded font has been put at the staging directory."); + + // Notify the observer to start moving fonts and wait until it finishes. + await waitObserverAfterFunction("resist-fingerprinting:move-fonts-finish", () => { + Services.obs.notifyObservers(null, "resist-fingerprinting:move-fonts"); + }) + + let greDir = Services.dirsvc.get("GreD", Ci.nsIFile); + + // Check that fonts have been put at the correct place. + const localFontFilePaths = [ + OS.Path.join(greDir.path, RFP_FONT_DIR, gFontData[0].filename), + OS.Path.join(greDir.path, RFP_FONT_DIR, gFontData[1].filename), + ]; + ok(await OS.File.exists(localFontFilePaths[0]), "The first font has been put at the font directory."); + ok(await OS.File.exists(localFontFilePaths[1]), "The second font has been put at the font directory."); +}); + +add_task(async function test_last_update_time() { + // Fetch the updated font list which has the attachment should not be downloaded. + // This attachment's last modified time would be 3 seconds before, which means + // the FontsDownloader should not download it since it's last update time is now. + await waitObserverAfterFunction("resist-fingerprinting:download-fonts", () => { + gFontsClient.maybeSync(4001, Date.now(), {loadDump: false}); + }); + + // Should download nothing here. + await FontsDownloader.maybeDownloadFonts(); +}); + +add_task(async function test_flip_RFP_pref() { + // Flip the pref 'privacy.resistFingerprinting' to see whether the observer + // 'resist-fingerprinting:start-download-fonts' been notified. + await waitObserverAfterFunction("resist-fingerprinting:start-download-fonts", () => { + SpecialPowers.pushPrefEnv({"set": + [["privacy.resistFingerprinting", true]] + }); + }) +}); + +add_task(clearFontFiles);