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

Unified Diff: content/browser/presentation/presentation_service_impl_unittest.cc

Issue 1037483003: [PresentationAPI] Implementing send() from WebPresentationClient to the PresentationService. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: No (c) in new files Copyright message. Created 5 years, 7 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/browser/presentation/presentation_service_impl_unittest.cc
diff --git a/content/browser/presentation/presentation_service_impl_unittest.cc b/content/browser/presentation/presentation_service_impl_unittest.cc
index c6eef75b49c08f7eede359bcf35b5bc368e6b4b0..da0045b3239006cc8c67a9f3e56ac9c565b74bf1 100644
--- a/content/browser/presentation/presentation_service_impl_unittest.cc
+++ b/content/browser/presentation/presentation_service_impl_unittest.cc
@@ -9,6 +9,7 @@
#include "content/browser/presentation/presentation_service_impl.h"
#include "content/public/browser/presentation_service_delegate.h"
#include "content/public/browser/presentation_session.h"
+#include "content/public/common/presentation_constants.h"
#include "content/test/test_render_frame_host.h"
#include "content/test/test_render_view_host.h"
#include "content/test/test_web_contents.h"
@@ -88,11 +89,31 @@ class MockPresentationServiceDelegate : public PresentationServiceDelegate {
const std::string& presentation_id,
const PresentationSessionSuccessCallback& success_cb,
const PresentationSessionErrorCallback& error_cb));
+
MOCK_METHOD3(ListenForSessionMessages,
void(
int render_process_id,
int render_frame_id,
const PresentationSessionMessageCallback& message_cb));
+
+ MOCK_METHOD4(SendMessageRawPtr,
+ void(
+ int render_process_id,
+ int render_frame_id,
+ PresentationSessionMessage* message_request,
+ const SendMessageCallback& send_message_cb));
+
+ void SendMessage(
+ int render_process_id,
+ int render_frame_id,
+ scoped_ptr<PresentationSessionMessage> message_request,
+ const SendMessageCallback& send_message_cb) {
+ SendMessageRawPtr(
+ render_process_id,
+ render_frame_id,
+ message_request.release(),
+ send_message_cb);
+ }
};
class PresentationServiceImplTest : public RenderViewHostImplTestHarness {
@@ -243,6 +264,13 @@ class PresentationServiceImplTest : public RenderViewHostImplTestHarness {
run_loop_quit_closure_.Run();
}
+ void ExpectSendMessageMojoCallback(bool success) {
+ EXPECT_TRUE(success);
+ EXPECT_FALSE(service_impl_->send_message_callback_);
+ if (!run_loop_quit_closure_.is_null())
+ run_loop_quit_closure_.Run();
+ }
+
void RunListenForSessionMessages(std::string& text_msg,
std::vector<uint8_t>& binary_data) {
std::string presentation_url("http://fooUrl");
@@ -783,4 +811,132 @@ TEST_F(PresentationServiceImplTest, DefaultSessionStartReset) {
EXPECT_EQ(1, default_session_started_count_);
}
+TEST_F(PresentationServiceImplTest, SendStringMessage) {
+ std::string presentation_url("http://foo.com/index.html");
+ std::string presentation_id("presentationId");
+ std::string message("Test presentation session message");
+
+ presentation::SessionMessagePtr message_request(
+ presentation::SessionMessage::New());
+ message_request->presentation_url = presentation_url;
+ message_request->presentation_id = presentation_id;
+ message_request->type = presentation::PresentationMessageType::
+ PRESENTATION_MESSAGE_TYPE_TEXT;
+ message_request->message = message;
+ service_ptr_->SendSessionMessage(
+ message_request.Pass(),
+ base::Bind(
+ &PresentationServiceImplTest::ExpectSendMessageMojoCallback,
+ base::Unretained(this)));
+
+ base::RunLoop run_loop;
+ base::Closure send_message_cb;
+ PresentationSessionMessage* test_message = nullptr;
+ EXPECT_CALL(mock_delegate_, SendMessageRawPtr(
+ _, _, _, _))
+ .WillOnce(DoAll(
+ InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit),
+ SaveArg<2>(&test_message),
+ SaveArg<3>(&send_message_cb)));
+ run_loop.Run();
+
+ EXPECT_TRUE(test_message);
+ EXPECT_EQ(presentation_url, test_message->presentation_url);
+ EXPECT_EQ(presentation_id, test_message->presentation_id);
+ EXPECT_FALSE(test_message->is_binary());
+ EXPECT_TRUE(test_message->message.get()->size() <=
+ kMaxPresentationSessionMessageSize);
+ EXPECT_EQ(message, *(test_message->message.get()));
+ EXPECT_FALSE(test_message->data);
+ delete test_message;
+ send_message_cb.Run();
+ SaveQuitClosureAndRunLoop();
+}
+
+TEST_F(PresentationServiceImplTest, SendArrayBuffer) {
+ std::string presentation_url("http://foo.com/index.html");
+ std::string presentation_id("presentationId");
+ // Test Array buffer data.
+ const uint8 buffer[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48};
+ std::vector<uint8> data;
+ data.assign(buffer, buffer + sizeof(buffer));
+
+ presentation::SessionMessagePtr message_request(
+ presentation::SessionMessage::New());
+ message_request->presentation_url = presentation_url;
+ message_request->presentation_id = presentation_id;
+ message_request->type = presentation::PresentationMessageType::
+ PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER;
+ message_request->data = mojo::Array<uint8>::From(data);
+ service_ptr_->SendSessionMessage(
+ message_request.Pass(),
+ base::Bind(
+ &PresentationServiceImplTest::ExpectSendMessageMojoCallback,
+ base::Unretained(this)));
+
+ base::RunLoop run_loop;
+ base::Closure send_message_cb;
+ PresentationSessionMessage* test_message = nullptr;
+ EXPECT_CALL(mock_delegate_, SendMessageRawPtr(
+ _, _, _, _))
+ .WillOnce(DoAll(
+ InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit),
+ SaveArg<2>(&test_message),
+ SaveArg<3>(&send_message_cb)));
+ run_loop.Run();
+
+ EXPECT_TRUE(test_message);
+ EXPECT_EQ(presentation_url, test_message->presentation_url);
+ EXPECT_EQ(presentation_id, test_message->presentation_id);
+ EXPECT_TRUE(test_message->is_binary());
+ EXPECT_FALSE(test_message->message);
+ EXPECT_EQ(data.size(), test_message->data.get()->size());
+ EXPECT_TRUE(test_message->data.get()->size() <=
+ kMaxPresentationSessionMessageSize);
+ EXPECT_EQ(0, memcmp(buffer, &(*test_message->data.get())[0], sizeof(buffer)));
+ delete test_message;
+ send_message_cb.Run();
+ SaveQuitClosureAndRunLoop();
+}
+
+TEST_F(PresentationServiceImplTest, SendArrayBufferWithExceedingLimit) {
+ std::string presentation_url("http://foo.com/index.html");
+ std::string presentation_id("presentationId");
+ // Create buffer with size exceeding the limit.
+ // Use same size as in content::kMaxPresentationSessionMessageSize.
+ const size_t kMaxBufferSizeInBytes = 64 * 1024; // 64 KB.
+ uint8 buffer[kMaxBufferSizeInBytes+1];
+ memset(buffer, 0, kMaxBufferSizeInBytes+1);
+ std::vector<uint8> data;
+ data.assign(buffer, buffer + sizeof(buffer));
+
+ presentation::SessionMessagePtr message_request(
+ presentation::SessionMessage::New());
+ message_request->presentation_url = presentation_url;
+ message_request->presentation_id = presentation_id;
+ message_request->type = presentation::PresentationMessageType::
+ PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER;
+ message_request->data = mojo::Array<uint8>::From(data);
+ service_ptr_->SendSessionMessage(
+ message_request.Pass(),
+ base::Bind(
+ &PresentationServiceImplTest::ExpectSendMessageMojoCallback,
+ base::Unretained(this)));
+
+ base::RunLoop run_loop;
+ base::Closure send_message_cb;
+ PresentationSessionMessage* test_message = nullptr;
+ EXPECT_CALL(mock_delegate_, SendMessageRawPtr(
+ _, _, _, _))
+ .WillOnce(DoAll(
+ InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit),
+ SaveArg<2>(&test_message),
+ SaveArg<3>(&send_message_cb)));
+ run_loop.Run();
+
+ EXPECT_FALSE(test_message);
+ send_message_cb.Run();
+ SaveQuitClosureAndRunLoop();
+}
+
} // namespace content
« no previous file with comments | « content/browser/presentation/presentation_service_impl.cc ('k') | content/common/presentation/presentation_service.mojom » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698