mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 10:58:12 +00:00
LibWeb: Don't navigate() to about:blank when making a fresh Traversable
This matches the behavior of the window open steps, and should probably be a spec issue :yakplus:
This commit is contained in:
parent
889b903e40
commit
53273e2037
3 changed files with 24 additions and 6 deletions
|
@ -11,6 +11,7 @@
|
||||||
#include <LibWeb/HTML/DocumentState.h>
|
#include <LibWeb/HTML/DocumentState.h>
|
||||||
#include <LibWeb/HTML/Navigation.h>
|
#include <LibWeb/HTML/Navigation.h>
|
||||||
#include <LibWeb/HTML/NavigationParams.h>
|
#include <LibWeb/HTML/NavigationParams.h>
|
||||||
|
#include <LibWeb/HTML/Parser/HTMLParser.h>
|
||||||
#include <LibWeb/HTML/SessionHistoryEntry.h>
|
#include <LibWeb/HTML/SessionHistoryEntry.h>
|
||||||
#include <LibWeb/HTML/TraversableNavigable.h>
|
#include <LibWeb/HTML/TraversableNavigable.h>
|
||||||
#include <LibWeb/HTML/Window.h>
|
#include <LibWeb/HTML/Window.h>
|
||||||
|
@ -118,11 +119,28 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<TraversableNavigable>> TraversableNavigable
|
||||||
{
|
{
|
||||||
// 1. Let traversable be the result of creating a new top-level traversable given null and the empty string.
|
// 1. Let traversable be the result of creating a new top-level traversable given null and the empty string.
|
||||||
auto traversable = TRY(create_a_new_top_level_traversable(page, nullptr, {}));
|
auto traversable = TRY(create_a_new_top_level_traversable(page, nullptr, {}));
|
||||||
|
page->set_top_level_traversable(traversable);
|
||||||
|
|
||||||
// 2. Navigate traversable to initialNavigationURL using traversable's active document, with documentResource set to initialNavigationPostResource.
|
// AD-HOC: Mark the about:blank document as finished parsing if we're only going to about:blank
|
||||||
TRY(traversable->navigate({ .url = initial_navigation_url,
|
// Skip the initial navigation as well. This matches the behavior of the window open steps.
|
||||||
.source_document = *traversable->active_document(),
|
|
||||||
.document_resource = initial_navigation_post_resource }));
|
if (url_matches_about_blank(initial_navigation_url)) {
|
||||||
|
Platform::EventLoopPlugin::the().deferred_invoke([traversable, initial_navigation_url] {
|
||||||
|
// FIXME: We do this other places too when creating a new about:blank document. Perhaps it's worth a spec issue?
|
||||||
|
HTML::HTMLParser::the_end(*traversable->active_document());
|
||||||
|
|
||||||
|
// FIXME: If we perform the URL and history update steps here, we start hanging tests and the UI process will
|
||||||
|
// try to load() the initial URLs passed on the command line before we finish processing the events here.
|
||||||
|
// However, because we call this before the PageClient is fully initialized... that gets awkward.
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
// 2. Navigate traversable to initialNavigationURL using traversable's active document, with documentResource set to initialNavigationPostResource.
|
||||||
|
TRY(traversable->navigate({ .url = initial_navigation_url,
|
||||||
|
.source_document = *traversable->active_document(),
|
||||||
|
.document_resource = initial_navigation_post_resource }));
|
||||||
|
}
|
||||||
|
|
||||||
// 3. Return traversable.
|
// 3. Return traversable.
|
||||||
return traversable;
|
return traversable;
|
||||||
|
|
|
@ -61,7 +61,7 @@ ErrorOr<JS::NonnullGCPtr<SVGDecodedImageData>> SVGDecodedImageData::create(JS::R
|
||||||
auto page_client = SVGPageClient::create(Bindings::main_thread_vm(), host_page);
|
auto page_client = SVGPageClient::create(Bindings::main_thread_vm(), host_page);
|
||||||
auto page = Page::create(Bindings::main_thread_vm(), *page_client);
|
auto page = Page::create(Bindings::main_thread_vm(), *page_client);
|
||||||
page_client->m_svg_page = page.ptr();
|
page_client->m_svg_page = page.ptr();
|
||||||
page->set_top_level_traversable(MUST(Web::HTML::TraversableNavigable::create_a_fresh_top_level_traversable(*page, AK::URL("about:blank"))));
|
page->set_top_level_traversable(MUST(Web::HTML::TraversableNavigable::create_a_new_top_level_traversable(*page, nullptr, {})));
|
||||||
JS::NonnullGCPtr<HTML::Navigable> navigable = page->top_level_traversable();
|
JS::NonnullGCPtr<HTML::Navigable> navigable = page->top_level_traversable();
|
||||||
auto response = Fetch::Infrastructure::Response::create(navigable->vm());
|
auto response = Fetch::Infrastructure::Response::create(navigable->vm());
|
||||||
response->url_list().append(url);
|
response->url_list().append(url);
|
||||||
|
|
|
@ -19,7 +19,7 @@ PageHost::PageHost(ConnectionFromClient& client)
|
||||||
: m_client(client)
|
: m_client(client)
|
||||||
{
|
{
|
||||||
auto& first_page = create_page();
|
auto& first_page = create_page();
|
||||||
first_page.page().set_top_level_traversable(Web::HTML::TraversableNavigable::create_a_fresh_top_level_traversable(first_page.page(), AK::URL("about:blank")).release_value_but_fixme_should_propagate_errors());
|
Web::HTML::TraversableNavigable::create_a_fresh_top_level_traversable(first_page.page(), AK::URL("about:blank")).release_value_but_fixme_should_propagate_errors();
|
||||||
}
|
}
|
||||||
|
|
||||||
PageClient& PageHost::create_page()
|
PageClient& PageHost::create_page()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue