diff options
Diffstat (limited to 'ppapi/proxy/callback_tracker.h')
-rw-r--r-- | ppapi/proxy/callback_tracker.h | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/ppapi/proxy/callback_tracker.h b/ppapi/proxy/callback_tracker.h new file mode 100644 index 0000000..5f8233c1 --- /dev/null +++ b/ppapi/proxy/callback_tracker.h @@ -0,0 +1,66 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef PPAPI_PROXY_CALLBACK_TRACKER_H_ +#define PPAPI_PROXY_CALLBACK_TRACKER_H_ + +#include <map> + +#include "ppapi/c/pp_completion_callback.h" +#include "ppapi/c/pp_stdint.h" + +namespace pp { +namespace proxy { + +class Dispatcher; + +// This object tracks cross-process callbacks. When the plugin sends a callback +// object to the renderer, we save the information and pass an identifier +// instead. +// +// On the renderer side, this identifier is converted to a new callback in that +// process. When executed, this new callback sends an IPC message containing the +// previous identifier back to the plugin. +// +// When we receive that message, ExecuteSerializedCallback converts the +// identifier back to the original callback information and runs the callback. +class CallbackTracker { + public: + CallbackTracker(Dispatcher* dispatcher); + ~CallbackTracker(); + + // Converts the given callback in the context of the plugin to a serialized + // ID. This will be passed to ReceiveCallback on the renderer side. + uint32_t SendCallback(PP_CompletionCallback callback); + + // Converts the given serialized callback ID to a new completion callback in + // the context of the current process. This callback actually will represent + // a proxy that will execute the callback in the plugin process. + PP_CompletionCallback ReceiveCallback(uint32_t serialized_callback); + + // Sends a request to the remote process to execute the given callback. + void SendExecuteSerializedCallback(uint32_t serialized_callback, + int32_t param); + + // Executes the given callback ID with the given result in the current + // process. This will also destroy the information associated with the + // callback and the serialized ID won't be valid any more. + void ReceiveExecuteSerializedCallback(uint32_t serialized_callback, + int32_t param); + + private: + // Pointer to the dispatcher that owns us. + Dispatcher* dispatcher_; + + int32_t next_callback_id_; + + // Maps callback IDs to the actual callback objects in the plugin process. + typedef std::map<int32_t, PP_CompletionCallback> CallbackMap; + CallbackMap callback_map_; +}; + +} // namespace proxy +} // namespace pp + +#endif // PPAPI_PROXY_CALLBACK_TRACKER_H_ |