mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 836483 - Track download referrers. r=paolo
This commit is contained in:
parent
f34ec3b8c6
commit
90fd51f4ba
@ -434,6 +434,12 @@ DownloadSource.prototype = {
|
||||
* resource.
|
||||
*/
|
||||
isPrivate: false,
|
||||
|
||||
/**
|
||||
* The nsIURI for the referrer of the download source, or null if no referrer
|
||||
* should be sent or the download source is not HTTP.
|
||||
*/
|
||||
referrer: null,
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@ -607,6 +613,9 @@ DownloadCopySaver.prototype = {
|
||||
if (channel instanceof Ci.nsIPrivateBrowsingChannel) {
|
||||
channel.setPrivate(download.source.isPrivate);
|
||||
}
|
||||
if (channel instanceof Ci.nsIHttpChannel) {
|
||||
channel.referrer = download.source.referrer;
|
||||
}
|
||||
|
||||
channel.notificationCallbacks = {
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIInterfaceRequestor]),
|
||||
|
@ -79,7 +79,12 @@ this.Downloads = {
|
||||
|
||||
download.source = new DownloadSource();
|
||||
download.source.uri = aProperties.source.uri;
|
||||
download.source.isPrivate = aProperties.source.isPrivate;
|
||||
if ("isPrivate" in aProperties.source) {
|
||||
download.source.isPrivate = aProperties.source.isPrivate;
|
||||
}
|
||||
if ("referrer" in aProperties.source) {
|
||||
download.source.referrer = aProperties.source.referrer;
|
||||
}
|
||||
download.target = new DownloadTarget();
|
||||
download.target.file = aProperties.target.file;
|
||||
|
||||
|
@ -47,6 +47,7 @@ const HTTP_BASE = "http://localhost:" + HTTP_SERVER_PORT;
|
||||
const FAKE_SERVER_PORT = 4445;
|
||||
const FAKE_BASE = "http://localhost:" + FAKE_SERVER_PORT;
|
||||
|
||||
const TEST_REFERRER_URI = NetUtil.newURI(HTTP_BASE + "/referrer.html");
|
||||
const TEST_SOURCE_URI = NetUtil.newURI(HTTP_BASE + "/source.txt");
|
||||
const TEST_EMPTY_URI = NetUtil.newURI(HTTP_BASE + "/empty.txt");
|
||||
const TEST_FAKE_SOURCE_URI = NetUtil.newURI(FAKE_BASE + "/source.txt");
|
||||
|
@ -28,6 +28,7 @@ add_task(function test_download_construction()
|
||||
// Checks the generated DownloadSource and DownloadTarget properties.
|
||||
do_check_true(download.source.uri.equals(TEST_SOURCE_URI));
|
||||
do_check_eq(download.target.file, targetFile);
|
||||
do_check_true(download.source.referrer === null);
|
||||
|
||||
// Starts the download and waits for completion.
|
||||
yield download.start();
|
||||
@ -35,6 +36,56 @@ add_task(function test_download_construction()
|
||||
yield promiseVerifyContents(targetFile, TEST_DATA_SHORT);
|
||||
});
|
||||
|
||||
/**
|
||||
* Checks the referrer for downloads.
|
||||
*/
|
||||
add_task(function test_download_referrer()
|
||||
{
|
||||
let source_path = "/test_download_referrer.txt";
|
||||
let source_uri = NetUtil.newURI(HTTP_BASE + source_path);
|
||||
let target_uri = getTempFile(TEST_TARGET_FILE_NAME);
|
||||
|
||||
function cleanup() {
|
||||
gHttpServer.registerPathHandler(source_path, null);
|
||||
}
|
||||
|
||||
do_register_cleanup(cleanup);
|
||||
|
||||
gHttpServer.registerPathHandler(source_path, function (aRequest, aResponse) {
|
||||
aResponse.setHeader("Content-Type", "text/plain", false);
|
||||
|
||||
do_check_true(aRequest.hasHeader("Referer"));
|
||||
do_check_eq(aRequest.getHeader("Referer"), TEST_REFERRER_URI.spec);
|
||||
});
|
||||
let download = yield Downloads.createDownload({
|
||||
source: { uri: source_uri, referrer: TEST_REFERRER_URI },
|
||||
target: { file: target_uri },
|
||||
saver: { type: "copy" },
|
||||
});
|
||||
do_check_true(download.source.referrer.equals(TEST_REFERRER_URI));
|
||||
yield download.start();
|
||||
|
||||
download = yield Downloads.createDownload({
|
||||
source: { uri: source_uri, referrer: TEST_REFERRER_URI, isPrivate: true },
|
||||
target: { file: target_uri },
|
||||
saver: { type: "copy" },
|
||||
});
|
||||
do_check_true(download.source.referrer.equals(TEST_REFERRER_URI));
|
||||
yield download.start();
|
||||
|
||||
// Test the download still works for non-HTTP channel with referrer.
|
||||
source_uri = NetUtil.newURI("data:text/html,<html><body></body></html>");
|
||||
download = yield Downloads.createDownload({
|
||||
source: { uri: source_uri, referrer: TEST_REFERRER_URI },
|
||||
target: { file: target_uri },
|
||||
saver: { type: "copy" },
|
||||
});
|
||||
do_check_true(download.source.referrer.equals(TEST_REFERRER_URI));
|
||||
yield download.start();
|
||||
|
||||
cleanup();
|
||||
});
|
||||
|
||||
/**
|
||||
* Checks initial and final state and progress for a successful download.
|
||||
*/
|
||||
@ -750,3 +801,4 @@ add_task(function test_download_cancel_immediately_restart_and_check_startTime()
|
||||
yield download.start();
|
||||
do_check_true(download.startTime.getTime() > startTime.getTime());
|
||||
});
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user