NS_IMETHODIMP nsChannelClassifier::OnClassifyComplete(nsresult aErrorCode) { // Should only be called in the parent process. MOZ_ASSERT(XRE_IsParentProcess()); if (aErrorCode == NS_ERROR_TRACKING_URI && NS_SUCCEEDED(IsTrackerWhitelisted())) { LOG(("nsChannelClassifier[%p]:OnClassifyComplete tracker found " "in whitelist so we won't block it", this)); aErrorCode = NS_OK; } if (mSuspendedChannel) { nsAutoCString errorName; if (LOG_ENABLED()) { GetErrorName(aErrorCode, errorName); LOG(("nsChannelClassifier[%p]:OnClassifyComplete %s (suspended channel)", this, errorName.get())); } MarkEntryClassified(aErrorCode); if (NS_FAILED(aErrorCode)) { if (LOG_ENABLED()) { nsCOMPtr<nsIURI> uri; mChannel->GetURI(getter_AddRefs(uri)); LOG(("nsChannelClassifier[%p]: cancelling channel %p for %s " "with error code %s", this, mChannel.get(), uri->GetSpecOrDefault().get(), errorName.get())); } // Channel will be cancelled (page element blocked) due to tracking. // Do update the security state of the document and fire a security // change event. if (aErrorCode == NS_ERROR_TRACKING_URI) { SetBlockedTrackingContent(mChannel); } mChannel->Cancel(aErrorCode); } LOG(("nsChannelClassifier[%p]: resuming channel %p from " "OnClassifyComplete", this, mChannel.get())); mChannel->Resume(); } mChannel = nullptr; return NS_OK; }
NS_IMETHODIMP nsChannelClassifier::OnClassifyComplete(nsresult aErrorCode) { // Should only be called in the parent process. MOZ_ASSERT(XRE_IsParentProcess()); if (aErrorCode == NS_ERROR_TRACKING_URI && NS_SUCCEEDED(IsTrackerWhitelisted())) { LOG(("nsChannelClassifier[%p]:OnClassifyComplete tracker found " "in whitelist so we won't block it", this)); aErrorCode = NS_OK; } if (mSuspendedChannel) { nsAutoCString errorName; if (LOG_ENABLED()) { GetErrorName(aErrorCode, errorName); LOG(("nsChannelClassifier[%p]:OnClassifyComplete %s (suspended channel)", this, errorName.get())); } MarkEntryClassified(aErrorCode); // The value of |mTrackingProtectionEnabled| should be assigned at // |ShouldEnableTrackingProtection| before. MOZ_ASSERT(mTrackingProtectionEnabled, "Should contain a value."); if (aErrorCode == NS_ERROR_TRACKING_URI && !mTrackingProtectionEnabled.valueOr(false)) { if (sAnnotateChannelEnabled) { nsCOMPtr<nsIParentChannel> parentChannel; NS_QueryNotificationCallbacks(mChannel, parentChannel); if (parentChannel) { // This channel is a parent-process proxy for a child process // request. We should notify the child process as well. parentChannel->NotifyTrackingResource(); } RefPtr<HttpBaseChannel> httpChannel = do_QueryObject(mChannel); if (httpChannel) { httpChannel->SetIsTrackingResource(); } } if (sLowerNetworkPriority) { if (LOG_ENABLED()) { nsCOMPtr<nsIURI> uri; mChannel->GetURI(getter_AddRefs(uri)); LOG(("nsChannelClassifier[%p]: lower the priority of channel %p" ", since %s is a tracker", this, mChannel.get(), uri->GetSpecOrDefault().get())); } nsCOMPtr<nsISupportsPriority> p = do_QueryInterface(mChannel); if (p) { p->SetPriority(nsISupportsPriority::PRIORITY_LOWEST); } } aErrorCode = NS_OK; } if (NS_FAILED(aErrorCode)) { if (LOG_ENABLED()) { nsCOMPtr<nsIURI> uri; mChannel->GetURI(getter_AddRefs(uri)); LOG(("nsChannelClassifier[%p]: cancelling channel %p for %s " "with error code %s", this, mChannel.get(), uri->GetSpecOrDefault().get(), errorName.get())); } // Channel will be cancelled (page element blocked) due to tracking. // Do update the security state of the document and fire a security // change event. if (aErrorCode == NS_ERROR_TRACKING_URI) { SetBlockedTrackingContent(mChannel); } mChannel->Cancel(aErrorCode); } LOG(("nsChannelClassifier[%p]: resuming channel %p from " "OnClassifyComplete", this, mChannel.get())); mChannel->Resume(); } mChannel = nullptr; return NS_OK; }