summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/modules/presentation/presentation_request.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/presentation/presentation_request.cc')
-rw-r--r--chromium/third_party/blink/renderer/modules/presentation/presentation_request.cc37
1 files changed, 23 insertions, 14 deletions
diff --git a/chromium/third_party/blink/renderer/modules/presentation/presentation_request.cc b/chromium/third_party/blink/renderer/modules/presentation/presentation_request.cc
index 483183cd655..4942ca775bd 100644
--- a/chromium/third_party/blink/renderer/modules/presentation/presentation_request.cc
+++ b/chromium/third_party/blink/renderer/modules/presentation/presentation_request.cc
@@ -7,7 +7,6 @@
#include <memory>
#include "third_party/blink/renderer/bindings/core/v8/callback_promise_adapter.h"
-#include "third_party/blink/renderer/bindings/core/v8/exception_state.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
#include "third_party/blink/renderer/core/dom/document.h"
@@ -25,6 +24,7 @@
#include "third_party/blink/renderer/modules/presentation/presentation_connection_callbacks.h"
#include "third_party/blink/renderer/modules/presentation/presentation_controller.h"
#include "third_party/blink/renderer/modules/presentation/presentation_error.h"
+#include "third_party/blink/renderer/platform/bindings/exception_state.h"
namespace blink {
@@ -37,6 +37,12 @@ Settings* GetSettings(ExecutionContext* execution_context) {
return document->GetSettings();
}
+bool IsKnownProtocolForPresentationUrl(const KURL& url) {
+ // TODO(crbug.com/733381): Restrict to https + custom schemes.
+ return url.ProtocolIsInHTTPFamily() || url.ProtocolIs("cast") ||
+ url.ProtocolIs("cast-dial");
+}
+
} // anonymous namespace
// static
@@ -60,19 +66,14 @@ PresentationRequest* PresentationRequest::Create(
return nullptr;
}
- if (urls.IsEmpty()) {
- exception_state.ThrowDOMException(kNotSupportedError,
- "Do not support empty sequence of URLs.");
- return nullptr;
- }
-
- Vector<KURL> parsed_urls(urls.size());
+ Vector<KURL> parsed_urls;
for (size_t i = 0; i < urls.size(); ++i) {
const KURL& parsed_url = KURL(execution_context->Url(), urls[i]);
if (!parsed_url.IsValid()) {
exception_state.ThrowDOMException(
- kSyntaxError, "'" + urls[i] + "' can't be resolved to a valid URL.");
+ DOMExceptionCode::kSyntaxError,
+ "'" + urls[i] + "' can't be resolved to a valid URL.");
return nullptr;
}
@@ -85,8 +86,16 @@ PresentationRequest* PresentationRequest::Create(
return nullptr;
}
- parsed_urls[i] = parsed_url;
+ if (IsKnownProtocolForPresentationUrl(parsed_url))
+ parsed_urls.push_back(parsed_url);
}
+
+ if (parsed_urls.IsEmpty()) {
+ exception_state.ThrowDOMException(DOMExceptionCode::kNotSupportedError,
+ "Do not support empty sequence of URLs.");
+ return nullptr;
+ }
+
return new PresentationRequest(execution_context, parsed_urls);
}
@@ -150,7 +159,7 @@ ScriptPromise PresentationRequest::start(ScriptState* script_state) {
return ScriptPromise::RejectWithDOMException(
script_state,
DOMException::Create(
- kInvalidAccessError,
+ DOMExceptionCode::kInvalidAccessError,
"PresentationRequest::start() requires user gesture."));
PresentationController* controller =
@@ -159,7 +168,7 @@ ScriptPromise PresentationRequest::start(ScriptState* script_state) {
return ScriptPromise::RejectWithDOMException(
script_state,
DOMException::Create(
- kInvalidStateError,
+ DOMExceptionCode::kInvalidStateError,
"The PresentationRequest is no longer associated to a frame."));
RecordStartOriginTypeAccess(*execution_context);
@@ -181,7 +190,7 @@ ScriptPromise PresentationRequest::reconnect(ScriptState* script_state,
return ScriptPromise::RejectWithDOMException(
script_state,
DOMException::Create(
- kInvalidStateError,
+ DOMExceptionCode::kInvalidStateError,
"The PresentationRequest is no longer associated to a frame."));
ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state);
@@ -211,7 +220,7 @@ ScriptPromise PresentationRequest::getAvailability(ScriptState* script_state) {
return ScriptPromise::RejectWithDOMException(
script_state,
DOMException::Create(
- kInvalidStateError,
+ DOMExceptionCode::kInvalidStateError,
"The PresentationRequest is no longer associated to a frame."));
if (!availability_property_) {