| // Copyright 2021 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_CAST_RECEIVER_BROWSER_PUBLIC_RUNTIME_APPLICATION_DISPATCHER_H_ |
| #define COMPONENTS_CAST_RECEIVER_BROWSER_PUBLIC_RUNTIME_APPLICATION_DISPATCHER_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include "base/functional/callback.h" |
| #include "components/cast_receiver/browser/public/application_config.h" |
| |
| namespace cast_receiver { |
| |
| class RuntimeApplication; |
| |
| // This class is responsible for creating new RuntimeApplication instances for |
| // and managing all existing instances. |
| // |
| // |TEmbedderApplication| must implement EmbedderApplication. |
| template <typename TEmbedderApplication> |
| class RuntimeApplicationDispatcher { |
| public: |
| // Creates a new instance of TEmbedderApplication. The provided instance |
| // of RuntimeApplication is expected to persist for the duration of the |
| // created types lifetime. |
| using EmbedderApplicationFactory = |
| base::OnceCallback<std::unique_ptr<TEmbedderApplication>( |
| std::unique_ptr<RuntimeApplication>)>; |
| |
| virtual ~RuntimeApplicationDispatcher() = default; |
| |
| // Creates an application of |TEmbedderApplication| type and adds to |
| // the |loaded_apps_| list. |
| virtual TEmbedderApplication* CreateApplication( |
| std::string session_id, |
| cast_receiver::ApplicationConfig app_config, |
| EmbedderApplicationFactory factory) = 0; |
| |
| // Returns an existing application with session id as specified or nullptr if |
| // no such application exists. |
| virtual TEmbedderApplication* GetApplication( |
| const std::string& session_id) = 0; |
| |
| // Destroys an existing application with session id as specified and returns |
| // the removed instance. |
| virtual std::unique_ptr<TEmbedderApplication> DestroyApplication( |
| const std::string& session_id) = 0; |
| }; |
| |
| } // namespace cast_receiver |
| |
| #endif // COMPONENTS_CAST_RECEIVER_BROWSER_PUBLIC_RUNTIME_APPLICATION_DISPATCHER_H_ |