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