Chromium Code Reviews| Index: cc/resources/shared_bitmap.cc |
| diff --git a/cc/resources/shared_bitmap.cc b/cc/resources/shared_bitmap.cc |
| index 3b94d451dff1bcd9b25e8d83948e1f4f279e946d..0188330694b6d8a097233b699353d5df145ec37c 100644 |
| --- a/cc/resources/shared_bitmap.cc |
| +++ b/cc/resources/shared_bitmap.cc |
| @@ -4,6 +4,7 @@ |
| #include "cc/resources/shared_bitmap.h" |
| +#include "base/logging.h" |
| #include "base/numerics/safe_math.h" |
| #include "base/rand_util.h" |
| @@ -12,19 +13,16 @@ namespace cc { |
| SharedBitmap::SharedBitmap( |
| base::SharedMemory* memory, |
| const SharedBitmapId& id, |
| - const base::Callback<void(SharedBitmap*)>& free_callback) |
| + const base::Callback<void(SharedBitmap* bitmap)>& free_callback) |
| : memory_(memory), id_(id), free_callback_(free_callback) {} |
| SharedBitmap::~SharedBitmap() { free_callback_.Run(this); } |
| // static |
| -bool SharedBitmap::GetSizeInBytes(const gfx::Size& size, |
| - size_t* size_in_bytes) { |
| - if (size.width() <= 0 || size.height() <= 0) |
| - return false; |
| - base::CheckedNumeric<int> s = size.width(); |
| +bool SharedBitmap::SizeInBytes(const gfx::Size& size, size_t* size_in_bytes) { |
| + base::CheckedNumeric<size_t> s = 4; |
| + s *= size.width(); |
| s *= size.height(); |
| - s *= 4; |
| if (!s.IsValid()) |
| return false; |
| *size_in_bytes = s.ValueOrDie(); |
| @@ -32,6 +30,31 @@ bool SharedBitmap::GetSizeInBytes(const gfx::Size& size, |
| } |
| // static |
| +size_t SharedBitmap::CheckedSizeInBytes(const gfx::Size& size) { |
| + base::CheckedNumeric<size_t> s = 4; |
| + s *= size.width(); |
|
jbauman
2014/04/03 21:47:17
How does CheckedNumeric deal with multiplication w
danakj
2014/04/03 21:48:46
gfx::Size clamps it's values >= 0.
https://code.g
|
| + s *= size.height(); |
| + return s.ValueOrDie(); |
| +} |
| + |
| +// static |
| +size_t SharedBitmap::UncheckedSizeInBytes(const gfx::Size& size) { |
| + DCHECK(VerifySizeInBytes(size)); |
| + size_t s = 4; |
| + s *= size.width(); |
| + s *= size.height(); |
| + return s; |
| +} |
| + |
| +// static |
| +bool SharedBitmap::VerifySizeInBytes(const gfx::Size& size) { |
| + base::CheckedNumeric<size_t> s = 4; |
| + s *= size.width(); |
| + s *= size.height(); |
| + return s.IsValid(); |
| +} |
| + |
| +// static |
| SharedBitmapId SharedBitmap::GenerateId() { |
| SharedBitmapId id; |
| // Needs cryptographically-secure random numbers. |