1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4  * License, v. 2.0. If a copy of the MPL was not distributed with this
5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 
7 #include "SharedDIB.h"
8 
9 namespace mozilla {
10 namespace gfx {
11 
SharedDIB()12 SharedDIB::SharedDIB() : mShMem(nullptr) {}
13 
~SharedDIB()14 SharedDIB::~SharedDIB() { Close(); }
15 
Create(uint32_t aSize)16 nsresult SharedDIB::Create(uint32_t aSize) {
17   Close();
18 
19   mShMem = new base::SharedMemory();
20   if (!mShMem || !mShMem->Create(aSize)) return NS_ERROR_OUT_OF_MEMORY;
21 
22   return NS_OK;
23 }
24 
IsValid()25 bool SharedDIB::IsValid() { return mShMem && mShMem->IsValid(); }
26 
Close()27 nsresult SharedDIB::Close() {
28   delete mShMem;
29 
30   mShMem = nullptr;
31 
32   return NS_OK;
33 }
34 
Attach(Handle aHandle,uint32_t aSize)35 nsresult SharedDIB::Attach(Handle aHandle, uint32_t aSize) {
36   Close();
37 
38   mShMem = new base::SharedMemory(aHandle, false);
39   if (!mShMem) return NS_ERROR_OUT_OF_MEMORY;
40 
41   return NS_OK;
42 }
43 
ShareToProcess(base::ProcessId aTargetPid,Handle * aNewHandle)44 nsresult SharedDIB::ShareToProcess(base::ProcessId aTargetPid,
45                                    Handle* aNewHandle) {
46   if (!mShMem) return NS_ERROR_UNEXPECTED;
47 
48   if (!mShMem->ShareToProcess(aTargetPid, aNewHandle))
49     return NS_ERROR_UNEXPECTED;
50 
51   return NS_OK;
52 }
53 
54 }  // namespace gfx
55 }  // namespace mozilla
56