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()12SharedDIB::SharedDIB() : mShMem(nullptr) {} 13 ~SharedDIB()14SharedDIB::~SharedDIB() { Close(); } 15 Create(uint32_t aSize)16nsresult 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()25bool SharedDIB::IsValid() { return mShMem && mShMem->IsValid(); } 26 Close()27nsresult SharedDIB::Close() { 28 delete mShMem; 29 30 mShMem = nullptr; 31 32 return NS_OK; 33 } 34 Attach(Handle aHandle,uint32_t aSize)35nsresult 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)44nsresult 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