Commit 1b790003 authored by Muyao Xu's avatar Muyao Xu Committed by Commit Bot

Move CastSessionClientImpl to a separate file

Bug: b/155648481, 1128722
Change-Id: I63c1c64e6ac6e1e5dd74dc33853805c8d57d3893
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2412973
Commit-Queue: Muyao Xu <muyaoxu@google.com>
Reviewed-by: default avatarTakumi Fujimoto <takumif@chromium.org>
Cr-Commit-Position: refs/heads/master@{#808254}
parent 195f0666
...@@ -136,6 +136,8 @@ static_library("router") { ...@@ -136,6 +136,8 @@ static_library("router") {
"providers/cast/cast_media_route_provider_metrics.h", "providers/cast/cast_media_route_provider_metrics.h",
"providers/cast/cast_session_client.cc", "providers/cast/cast_session_client.cc",
"providers/cast/cast_session_client.h", "providers/cast/cast_session_client.h",
"providers/cast/cast_session_client_impl.cc",
"providers/cast/cast_session_client_impl.h",
"providers/cast/cast_session_tracker.cc", "providers/cast/cast_session_tracker.cc",
"providers/cast/cast_session_tracker.h", "providers/cast/cast_session_tracker.h",
"providers/cast/chrome_cast_message_handler.cc", "providers/cast/chrome_cast_message_handler.cc",
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "base/logging.h" #include "base/logging.h"
#include "chrome/browser/media/router/providers/cast/cast_internal_message_util.h" #include "chrome/browser/media/router/providers/cast/cast_internal_message_util.h"
#include "chrome/browser/media/router/providers/cast/cast_session_client_impl.h"
#include "components/media_router/common/discovery/media_sink_internal.h" #include "components/media_router/common/discovery/media_sink_internal.h"
namespace media_router { namespace media_router {
......
...@@ -8,25 +8,17 @@ ...@@ -8,25 +8,17 @@
#include <memory> #include <memory>
#include <string> #include <string>
#include "base/containers/flat_map.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/optional.h" #include "base/optional.h"
#include "base/values.h" #include "base/values.h"
#include "chrome/browser/media/router/providers/cast/cast_internal_message_util.h" #include "chrome/browser/media/router/providers/cast/cast_internal_message_util.h"
#include "components/cast_channel/cast_message_handler.h"
#include "components/media_router/common/mojom/media_router.mojom.h" #include "components/media_router/common/mojom/media_router.mojom.h"
#include "components/media_router/common/providers/cast/cast_media_source.h"
#include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote.h"
#include "services/data_decoder/public/cpp/data_decoder.h"
#include "third_party/blink/public/mojom/presentation/presentation.mojom.h" #include "third_party/blink/public/mojom/presentation/presentation.mojom.h"
#include "url/origin.h"
namespace media_router { namespace media_router {
class CastActivity;
// Represents a Cast SDK client connection to a Cast session. This class // Represents a Cast SDK client connection to a Cast session. This class
// contains PresentationConnection Mojo pipes to send and receive messages // contains PresentationConnection Mojo pipes to send and receive messages
// from/to the corresponding SDK client hosted in a presentation controlling // from/to the corresponding SDK client hosted in a presentation controlling
...@@ -109,91 +101,6 @@ class CastSessionClientFactoryForTest { ...@@ -109,91 +101,6 @@ class CastSessionClientFactoryForTest {
int tab_id) = 0; int tab_id) = 0;
}; };
// TODO(jrw): Move to a separate file.
class CastSessionClientImpl : public CastSessionClient,
public blink::mojom::PresentationConnection {
public:
CastSessionClientImpl(const std::string& client_id,
const url::Origin& origin,
int tab_id,
AutoJoinPolicy auto_join_policy,
CastActivity* activity);
~CastSessionClientImpl() override;
// CastSessionClient implementation
mojom::RoutePresentationConnectionPtr Init() override;
// TODO(jrw): Remove redundant "ToClient" in the name of this and other
// methods.
void SendMessageToClient(
blink::mojom::PresentationConnectionMessagePtr message) override;
void SendMediaStatusToClient(const base::Value& media_status,
base::Optional<int> request_id) override;
void CloseConnection(
blink::mojom::PresentationConnectionCloseReason close_reason) override;
void TerminateConnection() override;
bool MatchesAutoJoinPolicy(url::Origin origin, int tab_id) const override;
void SendErrorCodeToClient(int sequence_number,
CastInternalMessage::ErrorCode error_code,
base::Optional<std::string> description) override;
void SendErrorToClient(int sequence_number, base::Value error) override;
// blink::mojom::PresentationConnection implementation
void OnMessage(
blink::mojom::PresentationConnectionMessagePtr message) override;
// Blink does not initiate state change or close using PresentationConnection.
// Instead, |PresentationService::Close/TerminateConnection| is used.
void DidChangeState(
blink::mojom::PresentationConnectionState state) override {}
void DidClose(
blink::mojom::PresentationConnectionCloseReason reason) override;
private:
void HandleParsedClientMessage(
data_decoder::DataDecoder::ValueOrError result);
void HandleV2ProtocolMessage(const CastInternalMessage& cast_message);
// Resets the PresentationConnection Mojo message pipes.
void TearDownPresentationConnection();
// Sends a response to the client indicating that a particular request
// succeeded or failed.
void SendResultResponse(int sequence_number, cast_channel::Result result);
// Builds a callback that calls SendResultResponse().
cast_channel::ResultCallback MakeResultCallback(
const CastInternalMessage& cast_message);
const AutoJoinPolicy auto_join_policy_;
CastActivity* const activity_;
// The maximum number of pending media requests, used to prevent memory leaks.
// Normally the number of pending requests should be fairly small, but each
// entry only consumes 2*sizeof(int) bytes, so the upper limit is set fairly
// high.
static constexpr std::size_t kMaxPendingMediaRequests = 1024;
// Maps internal, locally-generated request IDs to sequence numbers from cast
// messages received from the client. Used to set an appropriate
// sequenceNumber field in outgoing messages so a client can associate a media
// status message with a previous request.
//
// TODO(jrw): Investigate whether this mapping is really necessary, or if
// sequence numbers can be used directly without generating request IDs.
base::flat_map<int, int> pending_media_requests_;
// Receiver for the PresentationConnection in Blink to receive incoming
// messages and respond to state changes.
mojo::Receiver<blink::mojom::PresentationConnection> connection_receiver_{
this};
// Mojo message pipe to PresentationConnection in Blink to send messages and
// initiate state changes.
mojo::Remote<blink::mojom::PresentationConnection> connection_remote_;
base::WeakPtrFactory<CastSessionClientImpl> weak_ptr_factory_{this};
};
} // namespace media_router } // namespace media_router
#endif // CHROME_BROWSER_MEDIA_ROUTER_PROVIDERS_CAST_CAST_SESSION_CLIENT_H_ #endif // CHROME_BROWSER_MEDIA_ROUTER_PROVIDERS_CAST_CAST_SESSION_CLIENT_H_
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_MEDIA_ROUTER_PROVIDERS_CAST_CAST_SESSION_CLIENT_IMPL_H_
#define CHROME_BROWSER_MEDIA_ROUTER_PROVIDERS_CAST_CAST_SESSION_CLIENT_IMPL_H_
#include "chrome/browser/media/router/providers/cast/cast_session_client.h"
#include "components/cast_channel/cast_message_handler.h"
#include "components/media_router/common/providers/cast/cast_media_source.h"
#include "services/data_decoder/public/cpp/data_decoder.h"
namespace media_router {
class CastActivity;
class CastSessionClientImpl : public CastSessionClient,
public blink::mojom::PresentationConnection {
public:
CastSessionClientImpl(const std::string& client_id,
const url::Origin& origin,
int tab_id,
AutoJoinPolicy auto_join_policy,
CastActivity* activity);
~CastSessionClientImpl() override;
// CastSessionClient implementation
mojom::RoutePresentationConnectionPtr Init() override;
// TODO(jrw): Remove redundant "ToClient" in the name of this and other
// methods.
void SendMessageToClient(
blink::mojom::PresentationConnectionMessagePtr message) override;
void SendMediaStatusToClient(const base::Value& media_status,
base::Optional<int> request_id) override;
void CloseConnection(
blink::mojom::PresentationConnectionCloseReason close_reason) override;
void TerminateConnection() override;
bool MatchesAutoJoinPolicy(url::Origin origin, int tab_id) const override;
void SendErrorCodeToClient(int sequence_number,
CastInternalMessage::ErrorCode error_code,
base::Optional<std::string> description) override;
void SendErrorToClient(int sequence_number, base::Value error) override;
// blink::mojom::PresentationConnection implementation
void OnMessage(
blink::mojom::PresentationConnectionMessagePtr message) override;
// Blink does not initiate state change or close using PresentationConnection.
// Instead, |PresentationService::Close/TerminateConnection| is used.
void DidChangeState(
blink::mojom::PresentationConnectionState state) override {}
void DidClose(
blink::mojom::PresentationConnectionCloseReason reason) override;
private:
void HandleParsedClientMessage(
data_decoder::DataDecoder::ValueOrError result);
void HandleV2ProtocolMessage(const CastInternalMessage& cast_message);
// Resets the PresentationConnection Mojo message pipes.
void TearDownPresentationConnection();
// Sends a response to the client indicating that a particular request
// succeeded or failed.
void SendResultResponse(int sequence_number, cast_channel::Result result);
// Builds a callback that calls SendResultResponse().
cast_channel::ResultCallback MakeResultCallback(
const CastInternalMessage& cast_message);
const AutoJoinPolicy auto_join_policy_;
CastActivity* const activity_;
// The maximum number of pending media requests, used to prevent memory leaks.
// Normally the number of pending requests should be fairly small, but each
// entry only consumes 2*sizeof(int) bytes, so the upper limit is set fairly
// high.
static constexpr std::size_t kMaxPendingMediaRequests = 1024;
// Maps internal, locally-generated request IDs to sequence numbers from cast
// messages received from the client. Used to set an appropriate
// sequenceNumber field in outgoing messages so a client can associate a media
// status message with a previous request.
//
// TODO(jrw): Investigate whether this mapping is really necessary, or if
// sequence numbers can be used directly without generating request IDs.
base::flat_map<int, int> pending_media_requests_;
// Receiver for the PresentationConnection in Blink to receive incoming
// messages and respond to state changes.
mojo::Receiver<blink::mojom::PresentationConnection> connection_receiver_{
this};
// Mojo message pipe to PresentationConnection in Blink to send messages and
// initiate state changes.
mojo::Remote<blink::mojom::PresentationConnection> connection_remote_;
base::WeakPtrFactory<CastSessionClientImpl> weak_ptr_factory_{this};
};
} // namespace media_router
#endif // CHROME_BROWSER_MEDIA_ROUTER_PROVIDERS_CAST_CAST_SESSION_CLIENT_IMPL_H_
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "chrome/browser/media/router/data_decoder_util.h" #include "chrome/browser/media/router/data_decoder_util.h"
#include "chrome/browser/media/router/providers/cast/cast_activity_manager.h" #include "chrome/browser/media/router/providers/cast/cast_activity_manager.h"
#include "chrome/browser/media/router/providers/cast/cast_internal_message_util.h" #include "chrome/browser/media/router/providers/cast/cast_internal_message_util.h"
#include "chrome/browser/media/router/providers/cast/cast_session_client_impl.h"
#include "chrome/browser/media/router/providers/cast/mock_app_activity.h" #include "chrome/browser/media/router/providers/cast/mock_app_activity.h"
#include "chrome/browser/media/router/providers/cast/test_util.h" #include "chrome/browser/media/router/providers/cast/test_util.h"
#include "chrome/browser/media/router/providers/common/buffered_message_sender.h" #include "chrome/browser/media/router/providers/common/buffered_message_sender.h"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment