- add sources.
[platform/framework/web/crosswalk.git] / src / content / child / child_resource_message_filter.h
1 // Copyright 2013 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 #ifndef CONTENT_CHILD_CHILD_RESOURCE_MESSAGE_FILTER_H_
6 #define CONTENT_CHILD_CHILD_RESOURCE_MESSAGE_FILTER_H_
7
8 #include "base/memory/ref_counted.h"
9 #include "ipc/ipc_channel_proxy.h"
10
11 namespace base {
12 class SingleThreadTaskRunner;
13 }
14
15 namespace content {
16 class ResourceDispatcher;
17
18 // Supplies ResourceDispatcher with timestamps for some resource messages.
19 //
20 // Background: ResourceDispatcher converts browser process time to child
21 // process time. This is done to achieve coherent timeline. Conversion is
22 // a linear transformation such that given browser process time range is
23 // mapped to corresponding child process time range. Timestamps for child
24 // process time range should be taken by IO thread when resource messages
25 // arrive. Otherwise, timestamps may be affected by long rendering / JS task.
26 //
27 // When specific message is processed by this filter, new task charged
28 // with timestamp is posted to main thread. This task is processed just before
29 // resource message and invokes ResourceDispatcher::set_io_timestamp.
30 class ChildResourceMessageFilter : public IPC::ChannelProxy::MessageFilter {
31  public:
32   explicit ChildResourceMessageFilter(ResourceDispatcher* resource_dispatcher);
33
34   // IPC::ChannelProxy::MessageFilter implementation.
35   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
36
37  private:
38   virtual ~ChildResourceMessageFilter();
39
40   scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
41   ResourceDispatcher* resource_dispatcher_;
42
43   DISALLOW_COPY_AND_ASSIGN(ChildResourceMessageFilter);
44 };
45
46 }  // namespace content
47
48 #endif  // CONTENT_CHILD_CHILD_RESOURCE_MESSAGE_FILTER_H_