summaryrefslogtreecommitdiffstats
path: root/devtools/shared/fronts/actor-registry.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/shared/fronts/actor-registry.js')
-rw-r--r--devtools/shared/fronts/actor-registry.js67
1 files changed, 67 insertions, 0 deletions
diff --git a/devtools/shared/fronts/actor-registry.js b/devtools/shared/fronts/actor-registry.js
new file mode 100644
index 000000000..40f87b609
--- /dev/null
+++ b/devtools/shared/fronts/actor-registry.js
@@ -0,0 +1,67 @@
+/* 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 { components } = require("chrome");
+const Services = require("Services");
+const { actorActorSpec, actorRegistrySpec } = require("devtools/shared/specs/actor-registry");
+const protocol = require("devtools/shared/protocol");
+const { custom } = protocol;
+
+loader.lazyImporter(this, "NetUtil", "resource://gre/modules/NetUtil.jsm");
+
+const ActorActorFront = protocol.FrontClassWithSpec(actorActorSpec, {
+ initialize: function (client, form) {
+ protocol.Front.prototype.initialize.call(this, client, form);
+ }
+});
+
+exports.ActorActorFront = ActorActorFront;
+
+function request(uri) {
+ return new Promise((resolve, reject) => {
+ try {
+ uri = Services.io.newURI(uri, null, null);
+ } catch (e) {
+ reject(e);
+ }
+
+ NetUtil.asyncFetch({
+ uri,
+ loadUsingSystemPrincipal: true,
+ }, (stream, status, req) => {
+ if (!components.isSuccessCode(status)) {
+ reject(new Error("Request failed with status code = "
+ + status
+ + " after NetUtil.asyncFetch for url = "
+ + uri));
+ return;
+ }
+
+ let source = NetUtil.readInputStreamToString(stream, stream.available());
+ stream.close();
+ resolve(source);
+ });
+ });
+}
+
+const ActorRegistryFront = protocol.FrontClassWithSpec(actorRegistrySpec, {
+ initialize: function (client, form) {
+ protocol.Front.prototype.initialize.call(this, client,
+ { actor: form.actorRegistryActor });
+
+ this.manage(this);
+ },
+
+ registerActor: custom(function (uri, options) {
+ return request(uri, options)
+ .then(sourceText => {
+ return this._registerActor(sourceText, uri, options);
+ });
+ }, {
+ impl: "_registerActor"
+ })
+});
+
+exports.ActorRegistryFront = ActorRegistryFront;