Explorar el Código

LibWeb: Implement URL.canParse(url, base)

This patch adds an implementation of the URL.canParse(url, base) static
function :^)
networkException hace 2 años
padre
commit
b1e43c9ea1

+ 14 - 0
Userland/Libraries/LibWeb/URL/URL.cpp

@@ -96,6 +96,20 @@ void URL::visit_edges(Cell::Visitor& visitor)
     visitor.visit(m_query.ptr());
 }
 
+// https://url.spec.whatwg.org/#dom-url-canparse
+bool URL::can_parse(JS::VM&, String const& url, Optional<String> const& base)
+{
+    // 1. Let parsedURL be the result of running the API URL parser on url with base, if given.
+    auto parsed_url = parse_api_url(url, base);
+
+    // 2. If parsedURL is failure, then return false.
+    if (!parsed_url.has_value())
+        return false;
+
+    // 3. Return true.
+    return true;
+}
+
 WebIDL::ExceptionOr<String> URL::href() const
 {
     auto& vm = realm().vm();

+ 3 - 0
Userland/Libraries/LibWeb/URL/URL.h

@@ -1,6 +1,7 @@
 /*
  * Copyright (c) 2021, Idan Horowitz <idan.horowitz@serenityos.org>
  * Copyright (c) 2021, the SerenityOS developers.
+ * Copyright (c) 2023, networkException <networkexception@serenityos.org>
  *
  * SPDX-License-Identifier: BSD-2-Clause
  */
@@ -23,6 +24,8 @@ public:
 
     virtual ~URL() override;
 
+    static bool can_parse(JS::VM&, String const& url, Optional<String> const& base = {});
+
     WebIDL::ExceptionOr<String> href() const;
     WebIDL::ExceptionOr<void> set_href(String const&);
 

+ 2 - 0
Userland/Libraries/LibWeb/URL/URL.idl

@@ -5,6 +5,8 @@
 interface URL {
     constructor(USVString url, optional USVString base);
 
+    static boolean canParse(USVString url, optional USVString base);
+
     stringifier attribute USVString href;
     readonly attribute USVString origin;
     attribute USVString protocol;