diff options
author | thestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-01 05:51:27 +0000 |
---|---|---|
committer | thestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-01 05:51:27 +0000 |
commit | 4697f72f5bdb2ead8aa9051b47fb0fade5acd1f5 (patch) | |
tree | 4b27e9a2b6f932059c57c20aed2f4841f5a15d0a /ppapi | |
parent | 2f89b6045896d8e8efc3984da72c3bf4c63d6e0f (diff) | |
download | chromium_src-4697f72f5bdb2ead8aa9051b47fb0fade5acd1f5.zip chromium_src-4697f72f5bdb2ead8aa9051b47fb0fade5acd1f5.tar.gz chromium_src-4697f72f5bdb2ead8aa9051b47fb0fade5acd1f5.tar.bz2 |
Revert 87415 - Convert more interfaces to the new thunk system. This goes up to and including
the ones starting with "F".
Since this adds a lot more interfaces, I added the macro stuff we used for the
old system to generate the various template specializations. This involded a
lot of renaming since the As* needs to match the name (I was previously leaving
off the "PPB_" part). I did other misc cleanup to the infrastructure.
Review URL: http://codereview.chromium.org/7082036
TBR=brettw@chromium.org
Review URL: http://codereview.chromium.org/7006022
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@87438 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi')
50 files changed, 541 insertions, 1366 deletions
diff --git a/ppapi/ppapi_shared.gypi b/ppapi/ppapi_shared.gypi index bfcd435..43e6c28 100644 --- a/ppapi/ppapi_shared.gypi +++ b/ppapi/ppapi_shared.gypi @@ -33,14 +33,10 @@ 'shared_impl/crypto_impl.h', 'shared_impl/font_impl.cc', 'shared_impl/font_impl.h', - 'shared_impl/function_group_base.cc', - 'shared_impl/function_group_base.h', 'shared_impl/image_data_impl.cc', 'shared_impl/image_data_impl.h', 'shared_impl/ppapi_preferences.cc', 'shared_impl/ppapi_preferences.h', - 'shared_impl/resource_object_base.cc', - 'shared_impl/resource_object_base.h', 'shared_impl/tracker_base.cc', 'shared_impl/tracker_base.h', 'shared_impl/url_util_impl.cc', @@ -63,19 +59,6 @@ 'thunk/ppb_char_set_thunk.cc', 'thunk/ppb_cursor_control_api.h', 'thunk/ppb_cursor_control_thunk.cc', - 'thunk/ppb_directory_reader_api.h', - 'thunk/ppb_directory_reader_thunk.cc', - 'thunk/ppb_file_chooser_api.h', - 'thunk/ppb_file_chooser_thunk.cc', - 'thunk/ppb_file_io_api.h', - 'thunk/ppb_file_io_thunk.cc', - 'thunk/ppb_file_io_trusted_thunk.cc', - 'thunk/ppb_file_ref_api.h', - 'thunk/ppb_file_ref_thunk.cc', - 'thunk/ppb_file_system_api.h', - 'thunk/ppb_file_system_thunk.cc', - 'thunk/ppb_find_api.h', - 'thunk/ppb_find_thunk.cc', 'thunk/ppb_font_api.h', 'thunk/ppb_font_thunk.cc', 'thunk/ppb_graphics_2d_api.h', diff --git a/ppapi/proxy/enter_proxy.h b/ppapi/proxy/enter_proxy.h deleted file mode 100644 index 6e52705..0000000 --- a/ppapi/proxy/enter_proxy.h +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) 2011 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_ENTER_PROXY_H_ -#define PPAPI_PROXY_ENTER_PROXY_H_ - -#include "base/logging.h" -#include "ppapi/proxy/host_dispatcher.h" -#include "ppapi/proxy/plugin_dispatcher.h" -#include "ppapi/proxy/plugin_resource_tracker.h" -#include "ppapi/thunk/enter.h" - -namespace pp { -namespace proxy { - -// Wrapper around EnterResourceNoLock that takes a host resource. This is used -// when handling messages in the plugin from the host and we need to convert to -// an object in the plugin side corresponding to that. -// -// This never locks since we assume the host Resource is coming from IPC, and -// never logs errors since we assume the host is doing reasonable things. -template<typename ResourceT> -class EnterPluginFromHostResource - : public ::ppapi::thunk::EnterResourceNoLock<ResourceT> { - public: - EnterPluginFromHostResource(const HostResource& host_resource) - : ::ppapi::thunk::EnterResourceNoLock<ResourceT>( - PluginResourceTracker::GetInstance()->PluginResourceForHostResource( - host_resource), - false) { - // Validate that we're in the plugin rather than the host. Otherwise this - // object will do the wrong thing. In the plugin, the instance should have - // a corresponding plugin dispatcher (assuming the resource is valid). - DCHECK(this->failed() || - PluginDispatcher::GetForInstance(host_resource.instance())); - } -}; - -template<typename ResourceT> -class EnterHostFromHostResource - : public ::ppapi::thunk::EnterResourceNoLock<ResourceT> { - public: - EnterHostFromHostResource(const HostResource& host_resource) - : ::ppapi::thunk::EnterResourceNoLock<ResourceT>( - host_resource.host_resource(), false) { - // Validate that we're in the host rather than the plugin. Otherwise this - // object will do the wrong thing. In the host, the instance should have - // a corresponding host disptacher (assuming the resource is valid). - DCHECK(this->failed() || - HostDispatcher::GetForInstance(host_resource.instance())); - } -}; - -} // namespace proxy -} // namespace pp - -#endif // PPAPI_PROXY_ENTER_PROXY_H_ diff --git a/ppapi/proxy/interface_id.h b/ppapi/proxy/interface_id.h index 7363340..039008c 100644 --- a/ppapi/proxy/interface_id.h +++ b/ppapi/proxy/interface_id.h @@ -26,7 +26,6 @@ enum InterfaceID { INTERFACE_ID_PPB_FILE_CHOOSER, INTERFACE_ID_PPB_FILE_REF, INTERFACE_ID_PPB_FILE_SYSTEM, - INTERFACE_ID_PPB_FIND, INTERFACE_ID_PPB_FLASH, INTERFACE_ID_PPB_FLASH_CLIPBOARD, INTERFACE_ID_PPB_FLASH_FILE_FILEREF, diff --git a/ppapi/proxy/plugin_resource_tracker.cc b/ppapi/proxy/plugin_resource_tracker.cc index e1726cf..a6e087f 100644 --- a/ppapi/proxy/plugin_resource_tracker.cc +++ b/ppapi/proxy/plugin_resource_tracker.cc @@ -139,14 +139,6 @@ PP_Resource PluginResourceTracker::PluginResourceForHostResource( return NULL; } -PP_Instance PluginResourceTracker::GetInstanceForResource( - PP_Resource resource) { - ResourceMap::iterator found = resource_map_.find(resource); - if (found == resource_map_.end()) - return 0; - return found->second.resource->instance(); -} - void PluginResourceTracker::ReleasePluginResourceRef( const PP_Resource& resource, bool notify_browser_on_release) { diff --git a/ppapi/proxy/plugin_resource_tracker.h b/ppapi/proxy/plugin_resource_tracker.h index c00d3f2..5dfdf82 100644 --- a/ppapi/proxy/plugin_resource_tracker.h +++ b/ppapi/proxy/plugin_resource_tracker.h @@ -8,7 +8,6 @@ #include <map> #include <utility> -#include "base/compiler_specific.h" #include "base/memory/linked_ptr.h" #include "ppapi/c/pp_completion_callback.h" #include "ppapi/c/pp_instance.h" @@ -57,11 +56,10 @@ class PluginResourceTracker : public ::ppapi::TrackerBase { // TrackerBase. virtual ::ppapi::ResourceObjectBase* GetResourceAPI( - PP_Resource res) OVERRIDE; + PP_Resource res); virtual ::ppapi::FunctionGroupBase* GetFunctionAPI( PP_Instance inst, - pp::proxy::InterfaceID id) OVERRIDE; - virtual PP_Instance GetInstanceForResource(PP_Resource resource) OVERRIDE; + pp::proxy::InterfaceID id); private: friend struct DefaultSingletonTraits<PluginResourceTracker>; diff --git a/ppapi/proxy/ppb_audio_config_proxy.cc b/ppapi/proxy/ppb_audio_config_proxy.cc index e8eb056..8e78ecd 100644 --- a/ppapi/proxy/ppb_audio_config_proxy.cc +++ b/ppapi/proxy/ppb_audio_config_proxy.cc @@ -23,7 +23,7 @@ class AudioConfig : public PluginResource, virtual ~AudioConfig(); // ResourceObjectBase overrides. - virtual ::ppapi::thunk::PPB_AudioConfig_API* AsPPB_AudioConfig_API() OVERRIDE; + virtual ::ppapi::thunk::PPB_AudioConfig_API* AsAudioConfig_API() OVERRIDE; private: DISALLOW_COPY_AND_ASSIGN(AudioConfig); @@ -36,7 +36,7 @@ AudioConfig::AudioConfig(const HostResource& resource) AudioConfig::~AudioConfig() { } -::ppapi::thunk::PPB_AudioConfig_API* AudioConfig::AsPPB_AudioConfig_API() { +::ppapi::thunk::PPB_AudioConfig_API* AudioConfig::AsAudioConfig_API() { return this; } diff --git a/ppapi/proxy/ppb_audio_proxy.cc b/ppapi/proxy/ppb_audio_proxy.cc index 22ddddd..6c2cc7a 100644 --- a/ppapi/proxy/ppb_audio_proxy.cc +++ b/ppapi/proxy/ppb_audio_proxy.cc @@ -10,7 +10,6 @@ #include "ppapi/c/ppb_audio_config.h" #include "ppapi/c/ppb_var.h" #include "ppapi/c/trusted/ppb_audio_trusted.h" -#include "ppapi/proxy/enter_proxy.h" #include "ppapi/proxy/interface_id.h" #include "ppapi/proxy/plugin_dispatcher.h" #include "ppapi/proxy/plugin_resource.h" @@ -22,8 +21,6 @@ #include "ppapi/thunk/resource_creation_api.h" #include "ppapi/thunk/thunk.h" -using ::ppapi::thunk::PPB_Audio_API; - namespace pp { namespace proxy { @@ -36,7 +33,7 @@ class Audio : public PluginResource, public ppapi::AudioImpl { virtual ~Audio(); // ResourceObjectBase overrides. - virtual PPB_Audio_API* AsPPB_Audio_API(); + virtual ::ppapi::thunk::PPB_Audio_API* AsAudio_API(); // PPB_Audio_API implementation. virtual PP_Resource GetCurrentConfig() OVERRIDE; @@ -65,7 +62,7 @@ Audio::~Audio() { PluginResourceTracker::GetInstance()->ReleaseResource(config_); } -PPB_Audio_API* Audio::AsPPB_Audio_API() { +::ppapi::thunk::PPB_Audio_API* Audio::AsAudio_API() { return this; } @@ -235,7 +232,11 @@ void PPB_Audio_Proxy::OnMsgNotifyAudioStreamCreated( IPC::PlatformFileForTransit socket_handle, base::SharedMemoryHandle handle, uint32_t length) { - EnterPluginFromHostResource<PPB_Audio_API> enter(audio_id); + PP_Resource plugin_resource = + PluginResourceTracker::GetInstance()->PluginResourceForHostResource( + audio_id); + ppapi::thunk::EnterResource<ppapi::thunk::PPB_Audio_API> enter( + plugin_resource, false); if (enter.failed() || result_code != PP_OK) { // The caller may still have given us these handles in the failure case. // The easiest way to clean these up is to just put them in the objects @@ -243,11 +244,11 @@ void PPB_Audio_Proxy::OnMsgNotifyAudioStreamCreated( base::SyncSocket temp_socket( IPC::PlatformFileForTransitToPlatformFile(socket_handle)); base::SharedMemory temp_mem(handle, false); - } else { - static_cast<Audio*>(enter.object())->SetStreamInfo( - handle, length, - IPC::PlatformFileForTransitToPlatformFile(socket_handle)); + return; } + Audio* audio = static_cast<Audio*>(enter.object()); + audio->SetStreamInfo( + handle, length, IPC::PlatformFileForTransitToPlatformFile(socket_handle)); } void PPB_Audio_Proxy::AudioChannelConnected( diff --git a/ppapi/proxy/ppb_broker_proxy.cc b/ppapi/proxy/ppb_broker_proxy.cc index 97fe0d0..74aa4a2 100644 --- a/ppapi/proxy/ppb_broker_proxy.cc +++ b/ppapi/proxy/ppb_broker_proxy.cc @@ -52,7 +52,7 @@ class Broker : public ppapi::thunk::PPB_Broker_API, virtual ~Broker(); // ResourceObjectBase overries. - virtual ppapi::thunk::PPB_Broker_API* AsPPB_Broker_API() OVERRIDE; + virtual ppapi::thunk::PPB_Broker_API* AsBroker_API() OVERRIDE; // PPB_Broker_API implementation. virtual int32_t Connect(PP_CompletionCallback connect_callback) OVERRIDE; @@ -95,7 +95,7 @@ Broker::~Broker() { socket_handle_ = base::kInvalidPlatformFileValue; } -ppapi::thunk::PPB_Broker_API* Broker::AsPPB_Broker_API() { +ppapi::thunk::PPB_Broker_API* Broker::AsBroker_API() { return this; } diff --git a/ppapi/proxy/ppb_buffer_proxy.cc b/ppapi/proxy/ppb_buffer_proxy.cc index 5c2fd8a..d6f910f 100644 --- a/ppapi/proxy/ppb_buffer_proxy.cc +++ b/ppapi/proxy/ppb_buffer_proxy.cc @@ -41,7 +41,7 @@ class Buffer : public ppapi::thunk::PPB_Buffer_API, virtual Buffer* AsBuffer() OVERRIDE; // ResourceObjectBase overries. - virtual ppapi::thunk::PPB_Buffer_API* AsPPB_Buffer_API() OVERRIDE; + virtual ppapi::thunk::PPB_Buffer_API* AsBuffer_API() OVERRIDE; // PPB_Buffer_API implementation. virtual PP_Bool Describe(uint32_t* size_in_bytes) OVERRIDE; @@ -75,7 +75,7 @@ Buffer* Buffer::AsBuffer() { return this; } -ppapi::thunk::PPB_Buffer_API* Buffer::AsPPB_Buffer_API() { +ppapi::thunk::PPB_Buffer_API* Buffer::AsBuffer_API() { return this; } diff --git a/ppapi/proxy/ppb_char_set_proxy.cc b/ppapi/proxy/ppb_char_set_proxy.cc index 1887549..a896693 100644 --- a/ppapi/proxy/ppb_char_set_proxy.cc +++ b/ppapi/proxy/ppb_char_set_proxy.cc @@ -52,7 +52,7 @@ const InterfaceProxy::Info* PPB_CharSet_Proxy::GetInfo() { } ppapi::thunk::PPB_CharSet_FunctionAPI* -PPB_CharSet_Proxy::AsPPB_CharSet_FunctionAPI() { +PPB_CharSet_Proxy::AsCharSet_FunctionAPI() { return this; } diff --git a/ppapi/proxy/ppb_char_set_proxy.h b/ppapi/proxy/ppb_char_set_proxy.h index 0f70ab5..b64884c 100644 --- a/ppapi/proxy/ppb_char_set_proxy.h +++ b/ppapi/proxy/ppb_char_set_proxy.h @@ -29,7 +29,7 @@ class PPB_CharSet_Proxy : public ppapi::FunctionGroupBase, static const Info* GetInfo(); // FunctionGroupBase overrides. - virtual ppapi::thunk::PPB_CharSet_FunctionAPI* AsPPB_CharSet_FunctionAPI() + virtual ppapi::thunk::PPB_CharSet_FunctionAPI* AsCharSet_FunctionAPI() OVERRIDE; // PPB_CharSet_FunctionAPI implementation. diff --git a/ppapi/proxy/ppb_cursor_control_proxy.cc b/ppapi/proxy/ppb_cursor_control_proxy.cc index 993efe8..37619b7 100644 --- a/ppapi/proxy/ppb_cursor_control_proxy.cc +++ b/ppapi/proxy/ppb_cursor_control_proxy.cc @@ -49,7 +49,7 @@ const InterfaceProxy::Info* PPB_CursorControl_Proxy::GetInfo() { } ppapi::thunk::PPB_CursorControl_FunctionAPI* -PPB_CursorControl_Proxy::AsPPB_CursorControl_FunctionAPI() { +PPB_CursorControl_Proxy::AsCursorControl_FunctionAPI() { return this; } diff --git a/ppapi/proxy/ppb_cursor_control_proxy.h b/ppapi/proxy/ppb_cursor_control_proxy.h index 8657dc9..234f6cd 100644 --- a/ppapi/proxy/ppb_cursor_control_proxy.h +++ b/ppapi/proxy/ppb_cursor_control_proxy.h @@ -31,7 +31,7 @@ class PPB_CursorControl_Proxy static const Info* GetInfo(); // FunctionGroupBase overrides. - ppapi::thunk::PPB_CursorControl_FunctionAPI* AsPPB_CursorControl_FunctionAPI() + ppapi::thunk::PPB_CursorControl_FunctionAPI* AsCursorControl_FunctionAPI() OVERRIDE; // PPB_CursorControl_FunctionAPI implementation. diff --git a/ppapi/proxy/ppb_file_chooser_proxy.cc b/ppapi/proxy/ppb_file_chooser_proxy.cc index 38bc058..6307806 100644 --- a/ppapi/proxy/ppb_file_chooser_proxy.cc +++ b/ppapi/proxy/ppb_file_chooser_proxy.cc @@ -9,39 +9,23 @@ #include "ppapi/c/dev/ppb_file_chooser_dev.h" #include "ppapi/c/pp_errors.h" #include "ppapi/c/private/ppb_proxy_private.h" -#include "ppapi/proxy/enter_proxy.h" #include "ppapi/proxy/host_dispatcher.h" #include "ppapi/proxy/plugin_dispatcher.h" #include "ppapi/proxy/plugin_resource.h" #include "ppapi/proxy/ppapi_messages.h" #include "ppapi/proxy/ppb_file_ref_proxy.h" #include "ppapi/proxy/serialized_var.h" -#include "ppapi/thunk/thunk.h" - -using ::ppapi::thunk::PPB_FileChooser_API; namespace pp { namespace proxy { -class FileChooser : public PluginResource, - public PPB_FileChooser_API { +class FileChooser : public PluginResource { public: FileChooser(const HostResource& resource); virtual ~FileChooser(); - // ResourceObjectBase overrides. - virtual PPB_FileChooser_API* AsPPB_FileChooser_API() OVERRIDE; - - // PPB_FileChooser_API implementation. - virtual int32_t Show(PP_CompletionCallback callback) OVERRIDE; - virtual PP_Resource GetNextChosenFile() OVERRIDE; - - // Handles the choose complete notification from the host. - void ChooseComplete( - int32_t result_code, - const std::vector<PPBFileRef_CreateInfo>& chosen_files); + virtual FileChooser* AsFileChooser(); - private: PP_CompletionCallback current_show_callback_; // All files returned by the current show callback that haven't yet been @@ -50,6 +34,7 @@ class FileChooser : public PluginResource, // has transferred to the plugin. std::queue<PP_Resource> file_queue_; + private: DISALLOW_COPY_AND_ASSIGN(FileChooser); }; @@ -77,47 +62,73 @@ FileChooser::~FileChooser() { } } -PPB_FileChooser_API* FileChooser::AsPPB_FileChooser_API() { +FileChooser* FileChooser::AsFileChooser() { return this; } -int32_t FileChooser::Show(PP_CompletionCallback callback) { - if (current_show_callback_.func) +namespace { + +PP_Resource Create(PP_Instance instance, + const PP_FileChooserOptions_Dev* options) { + Dispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); + if (!dispatcher) + return 0; + + HostResource result; + dispatcher->Send(new PpapiHostMsg_PPBFileChooser_Create( + INTERFACE_ID_PPB_FILE_CHOOSER, instance, + options->mode, + options->accept_mime_types ? options->accept_mime_types : std::string(), + &result)); + + if (result.is_null()) + return 0; + linked_ptr<FileChooser> object(new FileChooser(result)); + return PluginResourceTracker::GetInstance()->AddResource(object); +} + +PP_Bool IsFileChooser(PP_Resource resource) { + FileChooser* object = PluginResource::GetAs<FileChooser>(resource); + return BoolToPPBool(!!object); +} + +int32_t Show(PP_Resource chooser, struct PP_CompletionCallback callback) { + FileChooser* object = PluginResource::GetAs<FileChooser>(chooser); + if (!object) + return PP_ERROR_BADRESOURCE; + Dispatcher* dispatcher = PluginDispatcher::GetForInstance(object->instance()); + if (!dispatcher) + return PP_ERROR_BADARGUMENT; + + if (object->current_show_callback_.func) return PP_ERROR_INPROGRESS; // Can't show more than once. - current_show_callback_ = callback; - GetDispatcher()->Send(new PpapiHostMsg_PPBFileChooser_Show( - INTERFACE_ID_PPB_FILE_CHOOSER, host_resource())); + object->current_show_callback_ = callback; + dispatcher->Send(new PpapiHostMsg_PPBFileChooser_Show( + INTERFACE_ID_PPB_FILE_CHOOSER, + object->host_resource())); return PP_OK_COMPLETIONPENDING; } -PP_Resource FileChooser::GetNextChosenFile() { - if (file_queue_.empty()) +PP_Resource GetNextChosenFile(PP_Resource chooser) { + FileChooser* object = PluginResource::GetAs<FileChooser>(chooser); + if (!object || object->file_queue_.empty()) return 0; // Return the next resource in the queue. These resource have already been // addrefed (they're currently owned by the FileChooser) and returning them // transfers ownership of that reference to the plugin. - PP_Resource next = file_queue_.front(); - file_queue_.pop(); + PP_Resource next = object->file_queue_.front(); + object->file_queue_.pop(); return next; } -void FileChooser::ChooseComplete( - int32_t result_code, - const std::vector<PPBFileRef_CreateInfo>& chosen_files) { - // Convert each of the passed in file infos to resources. These will be owned - // by the FileChooser object until they're passed to the plugin. - DCHECK(file_queue_.empty()); - for (size_t i = 0; i < chosen_files.size(); i++) - file_queue_.push(PPB_FileRef_Proxy::DeserializeFileRef(chosen_files[i])); - - // Notify the plugin of the new data. - PP_RunAndClearCompletionCallback(¤t_show_callback_, result_code); - // DANGER: May delete |this|! -} - -namespace { +const PPB_FileChooser_Dev file_chooser_interface = { + &Create, + &IsFileChooser, + &Show, + &GetNextChosenFile +}; InterfaceProxy* CreateFileChooserProxy(Dispatcher* dispatcher, const void* target_interface) { @@ -137,7 +148,7 @@ PPB_FileChooser_Proxy::~PPB_FileChooser_Proxy() { const InterfaceProxy::Info* PPB_FileChooser_Proxy::GetInfo() { static const Info info = { - ::ppapi::thunk::GetPPB_FileChooser_Thunk(), + &file_chooser_interface, PPB_FILECHOOSER_DEV_INTERFACE, INTERFACE_ID_PPB_FILE_CHOOSER, false, @@ -146,27 +157,6 @@ const InterfaceProxy::Info* PPB_FileChooser_Proxy::GetInfo() { return &info; } -// static -PP_Resource PPB_FileChooser_Proxy::CreateProxyResource( - PP_Instance instance, - const PP_FileChooserOptions_Dev* options) { - Dispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); - if (!dispatcher) - return 0; - - HostResource result; - dispatcher->Send(new PpapiHostMsg_PPBFileChooser_Create( - INTERFACE_ID_PPB_FILE_CHOOSER, instance, - options->mode, - options->accept_mime_types ? options->accept_mime_types : std::string(), - &result)); - - if (result.is_null()) - return 0; - linked_ptr<FileChooser> object(new FileChooser(result)); - return PluginResourceTracker::GetInstance()->AddResource(object); -} - bool PPB_FileChooser_Proxy::OnMessageReceived(const IPC::Message& msg) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(PPB_FileChooser_Proxy, msg) @@ -207,11 +197,30 @@ void PPB_FileChooser_Proxy::OnMsgChooseComplete( const HostResource& chooser, int32_t result_code, const std::vector<PPBFileRef_CreateInfo>& chosen_files) { - EnterPluginFromHostResource<PPB_FileChooser_API> enter(chooser); - if (enter.succeeded()) { - static_cast<FileChooser*>(enter.object())->ChooseComplete( - result_code, chosen_files); + PP_Resource plugin_resource = + PluginResourceTracker::GetInstance()->PluginResourceForHostResource( + chooser); + if (!plugin_resource) + return; + FileChooser* object = PluginResource::GetAs<FileChooser>(plugin_resource); + if (!object) + return; + + // Convert each of the passed in file infos to resources. These will be owned + // by the FileChooser object until they're passed to the plugin. + DCHECK(object->file_queue_.empty()); + for (size_t i = 0; i < chosen_files.size(); i++) { + object->file_queue_.push( + PPB_FileRef_Proxy::DeserializeFileRef(chosen_files[i])); } + + // Notify the plugin of the new data. We have to swap out the callback + // because the plugin may trigger deleting the object from the callback, and + // the FileChooser object will attempt to call the callback in its destructor + // with the ABORTED status. + PP_RunAndClearCompletionCallback(&object->current_show_callback_, + result_code); + // DANGER: May delete |object|! } void PPB_FileChooser_Proxy::OnShowCallback(int32_t result, diff --git a/ppapi/proxy/ppb_file_chooser_proxy.h b/ppapi/proxy/ppb_file_chooser_proxy.h index 4b83e950..97b3aa2 100644 --- a/ppapi/proxy/ppb_file_chooser_proxy.h +++ b/ppapi/proxy/ppb_file_chooser_proxy.h @@ -13,7 +13,6 @@ #include "ppapi/cpp/completion_callback.h" #include "ppapi/proxy/interface_proxy.h" #include "ppapi/proxy/proxy_non_thread_safe_ref_count.h" -#include "ppapi/thunk/ppb_file_chooser_api.h" struct PPB_FileChooser_Dev; @@ -30,10 +29,6 @@ class PPB_FileChooser_Proxy : public InterfaceProxy { static const Info* GetInfo(); - static PP_Resource CreateProxyResource( - PP_Instance instance, - const PP_FileChooserOptions_Dev* options); - const PPB_FileChooser_Dev* ppb_file_chooser_target() const { return static_cast<const PPB_FileChooser_Dev*>(target_interface()); } diff --git a/ppapi/proxy/ppb_file_ref_proxy.cc b/ppapi/proxy/ppb_file_ref_proxy.cc index 149e23b..3348818 100644 --- a/ppapi/proxy/ppb_file_ref_proxy.cc +++ b/ppapi/proxy/ppb_file_ref_proxy.cc @@ -7,54 +7,28 @@ #include "ppapi/c/dev/ppb_file_ref_dev.h" #include "ppapi/c/pp_errors.h" #include "ppapi/c/private/ppb_proxy_private.h" -#include "ppapi/proxy/enter_proxy.h" #include "ppapi/proxy/host_dispatcher.h" #include "ppapi/proxy/plugin_dispatcher.h" #include "ppapi/proxy/plugin_resource.h" #include "ppapi/proxy/ppapi_messages.h" #include "ppapi/proxy/serialized_var.h" -#include "ppapi/thunk/ppb_file_ref_api.h" -#include "ppapi/thunk/resource_creation_api.h" -#include "ppapi/thunk/thunk.h" - -using ppapi::thunk::EnterFunctionNoLock; -using ppapi::thunk::EnterResourceNoLock; -using ppapi::thunk::PPB_FileRef_API; -using ppapi::thunk::ResourceCreationAPI; namespace pp { namespace proxy { -namespace { - -InterfaceProxy* CreateFileRefProxy(Dispatcher* dispatcher, - const void* target_interface) { - return new PPB_FileRef_Proxy(dispatcher, target_interface); -} - -} // namespace - -class FileRef : public PluginResource, public PPB_FileRef_API { +// This object maintains most of the state of the ref in the plugin for fast +// querying. It's all set in the constructor from the "create info" sent from +// the host. +class FileRef : public PluginResource { public: - explicit FileRef(const PPBFileRef_CreateInfo& info); + FileRef(const PPBFileRef_CreateInfo& info); virtual ~FileRef(); - // ResourceObjectBase overrides. - virtual PPB_FileRef_API* AsPPB_FileRef_API() OVERRIDE; - - // PPB_FileRef_API implementation. - virtual PP_FileSystemType_Dev GetFileSystemType() const OVERRIDE; - virtual PP_Var GetName() const OVERRIDE; - virtual PP_Var GetPath() const OVERRIDE; - virtual PP_Resource GetParent() OVERRIDE; - virtual int32_t MakeDirectory(PP_Bool make_ancestors, - PP_CompletionCallback callback) OVERRIDE; - virtual int32_t Touch(PP_Time last_access_time, - PP_Time last_modified_time, - PP_CompletionCallback callback) OVERRIDE; - virtual int32_t Delete(PP_CompletionCallback callback) OVERRIDE; - virtual int32_t Rename(PP_Resource new_file_ref, - PP_CompletionCallback callback) OVERRIDE; + virtual FileRef* AsFileRef(); + + PP_FileSystemType_Dev file_system_type() const { return file_system_type_; } + const PP_Var& path() const { return path_; } + const PP_Var& name() const { return name_; } private: PP_FileSystemType_Dev file_system_type_; @@ -79,71 +53,168 @@ FileRef::~FileRef() { PluginVarTracker::GetInstance()->Release(name_); } -PPB_FileRef_API* FileRef::AsPPB_FileRef_API() { +FileRef* FileRef::AsFileRef() { return this; } -PP_FileSystemType_Dev FileRef::GetFileSystemType() const { - return file_system_type_; +namespace { + +bool FileRefAndDispatcherForResource(PP_Resource resource, + FileRef** file_ref, + Dispatcher** dispatcher) { + *file_ref = PluginResource::GetAs<FileRef>(resource); + if (!file_ref) + return false; + *dispatcher = PluginDispatcher::GetForInstance((*file_ref)->instance()); + return !!(*dispatcher); +} + +PP_Resource Create(PP_Resource file_system, const char* path) { + PluginResource* file_system_object = + PluginResourceTracker::GetInstance()->GetResourceObject(file_system); + if (!file_system_object) + return 0; + + Dispatcher* dispatcher = + PluginDispatcher::GetForInstance(file_system_object->instance()); + if (!dispatcher) + return 0; + + PPBFileRef_CreateInfo create_info; + dispatcher->Send(new PpapiHostMsg_PPBFileRef_Create( + INTERFACE_ID_PPB_FILE_REF, file_system_object->host_resource(), + path, &create_info)); + return PPB_FileRef_Proxy::DeserializeFileRef(create_info); +} + +PP_Bool IsFileRef(PP_Resource resource) { + FileRef* object = PluginResource::GetAs<FileRef>(resource); + return BoolToPPBool(!!object); } -PP_Var FileRef::GetName() const { - PluginVarTracker::GetInstance()->AddRef(name_); - return name_; +PP_FileSystemType_Dev GetFileSystemType(PP_Resource file_ref) { + FileRef* object = PluginResource::GetAs<FileRef>(file_ref); + if (!object) + return PP_FILESYSTEMTYPE_EXTERNAL; + return object->file_system_type(); } -PP_Var FileRef::GetPath() const { - PluginVarTracker::GetInstance()->AddRef(path_); - return path_; +PP_Var GetName(PP_Resource file_ref) { + FileRef* object = PluginResource::GetAs<FileRef>(file_ref); + if (!object) + return PP_MakeUndefined(); + + PluginVarTracker::GetInstance()->AddRef(object->name()); + return object->name(); } -PP_Resource FileRef::GetParent() { +PP_Var GetPath(PP_Resource file_ref) { + FileRef* object = PluginResource::GetAs<FileRef>(file_ref); + if (!object) + return PP_MakeUndefined(); + + PluginVarTracker::GetInstance()->AddRef(object->path()); + return object->path(); +} + +PP_Resource GetParent(PP_Resource file_ref) { + FileRef* object; + Dispatcher* dispatcher; + if (!FileRefAndDispatcherForResource(file_ref, &object, &dispatcher)) + return 0; + PPBFileRef_CreateInfo create_info; - GetDispatcher()->Send(new PpapiHostMsg_PPBFileRef_GetParent( - INTERFACE_ID_PPB_FILE_REF, host_resource(), &create_info)); + dispatcher->Send(new PpapiHostMsg_PPBFileRef_GetParent( + INTERFACE_ID_PPB_FILE_REF, object->host_resource(), &create_info)); return PPB_FileRef_Proxy::DeserializeFileRef(create_info); } -int32_t FileRef::MakeDirectory(PP_Bool make_ancestors, - PP_CompletionCallback callback) { - GetDispatcher()->Send(new PpapiHostMsg_PPBFileRef_MakeDirectory( - INTERFACE_ID_PPB_FILE_REF, host_resource(), make_ancestors, - GetDispatcher()->callback_tracker().SendCallback(callback))); +int32_t MakeDirectory(PP_Resource directory_ref, + PP_Bool make_ancestors, + struct PP_CompletionCallback callback) { + FileRef* object; + Dispatcher* dispatcher; + if (!FileRefAndDispatcherForResource(directory_ref, &object, &dispatcher)) + return PP_ERROR_BADRESOURCE; + + dispatcher->Send(new PpapiHostMsg_PPBFileRef_MakeDirectory( + INTERFACE_ID_PPB_FILE_REF, object->host_resource(), make_ancestors, + dispatcher->callback_tracker().SendCallback(callback))); return PP_OK_COMPLETIONPENDING; } -int32_t FileRef::Touch(PP_Time last_access_time, - PP_Time last_modified_time, - PP_CompletionCallback callback) { - GetDispatcher()->Send(new PpapiHostMsg_PPBFileRef_Touch( - INTERFACE_ID_PPB_FILE_REF, host_resource(), +int32_t Touch(PP_Resource file_ref, + PP_Time last_access_time, + PP_Time last_modified_time, + struct PP_CompletionCallback callback) { + FileRef* object; + Dispatcher* dispatcher; + if (!FileRefAndDispatcherForResource(file_ref, &object, &dispatcher)) + return PP_ERROR_BADRESOURCE; + + dispatcher->Send(new PpapiHostMsg_PPBFileRef_Touch( + INTERFACE_ID_PPB_FILE_REF, object->host_resource(), last_access_time, last_modified_time, - GetDispatcher()->callback_tracker().SendCallback(callback))); + dispatcher->callback_tracker().SendCallback(callback))); return PP_OK_COMPLETIONPENDING; } -int32_t FileRef::Delete(PP_CompletionCallback callback) { - GetDispatcher()->Send(new PpapiHostMsg_PPBFileRef_Delete( - INTERFACE_ID_PPB_FILE_REF, host_resource(), - GetDispatcher()->callback_tracker().SendCallback(callback))); +int32_t Delete(PP_Resource file_ref, + struct PP_CompletionCallback callback) { + FileRef* object; + Dispatcher* dispatcher; + if (!FileRefAndDispatcherForResource(file_ref, &object, &dispatcher)) + return PP_ERROR_BADRESOURCE; + + dispatcher->Send(new PpapiHostMsg_PPBFileRef_Delete( + INTERFACE_ID_PPB_FILE_REF, object->host_resource(), + dispatcher->callback_tracker().SendCallback(callback))); return PP_OK_COMPLETIONPENDING; } -int32_t FileRef::Rename(PP_Resource new_file_ref, - PP_CompletionCallback callback) { - PluginResource* new_file_ref_object = - PluginResourceTracker::GetInstance()->GetResourceObject(new_file_ref); - if (!new_file_ref_object || - new_file_ref_object->host_resource().instance() != instance()) +int32_t Rename(PP_Resource file_ref, + PP_Resource new_file_ref, + struct PP_CompletionCallback callback) { + FileRef* obj1; + Dispatcher* dispatcher1; + if (!FileRefAndDispatcherForResource(file_ref, &obj1, &dispatcher1)) + return PP_ERROR_BADRESOURCE; + + FileRef* obj2; + Dispatcher* dispatcher2; + if (!FileRefAndDispatcherForResource(new_file_ref, &obj2, &dispatcher2)) + return PP_ERROR_BADRESOURCE; + + if (obj1->instance() != obj2->instance()) return PP_ERROR_BADRESOURCE; - GetDispatcher()->Send(new PpapiHostMsg_PPBFileRef_Rename( - INTERFACE_ID_PPB_FILE_REF, host_resource(), - new_file_ref_object->host_resource(), - GetDispatcher()->callback_tracker().SendCallback(callback))); + dispatcher1->Send(new PpapiHostMsg_PPBFileRef_Rename( + INTERFACE_ID_PPB_FILE_REF, obj1->host_resource(), + obj2->host_resource(), + dispatcher1->callback_tracker().SendCallback(callback))); return PP_OK_COMPLETIONPENDING; } +const PPB_FileRef_Dev file_ref_interface = { + &Create, + &IsFileRef, + &GetFileSystemType, + &GetName, + &GetPath, + &GetParent, + &MakeDirectory, + &Touch, + &Delete, + &Rename +}; + +InterfaceProxy* CreateFileRefProxy(Dispatcher* dispatcher, + const void* target_interface) { + return new PPB_FileRef_Proxy(dispatcher, target_interface); +} + +} // namespace + PPB_FileRef_Proxy::PPB_FileRef_Proxy(Dispatcher* dispatcher, const void* target_interface) : InterfaceProxy(dispatcher, target_interface) { @@ -154,7 +225,7 @@ PPB_FileRef_Proxy::~PPB_FileRef_Proxy() { const InterfaceProxy::Info* PPB_FileRef_Proxy::GetInfo() { static const Info info = { - ::ppapi::thunk::GetPPB_FileRef_Thunk(), + &file_ref_interface, PPB_FILEREF_DEV_INTERFACE, INTERFACE_ID_PPB_FILE_REF, false, @@ -163,21 +234,6 @@ const InterfaceProxy::Info* PPB_FileRef_Proxy::GetInfo() { return &info; } -// static -PP_Resource PPB_FileRef_Proxy::CreateProxyResource(PP_Resource file_system, - const char* path) { - PluginResource* file_system_object = - PluginResourceTracker::GetInstance()->GetResourceObject(file_system); - if (!file_system_object) - return 0; - - PPBFileRef_CreateInfo create_info; - file_system_object->GetDispatcher()->Send(new PpapiHostMsg_PPBFileRef_Create( - INTERFACE_ID_PPB_FILE_REF, file_system_object->host_resource(), - path, &create_info)); - return PPB_FileRef_Proxy::DeserializeFileRef(create_info); -} - bool PPB_FileRef_Proxy::OnMessageReceived(const IPC::Message& msg) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(PPB_FileRef_Proxy, msg) @@ -195,12 +251,6 @@ bool PPB_FileRef_Proxy::OnMessageReceived(const IPC::Message& msg) { void PPB_FileRef_Proxy::SerializeFileRef(PP_Resource file_ref, PPBFileRef_CreateInfo* result) { - EnterResourceNoLock<PPB_FileRef_API> enter(file_ref, false); - if (enter.failed()) { - NOTREACHED(); - return; - } - // We need the instance out of the resource for serializing back to the // plugin. This code can only run in the host. if (dispatcher()->IsPlugin()) { @@ -213,11 +263,13 @@ void PPB_FileRef_Proxy::SerializeFileRef(PP_Resource file_ref, result->resource.SetHostResource(instance, file_ref); result->file_system_type = - static_cast<int>(enter.object()->GetFileSystemType()); - result->path = SerializedVarReturnValue::Convert(dispatcher(), - enter.object()->GetPath()); - result->name = SerializedVarReturnValue::Convert(dispatcher(), - enter.object()->GetName()); + static_cast<int>(ppb_file_ref_target()->GetFileSystemType(file_ref)); + result->path = SerializedVarReturnValue::Convert( + dispatcher(), + ppb_file_ref_target()->GetPath(file_ref)); + result->name = SerializedVarReturnValue::Convert( + dispatcher(), + ppb_file_ref_target()->GetName(file_ref)); } // static @@ -233,10 +285,8 @@ PP_Resource PPB_FileRef_Proxy::DeserializeFileRef( void PPB_FileRef_Proxy::OnMsgCreate(const HostResource& file_system, const std::string& path, PPBFileRef_CreateInfo* result) { - EnterFunctionNoLock<ResourceCreationAPI> enter(file_system.instance(), true); - if (enter.failed()) - return; - PP_Resource resource = enter.functions()->CreateFileRef( + + PP_Resource resource = ppb_file_ref_target()->Create( file_system.host_resource(), path.c_str()); if (!resource) return; // CreateInfo default constructor initializes to 0. @@ -245,19 +295,18 @@ void PPB_FileRef_Proxy::OnMsgCreate(const HostResource& file_system, void PPB_FileRef_Proxy::OnMsgGetParent(const HostResource& host_resource, PPBFileRef_CreateInfo* result) { - EnterHostFromHostResource<PPB_FileRef_API> enter(host_resource); - if (enter.succeeded()) - SerializeFileRef(enter.object()->GetParent(), result); + PP_Resource resource = ppb_file_ref_target()->GetParent( + host_resource.host_resource()); + SerializeFileRef(resource, result); } void PPB_FileRef_Proxy::OnMsgMakeDirectory(const HostResource& host_resource, PP_Bool make_ancestors, uint32_t serialized_callback) { - EnterHostFromHostResource<PPB_FileRef_API> enter(host_resource); - if (enter.failed()) - return; PP_CompletionCallback callback = ReceiveCallback(serialized_callback); - int32_t result = enter.object()->MakeDirectory(make_ancestors, callback); + int32_t result = + ppb_file_ref_target()->MakeDirectory(host_resource.host_resource(), + make_ancestors, callback); if (result != PP_OK_COMPLETIONPENDING) PP_RunCompletionCallback(&callback, result); } @@ -266,22 +315,19 @@ void PPB_FileRef_Proxy::OnMsgTouch(const HostResource& host_resource, PP_Time last_access, PP_Time last_modified, uint32_t serialized_callback) { - EnterHostFromHostResource<PPB_FileRef_API> enter(host_resource); - if (enter.failed()) - return; PP_CompletionCallback callback = ReceiveCallback(serialized_callback); - int32_t result = enter.object()->Touch(last_access, last_modified, callback); + int32_t result = + ppb_file_ref_target()->Touch(host_resource.host_resource(), + last_access, last_modified, callback); if (result != PP_OK_COMPLETIONPENDING) PP_RunCompletionCallback(&callback, result); } void PPB_FileRef_Proxy::OnMsgDelete(const HostResource& host_resource, uint32_t serialized_callback) { - EnterHostFromHostResource<PPB_FileRef_API> enter(host_resource); - if (enter.failed()) - return; PP_CompletionCallback callback = ReceiveCallback(serialized_callback); - int32_t result = enter.object()->Delete(callback); + int32_t result = + ppb_file_ref_target()->Delete(host_resource.host_resource(), callback); if (result != PP_OK_COMPLETIONPENDING) PP_RunCompletionCallback(&callback, result); } @@ -289,12 +335,11 @@ void PPB_FileRef_Proxy::OnMsgDelete(const HostResource& host_resource, void PPB_FileRef_Proxy::OnMsgRename(const HostResource& file_ref, const HostResource& new_file_ref, uint32_t serialized_callback) { - EnterHostFromHostResource<PPB_FileRef_API> enter(file_ref); - if (enter.failed()) - return; PP_CompletionCallback callback = ReceiveCallback(serialized_callback); - int32_t result = enter.object()->Rename(new_file_ref.host_resource(), - callback); + int32_t result = + ppb_file_ref_target()->Rename(file_ref.host_resource(), + new_file_ref.host_resource(), + callback); if (result != PP_OK_COMPLETIONPENDING) PP_RunCompletionCallback(&callback, result); } diff --git a/ppapi/proxy/ppb_file_ref_proxy.h b/ppapi/proxy/ppb_file_ref_proxy.h index 076bea2..ca0b588 100644 --- a/ppapi/proxy/ppb_file_ref_proxy.h +++ b/ppapi/proxy/ppb_file_ref_proxy.h @@ -28,8 +28,9 @@ class PPB_FileRef_Proxy : public InterfaceProxy { static const Info* GetInfo(); - static PP_Resource CreateProxyResource(PP_Resource file_system, - const char* path); + const PPB_FileRef_Dev* ppb_file_ref_target() const { + return static_cast<const PPB_FileRef_Dev*>(target_interface()); + } // InterfaceProxy implementation. virtual bool OnMessageReceived(const IPC::Message& msg); diff --git a/ppapi/proxy/ppb_file_system_proxy.cc b/ppapi/proxy/ppb_file_system_proxy.cc index c6b7caa..f75ebc7 100644 --- a/ppapi/proxy/ppb_file_system_proxy.cc +++ b/ppapi/proxy/ppb_file_system_proxy.cc @@ -8,57 +8,30 @@ #include "base/task.h" #include "ppapi/c/dev/ppb_file_system_dev.h" #include "ppapi/c/pp_errors.h" -#include "ppapi/proxy/enter_proxy.h" #include "ppapi/proxy/host_dispatcher.h" #include "ppapi/proxy/plugin_dispatcher.h" #include "ppapi/proxy/plugin_resource.h" #include "ppapi/proxy/ppapi_messages.h" #include "ppapi/proxy/serialized_var.h" -#include "ppapi/thunk/enter.h" -#include "ppapi/thunk/ppb_file_system_api.h" -#include "ppapi/thunk/resource_creation_api.h" -#include "ppapi/thunk/thunk.h" - -using ppapi::thunk::EnterFunctionNoLock; -using ppapi::thunk::PPB_FileSystem_API; -using ppapi::thunk::ResourceCreationAPI; namespace pp { namespace proxy { -namespace { - -InterfaceProxy* CreateFileSystemProxy(Dispatcher* dispatcher, - const void* target_interface) { - return new PPB_FileSystem_Proxy(dispatcher, target_interface); -} - -} // namespace - // This object maintains most of the state of the ref in the plugin for fast // querying. It's all set in the constructor from the "create info" sent from // the host. -class FileSystem : public PluginResource, public PPB_FileSystem_API { +class FileSystem : public PluginResource { public: FileSystem(const HostResource& host_resource, PP_FileSystemType_Dev type); virtual ~FileSystem(); - // ResourceObjectBase override. - virtual PPB_FileSystem_API* AsPPB_FileSystem_API() OVERRIDE; - - // PPB_FileSystem_APi implementation. - virtual int32_t Open(int64_t expected_size, - PP_CompletionCallback callback) OVERRIDE; - virtual PP_FileSystemType_Dev GetType() OVERRIDE; - - // Called when the host has responded to our open request. - void OpenComplete(int32_t result); + virtual FileSystem* AsFileSystem(); - private: PP_FileSystemType_Dev type_; bool called_open_; PP_CompletionCallback current_open_callback_; + private: DISALLOW_COPY_AND_ASSIGN(FileSystem); }; @@ -84,32 +57,77 @@ FileSystem::~FileSystem() { } } -PPB_FileSystem_API* FileSystem::AsPPB_FileSystem_API() { +FileSystem* FileSystem::AsFileSystem() { return this; } -int32_t FileSystem::Open(int64_t expected_size, - PP_CompletionCallback callback) { - if (current_open_callback_.func) +namespace { + +PP_Resource Create(PP_Instance instance, PP_FileSystemType_Dev type) { + PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); + if (!dispatcher) + return PP_ERROR_BADARGUMENT; + + HostResource result; + dispatcher->Send(new PpapiHostMsg_PPBFileSystem_Create( + INTERFACE_ID_PPB_FILE_SYSTEM, instance, type, &result)); + if (result.is_null()) + return 0; + + linked_ptr<FileSystem> object(new FileSystem(result, type)); + return PluginResourceTracker::GetInstance()->AddResource(object); +} + +PP_Bool IsFileSystem(PP_Resource resource) { + FileSystem* object = PluginResource::GetAs<FileSystem>(resource); + return BoolToPPBool(!!object); +} + +int32_t Open(PP_Resource file_system, + int64_t expected_size, + struct PP_CompletionCallback callback) { + FileSystem* object = PluginResource::GetAs<FileSystem>(file_system); + if (!object) + return PP_ERROR_BADRESOURCE; + + Dispatcher* dispatcher = PluginDispatcher::GetForInstance(object->instance()); + if (!dispatcher) + return PP_ERROR_BADARGUMENT; + + if (object->current_open_callback_.func) return PP_ERROR_INPROGRESS; - if (called_open_) + else if (object->called_open_) return PP_ERROR_FAILED; - current_open_callback_ = callback; - called_open_ = true; - GetDispatcher()->Send(new PpapiHostMsg_PPBFileSystem_Open( - INTERFACE_ID_PPB_FILE_SYSTEM, host_resource(), expected_size)); + object->current_open_callback_ = callback; + object->called_open_ = true; + + dispatcher->Send(new PpapiHostMsg_PPBFileSystem_Open( + INTERFACE_ID_PPB_FILE_SYSTEM, object->host_resource(), expected_size)); return PP_OK_COMPLETIONPENDING; } -PP_FileSystemType_Dev FileSystem::GetType() { - return type_; +PP_FileSystemType_Dev GetType(PP_Resource resource) { + FileSystem* object = PluginResource::GetAs<FileSystem>(resource); + if (!object) + return PP_FILESYSTEMTYPE_INVALID; + return object->type_; } -void FileSystem::OpenComplete(int32_t result) { - PP_RunAndClearCompletionCallback(¤t_open_callback_, result); +const PPB_FileSystem_Dev file_system_interface = { + &Create, + &IsFileSystem, + &Open, + &GetType +}; + +InterfaceProxy* CreateFileSystemProxy(Dispatcher* dispatcher, + const void* target_interface) { + return new PPB_FileSystem_Proxy(dispatcher, target_interface); } +} // namespace + PPB_FileSystem_Proxy::PPB_FileSystem_Proxy(Dispatcher* dispatcher, const void* target_interface) : InterfaceProxy(dispatcher, target_interface), @@ -121,7 +139,7 @@ PPB_FileSystem_Proxy::~PPB_FileSystem_Proxy() { const InterfaceProxy::Info* PPB_FileSystem_Proxy::GetInfo() { static const Info info = { - ::ppapi::thunk::GetPPB_FileSystem_Thunk(), + &file_system_interface, PPB_FILESYSTEM_DEV_INTERFACE, INTERFACE_ID_PPB_FILE_SYSTEM, false, @@ -130,24 +148,6 @@ const InterfaceProxy::Info* PPB_FileSystem_Proxy::GetInfo() { return &info; } -// static -PP_Resource PPB_FileSystem_Proxy::CreateProxyResource( - PP_Instance instance, - PP_FileSystemType_Dev type) { - PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); - if (!dispatcher) - return PP_ERROR_BADARGUMENT; - - HostResource result; - dispatcher->Send(new PpapiHostMsg_PPBFileSystem_Create( - INTERFACE_ID_PPB_FILE_SYSTEM, instance, type, &result)); - if (result.is_null()) - return 0; - - linked_ptr<FileSystem> object(new FileSystem(result, type)); - return PluginResourceTracker::GetInstance()->AddResource(object); -} - bool PPB_FileSystem_Proxy::OnMessageReceived(const IPC::Message& msg) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(PPB_FileSystem_Proxy, msg) @@ -162,10 +162,7 @@ bool PPB_FileSystem_Proxy::OnMessageReceived(const IPC::Message& msg) { void PPB_FileSystem_Proxy::OnMsgCreate(PP_Instance instance, int type, HostResource* result) { - EnterFunctionNoLock<ResourceCreationAPI> enter(instance, true); - if (enter.failed()) - return; - PP_Resource resource = enter.functions()->CreateFileSystem( + PP_Resource resource = ppb_file_system_target()->Create( instance, static_cast<PP_FileSystemType_Dev>(type)); if (!resource) return; // CreateInfo default constructor initializes to 0. @@ -174,24 +171,25 @@ void PPB_FileSystem_Proxy::OnMsgCreate(PP_Instance instance, void PPB_FileSystem_Proxy::OnMsgOpen(const HostResource& host_resource, int64_t expected_size) { - EnterHostFromHostResource<PPB_FileSystem_API> enter(host_resource); - if (enter.failed()) - return; - CompletionCallback callback = callback_factory_.NewCallback( &PPB_FileSystem_Proxy::OpenCompleteInHost, host_resource); - int32_t result = enter.object()->Open(expected_size, - callback.pp_completion_callback()); + + int32_t result = ppb_file_system_target()->Open( + host_resource.host_resource(), expected_size, + callback.pp_completion_callback()); if (result != PP_OK_COMPLETIONPENDING) callback.Run(result); } // Called in the plugin to handle the open callback. -void PPB_FileSystem_Proxy::OnMsgOpenComplete(const HostResource& host_resource, +void PPB_FileSystem_Proxy::OnMsgOpenComplete(const HostResource& filesystem, int32_t result) { - EnterPluginFromHostResource<PPB_FileSystem_API> enter(host_resource); - if (enter.succeeded()) - static_cast<FileSystem*>(enter.object())->OpenComplete(result); + FileSystem* object = PluginResource::GetAs<FileSystem>( + PluginResourceTracker::GetInstance()->PluginResourceForHostResource( + filesystem)); + if (!object || !object->current_open_callback_.func) + return; + PP_RunAndClearCompletionCallback(&object->current_open_callback_, result); } void PPB_FileSystem_Proxy::OpenCompleteInHost( diff --git a/ppapi/proxy/ppb_file_system_proxy.h b/ppapi/proxy/ppb_file_system_proxy.h index e00a11d..acfe171 100644 --- a/ppapi/proxy/ppb_file_system_proxy.h +++ b/ppapi/proxy/ppb_file_system_proxy.h @@ -8,7 +8,6 @@ #include <string> #include "base/basictypes.h" -#include "ppapi/c/dev/ppb_file_system_dev.h" #include "ppapi/c/pp_instance.h" #include "ppapi/c/pp_resource.h" #include "ppapi/c/pp_time.h" @@ -30,8 +29,9 @@ class PPB_FileSystem_Proxy : public InterfaceProxy { static const Info* GetInfo(); - static PP_Resource CreateProxyResource(PP_Instance instance, - PP_FileSystemType_Dev type); + const PPB_FileSystem_Dev* ppb_file_system_target() const { + return static_cast<const PPB_FileSystem_Dev*>(target_interface()); + } // InterfaceProxy implementation. virtual bool OnMessageReceived(const IPC::Message& msg); diff --git a/ppapi/proxy/ppb_font_proxy.cc b/ppapi/proxy/ppb_font_proxy.cc index c8f621a..eab4494 100644 --- a/ppapi/proxy/ppb_font_proxy.cc +++ b/ppapi/proxy/ppb_font_proxy.cc @@ -64,7 +64,7 @@ const InterfaceProxy::Info* PPB_Font_Proxy::GetInfo() { return &info; } -::ppapi::thunk::PPB_Font_FunctionAPI* PPB_Font_Proxy::AsPPB_Font_FunctionAPI() { +::ppapi::thunk::PPB_Font_FunctionAPI* PPB_Font_Proxy::AsFont_FunctionAPI() { return this; } @@ -114,7 +114,7 @@ Font::Font(const HostResource& resource, Font::~Font() { } -ppapi::thunk::PPB_Font_API* Font::AsPPB_Font_API() { +ppapi::thunk::PPB_Font_API* Font::AsFont_API() { return this; } diff --git a/ppapi/proxy/ppb_font_proxy.h b/ppapi/proxy/ppb_font_proxy.h index 32893ea..bb351ea 100644 --- a/ppapi/proxy/ppb_font_proxy.h +++ b/ppapi/proxy/ppb_font_proxy.h @@ -30,7 +30,7 @@ class PPB_Font_Proxy : public ppapi::FunctionGroupBase, static const Info* GetInfo(); // FunctionGroupBase overrides. - virtual ppapi::thunk::PPB_Font_FunctionAPI* AsPPB_Font_FunctionAPI() OVERRIDE; + virtual ppapi::thunk::PPB_Font_FunctionAPI* AsFont_FunctionAPI() OVERRIDE; // PPB_Font_FunctionAPI implementation. virtual PP_Var GetFontFamilies(PP_Instance instance) OVERRIDE; @@ -54,7 +54,7 @@ class Font : public PluginResource, virtual ~Font(); // ResourceObjectBase. - virtual ppapi::thunk::PPB_Font_API* AsPPB_Font_API() OVERRIDE; + virtual ppapi::thunk::PPB_Font_API* AsFont_API() OVERRIDE; // PluginResource overrides. virtual Font* AsFont() OVERRIDE; diff --git a/ppapi/proxy/ppb_graphics_2d_proxy.cc b/ppapi/proxy/ppb_graphics_2d_proxy.cc index 8027956..38777b7 100644 --- a/ppapi/proxy/ppb_graphics_2d_proxy.cc +++ b/ppapi/proxy/ppb_graphics_2d_proxy.cc @@ -12,15 +12,14 @@ #include "ppapi/c/pp_errors.h" #include "ppapi/c/pp_resource.h" #include "ppapi/c/ppb_graphics_2d.h" -#include "ppapi/proxy/enter_proxy.h" #include "ppapi/proxy/plugin_dispatcher.h" #include "ppapi/proxy/plugin_resource.h" #include "ppapi/proxy/ppapi_messages.h" #include "ppapi/thunk/enter.h" -#include "ppapi/thunk/ppb_graphics_2d_api.h" #include "ppapi/thunk/thunk.h" using ::ppapi::thunk::PPB_Graphics2D_API; +using ::ppapi::thunk::EnterResource; namespace pp { namespace proxy { @@ -34,54 +33,7 @@ InterfaceProxy* CreateGraphics2DProxy(Dispatcher* dispatcher, } // namespace -class Graphics2D : public PluginResource, - public ::ppapi::thunk::PPB_Graphics2D_API { - public: - Graphics2D(const HostResource& host_resource, - const PP_Size& size, - PP_Bool is_always_opaque); - virtual ~Graphics2D(); - - // ResourceObjectBase. - virtual PPB_Graphics2D_API* AsPPB_Graphics2D_API(); - - // PPB_Graphics_2D_API. - PP_Bool Describe(PP_Size* size, PP_Bool* is_always_opaque); - void PaintImageData(PP_Resource image_data, - const PP_Point* top_left, - const PP_Rect* src_rect); - void Scroll(const PP_Rect* clip_rect, - const PP_Point* amount); - void ReplaceContents(PP_Resource image_data); - int32_t Flush(PP_CompletionCallback callback); - - // Notification that the host has sent an ACK for a pending Flush. - void FlushACK(int32_t result_code); - - private: - PP_Size size_; - PP_Bool is_always_opaque_; - - // In the plugin, this is the current callback set for Flushes. When the - // callback function pointer is non-NULL, we're waiting for a flush ACK. - PP_CompletionCallback current_flush_callback_; - - DISALLOW_COPY_AND_ASSIGN(Graphics2D); -}; - -Graphics2D::Graphics2D(const HostResource& host_resource, - const PP_Size& size, - PP_Bool is_always_opaque) - : PluginResource(host_resource), - size_(size), - is_always_opaque_(is_always_opaque), - current_flush_callback_(PP_BlockUntilComplete()) { -} - -Graphics2D::~Graphics2D() { -} - -PPB_Graphics2D_API* Graphics2D::AsPPB_Graphics2D_API() { +PPB_Graphics2D_API* Graphics2D::AsGraphics2D_API() { return this; } @@ -133,19 +85,15 @@ int32_t Graphics2D::Flush(PP_CompletionCallback callback) { if (!callback.func) return PP_ERROR_BADARGUMENT; - if (current_flush_callback_.func) + if (is_flush_pending()) return PP_ERROR_INPROGRESS; // Can't have >1 flush pending. - current_flush_callback_ = callback; + set_current_flush_callback(callback); GetDispatcher()->Send(new PpapiHostMsg_PPBGraphics2D_Flush( INTERFACE_ID_PPB_GRAPHICS_2D, host_resource())); return PP_OK_COMPLETIONPENDING; } -void Graphics2D::FlushACK(int32_t result_code) { - PP_RunAndClearCompletionCallback(¤t_flush_callback_, result_code); -} - PPB_Graphics2D_Proxy::PPB_Graphics2D_Proxy(Dispatcher* dispatcher, const void* target_interface) : InterfaceProxy(dispatcher, target_interface), @@ -167,26 +115,6 @@ const InterfaceProxy::Info* PPB_Graphics2D_Proxy::GetInfo() { return &info; } -// static -PP_Resource PPB_Graphics2D_Proxy::CreateProxyResource( - PP_Instance instance, - const PP_Size& size, - PP_Bool is_always_opaque) { - PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); - if (!dispatcher) - return 0; - - HostResource result; - dispatcher->Send(new PpapiHostMsg_ResourceCreation_Graphics2D( - INTERFACE_ID_RESOURCE_CREATION, instance, size, is_always_opaque, - &result)); - if (result.is_null()) - return 0; - linked_ptr<Graphics2D> graphics_2d(new Graphics2D(result, size, - is_always_opaque)); - return PluginResourceTracker::GetInstance()->AddResource(graphics_2d); -} - bool PPB_Graphics2D_Proxy::OnMessageReceived(const IPC::Message& msg) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(PPB_Graphics2D_Proxy, msg) @@ -213,7 +141,7 @@ void PPB_Graphics2D_Proxy::OnMsgPaintImageData( const PP_Point& top_left, bool src_rect_specified, const PP_Rect& src_rect) { - EnterHostFromHostResource<PPB_Graphics2D_API> enter(graphics_2d); + EnterResource<PPB_Graphics2D_API> enter(graphics_2d.host_resource(), false); if (enter.failed()) return; enter.object()->PaintImageData(image_data.host_resource(), &top_left, @@ -224,7 +152,7 @@ void PPB_Graphics2D_Proxy::OnMsgScroll(const HostResource& graphics_2d, bool clip_specified, const PP_Rect& clip, const PP_Point& amount) { - EnterHostFromHostResource<PPB_Graphics2D_API> enter(graphics_2d); + EnterResource<PPB_Graphics2D_API> enter(graphics_2d.host_resource(), false); if (enter.failed()) return; enter.object()->Scroll(clip_specified ? &clip : NULL, &amount); @@ -233,7 +161,7 @@ void PPB_Graphics2D_Proxy::OnMsgScroll(const HostResource& graphics_2d, void PPB_Graphics2D_Proxy::OnMsgReplaceContents( const HostResource& graphics_2d, const HostResource& image_data) { - EnterHostFromHostResource<PPB_Graphics2D_API> enter(graphics_2d); + EnterResource<PPB_Graphics2D_API> enter(graphics_2d.host_resource(), false); if (enter.failed()) return; enter.object()->ReplaceContents(image_data.host_resource()); @@ -254,9 +182,24 @@ void PPB_Graphics2D_Proxy::OnMsgFlush(const HostResource& graphics_2d) { void PPB_Graphics2D_Proxy::OnMsgFlushACK(const HostResource& host_resource, int32_t pp_error) { - EnterPluginFromHostResource<PPB_Graphics2D_API> enter(host_resource); - if (enter.succeeded()) - static_cast<Graphics2D*>(enter.object())->FlushACK(pp_error); + PP_Resource plugin_resource = + PluginResourceTracker::GetInstance()->PluginResourceForHostResource( + host_resource); + if (!plugin_resource) + return; + + Graphics2D* object = PluginResource::GetAs<Graphics2D>(plugin_resource); + if (!object) { + // The plugin has released the graphics 2D object so don't issue the + // callback. + return; + } + + // Be careful to make the callback NULL again before issuing the callback + // since the plugin might want to flush from within the callback. + PP_CompletionCallback callback = object->current_flush_callback(); + object->set_current_flush_callback(PP_BlockUntilComplete()); + PP_RunCompletionCallback(&callback, pp_error); } void PPB_Graphics2D_Proxy::SendFlushACKToPlugin( diff --git a/ppapi/proxy/ppb_graphics_2d_proxy.h b/ppapi/proxy/ppb_graphics_2d_proxy.h index 9be7f83..b799950 100644 --- a/ppapi/proxy/ppb_graphics_2d_proxy.h +++ b/ppapi/proxy/ppb_graphics_2d_proxy.h @@ -17,6 +17,7 @@ #include "ppapi/proxy/interface_proxy.h" #include "ppapi/proxy/plugin_resource.h" #include "ppapi/proxy/proxy_non_thread_safe_ref_count.h" +#include "ppapi/thunk/ppb_graphics_2d_api.h" struct PPB_Graphics2D; struct PP_Point; @@ -32,10 +33,6 @@ class PPB_Graphics2D_Proxy : public InterfaceProxy { static const Info* GetInfo(); - static PP_Resource CreateProxyResource(PP_Instance instance, - const PP_Size& size, - PP_Bool is_always_opaque); - const PPB_Graphics2D* ppb_graphics_2d_target() const { return static_cast<const PPB_Graphics2D*>(target_interface()); } @@ -70,6 +67,60 @@ class PPB_Graphics2D_Proxy : public InterfaceProxy { ProxyNonThreadSafeRefCount> callback_factory_; }; +class Graphics2D : public PluginResource, + public ::ppapi::thunk::PPB_Graphics2D_API { + public: + Graphics2D(const HostResource& host_resource, + const PP_Size& size, + PP_Bool is_always_opaque) + : PluginResource(host_resource), + size_(size), + is_always_opaque_(is_always_opaque), + current_flush_callback_(PP_BlockUntilComplete()) { + } + virtual ~Graphics2D() { + } + + // Resource overrides. + virtual Graphics2D* AsGraphics2D() { return this; } + + const PP_Size& size() const { return size_; } + PP_Bool is_always_opaque() const { return is_always_opaque_; } + + bool is_flush_pending() const { return !!current_flush_callback_.func; } + + PP_CompletionCallback current_flush_callback() const { + return current_flush_callback_; + } + void set_current_flush_callback(PP_CompletionCallback cb) { + current_flush_callback_ = cb; + } + + // ResourceObjectBase. + virtual PPB_Graphics2D_API* AsGraphics2D_API(); + + // PPB_Graphics_2D_API. + PP_Bool Describe(PP_Size* size, PP_Bool* is_always_opaque); + void PaintImageData(PP_Resource image_data, + const PP_Point* top_left, + const PP_Rect* src_rect); + void Scroll(const PP_Rect* clip_rect, + const PP_Point* amount); + void ReplaceContents(PP_Resource image_data); + int32_t Flush(PP_CompletionCallback callback); + + private: + PP_Size size_; + PP_Bool is_always_opaque_; + + // In the plugin, this is the current callback set for Flushes. When the + // callback function pointer is non-NULL, we're waiting for a flush ACK. + PP_CompletionCallback current_flush_callback_; + + DISALLOW_COPY_AND_ASSIGN(Graphics2D); +}; + + } // namespace proxy } // namespace pp diff --git a/ppapi/proxy/ppb_image_data_proxy.cc b/ppapi/proxy/ppb_image_data_proxy.cc index 2d8e7f9..2117e82 100644 --- a/ppapi/proxy/ppb_image_data_proxy.cc +++ b/ppapi/proxy/ppb_image_data_proxy.cc @@ -76,7 +76,7 @@ ImageData::ImageData(const HostResource& resource, ImageData::~ImageData() { } -::ppapi::thunk::PPB_ImageData_API* ImageData::AsPPB_ImageData_API() { +::ppapi::thunk::PPB_ImageData_API* ImageData::AsImageData_API() { return this; } diff --git a/ppapi/proxy/ppb_image_data_proxy.h b/ppapi/proxy/ppb_image_data_proxy.h index 366b6b4..6bd97a5ad 100644 --- a/ppapi/proxy/ppb_image_data_proxy.h +++ b/ppapi/proxy/ppb_image_data_proxy.h @@ -55,7 +55,7 @@ class ImageData : public PluginResource, virtual ~ImageData(); // ResourceObjectBase overrides. - virtual ::ppapi::thunk::PPB_ImageData_API* AsPPB_ImageData_API(); + virtual ::ppapi::thunk::PPB_ImageData_API* AsImageData_API(); // Resource overrides. virtual ImageData* AsImageData(); diff --git a/ppapi/proxy/resource_creation_proxy.cc b/ppapi/proxy/resource_creation_proxy.cc index 8d26528..0045bbb 100644 --- a/ppapi/proxy/resource_creation_proxy.cc +++ b/ppapi/proxy/resource_creation_proxy.cc @@ -16,9 +16,6 @@ #include "ppapi/proxy/ppb_audio_proxy.h" #include "ppapi/proxy/ppb_buffer_proxy.h" #include "ppapi/proxy/ppb_broker_proxy.h" -#include "ppapi/proxy/ppb_file_chooser_proxy.h" -#include "ppapi/proxy/ppb_file_ref_proxy.h" -#include "ppapi/proxy/ppb_file_system_proxy.h" #include "ppapi/proxy/ppb_font_proxy.h" #include "ppapi/proxy/ppb_graphics_2d_proxy.h" #include "ppapi/proxy/ppb_image_data_proxy.h" @@ -40,7 +37,7 @@ ResourceCreationProxy::~ResourceCreationProxy() { } ::ppapi::thunk::ResourceCreationAPI* -ResourceCreationProxy::AsResourceCreationAPI() { +ResourceCreationProxy::AsResourceCreation() { return this; } @@ -75,34 +72,6 @@ PP_Resource ResourceCreationProxy::CreateBuffer(PP_Instance instance, return PPB_Buffer_Proxy::CreateProxyResource(instance, size); } -PP_Resource ResourceCreationProxy::CreateDirectoryReader( - PP_Resource directory_ref) { - // Not proxied yet. - return 0; -} - -PP_Resource ResourceCreationProxy::CreateFileChooser( - PP_Instance instance, - const PP_FileChooserOptions_Dev* options) { - return PPB_FileChooser_Proxy::CreateProxyResource(instance, options); -} - -PP_Resource ResourceCreationProxy::CreateFileIO(PP_Instance instance) { - // Not proxied yet. - return 0; -} - -PP_Resource ResourceCreationProxy::CreateFileRef(PP_Resource file_system, - const char* path) { - return PPB_FileRef_Proxy::CreateProxyResource(file_system, path); -} - -PP_Resource ResourceCreationProxy::CreateFileSystem( - PP_Instance instance, - PP_FileSystemType_Dev type) { - return PPB_FileSystem_Proxy::CreateProxyResource(instance, type); -} - PP_Resource ResourceCreationProxy::CreateFontObject( PP_Instance instance, const PP_FontDescription_Dev* description) { @@ -114,11 +83,22 @@ PP_Resource ResourceCreationProxy::CreateFontObject( return PluginResourceTracker::GetInstance()->AddResource(object); } -PP_Resource ResourceCreationProxy::CreateGraphics2D(PP_Instance instance, +PP_Resource ResourceCreationProxy::CreateGraphics2D(PP_Instance pp_instance, const PP_Size& size, PP_Bool is_always_opaque) { - return PPB_Graphics2D_Proxy::CreateProxyResource(instance, size, - is_always_opaque); + PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(pp_instance); + if (!dispatcher) + return PP_ERROR_BADARGUMENT; + + HostResource result; + dispatcher->Send(new PpapiHostMsg_ResourceCreation_Graphics2D( + INTERFACE_ID_RESOURCE_CREATION, pp_instance, size, is_always_opaque, + &result)); + if (result.is_null()) + return 0; + linked_ptr<Graphics2D> graphics_2d(new Graphics2D(result, size, + is_always_opaque)); + return PluginResourceTracker::GetInstance()->AddResource(graphics_2d); } PP_Resource ResourceCreationProxy::CreateImageData(PP_Instance instance, diff --git a/ppapi/proxy/resource_creation_proxy.h b/ppapi/proxy/resource_creation_proxy.h index 501e70b..bd24bda 100644 --- a/ppapi/proxy/resource_creation_proxy.h +++ b/ppapi/proxy/resource_creation_proxy.h @@ -29,7 +29,7 @@ class ResourceCreationProxy : public ::ppapi::FunctionGroupBase, ResourceCreationProxy(Dispatcher* dispatcher); virtual ~ResourceCreationProxy(); - virtual ::ppapi::thunk::ResourceCreationAPI* AsResourceCreationAPI() OVERRIDE; + virtual ::ppapi::thunk::ResourceCreationAPI* AsResourceCreation() OVERRIDE; // ResourceCreationAPI (called in plugin). virtual PP_Resource CreateAudio(PP_Instance instance, @@ -43,15 +43,6 @@ class ResourceCreationProxy : public ::ppapi::FunctionGroupBase, virtual PP_Resource CreateBroker(PP_Instance instance) OVERRIDE; virtual PP_Resource CreateBuffer(PP_Instance instance, uint32_t size) OVERRIDE; - virtual PP_Resource CreateDirectoryReader(PP_Resource directory_ref) OVERRIDE; - virtual PP_Resource CreateFileChooser( - PP_Instance instance, - const PP_FileChooserOptions_Dev* options) OVERRIDE; - virtual PP_Resource CreateFileIO(PP_Instance instance) OVERRIDE; - virtual PP_Resource CreateFileRef(PP_Resource file_system, - const char* path) OVERRIDE; - virtual PP_Resource CreateFileSystem(PP_Instance instance, - PP_FileSystemType_Dev type) OVERRIDE; virtual PP_Resource CreateFontObject( PP_Instance instance, const PP_FontDescription_Dev* description) OVERRIDE; diff --git a/ppapi/shared_impl/audio_impl.cc b/ppapi/shared_impl/audio_impl.cc index 09d4589..0173d6e 100644 --- a/ppapi/shared_impl/audio_impl.cc +++ b/ppapi/shared_impl/audio_impl.cc @@ -25,7 +25,7 @@ AudioImpl::~AudioImpl() { } } -::ppapi::thunk::PPB_Audio_API* AudioImpl::AsPPB_Audio_API() { +::ppapi::thunk::PPB_Audio_API* AudioImpl::AsAudio_API() { return this; } diff --git a/ppapi/shared_impl/audio_impl.h b/ppapi/shared_impl/audio_impl.h index 4916cd6..ba7c780 100644 --- a/ppapi/shared_impl/audio_impl.h +++ b/ppapi/shared_impl/audio_impl.h @@ -26,7 +26,7 @@ class AudioImpl : public ResourceObjectBase, virtual ~AudioImpl(); // ResourceObjectBase implementation. - virtual ::ppapi::thunk::PPB_Audio_API* AsPPB_Audio_API() OVERRIDE; + virtual ::ppapi::thunk::PPB_Audio_API* AsAudio_API() OVERRIDE; bool playing() const { return playing_; } diff --git a/ppapi/shared_impl/function_group_base.cc b/ppapi/shared_impl/function_group_base.cc deleted file mode 100644 index 8fb7ad5..0000000 --- a/ppapi/shared_impl/function_group_base.cc +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) 2011 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/shared_impl/function_group_base.h" - -namespace ppapi { - -FunctionGroupBase::~FunctionGroupBase() { -} - -#define DEFINE_TYPE_GETTER(FUNCTIONS) \ - thunk::FUNCTIONS* FunctionGroupBase::As##FUNCTIONS() { return NULL; } -FOR_ALL_PPAPI_FUNCTION_APIS(DEFINE_TYPE_GETTER) -#undef DEFINE_TYPE_GETTER - -} // namespace ppapi diff --git a/ppapi/shared_impl/function_group_base.h b/ppapi/shared_impl/function_group_base.h index 6f828ae..4f98396 100644 --- a/ppapi/shared_impl/function_group_base.h +++ b/ppapi/shared_impl/function_group_base.h @@ -5,49 +5,53 @@ #ifndef PPAPI_SHARED_IMPL_FUNCTION_GROUP_BASE_H_ #define PPAPI_SHARED_IMPL_FUNCTION_GROUP_BASE_H_ -#include <stddef.h> // For NULL. - -#define FOR_ALL_PPAPI_FUNCTION_APIS(F) \ - F(PPB_CharSet_FunctionAPI) \ - F(PPB_CursorControl_FunctionAPI) \ - F(PPB_Find_FunctionAPI) \ - F(PPB_Font_FunctionAPI) \ - F(ResourceCreationAPI) - namespace ppapi { -// Forward declare all the function APIs. namespace thunk { -#define DECLARE_FUNCTION_CLASS(FUNCTIONS) class FUNCTIONS; -FOR_ALL_PPAPI_FUNCTION_APIS(DECLARE_FUNCTION_CLASS) -#undef DECLARE_FUNCTION_CLASS -} // namespace thunk +class PPB_CharSet_FunctionAPI; +class PPB_CursorControl_FunctionAPI; +class PPB_Font_FunctionAPI; +class ResourceCreationAPI; +} class FunctionGroupBase { public: - virtual ~FunctionGroupBase(); + virtual ~FunctionGroupBase() {} // Dynamic casting for this object. Returns the pointer to the given type if - // Inheritance-based dynamic casting for this object. Returns the pointer to - // the given type if it's supported. Derived classes override the functions - // they support to return the interface. - #define DEFINE_TYPE_GETTER(FUNCTIONS) \ - virtual thunk::FUNCTIONS* As##FUNCTIONS(); - FOR_ALL_PPAPI_FUNCTION_APIS(DEFINE_TYPE_GETTER) - #undef DEFINE_TYPE_GETTER - - // Template-based dynamic casting. See specializations below. + // it's supported. + virtual thunk::PPB_CharSet_FunctionAPI* AsCharSet_FunctionAPI() { + return NULL; + } + virtual thunk::PPB_CursorControl_FunctionAPI* AsCursorControl_FunctionAPI() { + return NULL; + } + virtual thunk::PPB_Font_FunctionAPI* AsFont_FunctionAPI() { + return NULL; + } + virtual thunk::ResourceCreationAPI* AsResourceCreation() { + return NULL; + } + template <typename T> T* GetAs() { return NULL; } }; -// Template-based dynamic casting. These specializations forward to the -// AsXXX virtual functions to return whether the given type is supported. -#define DEFINE_FUNCTION_CAST(FUNCTIONS) \ - template<> inline thunk::FUNCTIONS* FunctionGroupBase::GetAs() { \ - return As##FUNCTIONS(); \ - } -FOR_ALL_PPAPI_FUNCTION_APIS(DEFINE_FUNCTION_CAST) -#undef DEFINE_FUNCTION_CAST +template<> +inline thunk::PPB_CharSet_FunctionAPI* FunctionGroupBase::GetAs() { + return AsCharSet_FunctionAPI(); +} +template<> +inline thunk::PPB_CursorControl_FunctionAPI* FunctionGroupBase::GetAs() { + return AsCursorControl_FunctionAPI(); +} +template<> +inline thunk::PPB_Font_FunctionAPI* FunctionGroupBase::GetAs() { + return AsFont_FunctionAPI(); +} +template<> +inline ppapi::thunk::ResourceCreationAPI* FunctionGroupBase::GetAs() { + return AsResourceCreation(); +} } // namespace ppapi diff --git a/ppapi/shared_impl/resource_object_base.cc b/ppapi/shared_impl/resource_object_base.cc deleted file mode 100644 index 4c0a9af..0000000 --- a/ppapi/shared_impl/resource_object_base.cc +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) 2011 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/shared_impl/resource_object_base.h" - -namespace ppapi { - -ResourceObjectBase::~ResourceObjectBase() { -} - -#define DEFINE_TYPE_GETTER(RESOURCE) \ - thunk::RESOURCE* ResourceObjectBase::As##RESOURCE() { return NULL; } -FOR_ALL_PPAPI_RESOURCE_APIS(DEFINE_TYPE_GETTER) -#undef DEFINE_TYPE_GETTER - -} // namespace ppapi - diff --git a/ppapi/shared_impl/resource_object_base.h b/ppapi/shared_impl/resource_object_base.h index 00ac498..c8d88c1 100644 --- a/ppapi/shared_impl/resource_object_base.h +++ b/ppapi/shared_impl/resource_object_base.h @@ -5,58 +5,66 @@ #ifndef PPAPI_SHARED_IMPL_RESOURCE_OBJECT_BASE_H_ #define PPAPI_SHARED_IMPL_RESOURCE_OBJECT_BASE_H_ -#include <stddef.h> // For NULL. - -#define FOR_ALL_PPAPI_RESOURCE_APIS(F) \ - F(PPB_Audio_API) \ - F(PPB_AudioConfig_API) \ - F(PPB_AudioTrusted_API) \ - F(PPB_Broker_API) \ - F(PPB_Buffer_API) \ - F(PPB_DirectoryReader_API) \ - F(PPB_FileChooser_API) \ - F(PPB_FileIO_API) \ - F(PPB_FileRef_API) \ - F(PPB_FileSystem_API) \ - F(PPB_Find_API) \ - F(PPB_Font_API) \ - F(PPB_Graphics2D_API) \ - F(PPB_ImageData_API) - namespace ppapi { -// Forward declare all the resource APIs. namespace thunk { -#define DECLARE_RESOURCE_CLASS(RESOURCE) class RESOURCE; -FOR_ALL_PPAPI_RESOURCE_APIS(DECLARE_RESOURCE_CLASS) -#undef DECLARE_RESOURCE_CLASS -} // namespace thunk +class PPB_Audio_API; +class PPB_AudioConfig_API; +class PPB_AudioTrusted_API; +class PPB_Broker_API; +class PPB_Buffer_API; +class PPB_Font_API; +class PPB_Graphics2D_API; +class PPB_ImageData_API; +} class ResourceObjectBase { public: - virtual ~ResourceObjectBase(); - - // Dynamic casting for this object. Returns the pointer to the given type if - // Inheritance-based dynamic casting for this object. Returns the pointer to - // the given type if it's supported. Derived classes override the functions - // they support to return the interface. - #define DEFINE_TYPE_GETTER(RESOURCE) \ - virtual thunk::RESOURCE* As##RESOURCE(); - FOR_ALL_PPAPI_RESOURCE_APIS(DEFINE_TYPE_GETTER) - #undef DEFINE_TYPE_GETTER - - // Template-based dynamic casting. See specializations below. + + virtual thunk::PPB_Audio_API* AsAudio_API() { return NULL; } + virtual thunk::PPB_AudioConfig_API* AsAudioConfig_API() { return NULL; } + virtual thunk::PPB_AudioTrusted_API* AsAudioTrusted_API() { return NULL; } + virtual thunk::PPB_Buffer_API* AsBuffer_API() { return NULL; } + virtual thunk::PPB_Broker_API* AsBroker_API() { return NULL; } + virtual thunk::PPB_Font_API* AsFont_API() { return NULL; } + virtual thunk::PPB_Graphics2D_API* AsGraphics2D_API() { return NULL; } + virtual thunk::PPB_ImageData_API* AsImageData_API() { return NULL; } + template <typename T> T* GetAs() { return NULL; } }; -// Template-based dynamic casting. These specializations forward to the -// AsXXX virtual functions to return whether the given type is supported. -#define DEFINE_RESOURCE_CAST(RESOURCE) \ - template<> inline thunk::RESOURCE* ResourceObjectBase::GetAs() { \ - return As##RESOURCE(); \ - } -FOR_ALL_PPAPI_RESOURCE_APIS(DEFINE_RESOURCE_CAST) -#undef DEFINE_RESOURCE_CAST +template<> +inline thunk::PPB_Audio_API* ResourceObjectBase::GetAs() { + return AsAudio_API(); +} +template<> +inline thunk::PPB_AudioConfig_API* ResourceObjectBase::GetAs() { + return AsAudioConfig_API(); +} +template<> +inline thunk::PPB_AudioTrusted_API* ResourceObjectBase::GetAs() { + return AsAudioTrusted_API(); +} +template<> +inline thunk::PPB_Broker_API* ResourceObjectBase::GetAs() { + return AsBroker_API(); +} +template<> +inline thunk::PPB_Buffer_API* ResourceObjectBase::GetAs() { + return AsBuffer_API(); +} +template<> +inline thunk::PPB_Font_API* ResourceObjectBase::GetAs() { + return AsFont_API(); +} +template<> +inline thunk::PPB_Graphics2D_API* ResourceObjectBase::GetAs() { + return AsGraphics2D_API(); +} +template<> +inline thunk::PPB_ImageData_API* ResourceObjectBase::GetAs() { + return AsImageData_API(); +} } // namespace ppapi diff --git a/ppapi/shared_impl/tracker_base.h b/ppapi/shared_impl/tracker_base.h index 28cd442..4b7e447 100644 --- a/ppapi/shared_impl/tracker_base.h +++ b/ppapi/shared_impl/tracker_base.h @@ -40,10 +40,6 @@ class TrackerBase { // there isn't one. virtual FunctionGroupBase* GetFunctionAPI(PP_Instance inst, pp::proxy::InterfaceID id) = 0; - - // Returns the instance corresponding to the given resource, or 0 if the - // resource is invalid. - virtual PP_Instance GetInstanceForResource(PP_Resource resource) = 0; }; } // namespace ppapi diff --git a/ppapi/thunk/enter.h b/ppapi/thunk/enter.h index dc06381..b7e2f8b 100644 --- a/ppapi/thunk/enter.h +++ b/ppapi/thunk/enter.h @@ -52,11 +52,9 @@ class EnterFunction { bool succeeded() const { return !!functions_; } bool failed() const { return !functions_; } - PP_Instance instance() const { return instance_; } FunctionsT* functions() { return functions_; } private: - PP_Instance instance_; FunctionsT* functions_; DISALLOW_COPY_AND_ASSIGN(EnterFunction); @@ -73,20 +71,6 @@ class EnterFunctionNoLock : public EnterFunction<FunctionsT> { } }; -// Used when a caller has a resource, and wants to do EnterFunction for the -// instance corresponding to that resource. -template<typename FunctionsT> -class EnterFunctionGivenResource : public EnterFunction<FunctionsT> { - public: - EnterFunctionGivenResource(PP_Resource resource, bool report_error) - : EnterFunction<FunctionsT>( - TrackerBase::Get()->GetInstanceForResource(resource), - report_error) { - } -}; - -// EnterResource --------------------------------------------------------------- - template<typename ResourceT> class EnterResource { public: diff --git a/ppapi/thunk/ppb_directory_reader_api.h b/ppapi/thunk/ppb_directory_reader_api.h deleted file mode 100644 index b651a57..0000000 --- a/ppapi/thunk/ppb_directory_reader_api.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) 2011 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_THUNK_DIRECTORY_READER_API_H_ -#define PPAPI_THUNK_DIRECTORY_READER_API_H_ - -#include "ppapi/c/dev/ppb_directory_reader_dev.h" - -namespace ppapi { -namespace thunk { - -class PPB_DirectoryReader_API { - public: - virtual int32_t GetNextEntry(PP_DirectoryEntry_Dev* entry, - PP_CompletionCallback callback) = 0; -}; - -} // namespace thunk -} // namespace ppapi - -#endif // PPAPI_THUNK_DIRECTORY_READER_API_H_ diff --git a/ppapi/thunk/ppb_directory_reader_thunk.cc b/ppapi/thunk/ppb_directory_reader_thunk.cc deleted file mode 100644 index d1dfed4..0000000 --- a/ppapi/thunk/ppb_directory_reader_thunk.cc +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (c) 2011 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/c/dev/ppb_directory_reader_dev.h" -#include "ppapi/c/pp_completion_callback.h" -#include "ppapi/c/pp_errors.h" -#include "ppapi/thunk/thunk.h" -#include "ppapi/thunk/enter.h" -#include "ppapi/thunk/ppb_directory_reader_api.h" -#include "ppapi/thunk/resource_creation_api.h" - -namespace ppapi { -namespace thunk { - -namespace { - -PP_Resource Create(PP_Resource directory_ref) { - EnterFunctionGivenResource<ResourceCreationAPI> enter(directory_ref, true); - if (enter.failed()) - return 0; - return enter.functions()->CreateDirectoryReader(directory_ref); -} - -PP_Bool IsDirectoryReader(PP_Resource resource) { - EnterResource<PPB_DirectoryReader_API> enter(resource, false); - return PP_FromBool(enter.succeeded()); -} - -int32_t GetNextEntry(PP_Resource directory_reader, - PP_DirectoryEntry_Dev* entry, - PP_CompletionCallback callback) { - EnterResource<PPB_DirectoryReader_API> enter(directory_reader, true); - if (enter.failed()) - return PP_ERROR_BADRESOURCE; - return enter.object()->GetNextEntry(entry, callback); -} - -const PPB_DirectoryReader_Dev g_ppb_directory_reader_thunk = { - &Create, - &IsDirectoryReader, - &GetNextEntry -}; - -} // namespace - -const PPB_DirectoryReader_Dev* GetPPB_DirectoryReader_Thunk() { - return &g_ppb_directory_reader_thunk; -} - -} // namespace thunk -} // namespace ppapi diff --git a/ppapi/thunk/ppb_file_chooser_api.h b/ppapi/thunk/ppb_file_chooser_api.h deleted file mode 100644 index cc54527..0000000 --- a/ppapi/thunk/ppb_file_chooser_api.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) 2011 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_THUNK_PPB_FILE_CHOOSER_API_H_ -#define PPAPI_THUNK_PPB_FILE_CHOOSER_API_H_ - -#include "ppapi/c/dev/ppb_file_chooser_dev.h" - -namespace ppapi { -namespace thunk { - -class PPB_FileChooser_API { - public: - virtual int32_t Show(PP_CompletionCallback callback) = 0; - virtual PP_Resource GetNextChosenFile() = 0; -}; - -} // namespace thunk -} // namespace ppapi - -#endif // PPAPI_THUNK_PPB_FILE_CHOOSER_API_H_ diff --git a/ppapi/thunk/ppb_file_chooser_thunk.cc b/ppapi/thunk/ppb_file_chooser_thunk.cc deleted file mode 100644 index 8389725..0000000 --- a/ppapi/thunk/ppb_file_chooser_thunk.cc +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) 2011 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/c/dev/ppb_file_chooser_dev.h" -#include "ppapi/c/pp_completion_callback.h" -#include "ppapi/c/pp_errors.h" -#include "ppapi/thunk/thunk.h" -#include "ppapi/thunk/enter.h" -#include "ppapi/thunk/ppb_file_chooser_api.h" -#include "ppapi/thunk/resource_creation_api.h" - -namespace ppapi { -namespace thunk { - -namespace { - -PP_Resource Create(PP_Instance instance, - const PP_FileChooserOptions_Dev* options) { - EnterFunction<ResourceCreationAPI> enter(instance, true); - if (enter.failed()) - return 0; - return enter.functions()->CreateFileChooser(instance, options); -} - -PP_Bool IsFileChooser(PP_Resource resource) { - EnterResource<PPB_FileChooser_API> enter(resource, false); - return PP_FromBool(enter.succeeded()); -} - -int32_t Show(PP_Resource chooser, PP_CompletionCallback callback) { - EnterResource<PPB_FileChooser_API> enter(chooser, true); - if (enter.failed()) - return PP_ERROR_BADRESOURCE; - return enter.object()->Show(callback); -} - -PP_Resource GetNextChosenFile(PP_Resource chooser) { - EnterResource<PPB_FileChooser_API> enter(chooser, true); - if (enter.failed()) - return 0; - return enter.object()->GetNextChosenFile(); -} - -const PPB_FileChooser_Dev g_ppb_file_chooser_thunk = { - &Create, - &IsFileChooser, - &Show, - &GetNextChosenFile -}; - -} // namespace - -const PPB_FileChooser_Dev* GetPPB_FileChooser_Thunk() { - return &g_ppb_file_chooser_thunk; -} - -} // namespace thunk -} // namespace ppapi diff --git a/ppapi/thunk/ppb_file_io_api.h b/ppapi/thunk/ppb_file_io_api.h deleted file mode 100644 index 123e4c2..0000000 --- a/ppapi/thunk/ppb_file_io_api.h +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) 2011 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_THUNK_PPB_FILE_IO_API_H_ -#define PPAPI_THUNK_PPB_FILE_IO_API_H_ - -#include "ppapi/c/dev/ppb_file_io_dev.h" - -namespace ppapi { -namespace thunk { - -class PPB_FileIO_API { - public: - virtual int32_t Open(PP_Resource file_ref, - int32_t open_flags, - PP_CompletionCallback callback) = 0; - virtual int32_t Query(PP_FileInfo_Dev* info, - PP_CompletionCallback callback) = 0; - virtual int32_t Touch(PP_Time last_access_time, - PP_Time last_modified_time, - PP_CompletionCallback callback) = 0; - virtual int32_t Read(int64_t offset, - char* buffer, - int32_t bytes_to_read, - PP_CompletionCallback callback) = 0; - virtual int32_t Write(int64_t offset, - const char* buffer, - int32_t bytes_to_write, - PP_CompletionCallback callback) = 0; - virtual int32_t SetLength(int64_t length, - PP_CompletionCallback callback) = 0; - virtual int32_t Flush(PP_CompletionCallback callback) = 0; - virtual void Close() = 0; - - // Trusted API. - virtual int32_t GetOSFileDescriptor() = 0; - virtual int32_t WillWrite(int64_t offset, - int32_t bytes_to_write, - PP_CompletionCallback callback) = 0; - virtual int32_t WillSetLength(int64_t length, - PP_CompletionCallback callback) = 0; -}; - -} // namespace thunk -} // namespace ppapi - -#endif // PPAPI_THUNK_PPB_FILE_IO_API_H_ diff --git a/ppapi/thunk/ppb_file_io_thunk.cc b/ppapi/thunk/ppb_file_io_thunk.cc deleted file mode 100644 index 2aaaaa4..0000000 --- a/ppapi/thunk/ppb_file_io_thunk.cc +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright (c) 2011 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/c/dev/ppb_file_io_dev.h" -#include "ppapi/c/pp_completion_callback.h" -#include "ppapi/c/pp_errors.h" -#include "ppapi/thunk/thunk.h" -#include "ppapi/thunk/enter.h" -#include "ppapi/thunk/ppb_file_io_api.h" -#include "ppapi/thunk/resource_creation_api.h" - -namespace ppapi { -namespace thunk { - -namespace { - -PP_Resource Create(PP_Instance instance) { - EnterFunction<ResourceCreationAPI> enter(instance, true); - if (enter.failed()) - return 0; - return enter.functions()->CreateFileIO(instance); -} - -PP_Bool IsFileIO(PP_Resource resource) { - EnterResource<PPB_FileIO_API> enter(resource, false); - return PP_FromBool(enter.succeeded()); -} - -int32_t Open(PP_Resource file_io, - PP_Resource file_ref, - int32_t open_flags, - PP_CompletionCallback callback) { - EnterResource<PPB_FileIO_API> enter(file_io, true); - if (enter.failed()) - return PP_ERROR_BADRESOURCE; - return enter.object()->Open(file_ref, open_flags, callback); -} - -int32_t Query(PP_Resource file_io, - PP_FileInfo_Dev* info, - PP_CompletionCallback callback) { - EnterResource<PPB_FileIO_API> enter(file_io, true); - if (enter.failed()) - return PP_ERROR_BADRESOURCE; - return enter.object()->Query(info, callback); -} - -int32_t Touch(PP_Resource file_io, - PP_Time last_access_time, - PP_Time last_modified_time, - PP_CompletionCallback callback) { - EnterResource<PPB_FileIO_API> enter(file_io, true); - if (enter.failed()) - return PP_ERROR_BADRESOURCE; - return enter.object()->Touch(last_access_time, last_modified_time, callback); -} - -int32_t Read(PP_Resource file_io, - int64_t offset, - char* buffer, - int32_t bytes_to_read, - PP_CompletionCallback callback) { - EnterResource<PPB_FileIO_API> enter(file_io, true); - if (enter.failed()) - return PP_ERROR_BADRESOURCE; - return enter.object()->Read(offset, buffer, bytes_to_read, callback); -} - -int32_t Write(PP_Resource file_io, - int64_t offset, - const char* buffer, - int32_t bytes_to_write, - PP_CompletionCallback callback) { - EnterResource<PPB_FileIO_API> enter(file_io, true); - if (enter.failed()) - return PP_ERROR_BADRESOURCE; - return enter.object()->Write(offset, buffer, bytes_to_write, callback); -} - -int32_t SetLength(PP_Resource file_io, - int64_t length, - PP_CompletionCallback callback) { - EnterResource<PPB_FileIO_API> enter(file_io, true); - if (enter.failed()) - return PP_ERROR_BADRESOURCE; - return enter.object()->SetLength(length, callback); -} - -int32_t Flush(PP_Resource file_io, - PP_CompletionCallback callback) { - EnterResource<PPB_FileIO_API> enter(file_io, true); - if (enter.failed()) - return PP_ERROR_BADRESOURCE; - return enter.object()->Flush(callback); -} - -void Close(PP_Resource file_io) { - EnterResource<PPB_FileIO_API> enter(file_io, true); - if (enter.succeeded()) - enter.object()->Close(); -} - -const PPB_FileIO_Dev g_ppb_file_io_thunk = { - &Create, - &IsFileIO, - &Open, - &Query, - &Touch, - &Read, - &Write, - &SetLength, - &Flush, - &Close -}; - -} // namespace - -const PPB_FileIO_Dev* GetPPB_FileIO_Thunk() { - return &g_ppb_file_io_thunk; -} - -} // namespace thunk -} // namespace ppapi diff --git a/ppapi/thunk/ppb_file_io_trusted_thunk.cc b/ppapi/thunk/ppb_file_io_trusted_thunk.cc deleted file mode 100644 index 1cba025..0000000 --- a/ppapi/thunk/ppb_file_io_trusted_thunk.cc +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) 2011 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/c/dev/ppb_file_io_trusted_dev.h" -#include "ppapi/c/pp_completion_callback.h" -#include "ppapi/c/pp_errors.h" -#include "ppapi/thunk/thunk.h" -#include "ppapi/thunk/enter.h" -#include "ppapi/thunk/ppb_file_io_api.h" -#include "ppapi/thunk/resource_creation_api.h" - -namespace ppapi { -namespace thunk { - -namespace { - -int32_t GetOSFileDescriptor(PP_Resource file_io) { - EnterResource<PPB_FileIO_API> enter(file_io, true); - if (enter.failed()) - return PP_ERROR_BADRESOURCE; - return enter.object()->GetOSFileDescriptor(); -} - -int32_t WillWrite(PP_Resource file_io, - int64_t offset, - int32_t bytes_to_write, - PP_CompletionCallback callback) { - EnterResource<PPB_FileIO_API> enter(file_io, true); - if (enter.failed()) - return PP_ERROR_BADRESOURCE; - return enter.object()->WillWrite(offset, bytes_to_write, callback); -} - -int32_t WillSetLength(PP_Resource file_io, - int64_t length, - PP_CompletionCallback callback) { - EnterResource<PPB_FileIO_API> enter(file_io, true); - if (enter.failed()) - return PP_ERROR_BADRESOURCE; - return enter.object()->WillSetLength(length, callback); -} - -const PPB_FileIOTrusted_Dev g_ppb_file_io_trusted_thunk = { - &GetOSFileDescriptor, - &WillWrite, - &WillSetLength -}; - -} // namespace - -const PPB_FileIOTrusted_Dev* GetPPB_FileIOTrusted_Thunk() { - return &g_ppb_file_io_trusted_thunk; -} - -} // namespace thunk -} // namespace ppapi diff --git a/ppapi/thunk/ppb_file_ref_api.h b/ppapi/thunk/ppb_file_ref_api.h deleted file mode 100644 index 936fa3d..0000000 --- a/ppapi/thunk/ppb_file_ref_api.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2011 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_THUNK_PPB_FILE_REF_API_H_ -#define PPAPI_THUNK_PPB_FILE_REF_API_H_ - -#include "ppapi/c/dev/ppb_file_ref_dev.h" - -namespace ppapi { -namespace thunk { - -class PPB_FileRef_API { - public: - virtual PP_FileSystemType_Dev GetFileSystemType() const = 0; - virtual PP_Var GetName() const = 0; - virtual PP_Var GetPath() const = 0; - virtual PP_Resource GetParent() = 0; - virtual int32_t MakeDirectory(PP_Bool make_ancestors, - PP_CompletionCallback callback) = 0; - virtual int32_t Touch(PP_Time last_access_time, - PP_Time last_modified_time, - PP_CompletionCallback callback) = 0; - virtual int32_t Delete(PP_CompletionCallback callback) = 0; - virtual int32_t Rename(PP_Resource new_file_ref, - PP_CompletionCallback callback) = 0; -}; - -} // namespace thunk -} // namespace ppapi - -#endif // PPAPI_THUNK_PPB_FILE_REF_API_H_ diff --git a/ppapi/thunk/ppb_file_ref_thunk.cc b/ppapi/thunk/ppb_file_ref_thunk.cc deleted file mode 100644 index aeac135..0000000 --- a/ppapi/thunk/ppb_file_ref_thunk.cc +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright (c) 2011 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/c/dev/pp_file_info_dev.h" -#include "ppapi/c/dev/ppb_file_ref_dev.h" -#include "ppapi/c/pp_completion_callback.h" -#include "ppapi/c/pp_errors.h" -#include "ppapi/thunk/thunk.h" -#include "ppapi/thunk/enter.h" -#include "ppapi/thunk/ppb_file_ref_api.h" -#include "ppapi/thunk/resource_creation_api.h" - -namespace ppapi { -namespace thunk { - -namespace { - -PP_Resource Create(PP_Resource file_system, const char* path) { - EnterFunctionGivenResource<ResourceCreationAPI> enter(file_system, true); - if (enter.failed()) - return 0; - return enter.functions()->CreateFileRef(file_system, path); -} - -PP_Bool IsFileRef(PP_Resource resource) { - EnterResource<PPB_FileRef_API> enter(resource, false); - return PP_FromBool(enter.succeeded()); -} - -PP_FileSystemType_Dev GetFileSystemType(PP_Resource file_ref) { - EnterResource<PPB_FileRef_API> enter(file_ref, true); - if (enter.failed()) - return PP_FILESYSTEMTYPE_INVALID; - return enter.object()->GetFileSystemType(); -} - -PP_Var GetName(PP_Resource file_ref) { - EnterResource<PPB_FileRef_API> enter(file_ref, true); - if (enter.failed()) - return PP_MakeUndefined(); - return enter.object()->GetName(); -} - -PP_Var GetPath(PP_Resource file_ref) { - EnterResource<PPB_FileRef_API> enter(file_ref, true); - if (enter.failed()) - return PP_MakeUndefined(); - return enter.object()->GetPath(); -} - -PP_Resource GetParent(PP_Resource file_ref) { - EnterResource<PPB_FileRef_API> enter(file_ref, true); - if (enter.failed()) - return PP_ERROR_BADRESOURCE; - return enter.object()->GetParent(); -} - -int32_t MakeDirectory(PP_Resource directory_ref, - PP_Bool make_ancestors, - PP_CompletionCallback callback) { - EnterResource<PPB_FileRef_API> enter(directory_ref, true); - if (enter.failed()) - return PP_ERROR_BADRESOURCE; - return enter.object()->MakeDirectory(make_ancestors, callback); -} - -int32_t Touch(PP_Resource file_ref, - PP_Time last_access_time, - PP_Time last_modified_time, - PP_CompletionCallback callback) { - EnterResource<PPB_FileRef_API> enter(file_ref, true); - if (enter.failed()) - return PP_ERROR_BADRESOURCE; - return enter.object()->Touch(last_access_time, last_modified_time, callback); -} - -int32_t Delete(PP_Resource file_ref, - PP_CompletionCallback callback) { - EnterResource<PPB_FileRef_API> enter(file_ref, true); - if (enter.failed()) - return PP_ERROR_BADRESOURCE; - return enter.object()->Delete(callback); -} - -int32_t Rename(PP_Resource file_ref, - PP_Resource new_file_ref, - PP_CompletionCallback callback) { - EnterResource<PPB_FileRef_API> enter(file_ref, true); - if (enter.failed()) - return PP_ERROR_BADRESOURCE; - return enter.object()->Rename(new_file_ref, callback); -} - -const PPB_FileRef_Dev g_ppb_file_ref_thunk = { - &Create, - &IsFileRef, - &GetFileSystemType, - &GetName, - &GetPath, - &GetParent, - &MakeDirectory, - &Touch, - &Delete, - &Rename -}; - -} // namespace - -const PPB_FileRef_Dev* GetPPB_FileRef_Thunk() { - return &g_ppb_file_ref_thunk; -} - -} // namespace thunk -} // namespace ppapi diff --git a/ppapi/thunk/ppb_file_system_api.h b/ppapi/thunk/ppb_file_system_api.h deleted file mode 100644 index 097d53f..0000000 --- a/ppapi/thunk/ppb_file_system_api.h +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) 2011 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_THUNK_PPB_FILE_SYSTEM_API_H_ -#define PPAPI_THUNK_PPB_FILE_SYSTEM_API_H_ - -#include "ppapi/c/dev/ppb_file_system_dev.h" - -namespace ppapi { -namespace thunk { - -class PPB_FileSystem_API { - public: - virtual int32_t Open(int64_t expected_size, - PP_CompletionCallback callback) = 0; - virtual PP_FileSystemType_Dev GetType() = 0; -}; - -} // namespace thunk -} // namespace ppapi - -#endif // PPAPI_THUNK_PPB_FILE_SYSTEM_API_H_ diff --git a/ppapi/thunk/ppb_file_system_thunk.cc b/ppapi/thunk/ppb_file_system_thunk.cc deleted file mode 100644 index e1c4f6a..0000000 --- a/ppapi/thunk/ppb_file_system_thunk.cc +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) 2011 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/c/dev/ppb_file_system_dev.h" -#include "ppapi/c/pp_completion_callback.h" -#include "ppapi/c/pp_errors.h" -#include "ppapi/thunk/thunk.h" -#include "ppapi/thunk/enter.h" -#include "ppapi/thunk/ppb_file_system_api.h" -#include "ppapi/thunk/resource_creation_api.h" - -namespace ppapi { -namespace thunk { - -namespace { - -PP_Resource Create(PP_Instance instance, PP_FileSystemType_Dev type) { - EnterFunction<ResourceCreationAPI> enter(instance, true); - if (enter.failed()) - return 0; - return enter.functions()->CreateFileSystem(instance, type); -} - -PP_Bool IsFileSystem(PP_Resource resource) { - EnterResource<PPB_FileSystem_API> enter(resource, false); - return PP_FromBool(enter.succeeded()); -} - -int32_t Open(PP_Resource file_system, - int64 expected_size, - PP_CompletionCallback callback) { - EnterResource<PPB_FileSystem_API> enter(file_system, true); - if (enter.failed()) - return PP_ERROR_BADRESOURCE; - return enter.object()->Open(expected_size, callback); -} - -PP_FileSystemType_Dev GetType(PP_Resource file_system) { - EnterResource<PPB_FileSystem_API> enter(file_system, true); - if (enter.failed()) - return PP_FILESYSTEMTYPE_INVALID; - return enter.object()->GetType(); -} - -const PPB_FileSystem_Dev g_ppb_file_system_thunk = { - &Create, - &IsFileSystem, - &Open, - &GetType -}; - -} // namespace - -const PPB_FileSystem_Dev* GetPPB_FileSystem_Thunk() { - return &g_ppb_file_system_thunk; -} - -} // namespace thunk -} // namespace ppapi diff --git a/ppapi/thunk/ppb_find_api.h b/ppapi/thunk/ppb_find_api.h deleted file mode 100644 index 2c0e058..0000000 --- a/ppapi/thunk/ppb_find_api.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) 2011 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_THUNK_PPB_FIND_API_H_ -#define PPAPI_THUNK_PPB_FIND_API_H_ - -#include "ppapi/c/dev/ppb_find_dev.h" -#include "ppapi/proxy/interface_id.h" - -namespace ppapi { -namespace thunk { - -class PPB_Find_FunctionAPI { - public: - static const ::pp::proxy::InterfaceID interface_id = - ::pp::proxy::INTERFACE_ID_PPB_FIND; - - virtual void NumberOfFindResultsChanged(PP_Instance instance, - int32_t total, - PP_Bool final_result) = 0; - virtual void SelectedFindResultChanged(PP_Instance instance, - int32_t index) = 0; -}; - -} // namespace thunk -} // namespace ppapi - -#endif // PPAPI_THUNK_PPB_FIND_API_H_ diff --git a/ppapi/thunk/ppb_find_thunk.cc b/ppapi/thunk/ppb_find_thunk.cc deleted file mode 100644 index e37e8ed..0000000 --- a/ppapi/thunk/ppb_find_thunk.cc +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) 2011 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/c/dev/ppb_find_dev.h" -#include "ppapi/thunk/thunk.h" -#include "ppapi/thunk/enter.h" -#include "ppapi/thunk/ppb_find_api.h" -#include "ppapi/thunk/resource_creation_api.h" - -namespace ppapi { -namespace thunk { - -namespace { - -void NumberOfFindResultsChanged(PP_Instance instance, - int32_t total, - PP_Bool final) { - EnterFunction<PPB_Find_FunctionAPI> enter(instance, true); - if (enter.succeeded()) - enter.functions()->NumberOfFindResultsChanged(instance, total, final); -} - -void SelectedFindResultChanged(PP_Instance instance, int32_t index) { - EnterFunction<PPB_Find_FunctionAPI> enter(instance, true); - if (enter.succeeded()) - enter.functions()->SelectedFindResultChanged(instance, index); -} - -const PPB_Find_Dev g_ppb_find_thunk = { - &NumberOfFindResultsChanged, - &SelectedFindResultChanged -}; - -} // namespace - -const PPB_Find_Dev* GetPPB_Find_Thunk() { - return &g_ppb_find_thunk; -} - -} // namespace thunk -} // namespace ppapi diff --git a/ppapi/thunk/resource_creation_api.h b/ppapi/thunk/resource_creation_api.h index 8a8cefc..d25285f 100644 --- a/ppapi/thunk/resource_creation_api.h +++ b/ppapi/thunk/resource_creation_api.h @@ -5,8 +5,6 @@ #ifndef PPAPI_THUNK_RESOURCE_CREATION_API_H_ #define PPAPI_THUNK_RESOURCE_CREATION_API_H_ -#include "ppapi/c/dev/ppb_file_chooser_dev.h" -#include "ppapi/c/dev/ppb_file_system_dev.h" #include "ppapi/c/pp_bool.h" #include "ppapi/c/pp_instance.h" #include "ppapi/c/pp_resource.h" @@ -41,15 +39,6 @@ class ResourceCreationAPI { uint32_t sample_frame_count) = 0; virtual PP_Resource CreateBroker(PP_Instance instance) = 0; virtual PP_Resource CreateBuffer(PP_Instance instance, uint32_t size) = 0; - virtual PP_Resource CreateDirectoryReader(PP_Resource directory_ref) = 0; - virtual PP_Resource CreateFileChooser( - PP_Instance instance, - const PP_FileChooserOptions_Dev* options) = 0; - virtual PP_Resource CreateFileIO(PP_Instance instance) = 0; - virtual PP_Resource CreateFileRef(PP_Resource file_system, - const char* path) = 0; - virtual PP_Resource CreateFileSystem(PP_Instance instance, - PP_FileSystemType_Dev type) = 0; // Note: can't be called CreateFont due to Windows #defines. virtual PP_Resource CreateFontObject( PP_Instance instance, diff --git a/ppapi/thunk/thunk.h b/ppapi/thunk/thunk.h index 1738edd..647f6eb 100644 --- a/ppapi/thunk/thunk.h +++ b/ppapi/thunk/thunk.h @@ -12,13 +12,6 @@ struct PPB_BrokerTrusted; struct PPB_Buffer_Dev; struct PPB_CharSet_Dev; struct PPB_CursorControl_Dev; -struct PPB_DirectoryReader_Dev; -struct PPB_FileChooser_Dev; -struct PPB_FileIO_Dev; -struct PPB_FileIOTrusted_Dev; -struct PPB_FileRef_Dev; -struct PPB_FileSystem_Dev; -struct PPB_Find_Dev; struct PPB_Font_Dev; struct PPB_Graphics2D; struct PPB_ImageData; @@ -33,13 +26,6 @@ const PPB_BrokerTrusted* GetPPB_Broker_Thunk(); const PPB_Buffer_Dev* GetPPB_Buffer_Thunk(); const PPB_CharSet_Dev* GetPPB_CharSet_Thunk(); const PPB_CursorControl_Dev* GetPPB_CursorControl_Thunk(); -const PPB_DirectoryReader_Dev* GetPPB_DirectoryReader_Thunk(); -const PPB_FileChooser_Dev* GetPPB_FileChooser_Thunk(); -const PPB_FileIO_Dev* GetPPB_FileIO_Thunk(); -const PPB_FileIOTrusted_Dev* GetPPB_FileIOTrusted_Thunk(); -const PPB_FileRef_Dev* GetPPB_FileRef_Thunk(); -const PPB_FileSystem_Dev* GetPPB_FileSystem_Thunk(); -const PPB_Find_Dev* GetPPB_Find_Thunk(); const PPB_Font_Dev* GetPPB_Font_Thunk(); const PPB_Graphics2D* GetPPB_Graphics2D_Thunk(); const PPB_ImageData* GetPPB_ImageData_Thunk(); |