The Wayback Machine - https://web.archive.org/web/20231002163656/https://bugzilla.mozilla.org/attachment.cgi?id=8621304&action=diff

Attachment #8621304: Patch v.2 for bug #366324

View | Details | Raw Unified | Return to bug 366324
Collapse All | Expand All

(-)a/toolkit/components/places/AsyncFaviconHelpers.cpp (-7 / +15 lines)
Line     Link Here 
 Lines 630-663   AsyncFetchAndSetIconFromNetwork::OnStopR Link Here 
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") ||
(-)a/toolkit/components/places/tests/head_common.js (+10 lines)
Line     Link Here 
 Lines 52-67   XPCOMUtils.defineLazyModuleGetter(this, Link Here 
52
// This imports various other objects in addition to PlacesUtils.
52
// This imports various other objects in addition to PlacesUtils.
53
Cu.import("resource://gre/modules/PlacesUtils.jsm");
53
Cu.import("resource://gre/modules/PlacesUtils.jsm");
54
54
55
XPCOMUtils.defineLazyGetter(this, "SMALLPNG_DATA_URI", function() {
55
XPCOMUtils.defineLazyGetter(this, "SMALLPNG_DATA_URI", function() {
56
  return NetUtil.newURI(
56
  return NetUtil.newURI(
57
         "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAA" +
57
         "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAA" +
58
         "AAAA6fptVAAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==");
58
         "AAAA6fptVAAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==");
59
});
59
});
60
XPCOMUtils.defineLazyGetter(this, "SMALLSVG_DATA_URI", function() {
61
  return NetUtil.newURI(
62
         "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy5" +
63
         "3My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBmaWxs" +
64
         "PSIjNDI0ZTVhIj4NCiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iN" +
65
         "DQiIHN0cm9rZT0iIzQyNGU1YSIgc3Ryb2tlLXdpZHRoPSIxMSIgZmlsbD" +
66
         "0ibm9uZSIvPg0KICA8Y2lyY2xlIGN4PSI1MCIgY3k9IjI0LjYiIHI9IjY" +
67
         "uNCIvPg0KICA8cmVjdCB4PSI0NSIgeT0iMzkuOSIgd2lkdGg9IjEwLjEi" +
68
         "IGhlaWdodD0iNDEuOCIvPg0KPC9zdmc%2BDQo%3D");
69
});
60
70
61
let gTestDir = do_get_cwd();
71
let gTestDir = do_get_cwd();
62
72
63
// Initialize profile.
73
// Initialize profile.
64
let gProfD = do_get_profile();
74
let gProfD = do_get_profile();
65
75
66
// Remove any old database.
76
// Remove any old database.
67
clearDB();
77
clearDB();
(-)a/toolkit/components/places/tests/unit/test_svg_favicon.js (+42 lines)
Line     Link Here 
Line 0    Link Here 
1
/* Any copyright is dedicated to the Public Domain.
2
   http://creativecommons.org/publicdomain/zero/1.0/ */
3
4
function run_test() {
5
  run_next_test();
6
}
7
let pageuri = NetUtil.newURI("http://deliciousbacon.com/");
8
9
// First, add a history entry or else Places is unhappy.
10
add_test(function test_addVisit() {
11
  PlacesTestUtils.addVisits({
12
    uri: pageuri,
13
    transition: TRANSITION_LINK,
14
    visitDate: Date.now() * 1000
15
  }).then(run_next_test());
16
});
17
18
// Test adding the favicon
19
add_test(function test_setFavicon() {
20
  function onSetComplete(aURI, aDataLen, aData, aMimeType) {
21
    equal(aURI.spec, SMALLSVG_DATA_URI.spec, "setFavicon aURI check");
22
    equal(aDataLen, 263, "setFavicon aDataLen check");
23
    equal(aMimeType, "image/svg+xml", "setFavicon aMimeType check");
24
    run_next_test();
25
  }
26
  PlacesUtils.favicons.setAndFetchFaviconForPage(pageuri, SMALLSVG_DATA_URI,
27
                                                 false,
28
                                                 PlacesUtils.favicons.FAVICON_LOAD_NON_PRIVATE,
29
                                                 onSetComplete);
30
});
31
32
// Test fetching the favicon
33
add_test(function test_getFavicon() {
34
  function onGetComplete(aURI, aDataLen, aData, aMimeType) {
35
    equal(aURI.spec, SMALLSVG_DATA_URI.spec, "getFavicon aURI check");
36
    equal(aDataLen, 263, "getFavicon aDataLen check");
37
    equal(aMimeType, "image/svg+xml", "getFavicon aMimeType check");
38
    run_next_test();
39
  }
40
  PlacesUtils.favicons.getFaviconDataForPage(pageuri, onGetComplete);
41
});
42
(-)a/toolkit/components/places/tests/unit/xpcshell.ini (+1 lines)
Line     Link Here 
 Lines 133-148   skip-if = os == "android" Link Here 
133
[test_preventive_maintenance_runTasks.js]
133
[test_preventive_maintenance_runTasks.js]
134
[test_promiseBookmarksTree.js]
134
[test_promiseBookmarksTree.js]
135
[test_removeVisitsByTimeframe.js]
135
[test_removeVisitsByTimeframe.js]
136
# Bug 676989: test hangs consistently on Android
136
# Bug 676989: test hangs consistently on Android
137
skip-if = os == "android"
137
skip-if = os == "android"
138
[test_resolveNullBookmarkTitles.js]
138
[test_resolveNullBookmarkTitles.js]
139
[test_result_sort.js]
139
[test_result_sort.js]
140
[test_sql_guid_functions.js]
140
[test_sql_guid_functions.js]
141
[test_svg_favicon.js]
141
[test_tag_autocomplete_search.js]
142
[test_tag_autocomplete_search.js]
142
[test_tagging.js]
143
[test_tagging.js]
143
[test_telemetry.js]
144
[test_telemetry.js]
144
[test_update_frecency_after_delete.js]
145
[test_update_frecency_after_delete.js]
145
# Bug 676989: test hangs consistently on Android
146
# Bug 676989: test hangs consistently on Android
146
skip-if = os == "android"
147
skip-if = os == "android"
147
[test_utils_backups_create.js]
148
[test_utils_backups_create.js]
148
[test_utils_getURLsForContainerNode.js]
149
[test_utils_getURLsForContainerNode.js]

Return to bug 366324