Bug 1919558 - Part 2: Separate out logic for importing DefaultEntry into own method in permission manager r=pbz,permissions-reviewers
This will allow us to call the same logic for a single default entry. Differential Revision: https://phabricator.services.mozilla.com/D222653
This commit is contained in:
@@ -3749,57 +3749,66 @@ void PermissionManager::AddDefaultEntryForImport(
|
||||
entry->mType = aType;
|
||||
}
|
||||
|
||||
// ImportLatestDefaults will import the latest default cookies read during the
|
||||
// last DB initialization.
|
||||
nsresult PermissionManager::ImportDefaultEntry(
|
||||
const DefaultEntry& aDefaultEntry) {
|
||||
nsCOMPtr<nsIPrincipal> principal;
|
||||
nsresult rv = GetPrincipalFromOrigin(
|
||||
aDefaultEntry.mOrigin, IsOAForceStripPermission(aDefaultEntry.mType),
|
||||
getter_AddRefs(principal));
|
||||
if (NS_FAILED(rv)) {
|
||||
NS_WARNING("Couldn't import an origin permission - malformed origin");
|
||||
return rv;
|
||||
}
|
||||
|
||||
// the import file format doesn't handle modification times, so we use
|
||||
// 0, which AddInternal will convert to now()
|
||||
int64_t modificationTime = 0;
|
||||
|
||||
rv = AddInternal(principal, aDefaultEntry.mType, aDefaultEntry.mPermission,
|
||||
cIDPermissionIsDefault, nsIPermissionManager::EXPIRE_NEVER,
|
||||
0, modificationTime, eDontNotify, eNoDBOperation);
|
||||
if (NS_FAILED(rv)) {
|
||||
NS_WARNING("There was a problem importing an origin permission");
|
||||
return rv;
|
||||
}
|
||||
|
||||
if (StaticPrefs::permissions_isolateBy_privateBrowsing() &&
|
||||
!IsOAForceStripPermission(aDefaultEntry.mType)) {
|
||||
// Also import the permission for private browsing.
|
||||
OriginAttributes attrs = OriginAttributes(principal->OriginAttributesRef());
|
||||
attrs.mPrivateBrowsingId = 1;
|
||||
nsCOMPtr<nsIPrincipal> pbPrincipal =
|
||||
BasePrincipal::Cast(principal)->CloneForcingOriginAttributes(attrs);
|
||||
// May return nullptr if clone fails.
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
rv =
|
||||
AddInternal(pbPrincipal, aDefaultEntry.mType, aDefaultEntry.mPermission,
|
||||
cIDPermissionIsDefault, nsIPermissionManager::EXPIRE_NEVER,
|
||||
0, modificationTime, eDontNotify, eNoDBOperation);
|
||||
if (NS_FAILED(rv)) {
|
||||
NS_WARNING(
|
||||
"There was a problem importing an origin permission for private "
|
||||
"browsing");
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// ImportLatestDefaults will import the latest default permissions read during
|
||||
// the last DB initialization.
|
||||
nsresult PermissionManager::ImportLatestDefaults() {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(mState == eReady);
|
||||
|
||||
nsresult rv;
|
||||
|
||||
MonitorAutoLock lock(mMonitor);
|
||||
|
||||
for (const DefaultEntry& entry : mDefaultEntriesForImport) {
|
||||
nsCOMPtr<nsIPrincipal> principal;
|
||||
rv = GetPrincipalFromOrigin(entry.mOrigin,
|
||||
IsOAForceStripPermission(entry.mType),
|
||||
getter_AddRefs(principal));
|
||||
if (NS_FAILED(rv)) {
|
||||
NS_WARNING("Couldn't import an origin permission - malformed origin");
|
||||
continue;
|
||||
}
|
||||
|
||||
// the import file format doesn't handle modification times, so we use
|
||||
// 0, which AddInternal will convert to now()
|
||||
int64_t modificationTime = 0;
|
||||
|
||||
rv = AddInternal(principal, entry.mType, entry.mPermission,
|
||||
cIDPermissionIsDefault, nsIPermissionManager::EXPIRE_NEVER,
|
||||
0, modificationTime, eDontNotify, eNoDBOperation);
|
||||
if (NS_FAILED(rv)) {
|
||||
NS_WARNING("There was a problem importing an origin permission");
|
||||
}
|
||||
|
||||
if (StaticPrefs::permissions_isolateBy_privateBrowsing()) {
|
||||
// Also import the permission for private browsing.
|
||||
OriginAttributes attrs =
|
||||
OriginAttributes(principal->OriginAttributesRef());
|
||||
attrs.mPrivateBrowsingId = 1;
|
||||
nsCOMPtr<nsIPrincipal> pbPrincipal =
|
||||
BasePrincipal::Cast(principal)->CloneForcingOriginAttributes(attrs);
|
||||
// May return nullptr if clone fails.
|
||||
NS_ENSURE_TRUE(pbPrincipal, NS_ERROR_FAILURE);
|
||||
|
||||
rv = AddInternal(pbPrincipal, entry.mType, entry.mPermission,
|
||||
cIDPermissionIsDefault,
|
||||
nsIPermissionManager::EXPIRE_NEVER, 0, modificationTime,
|
||||
eDontNotify, eNoDBOperation);
|
||||
if (NS_FAILED(rv)) {
|
||||
NS_WARNING(
|
||||
"There was a problem importing an origin permission for private "
|
||||
"browsing");
|
||||
}
|
||||
}
|
||||
Unused << ImportDefaultEntry(entry);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
|
||||
Reference in New Issue
Block a user