فهرست منبع

LibWeb: Remove FrameLoader

This class is no longer used, now that we've moved to navigables.
Andreas Kling 1 سال پیش
والد
کامیت
51caa14381
26فایلهای تغییر یافته به همراه47 افزوده شده و 458 حذف شده
  1. 3 6
      Ladybird/Android/src/main/cpp/WebContentService.cpp
  2. 3 6
      Ladybird/WebContent/main.cpp
  3. 0 1
      Meta/gn/secondary/Userland/Libraries/LibWeb/Loader/BUILD.gn
  4. 0 1
      Userland/Libraries/LibWeb/CMakeLists.txt
  5. 1 0
      Userland/Libraries/LibWeb/CSS/MediaQuery.cpp
  6. 1 0
      Userland/Libraries/LibWeb/CSS/StyleValues/IdentifierStyleValue.cpp
  7. 0 1
      Userland/Libraries/LibWeb/Forward.h
  8. 0 1
      Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp
  9. 0 5
      Userland/Libraries/LibWeb/HTML/BrowsingContext.h
  10. 1 0
      Userland/Libraries/LibWeb/HTML/BrowsingContextGroup.cpp
  11. 0 1
      Userland/Libraries/LibWeb/HTML/HTMLHyperlinkElementUtils.cpp
  12. 1 0
      Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp
  13. 1 0
      Userland/Libraries/LibWeb/HTML/Navigable.cpp
  14. 1 0
      Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp
  15. 1 0
      Userland/Libraries/LibWeb/Internals/Internals.cpp
  16. 1 0
      Userland/Libraries/LibWeb/Layout/Node.cpp
  17. 26 3
      Userland/Libraries/LibWeb/Loader/FileDirectoryLoader.cpp
  18. 4 0
      Userland/Libraries/LibWeb/Loader/FileDirectoryLoader.h
  19. 0 365
      Userland/Libraries/LibWeb/Loader/FrameLoader.cpp
  20. 0 60
      Userland/Libraries/LibWeb/Loader/FrameLoader.h
  21. 0 5
      Userland/Libraries/LibWeb/Page/Page.cpp
  22. 0 2
      Userland/Libraries/LibWeb/Page/Page.h
  23. 1 0
      Userland/Libraries/LibWeb/Painting/MediaPaintable.cpp
  24. 1 0
      Userland/Libraries/LibWeb/SVG/SVGDecodedImageData.cpp
  25. 1 0
      Userland/Libraries/LibWeb/SVG/SVGTitleElement.cpp
  26. 0 1
      Userland/Utilities/headless-browser.cpp

+ 3 - 6
Ladybird/Android/src/main/cpp/WebContentService.cpp

@@ -21,7 +21,7 @@
 #include <LibWeb/Bindings/MainThreadVM.h>
 #include <LibWeb/HTML/Window.h>
 #include <LibWeb/Loader/ContentFilter.h>
-#include <LibWeb/Loader/FrameLoader.h>
+#include <LibWeb/Loader/FileDirectoryLoader.h>
 #include <LibWeb/Loader/ResourceLoader.h>
 #include <LibWeb/PermissionsPolicy/AutoplayAllowlist.h>
 #include <LibWeb/Platform/AudioCodecPluginAgnostic.h>
@@ -59,8 +59,6 @@ ErrorOr<int> service_main(int ipc_socket, int fd_passing_socket)
         return Error::from_string_literal("Don't know how to initialize audio in this configuration!");
     });
 
-    Web::FrameLoader::set_default_favicon_path(DeprecatedString::formatted("{}/res/icons/16x16/app-browser.png", s_serenity_resource_root));
-
     auto request_server_client = TRY(bind_request_server_service());
     Web::ResourceLoader::initialize(TRY(WebView::RequestServerAdapter::try_create(move(request_server_client))));
 
@@ -72,9 +70,8 @@ ErrorOr<int> service_main(int ipc_socket, int fd_passing_socket)
     Web::HTML::Window::set_internals_object_exposed(is_layout_test_mode);
     Web::Platform::FontPlugin::install(*new Ladybird::FontPlugin(is_layout_test_mode));
 
