// Copyright (c) 2011 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. // require: cr.js // require: cr/event_target.js /** * @fileoverview This creates a log object which listens to and * records all sync events. */ cr.define('chrome.sync', function() { /** * Creates a new log object which then immediately starts recording * sync events. Recorded entries are available in the 'entries' * property and there is an 'append' event which can be listened to. * @constructor * @extends {cr.EventTarget} */ var Log = function() { var self = this; var makeListener = function(service, event) { return function(details) { self.log_(service, event, details); }; }; for (var eventType in chrome.sync.events) { var events = chrome.sync.events[eventType]; for (var i = 0; i < events.length; ++i) { var eventName = events[i]; var event = chrome.sync[eventName]; event.addListener(makeListener(eventType, eventName)); } } }; Log.prototype = { __proto__: cr.EventTarget.prototype, /** * The recorded log entries. * @type {array} */ entries: [], /** * Records a single event with the given parameters and fires the * 'append' event with the newly-created event as the 'detail' * field of a custom event. * @param {string} submodule The sync submodule for the event. * @param {string} event The name of the event. * @param {dictionary} details A dictionary of event-specific details. */ log_: function(submodule, event, details) { var entry = { submodule: submodule, event: event, date: new Date(), details: details }; this.entries.push(entry); // Fire append event. var e = cr.doc.createEvent('CustomEvent'); e.initCustomEvent('append', false, false, entry); this.dispatchEvent(e); } }; return { log: new Log() }; });