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

Side by Side Diff: content/browser/presentation/presentation_service_impl_unittest.cc

Issue 2477573002: [Presentation API] (3rd) (1-UA) Split PresentationServiceDelegateImpl(PSDImpl) (Closed)
Patch Set: rebase Created 4 years, 1 month 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 "content/browser/presentation/presentation_service_impl.h" 5 #include "content/browser/presentation/presentation_service_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <memory> 10 #include <memory>
(...skipping 26 matching lines...) Expand all
37 37
38 namespace content { 38 namespace content {
39 39
40 namespace { 40 namespace {
41 41
42 // Matches Mojo structs. 42 // Matches Mojo structs.
43 MATCHER_P(Equals, expected, "") { 43 MATCHER_P(Equals, expected, "") {
44 return expected.Equals(arg); 44 return expected.Equals(arg);
45 } 45 }
46 46
47 // Matches PresentationSessionInfo passed by reference. 47 // Matches blink::mojom::PresentationSessionInfo passed by reference.
48 MATCHER_P(SessionInfoEquals, expected, "") { 48 MATCHER_P(SessionInfoEquals, expected, "") {
49 blink::mojom::PresentationSessionInfo& expected_value = expected; 49 blink::mojom::PresentationSessionInfo& expected_value = expected;
50 return expected_value.Equals(arg); 50 return expected_value.Equals(arg);
51 } 51 }
52 52
53 // Matches content::PresentationSessionInfo passed by reference.
54 MATCHER_P(ContentSessionInfoEquals, expected, "") {
mark a. foltz 2016/11/15 23:41:47 Nice :)
55 const content::PresentationSessionInfo& expected_value = expected;
56 return expected_value.presentation_url == arg.presentation_url &&
57 expected_value.presentation_id == arg.presentation_id &&
58 expected_value.is_offscreen == arg.is_offscreen;
59 }
60
53 const char kPresentationId[] = "presentationId"; 61 const char kPresentationId[] = "presentationId";
54 const char kPresentationUrl1[] = "http://foo.com/index.html"; 62 const char kPresentationUrl1[] = "http://foo.com/index.html";
55 const char kPresentationUrl2[] = "http://example.com/index.html"; 63 const char kPresentationUrl2[] = "http://example.com/index.html";
56 const char kPresentationUrl3[] = "http://example.net/index.html"; 64 const char kPresentationUrl3[] = "http://example.net/index.html";
57 65
58 void DoNothing(blink::mojom::PresentationSessionInfoPtr info, 66 void DoNothing(blink::mojom::PresentationSessionInfoPtr info,
59 blink::mojom::PresentationErrorPtr error) {} 67 blink::mojom::PresentationErrorPtr error) {}
60 68
61 } // namespace 69 } // namespace
62 70
63 class MockPresentationServiceDelegate : public PresentationServiceDelegate { 71 class MockPresentationServiceDelegate
72 : public ControllerPresentationServiceDelegate {
64 public: 73 public:
65 MOCK_METHOD3(AddObserver, 74 MOCK_METHOD3(AddObserver,
66 void(int render_process_id, 75 void(int render_process_id,
67 int render_frame_id, 76 int render_frame_id,
68 PresentationServiceDelegate::Observer* observer)); 77 PresentationServiceDelegateBase::Observer* observer));
69 MOCK_METHOD2(RemoveObserver, 78 MOCK_METHOD2(RemoveObserver,
70 void(int render_process_id, int render_frame_id)); 79 void(int render_process_id, int render_frame_id));
71 80
72 bool AddScreenAvailabilityListener( 81 bool AddScreenAvailabilityListener(
73 int render_process_id, 82 int render_process_id,
74 int routing_id, 83 int routing_id,
75 PresentationScreenAvailabilityListener* listener) override { 84 PresentationScreenAvailabilityListener* listener) override {
76 if (!screen_availability_listening_supported_) 85 if (!screen_availability_listening_supported_)
77 listener->OnScreenAvailabilityNotSupported(); 86 listener->OnScreenAvailabilityNotSupported();
78 87
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 SendMessageRawPtr(render_process_id, render_frame_id, session, 141 SendMessageRawPtr(render_process_id, render_frame_id, session,
133 message_request.release(), send_message_cb); 142 message_request.release(), send_message_cb);
134 } 143 }
135 MOCK_METHOD4(ListenForConnectionStateChange, 144 MOCK_METHOD4(ListenForConnectionStateChange,
136 void(int render_process_id, 145 void(int render_process_id,
137 int render_frame_id, 146 int render_frame_id,
138 const content::PresentationSessionInfo& connection, 147 const content::PresentationSessionInfo& connection,
139 const content::PresentationConnectionStateChangedCallback& 148 const content::PresentationConnectionStateChangedCallback&
140 state_changed_cb)); 149 state_changed_cb));
141 150
151 void ConnectToOffscreenPresentation(
152 int render_process_id,
153 int render_frame_id,
154 const content::PresentationSessionInfo& session,
155 PresentationConnectionPtr connection) override {
156 RegisterOffscreenPresentationConnectionRaw(
157 render_process_id, render_frame_id, session, connection.get());
158 }
159
160 MOCK_METHOD4(RegisterOffscreenPresentationConnectionRaw,
161 void(int render_process_id,
162 int render_frame_id,
163 const content::PresentationSessionInfo& session,
164 blink::mojom::PresentationConnection* connection));
165
142 void set_screen_availability_listening_supported(bool value) { 166 void set_screen_availability_listening_supported(bool value) {
143 screen_availability_listening_supported_ = value; 167 screen_availability_listening_supported_ = value;
144 } 168 }
145 169
146 private: 170 private:
147 bool screen_availability_listening_supported_ = true; 171 bool screen_availability_listening_supported_ = true;
148 }; 172 };
149 173
174 class MockReceiverPresentationServiceDelegate
175 : public ReceiverPresentationServiceDelegate {
176 public:
177 MOCK_METHOD3(AddObserver,
178 void(int render_process_id,
179 int render_frame_id,
180 PresentationServiceDelegateBase::Observer* observer));
181 MOCK_METHOD2(RemoveObserver,
182 void(int render_process_id, int render_frame_id));
183 MOCK_METHOD2(Reset, void(int render_process_id, int routing_id));
184 MOCK_METHOD1(RegisterReceiverConnectionAvailableCallback,
185 void(const content::ReceiverConnectionAvailableCallback&));
186 };
187
188 class MockPresentationConnection : public blink::mojom::PresentationConnection {
189 public:
190 void SetTargetConnection(
191 blink::mojom::PresentationConnectionPtr connection) override {
192 SetTargetConnection(*connection);
193 }
194 MOCK_METHOD1(SetTargetConnection,
195 void(blink::mojom::PresentationConnection& connection));
196
197 void OnMessage(blink::mojom::SessionMessagePtr message) override {
198 OnConnectionMessageReceived(*message);
199 }
200 MOCK_METHOD1(OnConnectionMessageReceived,
201 void(const blink::mojom::SessionMessage& message));
202 };
203
150 class MockPresentationServiceClient 204 class MockPresentationServiceClient
151 : public blink::mojom::PresentationServiceClient { 205 : public blink::mojom::PresentationServiceClient {
152 public: 206 public:
153 MOCK_METHOD2(OnScreenAvailabilityUpdated, 207 MOCK_METHOD2(OnScreenAvailabilityUpdated,
154 void(const GURL& url, bool available)); 208 void(const GURL& url, bool available));
155 void OnConnectionStateChanged( 209 void OnConnectionStateChanged(
156 blink::mojom::PresentationSessionInfoPtr connection, 210 blink::mojom::PresentationSessionInfoPtr connection,
157 blink::mojom::PresentationConnectionState new_state) override { 211 blink::mojom::PresentationConnectionState new_state) override {
158 OnConnectionStateChanged(*connection, new_state); 212 OnConnectionStateChanged(*connection, new_state);
159 } 213 }
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 presentation_url3_(GURL(kPresentationUrl3)) {} 261 presentation_url3_(GURL(kPresentationUrl3)) {}
208 262
209 void SetUp() override { 263 void SetUp() override {
210 RenderViewHostImplTestHarness::SetUp(); 264 RenderViewHostImplTestHarness::SetUp();
211 265
212 auto request = mojo::GetProxy(&service_ptr_); 266 auto request = mojo::GetProxy(&service_ptr_);
213 EXPECT_CALL(mock_delegate_, AddObserver(_, _, _)).Times(1); 267 EXPECT_CALL(mock_delegate_, AddObserver(_, _, _)).Times(1);
214 TestRenderFrameHost* render_frame_host = contents()->GetMainFrame(); 268 TestRenderFrameHost* render_frame_host = contents()->GetMainFrame();
215 render_frame_host->InitializeRenderFrameIfNeeded(); 269 render_frame_host->InitializeRenderFrameIfNeeded();
216 service_impl_.reset(new PresentationServiceImpl( 270 service_impl_.reset(new PresentationServiceImpl(
217 render_frame_host, contents(), &mock_delegate_)); 271 render_frame_host, contents(), &mock_delegate_, nullptr));
218 service_impl_->Bind(std::move(request)); 272 service_impl_->Bind(std::move(request));
219 273
220 blink::mojom::PresentationServiceClientPtr client_ptr; 274 blink::mojom::PresentationServiceClientPtr client_ptr;
221 client_binding_.reset( 275 client_binding_.reset(
222 new mojo::Binding<blink::mojom::PresentationServiceClient>( 276 new mojo::Binding<blink::mojom::PresentationServiceClient>(
223 &mock_client_, mojo::GetProxy(&client_ptr))); 277 &mock_client_, mojo::GetProxy(&client_ptr)));
224 service_impl_->SetClient(std::move(client_ptr)); 278 service_impl_->SetClient(std::move(client_ptr));
225 279
226 presentation_urls_.push_back(presentation_url1_); 280 presentation_urls_.push_back(presentation_url1_);
227 presentation_urls_.push_back(presentation_url2_); 281 presentation_urls_.push_back(presentation_url2_);
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 base::RunLoop run_loop; 421 base::RunLoop run_loop;
368 EXPECT_CALL(mock_client_, MessagesReceived()) 422 EXPECT_CALL(mock_client_, MessagesReceived())
369 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); 423 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
370 message_cb.Run(std::move(messages), pass_ownership); 424 message_cb.Run(std::move(messages), pass_ownership);
371 run_loop.Run(); 425 run_loop.Run();
372 } 426 }
373 ExpectSessionMessages(expected_msgs, mock_client_.messages_received_); 427 ExpectSessionMessages(expected_msgs, mock_client_.messages_received_);
374 } 428 }
375 429
376 MockPresentationServiceDelegate mock_delegate_; 430 MockPresentationServiceDelegate mock_delegate_;
431 MockReceiverPresentationServiceDelegate mock_receiver_delegate_;
377 432
378 std::unique_ptr<PresentationServiceImpl> service_impl_; 433 std::unique_ptr<PresentationServiceImpl> service_impl_;
379 mojo::InterfacePtr<blink::mojom::PresentationService> service_ptr_; 434 mojo::InterfacePtr<blink::mojom::PresentationService> service_ptr_;
380 435
381 MockPresentationServiceClient mock_client_; 436 MockPresentationServiceClient mock_client_;
382 std::unique_ptr<mojo::Binding<blink::mojom::PresentationServiceClient>> 437 std::unique_ptr<mojo::Binding<blink::mojom::PresentationServiceClient>>
383 client_binding_; 438 client_binding_;
384 439
385 base::Closure run_loop_quit_closure_; 440 base::Closure run_loop_quit_closure_;
386 441
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
662 std::vector<uint8_t> binary_data(3, '\1'); 717 std::vector<uint8_t> binary_data(3, '\1');
663 RunListenForSessionMessages(text_msg, binary_data, false); 718 RunListenForSessionMessages(text_msg, binary_data, false);
664 } 719 }
665 720
666 TEST_F(PresentationServiceImplTest, ListenForSessionMessagesWithEmptyMsg) { 721 TEST_F(PresentationServiceImplTest, ListenForSessionMessagesWithEmptyMsg) {
667 std::string text_msg(""); 722 std::string text_msg("");
668 std::vector<uint8_t> binary_data; 723 std::vector<uint8_t> binary_data;
669 RunListenForSessionMessages(text_msg, binary_data, false); 724 RunListenForSessionMessages(text_msg, binary_data, false);
670 } 725 }
671 726
727 TEST_F(PresentationServiceImplTest, SetPresentationConnection) {
728 blink::mojom::PresentationSessionInfoPtr session(
729 blink::mojom::PresentationSessionInfo::New());
730 session->url = presentation_url1_;
731 session->id = kPresentationId;
732
733 blink::mojom::PresentationConnectionPtr connection;
734 MockPresentationConnection mock_presentation_connection;
735 mojo::Binding<blink::mojom::PresentationConnection> connection_binding(
736 &mock_presentation_connection, mojo::GetProxy(&connection));
737
738 content::PresentationSessionInfo expected(presentation_url1_, kPresentationId,
739 false);
740 EXPECT_CALL(mock_delegate_,
741 RegisterOffscreenPresentationConnectionRaw(
742 _, _, ContentSessionInfoEquals(ByRef(expected)), _));
743
744 service_impl_->SetPresentationConnection(std::move(session),
745 std::move(connection));
746 }
747
748 TEST_F(PresentationServiceImplTest, ReceiverPresentationServiceDelegate) {
749 MockReceiverPresentationServiceDelegate mock_receiver_delegate;
750
751 PresentationServiceImpl service_impl(contents()->GetMainFrame(), contents(),
752 nullptr, &mock_receiver_delegate);
753
754 ReceiverConnectionAvailableCallback callback;
755 EXPECT_CALL(mock_receiver_delegate,
756 RegisterReceiverConnectionAvailableCallback(_))
757 .WillOnce(SaveArg<0>(&callback));
758
759 blink::mojom::PresentationServiceClientPtr client_ptr;
760 client_binding_.reset(
761 new mojo::Binding<blink::mojom::PresentationServiceClient>(
762 &mock_client_, mojo::GetProxy(&client_ptr)));
763 service_impl.controller_delegate_ = nullptr;
764 service_impl.SetClient(std::move(client_ptr));
765 EXPECT_FALSE(callback.is_null());
766
767 // NO-OP for ControllerPresentationServiceDelegate API functions
768 EXPECT_CALL(mock_delegate_, ListenForSessionMessages(_, _, _, _)).Times(0);
769
770 blink::mojom::PresentationSessionInfoPtr session(
771 blink::mojom::PresentationSessionInfo::New());
772 session->url = GURL(kPresentationUrl1);
773 session->id = kPresentationId;
774
775 service_impl.ListenForSessionMessages(std::move(session));
776 }
777
672 TEST_F(PresentationServiceImplTest, StartSessionInProgress) { 778 TEST_F(PresentationServiceImplTest, StartSessionInProgress) {
673 EXPECT_CALL(mock_delegate_, StartSession(_, _, presentation_urls_, _, _)) 779 EXPECT_CALL(mock_delegate_, StartSession(_, _, presentation_urls_, _, _))
674 .Times(1); 780 .Times(1);
675 service_ptr_->StartSession(presentation_urls_, base::Bind(&DoNothing)); 781 service_ptr_->StartSession(presentation_urls_, base::Bind(&DoNothing));
676 782
677 // This request should fail immediately, since there is already a StartSession 783 // This request should fail immediately, since there is already a StartSession
678 // in progress. 784 // in progress.
679 service_ptr_->StartSession( 785 service_ptr_->StartSession(
680 presentation_urls_, 786 presentation_urls_,
681 base::Bind(&PresentationServiceImplTest::ExpectNewSessionCallbackError, 787 base::Bind(&PresentationServiceImplTest::ExpectNewSessionCallbackError,
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
860 mock_delegate_.set_screen_availability_listening_supported(false); 966 mock_delegate_.set_screen_availability_listening_supported(false);
861 base::RunLoop run_loop; 967 base::RunLoop run_loop;
862 EXPECT_CALL(mock_client_, 968 EXPECT_CALL(mock_client_,
863 OnScreenAvailabilityNotSupported(presentation_url1_)) 969 OnScreenAvailabilityNotSupported(presentation_url1_))
864 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); 970 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
865 ListenForScreenAvailabilityAndWait(presentation_url1_, false); 971 ListenForScreenAvailabilityAndWait(presentation_url1_, false);
866 run_loop.Run(); 972 run_loop.Run();
867 } 973 }
868 974
869 } // namespace content 975 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698