From 8ad0a3df626d932f7f77ce89bb064398287cfaf5 Mon Sep 17 00:00:00 2001 From: Andrea Marchesini Date: Thu, 30 Aug 2018 17:44:38 +0200 Subject: [PATCH] Bug 1487093 - Implement AntiTrackingCommon::NotifyRejection, r=ehsan --- dom/base/Navigator.cpp | 9 +++- dom/base/nsContentUtils.cpp | 22 +-------- .../antitracking/AntiTrackingCommon.cpp | 47 ++++++++++++++++++- .../antitracking/AntiTrackingCommon.h | 3 ++ 4 files changed, 58 insertions(+), 23 deletions(-) diff --git a/dom/base/Navigator.cpp b/dom/base/Navigator.cpp index 85c807d204d3..587a32d351ce 100644 --- a/dom/base/Navigator.cpp +++ b/dom/base/Navigator.cpp @@ -542,8 +542,13 @@ Navigator::CookieEnabled() return cookieEnabled; } - return AntiTrackingCommon::IsFirstPartyStorageAccessGrantedFor(mWindow, - codebaseURI); + if (AntiTrackingCommon::IsFirstPartyStorageAccessGrantedFor(mWindow, + codebaseURI)) { + return true; + } + + AntiTrackingCommon::NotifyRejection(mWindow); + return false; } bool diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp index e64a56336184..06905eade2fb 100644 --- a/dom/base/nsContentUtils.cpp +++ b/dom/base/nsContentUtils.cpp @@ -8917,28 +8917,10 @@ nsContentUtils::StorageDisabledByAntiTracking(nsPIDOMWindowInner* aWindow, bool disabled = StorageDisabledByAntiTrackingInternal(aWindow, aChannel, aPrincipal, aURI); if (disabled && sAntiTrackingControlCenterUIEnabled) { - nsCOMPtr thirdPartyUtil = services::GetThirdPartyUtil(); - if (!thirdPartyUtil) { - return false; - } - - nsCOMPtr pwin; if (aWindow) { - auto* outer = nsGlobalWindowOuter::Cast(aWindow->GetOuterWindow()); - if (outer) { - pwin = outer->GetTopOuter(); - } + AntiTrackingCommon::NotifyRejection(aWindow); } else if (aChannel) { - nsCOMPtr win; - nsresult rv = thirdPartyUtil->GetTopWindowForChannel(aChannel, - getter_AddRefs(win)); - NS_ENSURE_SUCCESS(rv, false); - pwin = nsPIDOMWindowOuter::From(win); - } - - if (pwin && aChannel) { - pwin->NotifyContentBlockingState( - nsIWebProgressListener::STATE_BLOCKED_TRACKING_COOKIES, aChannel); + AntiTrackingCommon::NotifyRejection(aChannel); } } return disabled; diff --git a/toolkit/components/antitracking/AntiTrackingCommon.cpp b/toolkit/components/antitracking/AntiTrackingCommon.cpp index 5a0f742b1c67..9b72853d7aba 100644 --- a/toolkit/components/antitracking/AntiTrackingCommon.cpp +++ b/toolkit/components/antitracking/AntiTrackingCommon.cpp @@ -23,6 +23,7 @@ #include "nsIPrincipal.h" #include "nsIURI.h" #include "nsIURL.h" +#include "nsIWebProgressListener.h" #include "nsPIDOMWindow.h" #include "nsScriptSecurityManager.h" #include "prtime.h" @@ -842,5 +843,49 @@ AntiTrackingCommon::NotifyRejection(nsIChannel* aChannel) return; } - // TODO: use aState to inform the rest of the world. + nsCOMPtr thirdPartyUtil = services::GetThirdPartyUtil(); + if (!thirdPartyUtil) { + return; + } + + nsCOMPtr win; + nsresult rv = thirdPartyUtil->GetTopWindowForChannel(httpChannel, + getter_AddRefs(win)); + NS_ENSURE_SUCCESS_VOID(rv); + + nsCOMPtr pwin = nsPIDOMWindowOuter::From(win); + if (!pwin) { + return; + } + + pwin->NotifyContentBlockingState( + nsIWebProgressListener::STATE_BLOCKED_TRACKING_COOKIES, httpChannel); +} + +/* static */ void +AntiTrackingCommon::NotifyRejection(nsPIDOMWindowInner* aWindow) +{ + MOZ_ASSERT(aWindow); + + nsIDocument* document = aWindow->GetExtantDoc(); + if (!document) { + return; + } + + nsCOMPtr httpChannel = + do_QueryInterface(document->GetChannel()); + if (!httpChannel) { + return; + } + + nsCOMPtr pwin; + auto* outer = nsGlobalWindowOuter::Cast(aWindow->GetOuterWindow()); + if (outer) { + pwin = outer->GetTopOuter(); + } + + if (pwin) { + pwin->NotifyContentBlockingState( + nsIWebProgressListener::STATE_BLOCKED_TRACKING_COOKIES, httpChannel); + } } diff --git a/toolkit/components/antitracking/AntiTrackingCommon.h b/toolkit/components/antitracking/AntiTrackingCommon.h index 4f8121e87f23..dbb6d37fae20 100644 --- a/toolkit/components/antitracking/AntiTrackingCommon.h +++ b/toolkit/components/antitracking/AntiTrackingCommon.h @@ -94,6 +94,9 @@ public: // channel proxy. static void NotifyRejection(nsIChannel* aChannel); + + static void + NotifyRejection(nsPIDOMWindowInner* aWindow); }; } // namespace mozilla