OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011 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 #include "ppapi/cpp/dev/var_array_buffer_dev.h" | |
6 | |
7 #include "ppapi/c/dev/ppb_var_array_buffer_dev.h" | |
8 #include "ppapi/cpp/logging.h" | |
9 #include "ppapi/cpp/module_impl.h" | |
10 | |
11 namespace pp { | |
12 | |
13 namespace { | |
14 | |
15 template <> const char* interface_name<PPB_VarArrayBuffer_Dev>() { | |
16 return PPB_VAR_ARRAY_BUFFER_DEV_INTERFACE; | |
17 } | |
18 | |
19 } // namespace | |
20 | |
21 VarArrayBuffer_Dev::VarArrayBuffer_Dev(const Var& var) | |
22 : Var(var), buffer_(NULL) { | |
23 if (var.is_array_buffer()) { | |
24 buffer_ = Map(); | |
25 } else { | |
26 PP_NOTREACHED(); | |
27 var_ = PP_MakeNull(); | |
28 } | |
29 } | |
30 | |
31 VarArrayBuffer_Dev::VarArrayBuffer_Dev(uint32_t size_in_bytes) | |
32 : buffer_(NULL) { | |
33 if (has_interface<PPB_VarArrayBuffer_Dev>()) { | |
34 var_ = get_interface<PPB_VarArrayBuffer_Dev>()->Create(size_in_bytes); | |
35 needs_release_ = true; | |
36 buffer_ = Map(); | |
37 } else { | |
38 PP_NOTREACHED(); | |
39 var_ = PP_MakeNull(); | |
40 } | |
41 } | |
42 | |
43 uint32_t VarArrayBuffer_Dev::ByteLength() const { | |
44 if (has_interface<PPB_VarArrayBuffer_Dev>()) { | |
45 return get_interface<PPB_VarArrayBuffer_Dev>()->ByteLength(var_); | |
46 } | |
47 PP_NOTREACHED(); | |
48 return 0; | |
49 } | |
50 | |
51 const void* VarArrayBuffer_Dev::Map() const { | |
52 return const_cast<VarArrayBuffer_Dev*>(this)->Map(); | |
53 } | |
54 | |
55 void* VarArrayBuffer_Dev::Map() { | |
56 // TODO(dmichael): This is not thread-safe. | |
57 if (buffer_) | |
58 return buffer_; | |
59 if (has_interface<PPB_VarArrayBuffer_Dev>()) { | |
60 buffer_ = get_interface<PPB_VarArrayBuffer_Dev>()->Map(var_); | |
61 return buffer_; | |
62 } | |
63 PP_NOTREACHED(); | |
64 return 0; | |
65 } | |
66 | |
67 } // namespace pp | |
OLD | NEW |