• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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