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#include "mojo/public/cpp/bindings/lib/filter_chain.h" 6645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 7645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include <algorithm> 8645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 9645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include "base/logging.h" 10645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 11645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveznamespace mojo { 12645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveznamespace internal { 13645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 14645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezFilterChain::FilterChain(MessageReceiver* sink) : sink_(sink) { 15645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez} 16645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 17645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezFilterChain::FilterChain(FilterChain&& other) : sink_(other.sink_) { 18645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez other.sink_ = nullptr; 19645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez filters_.swap(other.filters_); 20645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez} 21645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 22645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezFilterChain& FilterChain::operator=(FilterChain&& other) { 23645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez std::swap(sink_, other.sink_); 24645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez filters_.swap(other.filters_); 25645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return *this; 26645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez} 27645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 28645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezFilterChain::~FilterChain() { 29645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez for (std::vector<MessageFilter*>::iterator iter = filters_.begin(); 30645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez iter != filters_.end(); 31645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ++iter) { 32645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez delete *iter; 33645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 34645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez} 35645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 36645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezvoid FilterChain::SetSink(MessageReceiver* sink) { 37645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez DCHECK(!sink_); 38645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez sink_ = sink; 39645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez if (!filters_.empty()) 40645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez filters_.back()->set_sink(sink); 41645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez} 42645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 43645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezMessageReceiver* FilterChain::GetHead() { 44645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez DCHECK(sink_); 45645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return filters_.empty() ? sink_ : filters_.front(); 46645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez} 47645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 48645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez} // namespace internal 49645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez} // namespace mojo 50