Bug 1350646: Part 14 - Remove SDK net/request modules. r=Mossop
authorKris Maglione <maglione.k@gmail.com>
Sat, 05 Aug 2017 22:37:39 -0700
changeset 373947 1d2459eb61b8c792e0efe5fb15ab0b98c63504c5
parent 373946 61c5837621eca4182dc9e8f6d004b94f23710115
child 373948 af55bc9f7c6699058ca5e56b0bffc420be69236b
push id32311
push userkwierso@gmail.com
push dateFri, 11 Aug 2017 01:14:57 +0000
treeherdermozilla-central@253a8560dc34 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersMossop
bugs1350646
milestone57.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1350646: Part 14 - Remove SDK net/request modules. r=Mossop MozReview-Commit-ID: 5z6sLzpLWSo
addon-sdk/moz.build
addon-sdk/source/lib/sdk/net/xhr.js
addon-sdk/source/lib/sdk/request.js
--- a/addon-sdk/moz.build
+++ b/addon-sdk/moz.build
@@ -62,28 +62,26 @@ modules = [
     'sdk/lang/functional/concurrent.js',
     'sdk/lang/functional/core.js',
     'sdk/lang/functional/helpers.js',
     'sdk/lang/type.js',
     'sdk/lang/weak-set.js',
     'sdk/messaging.js',
     'sdk/model/core.js',
     'sdk/net/url.js',
-    'sdk/net/xhr.js',
     'sdk/notifications.js',
     'sdk/output/system.js',
     'sdk/passwords.js',
     'sdk/passwords/utils.js',
     'sdk/platform/xpcom.js',
     'sdk/preferences/service.js',
     'sdk/preferences/utils.js',
     'sdk/private-browsing.js',
     'sdk/private-browsing/utils.js',
     'sdk/querystring.js',
-    'sdk/request.js',
     'sdk/self.js',
     'sdk/simple-storage.js',
     'sdk/system.js',
     'sdk/system/environment.js',
     'sdk/system/events-shimmed.js',
     'sdk/system/events.js',
     'sdk/system/globals.js',
     'sdk/system/process.js',
deleted file mode 100644
--- a/addon-sdk/source/lib/sdk/net/xhr.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/* 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 { Ci, Cu } = require("chrome");
-
-Cu.importGlobalProperties(["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.
deleted file mode 100644
--- a/addon-sdk/source/lib/sdk/request.js
+++ /dev/null
@@ -1,248 +0,0 @@
-/* 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 { ns } = require("./core/namespace");
-const { emit } = require("./event/core");
-const { merge } = require("./util/object");
-const { stringify } = require("./querystring");
-const { EventTarget } = require("./event/target");
-const { Class } = require("./core/heritage");
-const { XMLHttpRequest, forceAllowThirdPartyCookie } = require("./net/xhr");
-const apiUtils = require("./deprecated/api-utils");
-const { isValidURI } = require("./url.js");
-
-const response = ns();
-const request = ns();
-
-// Instead of creating a new validator for each request, just make one and
-// reuse it.
-const { validateOptions, validateSingleOption } = new OptionsValidator({
-  url: {
-    // Also converts a URL instance to string, bug 857902
-    map: url => url.toString(),
-    ok: isValidURI
-  },
-  headers: {
-    map: v => v || {},
-    is:  ["object"],
-  },
-  content: {
-    map: v => v || null,
-    is:  ["string", "object", "null"],
-  },
-  contentType: {
-    map: v => v || "application/x-www-form-urlencoded",
-    is:  ["string"],
-  },
-  overrideMimeType: {
-    map: v => v || null,
-    is: ["string", "null"],
-  },
-  anonymous: {
-    map: v => v || false,
-    is: ["boolean", "null"],
-  }
-});
-
-const REUSE_ERROR = "This request object has been used already. You must " +
-                    "create a new one to make a new request."
-
-// Utility function to prep the request since it's the same between
-// request types
-function runRequest(mode, target) {
-  let source = request(target)
-  let { xhr, url, content, contentType, headers, overrideMimeType, anonymous } = source;
-
-  let isGetOrHead = (mode == "GET" || mode == "HEAD");
-
-  // If this request has already been used, then we can't reuse it.
-  // Throw an error.
-  if (xhr)
-    throw new Error(REUSE_ERROR);
-
-  xhr = source.xhr = new XMLHttpRequest({
-    mozAnon: anonymous
-  });
-
-  // Build the data to be set. For GET or HEAD requests, we want to append that
-  // to the URL before opening the request.
-  let data = stringify(content);
-  // If the URL already has ? in it, then we want to just use &
-  if (isGetOrHead && data)
-    url = url + (/\?/.test(url) ? "&" : "?") + data;
-
-  // open the request
-  xhr.open(mode, url);
-
-
-  forceAllowThirdPartyCookie(xhr);
-
-  // request header must be set after open, but before send
-  xhr.setRequestHeader("Content-Type", contentType);
-
-  // set other headers
-  Object.keys(headers).forEach(function(name) {
-    xhr.setRequestHeader(name, headers[name]);
-  });
-
-  // set overrideMimeType
-  if (overrideMimeType)
-    xhr.overrideMimeType(overrideMimeType);
-
-  // handle the readystate, create the response, and call the callback
-  xhr.onreadystatechange = function onreadystatechange() {
-    if (xhr.readyState === 4) {
-      let response = Response(xhr);
-      source.response = response;
-      emit(target, 'complete', response);
-    }
-  };
-
-  // actually send the request.
-  // We don't want to send data on GET or HEAD requests.
-  xhr.send(!isGetOrHead ? data : null);
-}
-
-const Request = Class({
-  extends: EventTarget,
-  initialize: function initialize(options) {
-    // `EventTarget.initialize` will set event listeners that are named
-    // like `onEvent` in this case `onComplete` listener will be set to
-    // `complete` event.
-    EventTarget.prototype.initialize.call(this, options);
-
-    // Copy normalized options.
-    merge(request(this), validateOptions(options));
-  },
-  get url() { return request(this).url; },
-  set url(value) { request(this).url = validateSingleOption('url', value); },
-  get headers() { return request(this).headers; },
-  set headers(value) {
-    return request(this).headers = validateSingleOption('headers', value);
-  },
-  get content() { return request(this).content; },
-  set content(value) {
-    request(this).content = validateSingleOption('content', value);
-  },
-  get contentType() { return request(this).contentType; },
-  set contentType(value) {
-    request(this).contentType = validateSingleOption('contentType', value);
-  },
-  get anonymous() { return request(this).anonymous; },
-  get response() { return request(this).response; },
-  delete: function() {
-    runRequest('DELETE', this);
-    return this;
-  },
-  get: function() {
-    runRequest('GET', this);
-    return this;
-  },
-  post: function() {
-    runRequest('POST', this);
-    return this;
-  },
-  put: function() {
-    runRequest('PUT', this);
-    return this;
-  },
-  head: function() {
-    runRequest('HEAD', this);
-    return this;
-  }
-});
-exports.Request = Request;
-
-const Response = Class({
-  initialize: function initialize(request) {
-    response(this).request = request;
-  },
-  // more about responseURL: https://bugzilla.mozilla.org/show_bug.cgi?id=998076
-  get url() {
-    return response(this).request.responseURL;
-  },
-  get text() {
-    return response(this).request.responseText;
-  },
-  get xml() {
-    throw new Error("Sorry, the 'xml' property is no longer available. " +
-                    "see bug 611042 for more information.");
-  },
-  get status() {
-    return response(this).request.status;
-  },
-  get statusText() {
-    return response(this).request.statusText;
-  },
-  get json() {
-    try {
-      return JSON.parse(this.text);
-    } catch(error) {
-      return null;
-    }
-  },
-  get headers() {
-    let headers = {}, lastKey;
-    // Since getAllResponseHeaders() will return null if there are no headers,
-    // defend against it by defaulting to ""
-    let rawHeaders = response(this).request.getAllResponseHeaders() || "";
-    rawHeaders.split("\n").forEach(function (h) {
-      // According to the HTTP spec, the header string is terminated by an empty
-      // line, so we can just skip it.
-      if (!h.length) {
-        return;
-      }
-
-      let index = h.indexOf(":");
-      // The spec allows for leading spaces, so instead of assuming a single
-      // leading space, just trim the values.
-      let key = h.substring(0, index).trim(),
-          val = h.substring(index + 1).trim();
-
-      // For empty keys, that means that the header value spanned multiple lines.
-      // In that case we should append the value to the value of lastKey with a
-      // new line. We'll assume lastKey will be set because there should never
-      // be an empty key on the first pass.
-      if (key) {
-        headers[key] = val;
-        lastKey = key;
-      }
-      else {
-        headers[lastKey] += "\n" + val;
-      }
-    });
-    return headers;
-  },
-  get anonymous() {
-    return response(this).request.mozAnon;
-  }
-});
-
-// apiUtils.validateOptions doesn't give the ability to easily validate single
-// options, so this is a wrapper that provides that ability.
-function OptionsValidator(rules) {
-  return {
-    validateOptions: function (options) {
-      return apiUtils.validateOptions(options, rules);
-    },
-    validateSingleOption: function (field, value) {
-      // We need to create a single rule object from our listed rules. To avoid
-      // JavaScript String warnings, check for the field & default to an empty object.
-      let singleRule = {};
-      if (field in rules) {
-        singleRule[field] = rules[field];
-      }
-      let singleOption = {};
-      singleOption[field] = value;
-      // This should throw if it's invalid, which will bubble up & out.
-      return apiUtils.validateOptions(singleOption, singleRule)[field];
-    }
-  };
-}