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 |