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)#include "mojo/public/cpp/bindings/lib/filter_chain.h" 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <algorithm> 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "mojo/public/cpp/environment/logging.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace mojo { 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace internal { 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)FilterChain::FilterChain(MessageReceiver* sink) : sink_(sink) { 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)FilterChain::FilterChain(RValue other) : sink_(other.object->sink_) { 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) other.object->sink_ = NULL; 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) filters_.swap(other.object->filters_); 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)FilterChain& FilterChain::operator=(RValue other) { 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::swap(sink_, other.object->sink_); 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) filters_.swap(other.object->filters_); 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return *this; 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)FilterChain::~FilterChain() { 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) for (std::vector<MessageFilter*>::iterator iter = filters_.begin(); 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) iter != filters_.end(); 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ++iter) { 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delete *iter; 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void FilterChain::SetSink(MessageReceiver* sink) { 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) MOJO_DCHECK(!sink_); 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) sink_ = sink; 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!filters_.empty()) 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) filters_.back()->set_sink(sink); 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)MessageReceiver* FilterChain::GetHead() { 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) MOJO_DCHECK(sink_); 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return filters_.empty() ? sink_ : filters_.front(); 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace internal 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace mojo 50