// 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;
// Service
chrome.sync.onSyncServiceStateChanged.addListener(function () {
self.log_('service', 'onSyncServiceStateChanged', {});
});
// Notifier
chrome.sync.onSyncNotificationStateChange.addListener(
function (notificationsEnabled) {
self.log_('notifier', 'onSyncNotificationStateChange', {
notificationsEnabled: notificationsEnabled
});
});
chrome.sync.onSyncIncomingNotification.addListener(function (changedTypes) {
self.log_('notifier', 'onSyncIncomingNotification', {
changedTypes: changedTypes
});
});
// Manager
chrome.sync.onChangesApplied.addListener(function (modelType, changes) {
self.log_('manager', 'onChangesApplied', {
modelType: modelType,
changes: changes
});
});
chrome.sync.onChangesComplete.addListener(function (modelType) {
self.log_('manager', 'onChangesComplete', {
modelType: modelType
});
});
chrome.sync.onSyncCycleCompleted.addListener(function (snapshot) {
self.log_('manager', 'onSyncCycleCompleted', {
snapshot: snapshot
});
});
chrome.sync.onAuthError.addListener(function (authError) {
self.log_('manager', 'onAuthError', {
authError: authError
});
});
chrome.sync.onUpdatedToken.addListener(function (token) {
self.log_('manager', 'onUpdatedToken', {
token: token
});
});
chrome.sync.onPassphraseRequired.addListener(function (forDecryption) {
self.log_('manager', 'onPassphraseRequired', {
forDecryption: forDecryption
});
});
chrome.sync.onPassphraseAccepted.addListener(function (bootstrapToken) {
self.log_('manager', 'onPassphraseAccepted', {
bootstrapToken: bootstrapToken
});
});
chrome.sync.onEncryptionComplete.addListener(function (encrypted_types) {
self.log_('manager', 'onEncryptionComplete', {
encrypted_types: encrypted_types
});
});
chrome.sync.onMigrationNeededForTypes.addListener(function (model_types) {
self.log_('manager', 'onMigrationNeededForTypes', {
model_types: model_types
});
});
chrome.sync.onInitializationComplete.addListener(function () {
self.log_('manager', 'onInitializationComplete', {});
});
chrome.sync.onPaused.addListener(function () {
self.log_('manager', 'onPaused', {});
});
chrome.sync.onResumed.addListener(function () {
self.log_('manager', 'onResumed', {});
});
chrome.sync.onStopSyncingPermanently.addListener(function () {
self.log_('manager', 'onStopSyncingPermanently', {});
});
chrome.sync.onClearServerDataSucceeded.addListener(function () {
self.log_('manager', 'onClearServerDataSucceeded', {});
});
chrome.sync.onClearServerDataFailed.addListener(function () {
self.log_('manager', 'onClearServerDataFailed', {});
});
};
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()
};
});