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; |