summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoyee Cheung <joyeec9h3@gmail.com>2019-02-21 12:37:45 +0800
committerJoyee Cheung <joyeec9h3@gmail.com>2019-02-25 16:40:45 +0800
commitbba27a11c5216bbecf275cef59310cd5c058b74b (patch)
treeb5cda9184caf05189f794003d7c47348b618fab8
parent79a3348d142be713c2aa5dbe41524b54cb6bac03 (diff)
downloadandroid-node-v8-bba27a11c5216bbecf275cef59310cd5c058b74b.tar.gz
android-node-v8-bba27a11c5216bbecf275cef59310cd5c058b74b.tar.bz2
android-node-v8-bba27a11c5216bbecf275cef59310cd5c058b74b.zip
process: use common operations to define browser globals
Extracts: - `exposeNamespace`: https://heycam.github.io/webidl/#es-namespaces - `exposeInterface`: https://heycam.github.io/webidl/#es-interfaces - `defineOperation`: https://heycam.github.io/webidl/#define-the-operations into functions to define browser globals. PR-URL: https://github.com/nodejs/node/pull/26230 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
-rw-r--r--lib/internal/bootstrap/node.js120
1 files changed, 59 insertions, 61 deletions
diff --git a/lib/internal/bootstrap/node.js b/lib/internal/bootstrap/node.js
index 8b40c2258b..03d49b487a 100644
--- a/lib/internal/bootstrap/node.js
+++ b/lib/internal/bootstrap/node.js
@@ -182,11 +182,34 @@ if (config.hasInspector) {
const browserGlobals = !process._noBrowserGlobals;
if (browserGlobals) {
- setupGlobalTimeouts();
- setupGlobalConsole();
- setupGlobalURL();
- setupGlobalEncoding();
+ // Override global console from the one provided by the VM
+ // to the one implemented by Node.js
+ // https://console.spec.whatwg.org/#console-namespace
+ exposeNamespace(global, 'console', createGlobalConsole(global.console));
+
+ const { URL, URLSearchParams } = NativeModule.require('internal/url');
+ // https://url.spec.whatwg.org/#url
+ exposeInterface(global, 'URL', URL);
+ // https://url.spec.whatwg.org/#urlsearchparams
+ exposeInterface(global, 'URLSearchParams', URLSearchParams);
+
+ const { TextEncoder, TextDecoder } = NativeModule.require('util');
+ // https://encoding.spec.whatwg.org/#textencoder
+ exposeInterface(global, 'TextEncoder', TextEncoder);
+ // https://encoding.spec.whatwg.org/#textdecoder
+ exposeInterface(global, 'TextDecoder', TextDecoder);
+
+ // https://html.spec.whatwg.org/multipage/webappapis.html#windoworworkerglobalscope
+ const timers = NativeModule.require('timers');
+ defineOperation(global, 'clearInterval', timers.clearInterval);
+ defineOperation(global, 'clearTimeout', timers.clearTimeout);
+ defineOperation(global, 'setInterval', timers.setInterval);
+ defineOperation(global, 'setTimeout', timers.setTimeout);
setupQueueMicrotask();
+
+ // Non-standard extensions:
+ defineOperation(global, 'clearImmediate', timers.clearImmediate);
+ defineOperation(global, 'setImmediate', timers.setImmediate);
}
setupDOMException();
@@ -376,29 +399,9 @@ function setupBuffer() {
});
}
-function setupGlobalTimeouts() {
- const timers = NativeModule.require('timers');
- global.clearImmediate = timers.clearImmediate;
- global.clearInterval = timers.clearInterval;
- global.clearTimeout = timers.clearTimeout;
- global.setImmediate = timers.setImmediate;
- global.setInterval = timers.setInterval;
- global.setTimeout = timers.setTimeout;
-}
-
-function setupGlobalConsole() {
- const consoleFromVM = global.console;
+function createGlobalConsole(consoleFromVM) {
const consoleFromNode =
NativeModule.require('internal/console/global');
- // Override global console from the one provided by the VM
- // to the one implemented by Node.js
- Object.defineProperty(global, 'console', {
- configurable: true,
- enumerable: false,
- value: consoleFromNode,
- writable: true
- });
-
if (config.hasInspector) {
const inspector = NativeModule.require('internal/util/inspector');
// This will be exposed by `require('inspector').console` later.
@@ -410,42 +413,7 @@ function setupGlobalConsole() {
// Setup inspector command line API.
setConsoleExtensionInstaller(inspector.installConsoleExtensions);
}
-}
-
-function setupGlobalURL() {
- const { URL, URLSearchParams } = NativeModule.require('internal/url');
- Object.defineProperties(global, {
- URL: {
- value: URL,
- writable: true,
- configurable: true,
- enumerable: false
- },
- URLSearchParams: {
- value: URLSearchParams,
- writable: true,
- configurable: true,
- enumerable: false
- }
- });
-}
-
-function setupGlobalEncoding() {
- const { TextEncoder, TextDecoder } = NativeModule.require('util');
- Object.defineProperties(global, {
- TextEncoder: {
- value: TextEncoder,
- writable: true,
- configurable: true,
- enumerable: false
- },
- TextDecoder: {
- value: TextDecoder,
- writable: true,
- configurable: true,
- enumerable: false
- }
- });
+ return consoleFromNode;
}
function setupQueueMicrotask() {
@@ -483,3 +451,33 @@ function setupDOMException() {
const { registerDOMException } = internalBinding('messaging');
registerDOMException(DOMException);
}
+
+// https://heycam.github.io/webidl/#es-namespaces
+function exposeNamespace(target, name, namespaceObject) {
+ Object.defineProperty(target, name, {
+ writable: true,
+ enumerable: false,
+ configurable: true,
+ value: namespaceObject
+ });
+}
+
+// https://heycam.github.io/webidl/#es-interfaces
+function exposeInterface(target, name, interfaceObject) {
+ Object.defineProperty(target, name, {
+ writable: true,
+ enumerable: false,
+ configurable: true,
+ value: interfaceObject
+ });
+}
+
+// https://heycam.github.io/webidl/#define-the-operations
+function defineOperation(target, name, method) {
+ Object.defineProperty(target, name, {
+ writable: true,
+ enumerable: true,
+ configurable: true,
+ value: method
+ });
+}