Skip to content

Commit

Permalink
WebContent: Use window open steps to create a new window with WebDriver
Browse files Browse the repository at this point in the history
This matches the specification steps and fixes a WPT regression caused
by us not loading `about:blank` when opening a new window.

(cherry picked from commit eca23183904851a7daedeab895448a8ba1590631)
  • Loading branch information
tcl3 authored and nico committed Nov 24, 2024
1 parent 72c0978 commit fdd42f5
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions Userland/Services/WebContent/WebDriverConnection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
#include <LibWeb/HTML/HTMLSelectElement.h>
#include <LibWeb/HTML/Scripting/TemporaryExecutionContext.h>
#include <LibWeb/HTML/TraversableNavigable.h>
#include <LibWeb/HTML/WindowProxy.h>
#include <LibWeb/Page/Page.h>
#include <LibWeb/Platform/EventLoopPlugin.h>
#include <LibWeb/Platform/Timer.h>
Expand Down Expand Up @@ -500,10 +501,15 @@ Messages::WebDriverClient::NewWindowResponse WebDriverConnection::new_window(Jso
// is "window", and the implementation supports multiple browsing contexts in separate OS windows, the
// created browsing context should be in a new OS window. In all other cases the details of how the browsing
// context is presented to the user are implementation defined.
auto [navigable, window_type] = current_browsing_context().top_level_traversable()->choose_a_navigable("_blank"sv, Web::HTML::TokenizedFeature::NoOpener::Yes, Web::HTML::ActivateTab::No);
auto* active_window = current_browsing_context().active_window();
VERIFY(active_window);
{
Web::HTML::TemporaryExecutionContext execution_context { active_window->document()->relevant_settings_object() };
MUST(active_window->window_open_steps("about:blank"sv, ""sv, "noopener"sv));
}

// 6. Let handle be the associated window handle of the newly created window.
auto handle = navigable->traversable_navigable()->window_handle();
auto handle = current_browsing_context().top_level_traversable()->window_handle();

// 7. Let type be "tab" if the newly created window shares an OS-level window with the current browsing context, or "window" otherwise.
auto type = "tab"sv;
Expand Down

0 comments on commit fdd42f5

Please sign in to comment.