ladybird/Tests/LibWeb/test-web/TestWebView.cpp
Andreas Kling 6be5e80025 LibWebView: Share content blocker lists as buffers
Add a repeatable blocker-list option that reads local list files in the
browser process. The files are concatenated into one buffer and shared
with WebContent through the content blocker IPC path when view options
are applied.

Parse the buffer in WebContent and reject malformed UTF-8 without
replacing the currently installed rules.
2026-05-21 21:16:56 +02:00

70 lines
2 KiB
C++

/*
* Copyright (c) 2024-2025, Tim Flynn <trflynn89@ladybird.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include "TestWebView.h"
#include <LibCore/AnonymousBuffer.h>
#include <LibGfx/Bitmap.h>
#include <LibGfx/ShareableBitmap.h>
namespace TestWeb {
NonnullOwnPtr<TestWebView> TestWebView::create(Core::AnonymousBuffer theme, Web::DevicePixelSize window_size)
{
auto view = adopt_own(*new TestWebView(move(theme), window_size));
view->initialize_client(CreateNewClient::Yes);
return view;
}
TestWebView::TestWebView(Core::AnonymousBuffer theme, Web::DevicePixelSize viewport_size)
: WebView::HeadlessWebView(move(theme), viewport_size)
, m_test_promise(TestPromise::construct())
{
}
void TestWebView::clear_content_blockers()
{
client().async_set_content_blockers(m_client_state.page_index, MUST(Core::AnonymousBuffer::create_with_size(0)));
}
pid_t TestWebView::web_content_pid() const
{
return client().pid();
}
NonnullRefPtr<Core::Promise<RefPtr<Gfx::Bitmap const>>> TestWebView::take_screenshot()
{
VERIFY(!m_pending_screenshot);
m_pending_screenshot = Core::Promise<RefPtr<Gfx::Bitmap const>>::construct();
client().async_take_document_screenshot(0);
return *m_pending_screenshot;
}
void TestWebView::did_receive_screenshot(Badge<WebView::WebContentClient>, Gfx::ShareableBitmap const& screenshot)
{
// NOTE: The screenshot may arrive after a timeout already completed the test and cleared m_pending_screenshot.
if (!m_pending_screenshot)
return;
auto pending_screenshot = move(m_pending_screenshot);
pending_screenshot->resolve(screenshot.bitmap());
}
void TestWebView::on_test_complete(TestCompletion completion)
{
m_pending_screenshot.clear();
m_pending_dialog = Web::Page::PendingDialog::None;
m_pending_prompt_text.clear();
m_is_fullscreen = Web::ViewportIsFullscreen::No;
client().async_set_viewport(m_client_state.page_index, viewport_size(), 1.0, Web::ViewportIsFullscreen::No);
m_test_promise->resolve(move(completion));
}
}