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

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

Powered by Google App Engine
This is Rietveld 408576698