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

Side by Side Diff: ppapi/proxy/talk_resource_unittest.cc

Issue 16271005: Implement pepper interface and plumbing for HRD's UI on ChromeOS (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Minor feedback related changes. Created 7 years, 6 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ppapi/proxy/locking_resource_releaser.h"
6 #include "ppapi/proxy/ppapi_messages.h"
7 #include "ppapi/proxy/ppapi_proxy_test.h"
8 #include "ppapi/proxy/talk_resource.h"
9 #include "ppapi/thunk/thunk.h"
10
11 namespace ppapi {
12 namespace proxy {
13
14 namespace {
15
16 template <class ResultType>
17 class MockCallbackBase {
18 public:
19 MockCallbackBase() : called_(false) {
20 }
21
22 bool called() {
23 return called_;
24 }
25
26 ResultType result() {
27 return result_;
28 }
29
30 void Reset() {
31 called_ = false;
32 }
33
34 static void Callback(void* user_data, ResultType result) {
35 MockCallbackBase* that = reinterpret_cast<MockCallbackBase*>(user_data);
36 that->called_ = true;
37 that->result_ = result;
38 }
39
40 private:
41 bool called_;
42 ResultType result_;
43 };
44
45 typedef MockCallbackBase<int32_t> MockCompletionCallback;
46 typedef MockCallbackBase<PP_TalkEvent> TalkEventCallback;
47
48 class TalkResourceTest : public PluginProxyTest {
49 public:
50 void SendReply(
51 uint32_t id,
52 const IPC::Message& reply,
53 int32_t result) {
54 IPC::Message msg;
55 ResourceMessageCallParams params;
56 ASSERT_TRUE(sink().GetFirstResourceCallMatching(id, &params, &msg));
57
58 ResourceMessageReplyParams reply_params(params.pp_resource(),
59 params.sequence());
60 reply_params.set_result(result);
61 IPC::Message reply_msg = PpapiPluginMsg_ResourceReply(reply_params, reply);
62 ASSERT_TRUE(plugin_dispatcher()->OnMessageReceived(reply_msg));
63 }
64 };
65
66
67 } // namespace
68
69 TEST_F(TalkResourceTest, GetPermission) {
70 const PPB_Talk_Private_1_0* talk = thunk::GetPPB_Talk_Private_1_0_Thunk();
71 LockingResourceReleaser res(talk->Create(pp_instance()));
72 MockCompletionCallback callback;
73
74 int32_t result = talk->GetPermission(
75 res.get(),
76 PP_MakeCompletionCallback(&MockCompletionCallback::Callback, &callback));
77 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result);
78
79 ResourceMessageCallParams params;
80 IPC::Message msg;
81 ASSERT_TRUE(sink().GetFirstResourceCallMatching(
82 PpapiHostMsg_Talk_RequestPermission::ID, &params, &msg));
83 PpapiHostMsg_Talk_RequestPermission::Schema::Param args;
84 ASSERT_TRUE(PpapiHostMsg_Talk_RequestPermission::Schema::Read(&msg, &args));
85 ASSERT_EQ(PP_TALKPERMISSION_SCREENCAST, args.a);
86
87 ResourceMessageReplyParams reply_params(params.pp_resource(),
88 params.sequence());
89 reply_params.set_result(1);
90 IPC::Message reply = PpapiPluginMsg_ResourceReply(
91 reply_params, PpapiPluginMsg_Talk_RequestPermissionReply());
92 ASSERT_TRUE(plugin_dispatcher()->OnMessageReceived(reply));
93
94 ASSERT_TRUE(callback.called());
95 ASSERT_EQ(1, callback.result());
96 }
97
98 TEST_F(TalkResourceTest, RequestPermission) {
99 const PPB_Talk_Private_2_0* talk = thunk::GetPPB_Talk_Private_2_0_Thunk();
100 LockingResourceReleaser res(talk->Create(pp_instance()));
101 MockCompletionCallback callback;
102
103 int32_t result = talk->RequestPermission(
104 res.get(),
105 PP_TALKPERMISSION_REMOTING_CONTINUE,
106 PP_MakeCompletionCallback(&MockCompletionCallback::Callback, &callback));
107 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result);
108
109 ResourceMessageCallParams params;
110 IPC::Message msg;
111 ASSERT_TRUE(sink().GetFirstResourceCallMatching(
112 PpapiHostMsg_Talk_RequestPermission::ID, &params, &msg));
113 PpapiHostMsg_Talk_RequestPermission::Schema::Param args;
114 ASSERT_TRUE(PpapiHostMsg_Talk_RequestPermission::Schema::Read(&msg, &args));
115 ASSERT_EQ(PP_TALKPERMISSION_REMOTING_CONTINUE, args.a);
116
117 ResourceMessageReplyParams reply_params(params.pp_resource(),
118 params.sequence());
119 reply_params.set_result(1);
120 IPC::Message reply = PpapiPluginMsg_ResourceReply(
121 reply_params, PpapiPluginMsg_Talk_RequestPermissionReply());
122 ASSERT_TRUE(plugin_dispatcher()->OnMessageReceived(reply));
123
124 ASSERT_TRUE(callback.called());
125 ASSERT_EQ(1, callback.result());
126 }
127
128 TEST_F(TalkResourceTest, StartStopRemoting) {
129 const PPB_Talk_Private_2_0* talk = thunk::GetPPB_Talk_Private_2_0_Thunk();
130 LockingResourceReleaser res(talk->Create(pp_instance()));
131 MockCompletionCallback callback;
132 TalkEventCallback event_callback;
133
134 // Start
135 int32_t result = talk->StartRemoting(
136 res.get(),
137 &TalkEventCallback::Callback,
138 &event_callback,
139 PP_MakeCompletionCallback(&MockCompletionCallback::Callback, &callback));
140 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result);
141
142 SendReply(PpapiHostMsg_Talk_StartRemoting::ID,
143 PpapiPluginMsg_Talk_StartRemotingReply(),
144 PP_OK);
145
146 ASSERT_TRUE(callback.called());
147 ASSERT_EQ(PP_OK, callback.result());
148
149 // Receive an event
150 ASSERT_FALSE(event_callback.called());
151 ResourceMessageReplyParams notify_params(res.get(), 0);
152 IPC::Message notify = PpapiPluginMsg_ResourceReply(
153 notify_params, PpapiPluginMsg_Talk_NotifyEvent(PP_TALKEVENT_ERROR));
154 ASSERT_TRUE(plugin_dispatcher()->OnMessageReceived(notify));
155 ASSERT_TRUE(event_callback.called());
156 ASSERT_EQ(PP_TALKEVENT_ERROR, event_callback.result());
157
158 // Stop
159 callback.Reset();
160 result = talk->StopRemoting(
161 res.get(),
162 PP_MakeCompletionCallback(&MockCompletionCallback::Callback, &callback));
163 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result);
164
165 SendReply(PpapiHostMsg_Talk_StopRemoting::ID,
166 PpapiPluginMsg_Talk_StopRemotingReply(),
167 PP_OK);
168
169 ASSERT_TRUE(callback.called());
170 ASSERT_EQ(PP_OK, callback.result());
171
172 // Events should be discarded at this point
173 event_callback.Reset();
174 ASSERT_TRUE(plugin_dispatcher()->OnMessageReceived(notify));
175 ASSERT_FALSE(event_callback.called());
176 }
177
178 } // namespace proxy
179 } // namespace ppapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698