• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// require: cr.js
6// require: cr/event_target.js
7
8/**
9 * @fileoverview This creates a log object which listens to and
10 * records all sync events.
11 */
12
13cr.define('chrome.sync', function() {
14  /**
15   * Creates a new log object which then immediately starts recording
16   * sync events.  Recorded entries are available in the 'entries'
17   * property and there is an 'append' event which can be listened to.
18   * @constructor
19   * @extends {cr.EventTarget}
20   */
21  var Log = function() {
22    var self = this;
23
24    // Service
25
26    chrome.sync.onSyncServiceStateChanged.addListener(function () {
27      self.log_('service', 'onSyncServiceStateChanged', {});
28    });
29
30    // Notifier
31
32    chrome.sync.onSyncNotificationStateChange.addListener(
33      function (notificationsEnabled) {
34        self.log_('notifier', 'onSyncNotificationStateChange', {
35                    notificationsEnabled: notificationsEnabled
36                  });
37      });
38
39    chrome.sync.onSyncIncomingNotification.addListener(function (changedTypes) {
40      self.log_('notifier', 'onSyncIncomingNotification', {
41                  changedTypes: changedTypes
42                });
43    });
44
45    // Manager
46
47    chrome.sync.onChangesApplied.addListener(function (modelType, changes) {
48      self.log_('manager', 'onChangesApplied', {
49                  modelType: modelType,
50                  changes: changes
51                });
52    });
53
54    chrome.sync.onChangesComplete.addListener(function (modelType) {
55      self.log_('manager', 'onChangesComplete', {
56                  modelType: modelType
57                });
58    });
59
60    chrome.sync.onSyncCycleCompleted.addListener(function (snapshot) {
61      self.log_('manager', 'onSyncCycleCompleted', {
62                  snapshot: snapshot
63                });
64    });
65
66    chrome.sync.onAuthError.addListener(function (authError) {
67      self.log_('manager', 'onAuthError', {
68                  authError: authError
69                });
70    });
71
72    chrome.sync.onUpdatedToken.addListener(function (token) {
73      self.log_('manager', 'onUpdatedToken', {
74                  token: token
75                });
76    });
77
78    chrome.sync.onPassphraseRequired.addListener(function (forDecryption) {
79      self.log_('manager', 'onPassphraseRequired', {
80                  forDecryption: forDecryption
81                });
82    });
83
84    chrome.sync.onPassphraseAccepted.addListener(function (bootstrapToken) {
85      self.log_('manager', 'onPassphraseAccepted', {
86                  bootstrapToken: bootstrapToken
87                });
88    });
89
90    chrome.sync.onEncryptionComplete.addListener(function (encrypted_types) {
91      self.log_('manager', 'onEncryptionComplete', {
92                  encrypted_types: encrypted_types
93                });
94    });
95
96    chrome.sync.onMigrationNeededForTypes.addListener(function (model_types) {
97      self.log_('manager', 'onMigrationNeededForTypes', {
98                  model_types: model_types
99                });
100    });
101
102    chrome.sync.onInitializationComplete.addListener(function () {
103      self.log_('manager', 'onInitializationComplete', {});
104    });
105
106    chrome.sync.onPaused.addListener(function () {
107      self.log_('manager', 'onPaused', {});
108    });
109
110    chrome.sync.onResumed.addListener(function () {
111      self.log_('manager', 'onResumed', {});
112    });
113
114    chrome.sync.onStopSyncingPermanently.addListener(function () {
115      self.log_('manager', 'onStopSyncingPermanently', {});
116    });
117
118    chrome.sync.onClearServerDataSucceeded.addListener(function () {
119      self.log_('manager', 'onClearServerDataSucceeded', {});
120    });
121
122    chrome.sync.onClearServerDataFailed.addListener(function () {
123      self.log_('manager', 'onClearServerDataFailed', {});
124    });
125  };
126
127  Log.prototype = {
128    __proto__: cr.EventTarget.prototype,
129
130    /**
131     * The recorded log entries.
132     * @type {array}
133     */
134    entries: [],
135
136    /**
137     * Records a single event with the given parameters and fires the
138     * 'append' event with the newly-created event as the 'detail'
139     * field of a custom event.
140     * @param {string} submodule The sync submodule for the event.
141     * @param {string} event The name of the event.
142     * @param {dictionary} details A dictionary of event-specific details.
143     */
144    log_: function(submodule, event, details) {
145      var entry = {
146        submodule: submodule,
147        event: event,
148        date: new Date(),
149        details: details
150      };
151      this.entries.push(entry);
152      // Fire append event.
153      var e = cr.doc.createEvent('CustomEvent');
154      e.initCustomEvent('append', false, false, entry);
155      this.dispatchEvent(e);
156    }
157  };
158
159  return {
160    log: new Log()
161  };
162});
163