blob: 1f3959d1ee87ff58c92969d23f78751f7a3ac911 [file] [log] [blame]
// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
cr.define('indexeddb', function() {
'use strict';
function initialize() {
chrome.send('getAllOrigins');
}
function progressNodeFor(link) {
return link.parentNode.querySelector('.download-status');
}
function downloadOriginData(event) {
var link = event.target;
progressNodeFor(link).style.display = 'inline';
chrome.send(
'downloadOriginData', [link.idb_partition_path, link.idb_origin_url]);
return false;
}
function forceClose(event) {
var link = event.target;
progressNodeFor(link).style.display = 'inline';
chrome.send('forceClose', [link.idb_partition_path, link.idb_origin_url]);
return false;
}
function forceSchemaDowngrade(event) {
var link = event.target;
progressNodeFor(link).style.display = 'inline';
chrome.send(
'forceSchemaDowngrade', [link.idb_partition_path, link.idb_origin_url]);
return false;
}
function withNode(selector, partition_path, origin_url, callback) {
var links = document.querySelectorAll(selector);
for (var i = 0; i < links.length; ++i) {
var link = links[i];
if (partition_path == link.idb_partition_path &&
origin_url == link.idb_origin_url) {
callback(link);
}
}
}
// Fired from the backend after the data has been zipped up, and the
// download manager has begun downloading the file.
function onOriginDownloadReady(partition_path, origin_url, connection_count) {
withNode('a.download', partition_path, origin_url, function(link) {
progressNodeFor(link).style.display = 'none';
});
withNode('.connection-count', partition_path, origin_url, function(span) {
span.innerText = connection_count;
});
}
function onForcedClose(partition_path, origin_url, connection_count) {
withNode('a.force-close', partition_path, origin_url, function(link) {
progressNodeFor(link).style.display = 'none';
});
withNode('.connection-count', partition_path, origin_url, function(span) {
span.innerText = connection_count;
});
}
function onForcedSchemaDowngrade(
partition_path, origin_url, connection_count) {
withNode(
'a.force-schema-downgrade', partition_path, origin_url, function(link) {
progressNodeFor(link).style.display = 'none';
});
withNode('.connection-count', partition_path, origin_url, function(span) {
span.innerText = connection_count;
});
}
// Fired from the backend with a single partition's worth of
// IndexedDB metadata.
function onOriginsReady(origins, partition_path) {
var template = jstGetTemplate('indexeddb-list-template');
var container = $('indexeddb-list');
container.appendChild(template);
jstProcess(
new JsEvalContext({idbs: origins, partition_path: partition_path}),
template);
var downloadLinks = container.querySelectorAll('a.download');
for (var i = 0; i < downloadLinks.length; ++i) {
downloadLinks[i].addEventListener('click', downloadOriginData, false);
}
var forceCloseLinks = container.querySelectorAll('a.force-close');
for (i = 0; i < forceCloseLinks.length; ++i) {
forceCloseLinks[i].addEventListener('click', forceClose, false);
}
var forceSchemaDowngradeLinks =
container.querySelectorAll('a.force-schema-downgrade');
for (i = 0; i < forceSchemaDowngradeLinks.length; ++i) {
forceSchemaDowngradeLinks[i].addEventListener(
'click', forceSchemaDowngrade, false);
}
}
return {
initialize: initialize,
onForcedClose: onForcedClose,
onForcedSchemaDowngrade: onForcedSchemaDowngrade,
onOriginDownloadReady: onOriginDownloadReady,
onOriginsReady: onOriginsReady,
};
});
document.addEventListener('DOMContentLoaded', indexeddb.initialize);