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

Unified Diff: chrome/browser/renderer_host/resource_dispatcher_host.cc

Issue 460108: Implement ResourceQueue, an object that makes it easy to delay starting (Closed)
Patch Set: nitfixing Created 11 years 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: chrome/browser/renderer_host/resource_dispatcher_host.cc
diff --git a/chrome/browser/renderer_host/resource_dispatcher_host.cc b/chrome/browser/renderer_host/resource_dispatcher_host.cc
index 4bce18a6b7b7ef5db3ec40c70730ddac2e49e221..ad999cb2e89546211c23845d0746b44653fefa59 100644
--- a/chrome/browser/renderer_host/resource_dispatcher_host.cc
+++ b/chrome/browser/renderer_host/resource_dispatcher_host.cc
@@ -34,9 +34,11 @@
#include "chrome/browser/renderer_host/buffered_resource_handler.h"
#include "chrome/browser/renderer_host/cross_site_resource_handler.h"
#include "chrome/browser/renderer_host/download_resource_handler.h"
+#include "chrome/browser/renderer_host/global_request_id.h"
#include "chrome/browser/renderer_host/render_view_host.h"
#include "chrome/browser/renderer_host/render_view_host_delegate.h"
#include "chrome/browser/renderer_host/resource_dispatcher_host_request_info.h"
+#include "chrome/browser/renderer_host/resource_queue.h"
#include "chrome/browser/renderer_host/resource_request_details.h"
#include "chrome/browser/renderer_host/safe_browsing_resource_handler.h"
#include "chrome/browser/renderer_host/save_file_resource_handler.h"
@@ -247,8 +249,7 @@ ResourceDispatcherHost::ResourceDispatcherHost()
download_request_manager_(new DownloadRequestManager()),
ALLOW_THIS_IN_INITIALIZER_LIST(
save_file_manager_(new SaveFileManager(this))),
- ALLOW_THIS_IN_INITIALIZER_LIST(user_script_listener_(
- new UserScriptListener(this))),
+ user_script_listener_(new UserScriptListener(&resource_queue_)),
safe_browsing_(new SafeBrowsingService),
socket_stream_dispatcher_host_(new SocketStreamDispatcherHost),
webkit_thread_(new WebKitThread),
@@ -258,6 +259,9 @@ ResourceDispatcherHost::ResourceDispatcherHost()
max_outstanding_requests_cost_per_process_(
kMaxOutstandingRequestsCostPerProcess),
receiver_(NULL) {
+ ResourceQueue::DelegateSet resource_queue_delegates;
+ resource_queue_delegates.insert(user_script_listener_.get());
+ resource_queue_.Initialize(resource_queue_delegates);
}
ResourceDispatcherHost::~ResourceDispatcherHost() {
@@ -280,8 +284,6 @@ ResourceDispatcherHost::~ResourceDispatcherHost() {
iter != ids.end(); ++iter) {
CancelBlockedRequestsForRoute(iter->first, iter->second);
}
-
- user_script_listener_->OnResourceDispatcherHostGone();
}
void ResourceDispatcherHost::Initialize() {
@@ -307,6 +309,7 @@ void ResourceDispatcherHost::SetRequestInfo(
void ResourceDispatcherHost::OnShutdown() {
DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
is_shutdown_ = true;
+ resource_queue_.Shutdown();
STLDeleteValues(&pending_requests_);
// Make sure we shutdown the timer now, otherwise by the time our destructor
// runs if the timer is still running the Task is deleted twice (once by
@@ -1002,9 +1005,10 @@ void ResourceDispatcherHost::RemovePendingRequest(
IncrementOutstandingRequestsMemoryCost(-1 * info->memory_cost(),
info->child_id());
- // Notify the login handler that this request object is going away.
+ // Notify interested parties that the request object is going away.
if (info && info->login_handler())
info->login_handler()->OnRequestCancelled();
+ resource_queue_.RemoveRequest(iter->first);
delete iter->second;
pending_requests_.erase(iter);
@@ -1307,12 +1311,7 @@ void ResourceDispatcherHost::BeginRequestInternal(URLRequest* request) {
GlobalRequestID global_id(info->child_id(), info->request_id());
pending_requests_[global_id] = request;
- if (!user_script_listener_->ShouldStartRequest(request)) {
- // This request depends on some user scripts that haven't loaded yet. The
- // UserScriptListener will resume the request when they're ready.
- return;
- }
- request->Start();
+ resource_queue_.AddRequest(request, *info);
// Make sure we have the load state monitor running
if (!update_load_states_timer_.IsRunning()) {
@@ -1535,7 +1534,7 @@ void ResourceDispatcherHost::RemoveObserver(Observer* obs) {
}
URLRequest* ResourceDispatcherHost::GetURLRequest(
- GlobalRequestID request_id) const {
+ const GlobalRequestID& request_id) const {
// This should be running in the IO loop.
DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));

Powered by Google App Engine
This is Rietveld 408576698