// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CONTENT_CHILD_CHILD_MESSAGE_FILTER_H_
#define CONTENT_CHILD_CHILD_MESSAGE_FILTER_H_

#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "ipc/ipc_sender.h"

namespace base {
class TaskRunner;
}

namespace IPC {
class MessageFilter;
}

namespace content {

class ThreadSafeSender;

// A base class for implementing IPC MessageFilter's that run on a different
// thread or TaskRunner than the main thread.
class ChildMessageFilter
    : public base::RefCountedThreadSafe<ChildMessageFilter>,
      public IPC::Sender {
 public:
  // IPC::Sender implementation. Can be called on any threads.
  bool Send(IPC::Message* message) override;

  // If implementers want to run OnMessageReceived on a different task
  // runner it should override this and return the TaskRunner for the message.
  // Returning NULL runs OnMessageReceived() on the current IPC thread.
  virtual base::TaskRunner* OverrideTaskRunnerForMessage(
      const IPC::Message& msg) = 0;

  // If OverrideTaskRunnerForMessage is overriden and returns non-null
  // this will be called on the returned TaskRunner.
  virtual bool OnMessageReceived(const IPC::Message& msg) = 0;

  // This method is called when WorkerTaskRunner::PostTask() returned false
  // for the target thread.  Note that there's still a little chance that
  // PostTask() returns true but OnMessageReceived() is never called on the
  // target thread.  By default this does nothing.
  virtual void OnStaleMessageReceived(const IPC::Message& msg) {}

 protected:
  ChildMessageFilter();
  ~ChildMessageFilter() override;

 private:
  class Internal;
  friend class ChildThreadImpl;
  friend class RenderThreadImpl;
  friend class WorkerThread;

  friend class base::RefCountedThreadSafe<ChildMessageFilter>;

  IPC::MessageFilter* GetFilter();

  // This implements IPC::MessageFilter to hide the actual filter methods from
  // child classes.
  Internal* internal_;

  scoped_refptr<ThreadSafeSender> thread_safe_sender_;

  DISALLOW_COPY_AND_ASSIGN(ChildMessageFilter);
};

}  // namespace content

#endif  // CONTENT_CHILD_CHILD_MESSAGE_FILTER_H_
