Index: chrome/browser/resources/predictors/resource_prefetch_predictor.js |
diff --git a/chrome/browser/resources/predictors/resource_prefetch_predictor.js b/chrome/browser/resources/predictors/resource_prefetch_predictor.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f725105441dfbcb0fe71a6c068127ffbcc5c68f5 |
--- /dev/null |
+++ b/chrome/browser/resources/predictors/resource_prefetch_predictor.js |
@@ -0,0 +1,102 @@ |
+// Copyright 2014 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. |
+ |
+/** |
+ * Requests the database from the backend. |
+ */ |
+function requestResourcePrefetchPredictorDb() { |
+ chrome.send('requestResourcePrefetchPredictorDb'); |
+} |
+ |
+/** |
+ * Callback from backend with the database contents. Sets up some globals and |
+ * calls to create the UI. |
+ * @param {Dictionary} database Information about ResourcePrefetchPredictor |
+ * including the database as a flattened list, a boolean indicating if the |
+ * system is enabled. |
+ */ |
+function updateResourcePrefetchPredictorDb(database) { |
+ updateResourcePrefetchPredictorDbView(database); |
+} |
+ |
+/** |
+ * Truncates the string to keep the database readable. |
+ * @param {string} str The string to truncate. |
+ * @return {string} The truncated string. |
+ */ |
+function truncateString(str) { |
+ return str.length < 100 ? str : str.substring(0, 99); |
+} |
+ |
+/** |
+ * Updates the table from the database. |
+ * @param {Dictionary} database Information about ResourcePrefetchPredictor |
+ * including the database as a flattened list, a boolean indicating if the |
+ * system is enabled and the current hit weight. |
+ */ |
+function updateResourcePrefetchPredictorDbView(database) { |
+ if (!database.enabled) { |
+ $('rpp_enabled').style.display = 'none'; |
+ $('rpp_disabled').style.display = 'block'; |
+ return; |
+ } else { |
+ $('rpp_enabled').style.display = 'block'; |
+ $('rpp_disabled').style.display = 'none'; |
+ } |
+ |
+ var hasUrlData = database.url_db && database.url_db.length > 0; |
+ var hasHostData = database.host_db && database.host_db.length > 0; |
+ |
+ if (hasUrlData) |
+ renderCacheData($('rpp_url_body'), database.url_db); |
+ if (hasHostData) |
+ renderCacheData($('rpp_host_body'), database.host_db); |
+} |
+ |
+/** |
+ * Renders cache data for URL or host based data. |
+ * @param {HTMLElement} body element of table to render into. |
+ * @param {Dictionary} database to render. |
+ */ |
+function renderCacheData(body, database) { |
+ body.textContent = ''; |
+ for (var i = 0; i < database.length; ++i) { |
+ var main = database[i]; |
+ |
+ for (var j = 0; j < main.resources.length; ++j) { |
+ var resource = main.resources[j]; |
+ var row = document.createElement('tr'); |
+ |
+ if (j == 0) { |
+ var t = document.createElement('td'); |
+ t.rowSpan = main.resources.length; |
+ t.textContent = truncateString(main.main_frame_url); |
+ t.className = 'last'; |
+ row.appendChild(t); |
+ } |
+ |
+ if (j == main.resources.length - 1) |
+ row.className = 'last'; |
+ |
+ row.appendChild(document.createElement('td')).textContent = |
+ truncateString(resource.resource_url); |
+ row.appendChild(document.createElement('td')).textContent = |
+ resource.resource_type; |
+ row.appendChild(document.createElement('td')).textContent = |
+ resource.number_of_hits; |
+ row.appendChild(document.createElement('td')).textContent = |
+ resource.number_of_misses; |
+ row.appendChild(document.createElement('td')).textContent = |
+ resource.consecutive_misses; |
+ row.appendChild(document.createElement('td')).textContent = |
+ resource.position; |
+ row.appendChild(document.createElement('td')).textContent = |
+ resource.score; |
+ body.appendChild(row); |
+ } |
+ } |
+} |
+ |
+document.addEventListener('DOMContentLoaded', |
+ requestResourcePrefetchPredictorDb); |