[Cast MRP] Created MirroringActivityRecord class.
Bug: 965229
Change-Id: Id1f1c3c703f196514fb77b6362aa2c1dc33d0641
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1605342
Reviewed-by: Takumi Fujimoto <takumif@chromium.org>
Commit-Queue: John Williams <jrw@chromium.org>
Cr-Commit-Position: refs/heads/master@{#661951}
diff --git a/chrome/browser/media/router/BUILD.gn b/chrome/browser/media/router/BUILD.gn
index f0dcad8..d59c96f 100644
--- a/chrome/browser/media/router/BUILD.gn
+++ b/chrome/browser/media/router/BUILD.gn
@@ -93,6 +93,8 @@
"presentation/independent_otr_profile_manager.h",
"presentation/presentation_navigation_policy.cc",
"presentation/presentation_navigation_policy.h",
+ "providers/cast/activity_record.cc",
+ "providers/cast/activity_record.h",
"providers/cast/cast_activity_manager.cc",
"providers/cast/cast_activity_manager.h",
"providers/cast/cast_activity_record.cc",
@@ -115,6 +117,8 @@
"providers/cast/chrome_cast_message_handler.h",
"providers/cast/dual_media_sink_service.cc",
"providers/cast/dual_media_sink_service.h",
+ "providers/cast/mirroring_activity_record.cc",
+ "providers/cast/mirroring_activity_record.h",
"providers/common/buffered_message_sender.cc",
"providers/common/buffered_message_sender.h",
"providers/dial/dial_activity_manager.cc",
diff --git a/chrome/browser/media/router/providers/cast/activity_record.cc b/chrome/browser/media/router/providers/cast/activity_record.cc
new file mode 100644
index 0000000..f98dd45
--- /dev/null
+++ b/chrome/browser/media/router/providers/cast/activity_record.cc
@@ -0,0 +1,15 @@
+// Copyright 2019 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.
+
+#include "chrome/browser/media/router/providers/cast/activity_record.h"
+
+namespace media_router {
+
+ActivityRecord::ActivityRecord(const MediaRoute& route,
+ const std::string& app_id)
+ : route_(route), app_id_(app_id) {}
+
+ActivityRecord::~ActivityRecord() = default;
+
+} // namespace media_router
diff --git a/chrome/browser/media/router/providers/cast/activity_record.h b/chrome/browser/media/router/providers/cast/activity_record.h
new file mode 100644
index 0000000..cc1d4009
--- /dev/null
+++ b/chrome/browser/media/router/providers/cast/activity_record.h
@@ -0,0 +1,31 @@
+// Copyright 2019 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_ACTIVITY_RECORD_H_
+#define CHROME_BROWSER_MEDIA_ROUTER_PROVIDERS_CAST_ACTIVITY_RECORD_H_
+
+#include <string>
+
+#include "chrome/common/media_router/media_route.h"
+
+namespace media_router {
+
+class ActivityRecord {
+ public:
+ ActivityRecord(const MediaRoute& route, const std::string& app_id);
+ ActivityRecord(const ActivityRecord&) = delete;
+ ActivityRecord& operator=(const ActivityRecord&) = delete;
+ virtual ~ActivityRecord();
+
+ const MediaRoute& route() const { return route_; }
+ const std::string& app_id() const { return app_id_; }
+
+ protected:
+ MediaRoute route_;
+ const std::string app_id_;
+};
+
+} // namespace media_router
+
+#endif // CHROME_BROWSER_MEDIA_ROUTER_PROVIDERS_CAST_ACTIVITY_RECORD_H_
diff --git a/chrome/browser/media/router/providers/cast/cast_activity_manager.h b/chrome/browser/media/router/providers/cast/cast_activity_manager.h
index 4da79f9..9a50586 100644
--- a/chrome/browser/media/router/providers/cast/cast_activity_manager.h
+++ b/chrome/browser/media/router/providers/cast/cast_activity_manager.h
@@ -37,9 +37,18 @@
// CastActivityRecord.
class CastActivityManagerBase {
public:
+ CastActivityManagerBase() = default;
+ CastActivityManagerBase(const CastActivityManagerBase&) = delete;
+ CastActivityManagerBase& operator=(const CastActivityManagerBase&) = delete;
+
virtual cast_channel::ResultCallback MakeResultCallbackForRoute(
const std::string& route_id,
mojom::MediaRouteProvider::TerminateRouteCallback callback) = 0;
+
+ protected:
+ // The destructor is protected to allow deletion only through a pointer to a
+ // derived type.
+ ~CastActivityManagerBase() = default;
};
// Handles launching and terminating Cast application on a Cast receiver, and
@@ -237,7 +246,6 @@
SEQUENCE_CHECKER(sequence_checker_);
base::WeakPtrFactory<CastActivityManager> weak_ptr_factory_;
FRIEND_TEST_ALL_PREFIXES(CastActivityManagerTest, SendMediaRequestToReceiver);
- DISALLOW_COPY_AND_ASSIGN(CastActivityManager);
};
} // namespace media_router
diff --git a/chrome/browser/media/router/providers/cast/cast_activity_record.cc b/chrome/browser/media/router/providers/cast/cast_activity_record.cc
index 35b35ef..8d63948 100644
--- a/chrome/browser/media/router/providers/cast/cast_activity_record.cc
+++ b/chrome/browser/media/router/providers/cast/cast_activity_record.cc
@@ -2,7 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// #include "chrome/common/media_router/mojo/media_router.mojom.h"
#include "chrome/browser/media/router/providers/cast/cast_activity_record.h"
#include <memory>
@@ -21,7 +20,7 @@
CastActivityRecord::CastActivityRecord(const MediaRoute& route,
const std::string& app_id)
- : route_(route), app_id_(app_id) {}
+ : ActivityRecord(route, app_id) {}
CastActivityRecord::~CastActivityRecord() = default;
diff --git a/chrome/browser/media/router/providers/cast/cast_activity_record.h b/chrome/browser/media/router/providers/cast/cast_activity_record.h
index 369a9a8c..27038ab 100644
--- a/chrome/browser/media/router/providers/cast/cast_activity_record.h
+++ b/chrome/browser/media/router/providers/cast/cast_activity_record.h
@@ -11,6 +11,7 @@
#include "base/containers/flat_map.h"
#include "base/macros.h"
#include "base/optional.h"
+#include "chrome/browser/media/router/providers/cast/activity_record.h"
#include "chrome/common/media_router/mojo/media_router.mojom.h"
#include "chrome/common/media_router/providers/cast/cast_media_source.h"
#include "components/cast_channel/cast_message_handler.h"
@@ -35,16 +36,14 @@
// are handled by LocalPresentationManager.
//
// Instances of this class are associated with a specific session and app.
-class CastActivityRecord {
+class CastActivityRecord : public ActivityRecord {
public:
using ClientMap =
base::flat_map<std::string, std::unique_ptr<CastSessionClient>>;
CastActivityRecord(const MediaRoute& route, const std::string& app_id);
- virtual ~CastActivityRecord();
+ ~CastActivityRecord() override;
- const MediaRoute& route() const { return route_; }
- const std::string& app_id() const { return app_id_; }
const base::Optional<std::string>& session_id() const { return session_id_; }
// TODO(jrw): Get rid of this accessor.
@@ -114,8 +113,6 @@
virtual void TerminatePresentationConnections() = 0;
protected:
- MediaRoute route_;
- const std::string app_id_;
ClientMap connected_clients_;
// Set by CastActivityManager after the session is launched successfully.
@@ -204,8 +201,6 @@
CastSessionTracker* const session_tracker_;
DataDecoder* const data_decoder_;
CastActivityManagerBase* const activity_manager_;
-
- DISALLOW_COPY_AND_ASSIGN(CastActivityRecordImpl);
};
} // namespace media_router
diff --git a/chrome/browser/media/router/providers/cast/cast_session_client.h b/chrome/browser/media/router/providers/cast/cast_session_client.h
index a6b9ad3..7232667 100644
--- a/chrome/browser/media/router/providers/cast/cast_session_client.h
+++ b/chrome/browser/media/router/providers/cast/cast_session_client.h
@@ -35,6 +35,8 @@
CastSessionClient(const std::string& client_id,
const url::Origin& origin,
int tab_id);
+ CastSessionClient(const CastSessionClient&) = delete;
+ CastSessionClient& operator=(const CastSessionClient&) = delete;
virtual ~CastSessionClient();
const std::string& client_id() const { return client_id_; }
@@ -185,7 +187,6 @@
blink::mojom::PresentationConnectionPtr connection_;
base::WeakPtrFactory<CastSessionClientImpl> weak_ptr_factory_;
- DISALLOW_COPY_AND_ASSIGN(CastSessionClientImpl);
};
} // namespace media_router
diff --git a/chrome/browser/media/router/providers/cast/mirroring_activity_record.cc b/chrome/browser/media/router/providers/cast/mirroring_activity_record.cc
new file mode 100644
index 0000000..e042079
--- /dev/null
+++ b/chrome/browser/media/router/providers/cast/mirroring_activity_record.cc
@@ -0,0 +1,64 @@
+// Copyright 2019 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.
+
+#include "chrome/browser/media/router/providers/cast/mirroring_activity_record.h"
+
+#include <utility>
+
+#include "chrome/common/media_router/mojo/media_router.mojom.h"
+#include "components/mirroring/mojom/session_parameters.mojom.h"
+#include "mojo/public/cpp/bindings/interface_request.h"
+
+using mirroring::mojom::CastMessageChannelPtr;
+using mirroring::mojom::CastMessagePtr;
+using mirroring::mojom::SessionError;
+using mirroring::mojom::SessionObserverPtr;
+using mirroring::mojom::SessionParameters;
+
+namespace media_router {
+
+MirroringActivityRecord::MirroringActivityRecord(
+ const MediaRoute& route,
+ const std::string& app_id,
+ int32_t target_tab_id,
+ mojom::MediaRouter* media_router)
+ : ActivityRecord(route, app_id),
+ observer_binding_(this),
+ channel_binding_(this) {
+ media_router->GetMirroringServiceHostForTab(target_tab_id,
+ mojo::MakeRequest(&host_));
+ SessionObserverPtr observer_ptr_;
+ observer_binding_.Bind(mojo::MakeRequest(&observer_ptr_));
+
+ CastMessageChannelPtr channel_ptr_;
+ channel_binding_.Bind(mojo::MakeRequest(&channel_ptr_));
+
+ // TODO(jrw): Set session parameters.
+ host_->Start(SessionParameters::New(), std::move(observer_ptr_),
+ std::move(channel_ptr_), mojo::MakeRequest(&inbound_channel_));
+}
+
+MirroringActivityRecord::~MirroringActivityRecord() = default;
+
+void MirroringActivityRecord::OnError(SessionError error) {
+ // TODO(jrw)
+ NOTIMPLEMENTED();
+}
+
+void MirroringActivityRecord::DidStart() {
+ // TODO(jrw)
+ NOTIMPLEMENTED();
+}
+
+void MirroringActivityRecord::DidStop() {
+ // TODO(jrw)
+ NOTIMPLEMENTED();
+}
+
+void MirroringActivityRecord::Send(CastMessagePtr message) {
+ // TODO(jrw)
+ NOTIMPLEMENTED();
+}
+
+} // namespace media_router
diff --git a/chrome/browser/media/router/providers/cast/mirroring_activity_record.h b/chrome/browser/media/router/providers/cast/mirroring_activity_record.h
new file mode 100644
index 0000000..c536c7d
--- /dev/null
+++ b/chrome/browser/media/router/providers/cast/mirroring_activity_record.h
@@ -0,0 +1,47 @@
+// Copyright 2019 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_MIRRORING_ACTIVITY_RECORD_H_
+#define CHROME_BROWSER_MEDIA_ROUTER_PROVIDERS_CAST_MIRRORING_ACTIVITY_RECORD_H_
+
+#include <string>
+
+#include "chrome/browser/media/router/providers/cast/activity_record.h"
+#include "chrome/common/media_router/media_route.h"
+#include "chrome/common/media_router/mojo/media_router.mojom-forward.h"
+#include "components/mirroring/mojom/cast_message_channel.mojom.h"
+#include "components/mirroring/mojom/mirroring_service_host.mojom.h"
+#include "components/mirroring/mojom/session_observer.mojom.h"
+#include "mojo/public/cpp/bindings/binding.h"
+
+namespace media_router {
+
+class MirroringActivityRecord : public ActivityRecord,
+ public mirroring::mojom::SessionObserver,
+ public mirroring::mojom::CastMessageChannel {
+ public:
+ MirroringActivityRecord(const MediaRoute& route,
+ const std::string& app_id,
+ int32_t target_tab_id,
+ mojom::MediaRouter* media_router);
+ ~MirroringActivityRecord() override;
+
+ // SessionObserver implementation
+ void OnError(mirroring::mojom::SessionError error) override;
+ void DidStart() override;
+ void DidStop() override;
+
+ // CastMessageChannel implementation
+ void Send(mirroring::mojom::CastMessagePtr message) override;
+
+ private:
+ mirroring::mojom::MirroringServiceHostPtr host_;
+ mirroring::mojom::CastMessageChannelPtr inbound_channel_;
+ mojo::Binding<mirroring::mojom::SessionObserver> observer_binding_;
+ mojo::Binding<mirroring::mojom::CastMessageChannel> channel_binding_;
+};
+
+} // namespace media_router
+
+#endif // CHROME_BROWSER_MEDIA_ROUTER_PROVIDERS_CAST_MIRRORING_ACTIVITY_RECORD_H_
diff --git a/chrome/browser/media/router/providers/cast/mirroring_activity_record_unittest.cc b/chrome/browser/media/router/providers/cast/mirroring_activity_record_unittest.cc
new file mode 100644
index 0000000..a02c5807
--- /dev/null
+++ b/chrome/browser/media/router/providers/cast/mirroring_activity_record_unittest.cc
@@ -0,0 +1,25 @@
+// Copyright 2019 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.
+
+#include "chrome/browser/media/router/providers/cast/mirroring_activity_record.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+using mirroring::mojom::CastMessagePtr;
+using mirroring::mojom::SessionError;
+
+namespace media_router {
+
+class MirroringActivityRecordTest : public testing::Test {
+ public:
+ MirroringActivityRecordTest() {
+ // TODO(jrw)
+ }
+
+ ~MirroringActivityRecordTest() override {
+ // TODO(jrw)
+ }
+};
+
+} // namespace media_router
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index f4e56827..d864ca7 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -3677,6 +3677,7 @@
"../browser/media/router/providers/cast/cast_session_client_unittest.cc",
"../browser/media/router/providers/cast/cast_session_tracker_unittest.cc",
"../browser/media/router/providers/cast/dual_media_sink_service_unittest.cc",
+ "../browser/media/router/providers/cast/mirroring_activity_record_unittest.cc",
"../browser/media/router/providers/cast/mock_cast_activity_record.cc",
"../browser/media/router/providers/cast/mock_cast_activity_record.h",
"../browser/media/router/providers/cast/test_util.cc",