summaryrefslogtreecommitdiffstats
path: root/chromium/chrome/browser/resources/about_invalidations.js
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/chrome/browser/resources/about_invalidations.js')
-rw-r--r--chromium/chrome/browser/resources/about_invalidations.js213
1 files changed, 213 insertions, 0 deletions
diff --git a/chromium/chrome/browser/resources/about_invalidations.js b/chromium/chrome/browser/resources/about_invalidations.js
new file mode 100644
index 00000000000..83a187a57ae
--- /dev/null
+++ b/chromium/chrome/browser/resources/about_invalidations.js
@@ -0,0 +1,213 @@
+// 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.
+
+cr.define('chrome.invalidations', function() {
+ /**
+ * Local variable where we maintain a count of the invalidations received
+ * and of every ObjectId that has ever been updated (note that this doesn't
+ * log any invalidations ocurred prior to opening the about:invalidation
+ * page).
+ */
+ var tableObjects = {};
+
+ /**
+ * Local variable that contains the detailed information in an object form.
+ * This was done this way as to allow multiple calls to updateDetailedStatus
+ * to keep adding new items.
+ */
+ var cachedDetails = {};
+
+ function quote(str) {
+ return '\"' + str + '\"';
+ }
+
+ function nowTimeString() {
+ return '[' + new Date().getTime() + '] ';
+ }
+
+ /**
+ * Appends a string to a textarea log.
+ * @param {string} logMessage The string to be appended.
+ */
+ function appendToLog(logMessage) {
+ var invalidationsLog = $('invalidations-log');
+ invalidationsLog.value += logMessage + '\n';
+ }
+ /**
+ * Updates the jstemplate with the latest ObjectIds, ordered by registrar.
+ */
+ function repaintTable() {
+ var keys = [];
+ for (var key in tableObjects) {
+ keys.push(key);
+ }
+ keys.sort();
+ var sortedInvalidations = [];
+ for (var i = 0; i < keys.length; i++) {
+ sortedInvalidations.push(tableObjects[keys[i]]);
+ }
+ var wrapped = { objectsidtable: sortedInvalidations };
+ jstProcess(new JsEvalContext(wrapped), $('objectsid-table-div'));
+ }
+
+ /**
+ * Shows the current state of the InvalidatorService.
+ * @param {string} newState The string to be displayed and logged.
+ * @param {number} lastChangedTime The time in epoch when the state was last
+ * changed.
+ */
+ function updateInvalidatorState(newState, lastChangedTime) {
+ var logMessage = nowTimeString() +
+ 'Invalidations service state changed to ' + quote(newState);
+
+ appendToLog(logMessage);
+ $('invalidations-state').textContent = newState + ' (since ' +
+ new Date(lastChangedTime) + ')';
+ }
+
+ /**
+ * Adds to the log the latest invalidations received
+ * @param {!Array.<!Object>} allInvalidations The array of ObjectId
+ * that contains the invalidations received by the InvalidatorService.
+ */
+ function logInvalidations(allInvalidations) {
+ for (var i = 0; i < allInvalidations.length; i++) {
+ var inv = allInvalidations[i];
+ if (inv.hasOwnProperty('objectId')) {
+ var logMessage = nowTimeString() +
+ 'Received Invalidation with type ' +
+ quote(inv.objectId.name) +
+ ' version ' +
+ quote((inv.isUnknownVersion ? 'Unknown' : inv.version)) +
+ ' with payload ' +
+ quote(inv.payload);
+
+ appendToLog(logMessage);
+ var isInvalidation = true;
+ logToTable(inv, isInvalidation);
+ }
+ }
+ repaintTable();
+ }
+
+ /**
+ * Marks a change in the table whether a new invalidation has arrived
+ * or a new ObjectId is currently being added or updated.
+ * @param {!Object} oId The ObjectId being added or updated.
+ * @param {!boolean} isInvaldation A flag that says that an invalidation
+ * for this ObjectId has arrived or we just need to add it to the table
+ * as it was just updated its state.
+ */
+ function logToTable(oId, isInvalidation) {
+ var registrar = oId.registrar;
+ var name = oId.objectId.name;
+ var source = oId.objectId.source;
+ var totalCount = oId.objectId.totalCount || 0;
+ var key = source + '-' + name;
+ var time = new Date();
+ var version = oId.isUnknownVersion ? '?' :
+ oId.version;
+ var payload = '';
+ if (oId.hasOwnProperty('payload'))
+ payload = oId.payload;
+ if (!(key in tableObjects)) {
+ tableObjects[key] = {
+ name: name,
+ source: source,
+ totalCount: totalCount,
+ sessionCount: 0,
+ registrar: registrar,
+ time: '',
+ version: '',
+ payload: '',
+ type: 'content'
+ };
+ }
+ // Refresh the type to be a content because it might have been
+ // greyed out.
+ tableObjects[key].type = 'content';
+ if (isInvalidation) {
+ tableObjects[key].totalCount = tableObjects[key].totalCount + 1;
+ tableObjects[key].sessionCount = tableObjects[key].sessionCount + 1;
+ tableObjects[key].time = time.toTimeString();
+ tableObjects[key].version = version;
+ tableObjects[key].payload = payload;
+ }
+ }
+
+ /**
+ * Shows the handlers that are currently registered for invalidations
+ * (but might not have objects ids registered yet).
+ * @param {!Array.<string>} allHandlers An array of Strings that are
+ * the names of all the handlers currently registered in the
+ * InvalidatorService.
+ */
+ function updateHandlers(allHandlers) {
+ var allHandlersFormatted = allHandlers.join(', ');
+ $('registered-handlers').textContent = allHandlersFormatted;
+ var logMessage = nowTimeString() +
+ 'InvalidatorHandlers currently registered: ' + allHandlersFormatted;
+ appendToLog(logMessage);
+ }
+
+ /**
+ * Updates the table with the objects ids registered for invalidations
+ * @param {string} registrar The name of the owner of the InvalidationHandler
+ * that is registered for invalidations
+ * @param {Array of Object} allIds An array of ObjectsIds that are currently
+ * registered for invalidations. It is not differential (as in, whatever
+ * is not registered now but was before, it mean it was taken out the
+ * registered objects)
+ */
+ function updateIds(registrar, allIds) {
+ // Grey out every datatype assigned to this registrar
+ // (and reenable them later in case they are still registered).
+ for (var key in tableObjects) {
+ if (tableObjects[key]['registrar'] === registrar)
+ tableObjects[key].type = 'greyed';
+ }
+ // Reenable those ObjectsIds still registered with this registrar.
+ for (var i = 0; i < allIds.length; i++) {
+ var oId = { objectId: allIds[i], registrar: registrar };
+ var isInvalidation = false;
+ logToTable(oId, isInvalidation);
+ }
+ repaintTable();
+ }
+
+ /**
+ * Update the internal status display, merging new detailed information.
+ * @param {!Object} newDetails The dictionary containing assorted debugging
+ * details (e.g. Network Channel information).
+ */
+ function updateDetailedStatus(newDetails) {
+ for (var key in newDetails) {
+ cachedDetails[key] = newDetails[key];
+ }
+ $('internal-display').value = JSON.stringify(cachedDetails, null, 2);
+ }
+
+ /**
+ * Function that notifies the InvalidationsMessageHandler that the UI is
+ * ready to receive real-time notifications.
+ */
+ function onLoadWork() {
+ $('request-detailed-status').onclick = function() {
+ cachedDetails = {};
+ chrome.send('requestDetailedStatus');
+ };
+ chrome.send('doneLoading');
+ }
+
+ return {
+ logInvalidations: logInvalidations,
+ onLoadWork: onLoadWork,
+ updateDetailedStatus: updateDetailedStatus,
+ updateHandlers: updateHandlers,
+ updateIds: updateIds,
+ updateInvalidatorState: updateInvalidatorState,
+ };
+});
+
+document.addEventListener('DOMContentLoaded', chrome.invalidations.onLoadWork);