Browse Source

LibWeb: Determine the origin when navigating across documents

MacDue 2 years ago
parent
commit
8d2c2f7c52

+ 2 - 1
Userland/Libraries/LibWeb/DOM/Document.cpp

@@ -216,7 +216,7 @@ NonnullRefPtr<Document> Document::create_and_initialize(Type type, String conten
     // 8. Let document be a new Document,
     //    whose type is type,
     //    content type is contentType,
-    //    FIXME: origin is navigationParams's origin,
+    //    origin is navigationParams's origin,
     //    FIXME: policy container is navigationParams's policy container,
     //    FIXME: permissions policy is permissionsPolicy,
     //    FIXME: active sandboxing flag set is navigationParams's final sandboxing flag set,
@@ -226,6 +226,7 @@ NonnullRefPtr<Document> Document::create_and_initialize(Type type, String conten
     auto document = Document::create();
     document->m_type = type;
     document->m_content_type = content_type;
+    document->set_origin(navigation_params.origin);
 
     document->m_window = window;
     window->set_associated_document(*document);

+ 1 - 1
Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp

@@ -59,7 +59,7 @@ static HTML::Origin url_origin(AK::URL const& url)
 }
 
 // https://html.spec.whatwg.org/multipage/browsers.html#determining-the-origin
-static HTML::Origin determine_the_origin(BrowsingContext const& browsing_context, Optional<AK::URL> url, SandboxingFlagSet sandbox_flags, Optional<HTML::Origin> invocation_origin)
+HTML::Origin determine_the_origin(BrowsingContext const& browsing_context, Optional<AK::URL> url, SandboxingFlagSet sandbox_flags, Optional<HTML::Origin> invocation_origin)
 {
     // 1. If sandboxFlags has its sandboxed origin browsing context flag set, then return a new opaque origin.
     if (sandbox_flags.flags & SandboxingFlagSet::SandboxedOrigin) {

+ 2 - 0
Userland/Libraries/LibWeb/HTML/BrowsingContext.h

@@ -157,4 +157,6 @@ private:
     String m_name;
 };
 
+HTML::Origin determine_the_origin(BrowsingContext const& browsing_context, Optional<AK::URL> url, SandboxingFlagSet sandbox_flags, Optional<HTML::Origin> invocation_origin);
+
 }

+ 9 - 2
Userland/Libraries/LibWeb/Loader/FrameLoader.cpp

@@ -367,15 +367,22 @@ void FrameLoader::resource_did_load()
         dbgln_if(RESOURCE_DEBUG, "This content has MIME type '{}', encoding unknown", resource()->mime_type());
     }
 
+    auto final_sandboxing_flag_set = HTML::SandboxingFlagSet {};
+
+    // (Part of https://html.spec.whatwg.org/#navigating-across-documents)
+    // 3. Let responseOrigin be the result of determining the origin given browsingContext, resource's url, finalSandboxFlags, and incumbentNavigationOrigin.
+    // FIXME: Pass incumbentNavigationOrigin
+    auto response_origin = HTML::determine_the_origin(browsing_context(), url, final_sandboxing_flag_set, {});
+
     auto response = make<Fetch::Infrastructure::Response>();
     response->url_list().append(url);
     HTML::NavigationParams navigation_params {
         .id = {},
         .request = nullptr,
         .response = move(response),
-        .origin = HTML::Origin {},
+        .origin = move(response_origin),
         .policy_container = HTML::PolicyContainer {},
-        .final_sandboxing_flag_set = HTML::SandboxingFlagSet {},
+        .final_sandboxing_flag_set = move(final_sandboxing_flag_set),
         .cross_origin_opener_policy = HTML::CrossOriginOpenerPolicy {},
         .coop_enforcement_result = HTML::CrossOriginOpenerPolicyEnforcementResult {},
         .reserved_environment = {},