blob: 5d919fe17255978b556a7ff3cdc43ada4e9e6fb4 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "mojo/public/cpp/bindings/filter_chain.h"
#include <algorithm>
#include "base/logging.h"
namespace mojo {
FilterChain::FilterChain(MessageReceiver* sink) : sink_(sink) {
}
FilterChain::FilterChain(FilterChain&& other) : sink_(other.sink_) {
other.sink_ = nullptr;
filters_.swap(other.filters_);
}
FilterChain& FilterChain::operator=(FilterChain&& other) {
std::swap(sink_, other.sink_);
filters_.swap(other.filters_);
return *this;
}
FilterChain::~FilterChain() {
}
void FilterChain::SetSink(MessageReceiver* sink) {
DCHECK(!sink_);
sink_ = sink;
}
bool FilterChain::Accept(Message* message) {
DCHECK(sink_);
for (auto& filter : filters_)
if (!filter->Accept(message))
return false;
return sink_->Accept(message);
}
void FilterChain::Append(std::unique_ptr<MessageReceiver> filter) {
filters_.emplace_back(std::move(filter));
}
} // namespace mojo