| // 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 CHROMECAST_BROWSER_CAST_WEB_CONTENTS_OBSERVER_H_ |
| #define CHROMECAST_BROWSER_CAST_WEB_CONTENTS_OBSERVER_H_ |
| |
| #include <string> |
| |
| #include "chromecast/browser/mojom/cast_web_contents.mojom.h" |
| #include "chromecast/browser/web_types.h" |
| #include "mojo/public/cpp/bindings/pending_associated_remote.h" |
| #include "mojo/public/cpp/bindings/pending_remote.h" |
| #include "mojo/public/cpp/bindings/receiver.h" |
| #include "ui/gfx/geometry/rect.h" |
| #include "url/gurl.h" |
| |
| namespace chromecast { |
| |
| class CastWebContents; |
| |
| // Default implementation of mojom::CastWebContentsObserver. |
| class CastWebContentsObserver : public mojom::CastWebContentsObserver { |
| public: |
| CastWebContentsObserver(); |
| |
| // Adds |this| to the CastWebContents observer list. Observe(nullptr) will |
| // remove |this| from the observer list of the current CastWebContents being |
| // observed. |
| void Observe(mojom::CastWebContents* cast_web_contents); |
| |
| // ========================================================================= |
| // Observer Methods |
| // ========================================================================= |
| |
| // Advertises page state for the CastWebContents. |
| void PageStateChanged(PageState page_state) override {} |
| |
| // Called when the page has stopped. e.g.: A 404 occurred when loading the |
| // page or if the render process for the main frame crashes. |error_code| |
| // will return a net::Error describing the failure, or net::OK if the page |
| // closed intentionally. |
| // |
| // After this method, the page state will be one of the following: |
| // CLOSED: Page was closed as expected and the WebContents exists. The page |
| // should generally not be reloaded, since the page closure was |
| // triggered intentionally. |
| // ERROR: Page is in an error state. It should be reloaded or deleted. |
| // DESTROYED: Page was closed due to deletion of WebContents. The |
| // CastWebContents instance is no longer usable and should be deleted. |
| void PageStopped(PageState page_state, int error_code) override {} |
| |
| // A new RenderFrame was created for the WebContents. |settings_manager| is |
| // provided by the frame. |
| void RenderFrameCreated(int render_process_id, int render_frame_id) override { |
| } |
| |
| // A navigation has finished in the WebContents' main frame. |
| void MainFrameFinishedNavigation() override {} |
| |
| // These methods are calls forwarded from WebContentsObserver. |
| void UpdateTitle(const std::string& title) override {} |
| void UpdateFaviconURL(const GURL& url) override {} |
| void DidFirstVisuallyNonEmptyPaint() override {} |
| |
| // Notifies that a resource for the main frame failed to load. |
| void ResourceLoadFailed() override {} |
| |
| // Propagates the process information via observer, in particular to |
| // the underlying OnRendererProcessStarted() method. |
| void OnRenderProcessReady(int pid) override {} |
| |
| // Notify media playback state changes for the underlying WebContents. |
| void MediaPlaybackChanged(bool media_playing) override {} |
| |
| void InnerContentsCreated(mojo::PendingRemote<mojom::CastWebContents> |
| pending_inner_contents) override {} |
| |
| protected: |
| ~CastWebContentsObserver() override; |
| |
| mojo::Receiver<mojom::CastWebContentsObserver> receiver_{this}; |
| }; |
| |
| } // namespace chromecast |
| |
| #endif // CHROMECAST_BROWSER_CAST_WEB_CONTENTS_OBSERVER_H_ |