diff options
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.h | 51 |
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(); } }; |