| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef FUCHSIA_WEB_RUNNERS_CAST_PENDING_CAST_COMPONENT_H_ |
| #define FUCHSIA_WEB_RUNNERS_CAST_PENDING_CAST_COMPONENT_H_ |
| |
| #include <fidl/chromium.cast/cpp/fidl.h> |
| #include <fuchsia/component/runner/cpp/fidl.h> |
| #include <lib/fidl/cpp/interface_request.h> |
| |
| #include <memory> |
| #include <string_view> |
| |
| #include "base/fuchsia/fidl_event_handler.h" |
| #include "base/memory/raw_ptr.h" |
| #include "fuchsia_web/runners/cast/cast_component.h" |
| |
| namespace base { |
| class StartupContext; |
| } // namespace base |
| |
| // Manages asynchronous retrieval of parameters required to launch the specified |
| // Cast |app_id|. |
| class PendingCastComponent { |
| public: |
| // Implemented by the PendingCastComponent's owner, to actually launch the |
| // component, or cancel it. |
| class Delegate { |
| public: |
| virtual ~Delegate() = default; |
| |
| // Called to launch the component with |params|. The Delegate should |
| // clean up resources associated with |component| and delete it. |
| virtual void LaunchPendingComponent(PendingCastComponent* component, |
| CastComponent::Params params) = 0; |
| |
| // Called if an error occurs, to have the Delegate clean up resources |
| // associated with |component|, and delete it. |
| virtual void CancelPendingComponent(PendingCastComponent* component) = 0; |
| }; |
| |
| PendingCastComponent( |
| Delegate* delegate, |
| std::unique_ptr<base::StartupContext> startup_context, |
| fidl::InterfaceRequest<fuchsia::component::runner::ComponentController> |
| controller_request, |
| std::string_view app_id); |
| ~PendingCastComponent(); |
| |
| PendingCastComponent(const PendingCastComponent&) = delete; |
| PendingCastComponent& operator=(const PendingCastComponent&) = delete; |
| |
| const std::string_view app_id() const { return app_id_; } |
| |
| private: |
| void RequestCorsExemptHeaders(); |
| |
| // Handlers for completing initialization of some |params_| fields. |
| void OnApplicationConfigReceived( |
| chromium::cast::ApplicationConfig app_config); |
| void OnApiBindingsInitialized(); |
| |
| // Passes |params_| to |delegate_| if they are complete, to use to launch the |
| // component. |this| will be deleted before the call returns in that case. |
| // Has no effect if |params_| are not yet complete. |
| void MaybeLaunchComponent(); |
| |
| void OnApplicationContextFidlError(fidl::UnbindInfo error); |
| |
| void CancelComponent(); |
| |
| // Reference to the Delegate which manages |this|. |
| const raw_ptr<Delegate> delegate_; |
| |
| // Id of the Cast application that this instance describes. |
| const std::string app_id_; |
| |
| // Parameters required to construct the CastComponent. |
| CastComponent::Params params_; |
| |
| // Used to receive the media session Id and ApplicationConfig. |
| fidl::Client<chromium_cast::ApplicationContext> application_context_; |
| base::FidlErrorEventHandler<chromium_cast::ApplicationContext> |
| application_context_error_handler_; |
| chromium::cast::ApplicationConfigManagerPtr application_config_manager_; |
| }; |
| |
| #endif // FUCHSIA_WEB_RUNNERS_CAST_PENDING_CAST_COMPONENT_H_ |