Sfoglia il codice sorgente

LibWeb: Support parsing a URL relative to environment settings object

Idan Horowitz 2 anni fa
parent
commit
efe94d9040

+ 16 - 0
Userland/Libraries/LibWeb/HTML/Scripting/Environments.cpp

@@ -151,6 +151,22 @@ void EnvironmentSettingsObject::prepare_to_run_callback()
         context->skip_when_determining_incumbent_counter++;
         context->skip_when_determining_incumbent_counter++;
 }
 }
 
 
+// https://html.spec.whatwg.org/multipage/urls-and-fetching.html#parse-a-url
+AK::URL EnvironmentSettingsObject::parse_url(StringView url)
+{
+    // 1. Let encoding be document's character encoding, if document was given, and environment settings object's API URL character encoding otherwise.
+    // FIXME: Pass in environment settings object's API URL character encoding.
+
+    // 2. Let baseURL be document's base URL, if document was given, and environment settings object's API base URL otherwise.
+    auto base_url = api_base_url();
+
+    // 3. Let urlRecord be the result of applying the URL parser to url, with baseURL and encoding.
+    // 4. If urlRecord is failure, then return failure.
+    // 5. Let urlString be the result of applying the URL serializer to urlRecord.
+    // 6. Return urlString as the resulting URL string and urlRecord as the resulting URL record.
+    return base_url.complete_url(url);
+}
+
 // https://html.spec.whatwg.org/multipage/webappapis.html#clean-up-after-running-a-callback
 // https://html.spec.whatwg.org/multipage/webappapis.html#clean-up-after-running-a-callback
 void EnvironmentSettingsObject::clean_up_after_running_callback()
 void EnvironmentSettingsObject::clean_up_after_running_callback()
 {
 {

+ 2 - 0
Userland/Libraries/LibWeb/HTML/Scripting/Environments.h

@@ -85,6 +85,8 @@ struct EnvironmentSettingsObject
     // https://html.spec.whatwg.org/multipage/webappapis.html#concept-settings-object-cross-origin-isolated-capability
     // https://html.spec.whatwg.org/multipage/webappapis.html#concept-settings-object-cross-origin-isolated-capability
     virtual CanUseCrossOriginIsolatedAPIs cross_origin_isolated_capability() = 0;
     virtual CanUseCrossOriginIsolatedAPIs cross_origin_isolated_capability() = 0;
 
 
+    AK::URL parse_url(StringView);
+
     JS::Realm& realm();
     JS::Realm& realm();
     JS::Object& global_object();
     JS::Object& global_object();
     EventLoop& responsible_event_loop();
     EventLoop& responsible_event_loop();