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 4fb461ef29ee355aa82c24b9088909310cdcbcc5..3918c37c0b1e936b59ddbd7f513b8f8eb117ef08 100644 |
--- a/content/renderer/presentation/presentation_dispatcher_unittest.cc |
+++ b/content/renderer/presentation/presentation_dispatcher_unittest.cc |
@@ -16,6 +16,7 @@ |
#include "third_party/WebKit/public/platform/modules/presentation/WebPresentationConnectionCallbacks.h" |
#include "third_party/WebKit/public/platform/modules/presentation/WebPresentationController.h" |
#include "third_party/WebKit/public/platform/modules/presentation/WebPresentationError.h" |
+#include "third_party/WebKit/public/platform/modules/presentation/WebPresentationReceiver.h" |
#include "third_party/WebKit/public/platform/modules/presentation/WebPresentationSessionInfo.h" |
#include "third_party/WebKit/public/web/WebArrayBuffer.h" |
@@ -115,13 +116,37 @@ 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 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 TestPresentationReceiver : public blink::WebPresentationReceiver { |
+ public: |
+ blink::WebPresentationConnection* onReceiverConnectionAvailable( |
+ const blink::WebPresentationSessionInfo&) override { |
+ return &connection_; |
+ } |
+ |
+ TestPresentationConnection connection_; |
+}; |
+ |
class MockPresentationAvailabilityCallbacks |
: public blink::WebCallbacks<bool, const blink::WebPresentationError&> { |
public: |
@@ -148,11 +173,12 @@ class TestWebPresentationConnectionCallback |
return &connection_; |
} |
+ TestPresentationConnection connection_; |
+ |
private: |
const WebURL url_; |
const WebString id_; |
bool callback_called_; |
- TestPresentationConnection connection_; |
}; |
class TestWebPresentationConnectionErrorCallback |
@@ -306,8 +332,13 @@ class PresentationDispatcherTest : public ::testing::Test { |
}; |
TEST_F(PresentationDispatcherTest, TestStartSession) { |
- base::RunLoop run_loop; |
+ auto* test_connection_callback = |
+ new TestWebPresentationConnectionCallback(url1_, presentation_id_); |
+ EXPECT_FALSE(test_connection_callback->connection_.proxy_); |
+ 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, |
@@ -317,10 +348,10 @@ TEST_F(PresentationDispatcherTest, TestStartSession) { |
session_info->id = presentation_id_.utf8(); |
callback.Run(std::move(session_info), PresentationErrorPtr()); |
})); |
- client()->startSession( |
- urls_, base::MakeUnique<TestWebPresentationConnectionCallback>( |
- url1_, presentation_id_)); |
+ dispatcher_.startSession(urls_, base::WrapUnique(test_connection_callback)); |
run_loop.RunUntilIdle(); |
+ |
+ EXPECT_TRUE(test_connection_callback->connection_.proxy_); |
} |
TEST_F(PresentationDispatcherTest, TestStartSessionError) { |
@@ -336,7 +367,7 @@ TEST_F(PresentationDispatcherTest, TestStartSessionError) { |
error->message = error_message.utf8(); |
callback.Run(PresentationSessionInfoPtr(), std::move(error)); |
})); |
- client()->startSession( |
+ dispatcher_.startSession( |
urls_, |
base::MakeUnique<TestWebPresentationConnectionErrorCallback>( |
WebPresentationError::ErrorTypeNoAvailableScreens, error_message)); |
@@ -367,8 +398,14 @@ TEST_F(PresentationDispatcherTest, TestJoinSessionError) { |
} |
TEST_F(PresentationDispatcherTest, TestJoinSession) { |
+ auto* test_connection_callback = |
+ new TestWebPresentationConnectionCallback(url1_, presentation_id_); |
+ EXPECT_FALSE(test_connection_callback->connection_.proxy_); |
+ |
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, |
@@ -381,61 +418,57 @@ TEST_F(PresentationDispatcherTest, TestJoinSession) { |
session_info->id = presentation_id_.utf8(); |
callback.Run(std::move(session_info), PresentationErrorPtr()); |
})); |
- dispatcher_.joinSession( |
- urls_, presentation_id_, |
- base::MakeUnique<TestWebPresentationConnectionCallback>( |
- url1_, presentation_id_)); |
+ dispatcher_.joinSession(urls_, presentation_id_, |
+ base::WrapUnique(test_connection_callback)); |
run_loop.RunUntilIdle(); |
+ |
+ EXPECT_TRUE(test_connection_callback->connection_.proxy_); |
} |
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) { |
+ 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()); |
@@ -444,7 +477,40 @@ 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(); |
+} |
+ |
+TEST_F(PresentationDispatcherTest, TestOnReceiverConnectionAvailable) { |
+ PresentationSessionInfoPtr session_info(PresentationSessionInfo::New()); |
+ session_info->url = gurl1_; |
+ session_info->id = presentation_id_.utf8(); |
+ |
+ blink::mojom::PresentationConnectionPtr controller_connection_ptr; |
+ TestPresentationConnection controller_connection; |
+ TestPresentationConnectionProxy controller_connection_proxy( |
+ &controller_connection); |
+ mojo::Binding<blink::mojom::PresentationConnection> binding( |
+ &controller_connection_proxy, |
+ mojo::MakeRequest(&controller_connection_ptr)); |
+ |
+ blink::mojom::PresentationConnectionPtr receiver_connection_ptr; |
+ |
+ TestPresentationReceiver receiver; |
+ dispatcher_.setReceiver(&receiver); |
+ |
+ base::RunLoop run_loop; |
+ EXPECT_CALL(controller_connection, |
+ didChangeState(blink::WebPresentationConnectionState::Connected)); |
+ EXPECT_CALL(receiver.connection_, |
+ didChangeState(blink::WebPresentationConnectionState::Connected)); |
+ |
+ dispatcher_.OnReceiverConnectionAvailable( |
+ std::move(session_info), std::move(controller_connection_ptr), |
+ mojo::MakeRequest(&receiver_connection_ptr)); |
+ |
+ EXPECT_TRUE(receiver_connection_ptr); |
+ EXPECT_TRUE(receiver.connection_.proxy_); |
run_loop.RunUntilIdle(); |
} |