diff options
author | James M Snell <jasnell@gmail.com> | 2017-03-26 19:49:33 -0700 |
---|---|---|
committer | James M Snell <jasnell@gmail.com> | 2017-03-29 20:48:25 -0700 |
commit | 7139b93a8b4e9115167954fbb507feaa01d79129 (patch) | |
tree | 894a40d81ee92855d8187ae733d80e09247acb3e /lib | |
parent | 61ebfa8d1fcb468cb95fdf3742e1672e48672b32 (diff) | |
download | android-node-v8-7139b93a8b4e9115167954fbb507feaa01d79129.tar.gz android-node-v8-7139b93a8b4e9115167954fbb507feaa01d79129.tar.bz2 android-node-v8-7139b93a8b4e9115167954fbb507feaa01d79129.zip |
url: add ToObject method to native URL class
Provides a factory method to convert a native URL class
into a JS URL object.
```c++
Environment* env = ...
URL url("http://example.org/a/b/c?query#fragment");
MaybeLocal<Value> val = url.ToObject(env);
```
PR-URL: https://github.com/nodejs/node/pull/12056
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/internal/bootstrap_node.js | 4 | ||||
-rw-r--r-- | lib/internal/url.js | 25 |
2 files changed, 29 insertions, 0 deletions
diff --git a/lib/internal/bootstrap_node.js b/lib/internal/bootstrap_node.js index d7aa89a5ee..479f06e5db 100644 --- a/lib/internal/bootstrap_node.js +++ b/lib/internal/bootstrap_node.js @@ -54,6 +54,10 @@ _process.setupRawDebug(); + // Ensure setURLConstructor() is called before the native + // URL::ToObject() method is used. + NativeModule.require('internal/url'); + Object.defineProperty(process, 'argv0', { enumerable: true, configurable: false, diff --git a/lib/internal/url.js b/lib/internal/url.js index 64156803d8..5fcabb803e 100644 --- a/lib/internal/url.js +++ b/lib/internal/url.js @@ -1400,6 +1400,31 @@ function getPathFromURL(path) { return isWindows ? getPathFromURLWin32(path) : getPathFromURLPosix(path); } +function NativeURL(ctx) { + this[context] = ctx; +} +NativeURL.prototype = URL.prototype; + +function constructUrl(flags, protocol, username, password, + host, port, path, query, fragment) { + var ctx = new URLContext(); + ctx.flags = flags; + ctx.scheme = protocol; + ctx.username = username; + ctx.password = password; + ctx.port = port; + ctx.path = path; + ctx.query = query; + ctx.fragment = fragment; + ctx.host = host; + const url = new NativeURL(ctx); + url[searchParams] = new URLSearchParams(); + url[searchParams][context] = url; + initSearchParams(url[searchParams], query); + return url; +} +binding.setURLConstructor(constructUrl); + module.exports = { toUSVString, getPathFromURL, |