|
|
|
|
| 630 |
nsCOMPtr<nsIURI> iconURI; |
630 |
nsCOMPtr<nsIURI> iconURI; |
| 631 |
rv = NS_NewURI(getter_AddRefs(iconURI), mIcon.spec); |
631 |
rv = NS_NewURI(getter_AddRefs(iconURI), mIcon.spec); |
| 632 |
NS_ENSURE_SUCCESS(rv, rv); |
632 |
NS_ENSURE_SUCCESS(rv, rv); |
| 633 |
rv = favicons->AddFailedFavicon(iconURI); |
633 |
rv = favicons->AddFailedFavicon(iconURI); |
| 634 |
NS_ENSURE_SUCCESS(rv, rv); |
634 |
NS_ENSURE_SUCCESS(rv, rv); |
| 635 |
return NS_OK; |
635 |
return NS_OK; |
| 636 |
} |
636 |
} |
| 637 |
|
637 |
|
| 638 |
NS_SniffContent(NS_DATA_SNIFFER_CATEGORY, aRequest, |
638 |
nsCOMPtr<nsIChannel> channel = do_QueryInterface(aRequest); |
| 639 |
TO_INTBUFFER(mIcon.data), mIcon.data.Length(), |
639 |
// aRequest should always QI to nsIChannel. |
| 640 |
mIcon.mimeType); |
640 |
// See AsyncFetchAndSetIconFromNetwork::Run() |
|
|
641 |
MOZ_ASSERT(channel); |
| 642 |
|
| 643 |
nsAutoCString contentType; |
| 644 |
channel->GetContentType(contentType); |
| 645 |
// Bug 366324 - can't sniff SVG yet, so rely on server-specified type |
| 646 |
if (contentType.EqualsLiteral("image/svg+xml")) { |
| 647 |
mIcon.mimeType.AssignLiteral("image/svg+xml"); |
| 648 |
} else { |
| 649 |
NS_SniffContent(NS_DATA_SNIFFER_CATEGORY, aRequest, |
| 650 |
TO_INTBUFFER(mIcon.data), mIcon.data.Length(), |
| 651 |
mIcon.mimeType); |
| 652 |
} |
| 641 |
|
653 |
|
| 642 |
// If the icon does not have a valid MIME type, add it to the failed cache. |
654 |
// If the icon does not have a valid MIME type, add it to the failed cache. |
| 643 |
if (mIcon.mimeType.IsEmpty()) { |
655 |
if (mIcon.mimeType.IsEmpty()) { |
| 644 |
nsCOMPtr<nsIURI> iconURI; |
656 |
nsCOMPtr<nsIURI> iconURI; |
| 645 |
rv = NS_NewURI(getter_AddRefs(iconURI), mIcon.spec); |
657 |
rv = NS_NewURI(getter_AddRefs(iconURI), mIcon.spec); |
| 646 |
NS_ENSURE_SUCCESS(rv, rv); |
658 |
NS_ENSURE_SUCCESS(rv, rv); |
| 647 |
rv = favicons->AddFailedFavicon(iconURI); |
659 |
rv = favicons->AddFailedFavicon(iconURI); |
| 648 |
NS_ENSURE_SUCCESS(rv, rv); |
660 |
NS_ENSURE_SUCCESS(rv, rv); |
| 649 |
return NS_OK; |
661 |
return NS_OK; |
| 650 |
} |
662 |
} |
| 651 |
|
663 |
|
| 652 |
nsCOMPtr<nsIChannel> channel = do_QueryInterface(aRequest); |
|
|
| 653 |
// aRequest should always QI to nsIChannel. |
| 654 |
// See AsyncFetchAndSetIconFromNetwork::Run() |
| 655 |
MOZ_ASSERT(channel); |
| 656 |
mIcon.expiration = GetExpirationTimeFromChannel(channel); |
664 |
mIcon.expiration = GetExpirationTimeFromChannel(channel); |
| 657 |
|
665 |
|
| 658 |
// Telemetry probes to measure the favicon file sizes for each different file type. |
666 |
// Telemetry probes to measure the favicon file sizes for each different file type. |
| 659 |
// This allow us to measure common file sizes while also observing each type popularity. |
667 |
// This allow us to measure common file sizes while also observing each type popularity. |
| 660 |
if (mIcon.mimeType.EqualsLiteral("image/png")) { |
668 |
if (mIcon.mimeType.EqualsLiteral("image/png")) { |
| 661 |
mozilla::Telemetry::Accumulate(mozilla::Telemetry::PLACES_FAVICON_PNG_SIZES, mIcon.data.Length()); |
669 |
mozilla::Telemetry::Accumulate(mozilla::Telemetry::PLACES_FAVICON_PNG_SIZES, mIcon.data.Length()); |
| 662 |
} |
670 |
} |
| 663 |
else if (mIcon.mimeType.EqualsLiteral("image/x-icon") || |
671 |
else if (mIcon.mimeType.EqualsLiteral("image/x-icon") || |