-    Web::FrameLoader::set_resource_directory_url(DeprecatedString::formatted("file://{}/res", s_serenity_resource_root));
-    Web::FrameLoader::set_error_page_url(DeprecatedString::formatted("file://{}/res/html/error.html", s_serenity_resource_root));
-    Web::FrameLoader::set_directory_page_url(DeprecatedString::formatted("file://{}/res/html/directory.html", s_serenity_resource_root));
+    Web::set_resource_directory_url(DeprecatedString::formatted("file://{}/res", s_serenity_resource_root));
+    Web::set_directory_page_url(DeprecatedString::formatted("file://{}/res/html/directory.html", s_serenity_resource_root));
 
     TRY(Web::Bindings::initialize_main_thread_vm());
 

+ 3 - 6
Ladybird/WebContent/main.cpp

@@ -21,7 +21,7 @@
 #include <LibWeb/Bindings/MainThreadVM.h>
 #include <LibWeb/HTML/Window.h>
 #include <LibWeb/Loader/ContentFilter.h>
-#include <LibWeb/Loader/FrameLoader.h>
+#include <LibWeb/Loader/FileDirectoryLoader.h>
 #include <LibWeb/Loader/ResourceLoader.h>
 #include <LibWeb/PermissionsPolicy/AutoplayAllowlist.h>
 #include <LibWeb/Platform/AudioCodecPluginAgnostic.h>
@@ -70,8 +70,6 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
 #endif
     });
 
-    Web::FrameLoader::set_default_favicon_path(DeprecatedString::formatted("{}/res/icons/16x16/app-browser.png", s_serenity_resource_root));
-
     int webcontent_fd_passing_socket { -1 };
     bool is_layout_test_mode = false;
     bool use_lagom_networking = false;
@@ -98,9 +96,8 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
 
     Web::Platform::FontPlugin::install(*new Ladybird::FontPlugin(is_layout_test_mode));
 
-    Web::FrameLoader::set_resource_directory_url(DeprecatedString::formatted("file://{}/res", s_serenity_resource_root));
-    Web::FrameLoader::set_error_page_url(DeprecatedString::formatted("file://{}/res/html/error.html", s_serenity_resource_root));
-    Web::FrameLoader::set_directory_page_url(DeprecatedString::formatted("file://{}/res/html/directory.html", s_serenity_resource_root));
+    Web::set_resource_directory_url(DeprecatedString::formatted("file://{}/res", s_serenity_resource_root));
+    Web::set_directory_page_url(DeprecatedString::formatted("file://{}/res/html/directory.html", s_serenity_resource_root));
 
     TRY(Web::Bindings::initialize_main_thread_vm());
 

+ 0 - 1
Meta/gn/secondary/Userland/Libraries/LibWeb/Loader/BUILD.gn

