diff options
author | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-03 03:13:01 +0000 |
---|---|---|
committer | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-03 03:13:01 +0000 |
commit | 1a4d9cb51c770cc70f1eba7c7b07bcf45baade6d (patch) | |
tree | be769022c3a43f3bf0e84c3aa9e3ad15c8cd5a57 /ppapi | |
parent | 4bcab1c571c6b11a51e4493e3387733a6c95bbac (diff) | |
download | chromium_src-1a4d9cb51c770cc70f1eba7c7b07bcf45baade6d.zip chromium_src-1a4d9cb51c770cc70f1eba7c7b07bcf45baade6d.tar.gz chromium_src-1a4d9cb51c770cc70f1eba7c7b07bcf45baade6d.tar.bz2 |
Revert PPAPI proxy change with too many files in it.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@64870 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi')
48 files changed, 73 insertions, 6325 deletions
diff --git a/ppapi/ppapi.gyp b/ppapi/ppapi.gyp index 2af075f..f7021c4 100644 --- a/ppapi/ppapi.gyp +++ b/ppapi/ppapi.gyp @@ -467,5 +467,78 @@ }], ], }, + { + 'target_name': 'ppapi_proxy', + 'type': 'static_library', + 'dependencies': [ + '../ipc/ipc.gyp:ipc', + 'ppapi_c', + ], + 'all_dependent_settings': { + 'include_dirs': [ + '..', + ], + }, + 'include_dirs': [ + '..', + '../..', # For nacl includes to work. + ], + 'sources': [ + 'proxy/callback_tracker.cc', + 'proxy/callback_tracker.h', + 'proxy/dispatcher.cc', + 'proxy/dispatcher.h', + 'proxy/host_dispatcher.cc', + 'proxy/host_dispatcher.h', + 'proxy/host_var_serialization_rules.cc', + 'proxy/host_var_serialization_rules.h', + 'proxy/interface_proxy.cc', + 'proxy/interface_proxy.h', + 'proxy/plugin_dispatcher.cc', + 'proxy/plugin_dispatcher.h', + 'proxy/plugin_resource.cc', + 'proxy/plugin_resource.h', + 'proxy/plugin_resource_tracker.cc', + 'proxy/plugin_resource_tracker.h', + 'proxy/plugin_var_serialization_rules.cc', + 'proxy/plugin_var_serialization_rules.h', + 'proxy/plugin_var_tracker.cc', + 'proxy/plugin_var_tracker.h', + 'proxy/ppapi_messages.cc', + 'proxy/ppapi_messages.h', + 'proxy/ppapi_messages_internal.h', + 'proxy/ppapi_param_traits.cc', + 'proxy/ppapi_param_traits.h', + 'proxy/ppb_core_proxy.cc', + 'proxy/ppb_core_proxy.h', + 'proxy/ppb_graphics_2d_proxy.cc', + 'proxy/ppb_graphics_2d_proxy.h', + 'proxy/ppb_image_data_proxy.cc', + 'proxy/ppb_image_data_proxy.h', + 'proxy/ppb_instance_proxy.cc', + 'proxy/ppb_instance_proxy.h', + 'proxy/ppb_url_loader_proxy.cc', + 'proxy/ppb_url_loader_proxy.h', + 'proxy/ppb_var_deprecated_proxy.cc', + 'proxy/ppb_var_deprecated_proxy.h', + 'proxy/ppp_class_proxy.cc', + 'proxy/ppp_class_proxy.h', + 'proxy/ppp_instance_proxy.cc', + 'proxy/ppp_instance_proxy.h', + 'proxy/serialized_var.cc', + 'proxy/serialized_var.h', + 'proxy/var_serialization_rules.h', + ], + 'defines': [ + ], + 'conditions': [ + ['OS=="win"', { + }], + ['OS=="linux"', { + }], + ['OS=="mac"', { + }] + ], + }, ], } diff --git a/ppapi/proxy/callback_tracker.cc b/ppapi/proxy/callback_tracker.cc deleted file mode 100644 index 9806497..0000000 --- a/ppapi/proxy/callback_tracker.cc +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) 2010 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/callback_tracker.h" - -#include "ppapi/proxy/dispatcher.h" -#include "ppapi/proxy/ppapi_messages.h" - -namespace pp { -namespace proxy { - -namespace { - -struct CallbackData { - CallbackTracker* tracker; - uint32_t callback_id; -}; - -void CallbackProxy(void* user_data, int32_t result) { - CallbackData* data = static_cast<CallbackData*>(user_data); - data->tracker->SendExecuteSerializedCallback(data->callback_id, result); - delete data; -} - -} // namespace - -CallbackTracker::CallbackTracker(Dispatcher* dispatcher) - : dispatcher_(dispatcher), - next_callback_id_(1) { -} - -CallbackTracker::~CallbackTracker() { -} - -uint32_t CallbackTracker::SendCallback(PP_CompletionCallback callback) { - // Find the next callback ID we can use (being careful about wraparound). - while (callback_map_.find(next_callback_id_) != callback_map_.end()) - next_callback_id_++; - callback_map_[next_callback_id_] = callback; - return next_callback_id_++; -} - -PP_CompletionCallback CallbackTracker::ReceiveCallback( - uint32_t serialized_callback) { - CallbackData* data = new CallbackData; - data->tracker = this; - data->callback_id = serialized_callback; - return PP_MakeCompletionCallback(&CallbackProxy, data); -} - -void CallbackTracker::SendExecuteSerializedCallback( - uint32_t serialized_callback, - int32_t param) { - dispatcher_->Send(new PpapiMsg_ExecuteCallback(serialized_callback, param)); -} - -void CallbackTracker::ReceiveExecuteSerializedCallback( - uint32_t serialized_callback, - int32_t param) { - CallbackMap::iterator found = callback_map_.find(serialized_callback); - if (found == callback_map_.end()) { - NOTREACHED(); - return; - } - - PP_RunCompletionCallback(&found->second, param); - callback_map_.erase(found); -} - -} // namespace proxy -} // namespace pp diff --git a/ppapi/proxy/callback_tracker.h b/ppapi/proxy/callback_tracker.h deleted file mode 100644 index 5f8233c1..0000000 --- a/ppapi/proxy/callback_tracker.h +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PROXY_CALLBACK_TRACKER_H_ -#define PPAPI_PROXY_CALLBACK_TRACKER_H_ - -#include <map> - -#include "ppapi/c/pp_completion_callback.h" -#include "ppapi/c/pp_stdint.h" - -namespace pp { -namespace proxy { - -class Dispatcher; - -// This object tracks cross-process callbacks. When the plugin sends a callback -// object to the renderer, we save the information and pass an identifier -// instead. -// -// On the renderer side, this identifier is converted to a new callback in that -// process. When executed, this new callback sends an IPC message containing the -// previous identifier back to the plugin. -// -// When we receive that message, ExecuteSerializedCallback converts the -// identifier back to the original callback information and runs the callback. -class CallbackTracker { - public: - CallbackTracker(Dispatcher* dispatcher); - ~CallbackTracker(); - - // Converts the given callback in the context of the plugin to a serialized - // ID. This will be passed to ReceiveCallback on the renderer side. - uint32_t SendCallback(PP_CompletionCallback callback); - - // Converts the given serialized callback ID to a new completion callback in - // the context of the current process. This callback actually will represent - // a proxy that will execute the callback in the plugin process. - PP_CompletionCallback ReceiveCallback(uint32_t serialized_callback); - - // Sends a request to the remote process to execute the given callback. - void SendExecuteSerializedCallback(uint32_t serialized_callback, - int32_t param); - - // Executes the given callback ID with the given result in the current - // process. This will also destroy the information associated with the - // callback and the serialized ID won't be valid any more. - void ReceiveExecuteSerializedCallback(uint32_t serialized_callback, - int32_t param); - - private: - // Pointer to the dispatcher that owns us. - Dispatcher* dispatcher_; - - int32_t next_callback_id_; - - // Maps callback IDs to the actual callback objects in the plugin process. - typedef std::map<int32_t, PP_CompletionCallback> CallbackMap; - CallbackMap callback_map_; -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PROXY_CALLBACK_TRACKER_H_ diff --git a/ppapi/proxy/dispatcher.cc b/ppapi/proxy/dispatcher.cc deleted file mode 100644 index e2c6f1e..0000000 --- a/ppapi/proxy/dispatcher.cc +++ /dev/null @@ -1,215 +0,0 @@ -// Copyright (c) 2010 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/dispatcher.h" - -#include <string.h> // For memset. - -#include <map> - -#include "base/logging.h" -#include "ipc/ipc_message.h" -#include "ipc/ipc_sync_channel.h" -#include "ppapi/proxy/interface_proxy.h" -#include "ppapi/proxy/ppapi_messages.h" -#include "ppapi/c/dev/ppb_var_deprecated.h" -#include "ppapi/c/pp_errors.h" -#include "ppapi/c/ppb_core.h" -#include "ppapi/c/ppb_graphics_2d.h" -#include "ppapi/c/ppb_image_data.h" -#include "ppapi/c/ppb_instance.h" -#include "ppapi/c/ppp_instance.h" -#include "ppapi/proxy/ppb_core_proxy.h" -#include "ppapi/proxy/ppb_graphics_2d_proxy.h" -#include "ppapi/proxy/ppb_image_data_proxy.h" -#include "ppapi/proxy/ppb_instance_proxy.h" -#include "ppapi/proxy/ppb_var_deprecated_proxy.h" -#include "ppapi/proxy/ppp_class_proxy.h" -#include "ppapi/proxy/ppp_instance_proxy.h" -#include "ppapi/proxy/var_serialization_rules.h" - -namespace pp { -namespace proxy { - -Dispatcher::Dispatcher(GetInterfaceFunc local_get_interface) - : pp_module_(0), - disallow_trusted_interfaces_(true), - local_get_interface_(local_get_interface), - declared_supported_remote_interfaces_(false), - callback_tracker_(this) { - memset(id_to_proxy_, 0, - static_cast<int>(INTERFACE_ID_COUNT) * sizeof(InterfaceProxy*)); -} - -Dispatcher::~Dispatcher() { -} - -bool Dispatcher::InitWithChannel(MessageLoop* ipc_message_loop, - const std::string& channel_name, - bool is_client, - base::WaitableEvent* shutdown_event) { - IPC::Channel::Mode mode = is_client ? IPC::Channel::MODE_CLIENT - : IPC::Channel::MODE_SERVER; - channel_.reset(new IPC::SyncChannel(channel_name, mode, this, NULL, - ipc_message_loop, false, shutdown_event)); - return true; -} - -void Dispatcher::OnMessageReceived(const IPC::Message& msg) { - // Control messages. - if (msg.routing_id() == MSG_ROUTING_CONTROL) { - IPC_BEGIN_MESSAGE_MAP(Dispatcher, msg) - IPC_MESSAGE_HANDLER(PpapiMsg_DeclareInterfaces, - OnMsgDeclareInterfaces) - IPC_MESSAGE_HANDLER(PpapiMsg_SupportsInterface, OnMsgSupportsInterface) - IPC_MESSAGE_FORWARD(PpapiMsg_ExecuteCallback, &callback_tracker_, - CallbackTracker::ReceiveExecuteSerializedCallback) - IPC_END_MESSAGE_MAP() - return; - } - - // Interface-specific messages. - if (msg.routing_id() > 0 && msg.routing_id() < INTERFACE_ID_COUNT) { - InterfaceProxy* proxy = id_to_proxy_[msg.routing_id()]; - if (proxy) - proxy->OnMessageReceived(msg); - else - NOTREACHED(); - // TODO(brettw): kill the plugin if it starts sending invalid messages? - } -} - -void Dispatcher::SetSerializationRules( - VarSerializationRules* var_serialization_rules) { - serialization_rules_.reset(var_serialization_rules); -} - -void Dispatcher::InjectProxy(InterfaceID id, - const std::string& name, - InterfaceProxy* proxy) { - proxies_[name] = linked_ptr<InterfaceProxy>(proxy); - id_to_proxy_[id] = proxy; -} - -const void* Dispatcher::GetLocalInterface(const char* interface) { - return local_get_interface_(interface); -} - -const void* Dispatcher::GetProxiedInterface(const std::string& interface) { - // See if we already know about this interface and have created a host. - ProxyMap::const_iterator found = proxies_.find(interface); - if (found != proxies_.end()) - return found->second->GetSourceInterface(); - - // When the remote side has sent us a declared list of all interfaces it - // supports and we don't have it in our list, we know the requested interface - // doesn't exist and we can return failure. - if (declared_supported_remote_interfaces_) - return NULL; - - if (!RemoteSupportsTargetInterface(interface)) - return NULL; - - linked_ptr<InterfaceProxy> proxy(CreateProxyForInterface(interface, NULL)); - if (!proxy.get()) - return NULL; // Don't know how to proxy this interface. - - // Save our proxy. - proxies_[interface] = proxy; - id_to_proxy_[proxy->GetInterfaceId()] = proxy.get(); - return proxy->GetSourceInterface(); -} - -bool Dispatcher::Send(IPC::Message* msg) { - return channel_->Send(msg); -} - -bool Dispatcher::RemoteSupportsTargetInterface(const std::string& interface) { - bool result = false; - Send(new PpapiMsg_SupportsInterface(interface, &result)); - return result; -} - -bool Dispatcher::IsInterfaceTrusted(const std::string& interface) { - // FIXME(brettw) - (void)interface; - return false; -} - -bool Dispatcher::SetupProxyForTargetInterface(const std::string& interface) { - // If we already have a proxy that knows about the locally-implemented - // interface, we know it's supported and don't need to re-query. - ProxyMap::const_iterator found = proxies_.find(interface); - if (found != proxies_.end()) - return true; - - if (disallow_trusted_interfaces_ && IsInterfaceTrusted(interface)) - return false; - - // Create the proxy if it doesn't exist and set the local interface on it. - // This also handles the case where possibly an interface could be supported - // by both the local and remote side. - const void* interface_functions = local_get_interface_(interface.c_str()); - if (!interface_functions) - return false; - InterfaceProxy* proxy = CreateProxyForInterface(interface, - interface_functions); - if (!proxy) - return false; - - proxies_[interface] = linked_ptr<InterfaceProxy>(proxy); - id_to_proxy_[proxy->GetInterfaceId()] = proxy; - return true; -} - -void Dispatcher::OnMsgSupportsInterface(const std::string& interface_name, - bool* result) { - *result = SetupProxyForTargetInterface(interface_name); -} - -void Dispatcher::OnMsgDeclareInterfaces( - const std::vector<std::string>& interfaces) { - // Make proxies for all the interfaces it supports that we also support. - for (size_t i = 0; i < interfaces.size(); i++) { - // Possibly the plugin could request an interface before the "declare" - // message is received, so we could already have an entry for this - // interface. In this case, we can just skip to the next one. - if (proxies_.find(interfaces[i]) != proxies_.end()) - continue; - - linked_ptr<InterfaceProxy> proxy(CreateProxyForInterface(interfaces[i], - NULL)); - if (!proxy.get()) { - // Since only the browser declares supported interfaces, we should never - // get one we don't support. - //NOTREACHED() << "Remote side declaring an unsupported proxy."; - continue; - } - proxies_[interfaces[i]] = proxy; - id_to_proxy_[proxy->GetInterfaceId()] = proxy.get(); - } -} - -InterfaceProxy* Dispatcher::CreateProxyForInterface( - const std::string& interface_name, - const void* interface_functions) { - if (interface_name == PPB_CORE_INTERFACE) - return new PPB_Core_Proxy(this, interface_functions); - if (interface_name == PPB_GRAPHICS_2D_INTERFACE) - return new PPB_Graphics2D_Proxy(this, interface_functions); - if (interface_name == PPB_IMAGEDATA_INTERFACE) - return new PPB_ImageData_Proxy(this, interface_functions); - if (interface_name == PPB_INSTANCE_INTERFACE) - return new PPB_Instance_Proxy(this, interface_functions); - if (interface_name == PPB_VAR_DEPRECATED_INTERFACE) - return new PPB_Var_Deprecated_Proxy(this, interface_functions); - if (interface_name == PPP_INSTANCE_INTERFACE) - return new PPP_Instance_Proxy(this, interface_functions); - - return NULL; -} - -} // namespace proxy -} // namespace pp - diff --git a/ppapi/proxy/dispatcher.h b/ppapi/proxy/dispatcher.h deleted file mode 100644 index 412b2d8..0000000 --- a/ppapi/proxy/dispatcher.h +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PROXY_DISPATCHER_H_ -#define PPAPI_PROXY_DISPATCHER_H_ - -#include <map> -#include <string> -#include <vector> - -#include "base/linked_ptr.h" -#include "base/scoped_ptr.h" -#include "ipc/ipc_channel.h" -#include "ipc/ipc_channel_handle.h" -#include "ipc/ipc_message.h" -#include "ppapi/c/pp_module.h" -#include "ppapi/proxy/callback_tracker.h" -#include "ppapi/proxy/interface_id.h" -#include "ppapi/proxy/plugin_resource_tracker.h" -#include "ppapi/proxy/plugin_var_tracker.h" - -class MessageLoop; -struct PPB_Var_Deprecated; - -namespace base { -class WaitableEvent; -} - -namespace IPC { -class SyncChannel; -} - -namespace pp { -namespace proxy { - -class InterfaceProxy; -class VarSerializationRules; - -// An interface proxy can represent either end of a cross-process interface -// call. The "source" side is where the call is invoked, and the "target" side -// is where the call ends up being executed. -// -// Plugin side | Browser side -// -------------------------------------|-------------------------------------- -// | -// "Source" | "Target" -// InterfaceProxy ----------------------> InterfaceProxy -// | -// | -// "Target" | "Source" -// InterfaceProxy <---------------------- InterfaceProxy -// | -class Dispatcher : public IPC::Channel::Listener, - public IPC::Message::Sender { - public: - typedef const void* (*GetInterfaceFunc)(const char*); - typedef const int32_t (*InitModuleFunc)(PP_Module, GetInterfaceFunc); - typedef const void (*ShutdownModuleFunc)(); - - ~Dispatcher(); - - bool InitWithChannel(MessageLoop* ipc_message_loop, - const std::string& channel_name, - bool is_client, - base::WaitableEvent* shutdown_event); - - // Returns true if the dispatcher is on the plugin side, or false if it's the - // browser side. - virtual bool IsPlugin() const = 0; - - VarSerializationRules* serialization_rules() const { - return serialization_rules_.get(); - } - PP_Module pp_module() const { - return pp_module_; - } - - // Wrapper for calling the local GetInterface function. - const void* GetLocalInterface(const char* interface); - - // Implements PPP_GetInterface and PPB_GetInterface on the "source" side. It - // will check if the remote side supports this interface as a target, and - // create a proxy if it does. A local implementation of that interface backed - // by the proxy will be returned on success. If the interface is unproxyable - // or not supported by the remote side, returns NULL. - const void* GetProxiedInterface(const std::string& interface); - - // Called if the remote side is declaring to us which interfaces it supports - // so we don't have to query for each one. We'll pre-create proxies for - // each of the given interfaces. - - // IPC::Message::Sender implementation. - virtual bool Send(IPC::Message* msg); - - // IPC::Channel::Listener implementation. - virtual void OnMessageReceived(const IPC::Message& msg); - - IPC::SyncChannel* channel() const { - return channel_.get(); - } - - CallbackTracker& callback_tracker() { - return callback_tracker_; - } - - protected: - Dispatcher(GetInterfaceFunc local_get_interface); - - // Setter for the derived classes to set the appropriate var serialization. - // Takes ownership of the given pointer, which must be on the heap. - void SetSerializationRules(VarSerializationRules* var_serialization_rules); - - void set_pp_module(PP_Module module) { - pp_module_ = module; - } - - // Allows the PluginDispatcher to add a magic proxy for PPP_Class, bypassing - // the normal "do you support this proxy" stuff and the big lookup of - // name to proxy object. Takes ownership of the pointer. - void InjectProxy(InterfaceID id, - const std::string& name, - InterfaceProxy* proxy); - - private: - typedef std::map< std::string, linked_ptr<InterfaceProxy> > ProxyMap; - - // Message handlers - void OnMsgSupportsInterface(const std::string& interface_name, bool* result); - void OnMsgDeclareInterfaces(const std::vector<std::string>& interfaces); - - // Allocates a new proxy on the heap corresponding to the given interface - // name, or returns NULL if that interface name isn't known proxyable. The - // caller owns the returned pointer. - // - // The interface_functions gives the pointer to the local interfece when this - // is a target proxy. When creating a source proxy, set this to NULL. - InterfaceProxy* CreateProxyForInterface( - const std::string& interface_name, - const void* interface_functions); - - // Returns true if the remote side supports the given interface as the - // target of an IPC call. - bool RemoteSupportsTargetInterface(const std::string& interface); - - // Sets up a proxy as the target for the given interface, if it is supported. - // Returns true if this process implements the given interface and it is - // proxyable. - bool SetupProxyForTargetInterface(const std::string& interface); - - bool IsInterfaceTrusted(const std::string& interface); - - // Set by the derived classed to indicate the module ID corresponding to - // this dispatcher. - PP_Module pp_module_; - - scoped_ptr<IPC::SyncChannel> channel_; - - bool disallow_trusted_interfaces_; - - GetInterfaceFunc local_get_interface_; - - ProxyMap proxies_; - InterfaceProxy* id_to_proxy_[INTERFACE_ID_COUNT]; - - // True if the remote side has declared which interfaces it supports in - // advance. When set, it means if we don't already have a source proxy for - // the requested interface, that the remote side doesn't support it and - // we don't need to query. - // - // This is just an optimization. The browser has a fixed set of interfaces - // it supports, and the many plugins will end up querying many of them. By - // having the browser just send all of those interfaces in one message, we - // can avoid a bunch of IPC chatter to set up each interface. - bool declared_supported_remote_interfaces_; - - CallbackTracker callback_tracker_; - - scoped_ptr<VarSerializationRules> serialization_rules_; - - DISALLOW_COPY_AND_ASSIGN(Dispatcher); -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PROXY_DISPATCHER_H_ diff --git a/ppapi/proxy/host_dispatcher.cc b/ppapi/proxy/host_dispatcher.cc deleted file mode 100644 index bb70796..0000000 --- a/ppapi/proxy/host_dispatcher.cc +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) 2010 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/host_dispatcher.h" - -#include <map> - -#include "base/logging.h" -#include "ppapi/proxy/host_var_serialization_rules.h" - -namespace pp { -namespace proxy { - -namespace { - -typedef std::map<PP_Instance, HostDispatcher*> InstanceToDispatcherMap; -InstanceToDispatcherMap* g_instance_to_dispatcher = NULL; - -} // namespace - -HostDispatcher::HostDispatcher(const PPB_Var_Deprecated* var_interface, - PP_Module module, - GetInterfaceFunc local_get_interface) - : Dispatcher(local_get_interface) { - SetSerializationRules(new HostVarSerializationRules(var_interface, module)); -} - -HostDispatcher::~HostDispatcher() { -} - -// static -HostDispatcher* HostDispatcher::GetForInstance(PP_Instance instance) { - if (!g_instance_to_dispatcher) - return NULL; - InstanceToDispatcherMap::iterator found = g_instance_to_dispatcher->find( - instance); - if (found == g_instance_to_dispatcher->end()) - return NULL; - return found->second; -} - -// static -void HostDispatcher::SetForInstance(PP_Instance instance, - HostDispatcher* dispatcher) { - if (!g_instance_to_dispatcher) - g_instance_to_dispatcher = new InstanceToDispatcherMap; - (*g_instance_to_dispatcher)[instance] = dispatcher; -} - -// static -void HostDispatcher::RemoveForInstance(PP_Instance instance) { - if (!g_instance_to_dispatcher) - return; - InstanceToDispatcherMap::iterator found = g_instance_to_dispatcher->find( - instance); - if (found != g_instance_to_dispatcher->end()) - g_instance_to_dispatcher->erase(found); -} - -} // namespace proxy -} // namespace pp - diff --git a/ppapi/proxy/host_dispatcher.h b/ppapi/proxy/host_dispatcher.h deleted file mode 100644 index 94d45d2..0000000 --- a/ppapi/proxy/host_dispatcher.h +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PROXY_HOST_DISPATCHER_H_ -#define PPAPI_PROXY_HOST_DISPATCHER_H_ - -#include <map> -#include <string> -#include <vector> - -#include "base/scoped_ptr.h" -#include "ppapi/c/pp_instance.h" -#include "ppapi/proxy/dispatcher.h" -#include "ppapi/proxy/plugin_resource_tracker.h" -#include "ppapi/proxy/plugin_var_tracker.h" - -struct PPB_Var_Deprecated; - -namespace base { -class WaitableEvent; -} - -namespace IPC { -class SyncChannel; -} - -namespace pp { -namespace proxy { - -class InterfaceProxy; -class VarSerialization; - -class HostDispatcher : public Dispatcher { - public: - // Constructor for the renderer side. - // - // You must call Dispatcher::InitWithChannel after the constructor. - HostDispatcher(const PPB_Var_Deprecated* var_interface, - PP_Module module, - GetInterfaceFunc local_get_interface); - ~HostDispatcher(); - - // The host side maintains a mapping from PP_Instance to Dispatcher so - // that we can send the messages to the right channel. - static HostDispatcher* GetForInstance(PP_Instance instance); - static void SetForInstance(PP_Instance instance, - HostDispatcher* dispatcher); - static void RemoveForInstance(PP_Instance instance); - - // Dispatcher overrides. - virtual bool IsPlugin() const { return false; } - - private: - DISALLOW_COPY_AND_ASSIGN(HostDispatcher); -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PROXY_HOST_DISPATCHER_H_ diff --git a/ppapi/proxy/host_var_serialization_rules.cc b/ppapi/proxy/host_var_serialization_rules.cc deleted file mode 100644 index 9ca6a15..0000000 --- a/ppapi/proxy/host_var_serialization_rules.cc +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright (c) 2010 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/host_var_serialization_rules.h" - -#include "base/logging.h" -#include "ppapi/c/dev/ppb_var_deprecated.h" - -namespace pp { -namespace proxy { - -HostVarSerializationRules::HostVarSerializationRules( - const PPB_Var_Deprecated* var_interface, - PP_Module pp_module) - : var_interface_(var_interface), - pp_module_(pp_module) { -} - -HostVarSerializationRules::~HostVarSerializationRules() { -} - -void HostVarSerializationRules::SendCallerOwned(const PP_Var& var, - std::string* str_val) { - if (var.type == PP_VARTYPE_STRING) - VarToString(var, str_val); -} - -PP_Var HostVarSerializationRules::BeginReceiveCallerOwned( - const PP_Var& var, - const std::string* str_val) { - if (var.type == PP_VARTYPE_STRING) { - // Convert the string to the context of the current process. - return var_interface_->VarFromUtf8(pp_module_, str_val->c_str(), - static_cast<uint32_t>(str_val->size())); - } - return var; -} - -void HostVarSerializationRules::EndReceiveCallerOwned(const PP_Var& var) { - if (var.type == PP_VARTYPE_STRING) { - // Destroy the string BeginReceiveCallerOwned created above. - var_interface_->Release(var); - } -} - -PP_Var HostVarSerializationRules::ReceivePassRef(const PP_Var& var, - const std::string& str_val) { - if (var.type == PP_VARTYPE_STRING) { - // Convert the string to the context of the current process. - return var_interface_->VarFromUtf8(pp_module_, str_val.c_str(), - static_cast<uint32_t>(str_val.size())); - } - - // See PluginVarSerialization::BeginSendPassRef for an example. - if (var.type == PP_VARTYPE_OBJECT) - var_interface_->AddRef(var); - return var; -} - -void HostVarSerializationRules::BeginSendPassRef(const PP_Var& var, - std::string* str_val) { - // See PluginVarSerialization::ReceivePassRef for an example. We don't need - // to do anything here other than convert the string. - if (var.type == PP_VARTYPE_STRING) - VarToString(var, str_val); -} - -void HostVarSerializationRules::EndSendPassRef(const PP_Var& var) { - // See PluginVarSerialization::ReceivePassRef for an example. We don't need - // to do anything here. -} - -void HostVarSerializationRules::VarToString(const PP_Var& var, - std::string* str) { - DCHECK(var.type == PP_VARTYPE_STRING); - - // This could be optimized to avoid an extra string copy by going to a lower - // level of the browser's implementation of strings where we already have - // a std::string. - uint32_t len = 0; - const char* data = var_interface_->VarToUtf8(var, &len); - str->assign(data, len); -} - -void HostVarSerializationRules::ReleaseObjectRef(const PP_Var& var) { - var_interface_->Release(var); -} - -} // namespace proxy -} // namespace pp diff --git a/ppapi/proxy/host_var_serialization_rules.h b/ppapi/proxy/host_var_serialization_rules.h deleted file mode 100644 index 92e294f..0000000 --- a/ppapi/proxy/host_var_serialization_rules.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PROXY_HOST_VAR_SERIALIZATION_RULES_H_ -#define PPAPI_PROXY_HOST_VAR_SERIALIZATION_RULES_H_ - -#include "base/basictypes.h" -#include "ppapi/c/pp_module.h" -#include "ppapi/proxy/var_serialization_rules.h" - -struct PPB_Var_Deprecated; - -namespace pp { -namespace proxy { - -class VarTracker; - -// Implementation of the VarSerializationRules interface for the host side. -class HostVarSerializationRules : public VarSerializationRules { - public: - HostVarSerializationRules(const PPB_Var_Deprecated* var_interface, - PP_Module pp_module); - ~HostVarSerializationRules(); - - // VarSerialization implementation. - virtual void SendCallerOwned(const PP_Var& var, std::string* str_val); - virtual PP_Var BeginReceiveCallerOwned(const PP_Var& var, - const std::string* str_val); - virtual void EndReceiveCallerOwned(const PP_Var& var); - virtual PP_Var ReceivePassRef(const PP_Var& var, - const std::string& str_val); - virtual void BeginSendPassRef(const PP_Var& var, std::string* str_val); - virtual void EndSendPassRef(const PP_Var& var); - virtual void ReleaseObjectRef(const PP_Var& var); - - private: - // Converts the given var (which must be a VARTYPE_STRING) to the given - // string object. - void VarToString(const PP_Var& var, std::string* str); - - const PPB_Var_Deprecated* var_interface_; - PP_Module pp_module_; - - DISALLOW_COPY_AND_ASSIGN(HostVarSerializationRules); -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PROXY_HOST_VAR_SERIALIZATION_RULES_H_ diff --git a/ppapi/proxy/interface_id.h b/ppapi/proxy/interface_id.h deleted file mode 100644 index 8f5ad9b..0000000 --- a/ppapi/proxy/interface_id.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PROXY_INTERFACE_ID_H_ -#define PPAPI_PROXY_INTERFACE_ID_H_ - -namespace pp { -namespace proxy { - -// These numbers must be all small integers. They are used in a lookup table -// to route messages to the appropriate message handler. -enum InterfaceID { - // Zero is reserved for control messages. - INTERFACE_ID_PPB_CORE = 1, - INTERFACE_ID_PPB_GRAPHICS_2D, - INTERFACE_ID_PPB_IMAGE_DATA, - INTERFACE_ID_PPB_INSTANCE, - INTERFACE_ID_PPB_URL_LOADER, - INTERFACE_ID_PPB_VAR, - INTERFACE_ID_PPB_VAR_DEPRECATED, - - INTERFACE_ID_PPP_CLASS, - INTERFACE_ID_PPP_INSTANCE, - - // Must be last to indicate the number of interface IDs. - INTERFACE_ID_COUNT -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PROXY_INTERFACE_ID_H_ diff --git a/ppapi/proxy/interface_proxy.cc b/ppapi/proxy/interface_proxy.cc deleted file mode 100644 index 7561d5e..0000000 --- a/ppapi/proxy/interface_proxy.cc +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) 2010 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/interface_proxy.h" - -#include "base/logging.h" -#include "ppapi/proxy/dispatcher.h" - -namespace pp { -namespace proxy { - -InterfaceProxy::InterfaceProxy(Dispatcher* dispatcher, - const void* target_interface) - : dispatcher_(dispatcher), - target_interface_(target_interface) { -} - -InterfaceProxy::~InterfaceProxy() { -} - -bool InterfaceProxy::Send(IPC::Message* msg) { - return dispatcher_->Send(msg); -} - -uint32 InterfaceProxy::SendCallback(PP_CompletionCallback callback) { - return dispatcher_->callback_tracker().SendCallback(callback); -} - -PP_CompletionCallback InterfaceProxy::ReceiveCallback( - uint32 serialized_callback) { - return dispatcher_->callback_tracker().ReceiveCallback(serialized_callback); -} - -} // namespace proxy -} // namespace pp diff --git a/ppapi/proxy/interface_proxy.h b/ppapi/proxy/interface_proxy.h deleted file mode 100644 index 538ebf5..0000000 --- a/ppapi/proxy/interface_proxy.h +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PROXY_INTERFACE_PROXY_H_ -#define PPAPI_PROXY_INTERFACE_PROXY_H_ - -#include "base/basictypes.h" -#include "ipc/ipc_channel.h" -#include "ipc/ipc_message.h" -#include "ppapi/c/pp_completion_callback.h" -#include "ppapi/c/pp_resource.h" -#include "ppapi/c/pp_var.h" -#include "ppapi/proxy/interface_id.h" - -namespace pp { -namespace proxy { - -class Dispatcher; - -class InterfaceProxy : public IPC::Channel::Listener, - public IPC::Message::Sender { - public: - // Creates the given interface associated with the given dispatcher. The - // dispatcher manages our lifetime. - // - // The target interface pointer, when non-NULL, indicates that this is a - // target proxy (see dispatcher.h for a definition). In this case, the proxy - // will interpret this pointer to the actual implementation of the interface - // in the local process. - // - // If the target interface is NULL, this proxy will be a "source" interface. - InterfaceProxy(Dispatcher* dispatcher, const void* target_interface); - virtual ~InterfaceProxy(); - - // See dispatcher.h for definitions of source and target. - bool is_source_proxy() const { return !target_interface_; } - bool is_target_proxy() const { return !!target_interface_; } - - // When this proxy is the "target" of the IPC communication (see - // dispatcher.h), this target_interface pointer will indicate the local - // side's interface pointer. This contains the functions that actually - // implement the proxied interface. - // - // This will be NULL when this proxy is a source proxy. - const void* target_interface() const { return target_interface_; } - - Dispatcher* dispatcher() { return dispatcher_; } - - // IPC::Message::Sender implementation. - virtual bool Send(IPC::Message* msg); - - // Returns the local implementation of the interface that will proxy it to - // the remote side. This is used on the source side only (see dispatcher.h). - virtual const void* GetSourceInterface() const = 0; - - // Returns the interface ID associated with this proxy. Implemented by each - // derived class to identify itself. - virtual InterfaceID GetInterfaceId() const = 0; - - // Sub-classes must implement IPC::Channel::Listener which contains this: - //virtual void OnMessageReceived(const IPC::Message& msg); - - protected: - uint32 SendCallback(PP_CompletionCallback callback); - PP_CompletionCallback ReceiveCallback(uint32 serialized_callback); - - private: - Dispatcher* dispatcher_; - const void* target_interface_; -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PROXY_INTERFACE_PROXY_H_ - diff --git a/ppapi/proxy/plugin_dispatcher.cc b/ppapi/proxy/plugin_dispatcher.cc deleted file mode 100644 index 1997dc4..0000000 --- a/ppapi/proxy/plugin_dispatcher.cc +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) 2010 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/plugin_dispatcher.h" - -#include <map> - -#include "base/logging.h" -#include "ipc/ipc_message.h" -#include "ipc/ipc_sync_channel.h" -#include "ppapi/c/pp_errors.h" -#include "ppapi/proxy/interface_proxy.h" -#include "ppapi/proxy/plugin_var_serialization_rules.h" -#include "ppapi/proxy/ppapi_messages.h" -#include "ppapi/proxy/ppp_class_proxy.h" - -namespace pp { -namespace proxy { - -namespace { - -PluginDispatcher* g_dispatcher = NULL; - -const void* GetInterfaceFromDispatcher(const char* interface) { - // TODO(brettw) need some kind of lock for multi-thread access. - return pp::proxy::PluginDispatcher::Get()->GetProxiedInterface(interface); -} - -} // namespace - -PluginDispatcher::PluginDispatcher(GetInterfaceFunc get_interface, - InitModuleFunc init_module, - ShutdownModuleFunc shutdown_module) - : Dispatcher(get_interface), - init_module_(init_module), - shutdown_module_(shutdown_module), - plugin_resource_tracker_(new PluginResourceTracker(this)), - plugin_var_tracker_(new PluginVarTracker(this)) { - SetSerializationRules( - new PluginVarSerializationRules(plugin_var_tracker_.get())); - - // As a plugin, we always support the PPP_Class interface. There's no - // GetInterface call or name for it, so we insert it into our table now. - InjectProxy(INTERFACE_ID_PPP_CLASS, "$Internal_PPP_Class", - new PPP_Class_Proxy(this)); -} - -PluginDispatcher::~PluginDispatcher() { - if (shutdown_module_) - shutdown_module_(); -} - -// static -PluginDispatcher* PluginDispatcher::Get() { - return g_dispatcher; -} - -// static -void PluginDispatcher::SetGlobal(PluginDispatcher* dispatcher) { - DCHECK(!dispatcher || !g_dispatcher); - g_dispatcher = dispatcher; -} - -void PluginDispatcher::OnMessageReceived(const IPC::Message& msg) { - if (msg.routing_id() == MSG_ROUTING_CONTROL) { - // Handle some plugin-specific control messages. - IPC_BEGIN_MESSAGE_MAP(PluginDispatcher, msg) - IPC_MESSAGE_HANDLER(PpapiMsg_InitializeModule, OnInitializeModule) - - // Forward all other control messages to the superclass. - IPC_MESSAGE_UNHANDLED(Dispatcher::OnMessageReceived(msg)) - IPC_END_MESSAGE_MAP() - return; - } - - // All non-control messages get handled by the superclass. - Dispatcher::OnMessageReceived(msg); -} - -void PluginDispatcher::OnInitializeModule(PP_Module pp_module, bool* result) { - set_pp_module(pp_module); - *result = init_module_(pp_module, &GetInterfaceFromDispatcher) == PP_OK; -} - -} // namespace proxy -} // namespace pp - diff --git a/ppapi/proxy/plugin_dispatcher.h b/ppapi/proxy/plugin_dispatcher.h deleted file mode 100644 index 0a97965..0000000 --- a/ppapi/proxy/plugin_dispatcher.h +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PROXY_PLUGIN_DISPATCHER_H_ -#define PPAPI_PROXY_PLUGIN_DISPATCHER_H_ - -#include <string> - -#include "base/scoped_ptr.h" -#include "ppapi/proxy/callback_tracker.h" -#include "ppapi/proxy/dispatcher.h" -#include "ppapi/proxy/plugin_resource_tracker.h" -#include "ppapi/proxy/plugin_var_tracker.h" - -class MessageLoop; - -namespace base { -class WaitableEvent; -} - -namespace pp { -namespace proxy { - -class PluginDispatcher : public Dispatcher { - public: - // Constructor for the plugin side. The init and shutdown functions will be - // will be automatically called when requested by the renderer side. The - // module ID will be set upon receipt of the InitializeModule message. - // - // You must call Dispatcher::InitWithChannel after the constructor. - PluginDispatcher(GetInterfaceFunc get_interface, - InitModuleFunc init_module, - ShutdownModuleFunc shutdown_module); - ~PluginDispatcher(); - - // The plugin maintains a global Dispatcher pointer. There is only one since - // there is only one connection to the browser. Don't call this on the - // browser side, see GetForInstnace. - static PluginDispatcher* Get(); - static void SetGlobal(PluginDispatcher* dispatcher); - - // Dispatcher overrides. - virtual bool IsPlugin() const { return true; } - - // IPC::Channel::Listener implementation. - virtual void OnMessageReceived(const IPC::Message& msg); - - // Returns the resource tracker for the plugin. In the browser process this - // will return NULL. - PluginResourceTracker* plugin_resource_tracker() { - return plugin_resource_tracker_.get(); - } - - // Returns the var tracker for the plugin. In the browser process this - // will return NULL. - PluginVarTracker* plugin_var_tracker() { - return plugin_var_tracker_.get(); - } - - private: - void OnInitializeModule(PP_Module pp_module, bool* result); - - InitModuleFunc init_module_; - ShutdownModuleFunc shutdown_module_; - - scoped_ptr<PluginResourceTracker> plugin_resource_tracker_; - scoped_ptr<PluginVarTracker> plugin_var_tracker_; - - DISALLOW_COPY_AND_ASSIGN(PluginDispatcher); -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PROXY_PLUGIN_DISPATCHER_H_ diff --git a/ppapi/proxy/plugin_resource.cc b/ppapi/proxy/plugin_resource.cc deleted file mode 100644 index b1a579e..0000000 --- a/ppapi/proxy/plugin_resource.cc +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) 2010 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/plugin_resource.h" - -namespace pp { -namespace proxy { - -PluginResource::PluginResource() { -} - -PluginResource::~PluginResource() { -} - -} // namespace proxy -} // namespace pp diff --git a/ppapi/proxy/plugin_resource.h b/ppapi/proxy/plugin_resource.h deleted file mode 100644 index 9a70266..0000000 --- a/ppapi/proxy/plugin_resource.h +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PROXY_PLUGIN_RESOURCE_H_ -#define PPAPI_PROXY_PLUGIN_RESOURCE_H_ - -#include "base/basictypes.h" -#include "ppapi/proxy/plugin_dispatcher.h" -#include "ppapi/proxy/plugin_resource_tracker.h" - -// If you inherit from resource, make sure you add the class name here. -#define FOR_ALL_RESOURCES(F) \ - F(Graphics2D) \ - F(ImageData) \ - F(URLLoader) - -namespace pp { -namespace proxy { - -// Forward declaration of Resource classes. -#define DECLARE_RESOURCE_CLASS(RESOURCE) class RESOURCE; -FOR_ALL_RESOURCES(DECLARE_RESOURCE_CLASS) -#undef DECLARE_RESOURCE_CLASS - -class PluginResource { - public: - PluginResource(); - virtual ~PluginResource(); - - // Returns NULL if the resource is invalid or is a different type. - template<typename T> static T* GetAs(PP_Resource res) { - PluginResource* resource = - PluginDispatcher::Get()->plugin_resource_tracker()->GetResourceObject( - res); - return resource ? resource->Cast<T>() : NULL; - } - - template <typename T> T* Cast() { return NULL; } - - private: - // Type-specific getters for individual resource types. These will return - // NULL if the resource does not match the specified type. Used by the Cast() - // function. - #define DEFINE_TYPE_GETTER(RESOURCE) \ - virtual RESOURCE* As##RESOURCE() { return NULL; } - FOR_ALL_RESOURCES(DEFINE_TYPE_GETTER) - #undef DEFINE_TYPE_GETTER - - DISALLOW_COPY_AND_ASSIGN(PluginResource); -}; - -// Cast() specializations. -#define DEFINE_RESOURCE_CAST(Type) \ - template <> inline Type* PluginResource::Cast<Type>() { \ - return As##Type(); \ - } -FOR_ALL_RESOURCES(DEFINE_RESOURCE_CAST) -#undef DEFINE_RESOURCE_CAST - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PROXY_PLUGIN_RESOURCE_H_ diff --git a/ppapi/proxy/plugin_resource_tracker.cc b/ppapi/proxy/plugin_resource_tracker.cc deleted file mode 100644 index a285311..0000000 --- a/ppapi/proxy/plugin_resource_tracker.cc +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (c) 2010 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/plugin_resource_tracker.h" - -#include "base/logging.h" -#include "ppapi/proxy/plugin_dispatcher.h" -#include "ppapi/proxy/ppapi_messages.h" -#include "ppapi/proxy/plugin_resource.h" -#include "ppapi/proxy/serialized_var.h" - -namespace pp { -namespace proxy { - -PluginResourceTracker::ResourceInfo::ResourceInfo() : ref_count(0) { -} - -PluginResourceTracker::ResourceInfo::ResourceInfo(int rc, - linked_ptr<PluginResource> r) - : ref_count(rc), - resource(r) { -} - -PluginResourceTracker::ResourceInfo::ResourceInfo(const ResourceInfo& other) - : ref_count(other.ref_count), - resource(other.resource) { -} - -PluginResourceTracker::ResourceInfo::~ResourceInfo() { -} - -PluginResourceTracker::ResourceInfo& -PluginResourceTracker::ResourceInfo::operator=( - const ResourceInfo& other) { - ref_count = other.ref_count; - resource = other.resource; - return *this; -} - -PluginResourceTracker::PluginResourceTracker(PluginDispatcher* dispatcher) - : dispatcher_(dispatcher) { -} - -PluginResourceTracker::~PluginResourceTracker() { -} - -PluginResource* PluginResourceTracker::GetResourceObject( - PP_Resource pp_resource) { - ResourceMap::iterator found = resource_map_.find(pp_resource); - if (found == resource_map_.end()) - return NULL; - return found->second.resource.get(); -} - -void PluginResourceTracker::AddResource(PP_Resource pp_resource, - linked_ptr<PluginResource> object) { - DCHECK(resource_map_.find(pp_resource) == resource_map_.end()); - resource_map_[pp_resource] = ResourceInfo(1, object); -} - -void PluginResourceTracker::AddRefResource(PP_Resource resource) { - resource_map_[resource].ref_count++; -} - -void PluginResourceTracker::ReleaseResource(PP_Resource resource) { - ReleasePluginResourceRef(resource, true); -} - -void PluginResourceTracker::ReleasePluginResourceRef( - const PP_Resource& resource, - bool notify_browser_on_release) { - ResourceMap::iterator found = resource_map_.find(resource); - if (found == resource_map_.end()) - return; - found->second.ref_count--; - if (found->second.ref_count == 0) { - if (notify_browser_on_release) { - dispatcher_->Send(new PpapiHostMsg_PPBCore_ReleaseResource( - INTERFACE_ID_PPB_CORE, resource)); - } - resource_map_.erase(found); - } -} - -} // namespace proxy -} // namespace pp diff --git a/ppapi/proxy/plugin_resource_tracker.h b/ppapi/proxy/plugin_resource_tracker.h deleted file mode 100644 index a9ea963..0000000 --- a/ppapi/proxy/plugin_resource_tracker.h +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PROXY_PLUGIN_RESOURCE_TRACKER_H_ -#define PPAPI_PROXY_PLUGIN_RESOURCE_TRACKER_H_ - -#include <map> - -#include "base/linked_ptr.h" -#include "ppapi/c/pp_completion_callback.h" -#include "ppapi/c/pp_stdint.h" -#include "ppapi/c/pp_resource.h" -#include "ppapi/c/pp_var.h" - -namespace pp { -namespace proxy { - -class PluginDispatcher; -class PluginResource; - -class PluginResourceTracker { - public: - PluginResourceTracker(PluginDispatcher* dispatcher); - ~PluginResourceTracker(); - - // Returns the object associated with the given resource ID, or NULL if - // there isn't one. - PluginResource* GetResourceObject(PP_Resource pp_resource); - - void AddResource(PP_Resource pp_resource, linked_ptr<PluginResource> object); - - void AddRefResource(PP_Resource resource); - void ReleaseResource(PP_Resource resource); - - private: - struct ResourceInfo { - ResourceInfo(); - ResourceInfo(int ref_count, linked_ptr<PluginResource> r); - ResourceInfo(const ResourceInfo& other); - ~ResourceInfo(); - - ResourceInfo& operator=(const ResourceInfo& other); - - int ref_count; - linked_ptr<PluginResource> resource; // May be NULL. - }; - - void ReleasePluginResourceRef(const PP_Resource& var, - bool notify_browser_on_release); - - // Pointer to the dispatcher that owns us. - PluginDispatcher* dispatcher_; - - typedef std::map<PP_Resource, ResourceInfo> ResourceMap; - ResourceMap resource_map_; -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PROXY_PLUGIN_RESOURCE_TRACKER_H_ diff --git a/ppapi/proxy/plugin_var_serialization_rules.cc b/ppapi/proxy/plugin_var_serialization_rules.cc deleted file mode 100644 index d01f8d5..0000000 --- a/ppapi/proxy/plugin_var_serialization_rules.cc +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright (c) 2010 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/plugin_var_serialization_rules.h" - -#include "ppapi/proxy/plugin_var_tracker.h" - -namespace pp { -namespace proxy { - -PluginVarSerializationRules::PluginVarSerializationRules( - PluginVarTracker* var_tracker) - : var_tracker_(var_tracker) { -} - -PluginVarSerializationRules::~PluginVarSerializationRules() { -} - -void PluginVarSerializationRules::SendCallerOwned(const PP_Var& var, - std::string* str_val) { - // Nothing to do since we manage the refcount, other than retrieve the string - // to use for IPC. - if (var.type == PP_VARTYPE_STRING) - *str_val = var_tracker_->GetString(var); -} - -PP_Var PluginVarSerializationRules::BeginReceiveCallerOwned( - const PP_Var& var, - const std::string* str_val) { - if (var.type == PP_VARTYPE_STRING) { - // Convert the string to the context of the current process. - PP_Var ret; - ret.type = PP_VARTYPE_STRING; - ret.value.as_id = var_tracker_->MakeString(*str_val); - return ret; - } - - return var; -} - -void PluginVarSerializationRules::EndReceiveCallerOwned(const PP_Var& var) { - if (var.type == PP_VARTYPE_STRING) { - // Destroy the string BeginReceiveCallerOwned created above. - var_tracker_->Release(var); - } -} - -PP_Var PluginVarSerializationRules::ReceivePassRef(const PP_Var& var, - const std::string& str_val) { - if (var.type == PP_VARTYPE_STRING) { - // Convert the string to the context of the current process. - PP_Var ret; - ret.type = PP_VARTYPE_STRING; - ret.value.as_id = var_tracker_->MakeString(str_val); - return ret; - } - - // Overview of sending an object with "pass ref" from the browser to the - // plugin: - // Example 1 Example 2 - // Plugin Browser Plugin Browser - // Before send 3 2 0 1 - // Browser calls BeginSendPassRef 3 2 0 1 - // Plugin calls ReceivePassRef 4 1 1 1 - // Browser calls EndSendPassRef 4 1 1 1 - // - // In example 1 before the send, the plugin has 3 refs which are represented - // as one ref in the browser (since the plugin only tells the browser when - // it's refcount goes from 1 -> 0). The initial state is that the browser - // plugin code started to return a value, which means it gets another ref - // on behalf of the caller. This needs to be transferred to the plugin and - // folded in to its set of refs it maintains (with one ref representing all - // fo them in the browser). - if (var.type == PP_VARTYPE_OBJECT) - var_tracker_->ReceiveObjectPassRef(var); - return var; -} - -void PluginVarSerializationRules::BeginSendPassRef(const PP_Var& var, - std::string* str_val) { - // Overview of sending an object with "pass ref" from the plugin to the - // browser: - // Example 1 Example 2 - // Plugin Browser Plugin Browser - // Before send 3 1 1 1 - // Plugin calls BeginSendPassRef 3 1 1 1 - // Browser calls ReceivePassRef 3 2 1 2 - // Plugin calls EndSendPassRef 2 2 0 1 - // - // The plugin maintains one ref count in the browser on behalf of the - // entire ref count in the plugin. When the plugin refcount goes to 0, it - // will call the browser to deref the object. This is why in example 2 - // transferring the object ref to the browser involves no net change in the - // browser's refcount. - - if (var.type == PP_VARTYPE_STRING) - *str_val = var_tracker_->GetString(var); -} - -void PluginVarSerializationRules::EndSendPassRef(const PP_Var& var) { - // See BeginSendPassRef for an example of why we release our ref here. - if (var.type == PP_VARTYPE_OBJECT) - var_tracker_->Release(var); -} - -void PluginVarSerializationRules::ReleaseObjectRef(const PP_Var& var) { - var_tracker_->Release(var); -} - -} // namespace proxy -} // namespace pp diff --git a/ppapi/proxy/plugin_var_serialization_rules.h b/ppapi/proxy/plugin_var_serialization_rules.h deleted file mode 100644 index f2d8224..0000000 --- a/ppapi/proxy/plugin_var_serialization_rules.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PROXY_PLUGIN_VAR_SERIALIZATION_RULES_H_ -#define PPAPI_PROXY_PLUGIN_VAR_SERIALIZATION_RULES_H_ - -#include "base/basictypes.h" -#include "ppapi/proxy/var_serialization_rules.h" - -namespace pp { -namespace proxy { - -class PluginVarTracker; - -// Implementation of the VarSerialization interface for the plugin. -class PluginVarSerializationRules : public VarSerializationRules { - public: - // This class with use the given non-owning pointer to the var tracker to - // handle object refcounting and string conversion. - PluginVarSerializationRules(PluginVarTracker* tracker); - ~PluginVarSerializationRules(); - - // VarSerialization implementation. - virtual void SendCallerOwned(const PP_Var& var, std::string* str_val); - virtual PP_Var BeginReceiveCallerOwned(const PP_Var& var, - const std::string* str_val); - virtual void EndReceiveCallerOwned(const PP_Var& var); - virtual PP_Var ReceivePassRef(const PP_Var& var, - const std::string& str_val); - virtual void BeginSendPassRef(const PP_Var& var, std::string* str_val); - virtual void EndSendPassRef(const PP_Var& var); - virtual void ReleaseObjectRef(const PP_Var& var); - - private: - PluginVarTracker* var_tracker_; - - DISALLOW_COPY_AND_ASSIGN(PluginVarSerializationRules); -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PROXY_PLUGIN_VAR_SERIALIZATION_RULES_H_ diff --git a/ppapi/proxy/plugin_var_tracker.cc b/ppapi/proxy/plugin_var_tracker.cc deleted file mode 100644 index b28fc38..0000000 --- a/ppapi/proxy/plugin_var_tracker.cc +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright (c) 2010 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/plugin_var_tracker.h" - -#include "base/ref_counted.h" -#include "ppapi/c/ppb_var.h" -#include "ppapi/proxy/plugin_dispatcher.h" -#include "ppapi/proxy/ppapi_messages.h" - -namespace pp { -namespace proxy { - -namespace { - -class RefCountedString : public base::RefCounted<RefCountedString> { - public: - RefCountedString() { - } - RefCountedString(const std::string& str) : value_(str) { - } - RefCountedString(const char* data, size_t len) - : value_(data, len) { - } - - const std::string& value() const { return value_; } - - private: - std::string value_; -}; - -// When running in the plugin, this will convert the string ID to the object -// using casting. No validity checking is done. -RefCountedString* PluginStringFromID(int64 id) { - return reinterpret_cast<RefCountedString*>(static_cast<intptr_t>(id)); -} - -} // namespace - -PluginVarTracker::PluginVarTracker(PluginDispatcher* dispatcher) - : dispatcher_(dispatcher), - browser_var_interface_(NULL) { -} - -void PluginVarTracker::Init() { - browser_var_interface_ = reinterpret_cast<const PPB_Var*>( - dispatcher_->GetLocalInterface(PPB_VAR_INTERFACE)); -} - -int64 PluginVarTracker::MakeString(const std::string& str) { - RefCountedString* out = new RefCountedString(str); - out->AddRef(); - return static_cast<int64>(reinterpret_cast<intptr_t>(out)); -} - -std::string PluginVarTracker::GetString(const PP_Var& var) const { - return PluginStringFromID(var.value.as_id)->value(); -} - -const std::string* PluginVarTracker::GetExistingString( - const PP_Var& var) const { - if (var.type != PP_VARTYPE_STRING) - return NULL; - RefCountedString* str = PluginStringFromID(var.value.as_id); - return &str->value(); -} - -void PluginVarTracker::AddRef(const PP_Var& var) { - if (var.type == PP_VARTYPE_STRING) { - PluginStringFromID(var.value.as_id)->AddRef(); - } else if (var.type == PP_VARTYPE_OBJECT && var.value.as_id != 0) { - int& ref_count = object_ref_count_[var.value.as_id]; - ref_count++; - if (ref_count == 1) { - // We must handle the case where we got requested to AddRef an object - // that we've never seen before. This should tell the browser we've - // taken a ref. This comes up when the browser passes an object as an - // input param and holds a ref for us. We may not have seen that object - // and the plugin handler may want to AddRef and release it internally. - SendAddRefObjectMsg(var.value.as_id); - } - } -} - -void PluginVarTracker::Release(const PP_Var& var) { - if (var.type == PP_VARTYPE_STRING) { - PluginStringFromID(var.value.as_id)->Release(); - } else if (var.type == PP_VARTYPE_OBJECT) { - ObjectRefCount::iterator found = object_ref_count_.find(var.value.as_id); - if (found == object_ref_count_.end()) - return; // Invalid object. - found->second--; - - if (found->second == 0) { - // Plugin has released all of its refs, tell the browser. - object_ref_count_.erase(found); - SendReleaseObjectMsg(var.value.as_id); - } - } -} - -void PluginVarTracker::ReceiveObjectPassRef(const PP_Var& var) { - // We're the plugin and the renderer just sent us a ref. The renderer has - // addrefed the var in its tracker for us since it's returning it. - // - // - If We don't have a reference to this already, then we just add it to - // our tracker and use that one ref. - // - // - If we do already have a reference to it, that means the renderer now - // has two references on our behalf. We want to transfer that extra - // reference to our list. This means we addref in the plugin, and release - // the extra one in the renderer. - ObjectRefCount::iterator found = object_ref_count_.find(var.value.as_id); - if (found == object_ref_count_.end()) { - object_ref_count_[var.value.as_id] = 1; - } else { - SendReleaseObjectMsg(var.value.as_id); - found->second++; - } -} - -void PluginVarTracker::SendAddRefObjectMsg(int64_t id) { - dispatcher_->Send(new PpapiHostMsg_PPBVar_AddRefObject( - INTERFACE_ID_PPB_VAR_DEPRECATED, id)); -} - -void PluginVarTracker::SendReleaseObjectMsg(int64_t id) { - dispatcher_->Send(new PpapiHostMsg_PPBVar_ReleaseObject( - INTERFACE_ID_PPB_VAR_DEPRECATED, id)); -} - -} // namesace proxy -} // namespace pp diff --git a/ppapi/proxy/plugin_var_tracker.h b/ppapi/proxy/plugin_var_tracker.h deleted file mode 100644 index b519ee6..0000000 --- a/ppapi/proxy/plugin_var_tracker.h +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PROXY_PLUGIN_VAR_TRACKER_H_ -#define PPAPI_PROXY_PLUGIN_VAR_TRACKER_H_ - -#include <map> -#include <string> - -#include "ppapi/c/pp_stdint.h" -#include "ppapi/c/pp_var.h" - -struct PPB_Var; - -namespace pp { -namespace proxy { - -class PluginDispatcher; - -// Tracks live strings and objects in the plugin process. We maintain our own -// reference count for these objects. In the case of JS objects, we maintain -// a single ref in the browser process whenever we have a nonzero refcount -// in the plugin process. This allows AddRef and Release to not initiate too -// much IPC chat. -class PluginVarTracker { - public: - // You must call Init() after creation to set up the correct interfaces. We - // do this to avoid having to depend on the dispatcher in the constructor, - // which is probably just being created from our constructor. - PluginVarTracker(PluginDispatcher* dispatcher); - - // Must be called after construction. - void Init(); - - // Allocates a string and returns the ID of it. The refcount will be 1. - int64_t MakeString(const std::string& str); - - // Returns the string associated with the given string var. The var must be - // of type string and must be valid or this function will crash. - std::string GetString(const PP_Var& var) const; - - // Returns a pointer to the given string if it exists, or NULL if the var - // isn't a string var. - const std::string* GetExistingString(const PP_Var& var) const; - - void AddRef(const PP_Var& var); - void Release(const PP_Var& var); - - // Manages tracking for receiving a VARTYPE_OBJECT from the remote side - // (either the plugin or the renderer) that has already had its reference - // count incremented on behalf of the caller. - void ReceiveObjectPassRef(const PP_Var& var); - - private: - // Sends an addref or release message to the browser for the given object ID. - void SendAddRefObjectMsg(int64_t id); - void SendReleaseObjectMsg(int64_t id); - - PluginDispatcher* dispatcher_; - - // When !is_plugin_ (we're in the renderer) this points to the actual var - // interface implementation which is how we create strings and manage - // refcounts. - const PPB_Var* browser_var_interface_; - - // Tracks object references to the reference count of that object on the - // plugin side. - typedef std::map<int64_t, int> ObjectRefCount; - ObjectRefCount object_ref_count_; -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PROXY_PLUGIN_VAR_TRACKER_H_ diff --git a/ppapi/proxy/ppapi_messages.cc b/ppapi/proxy/ppapi_messages.cc deleted file mode 100644 index 1cc617b..0000000 --- a/ppapi/proxy/ppapi_messages.cc +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) 2010 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/ppapi_messages.h" - -#include "base/file_path.h" -#include "ipc/ipc_channel_handle.h" -#include "ppapi/c/ppb_var.h" - -// This actually defines the implementations of all the IPC message functions. -#define MESSAGES_INTERNAL_IMPL_FILE "ppapi/proxy/ppapi_messages_internal.h" -#include "ipc/ipc_message_impl_macros.h" diff --git a/ppapi/proxy/ppapi_messages.h b/ppapi/proxy/ppapi_messages.h deleted file mode 100644 index 89ba4e9..0000000 --- a/ppapi/proxy/ppapi_messages.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PROXY_PPAPI_MESSAGES_H_ -#define PPAPI_PROXY_PPAPI_MESSAGES_H_ -#pragma once - -#include <string> -#include <vector> - -#include "base/basictypes.h" -#include "ipc/ipc_message_utils.h" -#include "ppapi/c/pp_instance.h" -#include "ppapi/c/pp_module.h" -#include "ppapi/c/pp_resource.h" -#include "ppapi/proxy/ppapi_param_traits.h" - -#define MESSAGES_INTERNAL_FILE "ppapi/proxy/ppapi_messages_internal.h" -#include "ipc/ipc_message_macros.h" - -#endif // PPAPI_PROXY_PPAPI_MESSAGES_H_ diff --git a/ppapi/proxy/ppapi_messages_internal.h b/ppapi/proxy/ppapi_messages_internal.h deleted file mode 100644 index f99f4cc..0000000 --- a/ppapi/proxy/ppapi_messages_internal.h +++ /dev/null @@ -1,321 +0,0 @@ -// Copyright (c) 2010 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. - -// This header is meant to be included in multiple passes, hence no traditional -// header guard. It is included by backing_store_messages_internal.h -// See ipc_message_macros.h for explanation of the macros and passes. - -// This file needs to be included again, even though we're actually included -// from it via utility_messages.h. -#include "ipc/ipc_message_macros.h" - -// These are from the plugin to the renderer -IPC_BEGIN_MESSAGES(Ppapi) - // Loads the given plugin. - IPC_MESSAGE_CONTROL2(PpapiMsg_LoadPlugin, - FilePath /* path */, - int /* renderer_id */) - - IPC_SYNC_MESSAGE_CONTROL1_1(PpapiMsg_InitializeModule, - PP_Module /* module_id */, - bool /* result */) - - // Sent in both directions to see if the other side supports the given - // interface. - IPC_SYNC_MESSAGE_CONTROL1_1(PpapiMsg_SupportsInterface, - std::string /* interface_name */, - bool /* result */) - - // Way for the renderer to list all interfaces that is supports in advance to - // avoid extra IPC traffic. - IPC_MESSAGE_CONTROL1(PpapiMsg_DeclareInterfaces, - std::vector<std::string> /* interfaces */) - - IPC_MESSAGE_CONTROL2(PpapiMsg_ExecuteCallback, - uint32 /* serialized_callback */, - int32 /* param */) - - // PPP_Class. - IPC_SYNC_MESSAGE_ROUTED3_2(PpapiMsg_PPPClass_HasProperty, - int64 /* ppp_class */, - int64 /* object */, - pp::proxy::SerializedVar /* property */, - pp::proxy::SerializedVar /* out_exception */, - bool /* result */) - IPC_SYNC_MESSAGE_ROUTED3_2(PpapiMsg_PPPClass_HasMethod, - int64 /* ppp_class */, - int64 /* object */, - pp::proxy::SerializedVar /* method */, - pp::proxy::SerializedVar /* out_exception */, - bool /* result */) - IPC_SYNC_MESSAGE_ROUTED3_2(PpapiMsg_PPPClass_GetProperty, - int64 /* ppp_class */, - int64 /* object */, - pp::proxy::SerializedVar /* property */, - pp::proxy::SerializedVar /* out_exception */, - pp::proxy::SerializedVar /* result */) - IPC_SYNC_MESSAGE_ROUTED2_2(PpapiMsg_PPPClass_EnumerateProperties, - int64 /* ppp_class */, - int64 /* object */, - std::vector<pp::proxy::SerializedVar> /* props */, - pp::proxy::SerializedVar /* out_exception */) - IPC_SYNC_MESSAGE_ROUTED4_1(PpapiMsg_PPPClass_SetProperty, - int64 /* ppp_class */, - int64 /* object */, - pp::proxy::SerializedVar /* name */, - pp::proxy::SerializedVar /* value */, - pp::proxy::SerializedVar /* out_exception */) - IPC_SYNC_MESSAGE_ROUTED3_1(PpapiMsg_PPPClass_RemoveProperty, - int64 /* ppp_class */, - int64 /* object */, - pp::proxy::SerializedVar /* property */, - pp::proxy::SerializedVar /* out_exception */) - IPC_SYNC_MESSAGE_ROUTED4_2(PpapiMsg_PPPClass_Call, - int64 /* ppp_class */, - int64 /* object */, - pp::proxy::SerializedVar /* method_name */, - std::vector<pp::proxy::SerializedVar> /* args */, - pp::proxy::SerializedVar /* out_exception */, - pp::proxy::SerializedVar /* result */) - IPC_SYNC_MESSAGE_ROUTED3_2(PpapiMsg_PPPClass_Construct, - int64 /* ppp_class */, - int64 /* object */, - std::vector<pp::proxy::SerializedVar> /* args */, - pp::proxy::SerializedVar /* out_exception */, - pp::proxy::SerializedVar /* result */) - IPC_MESSAGE_ROUTED2(PpapiMsg_PPPClass_Deallocate, - int64 /* ppp_class */, - int64 /* object */) - - // PPP_Instance. - IPC_SYNC_MESSAGE_ROUTED3_1(PpapiMsg_PPPInstance_DidCreate, - PP_Instance /* instance */, - std::vector<std::string> /* argn */, - std::vector<std::string> /* argv */, - bool /* result */) - IPC_MESSAGE_ROUTED1(PpapiMsg_PPPInstance_DidDestroy, - PP_Instance /* instance */) - IPC_MESSAGE_ROUTED3(PpapiMsg_PPPInstance_DidChangeView, - PP_Instance /* instance */, - PP_Rect /* position */, - PP_Rect /* clip */) - IPC_MESSAGE_ROUTED2(PpapiMsg_PPPInstance_DidChangeFocus, - PP_Instance /* instance */, - bool /* has_focus */) - IPC_SYNC_MESSAGE_ROUTED2_1(PpapiMsg_PPPInstance_HandleInputEvent, - PP_Instance /* instance */, - PP_InputEvent /* event */, - bool /* result */) - IPC_SYNC_MESSAGE_ROUTED2_1(PpapiMsg_PPPInstance_HandleDocumentLoad, - PP_Instance /* instance */, - PP_Resource /* url_loader */, - bool /* result */) - IPC_SYNC_MESSAGE_ROUTED1_1(PpapiMsg_PPPInstance_GetInstanceObject, - PP_Instance /* instance */, - pp::proxy::SerializedVar /* result */) - - - // PPB_URLLoader - // (Messages from browser to plugin to notify it of changes in state.) - IPC_MESSAGE_ROUTED5(PpapiMsg_PPBURLLoader_UpdateProgress, - PP_Resource /* resource */, - int64 /* bytes_sent */, - int64 /* total_bytes_to_be_sent */, - int64 /* bytes_received */, - int64 /* total_bytes_to_be_received */) -IPC_END_MESSAGES(Ppapi) - -// ----------------------------------------------------------------------------- -// These are from the plugin to the renderer. -IPC_BEGIN_MESSAGES(PpapiHost) - // Reply to PpapiMsg_LoadPlugin. - IPC_MESSAGE_CONTROL1(PpapiHostMsg_PluginLoaded, - IPC::ChannelHandle /* handle */) - - // PPB_Core. - IPC_MESSAGE_ROUTED1(PpapiHostMsg_PPBCore_AddRefResource, PP_Resource) - IPC_MESSAGE_ROUTED1(PpapiHostMsg_PPBCore_ReleaseResource, PP_Resource) - IPC_SYNC_MESSAGE_ROUTED0_1(PpapiHostMsg_PPBCore_GetTime, - double /* return value -> time */) - IPC_SYNC_MESSAGE_ROUTED0_1(PpapiHostMsg_PPBCore_GetTimeTicks, - double /* return value -> time */) - IPC_MESSAGE_ROUTED3(PpapiHostMsg_PPBCore_CallOnMainThread, - int /* delay_in_msec */, - uint32_t /* serialized_callback */, - int32_t /* result */) - - // PPB_Graphics2D. - IPC_SYNC_MESSAGE_ROUTED3_1(PpapiHostMsg_PPBGraphics2D_Create, - PP_Module /* module */, - PP_Size /* size */, - bool /* is_always_opaque */, - PP_Resource /* result */) - IPC_MESSAGE_ROUTED5(PpapiHostMsg_PPBGraphics2D_PaintImageData, - PP_Resource /* graphics_2d */, - PP_Resource /* image_data */, - PP_Point /* top_left */, - bool /* src_rect_specified */, - PP_Rect /* src_rect */) - IPC_MESSAGE_ROUTED4(PpapiHostMsg_PPBGraphics2D_Scroll, - PP_Resource /* graphics_2d */, - bool /* clip_specified */, - PP_Rect /* clip */, - PP_Point /* amount */) - IPC_MESSAGE_ROUTED2(PpapiHostMsg_PPBGraphics2D_ReplaceContents, - PP_Resource /* graphics_2d */, - PP_Resource /* image_data */) - IPC_SYNC_MESSAGE_ROUTED2_1(PpapiHostMsg_PPBGraphics2D_Flush, - PP_Resource /* graphics_2d */, - uint32_t /* serialized_callback */, - int32_t /* result */) - - // PPB_ImageData. - IPC_SYNC_MESSAGE_ROUTED0_1( - PpapiHostMsg_PPBImageData_GetNativeImageDataFormat, - int32 /* result_format */) - IPC_SYNC_MESSAGE_ROUTED1_1( - PpapiHostMsg_PPBImageData_IsImageDataFormatSupported, - int32 /* format */, - bool /* result */) - IPC_SYNC_MESSAGE_ROUTED4_3(PpapiHostMsg_PPBImageData_Create, - PP_Module /* module */, - int32 /* format */, - PP_Size /* size */, - bool /* init_to_zero */, - PP_Resource /* result_resource */, - std::string /* image_data_desc */, - uint64_t /* result_shm_handle */) - - // PPB_Instance. - IPC_SYNC_MESSAGE_ROUTED1_1(PpapiHostMsg_PPBInstance_GetWindowObject, - PP_Instance /* instance */, - pp::proxy::SerializedVar /* result */) - IPC_SYNC_MESSAGE_ROUTED1_1(PpapiHostMsg_PPBInstance_GetOwnerElementObject, - PP_Instance /* instance */, - pp::proxy::SerializedVar /* result */) - IPC_SYNC_MESSAGE_ROUTED2_1(PpapiHostMsg_PPBInstance_BindGraphics, - PP_Instance /* instance */, - PP_Resource /* device */, - bool /* result */) - IPC_SYNC_MESSAGE_ROUTED1_1(PpapiHostMsg_PPBInstance_IsFullFrame, - PP_Instance /* instance */, - bool /* result */) - IPC_SYNC_MESSAGE_ROUTED2_2(PpapiHostMsg_PPBInstance_ExecuteScript, - PP_Instance /* instance */, - pp::proxy::SerializedVar /* script */, - pp::proxy::SerializedVar /* out_exception */, - pp::proxy::SerializedVar /* result */) - - // PPB_URLLoader. - IPC_SYNC_MESSAGE_ROUTED1_1(PpapiHostMsg_PPBURLLoader_Create, - PP_Instance /* instance */, - PP_Resource /* result */) - IPC_MESSAGE_ROUTED3(PpapiHostMsg_PPBURLLoader_Open, - PP_Resource /* loader */, - PP_Resource /*request_info */, - uint32_t /* serialized_callback */) - IPC_MESSAGE_ROUTED2(PpapiHostMsg_PPBURLLoader_FollowRedirect, - PP_Resource /* loader */, - uint32_t /* serialized_callback */) - IPC_SYNC_MESSAGE_ROUTED1_3(PpapiHostMsg_PPBURLLoader_GetUploadProgress, - PP_Resource /* loader */, - int64 /* bytes_sent */, - int64 /* total_bytes_to_be_sent */, - bool /* result */) - IPC_SYNC_MESSAGE_ROUTED1_3(PpapiHostMsg_PPBURLLoader_GetDownloadProgress, - PP_Resource /* loader */, - int64 /* bytes_received */, - int64 /* total_bytes_to_be_received */, - bool /* result */) - IPC_SYNC_MESSAGE_ROUTED1_1(PpapiHostMsg_PPBURLLoader_GetResponseInfo, - PP_Resource /* loader */, - PP_Resource /* response_info_out */) - IPC_MESSAGE_ROUTED3(PpapiHostMsg_PPBURLLoader_ReadResponseBody, - PP_Resource /* loader */, - int32_t /* bytes_to_read */, - uint32_t /* serialized_callback */) - IPC_MESSAGE_ROUTED2(PpapiHostMsg_PPBURLLoader_FinishStreamingToFile, - PP_Resource /* loader */, - uint32_t /* serialized_callback */) - IPC_MESSAGE_ROUTED1(PpapiHostMsg_PPBURLLoader_Close, - PP_Resource /* loader */) - - // PPB_Var. - IPC_MESSAGE_ROUTED1(PpapiHostMsg_PPBVar_AddRefObject, - int64 /* object_id */) - IPC_MESSAGE_ROUTED1(PpapiHostMsg_PPBVar_ReleaseObject, - int64 /* object_id */) - IPC_SYNC_MESSAGE_ROUTED3_2(PpapiHostMsg_PPBVar_ConvertType, - PP_Instance /* instance */, - pp::proxy::SerializedVar /* var */, - int /* new_type */, - pp::proxy::SerializedVar /* exception */, - pp::proxy::SerializedVar /* result */) - IPC_MESSAGE_ROUTED3(PpapiHostMsg_PPBVar_DefineProperty, - pp::proxy::SerializedVar /* object */, - PP_ObjectProperty /* property */, - pp::proxy::SerializedVar /* out_exception */) - IPC_SYNC_MESSAGE_ROUTED2_2(PpapiHostMsg_PPBVar_HasProperty, - pp::proxy::SerializedVar /* object */, - pp::proxy::SerializedVar /* property */, - pp::proxy::SerializedVar /* out_exception */, - bool /* result */) - IPC_SYNC_MESSAGE_ROUTED2_2(PpapiHostMsg_PPBVar_HasMethodDeprecated, - pp::proxy::SerializedVar /* object */, - pp::proxy::SerializedVar /* method */, - pp::proxy::SerializedVar /* out_exception */, - bool /* result */) - IPC_SYNC_MESSAGE_ROUTED2_2(PpapiHostMsg_PPBVar_GetProperty, - pp::proxy::SerializedVar /* object */, - pp::proxy::SerializedVar /* property */, - pp::proxy::SerializedVar /* out_exception */, - pp::proxy::SerializedVar /* result */) - IPC_SYNC_MESSAGE_ROUTED2_2(PpapiHostMsg_PPBVar_DeleteProperty, - pp::proxy::SerializedVar /* object */, - pp::proxy::SerializedVar /* property */, - pp::proxy::SerializedVar /* out_exception */, - bool /* result */) - IPC_SYNC_MESSAGE_ROUTED1_2(PpapiHostMsg_PPBVar_EnumerateProperties, - pp::proxy::SerializedVar /* object */, - std::vector<pp::proxy::SerializedVar> /* props */, - pp::proxy::SerializedVar /* out_exception */) - IPC_SYNC_MESSAGE_ROUTED3_1(PpapiHostMsg_PPBVar_SetPropertyDeprecated, - pp::proxy::SerializedVar /* object */, - pp::proxy::SerializedVar /* name */, - pp::proxy::SerializedVar /* value */, - pp::proxy::SerializedVar /* out_exception */) - IPC_SYNC_MESSAGE_ROUTED1_1(PpapiHostMsg_PPBVar_IsCallable, - pp::proxy::SerializedVar /* object */, - bool /* result */) - IPC_SYNC_MESSAGE_ROUTED4_2(PpapiHostMsg_PPBVar_Call, - pp::proxy::SerializedVar /* object */, - pp::proxy::SerializedVar /* this_object */, - pp::proxy::SerializedVar /* method_name */, - std::vector<pp::proxy::SerializedVar> /* args */, - pp::proxy::SerializedVar /* out_exception */, - pp::proxy::SerializedVar /* result */) - IPC_SYNC_MESSAGE_ROUTED3_2(PpapiHostMsg_PPBVar_CallDeprecated, - pp::proxy::SerializedVar /* object */, - pp::proxy::SerializedVar /* method_name */, - std::vector<pp::proxy::SerializedVar> /* args */, - pp::proxy::SerializedVar /* out_exception */, - pp::proxy::SerializedVar /* result */) - IPC_SYNC_MESSAGE_ROUTED2_2(PpapiHostMsg_PPBVar_Construct, - pp::proxy::SerializedVar /* object */, - std::vector<pp::proxy::SerializedVar> /* args */, - pp::proxy::SerializedVar /* out_exception */, - pp::proxy::SerializedVar /* result */) - IPC_SYNC_MESSAGE_ROUTED2_2(PpapiHostMsg_PPBVar_IsInstanceOfDeprecated, - pp::proxy::SerializedVar /* var */, - int64 /* object_class */, - int64 /* object-data */, - bool /* result */) - IPC_SYNC_MESSAGE_ROUTED3_1(PpapiHostMsg_PPBVar_CreateObjectDeprecated, - PP_Module /* module */, - int64 /* object_class */, - int64 /* object_data */, - pp::proxy::SerializedVar /* result */) - -IPC_END_MESSAGES(PpapiHost) - diff --git a/ppapi/proxy/ppapi_param_traits.cc b/ppapi/proxy/ppapi_param_traits.cc deleted file mode 100644 index 4bfe23c..0000000 --- a/ppapi/proxy/ppapi_param_traits.cc +++ /dev/null @@ -1,190 +0,0 @@ -// Copyright (c) 2010 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/ppapi_param_traits.h" - -#include <string.h> // For memcpy - -#include "ppapi/proxy/serialized_var.h" - -namespace IPC { - -// static -void ParamTraits<PP_InputEvent>::Write(Message* m, const param_type& p) { - // PP_InputEvent is just POD so we can just memcpy it. - m->WriteData(reinterpret_cast<const char*>(&p), sizeof(PP_InputEvent)); -} - -// static -bool ParamTraits<PP_InputEvent>::Read(const Message* m, - void** iter, - param_type* r) { - const char* data; - int data_size; - if (!m->ReadData(iter, &data, &data_size)) - return false; - memcpy(r, data, sizeof(PP_InputEvent)); - return true; -} - -// static -void ParamTraits<PP_InputEvent>::Log(const param_type& p, std::string* l) { -} - -// PP_ObjectProperty ----------------------------------------------------------- - -// static -void ParamTraits<PP_ObjectProperty>::Write(Message* m, const param_type& p) { - // FIXME(brettw); -} - -// static -bool ParamTraits<PP_ObjectProperty>::Read(const Message* m, - void** iter, - param_type* r) { - // FIXME(brettw); - return true; -} - -// static -void ParamTraits<PP_ObjectProperty>::Log(const param_type& p, std::string* l) { -} - -// PP_Point -------------------------------------------------------------------- - -// static -void ParamTraits<PP_Point>::Write(Message* m, const param_type& p) { - m->WriteInt(p.x); - m->WriteInt(p.y); -} - -// static -bool ParamTraits<PP_Point>::Read(const Message* m, void** iter, param_type* r) { - return m->ReadInt(iter, &r->x) && !m->ReadInt(iter, &r->y); -} - -// static -void ParamTraits<PP_Point>::Log(const param_type& p, std::string* l) { -} - -// PP_Rect --------------------------------------------------------------------- - -// static -void ParamTraits<PP_Rect>::Write(Message* m, const param_type& p) { - m->WriteInt(p.point.x); - m->WriteInt(p.point.y); - m->WriteInt(p.size.width); - m->WriteInt(p.size.height); -} - -// static -bool ParamTraits<PP_Rect>::Read(const Message* m, - void** iter, - param_type* r) { - if (!m->ReadInt(iter, &r->point.x) || - !m->ReadInt(iter, &r->point.y) || - !m->ReadInt(iter, &r->size.width) || - !m->ReadInt(iter, &r->size.height)) - return false; - return true; -} - -// static -void ParamTraits<PP_Rect>::Log(const param_type& p, std::string* l) { -} - -// PP_Size --------------------------------------------------------------------- - -// static -void ParamTraits<PP_Size>::Write(Message* m, const param_type& p) { - m->WriteInt(p.width); - m->WriteInt(p.height); -} - -// static -bool ParamTraits<PP_Size>::Read(const Message* m, void** iter, param_type* r) { - return m->ReadInt(iter, &r->width) && m->ReadInt(iter, &r->height); -} - -// static -void ParamTraits<PP_Size>::Log(const param_type& p, std::string* l) { -} - -// SerializedVar --------------------------------------------------------------- - -// static -void ParamTraits<pp::proxy::SerializedVar>::Write(Message* m, - const param_type& p) { - p.WriteToMessage(m); -} - -// static -bool ParamTraits<pp::proxy::SerializedVar>::Read(const Message* m, - void** iter, - param_type* r) { - return r->ReadFromMessage(m, iter); -} - -// static -void ParamTraits<pp::proxy::SerializedVar>::Log(const param_type& p, - std::string* l) { -} - -// std::vector<SerializedVar> -------------------------------------------------- - -void ParamTraits< std::vector<pp::proxy::SerializedVar> >::Write( - Message* m, - const param_type& p) { - WriteParam(m, static_cast<int>(p.size())); - for (size_t i = 0; i < p.size(); i++) - WriteParam(m, p[i]); -} - -// static -bool ParamTraits< std::vector<pp::proxy::SerializedVar> >::Read( - const Message* m, - void** iter, - param_type* r) { - // This part is just a copy of the the default ParamTraits vector Read(). - int size; - // ReadLength() checks for < 0 itself. - if (!m->ReadLength(iter, &size)) - return false; - // Resizing beforehand is not safe, see BUG 1006367 for details. - if (INT_MAX / sizeof(pp::proxy::SerializedVar) <= static_cast<size_t>(size)) - return false; - - // The default vector deserializer does resize here and then we deserialize - // into those allocated slots. However, the implementation of vector (at - // least in GCC's implementation), creates a new empty object using the - // default constructor, and then sets the rest of the items to that empty - // one using the copy constructor. - // - // Since we allocate the inner class when you call the default constructor - // and transfer the inner class when you do operator=, the entire vector - // will end up referring to the same inner class. Deserializing into this - // will just end up overwriting the same item over and over, since all the - // SerializedVars will refer to the same thing. - // - // The solution is to make a new SerializedVar for each deserialized item, - // and then add it to the vector one at a time. Our copies are efficient so - // this is no big deal. - r->reserve(size); - for (int i = 0; i < size; i++) { - pp::proxy::SerializedVar var; - if (!ReadParam(m, iter, &var)) - return false; - r->push_back(var); - } - return true; -} - -// static -void ParamTraits< std::vector<pp::proxy::SerializedVar> >::Log( - const param_type& p, - std::string* l) { -} - - -} // namespace IPC diff --git a/ppapi/proxy/ppapi_param_traits.h b/ppapi/proxy/ppapi_param_traits.h deleted file mode 100644 index e8c17d8..0000000 --- a/ppapi/proxy/ppapi_param_traits.h +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PROXY_PPAPI_PARAM_TRAITS_H_ -#define PPAPI_PROXY_PPAPI_PARAM_TRAITS_H_ - -#include "ipc/ipc_message_utils.h" -#include "ppapi/c/pp_completion_callback.h" -#include "ppapi/c/pp_input_event.h" -#include "ppapi/c/pp_rect.h" -#include "ppapi/c/pp_var.h" -#include "ppapi/proxy/serialized_var.h" // TODO(brettw) eraseme. - -class PP_ObjectProperty; - -namespace pp { -namespace proxy { -class SerializedVar; -} -} - -namespace IPC { - -template<> -struct ParamTraits<PP_InputEvent> { - typedef PP_InputEvent param_type; - static void Write(Message* m, const param_type& p); - static bool Read(const Message* m, void** iter, param_type* r); - static void Log(const param_type& p, std::string* l); -}; - -template<> -struct ParamTraits<PP_ObjectProperty> { - typedef PP_ObjectProperty param_type; - static void Write(Message* m, const param_type& p); - static bool Read(const Message* m, void** iter, param_type* r); - static void Log(const param_type& p, std::string* l); -}; - -template<> -struct ParamTraits<PP_Point> { - typedef PP_Point param_type; - static void Write(Message* m, const param_type& p); - static bool Read(const Message* m, void** iter, param_type* r); - static void Log(const param_type& p, std::string* l); -}; - -template<> -struct ParamTraits<PP_Rect> { - typedef PP_Rect param_type; - static void Write(Message* m, const param_type& p); - static bool Read(const Message* m, void** iter, param_type* r); - static void Log(const param_type& p, std::string* l); -}; - -template<> -struct ParamTraits<PP_Size> { - typedef PP_Size param_type; - static void Write(Message* m, const param_type& p); - static bool Read(const Message* m, void** iter, param_type* r); - static void Log(const param_type& p, std::string* l); -}; - -template<> -struct ParamTraits<pp::proxy::SerializedVar> { - typedef pp::proxy::SerializedVar param_type; - static void Write(Message* m, const param_type& p); - static bool Read(const Message* m, void** iter, param_type* r); - static void Log(const param_type& p, std::string* l); -}; - -// We need a special implementation of sending a vector of SerializedVars -// because the behavior of vector doesn't always play nicely with our -// weird SerializedVar implementation (see "Read" in the .cc file). -template<> -struct ParamTraits< std::vector<pp::proxy::SerializedVar> > { - typedef std::vector<pp::proxy::SerializedVar> param_type; - static void Write(Message* m, const param_type& p); - static bool Read(const Message* m, void** iter, param_type* r); - static void Log(const param_type& p, std::string* l); -}; - -} // namespace IPC - -#endif // PPAPI_PROXY_PPAPI_PARAM_TRAITS_H_ diff --git a/ppapi/proxy/ppb_core_proxy.cc b/ppapi/proxy/ppb_core_proxy.cc deleted file mode 100644 index a956f7a..0000000 --- a/ppapi/proxy/ppb_core_proxy.cc +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright (c) 2010 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_core_proxy.h" - -#include <stdlib.h> // For malloc - -#include "base/logging.h" -#include "ppapi/c/pp_completion_callback.h" -#include "ppapi/c/pp_resource.h" -#include "ppapi/c/ppb_core.h" -#include "ppapi/proxy/plugin_dispatcher.h" -#include "ppapi/proxy/ppapi_messages.h" - -namespace pp { -namespace proxy { - -namespace { - -void AddRefResource(PP_Resource resource) { - PluginDispatcher::Get()->plugin_resource_tracker()->AddRefResource(resource); -} - -void ReleaseResource(PP_Resource resource) { - PluginDispatcher::Get()->plugin_resource_tracker()->ReleaseResource(resource); -} - -void* MemAlloc(size_t num_bytes) { - return malloc(num_bytes); -} - -void MemFree(void* ptr) { - free(ptr); -} - -double GetTime() { - double result; - PluginDispatcher::Get()->Send(new PpapiHostMsg_PPBCore_GetTime( - INTERFACE_ID_PPB_CORE, &result)); - return result; -} - -double GetTimeTicks() { - double result; - PluginDispatcher::Get()->Send(new PpapiHostMsg_PPBCore_GetTimeTicks( - INTERFACE_ID_PPB_CORE, &result)); - return result; -} - -void CallOnMainThread(int delay_in_msec, - PP_CompletionCallback callback, - int32_t result) { - Dispatcher* dispatcher = PluginDispatcher::Get(); - dispatcher->Send(new PpapiHostMsg_PPBCore_CallOnMainThread( - INTERFACE_ID_PPB_CORE, delay_in_msec, - dispatcher->callback_tracker().SendCallback(callback), - result)); -} - -bool IsMainThread() { - NOTIMPLEMENTED(); - return true; -} - -const PPB_Core core_interface = { - &AddRefResource, - &ReleaseResource, - &MemAlloc, - &MemFree, - &GetTime, - &GetTimeTicks, - &CallOnMainThread, - &IsMainThread -}; - -} // namespace - -PPB_Core_Proxy::PPB_Core_Proxy(Dispatcher* dispatcher, - const void* target_interface) - : InterfaceProxy(dispatcher, target_interface) { -} - -PPB_Core_Proxy::~PPB_Core_Proxy() { -} - -const void* PPB_Core_Proxy::GetSourceInterface() const { - return &core_interface; -} - -InterfaceID PPB_Core_Proxy::GetInterfaceId() const { - return INTERFACE_ID_PPB_CORE; -} - -void PPB_Core_Proxy::OnMessageReceived(const IPC::Message& msg) { - IPC_BEGIN_MESSAGE_MAP(PPB_Core_Proxy, msg) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBCore_AddRefResource, OnMsgAddRefResource) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBCore_ReleaseResource, OnMsgReleaseResource) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBCore_GetTime, OnMsgGetTime) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBCore_CallOnMainThread, - OnMsgCallOnMainThread) - IPC_END_MESSAGE_MAP() - // FIXME(brettw) handle bad messages! -} - -void PPB_Core_Proxy::OnMsgAddRefResource(PP_Resource resource) { - ppb_core_target()->AddRefResource(resource); -} - -void PPB_Core_Proxy::OnMsgReleaseResource(PP_Resource resource) { - ppb_core_target()->ReleaseResource(resource); -} - -void PPB_Core_Proxy::OnMsgGetTime(double* result) { - *result = 0.0; // FIXME(brettw); -} - -void PPB_Core_Proxy::OnMsgCallOnMainThread(int delay_in_msec, - uint32_t serialized_callback, - int32_t result) { - // TODO(brettw) this doesn't need to go to the other process, we should be - // able to post this to our own message loop and get better performance. - ppb_core_target()->CallOnMainThread(delay_in_msec, - ReceiveCallback(serialized_callback), - result); -} - -} // namespace proxy -} // namespace pp diff --git a/ppapi/proxy/ppb_core_proxy.h b/ppapi/proxy/ppb_core_proxy.h deleted file mode 100644 index e7dfa90..0000000 --- a/ppapi/proxy/ppb_core_proxy.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PPB_CORE_PROXY_H_ -#define PPAPI_PPB_CORE_PROXY_H_ - -#include "ppapi/c/pp_completion_callback.h" -#include "ppapi/c/pp_resource.h" -#include "ppapi/c/pp_var.h" -#include "ppapi/proxy/interface_proxy.h" - -struct PPB_Core; - -namespace pp { -namespace proxy { - -class PPB_Core_Proxy : public InterfaceProxy { - public: - PPB_Core_Proxy(Dispatcher* dispatcher, const void* target_interface); - virtual ~PPB_Core_Proxy(); - - const PPB_Core* ppb_core_target() const { - return reinterpret_cast<const PPB_Core*>(target_interface()); - } - - // InterfaceProxy implementation. - virtual const void* GetSourceInterface() const; - virtual InterfaceID GetInterfaceId() const; - virtual void OnMessageReceived(const IPC::Message& msg); - - private: - // Message handlers. - void OnMsgAddRefResource(PP_Resource resource); - void OnMsgReleaseResource(PP_Resource resource); - void OnMsgGetTime(double* result); - void OnMsgCallOnMainThread(int delay_in_msec, - uint32_t serialized_callback, - int32_t result); -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PPB_CORE_PROXY_H_ diff --git a/ppapi/proxy/ppb_graphics_2d_proxy.cc b/ppapi/proxy/ppb_graphics_2d_proxy.cc deleted file mode 100644 index ec0fb09..0000000 --- a/ppapi/proxy/ppb_graphics_2d_proxy.cc +++ /dev/null @@ -1,202 +0,0 @@ -// Copyright (c) 2010 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_graphics_2d_proxy.h" - -#include <string.h> // For memcpy - -#include "base/logging.h" -#include "ppapi/c/pp_completion_callback.h" -#include "ppapi/c/pp_errors.h" -#include "ppapi/c/pp_resource.h" -#include "ppapi/c/ppb_graphics_2d.h" -#include "ppapi/proxy/plugin_dispatcher.h" -#include "ppapi/proxy/plugin_resource.h" -#include "ppapi/proxy/ppapi_messages.h" - -namespace pp { -namespace proxy { - -class Graphics2D : public PluginResource { - public: - Graphics2D(const PP_Size& size, bool is_always_opaque) - : size_(size), is_always_opaque_(is_always_opaque) { - } - - // Resource overrides. - virtual Graphics2D* AsGraphics2D() { return this; } - - const PP_Size& size() const { return size_; } - bool is_always_opaque() const { return is_always_opaque_; } - - private: - PP_Size size_; - bool is_always_opaque_; - - DISALLOW_COPY_AND_ASSIGN(Graphics2D); -}; - -namespace { - -PP_Resource Create(PP_Module module_id, - const PP_Size* size, - bool is_always_opaque) { - PluginDispatcher* dispatcher = PluginDispatcher::Get(); - PP_Resource result = 0; - dispatcher->Send(new PpapiHostMsg_PPBGraphics2D_Create( - INTERFACE_ID_PPB_GRAPHICS_2D, module_id, *size, is_always_opaque, - &result)); - if (result) { - linked_ptr<Graphics2D> graphics_2d(new Graphics2D(*size, is_always_opaque)); - dispatcher->plugin_resource_tracker()->AddResource(result, graphics_2d); - } - return result; -} - -bool IsGraphics2D(PP_Resource resource) { - Graphics2D* object = PluginResource::GetAs<Graphics2D>(resource); - return !!object; -} - -bool Describe(PP_Resource graphics_2d, - PP_Size* size, - bool* is_always_opaque) { - Graphics2D* object = PluginResource::GetAs<Graphics2D>(graphics_2d); - if (!object) { - size->width = 0; - size->height = 0; - *is_always_opaque = false; - return false; - } - - *size = object->size(); - *is_always_opaque = object->is_always_opaque(); - return true; -} - -void PaintImageData(PP_Resource graphics_2d, - PP_Resource image_data, - const PP_Point* top_left, - const PP_Rect* src_rect) { - PP_Rect dummy; - memset(&dummy, 0, sizeof(PP_Rect)); - PluginDispatcher::Get()->Send(new PpapiHostMsg_PPBGraphics2D_PaintImageData( - INTERFACE_ID_PPB_GRAPHICS_2D, graphics_2d, image_data, *top_left, - !!src_rect, src_rect ? *src_rect : dummy)); -} - -void Scroll(PP_Resource graphics_2d, - const PP_Rect* clip_rect, - const PP_Point* amount) { - PP_Rect dummy; - memset(&dummy, 0, sizeof(PP_Rect)); - PluginDispatcher::Get()->Send(new PpapiHostMsg_PPBGraphics2D_Scroll( - INTERFACE_ID_PPB_GRAPHICS_2D, graphics_2d, !!clip_rect, - clip_rect ? *clip_rect : dummy, *amount)); -} - -void ReplaceContents(PP_Resource graphics_2d, PP_Resource image_data) { - PluginDispatcher::Get()->Send(new PpapiHostMsg_PPBGraphics2D_ReplaceContents( - INTERFACE_ID_PPB_GRAPHICS_2D, graphics_2d, image_data)); -} - -int32_t Flush(PP_Resource graphics_2d, - PP_CompletionCallback callback) { - PluginDispatcher* dispatcher = PluginDispatcher::Get(); - int32_t result = PP_ERROR_FAILED; - dispatcher->Send(new PpapiHostMsg_PPBGraphics2D_Flush( - INTERFACE_ID_PPB_GRAPHICS_2D, graphics_2d, - dispatcher->callback_tracker().SendCallback(callback), - &result)); - return result; -} - -const PPB_Graphics2D ppb_graphics_2d = { - &Create, - &IsGraphics2D, - &Describe, - &PaintImageData, - &Scroll, - &ReplaceContents, - &Flush -}; - -} // namespace - -PPB_Graphics2D_Proxy::PPB_Graphics2D_Proxy(Dispatcher* dispatcher, - const void* target_interface) - : InterfaceProxy(dispatcher, target_interface) { -} - -PPB_Graphics2D_Proxy::~PPB_Graphics2D_Proxy() { -} - -const void* PPB_Graphics2D_Proxy::GetSourceInterface() const { - return &ppb_graphics_2d; -} - -InterfaceID PPB_Graphics2D_Proxy::GetInterfaceId() const { - return INTERFACE_ID_PPB_GRAPHICS_2D; -} - -void PPB_Graphics2D_Proxy::OnMessageReceived(const IPC::Message& msg) { - IPC_BEGIN_MESSAGE_MAP(PPB_Graphics2D_Proxy, msg) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBGraphics2D_Create, - OnMsgCreate) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBGraphics2D_PaintImageData, - OnMsgPaintImageData) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBGraphics2D_Scroll, - OnMsgScroll) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBGraphics2D_ReplaceContents, - OnMsgReplaceContents) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBGraphics2D_Flush, - OnMsgFlush) - IPC_END_MESSAGE_MAP() - // FIXME(brettw) handle bad messages! -} - -void PPB_Graphics2D_Proxy::OnMsgCreate(PP_Module module, - const PP_Size& size, - bool is_always_opaque, - PP_Resource* result) { - *result = ppb_graphics_2d_target()->Create( - module, &size, is_always_opaque); -} - -void PPB_Graphics2D_Proxy::OnMsgPaintImageData(PP_Resource graphics_2d, - PP_Resource image_data, - const PP_Point& top_left, - bool src_rect_specified, - const PP_Rect& src_rect) { - ppb_graphics_2d_target()->PaintImageData( - graphics_2d, image_data, &top_left, - src_rect_specified ? &src_rect : NULL); -} - -void PPB_Graphics2D_Proxy::OnMsgScroll(PP_Resource graphics_2d, - bool clip_specified, - const PP_Rect& clip, - const PP_Point& amount) { - ppb_graphics_2d_target()->Scroll( - graphics_2d, - clip_specified ? &clip : NULL, &amount); -} - -void PPB_Graphics2D_Proxy::OnMsgReplaceContents(PP_Resource graphics_2d, - PP_Resource image_data) { - ppb_graphics_2d_target()->ReplaceContents(graphics_2d, image_data); -} - -void PPB_Graphics2D_Proxy::OnMsgFlush(PP_Resource graphics_2d, - uint32_t serialized_callback, - int32_t* result) { - // TODO(brettw) this should be a non-sync function. Ideally it would call - // the callback with a failure code from here if you weren't allowed to - // call Flush there. - *result = ppb_graphics_2d_target()->Flush( - graphics_2d, ReceiveCallback(serialized_callback)); -} - -} // namespace proxy -} // namespace pp diff --git a/ppapi/proxy/ppb_graphics_2d_proxy.h b/ppapi/proxy/ppb_graphics_2d_proxy.h deleted file mode 100644 index 80c698134..0000000 --- a/ppapi/proxy/ppb_graphics_2d_proxy.h +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PPB_GRAPHICS_2D_PROXY_H_ -#define PPAPI_PPB_GRAPHICS_2D_PROXY_H_ - -#include "ppapi/c/pp_completion_callback.h" -#include "ppapi/c/pp_module.h" -#include "ppapi/c/pp_module.h" -#include "ppapi/c/pp_resource.h" -#include "ppapi/c/pp_size.h" -#include "ppapi/c/pp_var.h" -#include "ppapi/proxy/interface_proxy.h" - -struct PPB_Graphics2D; -struct PP_Point; -struct PP_Rect; - -namespace pp { -namespace proxy { - -class PPB_Graphics2D_Proxy : public InterfaceProxy { - public: - PPB_Graphics2D_Proxy(Dispatcher* dispatcher, const void* target_interface); - virtual ~PPB_Graphics2D_Proxy(); - - const PPB_Graphics2D* ppb_graphics_2d_target() const { - return reinterpret_cast<const PPB_Graphics2D*>(target_interface()); - } - - // InterfaceProxy implementation. - virtual const void* GetSourceInterface() const; - virtual InterfaceID GetInterfaceId() const; - virtual void OnMessageReceived(const IPC::Message& msg); - - private: - // Message handlers. - void OnMsgCreate(PP_Module module, - const PP_Size& size, - bool is_always_opaque, - PP_Resource* result); - void OnMsgPaintImageData(PP_Resource graphics_2d, - PP_Resource image_data, - const PP_Point& top_left, - bool src_rect_specified, - const PP_Rect& src_rect); - void OnMsgScroll(PP_Resource graphics_2d, - bool clip_specified, - const PP_Rect& clip, - const PP_Point& amount); - void OnMsgReplaceContents(PP_Resource graphics_2d, - PP_Resource image_data); - void OnMsgFlush(PP_Resource graphics_2d, - uint32_t serialized_callback, - int32_t* result); -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PPB_GRAPHICS_2D_PROXY_H_ diff --git a/ppapi/proxy/ppb_image_data_proxy.cc b/ppapi/proxy/ppb_image_data_proxy.cc deleted file mode 100644 index 19d0932..0000000 --- a/ppapi/proxy/ppb_image_data_proxy.cc +++ /dev/null @@ -1,234 +0,0 @@ -// Copyright (c) 2010 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_image_data_proxy.h" - -#include <string.h> // For memcpy - -#include <vector> - -#include "base/logging.h" -#include "build/build_config.h" -#include "ppapi/c/pp_completion_callback.h" -#include "ppapi/c/pp_resource.h" -#include "ppapi/c/ppb_image_data.h" -#include "ppapi/c/trusted/ppb_image_data_trusted.h" -#include "ppapi/proxy/plugin_dispatcher.h" -#include "ppapi/proxy/plugin_resource.h" -#include "ppapi/proxy/ppapi_messages.h" - -#if defined(OS_LINUX) -#include <sys/shm.h> -#endif - -namespace pp { -namespace proxy { - -class ImageData : public PluginResource { - public: - ImageData(const PP_ImageDataDesc& desc, uint64_t memory_handle); - virtual ~ImageData(); - - // Resource overrides. - virtual ImageData* AsImageData() { return this; } - - void* Map(); - void Unmap(); - - const PP_ImageDataDesc& desc() const { return desc_; } - - private: - PP_ImageDataDesc desc_; - uint64_t memory_handle_; - - void* mapped_data_; - - DISALLOW_COPY_AND_ASSIGN(ImageData); -}; - -ImageData::ImageData(const PP_ImageDataDesc& desc, - uint64_t memory_handle) - : desc_(desc), - memory_handle_(memory_handle), - mapped_data_(NULL) { -} - -ImageData::~ImageData() { - Unmap(); -} - -void* ImageData::Map() { -#if defined(OS_LINUX) - // On linux, the memory handle is a SysV shared memory segment. - int shmkey = static_cast<int>(memory_handle_); - void* address = shmat(shmkey, NULL, 0); - // Mark for deletion in case we crash so the kernel will clean it up. - shmctl(shmkey, IPC_RMID, 0); - if (address == (void*)-1) - return NULL; - mapped_data_ = address; - return address; -#else - #error write this -#endif -} - -void ImageData::Unmap() { -#if defined(OS_LINUX) - if (mapped_data_) - shmdt(mapped_data_); -#else - #error write this -#endif - mapped_data_ = NULL; -} - -namespace { - -PP_ImageDataFormat GetNativeImageDataFormat() { - int32 format = 0; - PluginDispatcher::Get()->Send( - new PpapiHostMsg_PPBImageData_GetNativeImageDataFormat( - INTERFACE_ID_PPB_IMAGE_DATA, &format)); - return static_cast<PP_ImageDataFormat>(format); -} - -bool IsImageDataFormatSupported(PP_ImageDataFormat format) { - bool supported = false; - PluginDispatcher::Get()->Send( - new PpapiHostMsg_PPBImageData_IsImageDataFormatSupported( - INTERFACE_ID_PPB_IMAGE_DATA, static_cast<int32_t>(format), - &supported)); - return supported; -} - -PP_Resource Create(PP_Module module_id, - PP_ImageDataFormat format, - const PP_Size* size, - bool init_to_zero) { - PP_Resource result = 0; - std::string image_data_desc; - uint64_t shm_handle = -1; - PluginDispatcher::Get()->Send( - new PpapiHostMsg_PPBImageData_Create( - INTERFACE_ID_PPB_IMAGE_DATA, module_id, format, *size, init_to_zero, - &result, &image_data_desc, &shm_handle)); - - if (result && image_data_desc.size() == sizeof(PP_ImageDataDesc)) { - // We serialize the PP_ImageDataDesc just by copying to a string. - PP_ImageDataDesc desc; - memcpy(&desc, image_data_desc.data(), sizeof(PP_ImageDataDesc)); - - linked_ptr<ImageData> object( - new ImageData(desc, shm_handle)); - PluginDispatcher::Get()->plugin_resource_tracker()->AddResource( - result, object); - } - return result; -} - -bool IsImageData(PP_Resource resource) { - ImageData* object = PluginResource::GetAs<ImageData>(resource); - return !!object; -} - -bool Describe(PP_Resource resource, PP_ImageDataDesc* desc) { - ImageData* object = PluginResource::GetAs<ImageData>(resource); - if (!object) - return false; - memcpy(desc, &object->desc(), sizeof(PP_ImageDataDesc)); - return true; -} - -void* Map(PP_Resource resource) { - ImageData* object = PluginResource::GetAs<ImageData>(resource); - if (!object) - return NULL; - return object->Map(); -} - -void Unmap(PP_Resource resource) { - ImageData* object = PluginResource::GetAs<ImageData>(resource); - if (object) - object->Unmap(); -} - -const PPB_ImageData ppb_imagedata = { - &GetNativeImageDataFormat, - &IsImageDataFormatSupported, - &Create, - &IsImageData, - &Describe, - &Map, - &Unmap, -}; - -} // namespace - -PPB_ImageData_Proxy::PPB_ImageData_Proxy(Dispatcher* dispatcher, - const void* target_interface) - : InterfaceProxy(dispatcher, target_interface) { -} - -PPB_ImageData_Proxy::~PPB_ImageData_Proxy() { -} - -const void* PPB_ImageData_Proxy::GetSourceInterface() const { - return &ppb_imagedata; -} - -InterfaceID PPB_ImageData_Proxy::GetInterfaceId() const { - return INTERFACE_ID_PPB_IMAGE_DATA; -} - -void PPB_ImageData_Proxy::OnMessageReceived(const IPC::Message& msg) { - IPC_BEGIN_MESSAGE_MAP(PPB_ImageData_Proxy, msg) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBImageData_GetNativeImageDataFormat, - OnMsgGetNativeImageDataFormat) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBImageData_IsImageDataFormatSupported, - OnMsgIsImageDataFormatSupported) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBImageData_Create, OnMsgCreate) - IPC_END_MESSAGE_MAP() - // FIXME(brettw) handle bad messages! -} - -void PPB_ImageData_Proxy::OnMsgGetNativeImageDataFormat(int32* result) { - *result = ppb_image_data_target()->GetNativeImageDataFormat(); -} - -void PPB_ImageData_Proxy::OnMsgIsImageDataFormatSupported(int32 format, - bool* result) { - *result = ppb_image_data_target()->IsImageDataFormatSupported( - static_cast<PP_ImageDataFormat>(format)); -} - -void PPB_ImageData_Proxy::OnMsgCreate(PP_Module module, - int32_t format, - const PP_Size& size, - bool init_to_zero, - PP_Resource* result, - std::string* image_data_desc, - uint64_t* result_shm_handle) { - *result = ppb_image_data_target()->Create( - module, static_cast<PP_ImageDataFormat>(format), &size, init_to_zero); - *result_shm_handle = 0; - if (*result) { - // The ImageDesc is just serialized as a string. - PP_ImageDataDesc desc; - if (ppb_image_data_target()->Describe(*result, &desc)) { - image_data_desc->resize(sizeof(PP_ImageDataDesc)); - memcpy(&(*image_data_desc)[0], &desc, sizeof(PP_ImageDataDesc)); - } - - // Get the shared memory handle. - const PPB_ImageDataTrusted* trusted = - reinterpret_cast<const PPB_ImageDataTrusted*>( - dispatcher()->GetLocalInterface(PPB_IMAGEDATA_TRUSTED_INTERFACE)); - if (trusted) - *result_shm_handle = trusted->GetNativeMemoryHandle(*result); - } -} - -} // namespace proxy -} // namespace pp diff --git a/ppapi/proxy/ppb_image_data_proxy.h b/ppapi/proxy/ppb_image_data_proxy.h deleted file mode 100644 index 39e8ad6..0000000 --- a/ppapi/proxy/ppb_image_data_proxy.h +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PPB_IMAGE_DATA_PROXY_H_ -#define PPAPI_PPB_IMAGE_DATA_PROXY_H_ - -#include "ppapi/c/pp_completion_callback.h" -#include "ppapi/c/pp_module.h" -#include "ppapi/c/pp_resource.h" -#include "ppapi/c/pp_size.h" -#include "ppapi/c/pp_var.h" -#include "ppapi/proxy/interface_proxy.h" - -struct PPB_ImageData; - -namespace pp { -namespace proxy { - -class PPB_ImageData_Proxy : public InterfaceProxy { - public: - PPB_ImageData_Proxy(Dispatcher* dispatcher, const void* target_interface); - virtual ~PPB_ImageData_Proxy(); - - const PPB_ImageData* ppb_image_data_target() const { - return reinterpret_cast<const PPB_ImageData*>(target_interface()); - } - - // InterfaceProxy implementation. - virtual const void* GetSourceInterface() const; - virtual InterfaceID GetInterfaceId() const; - virtual void OnMessageReceived(const IPC::Message& msg); - - private: - // Message handlers. - void OnMsgGetNativeImageDataFormat(int32* result); - void OnMsgIsImageDataFormatSupported(int32 format, bool* result); - void OnMsgCreate(PP_Module module, - int32_t format, - const PP_Size& size, - bool init_to_zero, - PP_Resource* result, - std::string* image_data_desc, - uint64_t* result_shm_handle); -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PPB_IMAGE_DATA_PROXY_H_ diff --git a/ppapi/proxy/ppb_instance_proxy.cc b/ppapi/proxy/ppb_instance_proxy.cc deleted file mode 100644 index c81562a..0000000 --- a/ppapi/proxy/ppb_instance_proxy.cc +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright (c) 2010 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_instance_proxy.h" - -#include "ppapi/c/pp_var.h" -#include "ppapi/c/ppb_instance.h" -#include "ppapi/proxy/plugin_dispatcher.h" -#include "ppapi/proxy/ppapi_message_helpers.h" -#include "ppapi/proxy/ppapi_messages.h" -#include "ppapi/proxy/serialized_var.h" - -namespace pp { -namespace proxy { - -namespace { - -PP_Var GetWindowObject(PP_Instance instance) { - Dispatcher* dispatcher = PluginDispatcher::Get(); - ReceiveSerializedVarReturnValue result; - dispatcher->Send(new PpapiHostMsg_PPBInstance_GetWindowObject( - INTERFACE_ID_PPB_INSTANCE, instance, &result)); - return result.Return(dispatcher); -} - -PP_Var GetOwnerElementObject(PP_Instance instance) { - Dispatcher* dispatcher = PluginDispatcher::Get(); - ReceiveSerializedVarReturnValue result; - dispatcher->Send(new PpapiHostMsg_PPBInstance_GetOwnerElementObject( - INTERFACE_ID_PPB_INSTANCE, instance, &result)); - return result.Return(dispatcher); -} - -bool BindGraphics(PP_Instance instance, PP_Resource device) { - bool result; - PluginDispatcher::Get()->Send(new PpapiHostMsg_PPBInstance_BindGraphics( - INTERFACE_ID_PPB_INSTANCE, instance, device, &result)); - return result; -} - -bool IsFullFrame(PP_Instance instance) { - bool result; - PluginDispatcher::Get()->Send(new PpapiHostMsg_PPBInstance_IsFullFrame( - INTERFACE_ID_PPB_INSTANCE, instance, &result)); - return result; -} - -PP_Var ExecuteScript(PP_Instance instance, PP_Var script, PP_Var* exception) { - Dispatcher* dispatcher = PluginDispatcher::Get(); - ReceiveSerializedException se(dispatcher, exception); - if (se.IsThrown()) - return PP_MakeUndefined(); - - ReceiveSerializedVarReturnValue result; - dispatcher->Send(new PpapiHostMsg_PPBInstance_ExecuteScript( - INTERFACE_ID_PPB_INSTANCE, instance, - SerializedVarSendInput(dispatcher, script), &se, &result)); - return result.Return(dispatcher); -} - -const PPB_Instance instance_interface = { - &GetWindowObject, - &GetOwnerElementObject, - &BindGraphics, - &IsFullFrame, - &ExecuteScript -}; - -} // namespace - -PPB_Instance_Proxy::PPB_Instance_Proxy(Dispatcher* dispatcher, - const void* target_interface) - : InterfaceProxy(dispatcher, target_interface) { -} - -PPB_Instance_Proxy::~PPB_Instance_Proxy() { -} - -const void* PPB_Instance_Proxy::GetSourceInterface() const { - return &instance_interface; -} - -InterfaceID PPB_Instance_Proxy::GetInterfaceId() const { - return INTERFACE_ID_PPB_INSTANCE; -} - -void PPB_Instance_Proxy::OnMessageReceived(const IPC::Message& msg) { - IPC_BEGIN_MESSAGE_MAP(PPB_Instance_Proxy, msg) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_GetWindowObject, - OnMsgGetWindowObject) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_GetOwnerElementObject, - OnMsgGetOwnerElementObject) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_BindGraphics, - OnMsgBindGraphics) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_IsFullFrame, - OnMsgIsFullFrame) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_ExecuteScript, - OnMsgExecuteScript) - IPC_END_MESSAGE_MAP() -} - -void PPB_Instance_Proxy::OnMsgGetWindowObject( - PP_Instance instance, - SerializedVarReturnValue result) { - result.Return(dispatcher(), - ppb_instance_target()->GetWindowObject(instance)); -} - -void PPB_Instance_Proxy::OnMsgGetOwnerElementObject( - PP_Instance instance, - SerializedVarReturnValue result) { - result.Return(dispatcher(), - ppb_instance_target()->GetOwnerElementObject(instance)); -} - -void PPB_Instance_Proxy::OnMsgBindGraphics(PP_Instance instance, - PP_Resource device, - bool* result) { - *result = ppb_instance_target()->BindGraphics(instance, device); -} - -void PPB_Instance_Proxy::OnMsgIsFullFrame(PP_Instance instance, bool* result) { - *result = ppb_instance_target()->IsFullFrame(instance); -} - -void PPB_Instance_Proxy::OnMsgExecuteScript( - PP_Instance instance, - SerializedVarReceiveInput script, - SerializedVarOutParam out_exception, - SerializedVarReturnValue result) { - result.Return(dispatcher(), ppb_instance_target()->ExecuteScript( - instance, - script.Get(dispatcher()), - out_exception.OutParam(dispatcher()))); -} - -} // namespace proxy -} // namespace pp diff --git a/ppapi/proxy/ppb_instance_proxy.h b/ppapi/proxy/ppb_instance_proxy.h deleted file mode 100644 index 64b2b2d..0000000 --- a/ppapi/proxy/ppb_instance_proxy.h +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PROXY_PPB_INSTANCE_PROXY_H_ -#define PPAPI_PROXY_PPB_INSTANCE_PROXY_H_ - -#include "ppapi/c/pp_instance.h" -#include "ppapi/c/pp_resource.h" -#include "ppapi/c/pp_var.h" -#include "ppapi/proxy/interface_proxy.h" - -struct PPB_Instance; - -namespace pp { -namespace proxy { - -class SerializedVarReceiveInput; -class SerializedVarOutParam; -class SerializedVarReturnValue; - -class PPB_Instance_Proxy : public InterfaceProxy { - public: - PPB_Instance_Proxy(Dispatcher* dispatcher, const void* target_interface); - virtual ~PPB_Instance_Proxy(); - - const PPB_Instance* ppb_instance_target() const { - return reinterpret_cast<const PPB_Instance*>(target_interface()); - } - - // InterfaceProxy implementation. - virtual const void* GetSourceInterface() const; - virtual InterfaceID GetInterfaceId() const; - virtual void OnMessageReceived(const IPC::Message& msg); - - private: - // Message handlers. - void OnMsgGetWindowObject(PP_Instance instance, - SerializedVarReturnValue result); - void OnMsgGetOwnerElementObject(PP_Instance instance, - SerializedVarReturnValue result); - void OnMsgBindGraphics(PP_Instance instance, - PP_Resource device, - bool* result); - void OnMsgIsFullFrame(PP_Instance instance, bool* result); - void OnMsgExecuteScript(PP_Instance instance, - SerializedVarReceiveInput script, - SerializedVarOutParam out_exception, - SerializedVarReturnValue result); -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PROXY_PPB_INSTANCE_PROXY_H_ diff --git a/ppapi/proxy/ppb_url_loader_proxy.cc b/ppapi/proxy/ppb_url_loader_proxy.cc deleted file mode 100644 index 0ff46e4..0000000 --- a/ppapi/proxy/ppb_url_loader_proxy.cc +++ /dev/null @@ -1,301 +0,0 @@ -// Copyright (c) 2010 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_url_loader_proxy.h" - -#include <vector> - -#include "base/logging.h" -#include "build/build_config.h" -#include "ppapi/c/pp_completion_callback.h" -#include "ppapi/c/pp_errors.h" -#include "ppapi/c/pp_resource.h" -#include "ppapi/c/dev/ppb_url_loader_dev.h" -#include "ppapi/proxy/plugin_dispatcher.h" -#include "ppapi/proxy/plugin_resource.h" -#include "ppapi/proxy/ppapi_messages.h" - -#if defined(OS_LINUX) -#include <sys/shm.h> -#endif - -namespace pp { -namespace proxy { - -class URLLoader : public PluginResource { - public: - URLLoader(); - virtual ~URLLoader(); - - // Resource overrides. - virtual URLLoader* AsURLLoader() { return this; } - - int64_t bytes_sent_; - int64_t total_bytes_to_be_sent_; - int64_t bytes_received_; - int64_t total_bytes_to_be_received_; - - private: - - DISALLOW_COPY_AND_ASSIGN(URLLoader); -}; - -URLLoader::URLLoader() - : bytes_sent_(0), - total_bytes_to_be_sent_(0), - bytes_received_(0), - total_bytes_to_be_received_(0) { -} - -URLLoader::~URLLoader() { -} - -namespace { - -PP_Resource Create(PP_Instance instance_id) { - PluginDispatcher* dispatcher = PluginDispatcher::Get(); - PP_Resource result = 0; - dispatcher->Send(new PpapiHostMsg_PPBURLLoader_Create( - INTERFACE_ID_PPB_URL_LOADER, instance_id, &result)); - if (result) { - linked_ptr<URLLoader> object(new URLLoader); - dispatcher->plugin_resource_tracker()->AddResource(result, object); - } - return result; -} - -bool IsURLLoader(PP_Resource resource) { - URLLoader* object = PluginResource::GetAs<URLLoader>(resource); - return !!object; -} - -int32_t Open(PP_Resource loader_id, - PP_Resource request_id, - PP_CompletionCallback callback) { - Dispatcher* dispatcher = PluginDispatcher::Get(); - dispatcher->Send(new PpapiHostMsg_PPBURLLoader_Open( - INTERFACE_ID_PPB_URL_LOADER, loader_id, request_id, - dispatcher->callback_tracker().SendCallback(callback))); - return PP_ERROR_WOULDBLOCK; -} - -int32_t FollowRedirect(PP_Resource loader_id, - PP_CompletionCallback callback) { - Dispatcher* dispatcher = PluginDispatcher::Get(); - dispatcher->Send(new PpapiHostMsg_PPBURLLoader_FollowRedirect( - INTERFACE_ID_PPB_URL_LOADER, loader_id, - dispatcher->callback_tracker().SendCallback(callback))); - return PP_ERROR_WOULDBLOCK; -} - -bool GetUploadProgress(PP_Resource loader_id, - int64_t* bytes_sent, - int64_t* total_bytes_to_be_sent) { - // TODO(brettw) implement this as a non-blocking call where we get notified - // of updates and just send the local copy. - bool result = false; - PluginDispatcher::Get()->Send( - new PpapiHostMsg_PPBURLLoader_GetUploadProgress( - INTERFACE_ID_PPB_URL_LOADER, loader_id, bytes_sent, - total_bytes_to_be_sent, &result)); - return result; -} - -bool GetDownloadProgress(PP_Resource loader_id, - int64_t* bytes_received, - int64_t* total_bytes_to_be_received) { - // TODO(brettw) implement this as a non-blocking call where we get notified - // of updates and just send the local copy. - bool result = false; - PluginDispatcher::Get()->Send( - new PpapiHostMsg_PPBURLLoader_GetDownloadProgress( - INTERFACE_ID_PPB_URL_LOADER, loader_id, bytes_received, - total_bytes_to_be_received, &result)); - return result; -} - -PP_Resource GetResponseInfo(PP_Resource loader_id) { - // TODO(brettw) this needs to have proper refcounting handling for the - // result! - /* - PP_Resource result; - Dispatcher::Get()->Send(new PpapiHostMsg_PPBURLLoader_GetResponseInfo( - INTERFACE_ID_PPB_URL_LOADER, loader_id, &result)); - */ - return 0; -} - -int32_t ReadResponseBody(PP_Resource loader_id, - char* buffer, - int32_t bytes_to_read, - PP_CompletionCallback callback) { - /* TODO - Dispatcher::Get()->Send(new PpapiHostMsg_PPBURLLoader_ReadResponseBody( - INTERFACE_ID_PPB_URL_LOADER, loader_id, )); - */ - return PP_ERROR_WOULDBLOCK; -} - -int32_t FinishStreamingToFile(PP_Resource loader_id, - PP_CompletionCallback callback) { - Dispatcher* dispatcher = PluginDispatcher::Get(); - dispatcher->Send(new PpapiHostMsg_PPBURLLoader_FinishStreamingToFile( - INTERFACE_ID_PPB_URL_LOADER, loader_id, - dispatcher->callback_tracker().SendCallback(callback))); - return PP_ERROR_WOULDBLOCK; -} - -void Close(PP_Resource loader_id) { - PluginDispatcher::Get()->Send(new PpapiHostMsg_PPBURLLoader_Close( - INTERFACE_ID_PPB_URL_LOADER, loader_id)); -} - -const PPB_URLLoader_Dev ppb_urlloader = { - &Create, - &IsURLLoader, - &Open, - &FollowRedirect, - &GetUploadProgress, - &GetDownloadProgress, - &GetResponseInfo, - &ReadResponseBody, - &FinishStreamingToFile, - &Close -}; - -} // namespace - -PPB_URLLoader_Proxy::PPB_URLLoader_Proxy(Dispatcher* dispatcher, - const void* target_interface) - : InterfaceProxy(dispatcher, target_interface) { -} - -PPB_URLLoader_Proxy::~PPB_URLLoader_Proxy() { -} - -const void* PPB_URLLoader_Proxy::GetSourceInterface() const { - return &ppb_urlloader; -} - -InterfaceID PPB_URLLoader_Proxy::GetInterfaceId() const { - return INTERFACE_ID_PPB_URL_LOADER; -} - -void PPB_URLLoader_Proxy::OnMessageReceived(const IPC::Message& msg) { - IPC_BEGIN_MESSAGE_MAP(PPB_URLLoader_Proxy, msg) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBURLLoader_Create, - OnMsgCreate) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBURLLoader_Open, - OnMsgOpen) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBURLLoader_FollowRedirect, - OnMsgFollowRedirect) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBURLLoader_GetUploadProgress, - OnMsgGetUploadProgress) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBURLLoader_GetDownloadProgress, - OnMsgGetDownloadProgress) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBURLLoader_GetResponseInfo, - OnMsgGetResponseInfo) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBURLLoader_ReadResponseBody, - OnMsgReadResponseBody) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBURLLoader_FinishStreamingToFile, - OnMsgFinishStreamingToFile) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBURLLoader_Close, - OnMsgClose) - - IPC_MESSAGE_HANDLER(PpapiMsg_PPBURLLoader_UpdateProgress, - OnMsgUpdateProgress) - IPC_END_MESSAGE_MAP() - // TODO(brettw) handle bad messages! -} - -void PPB_URLLoader_Proxy::OnMsgCreate(PP_Instance instance, - PP_Resource* result) { - *result = ppb_url_loader_target()->Create(instance); -} - -void PPB_URLLoader_Proxy::OnMsgOpen(PP_Resource loader, - PP_Resource request_info, - uint32_t serialized_callback) { - // TODO(brettw): need to notify in case the result is not "would block". - ppb_url_loader_target()->Open(loader, request_info, - ReceiveCallback(serialized_callback)); -} - -void PPB_URLLoader_Proxy::OnMsgFollowRedirect( - PP_Resource loader, - uint32_t serialized_callback) { - // TODO(brettw): need to notify in case the result is not "would block". - ppb_url_loader_target()->FollowRedirect(loader, - ReceiveCallback(serialized_callback)); -} - -void PPB_URLLoader_Proxy::OnMsgGetUploadProgress( - PP_Resource loader, - int64* bytes_sent, - int64* total_bytes_to_be_sent, - bool* result) { - *result = ppb_url_loader_target()->GetUploadProgress( - loader, bytes_sent, total_bytes_to_be_sent); -} - -void PPB_URLLoader_Proxy::OnMsgGetDownloadProgress( - PP_Resource loader, - int64* bytes_received, - int64* total_bytes_to_be_received, - bool* result) { - *result = ppb_url_loader_target()->GetDownloadProgress( - loader, bytes_received, total_bytes_to_be_received); -} - -void PPB_URLLoader_Proxy::OnMsgGetResponseInfo(PP_Resource loader, - PP_Resource* result) { - /* TODO(brettw) this will depend on the plugin-side FIXME above. - *result = ppb_url_loader_target()->GetResponseInfo(loader); - */ -} - -void PPB_URLLoader_Proxy::OnMsgReadResponseBody( - PP_Resource loader, - int32_t bytes_to_read, - uint32_t serialized_callback) { - // TODO(brettw): need to notify in case the result is not "would block". - /* TODO(brettw) figure out how to share data. - ppb_url_loader_target()->ReadRseponseBody(loader, bytes_to_read, - ReceiveCallback(serialized_callback)); - */ -} - -void PPB_URLLoader_Proxy::OnMsgFinishStreamingToFile( - PP_Resource loader, - uint32_t serialized_callback) { - // TODO(brettw): need to notify in case the result is not "would block". - ppb_url_loader_target()->FinishStreamingToFile(loader, - ReceiveCallback(serialized_callback)); -} - -void PPB_URLLoader_Proxy::OnMsgClose(PP_Resource loader) { - ppb_url_loader_target()->Close(loader); -} - -// TODO(brettw) nobody calls this function. We should have some way to register -// for these updates so when WebKit tells the pepper url loader code that -// something changed, we'll get a callback. -void PPB_URLLoader_Proxy::OnMsgUpdateProgress( - PP_Resource resource, - int64_t bytes_sent, - int64_t total_bytes_to_be_sent, - int64_t bytes_received, - int64_t total_bytes_to_be_received) { - URLLoader* object = PluginResource::GetAs<URLLoader>(resource); - if (!object) - return; - - object->bytes_sent_ = bytes_sent; - object->total_bytes_to_be_sent_ = total_bytes_to_be_sent; - object->bytes_received_ = bytes_received; - object->total_bytes_to_be_received_ = total_bytes_to_be_received; -} - -} // namespace proxy -} // namespace pp diff --git a/ppapi/proxy/ppb_url_loader_proxy.h b/ppapi/proxy/ppb_url_loader_proxy.h deleted file mode 100644 index 6978f88..0000000 --- a/ppapi/proxy/ppb_url_loader_proxy.h +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PPB_URL_LOADER_PROXY_H_ -#define PPAPI_PPB_URL_LOADER_PROXY_H_ - -#include "ppapi/c/pp_completion_callback.h" -#include "ppapi/c/pp_instance.h" -#include "ppapi/c/pp_module.h" -#include "ppapi/c/pp_resource.h" -#include "ppapi/c/pp_size.h" -#include "ppapi/c/pp_var.h" -#include "ppapi/proxy/interface_proxy.h" - -struct PPB_URLLoader_Dev; - -namespace pp { -namespace proxy { - -class PPB_URLLoader_Proxy : public InterfaceProxy { - public: - PPB_URLLoader_Proxy(Dispatcher* dispatcher, const void* target_interface); - virtual ~PPB_URLLoader_Proxy(); - - const PPB_URLLoader_Dev* ppb_url_loader_target() const { - return reinterpret_cast<const PPB_URLLoader_Dev*>(target_interface()); - } - - // InterfaceProxy implementation. - virtual const void* GetSourceInterface() const; - virtual InterfaceID GetInterfaceId() const; - virtual void OnMessageReceived(const IPC::Message& msg); - - private: - // Plugin->renderer message handlers. - void OnMsgCreate(PP_Instance instance, - PP_Resource* result); - void OnMsgOpen(PP_Resource loader, - PP_Resource request_info, - uint32_t serialized_callback); - void OnMsgFollowRedirect(PP_Resource loader, - uint32_t serialized_callback); - void OnMsgGetUploadProgress(PP_Resource loader, - int64* bytes_sent, - int64* total_bytes_to_be_sent, - bool* result); - void OnMsgGetDownloadProgress(PP_Resource loader, - int64* bytes_received, - int64* total_bytes_to_be_received, - bool* result); - void OnMsgGetResponseInfo(PP_Resource loader, - PP_Resource* result); - void OnMsgReadResponseBody(PP_Resource loader, - int32_t bytes_to_read, - uint32_t serialized_callback); - void OnMsgFinishStreamingToFile(PP_Resource loader, - uint32_t serialized_callback); - void OnMsgClose(PP_Resource loader); - - // Renderer->plugin message handlers. - void OnMsgUpdateProgress(PP_Resource resource, - int64_t bytes_sent, - int64_t total_bytes_to_be_sent, - int64_t bytes_received, - int64_t total_bytes_to_be_received); -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PPB_URL_LOADER_PROXY_H_ diff --git a/ppapi/proxy/ppb_var_deprecated_proxy.cc b/ppapi/proxy/ppb_var_deprecated_proxy.cc deleted file mode 100644 index e8ba730..0000000 --- a/ppapi/proxy/ppb_var_deprecated_proxy.cc +++ /dev/null @@ -1,376 +0,0 @@ -// Copyright (c) 2010 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_var_deprecated_proxy.h" - -#include <stdlib.h> // For malloc - -#include "base/logging.h" -#include "ppapi/c/dev/ppb_var_deprecated.h" -#include "ppapi/c/pp_var.h" -#include "ppapi/c/ppb_core.h" -#include "ppapi/proxy/plugin_dispatcher.h" -#include "ppapi/proxy/ppapi_message_helpers.h" -#include "ppapi/proxy/ppapi_messages.h" -#include "ppapi/proxy/ppp_class_proxy.h" -#include "ppapi/proxy/serialized_var.h" - -namespace pp { -namespace proxy { - -namespace { - -// PPP_Var_Deprecated plugin --------------------------------------------------- - -void AddRefVar(PP_Var var) { - PluginDispatcher::Get()->plugin_var_tracker()->AddRef(var); -} - -void ReleaseVar(PP_Var var) { - PluginDispatcher::Get()->plugin_var_tracker()->Release(var); -} - -PP_Var VarFromUtf8(PP_Module module_id, const char* data, uint32_t len) { - PP_Var ret; - ret.type = PP_VARTYPE_STRING; - // TODO(brettw) avoid this extra copy. - ret.value.as_id = PluginDispatcher::Get()->plugin_var_tracker()->MakeString( - std::string(data, len)); - return ret; -} - -const char* VarToUtf8(PP_Var var, uint32_t* len) { - const std::string* str = - PluginDispatcher::Get()->plugin_var_tracker()->GetExistingString(var); - if (str) { - *len = static_cast<uint32_t>(str->size()); - return str->c_str(); - } else { - *len = 0; - return NULL; - } -} - -bool HasProperty(PP_Var var, - PP_Var name, - PP_Var* exception) { - Dispatcher* dispatcher = PluginDispatcher::Get(); - ReceiveSerializedException se(dispatcher, exception); - bool result = false; - if (!se.IsThrown()) { - dispatcher->Send(new PpapiHostMsg_PPBVar_HasProperty( - INTERFACE_ID_PPB_VAR_DEPRECATED, SerializedVarSendInput(dispatcher, var), - SerializedVarSendInput(dispatcher, name), &se, &result)); - } - return result; -} - -bool HasMethod(PP_Var var, - PP_Var name, - PP_Var* exception) { - Dispatcher* dispatcher = PluginDispatcher::Get(); - ReceiveSerializedException se(dispatcher, exception); - bool result = false; - if (!se.IsThrown()) { - dispatcher->Send(new PpapiHostMsg_PPBVar_HasMethodDeprecated( - INTERFACE_ID_PPB_VAR_DEPRECATED, SerializedVarSendInput(dispatcher, var), - SerializedVarSendInput(dispatcher, name), &se, &result)); - } - return result; -} - -PP_Var GetProperty(PP_Var var, - PP_Var name, - PP_Var* exception) { - Dispatcher* dispatcher = PluginDispatcher::Get(); - ReceiveSerializedException se(dispatcher, exception); - ReceiveSerializedVarReturnValue result; - if (!se.IsThrown()) { - dispatcher->Send(new PpapiHostMsg_PPBVar_GetProperty( - INTERFACE_ID_PPB_VAR_DEPRECATED, SerializedVarSendInput(dispatcher, var), - SerializedVarSendInput(dispatcher, name), &se, &result)); - } - return result.Return(dispatcher); -} - -void EnumerateProperties(PP_Var var, - uint32_t* property_count, - PP_Var** properties, - PP_Var* exception) { - Dispatcher* dispatcher = PluginDispatcher::Get(); - - ReceiveSerializedVarVectorOutParam out_vector(dispatcher, - property_count, properties); - ReceiveSerializedException se(dispatcher, exception); - if (!se.IsThrown()) { - dispatcher->Send(new PpapiHostMsg_PPBVar_EnumerateProperties( - INTERFACE_ID_PPB_VAR_DEPRECATED, SerializedVarSendInput(dispatcher, var), - out_vector.OutParam(), &se)); - } -} - -void SetProperty(PP_Var var, - PP_Var name, - PP_Var value, - PP_Var* exception) { - Dispatcher* dispatcher = PluginDispatcher::Get(); - ReceiveSerializedException se(dispatcher, exception); - if (!se.IsThrown()) { - dispatcher->Send(new PpapiHostMsg_PPBVar_SetPropertyDeprecated( - INTERFACE_ID_PPB_VAR_DEPRECATED, SerializedVarSendInput(dispatcher, var), - SerializedVarSendInput(dispatcher, name), - SerializedVarSendInput(dispatcher, value), &se)); - } -} - -void RemoveProperty(PP_Var var, - PP_Var name, - PP_Var* exception) { - Dispatcher* dispatcher = PluginDispatcher::Get(); - ReceiveSerializedException se(dispatcher, exception); - bool result = false; - if (!se.IsThrown()) { - dispatcher->Send(new PpapiHostMsg_PPBVar_DeleteProperty( - INTERFACE_ID_PPB_VAR_DEPRECATED, SerializedVarSendInput(dispatcher, var), - SerializedVarSendInput(dispatcher, name), &se, &result)); - } -} - -PP_Var Call(PP_Var object, - PP_Var method_name, - uint32_t argc, - PP_Var* argv, - PP_Var* exception) { - Dispatcher* dispatcher = PluginDispatcher::Get(); - ReceiveSerializedVarReturnValue result; - ReceiveSerializedException se(dispatcher, exception); - if (!se.IsThrown()) { - std::vector<SerializedVar> argv_vect; - SerializedVarSendInput::ConvertVector(dispatcher, argv, argc, &argv_vect); - - dispatcher->Send(new PpapiHostMsg_PPBVar_CallDeprecated( - INTERFACE_ID_PPB_VAR_DEPRECATED, - SerializedVarSendInput(dispatcher, object), - SerializedVarSendInput(dispatcher, method_name), argv_vect, - &se, &result)); - } - return result.Return(dispatcher); -} - -PP_Var Construct(PP_Var object, - uint32_t argc, - PP_Var* argv, - PP_Var* exception) { - Dispatcher* dispatcher = PluginDispatcher::Get(); - ReceiveSerializedVarReturnValue result; - ReceiveSerializedException se(dispatcher, exception); - if (!se.IsThrown()) { - std::vector<SerializedVar> argv_vect; - SerializedVarSendInput::ConvertVector(dispatcher, argv, argc, &argv_vect); - - dispatcher->Send(new PpapiHostMsg_PPBVar_Construct( - INTERFACE_ID_PPB_VAR_DEPRECATED, SerializedVarSendInput(dispatcher, object), - argv_vect, &se, &result)); - } - return result.Return(dispatcher); -} - -bool IsInstanceOf(PP_Var var, - const PPP_Class_Deprecated* ppp_class, - void** ppp_class_data) { - bool result = false; - Dispatcher* dispatcher = PluginDispatcher::Get(); - int64 class_int = static_cast<int64>(reinterpret_cast<intptr_t>(ppp_class)); - int64 class_data_int = 0; - dispatcher->Send(new PpapiHostMsg_PPBVar_IsInstanceOfDeprecated( - INTERFACE_ID_PPB_VAR_DEPRECATED, SerializedVarSendInput(dispatcher, var), - class_int, &class_data_int, &result)); - *ppp_class_data = - reinterpret_cast<void*>(static_cast<intptr_t>(class_data_int)); - return result; -} - -PP_Var CreateObject(PP_Module module_id, - const PPP_Class_Deprecated* ppp_class, - void* ppp_class_data) { - Dispatcher* dispatcher = PluginDispatcher::Get(); - ReceiveSerializedVarReturnValue result; - int64 class_int = static_cast<int64>(reinterpret_cast<intptr_t>(ppp_class)); - int64 data_int = - static_cast<int64>(reinterpret_cast<intptr_t>(ppp_class_data)); - dispatcher->Send(new PpapiHostMsg_PPBVar_CreateObjectDeprecated( - INTERFACE_ID_PPB_VAR_DEPRECATED, module_id, class_int, data_int, &result)); - return result.Return(dispatcher); -} - -const PPB_Var_Deprecated var_deprecated_interface = { - &AddRefVar, - &ReleaseVar, - &VarFromUtf8, - &VarToUtf8, - &HasProperty, - &HasMethod, - &GetProperty, - &EnumerateProperties, - &SetProperty, - &RemoveProperty, - &Call, - &Construct, - &IsInstanceOf, - &CreateObject -}; - -} // namespace - -PPB_Var_Deprecated_Proxy::PPB_Var_Deprecated_Proxy(Dispatcher* dispatcher, - const void* target_interface) - : InterfaceProxy(dispatcher, target_interface) { -} - -PPB_Var_Deprecated_Proxy::~PPB_Var_Deprecated_Proxy() { -} - -const void* PPB_Var_Deprecated_Proxy::GetSourceInterface() const { - return &var_deprecated_interface; -} - -InterfaceID PPB_Var_Deprecated_Proxy::GetInterfaceId() const { - return INTERFACE_ID_PPB_VAR_DEPRECATED; -} - -void PPB_Var_Deprecated_Proxy::OnMessageReceived(const IPC::Message& msg) { - IPC_BEGIN_MESSAGE_MAP(PPB_Var_Deprecated_Proxy, msg) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_HasProperty, - OnMsgHasProperty) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_HasMethodDeprecated, - OnMsgHasMethodDeprecated) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_GetProperty, - OnMsgGetProperty) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_DeleteProperty, - OnMsgDeleteProperty) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_EnumerateProperties, - OnMsgEnumerateProperties) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_SetPropertyDeprecated, - OnMsgSetPropertyDeprecated) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_CallDeprecated, - OnMsgCallDeprecated) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_Construct, - OnMsgConstruct) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_IsInstanceOfDeprecated, - OnMsgIsInstanceOfDeprecated) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_CreateObjectDeprecated, - OnMsgCreateObjectDeprecated) - IPC_END_MESSAGE_MAP() - // FIXME(brettw) handle bad messages! -} - -void PPB_Var_Deprecated_Proxy::OnMsgHasProperty( - SerializedVarReceiveInput var, - SerializedVarReceiveInput name, - SerializedVarOutParam exception, - bool* result) { - *result = ppb_var_target()->HasProperty(var.Get(dispatcher()), - name.Get(dispatcher()), - exception.OutParam(dispatcher())); -} - -void PPB_Var_Deprecated_Proxy::OnMsgHasMethodDeprecated( - SerializedVarReceiveInput var, - SerializedVarReceiveInput name, - SerializedVarOutParam exception, - bool* result) { - *result = ppb_var_target()->HasMethod(var.Get(dispatcher()), - name.Get(dispatcher()), - exception.OutParam(dispatcher())); -} - -void PPB_Var_Deprecated_Proxy::OnMsgGetProperty( - SerializedVarReceiveInput var, - SerializedVarReceiveInput name, - SerializedVarOutParam exception, - SerializedVarReturnValue result) { - result.Return(dispatcher(), ppb_var_target()->GetProperty( - var.Get(dispatcher()), name.Get(dispatcher()), - exception.OutParam(dispatcher()))); -} - -void PPB_Var_Deprecated_Proxy::OnMsgEnumerateProperties( - SerializedVarReceiveInput var, - SerializedVarVectorOutParam props, - SerializedVarOutParam exception) { - ppb_var_target()->GetAllPropertyNames(var.Get(dispatcher()), - props.CountOutParam(), props.ArrayOutParam(dispatcher()), - exception.OutParam(dispatcher())); -} - -void PPB_Var_Deprecated_Proxy::OnMsgSetPropertyDeprecated( - SerializedVarReceiveInput var, - SerializedVarReceiveInput name, - SerializedVarReceiveInput value, - SerializedVarOutParam exception) { - ppb_var_target()->SetProperty(var.Get(dispatcher()), - name.Get(dispatcher()), - value.Get(dispatcher()), - exception.OutParam(dispatcher())); -} - -void PPB_Var_Deprecated_Proxy::OnMsgDeleteProperty( - SerializedVarReceiveInput var, - SerializedVarReceiveInput name, - SerializedVarOutParam exception, - bool* result) { - ppb_var_target()->RemoveProperty(var.Get(dispatcher()), - name.Get(dispatcher()), - exception.OutParam(dispatcher())); - // This deprecated function doesn't actually return a value, but we re-use - // the message from the non-deprecated interface with the return value. - *result = true; -} - -void PPB_Var_Deprecated_Proxy::OnMsgCallDeprecated( - SerializedVarReceiveInput object, - SerializedVarReceiveInput method_name, - SerializedVarVectorReceiveInput arg_vector, - SerializedVarOutParam exception, - SerializedVarReturnValue result) { - uint32_t arg_count = 0; - PP_Var* args = arg_vector.Get(dispatcher(), &arg_count); - result.Return(dispatcher(), ppb_var_target()->Call( - object.Get(dispatcher()), - method_name.Get(dispatcher()), - arg_count, args, - exception.OutParam(dispatcher()))); -} - -void PPB_Var_Deprecated_Proxy::OnMsgConstruct( - SerializedVarReceiveInput var, - SerializedVarVectorReceiveInput arg_vector, - SerializedVarOutParam exception, - SerializedVarReturnValue result) { - uint32_t arg_count = 0; - PP_Var* args = arg_vector.Get(dispatcher(), &arg_count); - result.Return(dispatcher(), ppb_var_target()->Construct( - var.Get(dispatcher()), arg_count, args, - exception.OutParam(dispatcher()))); -} - -void PPB_Var_Deprecated_Proxy::OnMsgIsInstanceOfDeprecated( - pp::proxy::SerializedVarReceiveInput var, - int64 ppp_class, - int64* ppp_class_data, - bool* result) { - // TODO(brettw) write this. -} - -void PPB_Var_Deprecated_Proxy::OnMsgCreateObjectDeprecated( - PP_Module module_id, - int64 ppp_class, - int64 class_data, - SerializedVarReturnValue result) { - result.Return(dispatcher(), PPP_Class_Proxy::CreateProxiedObject( - ppb_var_target(), dispatcher(), module_id, ppp_class, class_data)); -} - -} // namespace proxy -} // namespace pp diff --git a/ppapi/proxy/ppb_var_deprecated_proxy.h b/ppapi/proxy/ppb_var_deprecated_proxy.h deleted file mode 100644 index 9fe123a..0000000 --- a/ppapi/proxy/ppb_var_deprecated_proxy.h +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PPB_VAR_PROXY_H_ -#define PPAPI_PPB_VAR_PROXY_H_ - -#include <vector> - -#include "ppapi/c/pp_instance.h" -#include "ppapi/c/pp_module.h" -#include "ppapi/proxy/interface_proxy.h" - -struct PPB_Var_Deprecated; - -namespace pp { -namespace proxy { - -class SerializedVar; -class SerializedVarReceiveInput; -class SerializedVarVectorOutParam; -class SerializedVarVectorReceiveInput; -class SerializedVarOutParam; -class SerializedVarReturnValue; - -class PPB_Var_Deprecated_Proxy : public InterfaceProxy { - public: - PPB_Var_Deprecated_Proxy(Dispatcher* dispatcher, - const void* target_interface); - virtual ~PPB_Var_Deprecated_Proxy(); - - const PPB_Var_Deprecated* ppb_var_target() const { - return reinterpret_cast<const PPB_Var_Deprecated*>(target_interface()); - } - - // InterfaceProxy implementation. - virtual const void* GetSourceInterface() const; - virtual InterfaceID GetInterfaceId() const; - virtual void OnMessageReceived(const IPC::Message& msg); - - private: - // Message handlers. - void OnMsgHasProperty(SerializedVarReceiveInput var, - SerializedVarReceiveInput name, - SerializedVarOutParam exception, - bool* result); - void OnMsgHasMethodDeprecated(SerializedVarReceiveInput var, - SerializedVarReceiveInput name, - SerializedVarOutParam exception, - bool* result); - void OnMsgGetProperty(SerializedVarReceiveInput var, - SerializedVarReceiveInput name, - SerializedVarOutParam exception, - SerializedVarReturnValue result); - void OnMsgEnumerateProperties( - SerializedVarReceiveInput var, - SerializedVarVectorOutParam props, - SerializedVarOutParam exception); - void OnMsgSetPropertyDeprecated(SerializedVarReceiveInput var, - SerializedVarReceiveInput name, - SerializedVarReceiveInput value, - SerializedVarOutParam exception); - void OnMsgDeleteProperty(SerializedVarReceiveInput var, - SerializedVarReceiveInput name, - SerializedVarOutParam exception, - bool* result); - void OnMsgCall(SerializedVarReceiveInput object, - SerializedVarReceiveInput this_object, - SerializedVarReceiveInput method_name, - SerializedVarVectorReceiveInput arg_vector, - SerializedVarOutParam exception, - SerializedVarReturnValue result); - void OnMsgCallDeprecated(SerializedVarReceiveInput object, - SerializedVarReceiveInput method_name, - SerializedVarVectorReceiveInput arg_vector, - SerializedVarOutParam exception, - SerializedVarReturnValue result); - void OnMsgConstruct(SerializedVarReceiveInput var, - SerializedVarVectorReceiveInput arg_vector, - SerializedVarOutParam exception, - SerializedVarReturnValue result); - void OnMsgIsInstanceOfDeprecated(pp::proxy::SerializedVarReceiveInput var, - int64 ppp_class, - int64* ppp_class_data, - bool* result); - void OnMsgCreateObjectDeprecated(PP_Module module_id, - int64 ppp_class, - int64 ppp_class_data, - SerializedVarReturnValue result); -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PPB_VAR_PROXY_H_ diff --git a/ppapi/proxy/ppb_var_proxy.cc b/ppapi/proxy/ppb_var_proxy.cc deleted file mode 100644 index 117eb6f..0000000 --- a/ppapi/proxy/ppb_var_proxy.cc +++ /dev/null @@ -1,478 +0,0 @@ -// Copyright (c) 2010 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_var_proxy.h" - -#include <stdlib.h> // For malloc - -#include "base/logging.h" -#include "ppapi/c/dev/ppb_var_deprecated.h" -#include "ppapi/c/pp_var.h" -#include "ppapi/c/ppb_core.h" -#include "ppapi/c/ppb_var.h" -#include "ppapi/proxy/dispatcher.h" -#include "ppapi/proxy/ppapi_message_helpers.h" -#include "ppapi/proxy/ppapi_messages.h" -#include "ppapi/proxy/serialized_var.h" - -namespace pp { -namespace proxy { - -namespace { - -void AddRefVar(PP_Var var) { - Dispatcher::Get()->plugin_var_tracker()->AddRef(var); -} - -void ReleaseVar(PP_Var var) { - Dispatcher::Get()->plugin_var_tracker()->Release(var); -} - -PP_Var VarFromUtf8(PP_Module module_id, const char* data, uint32_t len) { - PP_Var ret; - ret.type = PP_VARTYPE_STRING; - // TODO(brettw) avoid this extra copy. - ret.value.as_id = Dispatcher::Get()->plugin_var_tracker()->MakeString( - std::string(data, len)); - return ret; -} - -const char* VarToUtf8(PP_Var var, uint32_t* len) { - const std::string* str = - Dispatcher::Get()->plugin_var_tracker()->GetExistingString(var); - if (str) { - *len = static_cast<uint32_t>(str->size()); - return str->c_str(); - } else { - *len = 0; - return NULL; - } -} - -PP_Var ConvertType(PP_Instance instance, - PP_Var var, - PP_VarType new_type, - PP_Var* exception) { - Dispatcher* dispatcher = Dispatcher::Get(); - ReceiveSerializedException se(dispatcher, exception); - ReceiveSerializedVarReturnValue result(dispatcher); - if (!se.IsThrown()) { - dispatcher->Send(new PpapiHostMsg_PPBVar_ConvertType( - INTERFACE_ID_PPB_VAR_DEPRECATED, instance, - SerializedVarSendInput(dispatcher, var), - static_cast<int>(new_type), &se, &result)); - } - return result.Return(); -} - -bool HasProperty(PP_Var var, - PP_Var name, - PP_Var* exception) { - Dispatcher* dispatcher = Dispatcher::Get(); - ReceiveSerializedException se(dispatcher, exception); - bool result = false; - if (!se.IsThrown()) { - dispatcher->Send(new PpapiHostMsg_PPBVar_HasProperty( - INTERFACE_ID_PPB_VAR_DEPRECATED, SerializedVarSendInput(dispatcher, var), - SerializedVarSendInput(dispatcher, name), &se, &result)); - } - return result; -} - -bool HasMethodDeprecated(PP_Var var, - PP_Var name, - PP_Var* exception) { - Dispatcher* dispatcher = Dispatcher::Get(); - ReceiveSerializedException se(dispatcher, exception); - bool result = false; - if (!se.IsThrown()) { - dispatcher->Send(new PpapiHostMsg_PPBVar_HasMethodDeprecated( - INTERFACE_ID_PPB_VAR_DEPRECATED, SerializedVarSendInput(dispatcher, var), - SerializedVarSendInput(dispatcher, name), &se, &result)); - } - return result; -} - -PP_Var GetProperty(PP_Var var, - PP_Var name, - PP_Var* exception) { - Dispatcher* dispatcher = Dispatcher::Get(); - ReceiveSerializedException se(dispatcher, exception); - ReceiveSerializedVarReturnValue result(dispatcher); - if (!se.IsThrown()) { - dispatcher->Send(new PpapiHostMsg_PPBVar_GetProperty( - INTERFACE_ID_PPB_VAR_DEPRECATED, SerializedVarSendInput(dispatcher, var), - SerializedVarSendInput(dispatcher, name), &se, &result)); - } - return result.Return(); -} - -void EnumerateProperties(PP_Var var, - uint32_t* property_count, - PP_Var** properties, - PP_Var* exception) { - Dispatcher* dispatcher = Dispatcher::Get(); - - std::vector<SerializedVar> props; - ReceiveSerializedException se(dispatcher, exception); - if (!se.IsThrown()) { - dispatcher->Send(new PpapiHostMsg_PPBVar_EnumerateProperties( - INTERFACE_ID_PPB_VAR_DEPRECATED, SerializedVarSendInput(dispatcher, var), - &props, &se)); - } - - // TODO(brettw) factor this out so it can be used by ScriptableObject. - /* - *property_count = static_cast<uint32_t>(props.size()); - if (property_count) { - *properties = static_cast<PP_Var*>( - malloc(*property_count * sizeof(PP_Var*))); - for (size_t i = 0; i < props.size(); i++) { - ReceiveSerializedVarReturnValue converted(dispatcher); - SerializedVar* converted_sv = &convered; - - *static_cast<SerializedVar*>(&converted) = props[i]; - (*properties)[i] = converted.Return(); - } - } else { - *properties = NULL; - } - */ -} - -void SetPropertyDeprecated(PP_Var var, - PP_Var name, - PP_Var value, - PP_Var* exception) { - Dispatcher* dispatcher = Dispatcher::Get(); - ReceiveSerializedException se(dispatcher, exception); - if (!se.IsThrown()) { - dispatcher->Send(new PpapiHostMsg_PPBVar_SetPropertyDeprecated( - INTERFACE_ID_PPB_VAR_DEPRECATED, SerializedVarSendInput(dispatcher, var), - SerializedVarSendInput(dispatcher, name), - SerializedVarSendInput(dispatcher, value), &se)); - } -} - -bool DeleteProperty(PP_Var var, - PP_Var name, - PP_Var* exception) { - Dispatcher* dispatcher = Dispatcher::Get(); - ReceiveSerializedException se(dispatcher, exception); - bool result = false; - if (!se.IsThrown()) { - dispatcher->Send(new PpapiHostMsg_PPBVar_DeleteProperty( - INTERFACE_ID_PPB_VAR_DEPRECATED, SerializedVarSendInput(dispatcher, var), - SerializedVarSendInput(dispatcher, name), &se, &result)); - } - return result; -} - -void RemovePropertyDeprecated(PP_Var var, - PP_Var name, - PP_Var* exception) { - Dispatcher* dispatcher = Dispatcher::Get(); - ReceiveSerializedException se(dispatcher, exception); - bool result = false; - if (!se.IsThrown()) { - dispatcher->Send(new PpapiHostMsg_PPBVar_DeleteProperty( - INTERFACE_ID_PPB_VAR_DEPRECATED, SerializedVarSendInput(dispatcher, var), - SerializedVarSendInput(dispatcher, name), &se, &result)); - } -} - - -PP_Var Call(PP_Var object, - PP_Var this_object, - PP_Var method_name, - uint32_t argc, - PP_Var* argv, - PP_Var* exception) { - Dispatcher* dispatcher = Dispatcher::Get(); - ReceiveSerializedVarReturnValue result(dispatcher); - ReceiveSerializedException se(dispatcher, exception); - if (!se.IsThrown()) { - std::vector<SerializedVar> argv_vect; - SerializedVarSendInput::ConvertVector(dispatcher, argv, argc, &argv_vect); - - dispatcher->Send(new PpapiHostMsg_PPBVar_Call( - INTERFACE_ID_PPB_VAR_DEPRECATED, - SerializedVarSendInput(dispatcher, object), - SerializedVarSendInput(dispatcher, this_object), - SerializedVarSendInput(dispatcher, method_name), argv_vect, - &se, &result)); - } - return result.Return(); -} - -PP_Var CallDeprecated(PP_Var object, - PP_Var method_name, - uint32_t argc, - PP_Var* argv, - PP_Var* exception) { - Dispatcher* dispatcher = Dispatcher::Get(); - ReceiveSerializedVarReturnValue result(dispatcher); - ReceiveSerializedException se(dispatcher, exception); - if (!se.IsThrown()) { - std::vector<SerializedVar> argv_vect; - SerializedVarSendInput::ConvertVector(dispatcher, argv, argc, &argv_vect); - - dispatcher->Send(new PpapiHostMsg_PPBVar_CallDeprecated( - INTERFACE_ID_PPB_VAR_DEPRECATED, - SerializedVarSendInput(dispatcher, object), - SerializedVarSendInput(dispatcher, method_name), argv_vect, - &se, &result)); - } - return result.Return(); -} - -PP_Var Construct(PP_Var object, - uint32_t argc, - PP_Var* argv, - PP_Var* exception) { - Dispatcher* dispatcher = Dispatcher::Get(); - ReceiveSerializedVarReturnValue result(dispatcher); - ReceiveSerializedException se(dispatcher, exception); - if (!se.IsThrown()) { - std::vector<SerializedVar> argv_vect; - SerializedVarSendInput::ConvertVector(dispatcher, argv, argc, &argv_vect); - - dispatcher->Send(new PpapiHostMsg_PPBVar_Construct( - INTERFACE_ID_PPB_VAR_DEPRECATED, SerializedVarSendInput(dispatcher, object), - argv_vect, &se, &result)); - } - return result.Return(); -} - -bool IsInstanceOfDeprecated(PP_Var var, - const PPP_Class_Deprecated* ppp_class, - void** ppp_class_data) { - bool result = false; - Dispatcher* dispatcher = Dispatcher::Get(); - int64 class_int = static_cast<int64>(reinterpret_cast<intptr_t>(ppp_class)); - int64 class_data_int = 0; - dispatcher->Send(new PpapiHostMsg_PPBVar_IsInstanceOfDeprecated( - INTERFACE_ID_PPB_VAR_DEPRECATED, SerializedVarSendInput(dispatcher, var), - class_int, &class_data_int, &result)); - *ppp_class_data = - reinterpret_cast<void*>(static_cast<intptr_t>(class_data_int)); - return result; -} - -PP_Var CreateObjectDeprecated(PP_Module module_id, - const PPP_Class_Deprecated* ppp_class, - void* ppp_class_data) { - Dispatcher* dispatcher = Dispatcher::Get(); - ReceiveSerializedVarReturnValue result(dispatcher); - int64 class_int = static_cast<int64>(reinterpret_cast<intptr_t>(ppp_class)); - int64 data_int = - static_cast<int64>(reinterpret_cast<intptr_t>(ppp_class_data)); - dispatcher->Send(new PpapiHostMsg_PPBVar_CreateObjectDeprecated( - INTERFACE_ID_PPB_VAR_DEPRECATED, module_id, class_int, data_int, &result)); - return result.Return(); -} - -const PPB_Var var_interface = { - &AddRefVar, - &ReleaseVar, - &VarFromUtf8, - &VarToUtf8, - &ConvertType, -}; - - -const PPB_Var_Deprecated var_deprecated_interface = { - &AddRefVar, - &ReleaseVar, - &VarFromUtf8, - &VarToUtf8, - &HasProperty, - &HasMethodDeprecated, - &GetProperty, - &EnumerateProperties, - &SetPropertyDeprecated, - &RemovePropertyDeprecated, - &CallDeprecated, - &Construct, - &IsInstanceOfDeprecated, - &CreateObjectDeprecated -}; - -} // namespace - -PPB_Var_Proxy::PPB_Var_Proxy(Dispatcher* dispatcher, - const void* target_interface) - : InterfaceProxy(dispatcher, target_interface) { -} - -PPB_Var_Proxy::~PPB_Var_Proxy() { -} - -const void* PPB_Var_Proxy::GetSourceInterface() const { - return &var_deprecated_interface; -} - -InterfaceID PPB_Var_Proxy::GetInterfaceId() const { - return INTERFACE_ID_PPB_VAR_DEPRECATED; -} - -void PPB_Var_Proxy::OnMessageReceived(const IPC::Message& msg) { - IPC_BEGIN_MESSAGE_MAP(PPB_Var_Proxy, msg) - // AddRef /Release here - //IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_DefineProperty, - // OnMsgDefineProperty) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_ConvertType, - OnMsgConvertType) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_HasProperty, - OnMsgHasProperty) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_HasMethodDeprecated, - OnMsgHasMethodDeprecated) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_GetProperty, - OnMsgGetProperty) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_DeleteProperty, - OnMsgDeleteProperty) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_EnumerateProperties, - OnMsgEnumerateProperties) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_SetPropertyDeprecated, - OnMsgSetPropertyDeprecated) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_IsCallable, - OnMsgIsCallable) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_Call, - OnMsgCall) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_CallDeprecated, - OnMsgCallDeprecated) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_Construct, - OnMsgConstruct) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_IsInstanceOfDeprecated, - OnMsgIsInstanceOfDeprecated) - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_CreateObjectDeprecated, - OnMsgCreateObjectDeprecated) - IPC_END_MESSAGE_MAP() - // FIXME(brettw) handle bad messages! -} - -void PPB_Var_Proxy::OnMsgConvertType(PP_Instance instance, - SerializedVarReceiveInput var, - int new_type, - SerializedVarOutParam exception, - SerializedVarReturnValue result) { - // FIXME(brettw) write this. -} - -void PPB_Var_Proxy::OnMsgHasProperty(SerializedVarReceiveInput var, - SerializedVarReceiveInput name, - SerializedVarOutParam exception, - bool* result) { - *result = ppb_var_target()->HasProperty(var.Get(dispatcher()), - name.Get(dispatcher()), - exception.OutParam(dispatcher())); -} - -void PPB_Var_Proxy::OnMsgHasMethodDeprecated(SerializedVarReceiveInput var, - SerializedVarReceiveInput name, - SerializedVarOutParam exception, - bool* result) { - *result = ppb_var_target()->HasMethod(var.Get(dispatcher()), - name.Get(dispatcher()), - exception.OutParam(dispatcher())); -} - -void PPB_Var_Proxy::OnMsgGetProperty(SerializedVarReceiveInput var, - SerializedVarReceiveInput name, - SerializedVarOutParam exception, - SerializedVarReturnValue result) { - result.Return(dispatcher(), ppb_var_target()->GetProperty( - var.Get(dispatcher()), name.Get(dispatcher()), - exception.OutParam(dispatcher()))); -} - -void PPB_Var_Proxy::OnMsgEnumerateProperties( - SerializedVarReceiveInput var, - std::vector<pp::proxy::SerializedVar>* props, - SerializedVarOutParam exception) { - // FIXME(brettw) write this. -} - -void PPB_Var_Proxy::OnMsgSetPropertyDeprecated( - SerializedVarReceiveInput var, - SerializedVarReceiveInput name, - SerializedVarReceiveInput value, - SerializedVarOutParam exception) { - ppb_var_target()->SetProperty(var.Get(dispatcher()), - name.Get(dispatcher()), - value.Get(dispatcher()), - exception.OutParam(dispatcher())); -} - -void PPB_Var_Proxy::OnMsgIsCallable(SerializedVarReceiveInput object, - bool* result) { - // FIXME(brettw) write this. -} - -void PPB_Var_Proxy::OnMsgDeleteProperty(SerializedVarReceiveInput var, - SerializedVarReceiveInput name, - SerializedVarOutParam exception, - bool* result) { - // FIXME(brettw) write this. -} - -void PPB_Var_Proxy::OnMsgCall( - SerializedVarReceiveInput object, - SerializedVarReceiveInput this_object, - SerializedVarReceiveInput method_name, - SerializedVarVectorReceiveInput arg_vector, - SerializedVarOutParam exception, - SerializedVarReturnValue result) { - // FIXME(brettw) write this. -} - -void PPB_Var_Proxy::OnMsgCallDeprecated( - SerializedVarReceiveInput object, - SerializedVarReceiveInput method_name, - SerializedVarVectorReceiveInput arg_vector, - SerializedVarOutParam exception, - SerializedVarReturnValue result) { - uint32_t arg_count = 0; - PP_Var* args = arg_vector.Get(dispatcher(), &arg_count); - result.Return(dispatcher(), ppb_var_target()->Call( - object.Get(dispatcher()), - method_name.Get(dispatcher()), - arg_count, args, - exception.OutParam(dispatcher()))); -} - -void PPB_Var_Proxy::OnMsgConstruct( - SerializedVarReceiveInput var, - SerializedVarVectorReceiveInput arg_vector, - SerializedVarOutParam exception, - SerializedVarReturnValue result) { - uint32_t arg_count = 0; - PP_Var* args = arg_vector.Get(dispatcher(), &arg_count); - result.Return(dispatcher(), ppb_var_target()->Construct( - var.Get(dispatcher()), arg_count, args, - exception.OutParam(dispatcher()))); -} - -void PPB_Var_Proxy::OnMsgIsInstanceOfDeprecated( - pp::proxy::SerializedVarReceiveInput var, - int64 ppp_class, - int64* ppp_class_data, - bool* result) { - // TODO(brettw) write this. -} - -void PPB_Var_Proxy::OnMsgCreateObjectDeprecated( - PP_Module module_id, - int64 ppp_class, - int64 ppp_class_data, - SerializedVarReturnValue result) { - result.Return(dispatcher(), ppb_var_target()->CreateObject( - module_id, - reinterpret_cast<const PPP_Class_Deprecated*>( - static_cast<intptr_t>(ppp_class)), - reinterpret_cast<void*>(static_cast<intptr_t>(ppp_class_data)))); -} - -} // namespace proxy -} // namespace pp diff --git a/ppapi/proxy/ppb_var_proxy.h b/ppapi/proxy/ppb_var_proxy.h deleted file mode 100644 index 2d58a76..0000000 --- a/ppapi/proxy/ppb_var_proxy.h +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PPB_VAR_PROXY_H_ -#define PPAPI_PPB_VAR_PROXY_H_ - -#include <vector> - -#include "ppapi/c/pp_instance.h" -#include "ppapi/c/pp_module.h" -#include "ppapi/proxy/interface_proxy.h" - -struct PPB_Var_Deprecated; - -namespace pp { -namespace proxy { - -class SerializedVar; -class SerializedVarReceiveInput; -class SerializedVarVectorReceiveInput; -class SerializedVarOutParam; -class SerializedVarReturnValue; - -class PPB_Var_Proxy : public InterfaceProxy { - public: - PPB_Var_Proxy(Dispatcher* dispatcher, const void* target_interface); - virtual ~PPB_Var_Proxy(); - - const PPB_Var_Deprecated* ppb_var_target() const { - return reinterpret_cast<const PPB_Var_Deprecated*>(target_interface()); - } - - // InterfaceProxy implementation. - virtual const void* GetSourceInterface() const; - virtual InterfaceID GetInterfaceId() const; - virtual void OnMessageReceived(const IPC::Message& msg); - - private: - // Message handlers. - void OnMsgConvertType(PP_Instance instance, - SerializedVarReceiveInput var, - int new_type, - SerializedVarOutParam exception, - SerializedVarReturnValue result); - void OnMsgHasProperty(SerializedVarReceiveInput var, - SerializedVarReceiveInput name, - SerializedVarOutParam exception, - bool* result); - void OnMsgHasMethodDeprecated(SerializedVarReceiveInput var, - SerializedVarReceiveInput name, - SerializedVarOutParam exception, - bool* result); - void OnMsgGetProperty(SerializedVarReceiveInput var, - SerializedVarReceiveInput name, - SerializedVarOutParam exception, - SerializedVarReturnValue result); - void OnMsgEnumerateProperties( - SerializedVarReceiveInput var, - std::vector<pp::proxy::SerializedVar>* props, - SerializedVarOutParam exception); - void OnMsgSetPropertyDeprecated(SerializedVarReceiveInput var, - SerializedVarReceiveInput name, - SerializedVarReceiveInput value, - SerializedVarOutParam exception); - void OnMsgIsCallable(SerializedVarReceiveInput object, bool* result); - void OnMsgDeleteProperty(SerializedVarReceiveInput var, - SerializedVarReceiveInput name, - SerializedVarOutParam exception, - bool* result); - void OnMsgCall(SerializedVarReceiveInput object, - SerializedVarReceiveInput this_object, - SerializedVarReceiveInput method_name, - SerializedVarVectorReceiveInput arg_vector, - SerializedVarOutParam exception, - SerializedVarReturnValue result); - void OnMsgCallDeprecated(SerializedVarReceiveInput object, - SerializedVarReceiveInput method_name, - SerializedVarVectorReceiveInput arg_vector, - SerializedVarOutParam exception, - SerializedVarReturnValue result); - void OnMsgConstruct(SerializedVarReceiveInput var, - SerializedVarVectorReceiveInput arg_vector, - SerializedVarOutParam exception, - SerializedVarReturnValue result); - void OnMsgIsInstanceOfDeprecated(pp::proxy::SerializedVarReceiveInput var, - int64 ppp_class, - int64* ppp_class_data, - bool* result); - void OnMsgCreateObjectDeprecated(PP_Module module_id, - int64 ppp_class, - int64 ppp_class_data, - SerializedVarReturnValue result); -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PPB_VAR_PROXY_H_ diff --git a/ppapi/proxy/ppp_class_proxy.cc b/ppapi/proxy/ppp_class_proxy.cc deleted file mode 100644 index bc9a0bc..0000000 --- a/ppapi/proxy/ppp_class_proxy.cc +++ /dev/null @@ -1,301 +0,0 @@ -// Copyright (c) 2010 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/ppp_class_proxy.h" - -#include "ppapi/c/dev/ppb_var_deprecated.h" -#include "ppapi/c/dev/ppp_class_deprecated.h" -#include "ppapi/proxy/dispatcher.h" -#include "ppapi/proxy/interface_id.h" -#include "ppapi/proxy/ppapi_messages.h" -#include "ppapi/proxy/serialized_var.h" - -namespace pp { -namespace proxy { - -namespace { - -// PPP_Class in the browser implementation ------------------------------------- - -// Represents a plugin-implemented class in the browser process. This just -// stores the data necessary to call back the plugin. -struct ObjectProxy { - ObjectProxy(Dispatcher* d, int64 p, int64 ud) - : dispatcher(d), - ppp_class(p), - user_data(ud) { - } - - Dispatcher* dispatcher; - int64 ppp_class; - int64 user_data; -}; - -ObjectProxy* ToObjectProxy(void* data) { - return reinterpret_cast<ObjectProxy*>(data); -} - -bool HasProperty(void* object, PP_Var name, PP_Var* exception) { - ObjectProxy* obj = ToObjectProxy(object); - bool result = false; - ReceiveSerializedException se(obj->dispatcher, exception); - obj->dispatcher->Send(new PpapiMsg_PPPClass_HasProperty( - INTERFACE_ID_PPP_CLASS, obj->ppp_class, obj->user_data, - SerializedVarSendInput(obj->dispatcher, name), &se, &result)); - return result; -} - -bool HasMethod(void* object, PP_Var name, PP_Var* exception) { - ObjectProxy* obj = ToObjectProxy(object); - bool result = false; - ReceiveSerializedException se(obj->dispatcher, exception); - obj->dispatcher->Send(new PpapiMsg_PPPClass_HasMethod( - INTERFACE_ID_PPP_CLASS, obj->ppp_class, obj->user_data, - SerializedVarSendInput(obj->dispatcher, name), &se, &result)); - return result; -} - -PP_Var GetProperty(void* object, - PP_Var name, - PP_Var* exception) { - ObjectProxy* obj = ToObjectProxy(object); - ReceiveSerializedException se(obj->dispatcher, exception); - ReceiveSerializedVarReturnValue result; - obj->dispatcher->Send(new PpapiMsg_PPPClass_GetProperty( - INTERFACE_ID_PPP_CLASS, obj->ppp_class, obj->user_data, - SerializedVarSendInput(obj->dispatcher, name), &se, &result)); - return result.Return(obj->dispatcher); -} - -void GetAllPropertyNames(void* object, - uint32_t* property_count, - PP_Var** properties, - PP_Var* exception) { - // FIXME -} - -void SetProperty(void* object, - PP_Var name, - PP_Var value, - PP_Var* exception) { - ObjectProxy* obj = ToObjectProxy(object); - ReceiveSerializedException se(obj->dispatcher, exception); - obj->dispatcher->Send(new PpapiMsg_PPPClass_SetProperty( - INTERFACE_ID_PPP_CLASS, obj->ppp_class, obj->user_data, - SerializedVarSendInput(obj->dispatcher, name), - SerializedVarSendInput(obj->dispatcher, value), &se)); -} - -void RemoveProperty(void* object, - PP_Var name, - PP_Var* exception) { - ObjectProxy* obj = ToObjectProxy(object); - ReceiveSerializedException se(obj->dispatcher, exception); - obj->dispatcher->Send(new PpapiMsg_PPPClass_RemoveProperty( - INTERFACE_ID_PPP_CLASS, obj->ppp_class, obj->user_data, - SerializedVarSendInput(obj->dispatcher, name), &se)); -} - -PP_Var Call(void* object, - PP_Var method_name, - uint32_t argc, - PP_Var* argv, - PP_Var* exception) { - ObjectProxy* obj = ToObjectProxy(object); - - ReceiveSerializedVarReturnValue result; - ReceiveSerializedException se(obj->dispatcher, exception); - std::vector<SerializedVar> argv_vect; - SerializedVarSendInput::ConvertVector(obj->dispatcher, argv, argc, - &argv_vect); - - obj->dispatcher->Send(new PpapiMsg_PPPClass_Call( - INTERFACE_ID_PPP_CLASS, obj->ppp_class, obj->user_data, - SerializedVarSendInput(obj->dispatcher, method_name), argv_vect, - &se, &result)); - return result.Return(obj->dispatcher); -} - -PP_Var Construct(void* object, - uint32_t argc, - PP_Var* argv, - PP_Var* exception) { - ObjectProxy* obj = ToObjectProxy(object); - - ReceiveSerializedVarReturnValue result; - ReceiveSerializedException se(obj->dispatcher, exception); - std::vector<SerializedVar> argv_vect; - SerializedVarSendInput::ConvertVector(obj->dispatcher, argv, argc, - &argv_vect); - - obj->dispatcher->Send(new PpapiMsg_PPPClass_Construct( - INTERFACE_ID_PPP_CLASS, - obj->ppp_class, obj->user_data, argv_vect, &se, &result)); - return result.Return(obj->dispatcher); -} - -void Deallocate(void* object) { - ObjectProxy* obj = ToObjectProxy(object); - obj->dispatcher->Send(new PpapiMsg_PPPClass_Deallocate( - INTERFACE_ID_PPP_CLASS, obj->ppp_class, obj->user_data)); - delete obj; -} - -const PPP_Class_Deprecated class_interface = { - &HasProperty, - &HasMethod, - &GetProperty, - &GetAllPropertyNames, - &SetProperty, - &RemoveProperty, - &Call, - &Construct, - &Deallocate -}; - -// Plugin helper functions ----------------------------------------------------- - -// Converts an int64 object from IPC to a PPP_Class* for calling into the -// plugin's implementation. -const PPP_Class_Deprecated* ToPPPClass(int64 value) { - return reinterpret_cast<const PPP_Class_Deprecated*>( - static_cast<intptr_t>(value)); -} - -// Converts an int64 object from IPC to a void* for calling into the plugin's -// implementation as the user data. -void* ToUserData(int64 value) { - return reinterpret_cast<void*>(static_cast<intptr_t>(value)); -} - -} // namespace - -// PPP_Class_Proxy ------------------------------------------------------------- - -PPP_Class_Proxy::PPP_Class_Proxy(Dispatcher* dispatcher) - : InterfaceProxy(dispatcher, NULL) { -} - -PPP_Class_Proxy::~PPP_Class_Proxy() { -} - -// static -PP_Var PPP_Class_Proxy::CreateProxiedObject(const PPB_Var_Deprecated* var, - Dispatcher* dispatcher, - PP_Module module_id, - int64 ppp_class, - int64 class_data) { - ObjectProxy* object_proxy = new ObjectProxy(dispatcher, - ppp_class, class_data); - return var->CreateObject(module_id, &class_interface, object_proxy); -} - -const void* PPP_Class_Proxy::GetSourceInterface() const { - return &class_interface; -} - -InterfaceID PPP_Class_Proxy::GetInterfaceId() const { - return INTERFACE_ID_PPP_CLASS; -} - -void PPP_Class_Proxy::OnMessageReceived(const IPC::Message& msg) { - IPC_BEGIN_MESSAGE_MAP(PPP_Class_Proxy, msg) - IPC_MESSAGE_HANDLER(PpapiMsg_PPPClass_HasProperty, - OnMsgHasProperty) - IPC_MESSAGE_HANDLER(PpapiMsg_PPPClass_HasMethod, - OnMsgHasMethod) - IPC_MESSAGE_HANDLER(PpapiMsg_PPPClass_GetProperty, - OnMsgGetProperty) - IPC_MESSAGE_HANDLER(PpapiMsg_PPPClass_EnumerateProperties, - OnMsgEnumerateProperties) - IPC_MESSAGE_HANDLER(PpapiMsg_PPPClass_SetProperty, - OnMsgSetProperty) - IPC_MESSAGE_HANDLER(PpapiMsg_PPPClass_Call, - OnMsgCall) - IPC_MESSAGE_HANDLER(PpapiMsg_PPPClass_Construct, - OnMsgConstruct) - IPC_MESSAGE_HANDLER(PpapiMsg_PPPClass_Deallocate, - OnMsgDeallocate) - IPC_END_MESSAGE_MAP() -} - -void PPP_Class_Proxy::OnMsgHasProperty(int64 ppp_class, int64 object, - SerializedVarReceiveInput property, - SerializedVarOutParam exception, - bool* result) { - *result = ToPPPClass(ppp_class)->HasProperty(ToUserData(object), - property.Get(dispatcher()), exception.OutParam(dispatcher())); -} - -void PPP_Class_Proxy::OnMsgHasMethod(int64 ppp_class, int64 object, - SerializedVarReceiveInput property, - SerializedVarOutParam exception, - bool* result) { - *result = ToPPPClass(ppp_class)->HasMethod(ToUserData(object), - property.Get(dispatcher()), exception.OutParam(dispatcher())); -} - -void PPP_Class_Proxy::OnMsgGetProperty(int64 ppp_class, int64 object, - SerializedVarReceiveInput property, - SerializedVarOutParam exception, - SerializedVarReturnValue result) { - result.Return(dispatcher(), ToPPPClass(ppp_class)->GetProperty( - ToUserData(object), property.Get(dispatcher()), - exception.OutParam(dispatcher()))); -} - -void PPP_Class_Proxy::OnMsgEnumerateProperties( - int64 ppp_class, int64 object, - std::vector<pp::proxy::SerializedVar>* props, - SerializedVarOutParam exception) { - // FIXME -} - -void PPP_Class_Proxy::OnMsgSetProperty(int64 ppp_class, int64 object, - SerializedVarReceiveInput property, - SerializedVarReceiveInput value, - SerializedVarOutParam exception) { - ToPPPClass(ppp_class)->SetProperty( - ToUserData(object), property.Get(dispatcher()), value.Get(dispatcher()), - exception.OutParam(dispatcher())); -} - -void PPP_Class_Proxy::OnMsgRemoveProperty(int64 ppp_class, int64 object, - SerializedVarReceiveInput property, - SerializedVarOutParam exception) { - ToPPPClass(ppp_class)->RemoveProperty( - ToUserData(object), property.Get(dispatcher()), - exception.OutParam(dispatcher())); -} - -void PPP_Class_Proxy::OnMsgCall( - int64 ppp_class, int64 object, - SerializedVarReceiveInput method_name, - SerializedVarVectorReceiveInput arg_vector, - SerializedVarOutParam exception, - SerializedVarReturnValue result) { - uint32_t arg_count = 0; - PP_Var* args = arg_vector.Get(dispatcher(), &arg_count); - result.Return(dispatcher(), ToPPPClass(ppp_class)->Call( - ToUserData(object), method_name.Get(dispatcher()), - arg_count, args, exception.OutParam(dispatcher()))); -} - -void PPP_Class_Proxy::OnMsgConstruct( - int64 ppp_class, int64 object, - SerializedVarVectorReceiveInput arg_vector, - SerializedVarOutParam exception, - SerializedVarReturnValue result) { - uint32_t arg_count = 0; - PP_Var* args = arg_vector.Get(dispatcher(), &arg_count); - result.Return(dispatcher(), ToPPPClass(ppp_class)->Construct( - ToUserData(object), arg_count, args, exception.OutParam(dispatcher()))); -} - -void PPP_Class_Proxy::OnMsgDeallocate(int64 ppp_class, int64 object) { - ToPPPClass(ppp_class)->Deallocate(ToUserData(object)); -} - -} // namespace proxy -} // namespace pp diff --git a/ppapi/proxy/ppp_class_proxy.h b/ppapi/proxy/ppp_class_proxy.h deleted file mode 100644 index b22d86a..0000000 --- a/ppapi/proxy/ppp_class_proxy.h +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PROXY_PPP_CLASS_PROXY_H_ -#define PPAPI_PROXY_PPP_CLASS_PROXY_H_ - -#include <vector> - -#include "base/basictypes.h" -#include "ppapi/c/pp_module.h" -#include "ppapi/c/pp_var.h" -#include "ppapi/proxy/interface_proxy.h" - -struct PPB_Var_Deprecated; -struct PPP_Class_Deprecated; - -namespace pp { -namespace proxy { - -class SerializedVar; -class SerializedVarReceiveInput; -class SerializedVarVectorReceiveInput; -class SerializedVarOutParam; -class SerializedVarReturnValue; - -class PPP_Class_Proxy : public InterfaceProxy { - public: - // PPP_Class isn't a normal interface that you can query for, so this - // constructor doesn't take an interface pointer. - PPP_Class_Proxy(Dispatcher* dispatcher); - virtual ~PPP_Class_Proxy(); - - // Creates a proxied object in the browser process. This takes the browser's - // PPB_Var_Deprecated interface to use to create the object. The class and - static PP_Var CreateProxiedObject(const PPB_Var_Deprecated* var, - Dispatcher* dispatcher, - PP_Module module_id, - int64 ppp_class, - int64 class_data); - - // InterfaceProxy implementation. - virtual const void* GetSourceInterface() const; - virtual InterfaceID GetInterfaceId() const; - virtual void OnMessageReceived(const IPC::Message& msg); - - private: - // IPC message handlers. - void OnMsgHasProperty(int64 ppp_class, int64 object, - SerializedVarReceiveInput property, - SerializedVarOutParam exception, - bool* result); - void OnMsgHasMethod(int64 ppp_class, int64 object, - SerializedVarReceiveInput property, - SerializedVarOutParam exception, - bool* result); - void OnMsgGetProperty(int64 ppp_class, int64 object, - SerializedVarReceiveInput property, - SerializedVarOutParam exception, - SerializedVarReturnValue result); - void OnMsgEnumerateProperties( - int64 ppp_class, int64 object, - std::vector<pp::proxy::SerializedVar>* props, - SerializedVarOutParam exception); - void OnMsgSetProperty(int64 ppp_class, int64 object, - SerializedVarReceiveInput property, - SerializedVarReceiveInput value, - SerializedVarOutParam exception); - void OnMsgRemoveProperty(int64 ppp_class, int64 object, - SerializedVarReceiveInput property, - SerializedVarOutParam exception); - void OnMsgCall(int64 ppp_class, int64 object, - SerializedVarReceiveInput method_name, - SerializedVarVectorReceiveInput arg_vector, - SerializedVarOutParam exception, - SerializedVarReturnValue result); - void OnMsgConstruct(int64 ppp_class, int64 object, - SerializedVarVectorReceiveInput arg_vector, - SerializedVarOutParam exception, - SerializedVarReturnValue result); - void OnMsgDeallocate(int64 ppp_class, int64 object); - - DISALLOW_COPY_AND_ASSIGN(PPP_Class_Proxy); -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PROXY_PPP_CLASS_PROXY_H_ diff --git a/ppapi/proxy/ppp_instance_proxy.cc b/ppapi/proxy/ppp_instance_proxy.cc deleted file mode 100644 index 770c562..0000000 --- a/ppapi/proxy/ppp_instance_proxy.cc +++ /dev/null @@ -1,198 +0,0 @@ -// Copyright (c) 2010 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/ppp_instance_proxy.h" - -#include <algorithm> - -#include "ppapi/c/pp_var.h" -#include "ppapi/c/ppp_instance.h" -#include "ppapi/proxy/host_dispatcher.h" -#include "ppapi/proxy/ppapi_message_helpers.h" -#include "ppapi/proxy/ppapi_messages.h" - -namespace pp { -namespace proxy { - -namespace { - -bool DidCreate(PP_Instance instance, - uint32_t argc, - const char* argn[], - const char* argv[]) { - std::vector<std::string> argn_vect; - std::vector<std::string> argv_vect; - for (uint32_t i = 0; i < argc; i++) { - argn_vect.push_back(std::string(argn[i])); - argv_vect.push_back(std::string(argv[i])); - } - - bool result = false; - HostDispatcher::GetForInstance(instance)->Send( - new PpapiMsg_PPPInstance_DidCreate(INTERFACE_ID_PPP_INSTANCE, instance, - argn_vect, argv_vect, &result)); - return result; -} - -void DidDestroy(PP_Instance instance) { - HostDispatcher::GetForInstance(instance)->Send( - new PpapiMsg_PPPInstance_DidDestroy(INTERFACE_ID_PPP_INSTANCE, instance)); -} - -void DidChangeView(PP_Instance instance, - const PP_Rect* position, - const PP_Rect* clip) { - HostDispatcher::GetForInstance(instance)->Send( - new PpapiMsg_PPPInstance_DidChangeView(INTERFACE_ID_PPP_INSTANCE, - instance, *position, *clip)); -} - -void DidChangeFocus(PP_Instance instance, bool has_focus) { - HostDispatcher::GetForInstance(instance)->Send( - new PpapiMsg_PPPInstance_DidChangeFocus(INTERFACE_ID_PPP_INSTANCE, - instance, has_focus)); -} - -bool HandleInputEvent(PP_Instance instance, - const PP_InputEvent* event) { - bool result = false; - HostDispatcher::GetForInstance(instance)->Send( - new PpapiMsg_PPPInstance_HandleInputEvent(INTERFACE_ID_PPP_INSTANCE, - instance, *event, &result)); - return result; -} - -bool HandleDocumentLoad(PP_Instance instance, - PP_Resource url_loader) { - bool result = false; - HostDispatcher::GetForInstance(instance)->Send( - new PpapiMsg_PPPInstance_HandleDocumentLoad(INTERFACE_ID_PPP_INSTANCE, - instance, url_loader, - &result)); - return result; -} - -PP_Var GetInstanceObject(PP_Instance instance) { - Dispatcher* dispatcher = HostDispatcher::GetForInstance(instance); - ReceiveSerializedVarReturnValue result; - dispatcher->Send(new PpapiMsg_PPPInstance_GetInstanceObject( - instance, INTERFACE_ID_PPP_INSTANCE, &result)); - return result.Return(dispatcher); -} - -static const PPP_Instance instance_interface = { - &DidCreate, - &DidDestroy, - &DidChangeView, - &DidChangeFocus, - &HandleInputEvent, - &HandleDocumentLoad, - &GetInstanceObject -}; - -} // namespace - -PPP_Instance_Proxy::PPP_Instance_Proxy(Dispatcher* dispatcher, - const void* target_interface) - : InterfaceProxy(dispatcher, target_interface) { -} - -PPP_Instance_Proxy::~PPP_Instance_Proxy() { -} - -const void* PPP_Instance_Proxy::GetSourceInterface() const { - return &instance_interface; -} - -InterfaceID PPP_Instance_Proxy::GetInterfaceId() const { - return INTERFACE_ID_PPP_INSTANCE; -} - -void PPP_Instance_Proxy::OnMessageReceived(const IPC::Message& msg) { - IPC_BEGIN_MESSAGE_MAP(PPP_Instance_Proxy, msg) - IPC_MESSAGE_HANDLER(PpapiMsg_PPPInstance_DidCreate, - OnMsgDidCreate) - IPC_MESSAGE_HANDLER(PpapiMsg_PPPInstance_DidDestroy, - OnMsgDidDestroy) - IPC_MESSAGE_HANDLER(PpapiMsg_PPPInstance_DidChangeView, - OnMsgDidChangeView) - IPC_MESSAGE_HANDLER(PpapiMsg_PPPInstance_DidChangeFocus, - OnMsgDidChangeFocus) - IPC_MESSAGE_HANDLER(PpapiMsg_PPPInstance_HandleInputEvent, - OnMsgHandleInputEvent) - IPC_MESSAGE_HANDLER(PpapiMsg_PPPInstance_HandleDocumentLoad, - OnMsgHandleDocumentLoad) - IPC_MESSAGE_HANDLER(PpapiMsg_PPPInstance_GetInstanceObject, - OnMsgGetInstanceObject) - IPC_END_MESSAGE_MAP() -} - -void PPP_Instance_Proxy::OnMsgDidCreate( - PP_Instance instance, - const std::vector<std::string>& argn, - const std::vector<std::string>& argv, - bool* result) { - *result = false; - if (argn.size() != argv.size()) - return; - - // Make sure the arrays always have at least one element so we can take the - // address below. - std::vector<const char*> argn_array; - std::vector<const char*> argv_array; - argn_array.resize(std::max(static_cast<size_t>(1), argn.size())); - argv_array.resize(std::max(static_cast<size_t>(1), argn.size())); - for (size_t i = 0; i < argn.size(); i++) { - argn_array[i] = argn[i].c_str(); - argv_array[i] = argv[i].c_str(); - } - - DCHECK(ppp_instance_target()); - *result = ppp_instance_target()->DidCreate(instance, - static_cast<uint32_t>(argn.size()), - &argn_array[0], &argv_array[0]); - DCHECK(*result); -} - -void PPP_Instance_Proxy::OnMsgDidDestroy(PP_Instance instance) { - ppp_instance_target()->DidDestroy(instance); -} - -void PPP_Instance_Proxy::OnMsgDidChangeView(PP_Instance instance, - const PP_Rect& position, - const PP_Rect& clip) { - ppp_instance_target()->DidChangeView(instance, &position, &clip); -} - -void PPP_Instance_Proxy::OnMsgDidChangeFocus(PP_Instance instance, - bool has_focus) { - ppp_instance_target()->DidChangeFocus(instance, has_focus); -} - -void PPP_Instance_Proxy::OnMsgHandleInputEvent(PP_Instance instance, - const PP_InputEvent& event, - bool* result) { - *result = ppp_instance_target()->HandleInputEvent(instance, &event); -} - -void PPP_Instance_Proxy::OnMsgHandleDocumentLoad(PP_Instance instance, - PP_Resource url_loader, - bool* result) { - NOTREACHED(); - /* TODO(brettw) write this. We need to convert the PP_Resource to a URL - loader proxy resource + object, but that currently isn't implemented. - *result = ppp_instance_target()->HandleDocumentLoad( - instance, url_loader DO SOMETHING WITH THIS); - */ -} - -void PPP_Instance_Proxy::OnMsgGetInstanceObject( - PP_Instance instance, - SerializedVarReturnValue result) { - result.Return(dispatcher(), - ppp_instance_target()->GetInstanceObject(instance)); -} - -} // namespace proxy -} // namespace pp diff --git a/ppapi/proxy/ppp_instance_proxy.h b/ppapi/proxy/ppp_instance_proxy.h deleted file mode 100644 index 9fe40b9..0000000 --- a/ppapi/proxy/ppp_instance_proxy.h +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PROXY_PPP_INSTANCE_PROXY_H_ -#define PPAPI_PROXY_PPP_INSTANCE_PROXY_H_ - -#include <string> -#include <vector> - -#include "ppapi/c/pp_instance.h" -#include "ppapi/c/pp_resource.h" -#include "ppapi/c/pp_var.h" -#include "ppapi/proxy/interface_proxy.h" - -struct PP_InputEvent; -struct PP_Rect; -struct PPP_Instance; - -namespace pp { -namespace proxy { - -class SerializedVarReturnValue; - -class PPP_Instance_Proxy : public InterfaceProxy { - public: - PPP_Instance_Proxy(Dispatcher* dispatcher, const void* target_interface); - virtual ~PPP_Instance_Proxy(); - - const PPP_Instance* ppp_instance_target() const { - return reinterpret_cast<const PPP_Instance*>(target_interface()); - } - - // InterfaceProxy implementation. - virtual const void* GetSourceInterface() const; - virtual InterfaceID GetInterfaceId() const; - virtual void OnMessageReceived(const IPC::Message& msg); - - private: - // Message handlers. - void OnMsgDidCreate(PP_Instance instance, - const std::vector<std::string>& argn, - const std::vector<std::string>& argv, - bool* result); - void OnMsgDidDestroy(PP_Instance instance); - void OnMsgDidChangeView(PP_Instance instance, - const PP_Rect& position, - const PP_Rect& clip); - void OnMsgDidChangeFocus(PP_Instance instance, bool has_focus); - void OnMsgHandleInputEvent(PP_Instance instance, - const PP_InputEvent& event, - bool* result); - void OnMsgHandleDocumentLoad(PP_Instance instance, - PP_Resource url_loader, - bool* result); - void OnMsgGetInstanceObject(PP_Instance instance, - SerializedVarReturnValue result); -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PROXY_PPP_INSTANCE_PROXY_H_ diff --git a/ppapi/proxy/serialized_var.cc b/ppapi/proxy/serialized_var.cc deleted file mode 100644 index a76f219..0000000 --- a/ppapi/proxy/serialized_var.cc +++ /dev/null @@ -1,457 +0,0 @@ -// Copyright (c) 2010 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/serialized_var.h" - -#include "base/logging.h" -#include "ipc/ipc_message_utils.h" -#include "ppapi/proxy/dispatcher.h" -#include "ppapi/proxy/ppapi_param_traits.h" -#include "ppapi/proxy/var_serialization_rules.h" - -namespace pp { -namespace proxy { - -// SerializedVar::Inner -------------------------------------------------------- - -SerializedVar::Inner::Inner() - : serialization_rules_(NULL), - var_(PP_MakeUndefined()), - cleanup_mode_(CLEANUP_NONE) { -#ifndef NDEBUG - has_been_serialized_ = false; - has_been_deserialized_ = false; -#endif -} - -SerializedVar::Inner::Inner(VarSerializationRules* serialization_rules) - : serialization_rules_(serialization_rules), - var_(PP_MakeUndefined()), - cleanup_mode_(CLEANUP_NONE) { -#ifndef NDEBUG - has_been_serialized_ = false; - has_been_deserialized_ = false; -#endif -} - -SerializedVar::Inner::Inner(VarSerializationRules* serialization_rules, - const PP_Var& var) - : serialization_rules_(serialization_rules), - var_(var), - cleanup_mode_(CLEANUP_NONE) { -#ifndef NDEBUG - has_been_serialized_ = false; - has_been_deserialized_ = false; -#endif -} - -SerializedVar::Inner::~Inner() { - switch (cleanup_mode_) { - case END_SEND_PASS_REF: - serialization_rules_->EndSendPassRef(var_); - break; - case END_RECEIVE_CALLER_OWNED: - serialization_rules_->EndReceiveCallerOwned(var_); - break; - default: - break; - } -} - -PP_Var SerializedVar::Inner::GetVar() const { - DCHECK(serialization_rules_); - - // If we're a string var, we should have already converted the string value - // to a var ID. - DCHECK(var_.type != PP_VARTYPE_STRING || var_.value.as_id != 0); - return var_; -} - -PP_Var SerializedVar::Inner::GetIncompleteVar() const { - DCHECK(serialization_rules_); - return var_; -} - -void SerializedVar::Inner::SetVar(PP_Var var) { - // Sanity check, when updating the var we should have received a - // serialization rules pointer already. - DCHECK(serialization_rules_); - var_ = var; -} - -const std::string& SerializedVar::Inner::GetString() const { - DCHECK(serialization_rules_); - return string_value_; -} - -std::string* SerializedVar::Inner::GetStringPtr() { - DCHECK(serialization_rules_); - return &string_value_; -} - -void SerializedVar::Inner::WriteToMessage(IPC::Message* m) const { - // When writing to the IPC messages, a serization rules handler should - // always have been set. - // - // When sending a message, it should be difficult to trigger this if you're - // using the SerializedVarSendInput class and giving a non-NULL dispatcher. - // Make sure you're using the proper "Send" helper class. - // - // It should be more common to see this when handling an incoming message - // that returns a var. This means the message handler didn't write to the - // output parameter, or possibly you used the wrong helper class - // (normally SerializedVarReturnValue). - DCHECK(serialization_rules_); - -#ifndef NDEBUG - // We should only be serializing something once. - DCHECK(!has_been_serialized_); - has_been_serialized_ = true; -#endif - - // If the var is not a string type, we should not have ended up with any - // string data. - DCHECK(var_.type == PP_VARTYPE_STRING || string_value_.empty()); - - m->WriteInt(static_cast<int>(var_.type)); - switch (var_.type) { - case PP_VARTYPE_UNDEFINED: - case PP_VARTYPE_NULL: - // These don't need any data associated with them other than the type we - // just serialized. - break; - case PP_VARTYPE_BOOL: - m->WriteBool(var_.value.as_bool); - break; - case PP_VARTYPE_INT32: - m->WriteInt(var_.value.as_int); - break; - case PP_VARTYPE_DOUBLE: - IPC::ParamTraits<double>::Write(m, var_.value.as_double); - break; - case PP_VARTYPE_STRING: - // TODO(brettw) in the case of an invalid string ID, it would be nice - // to send something to the other side such that a 0 ID would be - // generated there. Then the function implementing the interface can - // handle the invalid string as if it was in process rather than seeing - // what looks like a valid empty string. - m->WriteString(string_value_); - break; - case PP_VARTYPE_OBJECT: - m->WriteInt64(var_.value.as_id); - break; - } -} - -bool SerializedVar::Inner::ReadFromMessage(const IPC::Message* m, void** iter) { -#ifndef NDEBUG - // We should only deserialize something once or will end up with leaked - // references. - // - // One place this has happened in the past is using - // std::vector<SerializedVar>.resize(). If you're doing this manually instead - // of using the helper classes for handling in/out vectors of vars, be - // sure you use the same pattern as the SerializedVarVector classes. - DCHECK(!has_been_deserialized_); - has_been_deserialized_ = true; -#endif - - // When reading, the dispatcher should be set when we get a Deserialize - // call (which will supply a dispatcher). - int type; - if (!m->ReadInt(iter, &type)) - return false; - - bool success = false; - switch (type) { - case PP_VARTYPE_UNDEFINED: - case PP_VARTYPE_NULL: - // These don't have any data associated with them other than the type we - // just serialized. - success = true; - break; - case PP_VARTYPE_BOOL: - success = m->ReadBool(iter, &var_.value.as_bool); - break; - case PP_VARTYPE_INT32: - success = m->ReadInt(iter, &var_.value.as_int); - break; - case PP_VARTYPE_DOUBLE: - success = IPC::ParamTraits<double>::Read(m, iter, &var_.value.as_double); - break; - case PP_VARTYPE_STRING: - success = m->ReadString(iter, &string_value_); - var_.value.as_id = 0; - break; - case PP_VARTYPE_OBJECT: - success = m->ReadInt64(iter, &var_.value.as_id); - break; - default: - // Leave success as false. - break; - } - - // All success cases get here. We avoid writing the type above so that the - // output param is untouched (defaults to VARTYPE_UNDEFINED) even in the - // failure case. - if (success) - var_.type = static_cast<PP_VarType>(type); - return success; -} - -// SerializedVar --------------------------------------------------------------- - -SerializedVar::SerializedVar() : inner_(new Inner) { -} - -SerializedVar::SerializedVar(VarSerializationRules* serialization_rules) - : inner_(new Inner(serialization_rules)) { -} - -SerializedVar::SerializedVar(VarSerializationRules* serialization_rules, - const PP_Var& var) - : inner_(new Inner(serialization_rules, var)) { -} - -SerializedVar::~SerializedVar() { -} - -// SerializedVarSendInput ------------------------------------------------------ - -SerializedVarSendInput::SerializedVarSendInput(Dispatcher* dispatcher, - const PP_Var& var) - : SerializedVar(dispatcher->serialization_rules(), var) { - dispatcher->serialization_rules()->SendCallerOwned(var, GetStringPtr()); -} - -// static -void SerializedVarSendInput::ConvertVector(Dispatcher* dispatcher, - const PP_Var* input, - size_t input_count, - std::vector<SerializedVar>* output) { - output->resize(input_count); - for (size_t i = 0; i < input_count; i++) { - (*output)[i] = SerializedVar(dispatcher->serialization_rules(), input[i]); - dispatcher->serialization_rules()->SendCallerOwned(input[i], - (*output)[i].GetStringPtr()); - } -} - -// ReceiveSerializedVarReturnValue --------------------------------------------- - -ReceiveSerializedVarReturnValue::ReceiveSerializedVarReturnValue() { -} - -PP_Var ReceiveSerializedVarReturnValue::Return(Dispatcher* dispatcher) { - set_serialization_rules(dispatcher->serialization_rules()); - SetVar(serialization_rules()->ReceivePassRef(GetIncompleteVar(), - GetString())); - return GetVar(); -} - -// ReceiveSerializedException -------------------------------------------------- - -ReceiveSerializedException::ReceiveSerializedException(Dispatcher* dispatcher, - PP_Var* exception) - : SerializedVar(dispatcher->serialization_rules()), - exception_(exception) { -} - -ReceiveSerializedException::~ReceiveSerializedException() { - if (exception_) { - // When an output exception is specified, it will take ownership of the - // reference. - SetVar(serialization_rules()->ReceivePassRef(GetIncompleteVar(), - GetString())); - *exception_ = GetVar(); - } else { - // When no output exception is specified, the browser thinks we have a ref - // to an object that we don't want (this will happen only in the plugin - // since the browser will always specify an out exception for the plugin to - // write into). - // - // Strings don't need this handling since we can just avoid creating a - // Var from the std::string in the first place. - if (GetVar().type == PP_VARTYPE_OBJECT) - serialization_rules()->ReleaseObjectRef(GetVar()); - } -} - -bool ReceiveSerializedException::IsThrown() const { - return exception_ && exception_->type != PP_VARTYPE_UNDEFINED; -} - -// ReceiveSerializedVarVectorOutParam ------------------------------------------ - -ReceiveSerializedVarVectorOutParam::ReceiveSerializedVarVectorOutParam( - Dispatcher* dispatcher, - uint32_t* output_count, - PP_Var** output) - : dispatcher_(dispatcher), - output_count_(output_count), - output_(output) { -} - -ReceiveSerializedVarVectorOutParam::~ReceiveSerializedVarVectorOutParam() { - *output_count_ = static_cast<uint32_t>(vector_.size()); - if (!vector_.size()) { - *output_ = NULL; - return; - } - - *output_ = static_cast<PP_Var*>(malloc(vector_.size() * sizeof(PP_Var))); - for (size_t i = 0; i < vector_.size(); i++) { - // Here we just mimic what happens when returning a value. - ReceiveSerializedVarReturnValue converted; - SerializedVar* serialized = &converted; - *serialized = vector_[i]; - (*output_)[i] = converted.Return(dispatcher_); - } -} - -std::vector<SerializedVar>* ReceiveSerializedVarVectorOutParam::OutParam() { - return &vector_; -} - -// SerializedVarReceiveInput --------------------------------------------------- - -SerializedVarReceiveInput::SerializedVarReceiveInput( - const SerializedVar& serialized) - : serialized_(serialized), - dispatcher_(NULL), - var_(PP_MakeUndefined()) { -} - -SerializedVarReceiveInput::~SerializedVarReceiveInput() { -} - -PP_Var SerializedVarReceiveInput::Get(Dispatcher* dispatcher) { - serialized_.set_serialization_rules(dispatcher->serialization_rules()); - - // Ensure that when the serialized var goes out of scope it cleans up the - // stuff we're making in BeginReceiveCallerOwned. - serialized_.set_cleanup_mode(SerializedVar::END_RECEIVE_CALLER_OWNED); - - serialized_.SetVar( - serialized_.serialization_rules()->BeginReceiveCallerOwned( - serialized_.GetIncompleteVar(), serialized_.GetStringPtr())); - return serialized_.GetVar(); -} - -// SerializedVarVectorReceiveInput --------------------------------------------- - -SerializedVarVectorReceiveInput::SerializedVarVectorReceiveInput( - const std::vector<SerializedVar>& serialized) - : serialized_(serialized) { -} - -SerializedVarVectorReceiveInput::~SerializedVarVectorReceiveInput() { - for (size_t i = 0; i < deserialized_.size(); i++) { - serialized_[i].serialization_rules()->EndReceiveCallerOwned( - deserialized_[i]); - } -} - -PP_Var* SerializedVarVectorReceiveInput::Get(Dispatcher* dispatcher, - uint32_t* array_size) { - deserialized_.resize(serialized_.size()); - for (size_t i = 0; i < serialized_.size(); i++) { - // The vector must be able to clean themselves up after this call is - // torn down. - serialized_[i].set_serialization_rules(dispatcher->serialization_rules()); - - serialized_[i].SetVar( - serialized_[i].serialization_rules()->BeginReceiveCallerOwned( - serialized_[i].GetIncompleteVar(), serialized_[i].GetStringPtr())); - deserialized_[i] = serialized_[i].GetVar(); - } - - *array_size = static_cast<uint32_t>(serialized_.size()); - return deserialized_.size() > 0 ? &deserialized_[0] : NULL; -} - -// SerializedVarReturnValue ---------------------------------------------------- - -SerializedVarReturnValue::SerializedVarReturnValue(SerializedVar* serialized) - : serialized_(serialized) { -} - -void SerializedVarReturnValue::Return(Dispatcher* dispatcher, - const PP_Var& var) { - serialized_->set_serialization_rules(dispatcher->serialization_rules()); - serialized_->SetVar(var); - - // Var must clean up after our BeginSendPassRef call. - serialized_->set_cleanup_mode(SerializedVar::END_SEND_PASS_REF); - - dispatcher->serialization_rules()->BeginSendPassRef( - serialized_->GetIncompleteVar(), serialized_->GetStringPtr()); -} - -// SerializedVarOutParam ------------------------------------------------------- - -SerializedVarOutParam::SerializedVarOutParam(SerializedVar* serialized) - : serialized_(serialized), - writable_var_(PP_MakeUndefined()) { -} - -SerializedVarOutParam::~SerializedVarOutParam() { - if (serialized_->serialization_rules()) { - // When unset, OutParam wasn't called. We'll just leave the var untouched - // in that case. - serialized_->SetVar(writable_var_); - serialized_->serialization_rules()->BeginSendPassRef( - writable_var_, serialized_->GetStringPtr()); - - // Normally the current object will be created on the stack to wrap a - // SerializedVar and won't have a scope around the actual IPC send. So we - // need to tell the SerializedVar to do the begin/end send pass ref calls. - serialized_->set_cleanup_mode(SerializedVar::END_SEND_PASS_REF); - } -} - -PP_Var* SerializedVarOutParam::OutParam(Dispatcher* dispatcher) { - serialized_->set_serialization_rules(dispatcher->serialization_rules()); - return &writable_var_; -} - -// SerializedVarVectorOutParam ------------------------------------------------- - -SerializedVarVectorOutParam::SerializedVarVectorOutParam( - std::vector<SerializedVar>* serialized) - : dispatcher_(NULL), - serialized_(serialized), - count_(0), - array_(NULL) { -} - -SerializedVarVectorOutParam::~SerializedVarVectorOutParam() { - DCHECK(dispatcher_); - - // Convert the array written by the pepper code to the serialized structure. - // Note we can't use resize here, we have to allocate a new SerializedVar - // for each serialized item. See ParamTraits<vector<SerializedVar>>::Read. - serialized_->reserve(count_); - for (uint32_t i = 0; i < count_; i++) { - // Just mimic what we do for regular OutParams. - SerializedVar var; - SerializedVarOutParam out(&var); - *out.OutParam(dispatcher_) = array_[i]; - serialized_->push_back(var); - } - - // When returning arrays, the pepper code expects the caller to take - // ownership of the array. - free(array_); -} - -PP_Var** SerializedVarVectorOutParam::ArrayOutParam(Dispatcher* dispatcher) { - DCHECK(!dispatcher_); // Should only be called once. - dispatcher_ = dispatcher; - return &array_; -} - -} // namespace proxy -} // namespace pp - diff --git a/ppapi/proxy/serialized_var.h b/ppapi/proxy/serialized_var.h deleted file mode 100644 index 4d4230d..0000000 --- a/ppapi/proxy/serialized_var.h +++ /dev/null @@ -1,451 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PROXY_SERIALIZED_VAR_H_ -#define PPAPI_PROXY_SERIALIZED_VAR_H_ - -#include <string> -#include <vector> - -#include "base/basictypes.h" -#include "base/linked_ptr.h" -#include "ppapi/c/pp_var.h" - -namespace IPC { -class Message; -} - -namespace pp { -namespace proxy { - -class Dispatcher; -class VarSerializationRules; - -// This class encapsulates a var so that we can serialize and deserialize it -// The problem is that for strings, serialization and deserialization requires -// knowledge from outside about how to get at or create a string. So this -// object groups the var with a dispatcher so that string values can be set or -// gotten. -// -// Declare IPC messages as using this type, but don't use it directly (it has -// no useful public methods). Instead, instantiate one of the helper classes -// below which are conveniently named for each use case to prevent screwups. -// -// Design background -// ----------------- -// This is sadly super complicated. The IPC must all use the same type and it -// must include a var and a dispatcher (this is a SerializedVar). But there are -// many combinations of proper reference counting for sending and receiving -// different types and when different data is avaliable (like the Dispatcher is -// not available at IPC read time). So SerializedVar has to encapsulate all of -// these modes. -// -// This makes SerializedVar complicate and easy to mess up. To make it -// reasonable to use all functions are protected and there are a use-specific -// classes that encapsulate exactly one type of use in a way that typically -// won't compile if you do the wrong thing. -// -// The IPC system is designed to pass things around and will make copies in -// some cases, so our system must be designed so that this stuff will work. -// This is challenging when the SerializedVar must to some cleanup after the -// message is sent. To work around this, we create an inner class using a -// linked_ptr so all copies of a SerializedVar can share and we can guarantee -// that the actual data will get cleaned up on shutdown. -// -// Constness -// --------- -// SerializedVar basically doesn't support const. Everything is mutable and -// most functions are declared const. This unfortunateness is because of the -// way the IPC system works. When deserializing, it will have a const -// SerializedVar in a Tuple and this will be given to the function. We kind of -// want to modify that to convert strings and do refcounting. -// -// The helper classes used for accessing the SerializedVar have more reasonable -// behavior and will enforce that you don't do stupid things. -class SerializedVar { - public: - enum CleanupMode { - // The serialized var won't do anything special in the destructor (default). - CLEANUP_NONE, - - // The serialized var will call EndSendPassRef in the destructor. - END_SEND_PASS_REF, - - // The serialized var will call EndReceiveCallerOwned in the destructor. - END_RECEIVE_CALLER_OWNED - }; - - SerializedVar(); - ~SerializedVar(); - - // Backend implementation for IPC::ParamTraits<SerializedVar>. - void WriteToMessage(IPC::Message* m) const { - inner_->WriteToMessage(m); - } - bool ReadFromMessage(const IPC::Message* m, void** iter) { - return inner_->ReadFromMessage(m, iter); - } - - protected: - friend class SerializedVarReceiveInput; - friend class SerializedVarReturnValue; - friend class SerializedVarOutParam; - friend class SerializedVarSendInput; - friend class SerializedVarVectorReceiveInput; - - SerializedVar(VarSerializationRules* serialization_rules); - SerializedVar(VarSerializationRules* serialization, const PP_Var& var); - - VarSerializationRules* serialization_rules() const { - return inner_->serialization_rules(); - } - void set_serialization_rules(VarSerializationRules* s) const { - inner_->set_serialization_rules(s); - } - - void set_cleanup_mode(CleanupMode cm) const { - inner_->set_cleanup_mode(cm); - } - - // Returns the completed var for this object. The serialization rules must - // have been set already, and any string conversions must already have - // happened. - PP_Var GetVar() const { - return inner_->GetVar(); - } - - // Returns the var which has not had a string serialization happen yet. This - // is used for actually converting a string PP_Var to the string literal. - PP_Var GetIncompleteVar() const { - return inner_->GetIncompleteVar(); - } - - void SetVar(const PP_Var& var) const { - inner_->SetVar(var); - } - - // When this serialized var is a string var, returns the associated string. - // with the value. This can be called if the var isn't a string, but will - // just return the empty string in this case. - const std::string& GetString() const { - return inner_->GetString(); - } - - // Returns a pointer to the inner string associated with this class. The - // derived classes will use this when converting a PP_Var to the string - // literal. This can be called if the var isn't a string, but the value - // should not be written to (this simplifies the callers who can always pass - // the result of this function call to the VarSerializationRules classes). - std::string* GetStringPtr() const { - return inner_->GetStringPtr(); - } - - private: - class Inner { - public: - Inner(); - Inner(VarSerializationRules* serialization_rules); - Inner(VarSerializationRules* serialization_rules, const PP_Var& var); - ~Inner(); - - VarSerializationRules* serialization_rules() { - return serialization_rules_; - } - void set_serialization_rules(VarSerializationRules* serialization_rules) { - serialization_rules_ = serialization_rules; - } - - void set_cleanup_mode(CleanupMode cm) { cleanup_mode_ = cm; } - - // See outer class's declarations above. - PP_Var GetVar() const; - PP_Var GetIncompleteVar() const; - void SetVar(PP_Var var); - const std::string& GetString() const; - std::string* GetStringPtr(); - - void WriteToMessage(IPC::Message* m) const; - bool ReadFromMessage(const IPC::Message* m, void** iter); - - private: - // Rules for serializing and deserializing vars for this process type. - // This may be NULL, but must be set before trying to serialize to IPC when - // sending, or before converting back to a PP_Var when receiving. - VarSerializationRules* serialization_rules_; - - // If this is set to VARTYPE_STRING and the 'value.id' is 0, then the - // string_value_ contains the string. This means that the caller hasn't - // called Deserialize with a valid Dispatcher yet, which is how we can - // convert the serialized string value to a PP_Var string ID. - // - // This var may not be complete until the serialization rules are set when - // reading from IPC since we'll need that to convert the string_value to - // a string ID. Before this, the as_id will be 0 for VARTYPE_STRING. - PP_Var var_; - - // Holds the literal string value to/from IPC. This will be valid of the - // var_ is VARTYPE_STRING. - std::string string_value_; - - CleanupMode cleanup_mode_; - -#ifndef NDEBUG - // When being sent or received over IPC, we should only be serialized or - // deserialized once. These flags help us assert this is true. - mutable bool has_been_serialized_; - mutable bool has_been_deserialized_; -#endif - - DISALLOW_COPY_AND_ASSIGN(Inner); - }; - - mutable linked_ptr<Inner> inner_; -}; - -// Helpers for message sending side -------------------------------------------- - -// For sending a value to the remote side. -// -// Example for API: -// void MyFunction(PP_Var) -// IPC message: -// IPC_MESSAGE_ROUTED1(MyFunction, SerializedVar); -// Sender would be: -// void MyFunctionProxy(PP_Var param) { -// Send(new MyFunctionMsg(SerializedVarSendInput(param)); -// } -class SerializedVarSendInput : public SerializedVar { - public: - SerializedVarSendInput(Dispatcher* dispatcher, const PP_Var& var); - - // Helper function for serializing a vector of input vars for serialization. - static void ConvertVector(Dispatcher* dispatcher, - const PP_Var* input, - size_t input_count, - std::vector<SerializedVar>* output); - - private: - // Disallow the empty constructor, but keep the default copy constructor - // which is required to send the object to the IPC system. - SerializedVarSendInput(); -}; - -// For the calling side of a function returning a var. The sending side uses -// SerializedVarReturnValue. -// -// Example for API: -// PP_Var MyFunction() -// IPC message: -// IPC_SYNC_MESSAGE_ROUTED0_1(MyFunction, SerializedVar); -// Message handler would be: -// PP_Var MyFunctionProxy() { -// ReceiveSerializedVarReturnValue result; -// Send(new MyFunctionMsg(&result)); -// return result.Return(dispatcher()); -// } -class ReceiveSerializedVarReturnValue : public SerializedVar { - public: - // Note that we can't set the dispatcher in the constructor because the - // data will be overridden when the return value is set. - ReceiveSerializedVarReturnValue(); - - PP_Var Return(Dispatcher* dispatcher); - - private: - DISALLOW_COPY_AND_ASSIGN(ReceiveSerializedVarReturnValue); -}; - -// Example for API: -// "void MyFunction(PP_Var* exception);" -// IPC message: -// IPC_SYNC_MESSAGE_ROUTED0_1(MyFunction, SerializedVar); -// Message handler would be: -// void OnMsgMyFunction(PP_Var* exception) { -// ReceiveSerializedException se(dispatcher(), exception) -// Send(new PpapiHostMsg_Foo(&se)); -// } -class ReceiveSerializedException : public SerializedVar { - public: - ReceiveSerializedException(Dispatcher* dispatcher, PP_Var* exception); - ~ReceiveSerializedException(); - - // Returns true if the exception passed in the constructor is set. Check - // this before actually issuing the IPC. - bool IsThrown() const; - - private: - // The input/output exception we're wrapping. May be NULL. - PP_Var* exception_; - - DISALLOW_IMPLICIT_CONSTRUCTORS(ReceiveSerializedException); -}; - -// Helper class for when we're returning a vector of Vars. When it goes out -// of scope it will automatically convert the vector filled by the IPC layer -// into the array specified by the constructor params. -// -// Example for API: -// "void MyFunction(uint32_t* count, PP_Var** vars);" -// IPC message: -// IPC_SYNC_MESSAGE_ROUTED0_1(MyFunction, std::vector<SerializedVar>); -// Proxy function: -// void MyFunction(uint32_t* count, PP_Var** vars) { -// ReceiveSerializedVarVectorOutParam vect(dispatcher, count, vars); -// Send(new MyMsg(vect.OutParam())); -// } -class ReceiveSerializedVarVectorOutParam { - public: - ReceiveSerializedVarVectorOutParam(Dispatcher* dispatcher, - uint32_t* output_count, - PP_Var** output); - ~ReceiveSerializedVarVectorOutParam(); - - std::vector<SerializedVar>* OutParam(); - - private: - Dispatcher* dispatcher_; - uint32_t* output_count_; - PP_Var** output_; - - std::vector<SerializedVar> vector_; - - DISALLOW_IMPLICIT_CONSTRUCTORS(ReceiveSerializedVarVectorOutParam); -}; - -// Helpers for message receiving side ------------------------------------------ - -// For receiving a value from the remote side. -// -// Example for API: -// void MyFunction(PP_Var) -// IPC message: -// IPC_MESSAGE_ROUTED1(MyFunction, SerializedVar); -// Message handler would be: -// void OnMsgMyFunction(SerializedVarReceiveInput param) { -// MyFunction(param.Get()); -// } -class SerializedVarReceiveInput { - public: - // We rely on the implicit constructor here since the IPC layer will call - // us with a SerializedVar. Pass this object by value, the copy constructor - // will pass along the pointer (as cheap as passing a pointer arg). - SerializedVarReceiveInput(const SerializedVar& serialized); - ~SerializedVarReceiveInput(); - - PP_Var Get(Dispatcher* dispatcher); - - private: - const SerializedVar& serialized_; - - // Since the SerializedVar is const, we can't set its dispatcher (which is - // OK since we don't need to). But since we need it for our own uses, we - // track it here. Will be NULL before Get() is called. - Dispatcher* dispatcher_; - PP_Var var_; -}; - -// For receiving an input vector of vars from the remote side. -// -// Example: -// OnMsgMyFunction(SerializedVarVectorReceiveInput vector) { -// uint32_t size; -// PP_Var* array = vector.Get(dispatcher, &size); -// MyFunction(size, array); -// } -class SerializedVarVectorReceiveInput { - public: - SerializedVarVectorReceiveInput(const std::vector<SerializedVar>& serialized); - ~SerializedVarVectorReceiveInput(); - - // Only call Get() once. It will return a pointer to the converted array and - // place the array size in the out param. Will return NULL when the array is - // empty. - PP_Var* Get(Dispatcher* dispatcher, uint32_t* array_size); - - private: - const std::vector<SerializedVar>& serialized_; - - // Filled by Get(). - std::vector<PP_Var> deserialized_; -}; - -// For the receiving side of a function returning a var. The calling side uses -// ReceiveSerializedVarReturnValue. -// -// Example for API: -// PP_Var MyFunction() -// IPC message: -// IPC_SYNC_MESSAGE_ROUTED0_1(MyFunction, SerializedVar); -// Message handler would be: -// void OnMsgMyFunction(SerializedVarReturnValue result) { -// result.Return(dispatcher(), MyFunction()); -// } -class SerializedVarReturnValue { - public: - // We rely on the implicit constructor here since the IPC layer will call - // us with a SerializedVar*. Pass this object by value, the copy constructor - // will pass along the pointer (as cheap as passing a pointer arg). - SerializedVarReturnValue(SerializedVar* serialized); - - void Return(Dispatcher* dispatcher, const PP_Var& var); - - private: - SerializedVar* serialized_; -}; - -// For writing an out param to the remote side. -// -// Example for API: -// "void MyFunction(PP_Var* out);" -// IPC message: -// IPC_SYNC_MESSAGE_ROUTED0_1(MyFunction, SerializedVar); -// Message handler would be: -// void OnMsgMyFunction(SerializedVarOutParam out_param) { -// MyFunction(out_param.OutParam(dispatcher())); -// } -class SerializedVarOutParam { - public: - // We rely on the implicit constructor here since the IPC layer will call - // us with a SerializedVar*. Pass this object by value, the copy constructor - // will pass along the pointer (as cheap as passing a pointer arg). - SerializedVarOutParam(SerializedVar* serialized); - ~SerializedVarOutParam(); - - // Call this function only once. The caller should write its result to the - // returned var pointer before this class goes out of scope. The var's - // initial value will be VARTYPE_UNDEFINED. - PP_Var* OutParam(Dispatcher* dispatcher); - - private: - SerializedVar* serialized_; - - // This is the value actually written by the code and returned by OutParam. - // We'll write this into serialized_ in our destructor. - PP_Var writable_var_; -}; - -// For returning an array of PP_Vars to the other side and transferring -// ownership. -// -class SerializedVarVectorOutParam { - public: - SerializedVarVectorOutParam(std::vector<SerializedVar>* serialized); - ~SerializedVarVectorOutParam(); - - uint32_t* CountOutParam() { return &count_; } - PP_Var** ArrayOutParam(Dispatcher* dispatcher); - - private: - Dispatcher* dispatcher_; - std::vector<SerializedVar>* serialized_; - - uint32_t count_; - PP_Var* array_; -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PROXY_SERIALIZED_VAR_H_ - diff --git a/ppapi/proxy/var_serialization_rules.h b/ppapi/proxy/var_serialization_rules.h deleted file mode 100644 index bf00547..0000000 --- a/ppapi/proxy/var_serialization_rules.h +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (c) 2010 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. - -#ifndef PPAPI_PROXY_VAR_SERIALIZATION_RULES_H_ -#define PPAPI_PROXY_VAR_SERIALIZATION_RULES_H_ - -#include "ppapi/c/pp_var.h" - -#include <string> - -namespace pp { -namespace proxy { - -// Encapsulates the rules for serializing and deserializing vars to and from -// the local process. The renderer and the plugin process each have separate -// bookkeeping rules. -class VarSerializationRules { - public: - virtual ~VarSerializationRules() {} - - // Caller-owned calls -------------------------------------------------------- - // - // A caller-owned call is when doing a function call with a "normal" input - // argument. The caller has a reference to the var, and the caller is - // responsible for freeing that reference. - - // Prepares the given var for sending to the callee. If the var is a string, - // the value of that string will be placed in *str_val. If the var is not - // a string, str_val will beuntouched and may be NULL. - virtual void SendCallerOwned(const PP_Var& var, std::string* str_val) = 0; - - // When receiving a caller-owned variable, normally we don't have to do - // anything. However, in the case of strings, we need to deserialize the - // string from IPC, create a new PP_Var string in the local process, call the - // function, and then destroy the temporary string. These two functions - // handle that process - // - // BeginReceiveCallerOwned takes a var from IPC and an optional pointer to - // the deserialized string (which will be used only when var is a - // VARTYPE_STRING and may be NULL otherwise) and returns a new var - // representing the input in the local process. The output will be the same - // as the input except for strings. - // - // EndReceiveCallerOwned destroys the string created by Begin* and does - // nothing otherwise. It should be called with the result of Begin*. - virtual PP_Var BeginReceiveCallerOwned(const PP_Var& var, - const std::string* str_val) = 0; - virtual void EndReceiveCallerOwned(const PP_Var& var) = 0; - - // Passinag refs ------------------------------------------------------------- - // - // A pass-ref transfer is when ownership of a reference is passed from - // onen side to the other. Normally, this happens via return values and - // output arguments, as for exceptions. The code generating the value - // (the function returning it in the case of a return value) will AddRef - // the var on behalf of the consumer of the value. Responsibility for - // Release is on the consumer (the caller of the function in the case of a - // return value). - - // Creates a var in the context of the local process from the given - // deserialized var and deserialized string (which will be used only when var - // is a VARTYPE_STRING and may be NULL otherwise). The input var/string - // should be the result of calling SendPassRef in the remote process. - virtual PP_Var ReceivePassRef(const PP_Var& var, - const std::string& str_val) = 0; - - // Prepares a var to be sent to the remote side. One local reference will - // be passed to the remote side. Call Begin* before doing the send and End* - // after doing the send. See SendCallerOwned for a description of the string. - virtual void BeginSendPassRef(const PP_Var& var, std::string* str_val) = 0; - virtual void EndSendPassRef(const PP_Var& var) = 0; - - // --------------------------------------------------------------------------- - - virtual void ReleaseObjectRef(const PP_Var& var) = 0; - - protected: - VarSerializationRules() {} -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PROXY_VAR_SERIALIZATION_RULES_H_ |