Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(419)

Side by Side Diff: chrome/browser/resources/sync_internals/about.js

Issue 212603007: sync: Buffer Protocol Events for about:sync page (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 cr.define('chrome.sync.about_tab', function() { 5 cr.define('chrome.sync.about_tab', function() {
6 // Contains the latest snapshot of sync about info. 6 // Contains the latest snapshot of sync about info.
7 chrome.sync.aboutInfo = {}; 7 chrome.sync.aboutInfo = {};
8 8
9 function refreshAboutInfo(aboutInfo) { 9 function refreshAboutInfo(aboutInfo) {
10 chrome.sync.aboutInfo = aboutInfo; 10 chrome.sync.aboutInfo = aboutInfo;
11 var aboutInfoDiv = $('about-info'); 11 var aboutInfoDiv = $('about-info');
12 jstProcess(new JsEvalContext(aboutInfo), aboutInfoDiv); 12 jstProcess(new JsEvalContext(aboutInfo), aboutInfoDiv);
13 } 13 }
14 14
15 function onAboutInfoUpdatedEvent(e) { 15 function onAboutInfoUpdatedEvent(e) {
16 refreshAboutInfo(e.details); 16 refreshAboutInfo(e.details);
17 } 17 }
18 18
19 /** Container for accumulated sync protocol events. */ 19 /** Container for accumulated sync protocol events. */
20 var protocolEvents = []; 20 var protocolEvents = [];
21 21
22 /** We may receive re-delivered events. Keep a record of ones we've seen. */
James Hawkins 2014/03/27 21:01:25 Can we not fix the issue of re-delivered events?
rlarocque 2014/03/27 21:19:54 It gets ugly no matter how we handle it. Option #
23 var knownEventTimestamps = {};
24
22 /** 25 /**
23 * Callback for incoming protocol events. 26 * Callback for incoming protocol events.
24 * @param {Event} e The protocol event. 27 * @param {Event} e The protocol event.
25 */ 28 */
26 function onReceivedProtocolEvent(e) { 29 function onReceivedProtocolEvent(e) {
27 var details = e.details; 30 var details = e.details;
31
32 // Return early if we've seen this event before. Assumes that timestamps
33 // are sufficiently high resolution to uniquely identify an event.
34 if (knownEventTimestamps.hasOwnProperty(details.time)) {
35 return;
36 }
37
38 knownEventTimestamps[details.time] = true;
28 protocolEvents.push(details); 39 protocolEvents.push(details);
29 40
30 var context = new JsEvalContext({ events: protocolEvents }); 41 var context = new JsEvalContext({ events: protocolEvents });
31 jstProcess(context, $('traffic-event-container')); 42 jstProcess(context, $('traffic-event-container'));
32 } 43 }
33 44
34 /** 45 /**
35 * Initializes state and callbacks for the protocol event log UI. 46 * Initializes state and callbacks for the protocol event log UI.
36 */ 47 */
37 function initProtocolEventLog() { 48 function initProtocolEventLog() {
38 chrome.sync.events.addEventListener( 49 chrome.sync.events.addEventListener(
39 'onProtocolEvent', onReceivedProtocolEvent); 50 'onProtocolEvent', onReceivedProtocolEvent);
40 51
41 // Make the prototype jscontent element disappear. 52 // Make the prototype jscontent element disappear.
42 jstProcess({}, $('traffic-event-container')); 53 jstProcess({}, $('traffic-event-container'));
43 } 54 }
44 55
45 /** 56 /**
46 * Toggles the given traffic event entry div's "expanded" state. 57 * Initializes listeners for status dump and import UI.
47 * @param {HTMLElement} element the element to toggle.
48 */ 58 */
49 function expandListener(element) { 59 function initStatusDumpButton() {
50 element.target.classList.toggle('traffic-event-entry-expanded');
51 }
52
53 /**
54 * Attaches a listener to the given traffic event entry div.
55 * @param {HTMLElement} element the element to attach the listener to.
56 */
57 function addExpandListener(element) {
58 element.addEventListener('click', expandListener, false);
59 }
60
61 function onLoad() {
62 $('status-data').hidden = true; 60 $('status-data').hidden = true;
63 61
64 chrome.sync.events.addEventListener(
65 'onAboutInfoUpdated',
66 onAboutInfoUpdatedEvent);
67 chrome.sync.requestUpdatedAboutInfo();
68
69 var dumpStatusButton = $('dump-status'); 62 var dumpStatusButton = $('dump-status');
70 dumpStatusButton.addEventListener('click', function(event) { 63 dumpStatusButton.addEventListener('click', function(event) {
71 var aboutInfo = chrome.sync.aboutInfo; 64 var aboutInfo = chrome.sync.aboutInfo;
72 if (!$('include-ids').checked) { 65 if (!$('include-ids').checked) {
73 aboutInfo.details = chrome.sync.aboutInfo.details.filter(function(el) { 66 aboutInfo.details = chrome.sync.aboutInfo.details.filter(function(el) {
74 return !el.is_sensitive; 67 return !el.is_sensitive;
75 }); 68 });
76 } 69 }
77 var data = ''; 70 var data = '';
78 data += new Date().toString() + '\n'; 71 data += new Date().toString() + '\n';
(...skipping 25 matching lines...) Expand all
104 data = data.substr(firstBrace); 97 data = data.substr(firstBrace);
105 98
106 // Remove listeners to prevent sync events from overwriting imported data. 99 // Remove listeners to prevent sync events from overwriting imported data.
107 chrome.sync.events.removeEventListener( 100 chrome.sync.events.removeEventListener(
108 'onAboutInfoUpdated', 101 'onAboutInfoUpdated',
109 onAboutInfoUpdatedEvent); 102 onAboutInfoUpdatedEvent);
110 103
111 var aboutInfo = JSON.parse(data); 104 var aboutInfo = JSON.parse(data);
112 refreshAboutInfo(aboutInfo); 105 refreshAboutInfo(aboutInfo);
113 }); 106 });
107 }
114 108
109 /**
110 * Toggles the given traffic event entry div's "expanded" state.
111 * @param {HTMLElement} element the element to toggle.
112 */
113 function expandListener(element) {
114 element.target.classList.toggle('traffic-event-entry-expanded');
115 }
116
117 /**
118 * Attaches a listener to the given traffic event entry div.
119 * @param {HTMLElement} element the element to attach the listener to.
120 */
121 function addExpandListener(element) {
James Hawkins 2014/03/27 21:01:25 Who calls this method?
rlarocque 2014/03/27 21:19:54 It's used to attach listeners to the elements crea
122 element.addEventListener('click', expandListener, false);
123 }
124
125 function onLoad() {
126 initStatusDumpButton();
115 initProtocolEventLog(); 127 initProtocolEventLog();
128
129 chrome.sync.events.addEventListener(
130 'onAboutInfoUpdated',
131 onAboutInfoUpdatedEvent);
132
133 // Register to receive a stream of event notifications.
134 chrome.sync.registerForEvents();
135
136 // Request an about info update event to initialize the page.
137 chrome.sync.requestUpdatedAboutInfo();
116 } 138 }
117 139
118 return { 140 return {
119 onLoad: onLoad, 141 onLoad: onLoad,
120 addExpandListener: addExpandListener 142 addExpandListener: addExpandListener
121 }; 143 };
122 }); 144 });
123 145
124 document.addEventListener( 146 document.addEventListener(
125 'DOMContentLoaded', chrome.sync.about_tab.onLoad, false); 147 'DOMContentLoaded', chrome.sync.about_tab.onLoad, false);
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/resources/sync_internals/chrome_sync.js » ('j') | sync/internal_api/protocol_event_buffer.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698