Permission.cpp (3603B)
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #include "mozilla/Permission.h" 7 #include "nsIClassInfoImpl.h" 8 #include "nsIEffectiveTLDService.h" 9 #include "nsNetCID.h" 10 #include "nsNetUtil.h" 11 #include "mozilla/BasePrincipal.h" 12 #include "mozilla/StaticPrefs_permissions.h" 13 #include "mozilla/PermissionManager.h" 14 15 namespace mozilla { 16 17 // Permission Implementation 18 19 NS_IMPL_CLASSINFO(Permission, nullptr, 0, {0}) 20 NS_IMPL_ISUPPORTS_CI(Permission, nsIPermission) 21 22 Permission::Permission(nsIPrincipal* aPrincipal, const nsACString& aType, 23 uint32_t aCapability, uint32_t aExpireType, 24 int64_t aExpireTime, int64_t aModificationTime) 25 : mPrincipal(aPrincipal), 26 mType(aType), 27 mCapability(aCapability), 28 mExpireType(aExpireType), 29 mExpireTime(aExpireTime), 30 mModificationTime(aModificationTime) {} 31 32 already_AddRefed<nsIPrincipal> Permission::ClonePrincipalForPermission( 33 nsIPrincipal* aPrincipal) { 34 MOZ_ASSERT(aPrincipal); 35 36 mozilla::OriginAttributes attrs = aPrincipal->OriginAttributesRef(); 37 PermissionManager::MaybeStripOriginAttributes(false, attrs); 38 39 nsAutoCString originNoSuffix; 40 nsresult rv = aPrincipal->GetOriginNoSuffix(originNoSuffix); 41 NS_ENSURE_SUCCESS(rv, nullptr); 42 43 nsCOMPtr<nsIURI> uri; 44 rv = NS_NewURI(getter_AddRefs(uri), originNoSuffix); 45 NS_ENSURE_SUCCESS(rv, nullptr); 46 47 return mozilla::BasePrincipal::CreateContentPrincipal(uri, attrs); 48 } 49 50 already_AddRefed<Permission> Permission::Create( 51 nsIPrincipal* aPrincipal, const nsACString& aType, uint32_t aCapability, 52 uint32_t aExpireType, int64_t aExpireTime, int64_t aModificationTime) { 53 NS_ENSURE_TRUE(aPrincipal, nullptr); 54 55 nsCOMPtr<nsIPrincipal> principal = 56 Permission::ClonePrincipalForPermission(aPrincipal); 57 NS_ENSURE_TRUE(principal, nullptr); 58 59 RefPtr<Permission> permission = 60 new Permission(principal, aType, aCapability, aExpireType, aExpireTime, 61 aModificationTime); 62 return permission.forget(); 63 } 64 65 NS_IMETHODIMP 66 Permission::GetPrincipal(nsIPrincipal** aPrincipal) { 67 nsCOMPtr<nsIPrincipal> copy = mPrincipal; 68 copy.forget(aPrincipal); 69 return NS_OK; 70 } 71 72 NS_IMETHODIMP 73 Permission::GetType(nsACString& aType) { 74 aType = mType; 75 return NS_OK; 76 } 77 78 NS_IMETHODIMP 79 Permission::GetCapability(uint32_t* aCapability) { 80 *aCapability = mCapability; 81 return NS_OK; 82 } 83 84 NS_IMETHODIMP 85 Permission::GetExpireType(uint32_t* aExpireType) { 86 *aExpireType = mExpireType; 87 return NS_OK; 88 } 89 90 NS_IMETHODIMP 91 Permission::GetExpireTime(int64_t* aExpireTime) { 92 *aExpireTime = mExpireTime; 93 return NS_OK; 94 } 95 96 NS_IMETHODIMP 97 Permission::GetModificationTime(int64_t* aModificationTime) { 98 *aModificationTime = mModificationTime; 99 return NS_OK; 100 } 101 102 NS_IMETHODIMP 103 Permission::Matches(nsIPrincipal* aPrincipal, bool aExactHost, bool* aMatches) { 104 NS_ENSURE_ARG_POINTER(aPrincipal); 105 NS_ENSURE_ARG_POINTER(aMatches); 106 107 return mPrincipal->EqualsForPermission(aPrincipal, aExactHost, aMatches); 108 } 109 110 NS_IMETHODIMP 111 Permission::MatchesURI(nsIURI* aURI, bool aExactHost, bool* aMatches) { 112 NS_ENSURE_ARG_POINTER(aURI); 113 114 mozilla::OriginAttributes attrs; 115 nsCOMPtr<nsIPrincipal> principal = 116 mozilla::BasePrincipal::CreateContentPrincipal(aURI, attrs); 117 NS_ENSURE_TRUE(principal, NS_ERROR_FAILURE); 118 119 return Matches(principal, aExactHost, aMatches); 120 } 121 122 } // namespace mozilla