summaryrefslogtreecommitdiffstats
path: root/addon-sdk/source/lib/sdk/net
diff options
context:
space:
mode:
Diffstat (limited to 'addon-sdk/source/lib/sdk/net')
-rw-r--r--addon-sdk/source/lib/sdk/net/url.js94
-rw-r--r--addon-sdk/source/lib/sdk/net/xhr.js36
2 files changed, 130 insertions, 0 deletions
diff --git a/addon-sdk/source/lib/sdk/net/url.js b/addon-sdk/source/lib/sdk/net/url.js
new file mode 100644
index 000000000..5502171ee
--- /dev/null
+++ b/addon-sdk/source/lib/sdk/net/url.js
@@ -0,0 +1,94 @@
+/* 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";
+
+module.metadata = {
+ "stability": "experimental"
+};
+
+const { Ci, Cu, components } = require("chrome");
+
+const { defer } = require("../core/promise");
+const { merge } = require("../util/object");
+
+const { NetUtil } = Cu.import("resource://gre/modules/NetUtil.jsm", {});
+const { Services } = Cu.import("resource://gre/modules/Services.jsm", {});
+
+/**
+ * Reads a URI and returns a promise.
+ *
+ * @param uri {string} The URI to read
+ * @param [options] {object} This parameter can have any or all of the following
+ * fields: `charset`. By default the `charset` is set to 'UTF-8'.
+ *
+ * @returns {promise} The promise that will be resolved with the content of the
+ * URL given.
+ *
+ * @example
+ * let promise = readURI('resource://gre/modules/NetUtil.jsm', {
+ * charset: 'US-ASCII'
+ * });
+ */
+function readURI(uri, options) {
+ options = options || {};
+ let charset = options.charset || 'UTF-8';
+
+ let channel = NetUtil.newChannel({
+ uri: NetUtil.newURI(uri, charset),
+ loadUsingSystemPrincipal: true});
+
+ let { promise, resolve, reject } = defer();
+
+ try {
+ NetUtil.asyncFetch(channel, function (stream, result) {
+ if (components.isSuccessCode(result)) {
+ let count = stream.available();
+ let data = NetUtil.readInputStreamToString(stream, count, { charset : charset });
+
+ resolve(data);
+ } else {
+ reject("Failed to read: '" + uri + "' (Error Code: " + result + ")");
+ }
+ });
+ }
+ catch (e) {
+ reject("Failed to read: '" + uri + "' (Error: " + e.message + ")");
+ }
+
+ return promise;
+}
+
+exports.readURI = readURI;
+
+/**
+ * Reads a URI synchronously.
+ * This function is intentionally undocumented to favorites the `readURI` usage.
+ *
+ * @param uri {string} The URI to read
+ * @param [charset] {string} The character set to use when read the content of
+ * the `uri` given. By default is set to 'UTF-8'.
+ *
+ * @returns {string} The content of the URI given.
+ *
+ * @example
+ * let data = readURISync('resource://gre/modules/NetUtil.jsm');
+ */
+function readURISync(uri, charset) {
+ charset = typeof charset === "string" ? charset : "UTF-8";
+
+ let channel = NetUtil.newChannel({
+ uri: NetUtil.newURI(uri, charset),
+ loadUsingSystemPrincipal: true});
+ let stream = channel.open2();
+
+ let count = stream.available();
+ let data = NetUtil.readInputStreamToString(stream, count, { charset : charset });
+
+ stream.close();
+
+ return data;
+}
+
+exports.readURISync = readURISync;
diff --git a/addon-sdk/source/lib/sdk/net/xhr.js b/addon-sdk/source/lib/sdk/net/xhr.js
new file mode 100644
index 000000000..415b9cbf4
--- /dev/null
+++ b/addon-sdk/source/lib/sdk/net/xhr.js
@@ -0,0 +1,36 @@
+/* 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";
+
+module.metadata = {
+ "stability": "stable"
+};
+
+const { deprecateFunction } = require("../util/deprecate");
+const { Cc, Ci } = require("chrome");
+const XMLHttpRequest = require("../addon/window").window.XMLHttpRequest;
+
+Object.defineProperties(XMLHttpRequest.prototype, {
+ mozBackgroundRequest: {
+ value: true,
+ },
+ forceAllowThirdPartyCookie: {
+ configurable: true,
+ value: deprecateFunction(function() {
+ forceAllowThirdPartyCookie(this);
+
+ }, "`xhr.forceAllowThirdPartyCookie()` is deprecated, please use" +
+ "`require('sdk/net/xhr').forceAllowThirdPartyCookie(request)` instead")
+ }
+});
+exports.XMLHttpRequest = XMLHttpRequest;
+
+function forceAllowThirdPartyCookie(xhr) {
+ if (xhr.channel instanceof Ci.nsIHttpChannelInternal)
+ xhr.channel.forceAllowThirdPartyCookie = true;
+}
+exports.forceAllowThirdPartyCookie = forceAllowThirdPartyCookie;
+
+// No need to handle add-on unloads as addon/window is closed at unload
+// and it will take down all the associated requests.