Home | History | Annotate | Download | only in proxy
      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 
     88