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

Unified Diff: content/renderer/presentation/presentation_dispatcher_unittest.cc

Issue 2471573005: [Presentation API] (5th) (1-UA) integrate controller and receiver side for 1-UA messaging (Closed)
Patch Set: add unit test for browser_presentation_connection_proxy Created 3 years, 11 months 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 side-by-side diff with in-line comments
Download patch
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();
}

Powered by Google App Engine
This is Rietveld 408576698