| // Copyright 2016 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. |
| |
| #ifndef PERIDOT_BIN_SUGGESTION_ENGINE_PROPOSAL_PUBLISHER_IMPL_H_ |
| #define PERIDOT_BIN_SUGGESTION_ENGINE_PROPOSAL_PUBLISHER_IMPL_H_ |
| |
| #include <fuchsia/modular/cpp/fidl.h> |
| #include <lib/fidl/cpp/binding.h> |
| #include <lib/fxl/memory/weak_ptr.h> |
| |
| #include "peridot/lib/bound_set/bound_set.h" |
| |
| namespace modular { |
| |
| class SuggestionEngineImpl; |
| |
| /* |
| ProposalPublisherImpl tracks proposals and their resulting suggestions |
| from a single suggestion agent. Source entries are created on demand and kept |
| alive as long as any proposals or publisher bindings exist. |
| |
| TODO: The component_url should eventually be replaced with a more consistent |
| identifier that's reused across components to identify specific executables. |
| */ |
| class ProposalPublisherImpl : public fuchsia::modular::ProposalPublisher { |
| public: |
| ProposalPublisherImpl(SuggestionEngineImpl* engine, |
| const std::string& component_url); |
| |
| ~ProposalPublisherImpl() override; |
| |
| void AddBinding( |
| fidl::InterfaceRequest<fuchsia::modular::ProposalPublisher> request); |
| |
| void Propose(fuchsia::modular::Proposal proposal) override; |
| void Remove(std::string proposal_id) override; |
| |
| void ProposeNavigation( |
| fuchsia::modular::NavigationAction navigation) override; |
| |
| const std::string component_url() { return component_url_; } |
| |
| private: |
| class BindingSet |
| : public ::modular::BindingSet<fuchsia::modular::ProposalPublisher> { |
| public: |
| BindingSet(ProposalPublisherImpl* impl); |
| ~BindingSet() override; |
| |
| protected: |
| void OnConnectionError( |
| fidl::Binding<fuchsia::modular::ProposalPublisher>* binding) override; |
| |
| private: |
| ProposalPublisherImpl* const impl_; |
| }; |
| |
| bool ShouldEraseSelf() const; |
| void EraseSelf(); |
| |
| SuggestionEngineImpl* const engine_; |
| const std::string component_url_; |
| BindingSet bindings_; |
| |
| fxl::WeakPtrFactory<ProposalPublisherImpl> weak_ptr_factory_; |
| }; |
| |
| } // namespace modular |
| |
| #endif // PERIDOT_BIN_SUGGESTION_ENGINE_PROPOSAL_PUBLISHER_IMPL_H_ |