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