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.
Create(PP_Instance instance,PP_Resource config,PPB_Audio_Callback audio_callback,void * user_data)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 }
IsAudio(PP_Resource resource)26 PP_Bool IsAudio(PP_Resource resource) {
27 return PP_FALSE;
28 }
GetCurrentConfig(PP_Resource audio)29 PP_Resource GetCurrentConfig(PP_Resource audio) {
30 return 0;
31 }
StartPlayback(PP_Resource audio)32 PP_Bool StartPlayback(PP_Resource audio) {
33 return PP_FALSE;
34 }
StopPlayback(PP_Resource audio)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:
PluginDispatcherTest()53 PluginDispatcherTest() {}
54
HasTargetProxy(ApiID id)55 bool HasTargetProxy(ApiID id) {
56 return !!plugin_dispatcher()->proxies_[id].get();
57 }
58 };
59
TEST_F(PluginDispatcherTest,SupportsInterface)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
TEST_F(PluginDispatcherTest,PPBCreation)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
88