1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "content/browser/loader/resource_scheduler_filter.h"
7 #include "content/browser/loader/resource_dispatcher_host_impl.h"
8 #include "content/browser/loader/resource_scheduler.h"
9 #include "content/common/frame_messages.h"
10 #include "content/common/view_messages.h"
11 #include "content/public/common/page_transition_types.h"
15 const uint32 kFilteredMessageClasses[] = {
21 ResourceSchedulerFilter::ResourceSchedulerFilter(int child_id)
22 : BrowserMessageFilter(
23 kFilteredMessageClasses, arraysize(kFilteredMessageClasses)),
27 ResourceSchedulerFilter::~ResourceSchedulerFilter() {
30 bool ResourceSchedulerFilter::OnMessageReceived(const IPC::Message& message) {
31 ResourceScheduler* scheduler =
32 ResourceDispatcherHostImpl::Get()->scheduler();
33 // scheduler can be NULL during shutdown, in which case it's ok to ignore the
34 // renderer's messages.
38 switch (message.type()) {
39 case FrameHostMsg_DidCommitProvisionalLoad::ID: {
40 PickleIterator iter(message);
41 FrameHostMsg_DidCommitProvisionalLoad_Params params;
42 if (!IPC::ParamTraits<FrameHostMsg_DidCommitProvisionalLoad_Params>::Read(
43 &message, &iter, ¶ms)) {
46 if (PageTransitionIsMainFrame(params.transition) &&
47 !params.was_within_same_page) {
48 // We need to track the RenderViewHost routing_id because of downstream
49 // dependencies (crbug.com/392171 DownloadRequestHandle,
50 // SaveFileManager, ResourceDispatcherHostImpl, MediaStreamUIProxy,
51 // SpeechRecognitionDispatcherHost and possibly others). They look up
52 // the view based on the ID stored in the resource requests.
53 // Once those dependencies are unwound or moved to RenderFrameHost
54 // (crbug.com/304341) we can move the client to be based on the
55 // routing_id of the RenderFrameHost.
56 scheduler->OnNavigate(child_id_, params.render_view_routing_id);
61 case ViewHostMsg_WillInsertBody::ID:
62 scheduler->OnWillInsertBody(child_id_, message.routing_id());
72 } // namespace content