Chromium Code Reviews| Index: chrome/browser/resources/quota_internals/quota-internals.js |
| diff --git a/chrome/browser/resources/quota_internals/quota-internals.js b/chrome/browser/resources/quota_internals/quota-internals.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..ab5461e1238b050a5f1597fcd2ddc33ec471b2c9 |
| --- /dev/null |
| +++ b/chrome/browser/resources/quota_internals/quota-internals.js |
| @@ -0,0 +1,279 @@ |
| + |
|
Evan Stade
2011/05/26 16:13:13
license header
tzik
2011/05/27 14:53:59
Done.
|
| +document.addEventListener("DOMContentLoaded",function(){ |
|
Evan Stade
2011/05/26 16:13:13
please don't inline this function. Follow the cr.d
|
| + |
| +function LOG() { |
|
Evan Stade
2011/05/26 16:13:13
every function in this file needs a comment
|
| + if(window.console && console.log) |
| + console.log.apply(console, arguments); |
| +} |
| + |
| +function forEach(xs, f) { |
| + for(var i=0; i < xs.length; ++i) |
| + f(xs[i]); |
| +} |
| + |
| +function lift(f) { |
| + return function(xs) { |
| + if(xs) |
| + forEach(xs, f); |
| + }; |
| +} |
| + |
| +function clear_child(element) { |
| + while (element.hasChildNodes()) |
| + element.removeChild(element.firstChild); |
| + return element; |
| +} |
| + |
| +function make_elem(tag, text) { |
| + var elem = document.createElement(tag); |
| + if (text) |
| + elem.appendChild(document.createTextNode(text)); |
| + return elem; |
| +} |
| + |
| +function print_text(text) { |
| + if (text === undefined) |
| + return "N/A"; |
| + return text; |
| +} |
| + |
| +function print_byte_number(num_text) { |
| + if (num_text === undefined) |
| + return "N/A"; |
| + var prefix = ["", "K", "M", "G", "T"]; |
| + var len = Math.floor((num_text.length-1)/3); |
| + return num_text.substring(0, num_text.length - 3 * len) + prefix[len] + "B"; |
| +} |
| + |
| +function print_date(date_text) { |
| + if (date_text === undefined) |
| + return "N/A"; |
| + var d = new Date(date_text); |
| + return d.toString(); |
| +} |
| + |
| +function print_bool(b) { |
| + if (b === undefined) return "N/A"; |
| + return b ? "true" : "false"; |
| +} |
| + |
| +function print_int(i) { |
| + return i === undefined ? "N/A" : i.toString(); |
| +} |
| + |
| +if(!window.chrome || !chrome.send) { |
| + document.title += " (test mode)"; |
| + LOG("Entering Test Mode..."); |
| + |
| + var AvailableSpace = "100000000"; |
| + var GlobalData = {type: "temporary", usage: "10", quota: "10000"}; |
| + var HostData = [ |
| + {host: "example.com", type: "temporary", usage: "0", quota: "0"}]; |
| + var OriginData = [ |
| + {origin: "http://example.com/", type: "temporary", host: "example.com", |
| + in_use: true, used_count: 1, last_access: Date.now()}]; |
| + |
| + if(!window.chrome) |
| + window.chrome = {}; |
| + window.chrome.send = function(msg, param) { |
| + switch(msg) { |
| + case "requestData": |
| + OnRecvAvailableSpace(AvailableSpace); |
| + OnRecvGlobalData(GlobalData); |
| + OnRecvHostData(HostData); |
| + OnRecvOriginData(OriginData); |
| + break; |
| + default: |
| + LOG("unknown message: " + msg); |
| + break; |
| + } |
| + }; |
| +} |
| + |
| +// Chrome Callback |
| +OnRecvAvailableSpace = function(avail_space) { |
| + var local = arguments.callee; |
| + if (avail_space !== undefined) |
| + local.avail_space = avail_space; |
| + |
| + var o = document.getElementById("diskspace-entry"); |
| + clear_child(o); |
| + o.appendChild(document.createTextNode( |
| + print_byte_number(avail_space))); |
| +}; |
| + |
| +OnRecvGlobalData = function(data){ |
| + var local = arguments.callee; |
| + if (!local.map) local.map = {}; |
| + |
| + var entry = local.map[data.type]; |
| + if (entry) { |
| + if (data.type !== undefined) |
| + entry.type = data.type; |
| + if (data.usage !== undefined) |
| + entry.usage = data.usage; |
| + if (data.quota !== undefined) |
| + entry.quota = data.quota; |
| + clear_child(entry.element); |
| + } else{ |
| + entry = { |
| + type: data.type, |
| + usage: data.usage, |
| + quota: data.quota, |
| + element: document.createElement("tr") |
| + }; |
| + local.map[data.type] = entry; |
| + document.getElementById("globaldata-entries") |
| + .appendChild(entry.element); |
| + } |
| + |
| + entry.element.appendChild( |
| + make_elem("td", print_text(entry.type))); |
| + entry.element.appendChild( |
| + make_elem("td", print_byte_number(entry.usage))); |
| + entry.element.appendChild( |
| + make_elem("td", print_byte_number(entry.quota))); |
| +}; |
| + |
| +OnRecvHostData = lift(function(data) { |
| + var local = arguments.callee; |
| + if (!local.map) local.map = {}; |
| + |
| + var entry = local.map[data.host + "/" + data.type]; |
| + if (entry) { |
| + if (data.host !== undefined) |
| + entry.host = data.host; |
| + if (data.type !== undefined) |
| + entry.type = data.type; |
| + if (data.usage !== undefined) |
| + entry.usage = data.usage; |
| + if (data.quota !== undefined) |
| + entry.quota = data.quota; |
| + clear_child(entry.element); |
| + } else { |
| + entry = { |
| + host: data.host, |
| + type: data.type, |
| + quota: data.quota, |
| + usage: data.usage, |
| + element: document.createElement("tr") |
| + }; |
| + local.map[data.host + "/" + data.type] = entry; |
| + document.getElementById("host-entries") |
| + .appendChild(entry.element); |
| + } |
| + |
| + entry.element.appendChild( |
| + make_elem("td", print_text(entry.host))); |
| + entry.element.appendChild( |
| + make_elem("td", print_text(entry.type))); |
| + entry.element.appendChild( |
| + make_elem("td", print_byte_number(entry.usage))); |
| + entry.element.appendChild( |
| + make_elem("td", print_byte_number(entry.quota))); |
| +}); |
| + |
| +OnRecvOriginData = lift(function(data) { |
| + var local = arguments.callee; |
| + if (!local.map) local.map = {}; |
| + |
| + var entry = local.map[data.origin + data.type]; |
| + if (entry) { |
| + if (data.origin !== undefined) |
| + entry.origin = data.origin; |
| + if (data.type !== undefined) |
| + entry.type = data.type; |
| + if (data.host !== undefined) |
| + entry.host = data.host; |
| + if (data.in_use !== undefined) |
| + entry.in_use = data.in_use; |
| + if (data.last_access !== undefined) |
| + entry.last_access = data.last_access; |
| + clear_child(entry.element); |
| + } else { |
| + entry = { |
| + origin: data.origin, |
| + type: data.type, |
| + host: data.host, |
| + in_use: data.in_use, |
| + used_count: data.used_count, |
| + last_access: data.last_access, |
| + element: document.createElement("tr") |
| + }; |
| + local.map[data.origin + data.type] = entry; |
| + document.getElementById("origin-entries") |
| + .appendChild(entry.element); |
| + } |
| + |
| + entry.element.appendChild( |
| + make_elem("td", print_text(entry.origin))); |
| + entry.element.appendChild( |
| + make_elem("td", print_text(entry.type))); |
| + entry.element.appendChild( |
| + make_elem("td", print_text(entry.host))); |
| + entry.element.appendChild( |
| + make_elem("td", print_bool(entry.in_use))); |
| + entry.element.appendChild( |
| + make_elem("td", print_int(entry.used_count))); |
| + entry.element.appendChild( |
| + make_elem("td", print_date(entry.last_access))); |
| +}); |
| + |
| +/* |
|
Evan Stade
2011/05/26 16:13:13
commented out code?
tzik
2011/05/27 14:53:59
Done.
|
| +function parse_query(query) { |
| + var entries = hash.substring(1).split("&"); |
| + var params = {}; |
| + for(var i = 0; i < entries.length; ++i) { |
| + var pair = entries[i].match(/(\w+)=(.*)/); |
| + if(pair && pair.length == 3) |
| + params[pair[1]] = decodeURL(pair[2]); |
| + } |
| + return params; |
| +} |
| + |
| +function make_query(params) { |
| + var query = []; |
| + for(var i in params) |
| + query.push(i+"="+encodeURL(params[i])); |
| + return "#" + query.join("&"); |
| +} |
| + |
| +var switches = document.getElementsByClassName("sort-switches"); |
| +for (var i=0; i < switches.length;++i) { |
| + switches[i].addEventListener("click",function() { |
| + var params = parse_query(location.hash); |
| + params["sort"] = i; |
| + location.hash = make_query(params); |
| + },false); |
| +} |
| + |
| +document.addEventListener("hashchange",function() { |
| + var query = parse_query(location.hash); |
| +},false); |
| + |
| +function sort_entries(i) { |
| + var origins = []; |
| + for (var j in origin_map) |
| + origins.push(j); |
| + origins.sort(function(x,y){ |
| + var xs = origin_map[x][i]; |
| + var ys = origin_map[y][i]; |
| + return xs<ys?-1:xs>ys?1:0; |
| + }); |
| +} |
| +*/ |
| + |
| +chrome.send("requestData"); |
| + |
| +},false); |
| + |
| +// Chrome Event Handler |
| + |
| +function NOTREADY() { |
| + console.log("Recieved some data but page is not in ready"); |
| +} |
| + |
| +var OnRecvAvailableSpace = NOTREADY; |
| +var OnRecvGlobalData = NOTREADY; |
| +var OnRecvHostData = NOTREADY; |
| +var OnRecvOriginData = NOTREADY; |