diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/core/url/dom_url_utils.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/core/url/dom_url_utils.cc | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/chromium/third_party/blink/renderer/core/url/dom_url_utils.cc b/chromium/third_party/blink/renderer/core/url/dom_url_utils.cc index e597624e9fe..928053a4236 100644 --- a/chromium/third_party/blink/renderer/core/url/dom_url_utils.cc +++ b/chromium/third_party/blink/renderer/core/url/dom_url_utils.cc @@ -26,14 +26,35 @@ #include "third_party/blink/renderer/core/url/dom_url_utils.h" -#include "third_party/blink/renderer/bindings/core/v8/exception_state.h" +#include "third_party/blink/renderer/bindings/core/v8/usv_string_or_trusted_url.h" +#include "third_party/blink/renderer/core/dom/document.h" +#include "third_party/blink/renderer/core/trustedtypes/trusted_url.h" +#include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/weborigin/known_ports.h" namespace blink { DOMURLUtils::~DOMURLUtils() = default; -void DOMURLUtils::setHref(const String& value) { +void DOMURLUtils::setHref(ScriptState* script_state, + const USVStringOrTrustedURL& stringOrUrl, + ExceptionState& exception_state) { + DCHECK(stringOrUrl.IsUSVString() || + RuntimeEnabledFeatures::TrustedDOMTypesEnabled()); + DCHECK(!stringOrUrl.IsNull()); + + if (ExecutionContext::From(script_state)->IsDocument()) { + Document* document = ToDocument((ExecutionContext::From(script_state))); + if (!stringOrUrl.IsTrustedURL() && document->RequireTrustedTypes()) { + exception_state.ThrowTypeError( + "This document requires `TrustedURL` assignment."); + return; + } + } + + String value = stringOrUrl.IsUSVString() + ? stringOrUrl.GetAsUSVString() + : stringOrUrl.GetAsTrustedURL()->toString(); SetInput(value); } |