| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |