зеркало из https://github.com/mozilla/gecko-dev.git
Bug 366324 - Make SVG favicons work reliably. r=mak
This commit is contained in:
Родитель
15f3c165c5
Коммит
c024e58b22
|
@ -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]
|
||||
|
|
Загрузка…
Ссылка в новой задаче