Bug 1357664 - Don't delete all relations to expired icons when updating icons for a specific page. r=adw

MozReview-Commit-ID: JYHeuyvrJYp

--HG--
extra : rebase_source : d1ba003454b12a3fd688545a995c8f0c56bc95c7
This commit is contained in:
Marco Bonardo 2017-04-19 10:19:48 +02:00
Родитель f3f1cd175f
Коммит 7ebdf5f8b2
3 изменённых файлов: 22 добавлений и 4 удалений

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

@ -856,12 +856,13 @@ AsyncAssociateIconToPage::Run()
if (mPage.id != 0) { if (mPage.id != 0) {
nsCOMPtr<mozIStorageStatement> stmt; nsCOMPtr<mozIStorageStatement> stmt;
stmt = DB->GetStatement( stmt = DB->GetStatement(
"DELETE FROM moz_icons_to_pages WHERE icon_id IN ( " "DELETE FROM moz_icons_to_pages "
"WHERE icon_id IN ( "
"SELECT icon_id FROM moz_icons_to_pages " "SELECT icon_id FROM moz_icons_to_pages "
"JOIN moz_icons i ON icon_id = i.id " "JOIN moz_icons i ON icon_id = i.id "
"WHERE page_id = :page_id " "WHERE page_id = :page_id "
"AND expire_ms < strftime('%s','now','localtime','start of day','-7 days','utc') * 1000 " "AND expire_ms < strftime('%s','now','localtime','start of day','-7 days','utc') * 1000 "
") " ") AND page_id = :page_id "
); );
NS_ENSURE_STATE(stmt); NS_ENSURE_STATE(stmt);
mozStorageStatementScoper scoper(stmt); mozStorageStatementScoper scoper(stmt);

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

@ -5,6 +5,8 @@
add_task(function* test_replaceFaviconData_validHistoryURI() { add_task(function* test_replaceFaviconData_validHistoryURI() {
const TEST_URL = "http://mozilla.com/" const TEST_URL = "http://mozilla.com/"
yield PlacesTestUtils.addVisits(TEST_URL); yield PlacesTestUtils.addVisits(TEST_URL);
const TEST_URL2 = "http://test.mozilla.com/"
yield PlacesTestUtils.addVisits(TEST_URL2);
let favicons = [ let favicons = [
{ {
@ -31,6 +33,13 @@ add_task(function* test_replaceFaviconData_validHistoryURI() {
icon.mimeType, icon.mimeType,
icon.expire); icon.expire);
yield setFaviconForPage(TEST_URL, TEST_URL + icon.name); yield setFaviconForPage(TEST_URL, TEST_URL + icon.name);
if (icon.expire != 0) {
PlacesUtils.favicons.replaceFaviconData(NetUtil.newURI(TEST_URL + icon.name),
data, data.length,
icon.mimeType,
icon.expire);
yield setFaviconForPage(TEST_URL2, TEST_URL + icon.name);
}
} }
// Only the second and the third icons should have survived. // Only the second and the third icons should have survived.
@ -40,4 +49,9 @@ add_task(function* test_replaceFaviconData_validHistoryURI() {
Assert.equal(yield getFaviconUrlForPage(TEST_URL, 64), Assert.equal(yield getFaviconUrlForPage(TEST_URL, 64),
TEST_URL + favicons[2].name, TEST_URL + favicons[2].name,
"Should retrieve the 64px icon"); "Should retrieve the 64px icon");
// The expired icon for page 2 should have survived.
Assert.equal(yield getFaviconUrlForPage(TEST_URL2, 16),
TEST_URL + favicons[0].name,
"Should retrieve the expired 16px icon");
}); });

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

@ -884,9 +884,12 @@ function setFaviconForPage(page, icon, forceReload = true) {
function getFaviconUrlForPage(page, width = 0) { function getFaviconUrlForPage(page, width = 0) {
let pageURI = page instanceof Ci.nsIURI ? page let pageURI = page instanceof Ci.nsIURI ? page
: NetUtil.newURI(new URL(page).href); : NetUtil.newURI(new URL(page).href);
return new Promise(resolve => { return new Promise((resolve, reject) => {
PlacesUtils.favicons.getFaviconURLForPage(pageURI, iconURI => { PlacesUtils.favicons.getFaviconURLForPage(pageURI, iconURI => {
resolve(iconURI.spec); if (iconURI)
resolve(iconURI.spec);
else
reject("Unable to find an icon for " + pageURI.spec);
}, width); }, width);
}); });
} }