summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/child/ext-devtools-network.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/extensions/child/ext-devtools-network.js')
-rw-r--r--browser/components/extensions/child/ext-devtools-network.js70
1 files changed, 70 insertions, 0 deletions
diff --git a/browser/components/extensions/child/ext-devtools-network.js b/browser/components/extensions/child/ext-devtools-network.js
new file mode 100644
index 0000000000..e36043f491
--- /dev/null
+++ b/browser/components/extensions/child/ext-devtools-network.js
@@ -0,0 +1,70 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+/* 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";
+
+/**
+ * Responsible for fetching HTTP response content from the backend.
+ *
+ * @param {DevtoolsExtensionContext}
+ * A devtools extension context running in a child process.
+ * @param {object} options
+ */
+class ChildNetworkResponseLoader {
+ constructor(context, requestId) {
+ this.context = context;
+ this.requestId = requestId;
+ }
+
+ api() {
+ const { context, requestId } = this;
+ return {
+ getContent(callback) {
+ return context.childManager.callParentAsyncFunction(
+ "devtools.network.Request.getContent",
+ [requestId],
+ callback
+ );
+ },
+ };
+ }
+}
+
+this.devtools_network = class extends ExtensionAPI {
+ getAPI(context) {
+ return {
+ devtools: {
+ network: {
+ onRequestFinished: new EventManager({
+ context,
+ name: "devtools.network.onRequestFinished",
+ register: fire => {
+ let onFinished = data => {
+ const loader = new ChildNetworkResponseLoader(
+ context,
+ data.requestId
+ );
+ const harEntry = { ...data.harEntry, ...loader.api() };
+ const result = Cu.cloneInto(harEntry, context.cloneScope, {
+ cloneFunctions: true,
+ });
+ fire.asyncWithoutClone(result);
+ };
+
+ let parent = context.childManager.getParentEvent(
+ "devtools.network.onRequestFinished"
+ );
+ parent.addListener(onFinished);
+ return () => {
+ parent.removeListener(onFinished);
+ };
+ },
+ }).api(),
+ },
+ },
+ };
+ }
+};