summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/loader/modulescript/module_script_creation_params.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/loader/modulescript/module_script_creation_params.h')
-rw-r--r--chromium/third_party/blink/renderer/core/loader/modulescript/module_script_creation_params.h51
1 files changed, 45 insertions, 6 deletions
diff --git a/chromium/third_party/blink/renderer/core/loader/modulescript/module_script_creation_params.h b/chromium/third_party/blink/renderer/core/loader/modulescript/module_script_creation_params.h
index cdc39f58079..f9d9b548116 100644
--- a/chromium/third_party/blink/renderer/core/loader/modulescript/module_script_creation_params.h
+++ b/chromium/third_party/blink/renderer/core/loader/modulescript/module_script_creation_params.h
@@ -10,6 +10,7 @@
#include "third_party/blink/renderer/platform/cross_thread_copier.h"
#include "third_party/blink/renderer/platform/loader/fetch/access_control_status.h"
#include "third_party/blink/renderer/platform/weborigin/kurl.h"
+#include "third_party/blink/renderer/platform/wtf/text/movable_string.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
namespace blink {
@@ -19,17 +20,34 @@ class ModuleScriptCreationParams {
public:
ModuleScriptCreationParams(
const KURL& response_url,
- const String& source_text,
+ const MovableString& source_text,
network::mojom::FetchCredentialsMode fetch_credentials_mode,
AccessControlStatus access_control_status)
: response_url_(response_url),
+ is_isolated_(false),
source_text_(source_text),
+ isolated_source_text_(),
fetch_credentials_mode_(fetch_credentials_mode),
access_control_status_(access_control_status) {}
+
~ModuleScriptCreationParams() = default;
+ ModuleScriptCreationParams IsolatedCopy() const {
+ String isolated_source_text = GetSourceText().ToString().IsolatedCopy();
+ return ModuleScriptCreationParams(
+ GetResponseUrl().Copy(), isolated_source_text,
+ GetFetchCredentialsMode(), GetAccessControlStatus());
+ }
+
const KURL& GetResponseUrl() const { return response_url_; };
- const String& GetSourceText() const { return source_text_; }
+ const MovableString& GetSourceText() const {
+ if (is_isolated_) {
+ source_text_ = MovableString(isolated_source_text_.ReleaseImpl());
+ isolated_source_text_ = String();
+ is_isolated_ = false;
+ }
+ return source_text_;
+ }
network::mojom::FetchCredentialsMode GetFetchCredentialsMode() const {
return fetch_credentials_mode_;
}
@@ -37,9 +55,32 @@ class ModuleScriptCreationParams {
return access_control_status_;
}
+ bool IsSafeToSendToAnotherThread() const {
+ return response_url_.IsSafeToSendToAnotherThread() && is_isolated_;
+ }
+
private:
+ // Creates an isolated copy.
+ ModuleScriptCreationParams(
+ const KURL& response_url,
+ const String& isolated_source_text,
+ network::mojom::FetchCredentialsMode fetch_credentials_mode,
+ AccessControlStatus access_control_status)
+ : response_url_(response_url),
+ is_isolated_(true),
+ source_text_(),
+ isolated_source_text_(isolated_source_text),
+ fetch_credentials_mode_(fetch_credentials_mode),
+ access_control_status_(access_control_status) {}
+
const KURL response_url_;
- const String source_text_;
+
+ // Mutable because an isolated copy can become bound to a thread when
+ // calling GetSourceText().
+ mutable bool is_isolated_;
+ mutable MovableString source_text_;
+ mutable String isolated_source_text_;
+
const network::mojom::FetchCredentialsMode fetch_credentials_mode_;
const AccessControlStatus access_control_status_;
};
@@ -50,9 +91,7 @@ template <>
struct CrossThreadCopier<ModuleScriptCreationParams> {
static ModuleScriptCreationParams Copy(
const ModuleScriptCreationParams& params) {
- return ModuleScriptCreationParams(
- params.GetResponseUrl().Copy(), params.GetSourceText().IsolatedCopy(),
- params.GetFetchCredentialsMode(), params.GetAccessControlStatus());
+ return params.IsolatedCopy();
}
};