Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / content / browser / loader / resource_scheduler_filter.cc
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.
4
5 #include "content/browser/loader/resource_scheduler_filter.h"
6
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"
12
13 namespace content {
14
15 ResourceSchedulerFilter::ResourceSchedulerFilter(int child_id)
16     : child_id_(child_id) {
17 }
18
19 ResourceSchedulerFilter::~ResourceSchedulerFilter() {
20 }
21
22 bool ResourceSchedulerFilter::OnMessageReceived(const IPC::Message& message,
23                                                 bool* message_was_ok) {
24   ResourceScheduler* scheduler =
25       ResourceDispatcherHostImpl::Get()->scheduler();
26   // scheduler can be NULL during shutdown, in which case it's ok to ignore the
27   // renderer's messages.
28   if (!scheduler)
29     return false;
30
31   switch (message.type()) {
32     case FrameHostMsg_DidCommitProvisionalLoad::ID: {
33       PickleIterator iter(message);
34       FrameHostMsg_DidCommitProvisionalLoad_Params params;
35       if (!IPC::ParamTraits<FrameHostMsg_DidCommitProvisionalLoad_Params>::Read(
36           &message, &iter, &params)) {
37         break;
38       }
39       if (PageTransitionIsMainFrame(params.transition) &&
40           !params.was_within_same_page) {
41         scheduler->OnNavigate(child_id_, message.routing_id());
42       }
43       break;
44     }
45
46     case ViewHostMsg_WillInsertBody::ID:
47       scheduler->OnWillInsertBody(child_id_, message.routing_id());
48       break;
49
50     default:
51       break;
52   }
53
54   return false;
55 }
56
57 }  // namespace content