Skip to content

Commit

Permalink
LibWeb: Fill-in some fixmes around sandboxing flag sets
Browse files Browse the repository at this point in the history
...Including a couple of steps in
obtain_a_browsing_context_to_use_for_a_navigation_response() which
didn't have FIXMEs.

No apparent changes on WPT.
  • Loading branch information
AtkinsSJ committed Nov 25, 2024
1 parent 033bcb7 commit c75d78e
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 6 deletions.
7 changes: 7 additions & 0 deletions Libraries/LibWeb/DOM/Document.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,10 @@ static GC::Ref<HTML::BrowsingContext> obtain_a_browsing_context_to_use_for_a_nav
VERIFY(navigation_coop.value == HTML::OpenerPolicyValue::UnsafeNone);

// 2. Assert: newBrowsingContext's popup sandboxing flag set is empty.
VERIFY(is_empty(new_browsing_context->popup_sandboxing_flag_set()));

// 3. Set newBrowsingContext's popup sandboxing flag set to a clone of sandboxFlags.
new_browsing_context->set_popup_sandboxing_flag_set(sandbox_flags);
}

// 6. Return newBrowsingContext.
Expand Down Expand Up @@ -3215,6 +3217,11 @@ HTML::SandboxingFlagSet Document::active_sandboxing_flag_set() const
return m_active_sandboxing_flag_set;
}

void Document::set_active_sandboxing_flag_set(HTML::SandboxingFlagSet sandboxing_flag_set)
{
m_active_sandboxing_flag_set = sandboxing_flag_set;
}

HTML::PolicyContainer Document::policy_container() const
{
return m_policy_container;
Expand Down
1 change: 1 addition & 0 deletions Libraries/LibWeb/DOM/Document.h
Original file line number Diff line number Diff line change
Expand Up @@ -526,6 +526,7 @@ class Document

// https://html.spec.whatwg.org/multipage/origin.html#active-sandboxing-flag-set
HTML::SandboxingFlagSet active_sandboxing_flag_set() const;
void set_active_sandboxing_flag_set(HTML::SandboxingFlagSet);

// https://html.spec.whatwg.org/multipage/dom.html#concept-document-policy-container
HTML::PolicyContainer policy_container() const;
Expand Down
5 changes: 3 additions & 2 deletions Libraries/LibWeb/HTML/BrowsingContext.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ WebIDL::ExceptionOr<BrowsingContext::BrowsingContextAndDocument> BrowsingContext
browsing_context->m_virtual_browsing_context_group_id = creator->browsing_context()->top_level_browsing_context()->m_virtual_browsing_context_group_id;
}

// 6. Let sandboxFlags be the result of determining the creation sandboxing flags given browsingContext and embedder.
// FIXME: 6. Let sandboxFlags be the result of determining the creation sandboxing flags given browsingContext and embedder.
SandboxingFlagSet sandbox_flags = {};

// 7. Let origin be the result of determining the origin given about:blank, sandboxFlags, and creatorOrigin.
Expand Down Expand Up @@ -236,7 +236,8 @@ WebIDL::ExceptionOr<BrowsingContext::BrowsingContextAndDocument> BrowsingContext

// FIXME: permissions policy: permissionsPolicy

// FIXME: active sandboxing flag set: sandboxFlags
// active sandboxing flag set: sandboxFlags
document->set_active_sandboxing_flag_set(sandbox_flags);

// load timing info: loadTimingInfo
document->set_load_timing_info(load_timing_info);
Expand Down
10 changes: 10 additions & 0 deletions Libraries/LibWeb/HTML/BrowsingContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,10 @@ class BrowsingContext final : public JS::Cell {

// https://html.spec.whatwg.org/multipage/origin.html#one-permitted-sandboxed-navigator
BrowsingContext const* the_one_permitted_sandboxed_navigator() const;
void set_the_one_permitted_sandboxed_navigator(BrowsingContext const*)
{
// FIXME: Implement this
}

bool has_navigable_been_destroyed() const;

Expand All @@ -132,6 +136,9 @@ class BrowsingContext final : public JS::Cell {

void set_is_popup(TokenizedFeature::Popup is_popup) { m_is_popup = is_popup; }

SandboxingFlagSet popup_sandboxing_flag_set() const { return m_popup_sandboxing_flag_set; }
void set_popup_sandboxing_flag_set(SandboxingFlagSet value) { m_popup_sandboxing_flag_set = value; }

private:
explicit BrowsingContext(GC::Ref<Page>);

Expand All @@ -151,6 +158,9 @@ class BrowsingContext final : public JS::Cell {
// https://html.spec.whatwg.org/multipage/browsers.html#is-popup
TokenizedFeature::Popup m_is_popup { TokenizedFeature::Popup::No };

// https://html.spec.whatwg.org/multipage/browsers.html#popup-sandboxing-flag-set
SandboxingFlagSet m_popup_sandboxing_flag_set {};

// https://html.spec.whatwg.org/multipage/document-sequences.html#is-auxiliary
bool m_is_auxiliary { false };

Expand Down
11 changes: 7 additions & 4 deletions Libraries/LibWeb/HTML/Navigable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -476,13 +476,16 @@ Navigable::ChosenNavigable Navigable::choose_a_navigable(StringView name, Tokeni
// 1. Set chosen to the result of creating a new top-level traversable given currentNavigable's active browsing context and targetName.
chosen = create_new_traversable->function()(active_browsing_context());

// FIXME: 2. If sandboxingFlagSet's sandboxed navigation browsing context flag is set,
// 2. If sandboxingFlagSet's sandboxed navigation browsing context flag is set,
// then set chosen's active browsing context's one permitted sandboxed navigator to currentNavigable's active browsing context.
if (has_flag(sandboxing_flag_set, SandboxingFlagSet::SandboxedNavigation))
chosen->active_browsing_context()->set_the_one_permitted_sandboxed_navigator(active_browsing_context());
}

// FIXME: 10. If sandboxingFlagSet's sandbox propagates to auxiliary browsing contexts flag is set,
// then all the flags that are set in sandboxingFlagSet must be set in chosen's active browsing context's popup sandboxing flag set.
// Our BrowsingContexts do not have SandboxingFlagSets yet, only documents do
// 10. If sandboxingFlagSet's sandbox propagates to auxiliary browsing contexts flag is set,
// then all the flags that are set in sandboxingFlagSet must be set in chosen's active browsing context's popup sandboxing flag set.
if (has_flag(sandboxing_flag_set, SandboxingFlagSet::SandboxPropagatesToAuxiliaryBrowsingContexts))
chosen->active_browsing_context()->set_popup_sandboxing_flag_set(chosen->active_browsing_context()->popup_sandboxing_flag_set() | sandboxing_flag_set);
}

// --> If the user agent has been configured such that in this instance t will reuse current
Expand Down

0 comments on commit c75d78e

Please sign in to comment.