Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(935)

Unified Diff: content/browser/loader/resource_dispatcher_host_impl.h

Issue 1542743002: [RDHI] Refactored blocked_loaders_map_ to key by render frame route id (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nasko nit Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/loader/resource_dispatcher_host_impl.h
diff --git a/content/browser/loader/resource_dispatcher_host_impl.h b/content/browser/loader/resource_dispatcher_host_impl.h
index 29a82b248a109c7890fec7e0c2f5b6d2ff717d4c..21d99f76969ec239bea683d56da8680404497e1a 100644
--- a/content/browser/loader/resource_dispatcher_host_impl.h
+++ b/content/browser/loader/resource_dispatcher_host_impl.h
@@ -39,6 +39,7 @@
#include "content/public/browser/global_request_id.h"
#include "content/public/browser/notification_types.h"
#include "content/public/browser/resource_dispatcher_host.h"
+#include "content/public/browser/web_contents_observer.h"
#include "content/public/common/resource_type.h"
#include "ipc/ipc_message.h"
#include "net/base/request_priority.h"
@@ -63,7 +64,9 @@ class ShareableFileReference;
namespace content {
class AppCacheService;
class AsyncRevalidationManager;
+class FrameTree;
class NavigationURLLoaderImplCore;
+class RenderFrameHostImpl;
class ResourceContext;
class ResourceDispatcherHostDelegate;
class ResourceMessageDelegate;
@@ -77,6 +80,22 @@ struct DownloadSaveInfo;
struct NavigationRequestInfo;
struct Referrer;
+// This class is responsible for notifying the IO thread (specifically, the
+// ResourceDispatcherHostImpl) of frame events. It has an interace for callers
+// to use and also sends notifications on WebContentsObserver events. All
+// methods (static or class) will be called from the UI thread and post to the
+// IO thread.
+// TODO(csharrison): Add methods tracking visibility and audio changes, to
+// propogate to the ResourceScheduler.
+class LoaderIOThreadNotifier : public WebContentsObserver {
+ public:
+ explicit LoaderIOThreadNotifier(WebContents* web_contents);
+ ~LoaderIOThreadNotifier() override;
+
+ // content::WebContentsObserver:
+ void RenderFrameDeleted(RenderFrameHost* render_frame_host) override;
+};
+
class CONTENT_EXPORT ResourceDispatcherHostImpl
: public ResourceDispatcherHost,
public ResourceLoaderDelegate {
@@ -88,6 +107,24 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl
// hasn't been created yet.
static ResourceDispatcherHostImpl* Get();
+ // The following static methods should all be called from the UI thread.
+
+ // Resumes requests for a given render frame routing id. This will only resume
+ // requests for a single frame.
+ static void ResumeBlockedRequestsForRouteFromUI(
+ const GlobalFrameRoutingId& global_routing_id);
+
+ // Blocks (and does not start) all requests for the frame and its subframes.
+ static void BlockRequestsForFrameFromUI(RenderFrameHost* root_frame_host);
+
+ // Resumes any blocked requests for the specified frame and its subframes.
+ static void ResumeBlockedRequestsForFrameFromUI(
+ RenderFrameHost* root_frame_host);
+
+ // Cancels any blocked request for the frame and its subframes.
+ static void CancelBlockedRequestsForFrameFromUI(
+ RenderFrameHostImpl* root_frame_host);
+
// ResourceDispatcherHost implementation:
void SetDelegate(ResourceDispatcherHostDelegate* delegate) override;
void SetAllowCrossOriginAuthPrompt(bool value) override;
@@ -105,8 +142,6 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl
uint32_t download_id,
const DownloadStartedCallback& started_callback) override;
void ClearLoginDelegateForRequest(net::URLRequest* request) override;
- void BlockRequestsForRoute(int child_id, int route_id) override;
- void ResumeBlockedRequestsForRoute(int child_id, int route_id) override;
// Puts the resource dispatcher host in an inactive state (unable to begin
// new requests). Cancels all pending requests.
@@ -198,8 +233,17 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl
void RemovePendingRequest(int child_id, int request_id);
+ // Causes all new requests for the route identified by |routing_id| to be
+ // blocked (not being started) until ResumeBlockedRequestsForRoute is called.
+ void BlockRequestsForRoute(const GlobalFrameRoutingId& global_routing_id);
+
+ // Resumes any blocked request for the specified route id.
+ void ResumeBlockedRequestsForRoute(
+ const GlobalFrameRoutingId& global_routing_id);
+
// Cancels any blocked request for the specified route id.
- void CancelBlockedRequestsForRoute(int child_id, int route_id);
+ void CancelBlockedRequestsForRoute(
+ const GlobalFrameRoutingId& global_routing_id);
// Maintains a collection of temp files created in support of
// the download_to_file capability. Used to grant access to the
@@ -277,6 +321,7 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl
void EnableStaleWhileRevalidateForTesting();
private:
+ friend class LoaderIOThreadNotifier;
friend class ResourceDispatcherHostTest;
FRIEND_TEST_ALL_PREFIXES(ResourceDispatcherHostTest,
@@ -323,6 +368,8 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl
// A shutdown helper that runs on the IO thread.
void OnShutdown();
+ void OnRenderFrameDeleted(const GlobalFrameRoutingId& global_routing_id);
+
// Helper function for regular and download requests.
void BeginRequestInternal(scoped_ptr<net::URLRequest> request,
scoped_ptr<ResourceHandler> handler);
@@ -365,8 +412,9 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl
static int CalculateApproximateMemoryCost(net::URLRequest* request);
// Force cancels any pending requests for the given route id. This method
- // acts like CancelRequestsForProcess when route_id is -1.
- void CancelRequestsForRoute(int child_id, int route_id);
+ // acts like CancelRequestsForProcess when the |route_id| member of
+ // |routing_id| is MSG_ROUTING_NONE.
+ void CancelRequestsForRoute(const GlobalFrameRoutingId& global_routing_id);
// The list of all requests that we have pending. This list is not really
// optimized, and assumes that we have relatively few requests pending at once
@@ -411,9 +459,9 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl
void UpdateLoadInfo();
// Resumes or cancels (if |cancel_requests| is true) any blocked requests.
- void ProcessBlockedRequestsForRoute(int child_id,
- int route_id,
- bool cancel_requests);
+ void ProcessBlockedRequestsForRoute(
+ const GlobalFrameRoutingId& global_routing_id,
+ bool cancel_requests);
void OnRequestResource(int routing_id,
int request_id,
@@ -541,7 +589,7 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl
using BlockedLoadersList = std::vector<scoped_ptr<ResourceLoader>>;
using BlockedLoadersMap =
- std::map<GlobalRoutingID, scoped_ptr<BlockedLoadersList>>;
+ std::map<GlobalFrameRoutingId, scoped_ptr<BlockedLoadersList>>;
BlockedLoadersMap blocked_loaders_map_;
// Maps the child_ids to the approximate number of bytes

Powered by Google App Engine
This is Rietveld 408576698