PermissionMessageUtils.cpp (1492B)
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 "mozilla/dom/PermissionMessageUtils.h" 8 9 #include "ipc/IPCMessageUtilsSpecializations.h" 10 #include "mozilla/ipc/BackgroundUtils.h" 11 #include "mozilla/ipc/PBackgroundSharedTypes.h" 12 #include "nsCOMPtr.h" 13 #include "nsIPrincipal.h" 14 15 namespace IPC { 16 17 void ParamTraits<nsIPrincipal*>::Write(IPC::MessageWriter* aWriter, 18 nsIPrincipal* aParam) { 19 mozilla::Maybe<mozilla::ipc::PrincipalInfo> info; 20 if (aParam) { 21 info.emplace(); 22 nsresult rv = PrincipalToPrincipalInfo(aParam, info.ptr()); 23 MOZ_RELEASE_ASSERT(NS_SUCCEEDED(rv)); 24 } 25 26 WriteParam(aWriter, info); 27 } 28 29 bool ParamTraits<nsIPrincipal*>::Read(IPC::MessageReader* aReader, 30 RefPtr<nsIPrincipal>* aResult) { 31 mozilla::Maybe<mozilla::ipc::PrincipalInfo> info; 32 if (!ReadParam(aReader, &info)) { 33 return false; 34 } 35 36 if (info.isNothing()) { 37 return true; 38 } 39 40 auto principalOrErr = PrincipalInfoToPrincipal(info.ref()); 41 42 if (NS_WARN_IF(principalOrErr.isErr())) { 43 return false; 44 } 45 46 nsCOMPtr<nsIPrincipal> principal = principalOrErr.unwrap(); 47 *aResult = principal; 48 return true; 49 } 50 51 } // namespace IPC