Bug 366324 - Make SVG favicons work reliably. r=mak

This commit is contained in:
Justin Dolske 2015-06-12 12:02:48 -07:00
Родитель 15f3c165c5
Коммит c024e58b22
4 изменённых файлов: 56 добавлений и 7 удалений

Просмотреть файл

@ -635,9 +635,21 @@ AsyncFetchAndSetIconFromNetwork::OnStopRequest(nsIRequest* aRequest,
return NS_OK;
}
NS_SniffContent(NS_DATA_SNIFFER_CATEGORY, aRequest,
TO_INTBUFFER(mIcon.data), mIcon.data.Length(),
mIcon.mimeType);
nsCOMPtr<nsIChannel> channel = do_QueryInterface(aRequest);
// aRequest should always QI to nsIChannel.
// See AsyncFetchAndSetIconFromNetwork::Run()
MOZ_ASSERT(channel);
nsAutoCString contentType;
channel->GetContentType(contentType);
// Bug 366324 - can't sniff SVG yet, so rely on server-specified type
if (contentType.EqualsLiteral("image/svg+xml")) {
mIcon.mimeType.AssignLiteral("image/svg+xml");
} else {
NS_SniffContent(NS_DATA_SNIFFER_CATEGORY, aRequest,
TO_INTBUFFER(mIcon.data), mIcon.data.Length(),
mIcon.mimeType);
}
// If the icon does not have a valid MIME type, add it to the failed cache.
if (mIcon.mimeType.IsEmpty()) {
@ -649,10 +661,6 @@ AsyncFetchAndSetIconFromNetwork::OnStopRequest(nsIRequest* aRequest,
return NS_OK;
}
nsCOMPtr<nsIChannel> channel = do_QueryInterface(aRequest);
// aRequest should always QI to nsIChannel.
// See AsyncFetchAndSetIconFromNetwork::Run()
MOZ_ASSERT(channel);
mIcon.expiration = GetExpirationTimeFromChannel(channel);
// Telemetry probes to measure the favicon file sizes for each different file type.

Просмотреть файл

@ -57,6 +57,16 @@ XPCOMUtils.defineLazyGetter(this, "SMALLPNG_DATA_URI", function() {
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAA" +
"AAAA6fptVAAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==");
});
XPCOMUtils.defineLazyGetter(this, "SMALLSVG_DATA_URI", function() {
return NetUtil.newURI(
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy5" +
"3My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBmaWxs" +
"PSIjNDI0ZTVhIj4NCiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iN" +
"DQiIHN0cm9rZT0iIzQyNGU1YSIgc3Ryb2tlLXdpZHRoPSIxMSIgZmlsbD" +
"0ibm9uZSIvPg0KICA8Y2lyY2xlIGN4PSI1MCIgY3k9IjI0LjYiIHI9IjY" +
"uNCIvPg0KICA8cmVjdCB4PSI0NSIgeT0iMzkuOSIgd2lkdGg9IjEwLjEi" +
"IGhlaWdodD0iNDEuOCIvPg0KPC9zdmc%2BDQo%3D");
});
let gTestDir = do_get_cwd();

Просмотреть файл

@ -0,0 +1,30 @@
const PAGEURI = NetUtil.newURI("http://deliciousbacon.com/");
add_task(function* () {
// First, add a history entry or else Places can't save a favicon.
yield PlacesTestUtils.addVisits({
uri: PAGEURI,
transition: TRANSITION_LINK,
visitDate: Date.now() * 1000
});
yield new Promise(resolve => {
function onSetComplete(aURI, aDataLen, aData, aMimeType) {
equal(aURI.spec, SMALLSVG_DATA_URI.spec, "setFavicon aURI check");
equal(aDataLen, 263, "setFavicon aDataLen check");
equal(aMimeType, "image/svg+xml", "setFavicon aMimeType check");
resolve();
}
PlacesUtils.favicons.setAndFetchFaviconForPage(PAGEURI, SMALLSVG_DATA_URI,
false,
PlacesUtils.favicons.FAVICON_LOAD_NON_PRIVATE,
onSetComplete);
});
let data = yield PlacesUtils.promiseFaviconData(PAGEURI.spec);
equal(data.uri.spec, SMALLSVG_DATA_URI.spec, "getFavicon aURI check");
equal(data.dataLen, 263, "getFavicon aDataLen check");
equal(data.mimeType, "image/svg+xml", "getFavicon aMimeType check");
});

Просмотреть файл

@ -138,6 +138,7 @@ skip-if = os == "android"
[test_resolveNullBookmarkTitles.js]
[test_result_sort.js]
[test_sql_guid_functions.js]
[test_svg_favicon.js]
[test_tag_autocomplete_search.js]
[test_tagging.js]
[test_telemetry.js]