Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(454)

Side by Side Diff: chrome/browser/media/router/mojo/media_router_mojo_impl_unittest.cc

Issue 2947403004: [MediaRouter] Replace RouteMessage with PresentationConnectionMessage (Closed)
Patch Set: rebase Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include <memory> 8 #include <memory>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
(...skipping 10 matching lines...) Expand all
21 #include "chrome/browser/media/router/event_page_request_manager.h" 21 #include "chrome/browser/media/router/event_page_request_manager.h"
22 #include "chrome/browser/media/router/event_page_request_manager_factory.h" 22 #include "chrome/browser/media/router/event_page_request_manager_factory.h"
23 #include "chrome/browser/media/router/mock_media_router.h" 23 #include "chrome/browser/media/router/mock_media_router.h"
24 #include "chrome/browser/media/router/mojo/media_router_mojo_metrics.h" 24 #include "chrome/browser/media/router/mojo/media_router_mojo_metrics.h"
25 #include "chrome/browser/media/router/mojo/media_router_mojo_test.h" 25 #include "chrome/browser/media/router/mojo/media_router_mojo_test.h"
26 #include "chrome/browser/media/router/route_message_observer.h" 26 #include "chrome/browser/media/router/route_message_observer.h"
27 #include "chrome/browser/media/router/test_helper.h" 27 #include "chrome/browser/media/router/test_helper.h"
28 #include "chrome/common/media_router/issue.h" 28 #include "chrome/common/media_router/issue.h"
29 #include "chrome/common/media_router/media_route.h" 29 #include "chrome/common/media_router/media_route.h"
30 #include "chrome/common/media_router/media_source_helper.h" 30 #include "chrome/common/media_router/media_source_helper.h"
31 #include "chrome/common/media_router/route_message.h"
32 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 31 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
33 #include "chrome/test/base/testing_browser_process.h" 32 #include "chrome/test/base/testing_browser_process.h"
34 #include "chrome/test/base/testing_profile.h" 33 #include "chrome/test/base/testing_profile.h"
35 #include "components/version_info/version_info.h" 34 #include "components/version_info/version_info.h"
36 #include "content/public/test/test_browser_thread_bundle.h" 35 #include "content/public/test/test_browser_thread_bundle.h"
37 #include "extensions/browser/extension_registry.h" 36 #include "extensions/browser/extension_registry.h"
38 #include "extensions/browser/process_manager.h" 37 #include "extensions/browser/process_manager.h"
39 #include "extensions/browser/process_manager_factory.h" 38 #include "extensions/browser/process_manager_factory.h"
40 #include "extensions/common/extension.h" 39 #include "extensions/common/extension.h"
41 #include "extensions/common/extension_builder.h" 40 #include "extensions/common/extension_builder.h"
(...skipping 963 matching lines...) Expand 10 before | Expand all | Expand 10 after
1005 kRouteId, std::move(expected_binary_data), 1004 kRouteId, std::move(expected_binary_data),
1006 base::Bind(&SendMessageCallbackHandler::Invoke, 1005 base::Bind(&SendMessageCallbackHandler::Invoke,
1007 base::Unretained(&handler))); 1006 base::Unretained(&handler)));
1008 run_loop.Run(); 1007 run_loop.Run();
1009 } 1008 }
1010 1009
1011 namespace { 1010 namespace {
1012 1011
1013 // Used in the RouteMessages* tests to populate the messages that will be 1012 // Used in the RouteMessages* tests to populate the messages that will be
1014 // processed and dispatched to RouteMessageObservers. 1013 // processed and dispatched to RouteMessageObservers.
1015 void PopulateRouteMessages(std::vector<RouteMessage>* batch1, 1014 void PopulateRouteMessages(
1016 std::vector<RouteMessage>* batch2, 1015 std::vector<content::PresentationConnectionMessage>* batch1,
1017 std::vector<RouteMessage>* batch3) { 1016 std::vector<content::PresentationConnectionMessage>* batch2,
1018 batch1->resize(1); 1017 std::vector<content::PresentationConnectionMessage>* batch3,
1019 batch1->at(0).type = RouteMessage::TEXT; 1018 std::vector<content::PresentationConnectionMessage>* all_messages) {
1020 batch1->at(0).text = std::string("text1"); 1019 batch1->clear();
1021 batch2->resize(2); 1020 batch2->clear();
1022 batch2->at(0).type = RouteMessage::BINARY; 1021 batch3->clear();
1023 batch2->at(0).binary = std::vector<uint8_t>(1, UINT8_C(1)); 1022 batch1->emplace_back("text1");
1024 batch2->at(1).type = RouteMessage::TEXT; 1023 batch2->emplace_back(std::vector<uint8_t>(1, UINT8_C(1)));
1025 batch2->at(1).text = std::string("text2"); 1024 batch2->emplace_back("text2");
1026 batch3->resize(3); 1025 batch3->emplace_back("text3");
1027 batch3->at(0).type = RouteMessage::TEXT; 1026 batch3->emplace_back(std::vector<uint8_t>(1, UINT8_C(2)));
1028 batch3->at(0).text = std::string("text3"); 1027 batch3->emplace_back(std::vector<uint8_t>(1, UINT8_C(3)));
1029 batch3->at(1).type = RouteMessage::BINARY; 1028 all_messages->clear();
1030 batch3->at(1).binary = std::vector<uint8_t>(1, UINT8_C(2)); 1029 all_messages->insert(all_messages->end(), batch1->begin(), batch1->end());
1031 batch3->at(2).type = RouteMessage::BINARY; 1030 all_messages->insert(all_messages->end(), batch2->begin(), batch2->end());
1032 batch3->at(2).binary = std::vector<uint8_t>(1, UINT8_C(3)); 1031 all_messages->insert(all_messages->end(), batch3->begin(), batch3->end());
1033 } 1032 }
1034 1033
1035 // Used in the RouteMessages* tests to observe and sanity-check that the 1034 // Used in the RouteMessages* tests to observe and sanity-check that the
1036 // messages being received from the router are correct and in-sequence. The 1035 // messages being received from the router are correct and in-sequence. The
1037 // checks here correspond to the expected messages in PopulateRouteMessages() 1036 // checks here correspond to the expected messages in PopulateRouteMessages()
1038 // above. 1037 // above.
1039 class ExpectedMessagesObserver : public RouteMessageObserver { 1038 class ExpectedMessagesObserver : public RouteMessageObserver {
1040 public: 1039 public:
1041 ExpectedMessagesObserver(MediaRouter* router, const MediaRoute::Id& route_id) 1040 ExpectedMessagesObserver(
1042 : RouteMessageObserver(router, route_id) {} 1041 MediaRouter* router,
1042 const MediaRoute::Id& route_id,
1043 const std::vector<content::PresentationConnectionMessage>&
1044 expected_messages)
1045 : RouteMessageObserver(router, route_id),
1046 expected_messages_(expected_messages) {}
1043 1047
1044 ~ExpectedMessagesObserver() final { 1048 ~ExpectedMessagesObserver() final {
1045 CheckReceivedMessages(); 1049 CheckReceivedMessages();
1046 } 1050 }
1047 1051
1048 private: 1052 private:
1049 void OnMessagesReceived( 1053 void OnMessagesReceived(
1050 const std::vector<RouteMessage>& messages) final { 1054 const std::vector<content::PresentationConnectionMessage>& messages)
1055 final {
1051 messages_.insert(messages_.end(), messages.begin(), messages.end()); 1056 messages_.insert(messages_.end(), messages.begin(), messages.end());
1052 } 1057 }
1053 1058
1054 void CheckReceivedMessages() { 1059 void CheckReceivedMessages() {
1055 ASSERT_EQ(6u, messages_.size()); 1060 ASSERT_EQ(expected_messages_.size(), messages_.size());
1056 EXPECT_EQ(RouteMessage::TEXT, messages_[0].type); 1061 for (size_t i = 0; i < expected_messages_.size(); i++) {
1057 ASSERT_TRUE(messages_[0].text); 1062 EXPECT_EQ(expected_messages_[i], messages_[i])
1058 EXPECT_EQ("text1", *messages_[0].text); 1063 << "Message mismatch at index " << i << ": expected: "
1059 EXPECT_EQ(RouteMessage::BINARY, messages_[1].type); 1064 << PresentationConnectionMessageToString(expected_messages_[i])
1060 ASSERT_TRUE(messages_[1].binary); 1065 << ", actual: "
1061 ASSERT_EQ(1u, messages_[1].binary->size()); 1066 << PresentationConnectionMessageToString(messages_[i]);
1062 EXPECT_EQ(UINT8_C(1), messages_[1].binary->front()); 1067 }
1063 EXPECT_EQ(RouteMessage::TEXT, messages_[2].type);
1064 ASSERT_TRUE(messages_[2].text);
1065 EXPECT_EQ("text2", *messages_[2].text);
1066 EXPECT_EQ(RouteMessage::TEXT, messages_[3].type);
1067 ASSERT_TRUE(messages_[3].text);
1068 EXPECT_EQ("text3", *messages_[3].text);
1069 EXPECT_EQ(RouteMessage::BINARY, messages_[4].type);
1070 ASSERT_TRUE(messages_[4].binary);
1071 ASSERT_EQ(1u, messages_[4].binary->size());
1072 EXPECT_EQ(UINT8_C(2), messages_[4].binary->front());
1073 EXPECT_EQ(RouteMessage::BINARY, messages_[5].type);
1074 ASSERT_TRUE(messages_[5].binary);
1075 ASSERT_EQ(1u, messages_[5].binary->size());
1076 EXPECT_EQ(UINT8_C(3), messages_[5].binary->front());
1077 } 1068 }
1078 1069
1079 std::vector<RouteMessage> messages_; 1070 std::vector<content::PresentationConnectionMessage> expected_messages_;
1071 std::vector<content::PresentationConnectionMessage> messages_;
1080 }; 1072 };
1081 1073
1082 class NullMessageObserver : public RouteMessageObserver { 1074 class NullMessageObserver : public RouteMessageObserver {
1083 public: 1075 public:
1084 NullMessageObserver(MediaRouter* router, const MediaRoute::Id& route_id) 1076 NullMessageObserver(MediaRouter* router, const MediaRoute::Id& route_id)
1085 : RouteMessageObserver(router, route_id) {} 1077 : RouteMessageObserver(router, route_id) {}
1086 ~NullMessageObserver() final {} 1078 ~NullMessageObserver() final {}
1087 1079
1088 void OnMessagesReceived(const std::vector<RouteMessage>& messages) final {} 1080 void OnMessagesReceived(
1081 const std::vector<content::PresentationConnectionMessage>& messages)
1082 final {}
1089 }; 1083 };
1090 1084
1091 } // namespace 1085 } // namespace
1092 1086
1093 TEST_F(MediaRouterMojoImplTest, RouteMessagesSingleObserver) { 1087 TEST_F(MediaRouterMojoImplTest, RouteMessagesSingleObserver) {
1094 std::vector<RouteMessage> incoming_batch1, incoming_batch2, incoming_batch3; 1088 std::vector<content::PresentationConnectionMessage> incoming_batch1,
1095 PopulateRouteMessages(&incoming_batch1, &incoming_batch2, &incoming_batch3); 1089 incoming_batch2, incoming_batch3, all_messages;
1090 PopulateRouteMessages(&incoming_batch1, &incoming_batch2, &incoming_batch3,
1091 &all_messages);
1096 1092
1097 base::RunLoop run_loop; 1093 base::RunLoop run_loop;
1098 MediaRoute::Id expected_route_id("foo"); 1094 MediaRoute::Id expected_route_id("foo");
1099 EXPECT_CALL(mock_media_route_provider_, 1095 EXPECT_CALL(mock_media_route_provider_,
1100 StartListeningForRouteMessages(Eq(expected_route_id))) 1096 StartListeningForRouteMessages(Eq(expected_route_id)))
1101 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 1097 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
1102 1098
1103 // Creating ExpectedMessagesObserver will register itself to the 1099 // Creating ExpectedMessagesObserver will register itself to the
1104 // MediaRouter, which in turn will start listening for route messages. 1100 // MediaRouter, which in turn will start listening for route messages.
1105 ExpectedMessagesObserver observer(router(), expected_route_id); 1101 ExpectedMessagesObserver observer(router(), expected_route_id, all_messages);
1106 run_loop.Run(); // Will quit when StartListeningForRouteMessages() is called. 1102 run_loop.Run(); // Will quit when StartListeningForRouteMessages() is called.
1107 router()->OnRouteMessagesReceived(expected_route_id, incoming_batch1); 1103 router()->OnRouteMessagesReceived(expected_route_id, incoming_batch1);
1108 router()->OnRouteMessagesReceived(expected_route_id, incoming_batch2); 1104 router()->OnRouteMessagesReceived(expected_route_id, incoming_batch2);
1109 router()->OnRouteMessagesReceived(expected_route_id, incoming_batch3); 1105 router()->OnRouteMessagesReceived(expected_route_id, incoming_batch3);
1110 // When |observer| goes out-of-scope, its destructor will ensure all expected 1106 // When |observer| goes out-of-scope, its destructor will ensure all expected
1111 // messages have been received. 1107 // messages have been received.
1112 } 1108 }
1113 1109
1114 TEST_F(MediaRouterMojoImplTest, RouteMessagesMultipleObservers) { 1110 TEST_F(MediaRouterMojoImplTest, RouteMessagesMultipleObservers) {
1115 std::vector<RouteMessage> incoming_batch1, incoming_batch2, incoming_batch3; 1111 std::vector<content::PresentationConnectionMessage> incoming_batch1,
1116 PopulateRouteMessages(&incoming_batch1, &incoming_batch2, &incoming_batch3); 1112 incoming_batch2, incoming_batch3, all_messages;
1113 PopulateRouteMessages(&incoming_batch1, &incoming_batch2, &incoming_batch3,
1114 &all_messages);
1117 1115
1118 base::RunLoop run_loop; 1116 base::RunLoop run_loop;
1119 MediaRoute::Id expected_route_id("foo"); 1117 MediaRoute::Id expected_route_id("foo");
1120 EXPECT_CALL(mock_media_route_provider_, 1118 EXPECT_CALL(mock_media_route_provider_,
1121 StartListeningForRouteMessages(Eq(expected_route_id))) 1119 StartListeningForRouteMessages(Eq(expected_route_id)))
1122 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 1120 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
1123 1121
1124 // The ExpectedMessagesObservers will register themselves with the 1122 // The ExpectedMessagesObservers will register themselves with the
1125 // MediaRouter, which in turn will start listening for route messages. 1123 // MediaRouter, which in turn will start listening for route messages.
1126 ExpectedMessagesObserver observer1(router(), expected_route_id); 1124 ExpectedMessagesObserver observer1(router(), expected_route_id, all_messages);
1127 ExpectedMessagesObserver observer2(router(), expected_route_id); 1125 ExpectedMessagesObserver observer2(router(), expected_route_id, all_messages);
1128 run_loop.Run(); // Will quit when StartListeningForRouteMessages() is called. 1126 run_loop.Run(); // Will quit when StartListeningForRouteMessages() is called.
1129 router()->OnRouteMessagesReceived(expected_route_id, incoming_batch1); 1127 router()->OnRouteMessagesReceived(expected_route_id, incoming_batch1);
1130 router()->OnRouteMessagesReceived(expected_route_id, incoming_batch2); 1128 router()->OnRouteMessagesReceived(expected_route_id, incoming_batch2);
1131 router()->OnRouteMessagesReceived(expected_route_id, incoming_batch3); 1129 router()->OnRouteMessagesReceived(expected_route_id, incoming_batch3);
1132 // As each |observer| goes out-of-scope, its destructor will ensure all 1130 // As each |observer| goes out-of-scope, its destructor will ensure all
1133 // expected messages have been received. 1131 // expected messages have been received.
1134 } 1132 }
1135 1133
1136 TEST_F(MediaRouterMojoImplTest, PresentationConnectionStateChangedCallback) { 1134 TEST_F(MediaRouterMojoImplTest, PresentationConnectionStateChangedCallback) {
1137 MediaRoute::Id route_id("route-id"); 1135 MediaRoute::Id route_id("route-id");
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after
1606 EXPECT_CALL(mock_media_route_provider_, 1604 EXPECT_CALL(mock_media_route_provider_,
1607 StartListeningForRouteMessages(media_source.id())); 1605 StartListeningForRouteMessages(media_source.id()));
1608 media_router_->OnConnectionError(); 1606 media_router_->OnConnectionError();
1609 BindMediaRouteProvider(); 1607 BindMediaRouteProvider();
1610 RegisterMediaRouteProvider(); 1608 RegisterMediaRouteProvider();
1611 base::RunLoop().RunUntilIdle(); 1609 base::RunLoop().RunUntilIdle();
1612 } 1610 }
1613 } 1611 }
1614 1612
1615 } // namespace media_router 1613 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698