Index: chrome/browser/prerender/prerender_contents.cc |
=================================================================== |
--- chrome/browser/prerender/prerender_contents.cc (revision 245386) |
+++ chrome/browser/prerender/prerender_contents.cc (working copy) |
@@ -8,6 +8,7 @@ |
#include <functional> |
#include <utility> |
+#include "base/bind.h" |
#include "base/strings/utf_string_conversions.h" |
#include "chrome/browser/chrome_notification_types.h" |
#include "chrome/browser/favicon/favicon_tab_helper.h" |
@@ -18,6 +19,7 @@ |
#include "chrome/browser/prerender/prerender_handle.h" |
#include "chrome/browser/prerender/prerender_manager.h" |
#include "chrome/browser/prerender/prerender_manager_factory.h" |
+#include "chrome/browser/prerender/prerender_resource_throttle.h" |
#include "chrome/browser/prerender/prerender_tracker.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/ui/browser.h" |
@@ -26,6 +28,7 @@ |
#include "chrome/common/render_messages.h" |
#include "chrome/common/url_constants.h" |
#include "content/public/browser/browser_child_process_host.h" |
+#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/notification_service.h" |
#include "content/public/browser/render_frame_host.h" |
#include "content/public/browser/render_process_host.h" |
@@ -62,6 +65,14 @@ |
INTERNAL_COOKIE_EVENT_MAX |
}; |
+void ResumeThrottles( |
+ std::vector<base::WeakPtr<PrerenderResourceThrottle> > throttles) { |
+ for (size_t i = 0; i < throttles.size(); i++) { |
+ if (throttles[i]) |
+ throttles[i]->Resume(); |
+ } |
+} |
+ |
} // namespace |
// static |
@@ -215,6 +226,12 @@ |
prerender_manager_->StartPendingPrerenders( |
child_id_, &pending_prerenders_, session_storage_namespace); |
pending_prerenders_.clear(); |
+ |
+ content::BrowserThread::PostTask( |
+ content::BrowserThread::IO, |
+ FROM_HERE, |
+ base::Bind(&ResumeThrottles, resource_throttles_)); |
+ resource_throttles_.clear(); |
} |
PrerenderContents::PrerenderContents( |
@@ -343,11 +360,6 @@ |
// the event of a mismatch. |
alias_session_storage_namespace->AddTransactionLogProcessId(child_id_); |
- // Register this with the ResourceDispatcherHost as a prerender |
- // RenderViewHost. This must be done before the Navigate message to catch all |
- // resource requests, but as it is on the same thread as the Navigate message |
- // (IO) there is no race condition. |
- AddObserver(prerender_manager()->prerender_tracker()); |
NotifyPrerenderStart(); |
// Close ourselves when the application is shutting down. |
@@ -833,4 +845,9 @@ |
DCHECK_LT(cookie_status_, kNumCookieStatuses); |
} |
+ void PrerenderContents::AddResourceThrottle( |
+ const base::WeakPtr<PrerenderResourceThrottle>& throttle) { |
+ resource_throttles_.push_back(throttle); |
+ } |
+ |
} // namespace prerender |