From 9547fe4cfe4d396b5e1d5ab76611cfec0ec5af78 Mon Sep 17 00:00:00 2001 From: Khafra Date: Sun, 21 Apr 2024 10:21:43 -0400 Subject: [PATCH] reuse realm for Request/Response (#3142) --- lib/web/fetch/request.js | 6 +++--- lib/web/fetch/response.js | 10 ++-------- lib/web/fetch/util.js | 8 ++++++-- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/lib/web/fetch/request.js b/lib/web/fetch/request.js index b12ffb5d3cd..eedee2261da 100644 --- a/lib/web/fetch/request.js +++ b/lib/web/fetch/request.js @@ -11,7 +11,7 @@ const { isValidHTTPToken, sameOrigin, normalizeMethod, - EnvironmentSettingsObject, + environmentSettingsObject, normalizeMethodRecord } = require('./util') const { @@ -54,8 +54,8 @@ class Request { init = webidl.converters.RequestInit(init) // https://html.spec.whatwg.org/multipage/webappapis.html#environment-settings-object - // Note: Slow initialization of object literals with getters. - this[kRealm] = new EnvironmentSettingsObject() + this[kRealm] = environmentSettingsObject + // 1. Let request be null. let request = null diff --git a/lib/web/fetch/response.js b/lib/web/fetch/response.js index 763df67d6eb..9a9d892796b 100644 --- a/lib/web/fetch/response.js +++ b/lib/web/fetch/response.js @@ -13,7 +13,7 @@ const { serializeJavascriptValueToJSONString, isErrorLike, isomorphicEncode, - EnvironmentSettingsObject + environmentSettingsObject: relevantRealm } = require('./util') const { redirectStatusSet, @@ -33,8 +33,6 @@ const textEncoder = new TextEncoder('utf-8') class Response { // Creates network error Response. static error () { - const relevantRealm = new EnvironmentSettingsObject() - // The static error() method steps are to return the result of creating a // Response object, given a new network error, "immutable", and this’s // relevant Realm. @@ -61,7 +59,6 @@ class Response { // 3. Let responseObject be the result of creating a Response object, given a new response, // "response", and this’s relevant Realm. - const relevantRealm = new EnvironmentSettingsObject() const responseObject = fromInnerResponse(makeResponse({}), 'response', relevantRealm) // 4. Perform initialize a response given responseObject, init, and (body, "application/json"). @@ -73,8 +70,6 @@ class Response { // Creates a redirect Response that redirects to url with status status. static redirect (url, status = 302) { - const relevantRealm = new EnvironmentSettingsObject() - webidl.argumentLengthCheck(arguments, 1, { header: 'Response.redirect' }) url = webidl.converters.USVString(url) @@ -125,8 +120,7 @@ class Response { init = webidl.converters.ResponseInit(init) - // TODO - this[kRealm] = new EnvironmentSettingsObject() + this[kRealm] = relevantRealm // 1. Set this’s response to a new response. this[kState] = makeResponse({}) diff --git a/lib/web/fetch/util.js b/lib/web/fetch/util.js index 71df40a3793..a684c27d883 100644 --- a/lib/web/fetch/util.js +++ b/lib/web/fetch/util.js @@ -1570,7 +1570,9 @@ function utf8DecodeBytes (buffer) { } class EnvironmentSettingsObjectBase { - baseUrl = getGlobalOrigin() + get baseUrl () { + return getGlobalOrigin() + } get origin () { return this.baseUrl?.origin @@ -1583,6 +1585,8 @@ class EnvironmentSettingsObject { settingsObject = new EnvironmentSettingsObjectBase() } +const environmentSettingsObject = new EnvironmentSettingsObject() + module.exports = { isAborted, isCancelled, @@ -1635,5 +1639,5 @@ module.exports = { extractMimeType, getDecodeSplit, utf8DecodeBytes, - EnvironmentSettingsObject + environmentSettingsObject }