/* * Copyright (c) 2023, Andrew Kaster <akaster@serenityos.org> * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include <AK/ByteString.h> #include <AK/Optional.h> #include <AK/String.h> #include <AK/Vector.h> #include <LibURL/URL.h> #include <LibWebView/ProcessType.h> namespace WebView { enum class NewWindow { No, Yes, }; enum class ForceNewProcess { No, Yes, }; enum class AllowPopups { No, Yes, }; enum class DisableScripting { No, Yes, }; enum class DisableSQLDatabase { No, Yes, }; enum class EnableAutoplay { No, Yes, }; struct SystemDNS { }; struct DNSOverTLS { ByteString server_address; u16 port; }; struct DNSOverUDP { ByteString server_address; u16 port; }; using DNSSettings = Variant<SystemDNS, DNSOverTLS, DNSOverUDP>; constexpr inline u16 default_devtools_port = 6000; struct BrowserOptions { Vector<URL::URL> urls; Vector<ByteString> raw_urls; Vector<ByteString> certificates {}; NewWindow new_window { NewWindow::No }; ForceNewProcess force_new_process { ForceNewProcess::No }; AllowPopups allow_popups { AllowPopups::No }; DisableScripting disable_scripting { DisableScripting::No }; DisableSQLDatabase disable_sql_database { DisableSQLDatabase::No }; Optional<ProcessType> debug_helper_process {}; Optional<ProcessType> profile_helper_process {}; Optional<ByteString> webdriver_content_ipc_path {}; DNSSettings dns_settings { SystemDNS {} }; u16 devtools_port { default_devtools_port }; }; enum class IsLayoutTestMode { No, Yes, }; enum class LogAllJSExceptions { No, Yes, }; enum class EnableIDLTracing { No, Yes, }; enum class EnableHTTPCache { No, Yes, }; enum class DisableSiteIsolation { No, Yes, }; enum class ExposeInternalsObject { No, Yes, }; enum class ForceCPUPainting { No, Yes, }; enum class ForceFontconfig { No, Yes, }; enum class CollectGarbageOnEveryAllocation { No, Yes, }; enum class IsHeadless { No, Yes, }; enum class PaintViewportScrollbars { Yes, No, }; struct WebContentOptions { String command_line; String executable_path; Optional<ByteString> config_path {}; Optional<StringView> user_agent_preset {}; IsLayoutTestMode is_layout_test_mode { IsLayoutTestMode::No }; LogAllJSExceptions log_all_js_exceptions { LogAllJSExceptions::No }; DisableSiteIsolation disable_site_isolation { DisableSiteIsolation::No }; EnableIDLTracing enable_idl_tracing { EnableIDLTracing::No }; EnableHTTPCache enable_http_cache { EnableHTTPCache::No }; ExposeInternalsObject expose_internals_object { ExposeInternalsObject::No }; ForceCPUPainting force_cpu_painting { ForceCPUPainting::No }; ForceFontconfig force_fontconfig { ForceFontconfig::No }; EnableAutoplay enable_autoplay { EnableAutoplay::No }; CollectGarbageOnEveryAllocation collect_garbage_on_every_allocation { CollectGarbageOnEveryAllocation::No }; Optional<u16> echo_server_port {}; IsHeadless is_headless { IsHeadless::No }; PaintViewportScrollbars paint_viewport_scrollbars { PaintViewportScrollbars::Yes }; }; }