| Index: ppapi/proxy/talk_resource_unittest.cc
|
| diff --git a/ppapi/proxy/talk_resource_unittest.cc b/ppapi/proxy/talk_resource_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fd8341b9cabbe29afde321785344e3a42aac60df
|
| --- /dev/null
|
| +++ b/ppapi/proxy/talk_resource_unittest.cc
|
| @@ -0,0 +1,173 @@
|
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "ppapi/proxy/locking_resource_releaser.h"
|
| +#include "ppapi/proxy/ppapi_messages.h"
|
| +#include "ppapi/proxy/ppapi_proxy_test.h"
|
| +#include "ppapi/proxy/talk_resource.h"
|
| +#include "ppapi/thunk/thunk.h"
|
| +
|
| +namespace ppapi {
|
| +namespace proxy {
|
| +
|
| +namespace {
|
| +
|
| +template <class ResultType>
|
| +class MockCallbackBase {
|
| + public:
|
| + MockCallbackBase() : called_(false) {
|
| + }
|
| +
|
| + bool called() {
|
| + return called_;
|
| + }
|
| +
|
| + ResultType result() {
|
| + return result_;
|
| + }
|
| +
|
| + void Reset() {
|
| + called_ = false;
|
| + }
|
| +
|
| + static void Callback(void* user_data, ResultType result) {
|
| + MockCallbackBase* that = reinterpret_cast<MockCallbackBase*>(user_data);
|
| + that->called_ = true;
|
| + that->result_ = result;
|
| + }
|
| +
|
| + private:
|
| + bool called_;
|
| + ResultType result_;
|
| +};
|
| +
|
| +typedef MockCallbackBase<int32_t> MockCompletionCallback;
|
| +typedef MockCallbackBase<PP_TalkEvent> TalkEventCallback;
|
| +
|
| +class TalkResourceTest : public PluginProxyTest {
|
| + public:
|
| + void SendReply(
|
| + uint32_t id,
|
| + const IPC::Message& reply,
|
| + int32_t result) {
|
| + IPC::Message msg;
|
| + ResourceMessageCallParams params;
|
| + ASSERT_TRUE(sink().GetFirstResourceCallMatching(id, ¶ms, &msg));
|
| +
|
| + ResourceMessageReplyParams reply_params(params.pp_resource(),
|
| + params.sequence());
|
| + reply_params.set_result(result);
|
| + IPC::Message reply_msg = PpapiPluginMsg_ResourceReply(reply_params, reply);
|
| + ASSERT_TRUE(plugin_dispatcher()->OnMessageReceived(reply_msg));
|
| + }
|
| +};
|
| +
|
| +
|
| +} // namespace
|
| +
|
| +TEST_F(TalkResourceTest, GetPermission) {
|
| + const PPB_Talk_Private_1_0* talk = thunk::GetPPB_Talk_Private_1_0_Thunk();
|
| + LockingResourceReleaser res(talk->Create(pp_instance()));
|
| + MockCompletionCallback callback;
|
| +
|
| + int32_t result = talk->GetPermission(
|
| + res.get(),
|
| + PP_MakeCompletionCallback(&MockCompletionCallback::Callback, &callback));
|
| + ASSERT_EQ(PP_OK_COMPLETIONPENDING, result);
|
| +
|
| + ResourceMessageCallParams params;
|
| + IPC::Message msg;
|
| + ASSERT_TRUE(sink().GetFirstResourceCallMatching(
|
| + PpapiHostMsg_Talk_RequestPermission::ID, ¶ms, &msg));
|
| +
|
| + ResourceMessageReplyParams reply_params(params.pp_resource(),
|
| + params.sequence());
|
| + reply_params.set_result(1);
|
| + IPC::Message reply = PpapiPluginMsg_ResourceReply(
|
| + reply_params, PpapiPluginMsg_Talk_RequestPermissionReply());
|
| + ASSERT_TRUE(plugin_dispatcher()->OnMessageReceived(reply));
|
| +
|
| + ASSERT_TRUE(callback.called());
|
| + ASSERT_EQ(1, callback.result());
|
| +}
|
| +
|
| +TEST_F(TalkResourceTest, RequestPermission) {
|
| + const PPB_Talk_Private_2_0* talk = thunk::GetPPB_Talk_Private_2_0_Thunk();
|
| + LockingResourceReleaser res(talk->Create(pp_instance()));
|
| + MockCompletionCallback callback;
|
| +
|
| + int32_t result = talk->RequestPermission(
|
| + res.get(),
|
| + PP_TALKPERMISSION_REMOTING_CONTINUE,
|
| + PP_MakeCompletionCallback(&MockCompletionCallback::Callback, &callback));
|
| + ASSERT_EQ(PP_OK_COMPLETIONPENDING, result);
|
| +
|
| + ResourceMessageCallParams params;
|
| + IPC::Message msg;
|
| + ASSERT_TRUE(sink().GetFirstResourceCallMatching(
|
| + PpapiHostMsg_Talk_RequestPermission::ID, ¶ms, &msg));
|
| +
|
| + ResourceMessageReplyParams reply_params(params.pp_resource(),
|
| + params.sequence());
|
| + reply_params.set_result(1);
|
| + IPC::Message reply = PpapiPluginMsg_ResourceReply(
|
| + reply_params, PpapiPluginMsg_Talk_RequestPermissionReply());
|
| + ASSERT_TRUE(plugin_dispatcher()->OnMessageReceived(reply));
|
| +
|
| + ASSERT_TRUE(callback.called());
|
| + ASSERT_EQ(1, callback.result());
|
| +}
|
| +
|
| +TEST_F(TalkResourceTest, StartStopRemoting) {
|
| + const PPB_Talk_Private_2_0* talk = thunk::GetPPB_Talk_Private_2_0_Thunk();
|
| + LockingResourceReleaser res(talk->Create(pp_instance()));
|
| + MockCompletionCallback callback;
|
| + TalkEventCallback event_callback;
|
| +
|
| + // Start
|
| + int32_t result = talk->StartRemoting(
|
| + res.get(),
|
| + &TalkEventCallback::Callback,
|
| + &event_callback,
|
| + PP_MakeCompletionCallback(&MockCompletionCallback::Callback, &callback));
|
| + ASSERT_EQ(PP_OK_COMPLETIONPENDING, result);
|
| +
|
| + SendReply(PpapiHostMsg_Talk_StartRemoting::ID,
|
| + PpapiPluginMsg_Talk_StartRemotingReply(),
|
| + PP_OK);
|
| +
|
| + ASSERT_TRUE(callback.called());
|
| + ASSERT_EQ(PP_OK, callback.result());
|
| +
|
| + // Receive an event
|
| + ASSERT_FALSE(event_callback.called());
|
| + ResourceMessageReplyParams notify_params(res.get(), 0);
|
| + IPC::Message notify = PpapiPluginMsg_ResourceReply(
|
| + notify_params, PpapiPluginMsg_Talk_NotifyEvent(PP_TALKEVENT_ERROR));
|
| + ASSERT_TRUE(plugin_dispatcher()->OnMessageReceived(notify));
|
| + ASSERT_TRUE(event_callback.called());
|
| + ASSERT_EQ(PP_TALKEVENT_ERROR, event_callback.result());
|
| +
|
| + // Stop
|
| + callback.Reset();
|
| + result = talk->StopRemoting(
|
| + res.get(),
|
| + PP_MakeCompletionCallback(&MockCompletionCallback::Callback, &callback));
|
| + ASSERT_EQ(PP_OK_COMPLETIONPENDING, result);
|
| +
|
| + SendReply(PpapiHostMsg_Talk_StopRemoting::ID,
|
| + PpapiPluginMsg_Talk_StopRemotingReply(),
|
| + PP_OK);
|
| +
|
| + ASSERT_TRUE(callback.called());
|
| + ASSERT_EQ(PP_OK, callback.result());
|
| +
|
| + // Events should be discarded at this point
|
| + event_callback.Reset();
|
| + ASSERT_TRUE(plugin_dispatcher()->OnMessageReceived(notify));
|
| + ASSERT_FALSE(event_callback.called());
|
| +}
|
| +
|
| +} // namespace proxy
|
| +} // namespace ppapi
|
|
|