1 // Copyright (c) 2012 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 #ifndef PPAPI_PROXY_DEVICE_ENUMERATION_RESOURCE_HELPER_H_ 6 #define PPAPI_PROXY_DEVICE_ENUMERATION_RESOURCE_HELPER_H_ 7 8 #include <vector> 9 10 #include "base/basictypes.h" 11 #include "base/memory/ref_counted.h" 12 #include "base/memory/weak_ptr.h" 13 #include "ppapi/c/dev/ppb_device_ref_dev.h" 14 #include "ppapi/proxy/ppapi_proxy_export.h" 15 #include "ppapi/shared_impl/thread_aware_callback.h" 16 17 namespace IPC { 18 class Message; 19 } 20 21 struct PP_ArrayOutput; 22 23 namespace ppapi { 24 25 struct DeviceRefData; 26 class TrackedCallback; 27 28 namespace proxy { 29 30 class PluginResource; 31 class ResourceMessageReplyParams; 32 33 class PPAPI_PROXY_EXPORT DeviceEnumerationResourceHelper 34 : public base::SupportsWeakPtr<DeviceEnumerationResourceHelper> { 35 public: 36 // |owner| must outlive this object. 37 explicit DeviceEnumerationResourceHelper(PluginResource* owner); 38 ~DeviceEnumerationResourceHelper(); 39 40 int32_t EnumerateDevices(const PP_ArrayOutput& output, 41 scoped_refptr<TrackedCallback> callback); 42 int32_t EnumerateDevicesSync(const PP_ArrayOutput& output); 43 int32_t MonitorDeviceChange(PP_MonitorDeviceChangeCallback callback, 44 void* user_data); 45 46 // Returns true if the message has been handled. 47 bool HandleReply(const ResourceMessageReplyParams& params, 48 const IPC::Message& msg); 49 50 void LastPluginRefWasDeleted(); 51 52 private: 53 void OnPluginMsgEnumerateDevicesReply( 54 const PP_ArrayOutput& output, 55 scoped_refptr<TrackedCallback> callback, 56 const ResourceMessageReplyParams& params, 57 const std::vector<DeviceRefData>& devices); 58 void OnPluginMsgNotifyDeviceChange(const ResourceMessageReplyParams& params, 59 uint32_t callback_id, 60 const std::vector<DeviceRefData>& devices); 61 62 int32_t WriteToArrayOutput(const std::vector<DeviceRefData>& devices, 63 const PP_ArrayOutput& output); 64 65 // Not owned by this object. 66 PluginResource* owner_; 67 68 bool pending_enumerate_devices_; 69 70 uint32_t monitor_callback_id_; 71 scoped_ptr<ThreadAwareCallback<PP_MonitorDeviceChangeCallback> > 72 monitor_callback_; 73 void* monitor_user_data_; 74 75 DISALLOW_COPY_AND_ASSIGN(DeviceEnumerationResourceHelper); 76 }; 77 78 } // namespace proxy 79 } // namespace ppapi 80 81 #endif // PPAPI_PROXY_DEVICE_ENUMERATION_RESOURCE_HELPER_H_ 82