Bug 1420571 - Don't write unchanged page metadata to places.sqlite. r=Mardak

MozReview-Commit-ID: Gdv1qVSsfnO

--HG--
extra : rebase_source : 3aa365b44dbd148f1f835e12a08100add8e5e4a2
This commit is contained in:
Marco Bonardo 2017-11-27 18:15:21 +01:00
Родитель f9a10ab56d
Коммит f5d28a8ed6
3 изменённых файлов: 24 добавлений и 20 удалений

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

@ -1388,27 +1388,31 @@ var insertMany = function(db, pageInfos, onResult, onError) {
var update = async function(db, pageInfo) {
let updateFragments = [];
let whereClauseFragment = "";
let info = {};
let params = {};
// Prefer GUID over url if it's present
if (typeof pageInfo.guid === "string") {
whereClauseFragment = "WHERE guid = :guid";
info.guid = pageInfo.guid;
whereClauseFragment = "guid = :guid";
params.guid = pageInfo.guid;
} else {
whereClauseFragment = "WHERE url_hash = hash(:url) AND url = :url";
info.url = pageInfo.url.href;
whereClauseFragment = "url_hash = hash(:url) AND url = :url";
params.url = pageInfo.url.href;
}
if (pageInfo.description || pageInfo.description === null) {
updateFragments.push("description = :description");
info.description = pageInfo.description;
updateFragments.push("description");
params.description = pageInfo.description;
}
if (pageInfo.previewImageURL || pageInfo.previewImageURL === null) {
updateFragments.push("preview_image_url = :previewImageURL");
info.previewImageURL = pageInfo.previewImageURL ? pageInfo.previewImageURL.href : null;
updateFragments.push("preview_image_url");
params.preview_image_url = pageInfo.previewImageURL ? pageInfo.previewImageURL.href : null;
}
let query = `UPDATE moz_places
SET ${updateFragments.join(", ")}
${whereClauseFragment}`;
await db.execute(query, info);
// Since this data may be written at every visit and is textual, avoid
// overwriting the existing record if it didn't change.
await db.execute(`
UPDATE moz_places
SET ${updateFragments.map(v => `${v} = :${v}`).join(", ")}
WHERE ${whereClauseFragment}
AND (${updateFragments.map(v => `IFNULL(${v}, "") <> IFNULL(:${v}, "")`).join(" OR ")})
`, params);
};

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

@ -206,7 +206,7 @@ function serializeNode(aNode, aIsLivemark) {
// Imposed to limit database size.
const DB_URL_LENGTH_MAX = 65536;
const DB_TITLE_LENGTH_MAX = 4096;
const DB_DESCRIPTION_LENGTH_MAX = 1024;
const DB_DESCRIPTION_LENGTH_MAX = 256;
/**
* List of bookmark object validators, one per each known property.

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

@ -70,9 +70,9 @@ add_task(async function test_error_cases() {
add_task(async function test_description_change_saved() {
await PlacesTestUtils.clearHistory();
let TEST_URL = NetUtil.newURI("http://mozilla.org/test_description_change_saved");
let TEST_URL = "http://mozilla.org/test_description_change_saved";
await PlacesTestUtils.addVisits(TEST_URL);
Assert.ok(page_in_database(TEST_URL));
Assert.ok(await PlacesTestUtils.isPageInDB(TEST_URL));
let description = "Test description";
await PlacesUtils.history.update({ url: TEST_URL, description });
@ -104,10 +104,10 @@ add_task(async function test_description_change_saved() {
add_task(async function test_previewImageURL_change_saved() {
await PlacesTestUtils.clearHistory();
let TEST_URL = NetUtil.newURI("http://mozilla.org/test_previewImageURL_change_saved");
let TEST_URL = "http://mozilla.org/test_previewImageURL_change_saved";
let IMAGE_URL = "http://mozilla.org/test_preview_image.png";
await PlacesTestUtils.addVisits(TEST_URL);
Assert.ok(page_in_database(TEST_URL));
Assert.ok(await PlacesTestUtils.isPageInDB(TEST_URL));
let previewImageURL = IMAGE_URL;
await PlacesUtils.history.update({ url: TEST_URL, previewImageURL });
@ -129,9 +129,9 @@ add_task(async function test_previewImageURL_change_saved() {
add_task(async function test_change_both_saved() {
await PlacesTestUtils.clearHistory();
let TEST_URL = NetUtil.newURI("http://mozilla.org/test_change_both_saved");
let TEST_URL = "http://mozilla.org/test_change_both_saved";
await PlacesTestUtils.addVisits(TEST_URL);
Assert.ok(page_in_database(TEST_URL));
Assert.ok(await PlacesTestUtils.isPageInDB(TEST_URL));
let description = "Test description";
let previewImageURL = "http://mozilla.org/test_preview_image.png";