mirror of
https://github.com/RGBCube/serenity
synced 2025-09-15 08:36:16 +00:00
LibWeb: Make Fetch::Infrastructure::{Request,Response,HeaderList} GC'd
This is the way. On a more serious note, there's no reason to keep adding ref-counted classes to LibWeb now that the majority of classes is GC'd - it only adds the risk of discovering some cycle down the line, and forces us to use handles as we can't visit().
This commit is contained in:
parent
63122d0276
commit
b1968b8bed
19 changed files with 270 additions and 169 deletions
|
@ -885,14 +885,14 @@ void BrowsingContext::remove()
|
|||
|
||||
// https://html.spec.whatwg.org/multipage/browsing-the-web.html#navigate
|
||||
WebIDL::ExceptionOr<void> BrowsingContext::navigate(
|
||||
NonnullRefPtr<Fetch::Infrastructure::Request> resource,
|
||||
JS::NonnullGCPtr<Fetch::Infrastructure::Request> resource,
|
||||
BrowsingContext& source_browsing_context,
|
||||
bool exceptions_enabled,
|
||||
HistoryHandlingBehavior history_handling,
|
||||
Optional<PolicyContainer> history_policy_container,
|
||||
String navigation_type,
|
||||
Optional<String> navigation_id,
|
||||
Function<void(NonnullRefPtr<Fetch::Infrastructure::Response>)> process_response_end_of_body)
|
||||
Function<void(JS::NonnullGCPtr<Fetch::Infrastructure::Response>)> process_response_end_of_body)
|
||||
{
|
||||
// 1. If resource is a URL, then set resource to a new request whose URL is resource.
|
||||
// NOTE: This function only accepts resources that are already a request, so this is irrelevant.
|
||||
|
@ -1060,7 +1060,8 @@ WebIDL::ExceptionOr<void> BrowsingContext::traverse_the_history(size_t entry_ind
|
|||
VERIFY(history_handling == HistoryHandlingBehavior::Default);
|
||||
|
||||
// 2. Let request be a new request whose URL is entry's URL.
|
||||
auto request = Fetch::Infrastructure::Request::create();
|
||||
auto& vm = Bindings::main_thread_vm();
|
||||
auto request = Fetch::Infrastructure::Request::create(vm);
|
||||
request->set_url(entry->url);
|
||||
|
||||
// 3. If explicitHistoryNavigation is true, then set request's history-navigation flag.
|
||||
|
@ -1071,7 +1072,7 @@ WebIDL::ExceptionOr<void> BrowsingContext::traverse_the_history(size_t entry_ind
|
|||
// and with historyPolicyContainer set to entry's policy container.
|
||||
// The navigation must be done using the same source browsing context as was used the first time entry was created.
|
||||
VERIFY(entry->original_source_browsing_context);
|
||||
TRY(navigate(move(request), *entry->original_source_browsing_context, false, HistoryHandlingBehavior::EntryUpdate, entry->policy_container));
|
||||
TRY(navigate(request, *entry->original_source_browsing_context, false, HistoryHandlingBehavior::EntryUpdate, entry->policy_container));
|
||||
|
||||
// 5. Return.
|
||||
return {};
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include <LibGfx/Bitmap.h>
|
||||
#include <LibGfx/Rect.h>
|
||||
#include <LibGfx/Size.h>
|
||||
#include <LibJS/Forward.h>
|
||||
#include <LibJS/Heap/Cell.h>
|
||||
#include <LibWeb/DOM/Position.h>
|
||||
#include <LibWeb/HTML/BrowsingContextContainer.h>
|
||||
|
@ -216,14 +217,14 @@ public:
|
|||
|
||||
// https://html.spec.whatwg.org/multipage/browsing-the-web.html#navigate
|
||||
WebIDL::ExceptionOr<void> navigate(
|
||||
NonnullRefPtr<Fetch::Infrastructure::Request> resource,
|
||||
JS::NonnullGCPtr<Fetch::Infrastructure::Request> resource,
|
||||
BrowsingContext& source_browsing_context,
|
||||
bool exceptions_enabled = false,
|
||||
HistoryHandlingBehavior history_handling = HistoryHandlingBehavior::Default,
|
||||
Optional<PolicyContainer> history_policy_container = {},
|
||||
String navigation_type = "other",
|
||||
Optional<String> navigation_id = {},
|
||||
Function<void(NonnullRefPtr<Fetch::Infrastructure::Response>)> process_response_end_of_body = {});
|
||||
Function<void(JS::NonnullGCPtr<Fetch::Infrastructure::Response>)> process_response_end_of_body = {});
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/browsing-the-web.html#navigate-fragid
|
||||
WebIDL::ExceptionOr<void> navigate_to_a_fragment(AK::URL const&, HistoryHandlingBehavior, String navigation_id);
|
||||
|
|
|
@ -169,7 +169,7 @@ void BrowsingContextContainer::shared_attribute_processing_steps_for_iframe_and_
|
|||
}
|
||||
|
||||
// 5. Let resource be a new request whose URL is url and whose referrer policy is the current state of element's referrerpolicy content attribute.
|
||||
auto resource = Fetch::Infrastructure::Request::create();
|
||||
auto resource = Fetch::Infrastructure::Request::create(vm());
|
||||
resource->set_url(url);
|
||||
// FIXME: Set the referrer policy.
|
||||
|
||||
|
@ -193,11 +193,11 @@ void BrowsingContextContainer::shared_attribute_processing_steps_for_iframe_and_
|
|||
}
|
||||
|
||||
// 8. Navigate to the resource: navigate an iframe or frame given element and resource.
|
||||
navigate_an_iframe_or_frame(move(resource));
|
||||
navigate_an_iframe_or_frame(resource);
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/iframe-embed-object.html#navigate-an-iframe-or-frame
|
||||
void BrowsingContextContainer::navigate_an_iframe_or_frame(NonnullRefPtr<Fetch::Infrastructure::Request> resource)
|
||||
void BrowsingContextContainer::navigate_an_iframe_or_frame(JS::NonnullGCPtr<Fetch::Infrastructure::Request> resource)
|
||||
{
|
||||
// 1. Let historyHandling be "default".
|
||||
auto history_handling = HistoryHandlingBehavior::Default;
|
||||
|
@ -220,7 +220,7 @@ void BrowsingContextContainer::navigate_an_iframe_or_frame(NonnullRefPtr<Fetch::
|
|||
// FIXME: and processResponseEndOfBody set to reportFrameTiming.
|
||||
auto* source_browsing_context = document().browsing_context();
|
||||
VERIFY(source_browsing_context);
|
||||
m_nested_browsing_context->navigate(move(resource), *source_browsing_context, false, history_handling);
|
||||
m_nested_browsing_context->navigate(resource, *source_browsing_context, false, history_handling);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ protected:
|
|||
void shared_attribute_processing_steps_for_iframe_and_frame(bool initial_insertion);
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/iframe-embed-object.html#navigate-an-iframe-or-frame
|
||||
void navigate_an_iframe_or_frame(NonnullRefPtr<Fetch::Infrastructure::Request>);
|
||||
void navigate_an_iframe_or_frame(JS::NonnullGCPtr<Fetch::Infrastructure::Request>);
|
||||
|
||||
void create_new_nested_browsing_context();
|
||||
|
||||
|
|
|
@ -23,10 +23,10 @@ struct NavigationParams {
|
|||
String id;
|
||||
|
||||
// null or a request that started the navigation
|
||||
RefPtr<Fetch::Infrastructure::Request> request;
|
||||
JS::GCPtr<Fetch::Infrastructure::Request> request;
|
||||
|
||||
// a response that ultimately was navigated to (potentially a network error)
|
||||
NonnullRefPtr<Fetch::Infrastructure::Response> response;
|
||||
JS::NonnullGCPtr<Fetch::Infrastructure::Response> response;
|
||||
|
||||
// an origin to use for the new Document
|
||||
Origin origin;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue