Chromium Code Reviews| Index: content/renderer/presentation/presentation_dispatcher_unittest.cc |
| diff --git a/content/renderer/presentation/presentation_dispatcher_unittest.cc b/content/renderer/presentation/presentation_dispatcher_unittest.cc |
| index 8ef966d774bc90bbb97a7c9eabfd6bf80f52cc4e..b37a95206ec6ea3016880939e221949fda15cf17 100644 |
| --- a/content/renderer/presentation/presentation_dispatcher_unittest.cc |
| +++ b/content/renderer/presentation/presentation_dispatcher_unittest.cc |
| @@ -7,6 +7,7 @@ |
| #include "base/run_loop.h" |
| #include "content/public/test/test_browser_thread_bundle.h" |
| +#include "content/renderer/presentation/presentation_connection_proxy.h" |
| #include "content/renderer/presentation/presentation_dispatcher.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "third_party/WebKit/public/platform/modules/presentation/WebPresentationAvailabilityObserver.h" |
| @@ -112,13 +113,41 @@ class MockPresentationService : public PresentationService { |
| blink::mojom::PresentationConnectionPtr controller_conn_ptr, |
| blink::mojom::PresentationConnectionRequest receiver_conn_request) |
| override { |
| - SetPresentationConnection(session.get(), controller_conn_ptr.get()); |
| + SetPresentationConnectionInternal(session.get(), controller_conn_ptr.get()); |
| } |
| - MOCK_METHOD2(SetPresentationConnection, |
| + MOCK_METHOD2(SetPresentationConnectionInternal, |
| void(PresentationSessionInfo* session_info, |
| PresentationConnection* connection)); |
| }; |
| +class TestPresentationConnection : public blink::WebPresentationConnection { |
| + public: |
| + void setProxy( |
| + std::unique_ptr<blink::WebPresentationConnectionProxy> proxy) override { |
| + proxy_ = std::move(proxy); |
| + } |
| + MOCK_METHOD1(didReceiveTextMessage, void(const WebString& message)); |
| + MOCK_METHOD2(didReceiveBinaryMessage, |
| + void(const uint8_t* data, size_t length)); |
| + MOCK_METHOD1(didChangeState, void(blink::WebPresentationConnectionState)); |
| + |
| + std::unique_ptr<blink::WebPresentationConnectionProxy> proxy_; |
| +}; |
| + |
| +class TestPresentationConnectionProxy : public PresentationConnectionProxy { |
| + public: |
| + TestPresentationConnectionProxy(blink::WebPresentationConnection* connection) |
| + : PresentationConnectionProxy(connection) {} |
| + |
| + void SendConnectionMessage(blink::mojom::ConnectionMessagePtr session_message, |
| + const OnMessageCallback& callback) const override { |
| + SendConnectionMessageInternal(session_message.get(), callback); |
| + } |
| + MOCK_CONST_METHOD2(SendConnectionMessageInternal, |
| + void(blink::mojom::ConnectionMessage*, |
| + const OnMessageCallback&)); |
| +}; |
| + |
| class TestWebPresentationConnectionCallback |
| : public WebPresentationConnectionCallbacks { |
| public: |
| @@ -134,12 +163,15 @@ class TestWebPresentationConnectionCallback |
| EXPECT_EQ(info.id, id_); |
| } |
| - blink::WebPresentationConnection* getConnection() override { return nullptr; } |
| + blink::WebPresentationConnection* getConnection() override { |
| + return &connection_; |
| + } |
| private: |
| const WebURL url_; |
| const WebString id_; |
| bool callback_called_; |
| + TestPresentationConnection connection_; |
| }; |
| class TestWebPresentationConnectionErrorCallback |
| @@ -232,6 +264,8 @@ class PresentationDispatcherTest : public ::testing::Test { |
| TEST_F(PresentationDispatcherTest, TestStartSession) { |
|
mark a. foltz
2017/01/23 22:29:34
Are there expectations covering that the proxies a
zhaobin
2017/01/24 19:28:46
Done.
|
| base::RunLoop run_loop; |
| + EXPECT_CALL(presentation_service_, ListenForConnectionMessagesInternal(_)); |
| + EXPECT_CALL(presentation_service_, SetPresentationConnectionInternal(_, _)); |
| EXPECT_CALL(presentation_service_, StartSession(gurls_, _)) |
| .WillOnce(Invoke([this]( |
| const std::vector<GURL>& presentation_urls, |
| @@ -293,6 +327,8 @@ TEST_F(PresentationDispatcherTest, TestJoinSessionError) { |
| TEST_F(PresentationDispatcherTest, TestJoinSession) { |
| base::RunLoop run_loop; |
| + EXPECT_CALL(presentation_service_, ListenForConnectionMessagesInternal(_)); |
| + EXPECT_CALL(presentation_service_, SetPresentationConnectionInternal(_, _)); |
| EXPECT_CALL(presentation_service_, JoinSession(gurls_, _, _)) |
| .WillOnce(Invoke([this]( |
| const std::vector<GURL>& presentation_urls, |
| @@ -314,52 +350,48 @@ TEST_F(PresentationDispatcherTest, TestJoinSession) { |
| TEST_F(PresentationDispatcherTest, TestSendString) { |
| WebString message = WebString::fromUTF8("test message"); |
| + TestPresentationConnection connection; |
| + TestPresentationConnectionProxy connection_proxy(&connection); |
| + |
| base::RunLoop run_loop; |
| - EXPECT_CALL(presentation_service_, SendConnectionMessageInternal(_, _, _)) |
| - .WillOnce(Invoke([this, &message]( |
| - PresentationSessionInfo* session_info, |
| - ConnectionMessage* message_request, |
| - const PresentationService::SendConnectionMessageCallback& callback) { |
| - EXPECT_EQ(gurl1_, session_info->url); |
| - EXPECT_EQ(presentation_id_.utf8(), session_info->id); |
| - EXPECT_TRUE(message_request->message.has_value()); |
| - EXPECT_EQ(message.utf8(), message_request->message.value()); |
| - callback.Run(true); |
| + EXPECT_CALL(connection_proxy, SendConnectionMessageInternal(_, _)) |
| + .WillOnce(Invoke([this, &message](ConnectionMessage* session_message, |
| + const OnMessageCallback& callback) { |
| + EXPECT_EQ(blink::mojom::PresentationMessageType::TEXT, |
| + session_message->type); |
| + EXPECT_EQ(message.utf8(), session_message->message.value()); |
| })); |
| - dispatcher_.sendString(url1_, presentation_id_, message, nullptr); |
| + dispatcher_.sendString(url1_, presentation_id_, message, &connection_proxy); |
| run_loop.RunUntilIdle(); |
| } |
| TEST_F(PresentationDispatcherTest, TestSendArrayBuffer) { |
| + TestPresentationConnection connection; |
| + TestPresentationConnectionProxy connection_proxy(&connection); |
| + |
| base::RunLoop run_loop; |
| - EXPECT_CALL(presentation_service_, SendConnectionMessageInternal(_, _, _)) |
| - .WillOnce(Invoke([this]( |
| - PresentationSessionInfo* session_info, |
| - ConnectionMessage* message_request, |
| - const PresentationService::SendConnectionMessageCallback& callback) { |
| - EXPECT_EQ(gurl1_, session_info->url); |
| - EXPECT_EQ(presentation_id_.utf8(), session_info->id); |
| + EXPECT_CALL(connection_proxy, SendConnectionMessageInternal(_, _)) |
| + .WillOnce(Invoke([this](ConnectionMessage* message_request, |
| + const OnMessageCallback& callback) { |
| std::vector<uint8_t> data( |
| array_buffer_data(), |
| array_buffer_data() + array_buffer_.byteLength()); |
| EXPECT_TRUE(message_request->data.has_value()); |
| EXPECT_EQ(data, message_request->data.value()); |
| - callback.Run(true); |
| })); |
| dispatcher_.sendArrayBuffer(url1_, presentation_id_, array_buffer_data(), |
| - array_buffer_.byteLength(), nullptr); |
| + array_buffer_.byteLength(), &connection_proxy); |
| run_loop.RunUntilIdle(); |
| } |
| TEST_F(PresentationDispatcherTest, TestSendBlobData) { |
|
mark a. foltz
2017/01/23 22:29:34
Does there need to be a test case added for OnRece
zhaobin
2017/01/24 19:28:46
Done.
|
| + TestPresentationConnection connection; |
| + TestPresentationConnectionProxy connection_proxy(&connection); |
| + |
| base::RunLoop run_loop; |
| - EXPECT_CALL(presentation_service_, SendConnectionMessageInternal(_, _, _)) |
| - .WillOnce(Invoke([this]( |
| - PresentationSessionInfo* session_info, |
| - ConnectionMessage* message_request, |
| - const PresentationService::SendConnectionMessageCallback& callback) { |
| - EXPECT_EQ(gurl1_, session_info->url); |
| - EXPECT_EQ(presentation_id_.utf8(), session_info->id); |
| + EXPECT_CALL(connection_proxy, SendConnectionMessageInternal(_, _)) |
| + .WillOnce(Invoke([this](ConnectionMessage* message_request, |
| + const OnMessageCallback& callback) { |
| std::vector<uint8_t> data( |
| array_buffer_data(), |
| array_buffer_data() + array_buffer_.byteLength()); |
| @@ -368,7 +400,7 @@ TEST_F(PresentationDispatcherTest, TestSendBlobData) { |
| callback.Run(true); |
| })); |
| dispatcher_.sendBlobData(url1_, presentation_id_, array_buffer_data(), |
| - array_buffer_.byteLength(), nullptr); |
| + array_buffer_.byteLength(), &connection_proxy); |
| run_loop.RunUntilIdle(); |
| } |
| @@ -394,6 +426,8 @@ TEST_F(PresentationDispatcherTest, TestListenForScreenAvailability) { |
| dispatcher_.getAvailability( |
| url1_, base::MakeUnique<WebPresentationAvailabilityCallbacks>()); |
| dispatcher_.OnScreenAvailabilityUpdated(url1_, true); |
| + EXPECT_CALL(presentation_service_, |
| + StopListeningForScreenAvailability(gurl1_)); |
| run_loop1.RunUntilIdle(); |
| base::RunLoop run_loop2; |