mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-07 19:59:18 +02:00
The goal of this testcase is to provide an easier way to add callsites to test if it is correctly classified. This is a first step, more callsites should be added to the testcase(See Bug 1532691) Flow of the test case: 1. setup the server(trackerFrame.sjs) with the expceted number of request it should receive 2. load the test frame(trackerFrame.html) with cookie restriction off, to ensure all the tracking requests contain cookies 3. server responses a list of tracker's request with cookie after reciving all the requests 4. the list should contain all the trackers in the test frame. 5. enable cookie restriction and load the test frame again. 6. server responses a list of tracker's request without cookie after reciving all the requests 7. the list should contain all the trackers in the test frame. Differential Revision: https://phabricator.services.mozilla.com/D22116 --HG-- extra : moz-landing-system : lando
76 lines
2.7 KiB
JavaScript
76 lines
2.7 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* 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/. */
|
|
|
|
Components.utils.importGlobalProperties(["URLSearchParams"]);
|
|
|
|
const stateTotalRequests = "total-request";
|
|
const stateCallback = "callback-response";
|
|
const stateTrackersWithCookie = "trackers-with-cookie";
|
|
const stateTrackersWithoutCookie = "trackers-without-cookie";
|
|
const stateReceivedTrackers = "received-trackers";
|
|
const stateResponseType = "response-tracker-with-cookie";
|
|
|
|
function reset()
|
|
{
|
|
setState(stateCallback, "");
|
|
setState(stateTrackersWithCookie, "");
|
|
setState(stateTrackersWithoutCookie, "");
|
|
setState(stateReceivedTrackers, "");
|
|
setState(stateResponseType, "");
|
|
}
|
|
|
|
function handleRequest(aRequest, aResponse)
|
|
{
|
|
let params = new URLSearchParams(aRequest.queryString);
|
|
|
|
// init the server and tell the server the total number requests to process
|
|
// server set the cookie
|
|
if (params.has("init")) {
|
|
setState(stateTotalRequests, params.get("init"));
|
|
|
|
aResponse.setStatusLine(aRequest.httpVersion, 200);
|
|
aResponse.setHeader("Content-Type", "text/plain", false);
|
|
|
|
// Prepare the cookie
|
|
aResponse.setHeader("Set-Cookie", "cookie=1234");
|
|
aResponse.setHeader("Access-Control-Allow-Origin", aRequest.getHeader("Origin"), false);
|
|
aResponse.setHeader("Access-Control-Allow-Credentials","true", false);
|
|
aResponse.write("begin-test");
|
|
// register the callback response, the response will be fired after receiving
|
|
// all the request
|
|
} else if (params.has("callback")) {
|
|
aResponse.processAsync();
|
|
aResponse.setHeader("Content-Type", "text/plain", false);
|
|
aResponse.setHeader("Access-Control-Allow-Origin", aRequest.getHeader("Origin"), false);
|
|
aResponse.setHeader("Access-Control-Allow-Credentials","true", false);
|
|
|
|
setState(stateResponseType, params.get("callback"));
|
|
setObjectState(stateCallback, aResponse);
|
|
} else {
|
|
let count = parseInt(getState(stateReceivedTrackers) || 0) + 1;
|
|
setState(stateReceivedTrackers, count.toString());
|
|
|
|
let state = "";
|
|
if (aRequest.hasHeader("Cookie")) {
|
|
state = stateTrackersWithCookie;
|
|
} else {
|
|
state = stateTrackersWithoutCookie;
|
|
}
|
|
|
|
let ids = params.get("id").concat(",", getState(state));
|
|
setState(state, ids);
|
|
|
|
if (getState(stateTotalRequests) == getState(stateReceivedTrackers)) {
|
|
getObjectState(stateCallback, r => {
|
|
if (getState(stateResponseType) == "with-cookie") {
|
|
r.write(getState(stateTrackersWithCookie));
|
|
} else {
|
|
r.write(getState(stateTrackersWithoutCookie));
|
|
}
|
|
r.finish();
|
|
reset();
|
|
});
|
|
}
|
|
}
|
|
}
|