Chromium Code Reviews| Index: ppapi/cpp/dev/var_array_buffer_dev.cc |
| diff --git a/ppapi/cpp/dev/var_array_buffer_dev.cc b/ppapi/cpp/dev/var_array_buffer_dev.cc |
| index 61f697efa2150ff29bc267264eeb48db51eb8d53..9be106f73f1894eeba19f6e09498c3879fd045b1 100644 |
| --- a/ppapi/cpp/dev/var_array_buffer_dev.cc |
| +++ b/ppapi/cpp/dev/var_array_buffer_dev.cc |
| @@ -1,9 +1,11 @@ |
| -// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| +// Copyright (c) 2012 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/cpp/dev/var_array_buffer_dev.h" |
| +#include <limits> |
| + |
| #include "ppapi/c/dev/ppb_var_array_buffer_dev.h" |
| #include "ppapi/cpp/logging.h" |
| #include "ppapi/cpp/module_impl.h" |
| @@ -18,50 +20,50 @@ template <> const char* interface_name<PPB_VarArrayBuffer_Dev>() { |
| } // namespace |
| -VarArrayBuffer_Dev::VarArrayBuffer_Dev(const Var& var) |
| - : Var(var), buffer_(NULL) { |
| - if (var.is_array_buffer()) { |
| - buffer_ = Map(); |
| - } else { |
| +VarArrayBuffer_Dev::VarArrayBuffer_Dev(const Var& var) : Var(var) { |
| + if (!var.is_array_buffer()) { |
| PP_NOTREACHED(); |
| var_ = PP_MakeNull(); |
| } |
| } |
| -VarArrayBuffer_Dev::VarArrayBuffer_Dev(uint32_t size_in_bytes) |
| - : buffer_(NULL) { |
| +VarArrayBuffer_Dev::VarArrayBuffer_Dev(uint32_t size_in_bytes) { |
| if (has_interface<PPB_VarArrayBuffer_Dev>()) { |
| var_ = get_interface<PPB_VarArrayBuffer_Dev>()->Create(size_in_bytes); |
| needs_release_ = true; |
| - buffer_ = Map(); |
| } else { |
| PP_NOTREACHED(); |
| var_ = PP_MakeNull(); |
| } |
| } |
| -uint32_t VarArrayBuffer_Dev::ByteLength() const { |
| - if (has_interface<PPB_VarArrayBuffer_Dev>()) { |
| - return get_interface<PPB_VarArrayBuffer_Dev>()->ByteLength(var_); |
| - } |
| - PP_NOTREACHED(); |
| - return 0; |
| +pp::VarArrayBuffer_Dev& VarArrayBuffer_Dev::operator=( |
| + const VarArrayBuffer_Dev& other) { |
| + Var::operator=(other); |
|
bbudge
2012/01/26 17:20:26
Isn't it a problem that you can assign a non-Array
dmichael (off chromium)
2012/01/26 18:33:48
Good point; I was only really thinking about stati
|
| + return *this; |
| } |
| -const void* VarArrayBuffer_Dev::Map() const { |
| - return const_cast<VarArrayBuffer_Dev*>(this)->Map(); |
| +uint32_t VarArrayBuffer_Dev::ByteLength() const { |
| + uint32_t byte_length = std::numeric_limits<uint32_t>::max(); |
| + if (is_array_buffer() && has_interface<PPB_VarArrayBuffer_Dev>()) |
| + get_interface<PPB_VarArrayBuffer_Dev>()->ByteLength(var_, &byte_length); |
| + else |
| + PP_NOTREACHED(); |
| + return byte_length; |
| } |
| void* VarArrayBuffer_Dev::Map() { |
| - // TODO(dmichael): This is not thread-safe. |
| - if (buffer_) |
| - return buffer_; |
| - if (has_interface<PPB_VarArrayBuffer_Dev>()) { |
| - buffer_ = get_interface<PPB_VarArrayBuffer_Dev>()->Map(var_); |
| - return buffer_; |
| - } |
| + if (is_array_buffer() && has_interface<PPB_VarArrayBuffer_Dev>()) |
| + return get_interface<PPB_VarArrayBuffer_Dev>()->Map(var_); |
| PP_NOTREACHED(); |
| - return 0; |
| + return NULL; |
| +} |
| + |
| +void VarArrayBuffer_Dev::Unmap() { |
| + if (is_array_buffer() && has_interface<PPB_VarArrayBuffer_Dev>()) |
| + get_interface<PPB_VarArrayBuffer_Dev>()->Map(var_); |
|
bbudge
2012/01/26 17:20:26
Reading the code, it still seems weird to see Unma
dmichael (off chromium)
2012/01/26 18:33:48
Gah. You were completely right the first time. I r
|
| + else |
| + PP_NOTREACHED(); |
| } |
| } // namespace pp |