1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef PPAPI_PROXY_PLUGIN_ARRAY_BUFFER_VAR_H_ 6#define PPAPI_PROXY_PLUGIN_ARRAY_BUFFER_VAR_H_ 7 8#include <vector> 9 10#include "base/basictypes.h" 11#include "base/memory/scoped_ptr.h" 12#include "base/memory/shared_memory.h" 13#include "ppapi/c/pp_instance.h" 14#include "ppapi/c/pp_stdint.h" 15#include "ppapi/shared_impl/var.h" 16 17namespace ppapi { 18 19// Represents a plugin-side ArrayBufferVar. In the plugin process, it's 20// owned as a vector. 21class PluginArrayBufferVar : public ArrayBufferVar { 22 public: 23 explicit PluginArrayBufferVar(uint32 size_in_bytes); 24 PluginArrayBufferVar(uint32 size_in_bytes, 25 base::SharedMemoryHandle plugin_handle); 26 virtual ~PluginArrayBufferVar(); 27 28 // ArrayBufferVar implementation. 29 virtual void* Map() OVERRIDE; 30 virtual void Unmap() OVERRIDE; 31 virtual uint32 ByteLength() OVERRIDE; 32 virtual bool CopyToNewShmem( 33 PP_Instance instance, 34 int* host_handle, 35 base::SharedMemoryHandle* plugin_handle) OVERRIDE; 36 37 private: 38 // Non-shared memory 39 std::vector<uint8> buffer_; 40 41 // Shared memory 42 base::SharedMemoryHandle plugin_handle_; 43 scoped_ptr<base::SharedMemory> shmem_; 44 uint32 size_in_bytes_; 45 46 DISALLOW_COPY_AND_ASSIGN(PluginArrayBufferVar); 47}; 48 49} // namespace ppapi 50 51#endif // PPAPI_PROXY_PLUGIN_ARRAY_BUFFER_VAR_H_ 52