startup_context.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // Copyright 2019 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. #ifndef BASE_FUCHSIA_STARTUP_CONTEXT_H_
  5. #define BASE_FUCHSIA_STARTUP_CONTEXT_H_
  6. #include <fuchsia/sys/cpp/fidl.h>
  7. #include <lib/sys/cpp/component_context.h>
  8. #include <lib/zx/channel.h>
  9. #include <memory>
  10. #include "base/base_export.h"
  11. namespace sys {
  12. class ComponentContext;
  13. class ServiceDirectory;
  14. class OutgoingDirectory;
  15. } // namespace sys
  16. namespace base {
  17. // Helper for unpacking a fuchsia.sys.StartupInfo and creating convenience
  18. // wrappers for the various fields (e.g. the incoming & outgoing service
  19. // directories, resolve launch URL etc).
  20. // Embedders may derived from StartupContext to e.g. add bound pointers to
  21. // embedder-specific services, as required.
  22. class BASE_EXPORT StartupContext {
  23. public:
  24. explicit StartupContext(::fuchsia::sys::StartupInfo startup_info);
  25. virtual ~StartupContext();
  26. StartupContext(const StartupContext&) = delete;
  27. StartupContext& operator=(const StartupContext&) = delete;
  28. // Returns the ComponentContext for the current component.
  29. sys::ComponentContext* component_context() const {
  30. return component_context_.get();
  31. }
  32. // Easy accessors for the incoming service directory, and outgoing directory.
  33. const sys::ServiceDirectory* svc() const {
  34. return component_context_->svc().get();
  35. }
  36. sys::OutgoingDirectory* outgoing() const {
  37. return component_context_->outgoing().get();
  38. }
  39. // Starts serving outgoing directory in the |component_context()|. Can be
  40. // called at most once. All outgoing services should be published in
  41. // |component_context()->outgoing()| before calling this function.
  42. void ServeOutgoingDirectory();
  43. bool has_outgoing_directory_request() {
  44. return outgoing_directory_request_.is_valid();
  45. }
  46. private:
  47. // TODO(https://crbug.com/933834): Remove these when we migrate to the new
  48. // component manager APIs.
  49. ::fuchsia::sys::ServiceProviderPtr additional_services_;
  50. std::unique_ptr<sys::OutgoingDirectory> additional_services_directory_;
  51. std::unique_ptr<sys::ComponentContext> component_context_;
  52. // Used to store outgoing directory until ServeOutgoingDirectory() is called.
  53. zx::channel outgoing_directory_request_;
  54. };
  55. } // namespace base
  56. #endif // BASE_FUCHSIA_STARTUP_CONTEXT_H_