summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2023-05-28 20:54:33 +0200
committerAndreas Kling <kling@serenityos.org>2023-05-28 22:03:57 +0200
commit097b5e4803dff84b97821a0b5ce5f5ac0eb6b6ff (patch)
treecf557093fe7df02897c6341520cb44f9d3b7a2ef
parent58c1cb80bbaeb4edb6b869afc2f68b5e79702c07 (diff)
downloadserenity-097b5e4803dff84b97821a0b5ce5f5ac0eb6b6ff.zip
WebContent+headless-browser: Use document.body.innerText for text tests
This should be less fickle than the "select all & copy selected text" trick we were doing earlier.
-rw-r--r--Userland/Services/WebContent/ConnectionFromClient.cpp10
-rw-r--r--Userland/Services/WebContent/ConnectionFromClient.h1
-rw-r--r--Userland/Services/WebContent/WebContentServer.ipc1
-rw-r--r--Userland/Utilities/headless-browser.cpp11
4 files changed, 19 insertions, 4 deletions
diff --git a/Userland/Services/WebContent/ConnectionFromClient.cpp b/Userland/Services/WebContent/ConnectionFromClient.cpp
index e56628039c..e93fa55e2e 100644
--- a/Userland/Services/WebContent/ConnectionFromClient.cpp
+++ b/Userland/Services/WebContent/ConnectionFromClient.cpp
@@ -636,6 +636,16 @@ Messages::WebContentServer::DumpLayoutTreeResponse ConnectionFromClient::dump_la
return builder.to_deprecated_string();
}
+Messages::WebContentServer::DumpTextResponse ConnectionFromClient::dump_text()
+{
+ auto* document = page().top_level_browsing_context().active_document();
+ if (!document)
+ return DeprecatedString { "(no DOM tree)" };
+ if (!document->body())
+ return DeprecatedString { "(no body)" };
+ return document->body()->inner_text();
+}
+
void ConnectionFromClient::set_content_filters(Vector<String> const& filters)
{
Web::ContentFilter::the().set_patterns(filters).release_value_but_fixme_should_propagate_errors();
diff --git a/Userland/Services/WebContent/ConnectionFromClient.h b/Userland/Services/WebContent/ConnectionFromClient.h
index d2ed7a58bc..a8d66c5ed6 100644
--- a/Userland/Services/WebContent/ConnectionFromClient.h
+++ b/Userland/Services/WebContent/ConnectionFromClient.h
@@ -74,6 +74,7 @@ private:
virtual void inspect_accessibility_tree() override;
virtual Messages::WebContentServer::GetHoveredNodeIdResponse get_hovered_node_id() override;
virtual Messages::WebContentServer::DumpLayoutTreeResponse dump_layout_tree() override;
+ virtual Messages::WebContentServer::DumpTextResponse dump_text() override;
virtual void set_content_filters(Vector<String> const&) override;
virtual void set_autoplay_allowed_on_all_websites() override;
virtual void set_autoplay_allowlist(Vector<String> const& allowlist) override;
diff --git a/Userland/Services/WebContent/WebContentServer.ipc b/Userland/Services/WebContent/WebContentServer.ipc
index 748b6deb87..ceea4f0375 100644
--- a/Userland/Services/WebContent/WebContentServer.ipc
+++ b/Userland/Services/WebContent/WebContentServer.ipc
@@ -50,6 +50,7 @@ endpoint WebContentServer
run_javascript(DeprecatedString js_source) =|
dump_layout_tree() => (DeprecatedString dump)
+ dump_text() => (DeprecatedString dump)
get_selected_text() => (DeprecatedString selection)
select_all() =|
diff --git a/Userland/Utilities/headless-browser.cpp b/Userland/Utilities/headless-browser.cpp
index bdb74dc881..c9e055a19a 100644
--- a/Userland/Utilities/headless-browser.cpp
+++ b/Userland/Utilities/headless-browser.cpp
@@ -80,6 +80,11 @@ public:
return String::from_deprecated_string(client().dump_layout_tree());
}
+ ErrorOr<String> dump_text()
+ {
+ return String::from_deprecated_string(client().dump_text());
+ }
+
private:
HeadlessWebContentView() = default;
@@ -191,8 +196,7 @@ static ErrorOr<String> run_one_test(HeadlessWebContentView& view, StringView inp
};
} else if (mode == TestMode::Text) {
view.on_load_finish = [&](auto const&) {
- view.select_all();
- result = String::from_utf8(view.selected_text()).release_value_but_fixme_should_propagate_errors();
+ result = view.dump_text().release_value_but_fixme_should_propagate_errors();
loop.quit(0);
};
}
@@ -384,8 +388,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
};
} else if (dump_text) {
view->on_load_finish = [&](auto const&) {
- view->select_all();
- auto text = view->selected_text();
+ auto text = view->dump_text().release_value_but_fixme_should_propagate_errors();
out("{}", text);
fflush(stdout);