1d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen// Copyright 2014 The Chromium Authors. All rights reserved.
2d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen// Use of this source code is governed by a BSD-style license that can be
3d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen// found in the LICENSE file.
4d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
5d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#ifndef CC_BLINK_WEB_EXTERNAL_BITMAP_IMPL_H_
6d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#define CC_BLINK_WEB_EXTERNAL_BITMAP_IMPL_H_
7d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
8d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#include "base/bind.h"
9d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#include "base/memory/scoped_ptr.h"
10d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#include "cc/blink/cc_blink_export.h"
11d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen#include "third_party/WebKit/public/platform/WebExternalBitmap.h"
12d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
13d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chennamespace base {
14d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenclass SharedMemory;
15d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen}
16d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
17d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chennamespace cc_blink {
18d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
19d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chentypedef scoped_ptr<base::SharedMemory>(*SharedMemoryAllocationFunction)(size_t);
20d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
21d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen// Sets the function that this will use to allocate shared memory.
22d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. ChenCC_BLINK_EXPORT void SetSharedMemoryAllocationFunction(
23d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    SharedMemoryAllocationFunction);
24d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
25d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenclass WebExternalBitmapImpl : public blink::WebExternalBitmap {
26d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen public:
27d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  CC_BLINK_EXPORT explicit WebExternalBitmapImpl();
28d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  virtual ~WebExternalBitmapImpl();
29d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
30d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  // blink::WebExternalBitmap implementation.
31d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  virtual blink::WebSize size() OVERRIDE;
32d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  virtual void setSize(blink::WebSize size) OVERRIDE;
33d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  virtual uint8* pixels() OVERRIDE;
34d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
35d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  base::SharedMemory* shared_memory() { return shared_memory_.get(); }
36d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
37d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen private:
38d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  scoped_ptr<base::SharedMemory> shared_memory_;
39d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  blink::WebSize size_;
40d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
41d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  DISALLOW_COPY_AND_ASSIGN(WebExternalBitmapImpl);
42d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen};
43
44}  // namespace cc_blink
45
46#endif  // CC_BLINK_WEB_EXTERNAL_BITMAP_IMPL_H_
47