1645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Copyright 2014 The Chromium Authors. All rights reserved.
2645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Use of this source code is governed by a BSD-style license that can be
3645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// found in the LICENSE file.
4645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
5645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#ifndef MOJO_PUBLIC_CPP_BINDINGS_MESSAGE_FILTER_H_
6645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#define MOJO_PUBLIC_CPP_BINDINGS_MESSAGE_FILTER_H_
7645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
8645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include "mojo/public/cpp/bindings/message.h"
9645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
10645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveznamespace mojo {
11645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
12645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// This class is the base class for message filters. Subclasses should
13645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// implement the pure virtual method Accept() inherited from MessageReceiver to
14645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// process messages and/or forward them to |sink_|.
15645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezclass MessageFilter : public MessageReceiver {
16645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez public:
17645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  // Doesn't take ownership of |sink|. Therefore |sink| has to stay alive while
18645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  // this object is alive.
19645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  explicit MessageFilter(MessageReceiver* sink = nullptr);
20645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  ~MessageFilter() override;
21645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
22645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  void set_sink(MessageReceiver* sink) { sink_ = sink; }
23645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
24645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez protected:
25645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  MessageReceiver* sink_;
26645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez};
27645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
28645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// A trivial filter that simply forwards every message it receives to |sink_|.
29645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezclass PassThroughFilter : public MessageFilter {
30645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez public:
31645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  explicit PassThroughFilter(MessageReceiver* sink = nullptr);
32645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
33645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  bool Accept(Message* message) override;
34645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez};
35645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
36645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}  // namespace mojo
37645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
38645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#endif  // MOJO_PUBLIC_CPP_BINDINGS_MESSAGE_FILTER_H_
39