| 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..558d4dbb0edb03508256aa176d748809f332cbae 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
|
| @@ -203,6 +229,8 @@ class TestPresentationDispatcher : public PresentationDispatcher {
|
|
|
| class PresentationDispatcherTest : public ::testing::Test {
|
| public:
|
| + using OnMessageCallback = PresentationConnectionProxy::OnMessageCallback;
|
| +
|
| enum class URLState { Available, Unavailable, Unsupported, Unknown };
|
|
|
| PresentationDispatcherTest()
|
| @@ -306,8 +334,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 +350,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 +369,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 +400,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 +420,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 +479,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();
|
| }
|
|
|
|
|