mirror of
https://github.com/RGBCube/serenity
synced 2025-07-24 18:47:41 +00:00
LibWeb: Call process_session_history_traversal_queue on history update
Spec declares that the updates to history should be synchronous on initial page load and on history pushState/replaceState.
This commit is contained in:
parent
9793d69d4f
commit
e2391105a1
4 changed files with 20 additions and 3 deletions
|
@ -0,0 +1 @@
|
||||||
|
test done!
|
|
@ -0,0 +1,16 @@
|
||||||
|
<script src="../include.js"></script>
|
||||||
|
<script>
|
||||||
|
asyncTest(done => {
|
||||||
|
|
||||||
|
history.replaceState({}, "hello", "history-replace-push-state-race.html");
|
||||||
|
history.replaceState({}, "hello", "history-replace-push-state-race.html");
|
||||||
|
|
||||||
|
// this test checks a regression for a crash in `finalize_a_same_document_navigation`
|
||||||
|
// when `target_navigable->get_session_history_entries()` does not contain `entry_to_replace` exactly.
|
||||||
|
//
|
||||||
|
// history.replaceState is one possible trigger for the crash.
|
||||||
|
|
||||||
|
println("test done!");
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -1877,6 +1877,9 @@ void perform_url_and_history_update_steps(DOM::Document& document, AK::URL new_u
|
||||||
// 1. Finalize a same-document navigation given traversable, navigable, newEntry, and entryToReplace.
|
// 1. Finalize a same-document navigation given traversable, navigable, newEntry, and entryToReplace.
|
||||||
finalize_a_same_document_navigation(*traversable, *navigable, new_entry, entry_to_replace);
|
finalize_a_same_document_navigation(*traversable, *navigable, new_entry, entry_to_replace);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// FIXME: Implement synchronous session history steps.
|
||||||
|
traversable->process_session_history_traversal_queue();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Navigable::scroll_offset_did_change()
|
void Navigable::scroll_offset_did_change()
|
||||||
|
|
|
@ -214,9 +214,6 @@ Optional<AK::URL> NavigableContainer::shared_attribute_processing_steps_for_ifra
|
||||||
// 4. If url matches about:blank and initialInsertion is true, then perform the URL and history update steps given element's content navigable's active document and url.
|
// 4. If url matches about:blank and initialInsertion is true, then perform the URL and history update steps given element's content navigable's active document and url.
|
||||||
if (url_matches_about_blank(url) && initial_insertion) {
|
if (url_matches_about_blank(url) && initial_insertion) {
|
||||||
perform_url_and_history_update_steps(*m_content_navigable->active_document(), url);
|
perform_url_and_history_update_steps(*m_content_navigable->active_document(), url);
|
||||||
// NOTE: Not in the spec but we need to make sure that "apply the history step" for initial navigation to about:blank
|
|
||||||
// is applied before subsequent navigation.
|
|
||||||
navigable()->traversable_navigable()->process_session_history_traversal_queue();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. Return url.
|
// 5. Return url.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue