| // 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_WEB_RUNTIME_APPLICATION_H_ |
| #define COMPONENTS_CAST_RECEIVER_BROWSER_WEB_RUNTIME_APPLICATION_H_ |
| |
| #include <vector> |
| |
| #include "components/cast_receiver/browser/bindings_manager.h" |
| #include "components/cast_receiver/browser/page_state_observer.h" |
| #include "components/cast_receiver/browser/public/application_config.h" |
| #include "components/cast_receiver/browser/runtime_application_base.h" |
| #include "content/public/browser/web_contents_observer.h" |
| |
| namespace cast_receiver { |
| |
| class ApplicationClient; |
| |
| class WebRuntimeApplication final : public RuntimeApplicationBase, |
| public content::WebContentsObserver, |
| public BindingsManager::Client, |
| public PageStateObserver { |
| public: |
| // |web_service| is expected to exist for the lifetime of this instance. |
| WebRuntimeApplication(std::string cast_session_id, |
| ApplicationConfig app_config, |
| ApplicationClient& application_client); |
| ~WebRuntimeApplication() override; |
| |
| WebRuntimeApplication(WebRuntimeApplication& other) = delete; |
| WebRuntimeApplication& operator=(WebRuntimeApplication& other) = delete; |
| |
| private: |
| const GURL& app_url() { |
| DCHECK(config().url); |
| return *config().url; |
| } |
| |
| void OnAllBindingsReceived(Status status, std::vector<std::string> bindings); |
| |
| // RuntimeApplicationBase implementation: |
| void Launch(StatusCallback callback) override; |
| bool IsStreamingApplication() const override; |
| |
| // PageStateObserver implementation: |
| void OnPageLoadComplete() override; |
| void OnPageStopped(StopReason reason, net::Error error_code) override; |
| |
| // content::WebContentsObserver implementation: |
| void InnerWebContentsCreated( |
| content::WebContents* inner_web_contents) override; |
| void MediaStartedPlaying(const MediaPlayerInfo& video_type, |
| const content::MediaPlayerId& id) override; |
| void MediaStoppedPlaying( |
| const MediaPlayerInfo& video_type, |
| const content::MediaPlayerId& id, |
| content::WebContentsObserver::MediaStoppedReason reason) override; |
| |
| // BindingsManagerWebRuntime::Client implementation: |
| void OnError() override; |
| |
| std::unique_ptr<BindingsManager> bindings_manager_; |
| |
| SEQUENCE_CHECKER(sequence_checker_); |
| base::WeakPtrFactory<WebRuntimeApplication> weak_factory_{this}; |
| }; |
| |
| } // namespace cast_receiver |
| |
| #endif // COMPONENTS_CAST_RECEIVER_BROWSER_WEB_RUNTIME_APPLICATION_H_ |