nsresult PendingLookup::DoLookupInternal() { // We want to check the target URI, its referrer, and associated redirects // against the local lists. nsCOMPtr<nsIURI> uri; nsresult rv = mQuery->GetSourceURI(getter_AddRefs(uri)); NS_ENSURE_SUCCESS(rv, rv); nsCString sourceSpec; rv = GetStrippedSpec(uri, sourceSpec); NS_ENSURE_SUCCESS(rv, rv); mAnylistSpecs.AppendElement(sourceSpec); ClientDownloadRequest_Resource* resource = mRequest.add_resources(); resource->set_url(sourceSpec.get()); resource->set_type(ClientDownloadRequest::DOWNLOAD_URL); nsCOMPtr<nsIURI> referrer = nullptr; rv = mQuery->GetReferrerURI(getter_AddRefs(referrer)); if (referrer) { nsCString referrerSpec; rv = GetStrippedSpec(referrer, referrerSpec); NS_ENSURE_SUCCESS(rv, rv); mAnylistSpecs.AppendElement(referrerSpec); resource->set_referrer(referrerSpec.get()); } nsCOMPtr<nsIArray> redirects; rv = mQuery->GetRedirects(getter_AddRefs(redirects)); if (redirects) { AddRedirects(redirects); } else { LOG(("ApplicationReputation: Got no redirects [this=%p]", this)); } // Extract the signature and parse certificates so we can use it to check // whitelists. nsCOMPtr<nsIArray> sigArray; rv = mQuery->GetSignatureInfo(getter_AddRefs(sigArray)); NS_ENSURE_SUCCESS(rv, rv); if (sigArray) { rv = ParseCertificates(sigArray); NS_ENSURE_SUCCESS(rv, rv); } rv = GenerateWhitelistStrings(); NS_ENSURE_SUCCESS(rv, rv); // Start the call chain. return LookupNext(); }