Skip to content

Commit

Permalink
Referrer Policy: Test image loads inside srcdoc frames.
Browse files Browse the repository at this point in the history
This patch teaches the 'img-tag'-style tests to load an image both
in the top-level document, and inside a 'srcdoc' frame. The referrer
should be the same in both places.

Addresses #2851.
  • Loading branch information
mikewest committed Sep 9, 2016
1 parent b2c070b commit 7aefca1
Showing 1 changed file with 32 additions and 17 deletions.
49 changes: 32 additions & 17 deletions referrer-policy/generic/common.js
Expand Up @@ -33,20 +33,30 @@ function appendIframeToBody(url, attributes) {
return iframe;
}

function loadImage(src, callback, attributes) {
var image = new Image();
function loadImageInWindow(src, callback, attributes, w) {
var image = new w.Image();
image.crossOrigin = "Anonymous";
image.onload = function() {
callback(image);
}
image.src = src;

// Extend element with attributes. (E.g. "referrerPolicy" or "rel")
if (attributes) {
for (var attr in attributes) {
image[attr] = attributes[attr];
}
}
document.body.appendChild(image)

image.src = src;
w.document.body.appendChild(image)
}

function extractImageData(img) {
var canvas = document.createElement("canvas");
var context = canvas.getContext('2d');
context.drawImage(img, 0, 0);
var imgData = context.getImageData(0, 0, img.clientWidth, img.clientHeight);
return imgData.data;
}

function decodeImageData(rgba) {
Expand All @@ -73,16 +83,6 @@ function decodeImageData(rgba) {
return JSON.parse(string_data);
}

function decodeImage(url, callback, referrer_policy) {
loadImage(url, function(img) {
var canvas = document.createElement("canvas");
var context = canvas.getContext('2d');
context.drawImage(img, 0, 0);
var imgData = context.getImageData(0, 0, img.clientWidth, img.clientHeight);
callback(decodeImageData(imgData.data))
}, referrer_policy);
}

function normalizePort(targetPort) {
var defaultPorts = [80, 443];
var isDefaultPortForProtocol = (defaultPorts.indexOf(targetPort) >= 0);
Expand Down Expand Up @@ -112,9 +112,24 @@ function queryIframe(url, callback, referrer_policy) {
}

function queryImage(url, callback, referrer_policy) {
decodeImage(url, function(server_data) {
callback(wrapResult(url, server_data), url);
}, referrer_policy)
// For images, we'll test both images in a top-level document as well as
// images in a `srcdoc` frame to ensure that the latter has the same referrer
// as the former.
var i = document.createElement('iframe');
i.srcdoc = "Hello, world.";
i.onload = function () {
loadImageInWindow(url, function (img) {
var srcdocData = decodeImageData(extractImageData(img));
console.log(srcdocData);
loadImageInWindow(url, function (img) {
var topLevelData = decodeImageData(extractImageData(img));
console.log(topLevelData);
assert_equals(srcdocData.referrer, topLevelData.referrer, "Referrer inside 'srcdoc' should be the same as embedder's referrer.");
callback(wrapResult(url, topLevelData), url);
}, referrer_policy, window);
}, referrer_policy, i.contentWindow);
};
document.body.appendChild(i);
}

function queryXhr(url, callback) {
Expand Down

0 comments on commit 7aefca1

Please sign in to comment.