1// Copyright (c) 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_THREAD_SAFE_SENDER_H_
6#define CONTENT_CHILD_THREAD_SAFE_SENDER_H_
7
8#include "base/gtest_prod_util.h"
9#include "base/memory/ref_counted.h"
10#include "content/common/content_export.h"
11#include "ipc/ipc_sender.h"
12
13namespace base {
14class MessageLoopProxy;
15}
16
17namespace IPC {
18class SyncMessageFilter;
19}
20
21namespace content {
22class ChildThread;
23
24// The class of Sender returned by ChildThread::thread_safe_sender().
25class CONTENT_EXPORT ThreadSafeSender
26    : public IPC::Sender,
27      public base::RefCountedThreadSafe<ThreadSafeSender> {
28 public:
29  virtual bool Send(IPC::Message* msg) OVERRIDE;
30
31 private:
32  friend class ChildThread;  // for construction
33  friend class IndexedDBDispatcherTest;
34  friend class WebIDBCursorImplTest;
35  friend class base::RefCountedThreadSafe<ThreadSafeSender>;
36
37  ThreadSafeSender(const scoped_refptr<base::MessageLoopProxy>& main_loop,
38                   const scoped_refptr<IPC::SyncMessageFilter>& sync_filter);
39  virtual ~ThreadSafeSender();
40
41  scoped_refptr<base::MessageLoopProxy> main_loop_;
42  scoped_refptr<IPC::SyncMessageFilter> sync_filter_;
43
44  DISALLOW_COPY_AND_ASSIGN(ThreadSafeSender);
45};
46
47}  // namespace content
48
49#endif  // CONTENT_CHILD_THREAD_SAFE_SENDER_H_
50