OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/pepper/pepper_platform_image_2d_impl.h" | 5 #include "content/renderer/pepper/pepper_platform_image_2d_impl.h" |
6 | 6 |
7 #include "build/build_config.h" | 7 #include "build/build_config.h" |
8 #include "content/common/view_messages.h" | 8 #include "content/common/view_messages.h" |
9 #include "content/renderer/render_thread_impl.h" | 9 #include "content/renderer/render_thread_impl.h" |
10 #include "ui/surface/transport_dib.h" | 10 #include "ui/surface/transport_dib.h" |
11 | 11 |
12 namespace content { | 12 namespace content { |
13 | 13 |
14 PepperPlatformImage2DImpl::PepperPlatformImage2DImpl(int width, | 14 PepperPlatformImage2DImpl::PepperPlatformImage2DImpl(int width, |
15 int height, | 15 int height, |
16 TransportDIB* dib) | 16 TransportDIB* dib) |
17 : width_(width), | 17 : width_(width), |
18 height_(height), | 18 height_(height), |
19 dib_(dib) { | 19 dib_(dib) { |
20 } | 20 } |
21 | 21 |
22 // On Mac, we have to tell the browser to free the transport DIB. | 22 // On POSIX, we have to tell the browser to free the transport DIB. |
23 PepperPlatformImage2DImpl::~PepperPlatformImage2DImpl() { | 23 PepperPlatformImage2DImpl::~PepperPlatformImage2DImpl() { |
24 #if defined(OS_MACOSX) | 24 #if defined(OS_POSIX) && !defined(TOOLKIT_GTK) && !defined(OS_ANDROID) |
25 if (dib_) { | 25 if (dib_) { |
26 RenderThreadImpl::current()->Send( | 26 RenderThreadImpl::current()->Send( |
27 new ViewHostMsg_FreeTransportDIB(dib_->id())); | 27 new ViewHostMsg_FreeTransportDIB(dib_->id())); |
28 } | 28 } |
29 #endif | 29 #endif |
30 } | 30 } |
31 | 31 |
32 // static | 32 // static |
33 PepperPlatformImage2DImpl* PepperPlatformImage2DImpl::Create(int width, | 33 PepperPlatformImage2DImpl* PepperPlatformImage2DImpl::Create(int width, |
34 int height) { | 34 int height) { |
35 uint32 buffer_size = width * height * 4; | 35 uint32 buffer_size = width * height * 4; |
36 | 36 |
37 // Allocate the transport DIB and the PlatformCanvas pointing to it. | 37 // Allocate the transport DIB and the PlatformCanvas pointing to it. |
38 #if defined(OS_MACOSX) | 38 #if defined(OS_POSIX) && !defined(TOOLKIT_GTK) && !defined(OS_ANDROID) |
39 // On the Mac, shared memory has to be created in the browser in order to | 39 // On the Mac, shared memory has to be created in the browser in order to |
40 // work in the sandbox. Do this by sending a message to the browser | 40 // work in the sandbox. Do this by sending a message to the browser |
41 // requesting a TransportDIB (see also | 41 // requesting a TransportDIB (see also |
42 // chrome/renderer/webplugin_delegate_proxy.cc, method | 42 // chrome/renderer/webplugin_delegate_proxy.cc, method |
43 // WebPluginDelegateProxy::CreateBitmap() for similar code). The TransportDIB | 43 // WebPluginDelegateProxy::CreateBitmap() for similar code). The TransportDIB |
44 // is cached in the browser, and is freed (in typical cases) by the | 44 // is cached in the browser, and is freed (in typical cases) by the |
45 // PepperPlatformImage2DImpl's destructor. | 45 // PepperPlatformImage2DImpl's destructor. |
46 TransportDIB::Handle dib_handle; | 46 TransportDIB::Handle dib_handle; |
47 IPC::Message* msg = new ViewHostMsg_AllocTransportDIB(buffer_size, | 47 IPC::Message* msg = new ViewHostMsg_AllocTransportDIB(buffer_size, |
48 true, | 48 true, |
(...skipping 16 matching lines...) Expand all Loading... |
65 | 65 |
66 SkCanvas* PepperPlatformImage2DImpl::Map() { | 66 SkCanvas* PepperPlatformImage2DImpl::Map() { |
67 return dib_->GetPlatformCanvas(width_, height_); | 67 return dib_->GetPlatformCanvas(width_, height_); |
68 } | 68 } |
69 | 69 |
70 intptr_t PepperPlatformImage2DImpl::GetSharedMemoryHandle( | 70 intptr_t PepperPlatformImage2DImpl::GetSharedMemoryHandle( |
71 uint32* byte_count) const { | 71 uint32* byte_count) const { |
72 *byte_count = dib_->size(); | 72 *byte_count = dib_->size(); |
73 #if defined(OS_WIN) | 73 #if defined(OS_WIN) |
74 return reinterpret_cast<intptr_t>(dib_->handle()); | 74 return reinterpret_cast<intptr_t>(dib_->handle()); |
75 #elif defined(OS_MACOSX) || defined(OS_ANDROID) | 75 #elif defined(TOOLKIT_GTK) |
| 76 return static_cast<intptr_t>(dib_->handle()); |
| 77 #else |
76 return static_cast<intptr_t>(dib_->handle().fd); | 78 return static_cast<intptr_t>(dib_->handle().fd); |
77 #elif defined(OS_POSIX) | |
78 return static_cast<intptr_t>(dib_->handle()); | |
79 #endif | 79 #endif |
80 } | 80 } |
81 | 81 |
82 TransportDIB* PepperPlatformImage2DImpl::GetTransportDIB() const { | 82 TransportDIB* PepperPlatformImage2DImpl::GetTransportDIB() const { |
83 return dib_.get(); | 83 return dib_.get(); |
84 } | 84 } |
85 | 85 |
86 } // namespace content | 86 } // namespace content |
OLD | NEW |