mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-07 18:04:46 +00:00
Bug 1197461 - e10s support for Permissions.revoke. r=poiru
This commit is contained in:
parent
ff693ea459
commit
991a1d63b2
@ -67,6 +67,7 @@
|
||||
#include "mozilla/dom/mobileconnection/MobileConnectionParent.h"
|
||||
#include "mozilla/dom/mobilemessage/SmsParent.h"
|
||||
#include "mozilla/dom/power/PowerManagerService.h"
|
||||
#include "mozilla/dom/Permissions.h"
|
||||
#include "mozilla/dom/PresentationParent.h"
|
||||
#include "mozilla/dom/PPresentationParent.h"
|
||||
#include "mozilla/dom/quota/QuotaManagerService.h"
|
||||
@ -1053,6 +1054,14 @@ ContentParent::RecvUngrabPointer(const uint32_t& aTime)
|
||||
#endif
|
||||
}
|
||||
|
||||
bool
|
||||
ContentParent::RecvRemovePermission(const IPC::Principal& aPrincipal,
|
||||
const nsCString& aPermissionType,
|
||||
nsresult* aRv) {
|
||||
*aRv = Permissions::RemovePermission(aPrincipal, aPermissionType.get());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
ContentParent::RecvConnectPluginBridge(const uint32_t& aPluginId, nsresult* aRv)
|
||||
{
|
||||
|
@ -213,6 +213,10 @@ public:
|
||||
|
||||
virtual bool RecvUngrabPointer(const uint32_t& aTime) override;
|
||||
|
||||
virtual bool RecvRemovePermission(const IPC::Principal& aPrincipal,
|
||||
const nsCString& aPermissionType,
|
||||
nsresult* aRv) override;
|
||||
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(ContentParent, nsIObserver)
|
||||
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
|
@ -1190,6 +1190,8 @@ parent:
|
||||
* chrome process as that's the process that receives the pointer event.
|
||||
*/
|
||||
sync UngrabPointer(uint32_t time);
|
||||
|
||||
sync RemovePermission(Principal principal, nsCString permissionType) returns (nsresult rv);
|
||||
both:
|
||||
async AsyncMessage(nsString aMessage, ClonedMessageData aData,
|
||||
CpowEntry[] aCpows, Principal aPrincipal);
|
||||
|
@ -6,6 +6,7 @@
|
||||
|
||||
#include "mozilla/dom/Permissions.h"
|
||||
|
||||
#include "mozilla/dom/ContentChild.h"
|
||||
#include "mozilla/dom/PermissionsBinding.h"
|
||||
#include "mozilla/dom/Promise.h"
|
||||
#include "mozilla/Services.h"
|
||||
@ -121,6 +122,19 @@ Permissions::Query(JSContext* aCx,
|
||||
return promise.forget();
|
||||
}
|
||||
|
||||
/* static */ nsresult
|
||||
Permissions::RemovePermission(nsIPrincipal* aPrincipal, const char* aPermissionType)
|
||||
{
|
||||
MOZ_ASSERT(XRE_IsParentProcess());
|
||||
|
||||
nsCOMPtr<nsIPermissionManager> permMgr = services::GetPermissionManager();
|
||||
if (NS_WARN_IF(!permMgr)) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
return permMgr->RemoveFromPrincipal(aPrincipal, aPermissionType);
|
||||
}
|
||||
|
||||
already_AddRefed<Promise>
|
||||
Permissions::Revoke(JSContext* aCx,
|
||||
JS::Handle<JSObject*> aPermission,
|
||||
@ -156,7 +170,19 @@ Permissions::Revoke(JSContext* aCx,
|
||||
return promise.forget();
|
||||
}
|
||||
|
||||
nsresult rv = permMgr->RemoveFromPrincipal(document->NodePrincipal(), PermissionNameToType(permission.mName));
|
||||
const char* permissionType = PermissionNameToType(permission.mName);
|
||||
|
||||
nsresult rv;
|
||||
if (XRE_IsParentProcess()) {
|
||||
rv = RemovePermission(document->NodePrincipal(), permissionType);
|
||||
} else {
|
||||
// Permissions can't be removed from the content process. Send a message
|
||||
// to the parent; `ContentParent::RecvRemovePermission` will call
|
||||
// `RemovePermission`.
|
||||
ContentChild::GetSingleton()->SendRemovePermission(
|
||||
IPC::Principal(document->NodePrincipal()), nsDependentCString(permissionType), &rv);
|
||||
}
|
||||
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
promise->MaybeReject(rv);
|
||||
return promise.forget();
|
||||
|
@ -38,6 +38,8 @@ public:
|
||||
JS::Handle<JSObject*> aPermission,
|
||||
ErrorResult& aRv);
|
||||
|
||||
static nsresult RemovePermission(nsIPrincipal* aPrincipal, const char* aPermissionType);
|
||||
|
||||
already_AddRefed<Promise> Revoke(JSContext* aCx,
|
||||
JS::Handle<JSObject*> aPermission,
|
||||
ErrorResult& aRv);
|
||||
|
@ -50,3 +50,5 @@ FINAL_LIBRARY = 'xul'
|
||||
|
||||
if CONFIG['GNU_CXX']:
|
||||
CXXFLAGS += ['-Wshadow']
|
||||
|
||||
include('/ipc/chromium/chromium-config.mozbuild')
|
||||
|
Loading…
Reference in New Issue
Block a user