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