summaryrefslogtreecommitdiffstats
path: root/remote/cdp/test/browser/network/browser_requestWillBeSent.js
diff options
context:
space:
mode:
Diffstat (limited to 'remote/cdp/test/browser/network/browser_requestWillBeSent.js')
-rw-r--r--remote/cdp/test/browser/network/browser_requestWillBeSent.js224
1 files changed, 224 insertions, 0 deletions
diff --git a/remote/cdp/test/browser/network/browser_requestWillBeSent.js b/remote/cdp/test/browser/network/browser_requestWillBeSent.js
new file mode 100644
index 0000000000..9a4745952c
--- /dev/null
+++ b/remote/cdp/test/browser/network/browser_requestWillBeSent.js
@@ -0,0 +1,224 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const BASE_PATH = "https://example.com/browser/remote/cdp/test/browser/network";
+const FRAMESET_URL = `${BASE_PATH}/doc_frameset.html`;
+const FRAMESET_URL_JS = `${BASE_PATH}/file_framesetEvents.js`;
+const PAGE_EMPTY_URL = `${BASE_PATH}/doc_empty.html`;
+const PAGE_URL = `${BASE_PATH}/doc_networkEvents.html`;
+const PAGE_EMPTY_HASH = `#`;
+const PAGE_HASH = `#foo`;
+const PAGE_URL_WITH_HASH = `${PAGE_URL}${PAGE_HASH}`;
+const PAGE_URL_WITH_EMPTY_HASH = `${PAGE_URL}${PAGE_EMPTY_HASH}`;
+const PAGE_URL_JS = `${BASE_PATH}/file_networkEvents.js`;
+
+add_task(async function noEventsWhenNetworkDomainDisabled({ client }) {
+ const history = configureHistory(client, 0);
+ await loadURL(PAGE_URL);
+
+ const events = await history.record();
+ is(events.length, 0, "Expected no Network.responseReceived events");
+});
+
+add_task(async function noEventsAfterNetworkDomainDisabled({ client }) {
+ const { Network } = client;
+
+ const history = configureHistory(client, 0);
+ await Network.enable();
+ await Network.disable();
+ await loadURL(PAGE_URL);
+
+ const events = await history.record();
+ is(events.length, 0, "Expected no Network.responseReceived events");
+});
+
+add_task(async function documentNavigationWithResource({ client }) {
+ const { Page, Network } = client;
+
+ await Network.enable();
+ await Page.enable();
+
+ const history = configureHistory(client, 4);
+
+ const frameAttached = Page.frameAttached();
+ const { frameId: frameIdNav } = await Page.navigate({ url: FRAMESET_URL });
+ const { frameId: frameIdSubFrame } = await frameAttached;
+ ok(frameIdNav, "Page.navigate returned a frameId");
+
+ info("Wait for Network events");
+ const events = await history.record();
+ is(events.length, 4, "Expected number of Network.requestWillBeSent events");
+
+ // Check top-level document request
+ const docRequest = events[0].payload;
+ is(docRequest.type, "Document", "Document request has the expected type");
+ is(docRequest.documentURL, FRAMESET_URL, "documentURL matches requested url");
+ is(docRequest.frameId, frameIdNav, "Got the expected frame id");
+ is(docRequest.request.url, FRAMESET_URL, "Got the Document request");
+ is(docRequest.request.urlFragment, undefined, "Has no URL fragment set");
+ is(docRequest.request.method, "GET", "Has the expected request method");
+ is(
+ docRequest.requestId,
+ docRequest.loaderId,
+ "The request id is equal to the loader id"
+ );
+ is(
+ docRequest.request.headers.host,
+ "example.com",
+ "Document request has headers"
+ );
+
+ // Check top-level script request
+ const scriptRequest = events[1].payload;
+ is(scriptRequest.type, "Script", "Script request has the expected type");
+ is(
+ scriptRequest.documentURL,
+ FRAMESET_URL,
+ "documentURL is trigger document for the script request"
+ );
+ is(scriptRequest.frameId, frameIdNav, "Got the expected frame id");
+ is(scriptRequest.request.url, FRAMESET_URL_JS, "Got the Script request");
+ is(scriptRequest.request.method, "GET", "Has the expected request method");
+ is(
+ scriptRequest.request.headers.host,
+ "example.com",
+ "Script request has headers"
+ );
+ todo(
+ scriptRequest.loaderId === docRequest.loaderId,
+ "The same loaderId is used for dependent requests (Bug 1637838)"
+ );
+ assertEventOrder(events[0], events[1]);
+
+ // Check subdocument request
+ const subdocRequest = events[2].payload;
+ is(
+ subdocRequest.type,
+ "Subdocument",
+ "Subdocument request has the expected type"
+ );
+ is(subdocRequest.documentURL, FRAMESET_URL, "documenURL matches request url");
+ is(subdocRequest.frameId, frameIdSubFrame, "Got the expected frame id");
+ is(
+ subdocRequest.requestId,
+ subdocRequest.loaderId,
+ "The request id is equal to the loader id"
+ );
+ is(subdocRequest.request.url, PAGE_URL, "Got the Subdocument request");
+ is(subdocRequest.request.method, "GET", "Has the expected request method");
+ is(
+ subdocRequest.request.headers.host,
+ "example.com",
+ "Subdocument request has headers"
+ );
+ assertEventOrder(events[1], events[2]);
+
+ // Check script request (frame)
+ const subscriptRequest = events[3].payload;
+ is(subscriptRequest.type, "Script", "Script request has the expected type");
+ is(
+ subscriptRequest.documentURL,
+ PAGE_URL,
+ "documentURL is trigger document for the script request"
+ );
+ is(subscriptRequest.frameId, frameIdSubFrame, "Got the expected frame id");
+ todo(
+ subscriptRequest.loaderId === docRequest.loaderId,
+ "The same loaderId is used for dependent requests (Bug 1637838)"
+ );
+ is(subscriptRequest.request.url, PAGE_URL_JS, "Got the Script request");
+ is(
+ subscriptRequest.request.method,
+ "GET",
+ "Script request has the expected method"
+ );
+ is(
+ subscriptRequest.request.headers.host,
+ "example.com",
+ "Script request has headers"
+ );
+ assertEventOrder(events[2], events[3]);
+});
+
+add_task(async function documentNavigationToURLWithHash({ client }) {
+ const { Page, Network } = client;
+
+ await loadURL(PAGE_EMPTY_URL);
+
+ await Network.enable();
+ await Page.enable();
+
+ const history = configureHistory(client, 4);
+
+ const frameNavigated = Page.frameNavigated();
+ const { frameId: frameIdNav } = await Page.navigate({
+ url: PAGE_URL_WITH_HASH,
+ });
+ await frameNavigated;
+ ok(frameIdNav, "Page.navigate returned a frameId");
+
+ info("Wait for Network events");
+ const events = await history.record();
+ is(events.length, 2, "Expected number of Network.requestWillBeSent events");
+
+ // Check top-level document request only for fragment usage
+ const docRequest = events[0].payload;
+ is(docRequest.documentURL, PAGE_URL, "documentURL matches requested URL");
+ is(docRequest.request.url, PAGE_URL, "Request url matches requested URL");
+ is(
+ docRequest.request.urlFragment,
+ PAGE_HASH,
+ "Request URL fragment is present"
+ );
+});
+
+add_task(async function documentNavigationToURLWithEmptyHash({ client }) {
+ const { Page, Network } = client;
+
+ await loadURL(PAGE_EMPTY_URL);
+
+ await Network.enable();
+ await Page.enable();
+
+ const history = configureHistory(client, 4);
+
+ const frameNavigated = Page.frameNavigated();
+ const { frameId: frameIdNav } = await Page.navigate({
+ url: PAGE_URL_WITH_EMPTY_HASH,
+ });
+ await frameNavigated;
+ ok(frameIdNav, "Page.navigate returned a frameId");
+
+ info("Wait for Network events");
+ const events = await history.record();
+ is(events.length, 2, "Expected number of Network.requestWillBeSent events");
+
+ // Check top-level document request only for fragment usage
+ const docRequest = events[0].payload;
+ is(docRequest.documentURL, PAGE_URL, "documentURL matches requested URL");
+ is(docRequest.request.url, PAGE_URL, "Request url matches requested URL");
+ is(
+ docRequest.request.urlFragment,
+ PAGE_EMPTY_HASH,
+ "Request URL fragment is present"
+ );
+});
+
+function configureHistory(client, total) {
+ const REQUEST = "Network.requestWillBeSent";
+
+ const { Network } = client;
+ const history = new RecordEvents(total);
+
+ history.addRecorder({
+ event: Network.requestWillBeSent,
+ eventName: REQUEST,
+ messageFn: payload => {
+ return `Received ${REQUEST} for ${payload.request.url}`;
+ },
+ });
+
+ return history;
+}