1 // Copyright 2014 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 #include "mojo/public/cpp/bindings/filter_chain.h" 6 7 #include <algorithm> 8 9 #include "base/logging.h" 10 11 namespace mojo { 12 FilterChain(MessageReceiver * sink)13FilterChain::FilterChain(MessageReceiver* sink) : sink_(sink) { 14 } 15 FilterChain(FilterChain && other)16FilterChain::FilterChain(FilterChain&& other) : sink_(other.sink_) { 17 other.sink_ = nullptr; 18 filters_.swap(other.filters_); 19 } 20 operator =(FilterChain && other)21FilterChain& FilterChain::operator=(FilterChain&& other) { 22 std::swap(sink_, other.sink_); 23 filters_.swap(other.filters_); 24 return *this; 25 } 26 ~FilterChain()27FilterChain::~FilterChain() { 28 } 29 SetSink(MessageReceiver * sink)30void FilterChain::SetSink(MessageReceiver* sink) { 31 DCHECK(!sink_); 32 sink_ = sink; 33 } 34 Accept(Message * message)35bool FilterChain::Accept(Message* message) { 36 DCHECK(sink_); 37 for (auto& filter : filters_) 38 if (!filter->Accept(message)) 39 return false; 40 return sink_->Accept(message); 41 } 42 Append(std::unique_ptr<MessageReceiver> filter)43void FilterChain::Append(std::unique_ptr<MessageReceiver> filter) { 44 filters_.emplace_back(std::move(filter)); 45 } 46 47 } // namespace mojo 48