| Index: ppapi/proxy/ppb_flash_device_id_proxy.cc
|
| diff --git a/ppapi/proxy/ppb_flash_device_id_proxy.cc b/ppapi/proxy/ppb_flash_device_id_proxy.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..bb66b33b224ab9299c983e9c9fee9f48180357a3
|
| --- /dev/null
|
| +++ b/ppapi/proxy/ppb_flash_device_id_proxy.cc
|
| @@ -0,0 +1,126 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "ppapi/proxy/ppb_flash_device_id_proxy.h"
|
| +
|
| +#include "base/compiler_specific.h"
|
| +#include "ppapi/c/pp_errors.h"
|
| +#include "ppapi/proxy/plugin_dispatcher.h"
|
| +#include "ppapi/proxy/plugin_globals.h"
|
| +#include "ppapi/proxy/plugin_proxy_delegate.h"
|
| +#include "ppapi/proxy/ppapi_messages.h"
|
| +#include "ppapi/shared_impl/resource.h"
|
| +#include "ppapi/shared_impl/tracked_callback.h"
|
| +#include "ppapi/shared_impl/var.h"
|
| +#include "ppapi/thunk/enter.h"
|
| +#include "ppapi/thunk/ppb_flash_device_id_api.h"
|
| +
|
| +using ppapi::thunk::PPB_Flash_DeviceID_API;
|
| +
|
| +namespace ppapi {
|
| +namespace proxy {
|
| +
|
| +namespace {
|
| +
|
| +class DeviceID : public Resource, public PPB_Flash_DeviceID_API {
|
| + public:
|
| + DeviceID(PP_Instance instance);
|
| + virtual ~DeviceID();
|
| +
|
| + // Resource overrides.
|
| + virtual PPB_Flash_DeviceID_API* AsPPB_Flash_DeviceID_API() OVERRIDE;
|
| +
|
| + // PPB_Flash_DeviceID_API implementation.
|
| + virtual int32_t GetDeviceID(PP_Var* id,
|
| + const PP_CompletionCallback& callback) OVERRIDE;
|
| +
|
| + void OnReply(int32_t result, const std::string& id);
|
| +
|
| + private:
|
| + // Non-null when a callback is pending.
|
| + PP_Var* dest_;
|
| +
|
| + scoped_refptr<TrackedCallback> callback_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(DeviceID);
|
| +};
|
| +
|
| +DeviceID::DeviceID(PP_Instance instance)
|
| + : Resource(OBJECT_IS_PROXY, instance),
|
| + dest_(NULL) {
|
| +}
|
| +
|
| +DeviceID::~DeviceID() {
|
| +}
|
| +
|
| +PPB_Flash_DeviceID_API* DeviceID::AsPPB_Flash_DeviceID_API() {
|
| + return this;
|
| +}
|
| +
|
| +int32_t DeviceID::GetDeviceID(PP_Var* id,
|
| + const PP_CompletionCallback& callback) {
|
| + if (TrackedCallback::IsPending(callback_))
|
| + return PP_ERROR_INPROGRESS;
|
| + if (!id)
|
| + return PP_ERROR_BADARGUMENT;
|
| +
|
| + callback_ = new TrackedCallback(this, callback);
|
| + dest_ = id;
|
| +
|
| + PluginDispatcher* dispatcher =
|
| + PluginDispatcher::GetForInstance(pp_instance());
|
| +
|
| + PluginGlobals::Get()->plugin_proxy_delegate()->SendToBrowser(
|
| + new PpapiHostMsg_PPBFlashDeviceID_Get(
|
| + API_ID_PPB_FLASH_DEVICE_ID, dispatcher->plugin_dispatcher_id(),
|
| + pp_resource()));
|
| + return PP_OK_COMPLETIONPENDING;
|
| +}
|
| +
|
| +void DeviceID::OnReply(int32_t result, const std::string& id) {
|
| + if (result == PP_OK)
|
| + *dest_ = StringVar::StringToPPVar(id);
|
| + else
|
| + *dest_ = PP_MakeUndefined();
|
| + dest_ = NULL;
|
| + TrackedCallback::ClearAndRun(&callback_, result);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +PPB_Flash_DeviceID_Proxy::PPB_Flash_DeviceID_Proxy(Dispatcher* dispatcher)
|
| + : InterfaceProxy(dispatcher) {
|
| +}
|
| +
|
| +PPB_Flash_DeviceID_Proxy::~PPB_Flash_DeviceID_Proxy() {
|
| +}
|
| +
|
| +// static
|
| +PP_Resource PPB_Flash_DeviceID_Proxy::CreateProxyResource(
|
| + PP_Instance instance) {
|
| + return (new DeviceID(instance))->GetReference();
|
| +}
|
| +
|
| +bool PPB_Flash_DeviceID_Proxy::OnMessageReceived(const IPC::Message& msg) {
|
| + bool handled = true;
|
| + IPC_BEGIN_MESSAGE_MAP(PPB_Flash_DeviceID_Proxy, msg)
|
| + IPC_MESSAGE_HANDLER(PpapiMsg_PPBFlashDeviceID_GetReply,
|
| + OnPluginMsgGetReply)
|
| + IPC_MESSAGE_UNHANDLED(handled = false)
|
| + IPC_END_MESSAGE_MAP()
|
| + return handled;
|
| +}
|
| +
|
| +void PPB_Flash_DeviceID_Proxy::OnPluginMsgGetReply(int32 routing_id,
|
| + PP_Resource resource,
|
| + int32 result,
|
| + const std::string& id) {
|
| + thunk::EnterResourceNoLock<PPB_Flash_DeviceID_API> enter(resource, false);
|
| + if (enter.failed())
|
| + return; // Resource destroyed.
|
| + static_cast<DeviceID*>(enter.object())->OnReply(result, id);
|
| +}
|
| +
|
| +} // namespace proxy
|
| +} // namespace ppapi
|
|
|