author | pbz <pbz@mozilla.com> |
Fri, 13 Dec 2019 12:27:10 +0000 | |
changeset 506888 | 82a7408c8b3202774a3a01ef1b5f5646365f52ab |
parent 506887 | 162eb0db41958eba57661cbf2ece98feac508ac8 |
child 506889 | adec5f2eb156c86b243d04d29a6023ae6479130b |
push id | 36913 |
push user | opoprus@mozilla.com |
push date | Fri, 13 Dec 2019 16:53:24 +0000 |
treeherder | mozilla-central@1ed684598bd0 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | Ehsan |
bugs | 1601256 |
milestone | 73.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/extensions/permissions/nsPermissionManager.cpp +++ b/extensions/permissions/nsPermissionManager.cpp @@ -1693,16 +1693,28 @@ nsresult nsPermissionManager::AddInterna nsIPrincipal* aPrincipal, const nsACString& aType, uint32_t aPermission, int64_t aID, uint32_t aExpireType, int64_t aExpireTime, int64_t aModificationTime, NotifyOperationType aNotifyOperation, DBOperationType aDBOperation, const bool aIgnoreSessionPermissions) { nsAutoCString origin; nsresult rv = GetOriginFromPrincipal(aPrincipal, origin); NS_ENSURE_SUCCESS(rv, rv); + // For private browsing only store permissions for the session + if (aExpireType != EXPIRE_SESSION) { + uint32_t privateBrowsingId = + nsScriptSecurityManager::DEFAULT_PRIVATE_BROWSING_ID; + nsresult rv = aPrincipal->GetPrivateBrowsingId(&privateBrowsingId); + if (NS_SUCCEEDED(rv) && + privateBrowsingId != + nsScriptSecurityManager::DEFAULT_PRIVATE_BROWSING_ID) { + aExpireType = EXPIRE_SESSION; + } + } + if (!IsChildProcess()) { IPC::Permission permission(origin, aType, aPermission, aExpireType, aExpireTime); nsAutoCString permissionKey; GetKeyForPermission(aPrincipal, aType, permissionKey); nsTArray<ContentParent*> cplist;
--- a/extensions/permissions/test/unit/test_permmanager_expiration.js +++ b/extensions/permissions/test/unit/test_permmanager_expiration.js @@ -131,10 +131,29 @@ function* do_run_test() { null, pm.getPermissionObject(principal, "test/expiration-perm-exp2", false) ); Assert.equal( null, pm.getPermissionObject(principal, "test/expiration-session-exp2", false) ); + // Add a persistent permission for private browsing + let principalPB = Services.scriptSecurityManager.createContentPrincipal( + permURI, + { privateBrowsingId: 1 } + ); + pm.addFromPrincipal( + principalPB, + "test/expiration-session-pb", + pm.ALLOW_ACTION + ); + + // The permission should be set to session expiry + let perm = pm.getPermissionObject( + principalPB, + "test/expiration-session-pb", + true + ); + Assert.equal(perm.expireType, pm.EXPIRE_SESSION); + do_finish_generator_test(test_generator); }