1// Copyright 2014 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 "content/child/web_discardable_memory_impl.h"
6
7namespace content {
8
9WebDiscardableMemoryImpl::~WebDiscardableMemoryImpl() {}
10
11// static
12scoped_ptr<WebDiscardableMemoryImpl>
13WebDiscardableMemoryImpl::CreateLockedMemory(size_t size) {
14  scoped_ptr<base::DiscardableMemory> memory(
15      base::DiscardableMemory::CreateLockedMemory(size));
16  if (!memory)
17    return scoped_ptr<WebDiscardableMemoryImpl>();
18  return make_scoped_ptr(new WebDiscardableMemoryImpl(memory.Pass()));
19}
20
21bool WebDiscardableMemoryImpl::lock() {
22  base::DiscardableMemoryLockStatus status = discardable_->Lock();
23  switch (status) {
24    case base::DISCARDABLE_MEMORY_LOCK_STATUS_SUCCESS:
25      return true;
26    case base::DISCARDABLE_MEMORY_LOCK_STATUS_PURGED:
27      discardable_->Unlock();
28      return false;
29    default:
30      discardable_.reset();
31      return false;
32  }
33}
34
35void WebDiscardableMemoryImpl::unlock() {
36  discardable_->Unlock();
37}
38
39void* WebDiscardableMemoryImpl::data() {
40  return discardable_->Memory();
41}
42
43WebDiscardableMemoryImpl::WebDiscardableMemoryImpl(
44    scoped_ptr<base::DiscardableMemory> memory)
45    : discardable_(memory.Pass()) {
46}
47
48}  // namespace content
49