| // Copyright 2019 The Fuchsia 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 "src/developer/forensics/testing/fakes/privacy_settings.h" | |
| #include <lib/fit/result.h> | |
| #include <lib/syslog/cpp/macros.h> | |
| #include <memory> | |
| namespace forensics { | |
| namespace fakes { | |
| void PrivacySettings::CloseConnection() { | |
| if (binding_) { | |
| binding_->Close(ZX_ERR_PEER_CLOSED); | |
| } | |
| } | |
| void PrivacySettings::Watch(WatchCallback callback) { | |
| FX_CHECK(!watcher_); | |
| watcher_ = std::make_unique<WatchCallback>(std::move(callback)); | |
| if (dirty_bit_) { | |
| NotifyWatcher(); | |
| } | |
| } | |
| void PrivacySettings::Set(fuchsia::settings::PrivacySettings settings, SetCallback callback) { | |
| settings_ = std::move(settings); | |
| callback(::fit::ok()); | |
| dirty_bit_ = true; | |
| if (watcher_) { | |
| NotifyWatcher(); | |
| } | |
| } | |
| void PrivacySettings::NotifyWatcher() { | |
| fuchsia::settings::PrivacySettings settings; | |
| settings_.Clone(&settings); | |
| (*watcher_)(std::move(settings)); | |
| watcher_.reset(); | |
| dirty_bit_ = false; | |
| } | |
| void PrivacySettingsClosesConnectionOnFirstWatch::Watch(WatchCallback callback) { | |
| if (first_watch_) { | |
| CloseConnection(); | |
| first_watch_ = false; | |
| return; | |
| } | |
| FX_CHECK(!watcher_); | |
| watcher_ = std::make_unique<WatchCallback>(std::move(callback)); | |
| if (dirty_bit_) { | |
| NotifyWatcher(); | |
| } | |
| } | |
| } // namespace fakes | |
| } // namespace forensics |