summaryrefslogtreecommitdiffstats
path: root/devtools/shared/specs/network-event.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/shared/specs/network-event.js')
-rw-r--r--devtools/shared/specs/network-event.js220
1 files changed, 220 insertions, 0 deletions
diff --git a/devtools/shared/specs/network-event.js b/devtools/shared/specs/network-event.js
new file mode 100644
index 0000000000..3f1cfe8538
--- /dev/null
+++ b/devtools/shared/specs/network-event.js
@@ -0,0 +1,220 @@
+/* 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/. */
+
+"use strict";
+
+const {
+ Arg,
+ Option,
+ RetVal,
+ generateActorSpec,
+ types,
+} = require("resource://devtools/shared/protocol.js");
+
+types.addDictType("netevent.headers-cookies", {
+ name: "string",
+ value: "longstring",
+});
+
+types.addDictType("netevent.headers", {
+ headers: "array:netevent.headers-cookies",
+ headersSize: "number",
+ rawHeaders: "nullable:longstring",
+});
+
+types.addDictType("netevent.cookies", {
+ cookies: "array:netevent.headers-cookies",
+});
+
+types.addDictType("netevent.postdata.text", {
+ text: "longstring",
+});
+
+types.addDictType("netevent.postdata", {
+ postData: "netevent.postdata.text",
+ postDataDiscarded: "boolean",
+});
+
+types.addDictType("netevent.cache", {
+ content: "json",
+});
+
+types.addDictType("netevent.content.content", {
+ text: "longstring",
+});
+
+types.addDictType("netevent.content", {
+ content: "netevent.content.content",
+ contentDiscarded: "boolean",
+});
+
+types.addDictType("netevent.timings.data", {
+ blocked: "number",
+ dns: "number",
+ ssl: "number",
+ connect: "number",
+ send: "number",
+ wait: "number",
+ receive: "number",
+});
+
+types.addDictType("netevent.timings", {
+ timings: "netevent.timings.data",
+ totalTime: "number",
+ offsets: "netevent.timings.data",
+ serverTimings: "array:netevent.timings.serverTiming",
+});
+
+types.addDictType("netevent.timings.serverTiming", {
+ name: "string",
+ description: "string",
+ duration: "number",
+});
+
+// See NetworkHelper.parseCertificateInfo for more details
+types.addDictType("netevent.cert", {
+ subject: "json",
+ issuer: "json",
+ validity: "json",
+ fingerprint: "json",
+});
+
+types.addDictType("netevent.secinfo", {
+ state: "string",
+ weaknessReasons: "array:string",
+ cipherSuite: "string",
+ keaGroupName: "string",
+ signatureSchemeName: "string",
+ protocolVersion: "string",
+ cert: "nullable:netevent.cert",
+ certificateTransparency: "number",
+ hsts: "boolean",
+ hpkp: "boolean",
+ errorMessage: "nullable:string",
+ usedEch: "boolean",
+ usedDelegatedCredentials: "boolean",
+ usedOcsp: "boolean",
+ usedPrivateDns: "boolean",
+});
+
+const networkEventSpec = generateActorSpec({
+ typeName: "netEvent",
+
+ events: {
+ // All these events end up emitting a `networkEventUpdate` RDP message
+ // `updateType` attribute allows to identify which kind of event is emitted.
+ // We use individual event at protocol.js level to workaround performance issue
+ // with `Option` types. (See bug 1449162)
+ "network-event-update:headers": {
+ type: "networkEventUpdate",
+ updateType: Arg(0, "string"),
+
+ headers: Option(1, "number"),
+ headersSize: Option(1, "number"),
+ },
+
+ "network-event-update:cookies": {
+ type: "networkEventUpdate",
+ updateType: Arg(0, "string"),
+
+ cookies: Option(1, "number"),
+ },
+
+ "network-event-update:post-data": {
+ type: "networkEventUpdate",
+ updateType: Arg(0, "string"),
+
+ dataSize: Option(1, "number"),
+ },
+
+ "network-event-update:response-start": {
+ type: "networkEventUpdate",
+ updateType: Arg(0, "string"),
+
+ response: Option(1, "json"),
+ },
+
+ "network-event-update:security-info": {
+ type: "networkEventUpdate",
+ updateType: Arg(0, "string"),
+
+ state: Option(1, "string"),
+ isRacing: Option(1, "boolean"),
+ },
+
+ "network-event-update:response-content": {
+ type: "networkEventUpdate",
+ updateType: Arg(0, "string"),
+
+ mimeType: Option(1, "string"),
+ contentSize: Option(1, "number"),
+ encoding: Option(1, "string"),
+ transferredSize: Option(1, "number"),
+ blockedReason: Option(1, "number"),
+ blockingExtension: Option(1, "string"),
+ },
+
+ "network-event-update:event-timings": {
+ type: "networkEventUpdate",
+ updateType: Arg(0, "string"),
+
+ totalTime: Option(1, "number"),
+ },
+
+ "network-event-update:response-cache": {
+ type: "networkEventUpdate",
+ updateType: Arg(0, "string"),
+ },
+ },
+
+ methods: {
+ release: {
+ // This makes protocol.js call destroy method
+ release: true,
+ },
+ getRequestHeaders: {
+ request: {},
+ response: RetVal("json"),
+ },
+ getRequestCookies: {
+ request: {},
+ response: RetVal("json"),
+ },
+ getRequestPostData: {
+ request: {},
+ response: RetVal("json"),
+ },
+ getResponseHeaders: {
+ request: {},
+ response: RetVal("json"),
+ },
+ getResponseCookies: {
+ request: {},
+ response: RetVal("json"),
+ },
+ getResponseCache: {
+ request: {},
+ response: RetVal("json"),
+ },
+ getResponseContent: {
+ request: {},
+ response: RetVal("json"),
+ },
+ getEventTimings: {
+ request: {},
+ response: RetVal("json"),
+ },
+ getSecurityInfo: {
+ request: {},
+ response: RetVal("json"),
+ },
+ getStackTrace: {
+ request: {},
+ // stacktrace is an "array:string", but not always.
+ response: RetVal("json"),
+ },
+ },
+});
+
+exports.networkEventSpec = networkEventSpec;