// 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_NAMED_MESSAGE_PORT_CONNECTOR_CAST_H_
#define CHROMECAST_BROWSER_NAMED_MESSAGE_PORT_CONNECTOR_CAST_H_
#include "chromecast/browser/cast_web_contents.h"
#include "chromecast/browser/cast_web_contents_observer.h"
#include "components/cast/named_message_port_connector/named_message_port_connector.h"
namespace chromecast {
// Injects and connects to NamedMessagePortConnector services into documents
// hosted by |cast_web_contents|.
class NamedMessagePortConnectorCast
: public cast_api_bindings::NamedMessagePortConnector,
public CastWebContentsObserver {
public:
// |cast_web_contents|: The CastWebContents which will receive port connection
// services. Must outlive |this|.
explicit NamedMessagePortConnectorCast(
chromecast::CastWebContents* cast_web_contents);
~NamedMessagePortConnectorCast() override;
NamedMessagePortConnectorCast(const NamedMessagePortConnectorCast&) = delete;
void operator=(const NamedMessagePortConnectorCast&) = delete;
private:
// Sends a connection message to |cast_web_contents_|.
// Should be invoked when |cast_web_contents| has finished loading a page,
// and its main frame finished loading with no further pending navigations.
void OnPageLoaded();
// CastWebContentsObserver implementation.
void PageStateChanged(PageState page_state) override;
chromecast::CastWebContents* cast_web_contents_;
};
} // namespace chromecast
#endif // CHROMECAST_BROWSER_NAMED_MESSAGE_PORT_CONNECTOR_CAST_H_