- add sources.
[platform/framework/web/crosswalk.git] / src / ppapi / proxy / plugin_dispatcher_unittest.cc
1 // Copyright (c) 2011 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 "base/memory/scoped_ptr.h"
6 #include "ipc/ipc_message_utils.h"
7 #include "ppapi/c/ppb_audio.h"
8 #include "ppapi/c/ppp_instance.h"
9 #include "ppapi/proxy/ppapi_messages.h"
10 #include "ppapi/proxy/ppapi_proxy_test.h"
11
12 namespace ppapi {
13 namespace proxy {
14
15 namespace {
16
17 bool received_create = false;
18
19 // Implement PPB_Audio since it's a relatively simple PPB interface and
20 // includes bidirectional communication.
21 PP_Resource Create(PP_Instance instance, PP_Resource config,
22                    PPB_Audio_Callback audio_callback, void* user_data) {
23   received_create = true;
24   return 0;
25 }
26 PP_Bool IsAudio(PP_Resource resource) {
27   return PP_FALSE;
28 }
29 PP_Resource GetCurrentConfig(PP_Resource audio) {
30   return 0;
31 }
32 PP_Bool StartPlayback(PP_Resource audio) {
33   return PP_FALSE;
34 }
35 PP_Bool StopPlayback(PP_Resource audio) {
36   return PP_FALSE;
37 }
38
39 PPB_Audio dummy_audio_interface = {
40   &Create,
41   &IsAudio,
42   &GetCurrentConfig,
43   &StartPlayback,
44   &StopPlayback
45 };
46
47 PPP_Instance dummy_ppp_instance_interface = {};
48
49 }  // namespace
50
51 class PluginDispatcherTest : public PluginProxyTest {
52  public:
53   PluginDispatcherTest() {}
54
55   bool HasTargetProxy(ApiID id) {
56     return !!plugin_dispatcher()->proxies_[id].get();
57   }
58 };
59
60 TEST_F(PluginDispatcherTest, SupportsInterface) {
61   RegisterTestInterface(PPB_AUDIO_INTERFACE, &dummy_audio_interface);
62   RegisterTestInterface(PPP_INSTANCE_INTERFACE, &dummy_ppp_instance_interface);
63
64   // Sending a request for a random interface should fail.
65   EXPECT_FALSE(SupportsInterface("Random interface"));
66
67   // Sending a request for a supported PPP interface should succeed.
68   EXPECT_TRUE(SupportsInterface(PPP_INSTANCE_INTERFACE));
69 }
70
71 TEST_F(PluginDispatcherTest, PPBCreation) {
72   // Sending a PPB message out of the blue should create a target proxy for
73   // that interface in the plugin.
74   EXPECT_FALSE(HasTargetProxy(API_ID_PPB_AUDIO));
75   PpapiMsg_PPBAudio_NotifyAudioStreamCreated audio_msg(
76       API_ID_PPB_AUDIO, HostResource(), 0,
77       ppapi::proxy::SerializedHandle(
78           ppapi::proxy::SerializedHandle::SOCKET),
79       ppapi::proxy::SerializedHandle(
80           ppapi::proxy::SerializedHandle::SHARED_MEMORY));
81   plugin_dispatcher()->OnMessageReceived(audio_msg);
82   EXPECT_TRUE(HasTargetProxy(API_ID_PPB_AUDIO));
83 }
84
85 }  // namespace proxy
86 }  // namespace ppapi
87