15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#ifndef PPAPI_CONTENT_RENDERER_PEPPER_HOST_ARRAY_BUFFER_VAR_H_
6bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#define PPAPI_CONTENT_RENDERER_PEPPER_HOST_ARRAY_BUFFER_VAR_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
89ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/memory/shared_memory.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/c/pp_instance.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/shared_impl/host_resource.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/var.h"
129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "third_party/WebKit/public/platform/WebArrayBuffer.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochnamespace content {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Represents a host-side ArrayBufferVar.
17ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass HostArrayBufferVar : public ppapi::ArrayBufferVar {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit HostArrayBufferVar(uint32 size_in_bytes);
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  explicit HostArrayBufferVar(const blink::WebArrayBuffer& buffer);
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  explicit HostArrayBufferVar(uint32 size_in_bytes,
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              base::SharedMemoryHandle handle);
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ArrayBufferVar implementation.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void* Map() OVERRIDE;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Unmap() OVERRIDE;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual uint32 ByteLength() OVERRIDE;
28a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  virtual bool CopyToNewShmem(PP_Instance instance,
29a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                              int* host_shm_handle_id,
30a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                              base::SharedMemoryHandle* plugin_shm_handle)
31a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      OVERRIDE;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  blink::WebArrayBuffer& webkit_buffer() { return buffer_; }
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
36bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  virtual ~HostArrayBufferVar();
37bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  blink::WebArrayBuffer buffer_;
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Tracks whether the data in the buffer is valid.
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool valid_;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(HostArrayBufferVar);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch}  // namespace content
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
47bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#endif  // PPAPI_CONTENT_RENDERER_PEPPER_HOST_ARRAY_BUFFER_VAR_H_
48