Skip to content
This repository has been archived by the owner on Jan 23, 2025. It is now read-only.

Commit

Permalink
Add mechanism to clear cached tiles that have not been displayed for …
Browse files Browse the repository at this point in the history
…7 days (in order to save cache space) and prepare for release
  • Loading branch information
kiwibrowser committed Feb 16, 2021
1 parent b3a4602 commit ad4fdb6
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 3 deletions.
43 changes: 41 additions & 2 deletions chrome/browser/resources/local_ntp/local_ntp.html
Original file line number Diff line number Diff line change
Expand Up @@ -638,6 +638,7 @@ <h2>Private mode</h2>
console.log("Invalidating rootDomain: " + rootDomain);
item.src = "data:image/svg+xml;base64," + btoa(jdenticon.toSvg(parser.hostname, 64));
localStorage.setItem('icon-' + rootDomain, item.src);
localStorage.setItem('lastShown-' + rootDomain, Math.floor(Date.now() / 1000));
}

function remove_favorite(e)
Expand All @@ -658,6 +659,7 @@ <h2>Private mode</h2>
var innerDiv = document.createElement('div');
innerDiv.className = 'grid-item grid-idea';
var cachedImage = localStorage.getItem('icon-' + rootDomain);
localStorage.setItem('lastShown-' + rootDomain, Math.floor(Date.now() / 1000));
var imageUri = null;
var randomId = Math.random().toString(36).substr(2, 9) + Math.random().toString(36).substr(2, 9) + Math.random().toString(36).substr(2, 9);
if (cachedImage != null) {
Expand All @@ -673,6 +675,7 @@ <h2>Private mode</h2>
})
.then(function(answer) {
localStorage.setItem('icon-' + rootDomain, 'data:image/png;base64,' + arrayBufferToBase64(answer));
localStorage.setItem('lastShown-' + rootDomain, Math.floor(Date.now() / 1000));
document.getElementById('icon' + randomId).src = 'data:image/png;base64,' + arrayBufferToBase64(answer);
console.log('Icon for ' + rootDomain + ' is now fetched');
});
Expand All @@ -682,7 +685,7 @@ <h2>Private mode</h2>
}
if (impression_url && impression_url != 'about:blank')
navigator.sendBeacon(impression_url);
innerDiv.innerHTML = '<img id="closeImg" src="' + closeImg + '" class="closeImg closeImgInvisible" height="20" width="20" style="position: absolute; right: 0px; border: 0px;" /><a id="tile_target" href="' + click_url + '"><img border="0" class="grid-image" title="' + name + '" src="' + imageUri + '" id="icon' + randomId + '" onError="invalidate_image(this)" width="64" style="max-height: 64px; border-radius: 4px;" /><span style="width: 60px; line-height: 15px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; display: inline-block">' + name + '</span></a>';
innerDiv.innerHTML = '<a id="tile_target" href="' + click_url + '"><img border="0" class="grid-image" title="' + name + '" src="' + imageUri + '" id="icon' + randomId + '" onError="invalidate_image(this)" width="64" style="max-height: 64px; border-radius: 4px;" /><span style="width: 60px; line-height: 15px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; display: inline-block">' + name + '</span></a>';
innerDiv.style.minHeight = '64px';

// innerDiv.querySelector('#closeImg').addEventListener("touchstart", remove_favorite);
Expand All @@ -702,6 +705,7 @@ <h2>Private mode</h2>
var innerDiv = document.createElement('div');
innerDiv.className = 'grid-item';
var cachedImage = localStorage.getItem('icon-' + rootDomain);
localStorage.setItem('lastShown-' + rootDomain, Math.floor(Date.now() / 1000));
var imageUri = null;
var randomId = Math.random().toString(36).substr(2, 9) + Math.random().toString(36).substr(2, 9) + Math.random().toString(36).substr(2, 9);
if (nItemsAdded++ < 10) {
Expand Down Expand Up @@ -814,7 +818,7 @@ <h2>Private mode</h2>
if (globalGrid.isDragifierOn()) {
iseditable = false;
globalGrid.dragifierOff();
Array.prototype.forEach.call(document.getElementsByClassName("grid-item"), function (el) { el.style.WebkitAnimation = 'none'; });
Array.prototype.forEach.call(document.getElementsByClassName("grid-item"), function (el) { if (!el.classList.contains('grid-idea')) { el.style.WebkitAnimation = 'none'; } });
Array.prototype.forEach.call(document.getElementsByClassName('closeImg'), function (el) { el.classList.add('closeImgInvisible'); });
} else {
iseditable = true;
Expand Down Expand Up @@ -1225,5 +1229,40 @@ <h2>Private mode</h2>
<script>
<include src="./local_ntp.js">
</script>
<script>
function cleanUpOldTilesIdeas() {
var values = Object.values(localStorage),
keys = Object.keys(localStorage),
i = keys.length;
while ( i-- ) {
if (keys[i].startsWith('lastShown-idea-')) {
var tile_name = keys[i].substring('lastShown-idea-'.length);
var difference = Math.floor(Date.now() / 1000) - parseInt(localStorage[keys[i]]);
if (difference > (86400 * 7)) {
console.log('Dropping tile idea: ' + keys[i]);
delete localStorage[keys[i]];
delete localStorage['icon-idea-' + tile_name];
}
}
}
}
function cleanUpOldTiles() {
var values = Object.values(localStorage),
keys = Object.keys(localStorage),
i = keys.length;
while ( i-- ) {
if (keys[i].startsWith('lastShown-') && !keys[i].startsWith('lastShown-idea-')) {
var tile_name = keys[i].substring('lastShown-'.length);
var difference = Math.floor(Date.now() / 1000) - parseInt(localStorage[keys[i]]);
if (difference > (86400 * 7)) {
console.log('Dropping tile: ' + keys[i]);
delete localStorage[keys[i]];
delete localStorage['icon-' + tile_name];
}
}
}
}
window.setTimeout(function () { cleanUpOldTilesIdeas(); cleanUpOldTiles(); }, 3000);
</script>
</body>
</html>
2 changes: 1 addition & 1 deletion chrome/browser/resources/local_ntp/local_ntp.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit ad4fdb6

Please sign in to comment.