diff --git a/Userland/Applications/Browser/BrowserWindow.cpp b/Userland/Applications/Browser/BrowserWindow.cpp index 1645ca51e4..41346b8728 100644 --- a/Userland/Applications/Browser/BrowserWindow.cpp +++ b/Userland/Applications/Browser/BrowserWindow.cpp @@ -606,6 +606,10 @@ void BrowserWindow::create_new_tab(URL url, bool activate) return active_tab().view().get_computed_value_for_element(element_id, property_name); }; + new_tab.webdriver_endpoints().on_get_element_tag_name = [this](i32 element_id) { + return active_tab().view().get_element_tag_name(element_id); + }; + new_tab.load(url); dbgln_if(SPAM_DEBUG, "Added new tab {:p}, loading {}", &new_tab, url); diff --git a/Userland/Applications/Browser/WebDriverEndpoints.h b/Userland/Applications/Browser/WebDriverEndpoints.h index 4af693b987..732304fb0e 100644 --- a/Userland/Applications/Browser/WebDriverEndpoints.h +++ b/Userland/Applications/Browser/WebDriverEndpoints.h @@ -23,6 +23,7 @@ public: Function(i32 element_id, String const&)> on_get_element_property; Function on_get_active_documents_type; Function on_get_computed_value_for_element; + Function on_get_element_tag_name; }; } diff --git a/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp b/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp index a50d6fabcc..dd745842cd 100644 --- a/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp +++ b/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp @@ -545,6 +545,11 @@ String OutOfProcessWebView::get_computed_value_for_element(i32 element_id, Strin return client().get_computed_value_for_element(element_id, property_name); } +String OutOfProcessWebView::get_element_tag_name(i32 element_id) +{ + return client().get_element_tag_name(element_id); +} + void OutOfProcessWebView::set_content_filters(Vector filters) { client().async_set_content_filters(filters); diff --git a/Userland/Libraries/LibWebView/OutOfProcessWebView.h b/Userland/Libraries/LibWebView/OutOfProcessWebView.h index a684433cb6..617f1bf1b4 100644 --- a/Userland/Libraries/LibWebView/OutOfProcessWebView.h +++ b/Userland/Libraries/LibWebView/OutOfProcessWebView.h @@ -64,6 +64,7 @@ public: Optional get_element_property(i32 element_id, String const& name); String get_active_documents_type(); String get_computed_value_for_element(i32 element_id, String const& property_name); + String get_element_tag_name(i32 element_id); void set_content_filters(Vector); void set_proxy_mappings(Vector proxies, HashMap mappings); diff --git a/Userland/Services/WebContent/ConnectionFromClient.cpp b/Userland/Services/WebContent/ConnectionFromClient.cpp index c97d52c99f..5d228d2a7a 100644 --- a/Userland/Services/WebContent/ConnectionFromClient.cpp +++ b/Userland/Services/WebContent/ConnectionFromClient.cpp @@ -561,6 +561,20 @@ Messages::WebContentServer::GetComputedValueForElementResponse ConnectionFromCli return { style_value->to_string() }; } +Messages::WebContentServer::GetElementTagNameResponse ConnectionFromClient::get_element_tag_name(i32 element_id) +{ + auto* node = Web::DOM::Node::from_id(element_id); + if (!node) + return { "" }; + + if (!node->is_element()) + return { "" }; + + auto& element = verify_cast(*node); + + return { element.tag_name() }; +} + Messages::WebContentServer::GetSelectedTextResponse ConnectionFromClient::get_selected_text() { return page().focused_context().selected_text(); diff --git a/Userland/Services/WebContent/ConnectionFromClient.h b/Userland/Services/WebContent/ConnectionFromClient.h index c9942b42f5..13ae9f6dbe 100644 --- a/Userland/Services/WebContent/ConnectionFromClient.h +++ b/Userland/Services/WebContent/ConnectionFromClient.h @@ -85,6 +85,7 @@ private: virtual Messages::WebContentServer::GetElementPropertyResponse get_element_property(i32 element_id, String const& name) override; virtual Messages::WebContentServer::GetActiveDocumentsTypeResponse get_active_documents_type() override; virtual Messages::WebContentServer::GetComputedValueForElementResponse get_computed_value_for_element(i32 element_id, String const& property_name) override; + virtual Messages::WebContentServer::GetElementTagNameResponse get_element_tag_name(i32 element_id) override; virtual Messages::WebContentServer::GetLocalStorageEntriesResponse get_local_storage_entries() override; virtual Messages::WebContentServer::GetSessionStorageEntriesResponse get_session_storage_entries() override; diff --git a/Userland/Services/WebContent/WebContentServer.ipc b/Userland/Services/WebContent/WebContentServer.ipc index b8bd3c7952..b22ff042db 100644 --- a/Userland/Services/WebContent/WebContentServer.ipc +++ b/Userland/Services/WebContent/WebContentServer.ipc @@ -43,6 +43,7 @@ endpoint WebContentServer get_element_property(i32 element_id, String name) => (Optional property) get_active_documents_type() => (String type) get_computed_value_for_element(i32 element_id, String property_name) => (String computed_value) + get_element_tag_name(i32 element_id) => (String tag_name) run_javascript(String js_source) =|