Skip to content

Commit 3f5a620

Browse files
TobyAsElinusg
authored andcommitted
WebContent+Friends: Add get_element_attribute IPC and plumbing
1 parent dfc3a47 commit 3f5a620

File tree

7 files changed

+30
-0
lines changed

7 files changed

+30
-0
lines changed

Userland/Applications/Browser/BrowserWindow.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,10 @@ void BrowserWindow::create_new_tab(URL url, bool activate)
590590
return active_tab().view().query_selector_all(start_node_id, selector);
591591
};
592592

593+
new_tab.on_get_element_attribute = [this](i32 element_id, String const& name) {
594+
return active_tab().view().get_element_attribute(element_id, name);
595+
};
596+
593597
new_tab.load(url);
594598

595599
dbgln_if(SPAM_DEBUG, "Added new tab {:p}, loading {}", &new_tab, url);

Userland/Applications/Browser/Tab.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ class Tab final : public GUI::Widget {
7070
Function<OrderedHashMap<String, String>()> on_get_session_storage_entries;
7171
Function<Optional<i32>()> on_get_document_element;
7272
Function<Optional<Vector<i32>>(i32 start_node_id, String const&)> on_query_selector_all;
73+
Function<Optional<String>(i32 element_id, String const&)> on_get_element_attribute;
7374

7475
enum class InspectorTarget {
7576
Document,

Userland/Libraries/LibWebView/OutOfProcessWebView.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,11 @@ Optional<Vector<i32>> OutOfProcessWebView::query_selector_all(i32 start_node_id,
525525
return client().query_selector_all(start_node_id, selector);
526526
}
527527

528+
Optional<String> OutOfProcessWebView::get_element_attribute(i32 element_id, String const& name)
529+
{
530+
return client().get_element_attribute(element_id, name);
531+
}
532+
528533
void OutOfProcessWebView::set_content_filters(Vector<String> filters)
529534
{
530535
client().async_set_content_filters(filters);

Userland/Libraries/LibWebView/OutOfProcessWebView.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ class OutOfProcessWebView final
6060

6161
Optional<i32> get_document_element();
6262
Optional<Vector<i32>> query_selector_all(i32 start_node_id, String const& selector);
63+
Optional<String> get_element_attribute(i32 element_id, String const& name);
6364

6465
void set_content_filters(Vector<String>);
6566
void set_proxy_mappings(Vector<String> proxies, HashMap<String, size_t> mappings);

Userland/Services/WebContent/ConnectionFromClient.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,23 @@ Messages::WebContentServer::QuerySelectorAllResponse ConnectionFromClient::query
473473
return { return_list };
474474
}
475475

476+
Messages::WebContentServer::GetElementAttributeResponse ConnectionFromClient::get_element_attribute(i32 element_id, String const& name)
477+
{
478+
auto* node = Web::DOM::Node::from_id(element_id);
479+
if (!node)
480+
return Optional<String> {};
481+
482+
if (!node->is_element())
483+
return Optional<String> {};
484+
485+
auto& element = verify_cast<Web::DOM::Element>(*node);
486+
487+
if (!element.has_attribute(name))
488+
return Optional<String> {};
489+
490+
return { element.get_attribute(name) };
491+
}
492+
476493
Messages::WebContentServer::GetSelectedTextResponse ConnectionFromClient::get_selected_text()
477494
{
478495
return page().focused_context().selected_text();

Userland/Services/WebContent/ConnectionFromClient.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ class ConnectionFromClient final
8181

8282
virtual Messages::WebContentServer::GetDocumentElementResponse get_document_element() override;
8383
virtual Messages::WebContentServer::QuerySelectorAllResponse query_selector_all(i32 start_node_id, String const& selector) override;
84+
virtual Messages::WebContentServer::GetElementAttributeResponse get_element_attribute(i32 element_id, String const& name) override;
8485

8586
virtual Messages::WebContentServer::GetLocalStorageEntriesResponse get_local_storage_entries() override;
8687
virtual Messages::WebContentServer::GetSessionStorageEntriesResponse get_session_storage_entries() override;

Userland/Services/WebContent/WebContentServer.ipc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ endpoint WebContentServer
3939

4040
get_document_element() => (Optional<i32> node_id)
4141
query_selector_all(i32 start_node_id, String selector) => (Optional<Vector<i32>> elements_ids)
42+
get_element_attribute(i32 element_id, String name) => (Optional<String> attribute)
4243

4344
run_javascript(String js_source) =|
4445

0 commit comments

Comments
 (0)