@@ -5,7 +5,6 @@ source_set("Loader") {
     "ContentFilter.cpp",
     "FileDirectoryLoader.cpp",
     "FileRequest.cpp",
-    "FrameLoader.cpp",
     "LoadRequest.cpp",
     "ProxyMappings.cpp",
     "Resource.cpp",

+ 0 - 1
Userland/Libraries/LibWeb/CMakeLists.txt

@@ -462,7 +462,6 @@ set(SOURCES
     Loader/ContentFilter.cpp
     Loader/FileDirectoryLoader.cpp
     Loader/FileRequest.cpp
-    Loader/FrameLoader.cpp
     Loader/LoadRequest.cpp
     Loader/ProxyMappings.cpp
     Loader/Resource.cpp

+ 1 - 0
Userland/Libraries/LibWeb/CSS/MediaQuery.cpp

@@ -9,6 +9,7 @@
 #include <LibWeb/CSS/StyleComputer.h>
 #include <LibWeb/DOM/Document.h>
 #include <LibWeb/HTML/Window.h>
+#include <LibWeb/Page/Page.h>
 
 namespace Web::CSS {
 

+ 1 - 0
Userland/Libraries/LibWeb/CSS/StyleValues/IdentifierStyleValue.cpp

@@ -12,6 +12,7 @@
 #include <LibWeb/CSS/SystemColor.h>
 #include <LibWeb/DOM/Document.h>
 #include <LibWeb/Layout/Node.h>
+#include <LibWeb/Page/Page.h>
 
 namespace Web::CSS {
 

+ 0 - 1
Userland/Libraries/LibWeb/Forward.h

@@ -13,7 +13,6 @@
 namespace Web {
 class EditEventHandler;
 class EventHandler;
-class FrameLoader;
 class LoadRequest;
 class Page;
 class PageClient;

+ 0 - 1
Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp

@@ -254,7 +254,6 @@ WebIDL::ExceptionOr<BrowsingContext::BrowsingContextAndDocument> BrowsingContext
 
 BrowsingContext::BrowsingContext(Page& page, HTML::NavigableContainer* container)
     : m_page(page)
-    , m_loader(*this)
     , m_event_handler({}, *this)
     , m_container(container)
 {

+ 0 - 5
Userland/Libraries/LibWeb/HTML/BrowsingContext.h

@@ -25,7 +25,6 @@
 #include <LibWeb/HTML/SessionHistoryEntry.h>
 #include <LibWeb/HTML/TokenizedFeatures.h>
 #include <LibWeb/HTML/VisibilityState.h>
-#include <LibWeb/Loader/FrameLoader.h>
 #include <LibWeb/Page/EventHandler.h>
 #include <LibWeb/Platform/Timer.h>
 #include <LibWeb/TreeNode.h>
@@ -133,9 +132,6 @@ public:
     Page* page() { return m_page; }
     Page const* page() const { return m_page; }
 
-    FrameLoader& loader() { return m_loader; }
-    FrameLoader const& loader() const { return m_loader; }
-
     Web::EventHandler& event_handler() { return m_event_handler; }
     Web::EventHandler const& event_handler() const { return m_event_handler; }
 
@@ -226,7 +222,6 @@ private:
 
     WeakPtr<Page> m_page;
 
-    FrameLoader m_loader;
     Web::EventHandler m_event_handler;
 
     // https://html.spec.whatwg.org/multipage/history.html#current-entry

+ 1 - 0
Userland/Libraries/LibWeb/HTML/BrowsingContextGroup.cpp

@@ -7,6 +7,7 @@
 #include <LibWeb/Bindings/MainThreadVM.h>
 #include <LibWeb/HTML/BrowsingContext.h>
 #include <LibWeb/HTML/BrowsingContextGroup.h>
+#include <LibWeb/Page/Page.h>
 
 namespace Web::HTML {
 

+ 0 - 1
Userland/Libraries/LibWeb/HTML/HTMLHyperlinkElementUtils.cpp

@@ -8,7 +8,6 @@
 #include <LibWeb/DOM/Document.h>
 #include <LibWeb/HTML/HTMLHyperlinkElementUtils.h>
 #include <LibWeb/HTML/Navigable.h>
-#include <LibWeb/Loader/FrameLoader.h>
 
 namespace Web::HTML {
 

+ 1 - 0
Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp

@@ -25,6 +25,7 @@
 #include <LibWeb/Layout/CheckBox.h>
 #include <LibWeb/Layout/RadioButton.h>
 #include <LibWeb/Namespace.h>
+#include <LibWeb/Page/Page.h>
 #include <LibWeb/WebIDL/DOMException.h>
 #include <LibWeb/WebIDL/ExceptionOr.h>
 

+ 1 - 0
Userland/Libraries/LibWeb/HTML/Navigable.cpp

@@ -26,6 +26,7 @@
 #include <LibWeb/HTML/TraversableNavigable.h>
 #include <LibWeb/Infra/Strings.h>
 #include <LibWeb/Layout/Node.h>
+#include <LibWeb/Page/Page.h>
 #include <LibWeb/Platform/EventLoopPlugin.h>
 #include <LibWeb/XHR/FormData.h>
 

+ 1 - 0
Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp

@@ -12,6 +12,7 @@
 #include <LibWeb/HTML/NavigationParams.h>
 #include <LibWeb/HTML/SessionHistoryEntry.h>
 #include <LibWeb/HTML/TraversableNavigable.h>
+#include <LibWeb/Page/Page.h>
 #include <LibWeb/Platform/EventLoopPlugin.h>
 
 namespace Web::HTML {

+ 1 - 0
Userland/Libraries/LibWeb/Internals/Internals.cpp

@@ -11,6 +11,7 @@
 #include <LibWeb/HTML/BrowsingContext.h>
 #include <LibWeb/HTML/Window.h>
 #include <LibWeb/Internals/Internals.h>
+#include <LibWeb/Page/Page.h>
 #include <LibWeb/Painting/PaintableBox.h>
 
 namespace Web::Internals {

+ 1 - 0
Userland/Libraries/LibWeb/Layout/Node.cpp

@@ -31,6 +31,7 @@
 #include <LibWeb/Layout/TableWrapper.h>
 #include <LibWeb/Layout/TextNode.h>
 #include <LibWeb/Layout/Viewport.h>
+#include <LibWeb/Page/Page.h>
 #include <LibWeb/Platform/FontPlugin.h>
 
 namespace Web::Layout {

+ 26 - 3
Userland/Libraries/LibWeb/Loader/FileDirectoryLoader.cpp

@@ -11,10 +11,33 @@
 #include <LibCore/Directory.h>
 #include <LibCore/System.h>
 #include <LibWeb/Loader/FileDirectoryLoader.h>
-#include <LibWeb/Loader/FrameLoader.h>
 
 namespace Web {
 
+static DeprecatedString s_resource_directory_url = "file:///res";
+
+DeprecatedString resource_directory_url()
+{
+    return s_resource_directory_url;
+}
+
+void set_resource_directory_url(DeprecatedString resource_directory_url)
+{
+    s_resource_directory_url = resource_directory_url;
+}
+
+static DeprecatedString s_directory_page_url = "file:///res/html/directory.html";
+
+DeprecatedString directory_page_url()
+{
+    return s_directory_page_url;
+}
+
+void set_directory_page_url(DeprecatedString directory_page_url)
+{
+    s_directory_page_url = directory_page_url;
+}
+
 ErrorOr<DeprecatedString> load_file_directory_page(LoadRequest const& request)
 {
     // Generate HTML contents entries table
@@ -46,12 +69,12 @@ ErrorOr<DeprecatedString> load_file_directory_page(LoadRequest const& request)
 
     // Generate HTML directory page from directory template file
     // FIXME: Use an actual templating engine (our own one when it's built, preferably with a way to check these usages at compile time)
-    auto template_path = AK::URL::create_with_url_or_path(FrameLoader::directory_page_url()).serialize_path();
+    auto template_path = AK::URL::create_with_url_or_path(directory_page_url()).serialize_path();
     auto template_file = TRY(Core::File::open(template_path, Core::File::OpenMode::Read));
     auto template_contents = TRY(template_file->read_until_eof());
     StringBuilder builder;
     SourceGenerator generator { builder };
-    generator.set("resource_directory_url", FrameLoader::resource_directory_url());
+    generator.set("resource_directory_url", resource_directory_url());
     generator.set("path", escape_html_entities(lexical_path.string()));
     generator.set("parent_path", escape_html_entities(lexical_path.parent().string()));
     generator.set("contents", contents.to_deprecated_string());

+ 4 - 0
Userland/Libraries/LibWeb/Loader/FileDirectoryLoader.h

@@ -11,5 +11,9 @@
 namespace Web {
 
 ErrorOr<DeprecatedString> load_file_directory_page(LoadRequest const&);
+DeprecatedString resource_directory_url();
+void set_resource_directory_url(DeprecatedString);
+DeprecatedString directory_page_url();
+void set_directory_page_url(DeprecatedString);
 
 }

+ 0 - 365
Userland/Libraries/LibWeb/Loader/FrameLoader.cpp

@@ -1,365 +0,0 @@
-/*
- * Copyright (c) 2020-2022, Andreas Kling <kling@serenityos.org>
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */
-
-#include <AK/Debug.h>
-#include <AK/JsonArray.h>
-#include <AK/LexicalPath.h>
-#include <AK/SourceGenerator.h>
-#include <LibWeb/Bindings/MainThreadVM.h>
-#include <LibWeb/DOM/Document.h>
-#include <LibWeb/DOM/DocumentLoading.h>
-#include <LibWeb/DOM/ElementFactory.h>
-#include <LibWeb/DOM/Text.h>
-#include <LibWeb/HTML/NavigationParams.h>
-#include <LibWeb/HTML/Parser/HTMLParser.h>
-#include <LibWeb/Loader/FrameLoader.h>
-#include <LibWeb/Loader/ResourceLoader.h>
-#include <LibWeb/Namespace.h>
-#include <LibWeb/Page/Page.h>
-#include <LibWeb/Platform/ImageCodecPlugin.h>
-#include <LibWeb/ReferrerPolicy/AbstractOperations.h>
-#include <LibWeb/XML/XMLDocumentBuilder.h>
-
-namespace Web {
-
-static DeprecatedString s_default_favicon_path = "/res/icons/16x16/app-browser.png";
-static RefPtr<Gfx::Bitmap> s_default_favicon_bitmap;
-
-void FrameLoader::set_default_favicon_path(DeprecatedString path)
-{
-    s_default_favicon_path = move(path);
-}
-
-FrameLoader::FrameLoader(HTML::BrowsingContext& browsing_context)
-    : m_browsing_context(browsing_context)
-{
-    if (!s_default_favicon_bitmap) {
-        s_default_favicon_bitmap = Gfx::Bitmap::load_from_file(s_default_favicon_path).release_value_but_fixme_should_propagate_errors();
-        VERIFY(s_default_favicon_bitmap);
-    }
-}
-
-FrameLoader::~FrameLoader() = default;
-
-bool FrameLoader::load(LoadRequest& request, Type type)
-{
-    if (!request.is_valid()) {
-        load_error_page(request.url(), "Invalid request");
-        return false;
-    }
-
-    if (!m_browsing_context->is_frame_nesting_allowed(request.url())) {
-        dbgln("No further recursion is allowed for the frame, abort load!");
-        return false;
-    }
-
-    request.set_main_resource(true);
-
-    auto& url = request.url();
-
-    if (type == Type::Navigation || type == Type::Reload || type == Type::Redirect) {
-        if (auto* page = browsing_context().page()) {
-            if (&page->top_level_browsing_context() == m_browsing_context)
-                page->client().page_did_start_loading(url, type == Type::Redirect);
-        }
-    }
-
-    // https://fetch.spec.whatwg.org/#concept-fetch
-    // Step 12: If request’s header list does not contain `Accept`, then:
-    //          1. Let value be `*/*`. (NOTE: Not necessary as we're about to override it)
-    //          2. A user agent should set value to the first matching statement, if any, switching on request’s destination:
-    //              -> "document"
-    //              -> "frame"
-    //              -> "iframe"
-    //                   `text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8`
-    if (!request.headers().contains("Accept"))
-        request.set_header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
-
-    // HACK: We're crudely computing the referer value and shoving it into the
-    //       request until fetch infrastructure is used here.
-    auto referrer_url = ReferrerPolicy::strip_url_for_use_as_referrer(url);
-    if (referrer_url.has_value() && !request.headers().contains("Referer"))
-        request.set_header("Referer", referrer_url->serialize());
-
-    set_resource(ResourceLoader::the().load_resource(Resource::Type::Generic, request));
-
-    if (type == Type::IFrame)
-        return true;
-
-    if (url.scheme() == "http" || url.scheme() == "https") {
-        AK::URL favicon_url;
-        favicon_url.set_scheme(url.scheme());
-        favicon_url.set_host(url.host());
-        favicon_url.set_port(url.port_or_default());
-        favicon_url.set_paths({ "favicon.ico" });
-
-        ResourceLoader::the().load(
-            favicon_url,
-            [this, favicon_url](auto data, auto&, auto) {
-                // Always fetch the current document
-                auto* document = this->browsing_context().active_document();
-                if (document && document->has_active_favicon())
-                    return;
-                dbgln_if(SPAM_DEBUG, "Favicon downloaded, {} bytes from {}", data.size(), favicon_url);
-                if (data.is_empty())
-                    return;
-                RefPtr<Gfx::Bitmap> favicon_bitmap;
-                auto decoded_image = Platform::ImageCodecPlugin::the().decode_image(data);
-                if (!decoded_image.has_value() || decoded_image->frames.is_empty()) {
-                    dbgln("Could not decode favicon {}", favicon_url);
-                } else {
-                    favicon_bitmap = decoded_image->frames[0].bitmap;
-                    dbgln_if(IMAGE_DECODER_DEBUG, "Decoded favicon, {}", favicon_bitmap->size());
-                }
-                load_favicon(favicon_bitmap);
-            },
-            [this](auto&, auto) {
-                // Always fetch the current document
-                auto* document = this->browsing_context().active_document();
-                if (document && document->has_active_favicon())
-                    return;
-
-                load_favicon();
-            });
-    } else {
-        load_favicon();
-    }
-
-    return true;
-}
-
-bool FrameLoader::load(const AK::URL& url, Type type)
-{
-    dbgln_if(SPAM_DEBUG, "FrameLoader::load: {}", url);
-
-    if (!url.is_valid()) {
-        load_error_page(url, "Invalid URL");
-        return false;
-    }
-
-    auto request = LoadRequest::create_for_url_on_page(url, browsing_context().page());
-    return load(request, type);
-}
-
-void FrameLoader::load_html(StringView html, const AK::URL& url)
-{
-    if (auto* page = browsing_context().page())
-        page->client().page_did_start_loading(url, false);
-
-    auto& vm = Bindings::main_thread_vm();
-    auto response = Fetch::Infrastructure::Response::create(vm);
-    response->url_list().append(url);
-    HTML::NavigationParams navigation_params {
-        .id = {},
-        .request = nullptr,
-        .response = response,
-        .origin = HTML::Origin {},
-        .policy_container = HTML::PolicyContainer {},
-        .final_sandboxing_flag_set = HTML::SandboxingFlagSet {},
-        .cross_origin_opener_policy = HTML::CrossOriginOpenerPolicy {},
-        .coop_enforcement_result = HTML::CrossOriginOpenerPolicyEnforcementResult {},
-        .reserved_environment = {},
-        .browsing_context = browsing_context(),
-        .navigable = nullptr,
-    };
-    auto document = DOM::Document::create_and_initialize(DOM::Document::Type::HTML, "text/html", navigation_params).release_value_but_fixme_should_propagate_errors();
-    // browsing_context().set_active_document(document);
-
-    auto parser = HTML::HTMLParser::create(document, html, "utf-8");
-    parser->run(url);
-
-    if (auto* page = browsing_context().page())
-        page->client().page_did_finish_loading(url);
-}
-
-static DeprecatedString s_resource_directory_url = "file:///res";
-
-DeprecatedString FrameLoader::resource_directory_url()
-{
-    return s_resource_directory_url;
-}
-
-void FrameLoader::set_resource_directory_url(DeprecatedString resource_directory_url)
-{
-    s_resource_directory_url = resource_directory_url;
-}
-
-static DeprecatedString s_error_page_url = "file:///res/html/error.html";
-
-DeprecatedString FrameLoader::error_page_url()
-{
-    return s_error_page_url;
-}
-
-void FrameLoader::set_error_page_url(DeprecatedString error_page_url)
-{
-    s_error_page_url = error_page_url;
-}
-
-static DeprecatedString s_directory_page_url = "file:///res/html/directory.html";
-
-DeprecatedString FrameLoader::directory_page_url()
-{
-    return s_directory_page_url;
-}
-
-void FrameLoader::set_directory_page_url(DeprecatedString directory_page_url)
-{
-    s_directory_page_url = directory_page_url;
-}
-
-// FIXME: Use an actual templating engine (our own one when it's built, preferably
-// with a way to check these usages at compile time)
-
-void FrameLoader::load_error_page(const AK::URL& failed_url, DeprecatedString const& error)
-{
-    LoadRequest request = LoadRequest::create_for_url_on_page(s_error_page_url, browsing_context().page());
-
-    ResourceLoader::the().load(
-        request,
-        [this, failed_url, error](auto data, auto&, auto) {
-            VERIFY(!data.is_null());
-            StringBuilder builder;
-            SourceGenerator generator { builder };
-            generator.set("resource_directory_url", resource_directory_url());
-            generator.set("failed_url", escape_html_entities(failed_url.to_deprecated_string()));
-            generator.set("error", escape_html_entities(error));
-            generator.append(data);
-            load_html(generator.as_string_view(), s_error_page_url);
-        },
-        [](auto& error, auto) {
-            dbgln("Failed to load error page: {}", error);
-            VERIFY_NOT_REACHED();
-        });
-}
-
-void FrameLoader::load_favicon(RefPtr<Gfx::Bitmap> bitmap)
-{
-    if (auto* page = browsing_context().page()) {
-        if (bitmap)
-            page->client().page_did_change_favicon(*bitmap);
-        else if (s_default_favicon_bitmap)
-            page->client().page_did_change_favicon(*s_default_favicon_bitmap);
-    }
-}
-
-void FrameLoader::resource_did_load()
-{
-    // This prevents us setting up the document of a removed browsing context container (BCC, e.g. <iframe>), which will cause a crash
-    // if the document contains a script that inserts another BCC as this will use the stale browsing context it previously set up,
-    // even if it's reinserted.
-    // Example:
-    // index.html:
-    // ```
-    // <body><script>
-    //     var i = document.createElement("iframe");
-    //     i.src = "b.html";
-    //     document.body.append(i);
-    //     i.remove();
-    // </script>
-    // ```
-    // b.html:
-    // ```
-    // <body><script>
-    //     var i = document.createElement("iframe");
-    //     document.body.append(i);
-    // </script>
-    // ```
-    // Required by Prebid.js, which does this by inserting an <iframe> into a <div> in the active document via innerHTML,
-    // then transfers it to the <html> element:
-    // https://github.com/prebid/Prebid.js/blob/7b7389c5abdd05626f71c3df606a93713d1b9f85/src/utils.js#L597
-    // This is done in the spec by removing all tasks and aborting all fetches when a document is destroyed:
-    // https://html.spec.whatwg.org/multipage/document-lifecycle.html#destroy-a-document
-    if (browsing_context().has_been_discarded())
-        return;
-
-    auto url = resource()->url();
-
-    // For 3xx (Redirection) responses, the Location value refers to the preferred target resource for automatically redirecting the request.
-    auto status_code = resource()->status_code();
-    if (status_code.has_value() && *status_code >= 300 && *status_code <= 399) {
-        auto location = resource()->response_headers().get("Location");
-        if (location.has_value()) {
-            if (m_redirects_count > maximum_redirects_allowed) {
-                m_redirects_count = 0;
-                load_error_page(url, "Too many redirects");
-                return;
-            }
-            m_redirects_count++;
-            load(url.complete_url(location.value()), Type::Redirect);
-            return;
-        }
-    }
-    m_redirects_count = 0;
-
-    if (resource()->has_encoding()) {
-        dbgln_if(RESOURCE_DEBUG, "This content has MIME type '{}', encoding '{}'", resource()->mime_type(), resource()->encoding().value());
-    } else {
-        dbgln_if(RESOURCE_DEBUG, "This content has MIME type '{}', encoding unknown", resource()->mime_type());
-    }
-
-    auto final_sandboxing_flag_set = HTML::SandboxingFlagSet {};
-
-    // (Part of https://html.spec.whatwg.org/#navigating-across-documents)
-    // 3. Let responseOrigin be the result of determining the origin given browsingContext, resource's url, finalSandboxFlags, and incumbentNavigationOrigin.
-    // FIXME: Pass incumbentNavigationOrigin
-    // auto response_origin = HTML::determine_the_origin(browsing_context(), url, final_sandboxing_flag_set, {});
-
-    auto& vm = Bindings::main_thread_vm();
-    auto response = Fetch::Infrastructure::Response::create(vm);
-    response->url_list().append(url);
-    HTML::NavigationParams navigation_params {
-        .id = {},
-        .request = nullptr,
-        .response = response,
-        .origin = {},
-        // .origin = move(response_origin),
-        .policy_container = HTML::PolicyContainer {},
-        .final_sandboxing_flag_set = final_sandboxing_flag_set,
-        .cross_origin_opener_policy = HTML::CrossOriginOpenerPolicy {},
-        .coop_enforcement_result = HTML::CrossOriginOpenerPolicyEnforcementResult {},
-        .reserved_environment = {},
-        .browsing_context = browsing_context(),
-        .navigable = nullptr,
-    };
-    auto document = DOM::Document::create_and_initialize(DOM::Document::Type::HTML, "text/html", navigation_params).release_value_but_fixme_should_propagate_errors();
-    document->set_url(url);
-
-    if (resource()->encoding().has_value())
-        document->set_encoding(MUST(String::from_deprecated_string(resource()->encoding().value())));
-    else
-        document->set_encoding({});
-
-    document->set_content_type(MUST(String::from_deprecated_string(resource()->mime_type())));
-
-    // browsing_context().set_active_document(document);
-    if (auto* page = browsing_context().page())
-        page->client().page_did_create_new_document(*document);
-
-    if (!parse_document(*document, resource()->encoded_data())) {
-        load_error_page(url, "Failed to parse content.");
-        return;
-    }
-
-    if (url.fragment().has_value() && !url.fragment()->is_empty())
-        browsing_context().scroll_to_anchor(url.fragment()->to_deprecated_string());
-    else
-        browsing_context().scroll_to({ 0, 0 });
-
-    if (auto* page = browsing_context().page())
-        page->client().page_did_finish_loading(url);
-}
-
-void FrameLoader::resource_did_fail()
-{
-    // See comment in resource_did_load() about why this is done.
-    if (browsing_context().has_been_discarded())
-        return;
-
-    load_error_page(resource()->url(), resource()->error());
-}
-
-}

+ 0 - 60
Userland/Libraries/LibWeb/Loader/FrameLoader.h

@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */
-
-#pragma once
-
-#include <AK/Forward.h>
-#include <LibWeb/Forward.h>
-#include <LibWeb/Loader/Resource.h>
-
-namespace Web {
-
-constexpr size_t maximum_redirects_allowed = 20;
-
-class FrameLoader final
-    : public ResourceClient {
-public:
-    enum class Type {
-        Navigation,
-        Reload,
-        IFrame,
-        Redirect,
-    };
-
-    static void set_default_favicon_path(DeprecatedString);
-    static DeprecatedString resource_directory_url();
-    static void set_resource_directory_url(DeprecatedString);
-    static DeprecatedString error_page_url();
-    static void set_error_page_url(DeprecatedString);
-    static DeprecatedString directory_page_url();
-    static void set_directory_page_url(DeprecatedString);
-
-    explicit FrameLoader(HTML::BrowsingContext&);
-    ~FrameLoader();
-
-    bool load(const AK::URL&, Type);
-    bool load(LoadRequest&, Type);
-
-    void load_html(StringView, const AK::URL&);
-
-    bool is_pending() const { return resource()->is_pending(); }
-
-    HTML::BrowsingContext& browsing_context() { return m_browsing_context; }
-    HTML::BrowsingContext const& browsing_context() const { return m_browsing_context; }
-
-private:
-    // ^ResourceClient
-    virtual void resource_did_load() override;
-    virtual void resource_did_fail() override;
-
-    void load_error_page(const AK::URL& failed_url, DeprecatedString const& error_message);
-    void load_favicon(RefPtr<Gfx::Bitmap> bitmap = nullptr);
-
-    JS::NonnullGCPtr<HTML::BrowsingContext> m_browsing_context;
-    size_t m_redirects_count { 0 };
-};
-
-}

+ 0 - 5
Userland/Libraries/LibWeb/Page/Page.cpp

@@ -52,11 +52,6 @@ void Page::load_html(StringView html)
     (void)top_level_traversable()->navigate("about:srcdoc"sv, *top_level_traversable()->active_document(), String::from_utf8(html).release_value_but_fixme_should_propagate_errors());
 }
 
-bool Page::has_ongoing_navigation() const
-{
-    return top_level_browsing_context().loader().is_pending();
-}
-
 Gfx::Palette Page::palette() const
 {
     return m_client.palette();

+ 0 - 2
Userland/Libraries/LibWeb/Page/Page.h

@@ -62,8 +62,6 @@ public:
 
     void load_html(StringView);
 
-    bool has_ongoing_navigation() const;
-
     CSSPixelPoint device_to_css_point(DevicePixelPoint) const;
     DevicePixelPoint css_to_device_point(CSSPixelPoint) const;
     CSSPixelRect device_to_css_rect(DevicePixelRect) const;

+ 1 - 0
Userland/Libraries/LibWeb/Painting/MediaPaintable.cpp

@@ -14,6 +14,7 @@
 #include <LibWeb/HTML/HTMLVideoElement.h>
 #include <LibWeb/Layout/ReplacedBox.h>
 #include <LibWeb/Page/EventHandler.h>
+#include <LibWeb/Page/Page.h>
 #include <LibWeb/Painting/MediaPaintable.h>
 
 namespace Web::Painting {

+ 1 - 0
Userland/Libraries/LibWeb/SVG/SVGDecodedImageData.cpp

@@ -13,6 +13,7 @@
 #include <LibWeb/HTML/Parser/HTMLParser.h>
 #include <LibWeb/HTML/TraversableNavigable.h>
 #include <LibWeb/Layout/Viewport.h>
+#include <LibWeb/Page/Page.h>
 #include <LibWeb/Painting/PaintContext.h>
 #include <LibWeb/Painting/ViewportPaintable.h>
 #include <LibWeb/SVG/SVGDecodedImageData.h>

+ 1 - 0
Userland/Libraries/LibWeb/SVG/SVGTitleElement.cpp

@@ -6,6 +6,7 @@
 
 #include <LibWeb/Bindings/Intrinsics.h>
 #include <LibWeb/DOM/Document.h>
+#include <LibWeb/Page/Page.h>
 #include <LibWeb/SVG/SVGTitleElement.h>
 
 namespace Web::SVG {

+ 0 - 1
Userland/Utilities/headless-browser.cpp

@@ -40,7 +40,6 @@
 #include <LibWeb/Cookie/Cookie.h>
 #include <LibWeb/Cookie/ParsedCookie.h>
 #include <LibWeb/HTML/ActivateTab.h>
-#include <LibWeb/Loader/FrameLoader.h>
 #include <LibWebView/ViewImplementation.h>
 #include <LibWebView/WebContentClient.h>