1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef MOJO_PUBLIC_CPP_BINDINGS_MESSAGE_FILTER_H_ 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define MOJO_PUBLIC_CPP_BINDINGS_MESSAGE_FILTER_H_ 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "mojo/public/cpp/bindings/message.h" 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "mojo/public/cpp/system/macros.h" 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace mojo { 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// This class is the base class for message filters. Subclasses should 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// implement the pure virtual method Accept() inherited from MessageReceiver to 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// process messages and/or forward them to |sink_|. 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class MessageFilter : public MessageReceiver { 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Doesn't take ownership of |sink|. Therefore |sink| has to stay alive while 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // this object is alive. 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) explicit MessageFilter(MessageReceiver* sink = NULL); 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~MessageFilter(); 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void set_sink(MessageReceiver* sink) { sink_ = sink; } 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) protected: 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) MessageReceiver* sink_; 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// A trivial filter that simply forwards every message it receives to |sink_|. 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class PassThroughFilter : public MessageFilter { 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) explicit PassThroughFilter(MessageReceiver* sink = NULL); 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual bool Accept(Message* message) MOJO_OVERRIDE; 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace mojo 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_MESSAGE_FILTER_H_ 40