tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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