Loading dom/ipc/ContentParent.cpp +37 −20 Original line number Diff line number Diff line Loading @@ -1297,6 +1297,27 @@ mozilla::ipc::IPCResult ContentParent::RecvUngrabPointer( #endif } static void LogFailedPrincipalValidationInfo(nsIPrincipal* aPrincipal, const char* aMethod) { // no need to do the dance if logging is disabled if (MOZ_LOG_TEST(ContentParent::GetLog(), LogLevel::Error)) { nsAutoCString spec; if (!aPrincipal) { spec.AssignLiteral("NullPtr"); } else if (aPrincipal->IsSystemPrincipal()) { spec.AssignLiteral("SystemPrincipal"); } else if (aPrincipal->GetIsExpandedPrincipal()) { spec.AssignLiteral("ExpandedPrincipal"); } else if (aPrincipal->GetIsContentPrincipal()) { aPrincipal->GetSpec(spec); } MOZ_LOG(ContentParent::GetLog(), LogLevel::Error, (" Receiving unexpected Principal (%s) within %s", spec.get(), aMethod)); } } bool ContentParent::ValidatePrincipal( nsIPrincipal* aPrincipal, const EnumSet<ValidatePrincipalOptions>& aOptions) { Loading Loading @@ -1397,7 +1418,7 @@ mozilla::ipc::IPCResult ContentParent::RecvRemovePermission( const IPC::Principal& aPrincipal, const nsCString& aPermissionType, nsresult* aRv) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } *aRv = Permissions::RemovePermission(aPrincipal, aPermissionType); return IPC_OK(); Loading Loading @@ -3249,7 +3270,7 @@ mozilla::ipc::IPCResult ContentParent::RecvSetClipboard( const int32_t& aWhichClipboard) { if (!ValidatePrincipal(aRequestingPrincipal, {ValidatePrincipalOptions::AllowNullPtr})) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aRequestingPrincipal, __func__); } nsresult rv; Loading Loading @@ -4481,7 +4502,7 @@ mozilla::ipc::IPCResult ContentParent::RecvCloseAlert(const nsString& aName) { mozilla::ipc::IPCResult ContentParent::RecvDisableNotifications( const IPC::Principal& aPrincipal) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } Unused << Notification::RemovePermission(aPrincipal); return IPC_OK(); Loading @@ -4490,7 +4511,7 @@ mozilla::ipc::IPCResult ContentParent::RecvDisableNotifications( mozilla::ipc::IPCResult ContentParent::RecvOpenNotificationSettings( const IPC::Principal& aPrincipal) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } Unused << Notification::OpenSettings(aPrincipal); return IPC_OK(); Loading Loading @@ -5040,7 +5061,7 @@ bool ContentParent::DeallocPWebrtcGlobalParent(PWebrtcGlobalParent* aActor) { mozilla::ipc::IPCResult ContentParent::RecvSetOfflinePermission( const Principal& aPrincipal) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } nsCOMPtr<nsIOfflineCacheUpdateService> updateService = components::OfflineCacheUpdate::Service(); Loading Loading @@ -5378,7 +5399,7 @@ mozilla::ipc::IPCResult ContentParent::RecvCreateWindow( CreateWindowResolver&& aResolve) { if (!ValidatePrincipal(aTriggeringPrincipal, {ValidatePrincipalOptions::AllowSystem})) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aTriggeringPrincipal, __func__); } nsresult rv = NS_OK; Loading Loading @@ -5694,7 +5715,7 @@ mozilla::ipc::IPCResult ContentParent::RecvNotifyPushObservers( const nsCString& aScope, const IPC::Principal& aPrincipal, const nsString& aMessageId) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } PushMessageDispatcher dispatcher(aScope, aPrincipal, aMessageId, Nothing()); Unused << NS_WARN_IF(NS_FAILED(dispatcher.NotifyObserversAndWorkers())); Loading @@ -5705,7 +5726,7 @@ mozilla::ipc::IPCResult ContentParent::RecvNotifyPushObserversWithData( const nsCString& aScope, const IPC::Principal& aPrincipal, const nsString& aMessageId, nsTArray<uint8_t>&& aData) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } PushMessageDispatcher dispatcher(aScope, aPrincipal, aMessageId, Some(std::move(aData))); Loading @@ -5717,7 +5738,7 @@ mozilla::ipc::IPCResult ContentParent::RecvNotifyPushSubscriptionChangeObservers( const nsCString& aScope, const IPC::Principal& aPrincipal) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } PushSubscriptionChangeDispatcher dispatcher(aScope, aPrincipal); Unused << NS_WARN_IF(NS_FAILED(dispatcher.NotifyObserversAndWorkers())); Loading @@ -5728,7 +5749,7 @@ mozilla::ipc::IPCResult ContentParent::RecvPushError( const nsCString& aScope, const IPC::Principal& aPrincipal, const nsString& aMessage, const uint32_t& aFlags) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } PushErrorDispatcher dispatcher(aScope, aPrincipal, aMessage, aFlags); Unused << NS_WARN_IF(NS_FAILED(dispatcher.NotifyObserversAndWorkers())); Loading @@ -5739,7 +5760,7 @@ mozilla::ipc::IPCResult ContentParent::RecvNotifyPushSubscriptionModifiedObservers( const nsCString& aScope, const IPC::Principal& aPrincipal) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } PushSubscriptionModifiedDispatcher dispatcher(aScope, aPrincipal); Unused << NS_WARN_IF(NS_FAILED(dispatcher.NotifyObservers())); Loading Loading @@ -5812,7 +5833,7 @@ mozilla::ipc::IPCResult ContentParent::RecvStoreAndBroadcastBlobURLRegistration( const nsCString& aURI, const IPCBlob& aBlob, const Principal& aPrincipal, const Maybe<nsID>& aAgentClusterId) { if (!ValidatePrincipal(aPrincipal, {ValidatePrincipalOptions::AllowSystem})) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } RefPtr<BlobImpl> blobImpl = IPCBlobUtils::Deserialize(aBlob); if (NS_WARN_IF(!blobImpl)) { Loading @@ -5835,7 +5856,7 @@ mozilla::ipc::IPCResult ContentParent::RecvUnstoreAndBroadcastBlobURLUnregistration( const nsCString& aURI, const Principal& aPrincipal) { if (!ValidatePrincipal(aPrincipal, {ValidatePrincipalOptions::AllowSystem})) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } BlobURLProtocolHandler::RemoveDataEntry(aURI, false /* Don't broadcast */); BroadcastBlobURLUnregistration(aURI, aPrincipal, this); Loading Loading @@ -6181,10 +6202,6 @@ PURLClassifierParent* ContentParent::AllocPURLClassifierParent( mozilla::ipc::IPCResult ContentParent::RecvPURLClassifierConstructor( PURLClassifierParent* aActor, const Principal& aPrincipal, bool* aSuccess) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); } MOZ_ASSERT(NS_IsMainThread()); MOZ_ASSERT(aActor); *aSuccess = false; Loading @@ -6196,7 +6213,7 @@ mozilla::ipc::IPCResult ContentParent::RecvPURLClassifierConstructor( return IPC_OK(); } if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } return actor->StartClassify(principal, aSuccess); } Loading Loading @@ -6365,7 +6382,7 @@ ContentParent::RecvAutomaticStorageAccessPermissionCanBeGranted( const Principal& aPrincipal, AutomaticStorageAccessPermissionCanBeGrantedResolver&& aResolver) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } aResolver(Document::AutomaticStorageAccessPermissionCanBeGranted(aPrincipal)); return IPC_OK(); Loading Loading @@ -6439,7 +6456,7 @@ mozilla::ipc::IPCResult ContentParent::RecvCompleteAllowAccessFor( mozilla::ipc::IPCResult ContentParent::RecvStoreUserInteractionAsPermission( const Principal& aPrincipal) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } ContentBlockingUserInteraction::Observe(aPrincipal); return IPC_OK(); Loading Loading
dom/ipc/ContentParent.cpp +37 −20 Original line number Diff line number Diff line Loading @@ -1297,6 +1297,27 @@ mozilla::ipc::IPCResult ContentParent::RecvUngrabPointer( #endif } static void LogFailedPrincipalValidationInfo(nsIPrincipal* aPrincipal, const char* aMethod) { // no need to do the dance if logging is disabled if (MOZ_LOG_TEST(ContentParent::GetLog(), LogLevel::Error)) { nsAutoCString spec; if (!aPrincipal) { spec.AssignLiteral("NullPtr"); } else if (aPrincipal->IsSystemPrincipal()) { spec.AssignLiteral("SystemPrincipal"); } else if (aPrincipal->GetIsExpandedPrincipal()) { spec.AssignLiteral("ExpandedPrincipal"); } else if (aPrincipal->GetIsContentPrincipal()) { aPrincipal->GetSpec(spec); } MOZ_LOG(ContentParent::GetLog(), LogLevel::Error, (" Receiving unexpected Principal (%s) within %s", spec.get(), aMethod)); } } bool ContentParent::ValidatePrincipal( nsIPrincipal* aPrincipal, const EnumSet<ValidatePrincipalOptions>& aOptions) { Loading Loading @@ -1397,7 +1418,7 @@ mozilla::ipc::IPCResult ContentParent::RecvRemovePermission( const IPC::Principal& aPrincipal, const nsCString& aPermissionType, nsresult* aRv) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } *aRv = Permissions::RemovePermission(aPrincipal, aPermissionType); return IPC_OK(); Loading Loading @@ -3249,7 +3270,7 @@ mozilla::ipc::IPCResult ContentParent::RecvSetClipboard( const int32_t& aWhichClipboard) { if (!ValidatePrincipal(aRequestingPrincipal, {ValidatePrincipalOptions::AllowNullPtr})) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aRequestingPrincipal, __func__); } nsresult rv; Loading Loading @@ -4481,7 +4502,7 @@ mozilla::ipc::IPCResult ContentParent::RecvCloseAlert(const nsString& aName) { mozilla::ipc::IPCResult ContentParent::RecvDisableNotifications( const IPC::Principal& aPrincipal) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } Unused << Notification::RemovePermission(aPrincipal); return IPC_OK(); Loading @@ -4490,7 +4511,7 @@ mozilla::ipc::IPCResult ContentParent::RecvDisableNotifications( mozilla::ipc::IPCResult ContentParent::RecvOpenNotificationSettings( const IPC::Principal& aPrincipal) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } Unused << Notification::OpenSettings(aPrincipal); return IPC_OK(); Loading Loading @@ -5040,7 +5061,7 @@ bool ContentParent::DeallocPWebrtcGlobalParent(PWebrtcGlobalParent* aActor) { mozilla::ipc::IPCResult ContentParent::RecvSetOfflinePermission( const Principal& aPrincipal) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } nsCOMPtr<nsIOfflineCacheUpdateService> updateService = components::OfflineCacheUpdate::Service(); Loading Loading @@ -5378,7 +5399,7 @@ mozilla::ipc::IPCResult ContentParent::RecvCreateWindow( CreateWindowResolver&& aResolve) { if (!ValidatePrincipal(aTriggeringPrincipal, {ValidatePrincipalOptions::AllowSystem})) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aTriggeringPrincipal, __func__); } nsresult rv = NS_OK; Loading Loading @@ -5694,7 +5715,7 @@ mozilla::ipc::IPCResult ContentParent::RecvNotifyPushObservers( const nsCString& aScope, const IPC::Principal& aPrincipal, const nsString& aMessageId) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } PushMessageDispatcher dispatcher(aScope, aPrincipal, aMessageId, Nothing()); Unused << NS_WARN_IF(NS_FAILED(dispatcher.NotifyObserversAndWorkers())); Loading @@ -5705,7 +5726,7 @@ mozilla::ipc::IPCResult ContentParent::RecvNotifyPushObserversWithData( const nsCString& aScope, const IPC::Principal& aPrincipal, const nsString& aMessageId, nsTArray<uint8_t>&& aData) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } PushMessageDispatcher dispatcher(aScope, aPrincipal, aMessageId, Some(std::move(aData))); Loading @@ -5717,7 +5738,7 @@ mozilla::ipc::IPCResult ContentParent::RecvNotifyPushSubscriptionChangeObservers( const nsCString& aScope, const IPC::Principal& aPrincipal) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } PushSubscriptionChangeDispatcher dispatcher(aScope, aPrincipal); Unused << NS_WARN_IF(NS_FAILED(dispatcher.NotifyObserversAndWorkers())); Loading @@ -5728,7 +5749,7 @@ mozilla::ipc::IPCResult ContentParent::RecvPushError( const nsCString& aScope, const IPC::Principal& aPrincipal, const nsString& aMessage, const uint32_t& aFlags) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } PushErrorDispatcher dispatcher(aScope, aPrincipal, aMessage, aFlags); Unused << NS_WARN_IF(NS_FAILED(dispatcher.NotifyObserversAndWorkers())); Loading @@ -5739,7 +5760,7 @@ mozilla::ipc::IPCResult ContentParent::RecvNotifyPushSubscriptionModifiedObservers( const nsCString& aScope, const IPC::Principal& aPrincipal) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } PushSubscriptionModifiedDispatcher dispatcher(aScope, aPrincipal); Unused << NS_WARN_IF(NS_FAILED(dispatcher.NotifyObservers())); Loading Loading @@ -5812,7 +5833,7 @@ mozilla::ipc::IPCResult ContentParent::RecvStoreAndBroadcastBlobURLRegistration( const nsCString& aURI, const IPCBlob& aBlob, const Principal& aPrincipal, const Maybe<nsID>& aAgentClusterId) { if (!ValidatePrincipal(aPrincipal, {ValidatePrincipalOptions::AllowSystem})) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } RefPtr<BlobImpl> blobImpl = IPCBlobUtils::Deserialize(aBlob); if (NS_WARN_IF(!blobImpl)) { Loading @@ -5835,7 +5856,7 @@ mozilla::ipc::IPCResult ContentParent::RecvUnstoreAndBroadcastBlobURLUnregistration( const nsCString& aURI, const Principal& aPrincipal) { if (!ValidatePrincipal(aPrincipal, {ValidatePrincipalOptions::AllowSystem})) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } BlobURLProtocolHandler::RemoveDataEntry(aURI, false /* Don't broadcast */); BroadcastBlobURLUnregistration(aURI, aPrincipal, this); Loading Loading @@ -6181,10 +6202,6 @@ PURLClassifierParent* ContentParent::AllocPURLClassifierParent( mozilla::ipc::IPCResult ContentParent::RecvPURLClassifierConstructor( PURLClassifierParent* aActor, const Principal& aPrincipal, bool* aSuccess) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); } MOZ_ASSERT(NS_IsMainThread()); MOZ_ASSERT(aActor); *aSuccess = false; Loading @@ -6196,7 +6213,7 @@ mozilla::ipc::IPCResult ContentParent::RecvPURLClassifierConstructor( return IPC_OK(); } if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } return actor->StartClassify(principal, aSuccess); } Loading Loading @@ -6365,7 +6382,7 @@ ContentParent::RecvAutomaticStorageAccessPermissionCanBeGranted( const Principal& aPrincipal, AutomaticStorageAccessPermissionCanBeGrantedResolver&& aResolver) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } aResolver(Document::AutomaticStorageAccessPermissionCanBeGranted(aPrincipal)); return IPC_OK(); Loading Loading @@ -6439,7 +6456,7 @@ mozilla::ipc::IPCResult ContentParent::RecvCompleteAllowAccessFor( mozilla::ipc::IPCResult ContentParent::RecvStoreUserInteractionAsPermission( const Principal& aPrincipal) { if (!ValidatePrincipal(aPrincipal)) { return IPC_FAIL(this, "receiving unexpected principal"); LogFailedPrincipalValidationInfo(aPrincipal, __func__); } ContentBlockingUserInteraction::Observe(aPrincipal); return IPC_OK(); Loading