summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorTimothy Gu <timothygu99@gmail.com>2017-03-22 11:39:13 -0700
committerTimothy Gu <timothygu99@gmail.com>2017-03-24 15:25:40 -0700
commit14a91957f8bce2d614ec361f982aa56378f1c24e (patch)
tree8b248c4973905331de74787f2ed33fedd2711e16 /lib
parenta6e69f8c08958a0909a60b53d048b21d181e90e5 (diff)
downloadandroid-node-v8-14a91957f8bce2d614ec361f982aa56378f1c24e.tar.gz
android-node-v8-14a91957f8bce2d614ec361f982aa56378f1c24e.tar.bz2
android-node-v8-14a91957f8bce2d614ec361f982aa56378f1c24e.zip
url: use a class for WHATWG url[context]
The object is used as a structure, not as a map, which `StorageObject` was designed for. PR-URL: https://github.com/nodejs/node/pull/11930 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/internal/url.js25
1 files changed, 22 insertions, 3 deletions
diff --git a/lib/internal/url.js b/lib/internal/url.js
index 7a6ff227ed..64156803d8 100644
--- a/lib/internal/url.js
+++ b/lib/internal/url.js
@@ -3,8 +3,7 @@
const util = require('util');
const {
hexTable,
- isHexTable,
- StorageObject
+ isHexTable
} = require('internal/querystring');
const binding = process.binding('url');
const context = Symbol('context');
@@ -97,6 +96,26 @@ class TupleOrigin {
}
}
+// This class provides the internal state of a URL object. An instance of this
+// class is stored in every URL object and is accessed internally by setters
+// and getters. It roughly corresponds to the concept of a URL record in the
+// URL Standard, with a few differences. It is also the object transported to
+// the C++ binding.
+// Refs: https://url.spec.whatwg.org/#concept-url
+class URLContext {
+ constructor() {
+ this.flags = 0;
+ this.scheme = undefined;
+ this.username = undefined;
+ this.password = undefined;
+ this.host = undefined;
+ this.port = undefined;
+ this.path = [];
+ this.query = undefined;
+ this.fragment = undefined;
+ }
+}
+
function onParseComplete(flags, protocol, username, password,
host, port, path, query, fragment) {
var ctx = this[context];
@@ -125,7 +144,7 @@ function onParseError(flags, input) {
// Reused by URL constructor and URL#href setter.
function parse(url, input, base) {
const base_context = base ? base[context] : undefined;
- url[context] = new StorageObject();
+ url[context] = new URLContext();
binding.parse(input.trim(), -1,
base_context, undefined,
onParseComplete.bind(url), onParseError);