From 1e551c630dace89328edb6edf4ea0c093b948a61 Mon Sep 17 00:00:00 2001 From: Franziskus Kiefer Date: Fri, 5 Jun 2015 15:25:24 -0700 Subject: [PATCH] Bug 1166910 - Add tests for referrer attribute for img tag. r=ckerschb, r=hsivonen --- dom/base/test/img_referrer_testserver.sjs | 212 ++++++++++++++++++++++ dom/base/test/mochitest.ini | 2 + dom/base/test/test_img_referrer.html | 171 +++++++++++++++++ 3 files changed, 385 insertions(+) create mode 100644 dom/base/test/img_referrer_testserver.sjs create mode 100644 dom/base/test/test_img_referrer.html diff --git a/dom/base/test/img_referrer_testserver.sjs b/dom/base/test/img_referrer_testserver.sjs new file mode 100644 index 00000000000..25b6636bd55 --- /dev/null +++ b/dom/base/test/img_referrer_testserver.sjs @@ -0,0 +1,212 @@ +var BASE_URL = 'example.com/tests/dom/base/test/img_referrer_testserver.sjs'; + +function createTestUrl(aPolicy, aAction, aName) { + return 'http://' + BASE_URL + '?' + + 'action=' + aAction + '&' + + 'policy=' + aPolicy + '&' + + 'name=' + aName; +} + +function createTestPage(aHead, aImgPolicy, aName) { + var _createTestUrl = createTestUrl.bind(null, aImgPolicy, 'test', aName); + + return '\n\ + '+ + aHead + + '\n\ + \n\ + \n\ + \n\ + '; +} + +// Creates the following test cases for the specified referrer +// policy combination: +// with referrer +function createTest(aPolicy, aImgPolicy, aName) { + var headString = ''; + if (aPolicy) { + headString += ''; + } + + headString += ''; + + return createTestPage(headString, aImgPolicy, aName); +} + +// testing regular load img with referrer policy +// speculative parser should not kick in here +function createTest2(aImgPolicy, name) { + return createTestPage('', aImgPolicy, name); +} + +function createTest3(aImgPolicy1, aImgPolicy2, aImgPolicy3, aName) { + return '\n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + '; +} + +function createTestPage2(aHead, aPolicy, aName) { + return '\n\ + '+ + aHead + + '\n\ + \n\ + \n\ + \n\ + '; +} + +function createTest4(aPolicy, aName) { + var headString = ''; + headString += ''; + headString += ''; + + return createTestPage2(headString, aPolicy, aName); +} + +function createTest5(aPolicy, aName) { + var headString = ''; + headString += ''; + + return createTestPage2(headString, aPolicy, aName); +} + +function handleRequest(request, response) { + var sharedKey = 'img_referrer_testserver.sjs'; + var params = request.queryString.split('&'); + var action = params[0].split('=')[1]; + + response.setHeader('Cache-Control', 'no-cache', false); + response.setHeader('Content-Type', 'text/html; charset=utf-8', false); + + if (action === 'resetState') { + var state = getSharedState(sharedKey); + state = {}; + setSharedState(sharedKey, JSON.stringify(state)); + response.write(""); + return; + } + if (action === 'test') { + // ?action=test&policy=origin&name=name + var policy = params[1].split('=')[1]; + var name = params[2].split('=')[1]; + var result = getSharedState(sharedKey); + + if (result === '') { + result = {}; + } else { + result = JSON.parse(result); + } + + if (!result["tests"]) { + result["tests"] = {}; + } + + var referrerLevel = "none"; + var test = {} + if (request.hasHeader('Referer')) { + let referrer = request.getHeader('Referer'); + if (referrer.indexOf("img_referrer_testserver") > 0) { + referrerLevel = "full"; + } else if (referrer == "http://mochi.test:8888") { + referrerLevel = "origin"; + } + test.referrer = request.getHeader('Referer'); + } else { + test.referrer = ''; + } + test.policy = referrerLevel; + test.expected = policy; + + result["tests"][name] = test; + + setSharedState(sharedKey, JSON.stringify(result)); + return; + } + if (action === 'get-test-results') { + // ?action=get-result + response.write(getSharedState(sharedKey)); + return; + } + if (action === 'generate-img-policy-test') { + // ?action=generate-img-policy-test&imgPolicy=b64-encoded-string&name=name&policy=b64-encoded-string + var imgPolicy = unescape(params[1].split('=')[1]); + var name = unescape(params[2].split('=')[1]); + var metaPolicy = ''; + if (params[3]) { + metaPolicy = params[3].split('=')[1]; + } + + response.write(createTest(metaPolicy, imgPolicy, name)); + return; + } + if (action === 'generate-img-policy-test2') { + // ?action=generate-img-policy-test2&imgPolicy=b64-encoded-string&name=name + var imgPolicy = unescape(params[1].split('=')[1]); + var name = unescape(params[2].split('=')[1]); + + response.write(createTest2(imgPolicy, name)); + return; + } + if (action === 'generate-img-policy-test3') { + // ?action=generate-img-policy-test3&imgPolicy1=b64-encoded-string&imgPolicy2=b64-encoded-string&imgPolicy3=b64-encoded-string&name=name + var imgPolicy1 = unescape(params[1].split('=')[1]); + var imgPolicy2 = unescape(params[2].split('=')[1]); + var imgPolicy3 = unescape(params[3].split('=')[1]); + var name = unescape(params[4].split('=')[1]); + + response.write(createTest3(imgPolicy1, imgPolicy2, imgPolicy3, name)); + return; + } + if (action === 'generate-img-policy-test4') { + // ?action=generate-img-policy-test4&imgPolicy=b64-encoded-string&name=name + var policy = unescape(params[1].split('=')[1]); + var name = unescape(params[2].split('=')[1]); + + response.write(createTest4(policy, name)); + return; + } + if (action === 'generate-img-policy-test5') { + // ?action=generate-img-policy-test5&policy=b64-encoded-string&name=name + var policy = unescape(params[1].split('=')[1]); + var name = unescape(params[2].split('=')[1]); + + response.write(createTest5(policy, name)); + return; + } + + response.write("I don't know action "+action); + return; +} diff --git a/dom/base/test/mochitest.ini b/dom/base/test/mochitest.ini index ce670c17f05..9fbd12e507f 100644 --- a/dom/base/test/mochitest.ini +++ b/dom/base/test/mochitest.ini @@ -236,6 +236,7 @@ support-files = file_nonascii_blob_url.html referrerHelper.js test_performance_user_timing.js + img_referrer_testserver.sjs [test_anonymousContent_api.html] [test_anonymousContent_append_after_reflow.html] @@ -661,6 +662,7 @@ skip-if = buildapp == 'mulet' || buildapp == 'b2g' || toolkit == 'android' support-files = referrerHelper.js [test_bug1165501.html] support-files = referrerHelper.js +[test_img_referrer.html] [test_caretPositionFromPoint.html] [test_classList.html] # This test fails on the Mac for some reason diff --git a/dom/base/test/test_img_referrer.html b/dom/base/test/test_img_referrer.html new file mode 100644 index 00000000000..16b88b07fdb --- /dev/null +++ b/dom/base/test/test_img_referrer.html @@ -0,0 +1,171 @@ + + + + + Test img policy attribute for Bug 1166910 + + + + + + + + + + + + + +