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

Side by Side Diff: chrome/browser/ui/webui/sync_internals_message_handler.cc

Issue 290023003: sync: Add UI code for per type debug counters (Closed) Base URL: https://chromium.googlesource.com/chromium/src
Patch Set: Update comment and rebase Created 6 years, 6 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 #include "chrome/browser/ui/webui/sync_internals_message_handler.h" 5 #include "chrome/browser/ui/webui/sync_internals_message_handler.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "chrome/browser/profiles/profile.h" 10 #include "chrome/browser/profiles/profile.h"
11 #include "chrome/browser/sync/about_sync_util.h" 11 #include "chrome/browser/sync/about_sync_util.h"
12 #include "chrome/browser/sync/profile_sync_service.h" 12 #include "chrome/browser/sync/profile_sync_service.h"
13 #include "chrome/browser/sync/profile_sync_service_factory.h" 13 #include "chrome/browser/sync/profile_sync_service_factory.h"
14 #include "content/public/browser/browser_thread.h" 14 #include "content/public/browser/browser_thread.h"
15 #include "content/public/browser/web_ui.h" 15 #include "content/public/browser/web_ui.h"
16 #include "sync/internal_api/public/events/protocol_event.h" 16 #include "sync/internal_api/public/events/protocol_event.h"
17 #include "sync/internal_api/public/sessions/commit_counters.h"
18 #include "sync/internal_api/public/sessions/status_counters.h"
19 #include "sync/internal_api/public/sessions/update_counters.h"
17 #include "sync/internal_api/public/util/weak_handle.h" 20 #include "sync/internal_api/public/util/weak_handle.h"
18 #include "sync/js/js_event_details.h" 21 #include "sync/js/js_event_details.h"
19 22
20 using syncer::JsEventDetails; 23 using syncer::JsEventDetails;
21 using syncer::ModelTypeSet; 24 using syncer::ModelTypeSet;
22 using syncer::WeakHandle; 25 using syncer::WeakHandle;
23 26
24 SyncInternalsMessageHandler::SyncInternalsMessageHandler() 27 SyncInternalsMessageHandler::SyncInternalsMessageHandler()
25 : is_registered_(false), 28 : is_registered_(false),
26 weak_ptr_factory_(this) {} 29 is_registered_for_counters_(false),
30 weak_ptr_factory_(this) {
31 }
27 32
28 SyncInternalsMessageHandler::~SyncInternalsMessageHandler() { 33 SyncInternalsMessageHandler::~SyncInternalsMessageHandler() {
29 if (js_controller_) 34 if (js_controller_)
30 js_controller_->RemoveJsEventHandler(this); 35 js_controller_->RemoveJsEventHandler(this);
31 36
32 ProfileSyncService* service = GetProfileSyncService(); 37 ProfileSyncService* service = GetProfileSyncService();
33 if (service && service->HasObserver(this)) { 38 if (service && service->HasObserver(this)) {
34 service->RemoveObserver(this); 39 service->RemoveObserver(this);
35 service->RemoveProtocolEventObserver(this); 40 service->RemoveProtocolEventObserver(this);
36 } 41 }
42
43 if (service && is_registered_for_counters_) {
44 service->RemoveTypeDebugInfoObserver(this);
45 }
37 } 46 }
38 47
39 void SyncInternalsMessageHandler::RegisterMessages() { 48 void SyncInternalsMessageHandler::RegisterMessages() {
40 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 49 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
41 50
42 web_ui()->RegisterMessageCallback( 51 web_ui()->RegisterMessageCallback(
43 "registerForEvents", 52 "registerForEvents",
44 base::Bind(&SyncInternalsMessageHandler::HandleRegisterForEvents, 53 base::Bind(&SyncInternalsMessageHandler::HandleRegisterForEvents,
45 base::Unretained(this))); 54 base::Unretained(this)));
46 55
47 web_ui()->RegisterMessageCallback( 56 web_ui()->RegisterMessageCallback(
57 "registerForPerTypeCounters",
58 base::Bind(&SyncInternalsMessageHandler::HandleRegisterForPerTypeCounters,
59 base::Unretained(this)));
60
61 web_ui()->RegisterMessageCallback(
48 "requestUpdatedAboutInfo", 62 "requestUpdatedAboutInfo",
49 base::Bind(&SyncInternalsMessageHandler::HandleRequestUpdatedAboutInfo, 63 base::Bind(&SyncInternalsMessageHandler::HandleRequestUpdatedAboutInfo,
50 base::Unretained(this))); 64 base::Unretained(this)));
51 65
52 web_ui()->RegisterMessageCallback( 66 web_ui()->RegisterMessageCallback(
53 "requestListOfTypes", 67 "requestListOfTypes",
54 base::Bind(&SyncInternalsMessageHandler::HandleRequestListOfTypes, 68 base::Bind(&SyncInternalsMessageHandler::HandleRequestListOfTypes,
55 base::Unretained(this))); 69 base::Unretained(this)));
56 70
57 web_ui()->RegisterMessageCallback( 71 web_ui()->RegisterMessageCallback(
(...skipping 12 matching lines...) Expand all
70 ProfileSyncService* service = GetProfileSyncService(); 84 ProfileSyncService* service = GetProfileSyncService();
71 if (service && !is_registered_) { 85 if (service && !is_registered_) {
72 service->AddObserver(this); 86 service->AddObserver(this);
73 service->AddProtocolEventObserver(this); 87 service->AddProtocolEventObserver(this);
74 js_controller_ = service->GetJsController(); 88 js_controller_ = service->GetJsController();
75 js_controller_->AddJsEventHandler(this); 89 js_controller_->AddJsEventHandler(this);
76 is_registered_ = true; 90 is_registered_ = true;
77 } 91 }
78 } 92 }
79 93
94 void SyncInternalsMessageHandler::HandleRegisterForPerTypeCounters(
95 const base::ListValue* args) {
96 DCHECK(args->empty());
97
98 ProfileSyncService* service = GetProfileSyncService();
99 if (service && !is_registered_for_counters_) {
100 service->AddTypeDebugInfoObserver(this);
101 is_registered_for_counters_ = true;
102 } else {
103 // Re-register to ensure counters get re-emitted.
104 service->RemoveTypeDebugInfoObserver(this);
105 service->AddTypeDebugInfoObserver(this);
106 }
107 }
108
80 void SyncInternalsMessageHandler::HandleRequestUpdatedAboutInfo( 109 void SyncInternalsMessageHandler::HandleRequestUpdatedAboutInfo(
81 const base::ListValue* args) { 110 const base::ListValue* args) {
82 DCHECK(args->empty()); 111 DCHECK(args->empty());
83 SendAboutInfo(); 112 SendAboutInfo();
84 } 113 }
85 114
86 void SyncInternalsMessageHandler::HandleRequestListOfTypes( 115 void SyncInternalsMessageHandler::HandleRequestListOfTypes(
87 const base::ListValue* args) { 116 const base::ListValue* args) {
88 DCHECK(args->empty()); 117 DCHECK(args->empty());
89 base::DictionaryValue event_details; 118 base::DictionaryValue event_details;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 void SyncInternalsMessageHandler::OnProtocolEvent( 159 void SyncInternalsMessageHandler::OnProtocolEvent(
131 const syncer::ProtocolEvent& event) { 160 const syncer::ProtocolEvent& event) {
132 scoped_ptr<base::DictionaryValue> value( 161 scoped_ptr<base::DictionaryValue> value(
133 syncer::ProtocolEvent::ToValue(event)); 162 syncer::ProtocolEvent::ToValue(event));
134 web_ui()->CallJavascriptFunction( 163 web_ui()->CallJavascriptFunction(
135 "chrome.sync.dispatchEvent", 164 "chrome.sync.dispatchEvent",
136 base::StringValue("onProtocolEvent"), 165 base::StringValue("onProtocolEvent"),
137 *value); 166 *value);
138 } 167 }
139 168
169 void SyncInternalsMessageHandler::OnCommitCountersUpdated(
170 syncer::ModelType type,
171 const syncer::CommitCounters& counters) {
172 EmitCounterUpdate(type, "commit", counters.ToValue());
173 }
174
175 void SyncInternalsMessageHandler::OnUpdateCountersUpdated(
176 syncer::ModelType type,
177 const syncer::UpdateCounters& counters) {
178 EmitCounterUpdate(type, "update", counters.ToValue());
179 }
180
181 void SyncInternalsMessageHandler::OnStatusCountersUpdated(
182 syncer::ModelType type,
183 const syncer::StatusCounters& counters) {
184 EmitCounterUpdate(type, "status", counters.ToValue());
185 }
186
187 void SyncInternalsMessageHandler::EmitCounterUpdate(
188 syncer::ModelType type,
189 const std::string& counter_type,
190 scoped_ptr<base::DictionaryValue> value) {
191 scoped_ptr<base::DictionaryValue> details(new base::DictionaryValue());
192 details->SetString("modelType", ModelTypeToString(type));
193 details->SetString("counterType", counter_type);
194 details->Set("counters", value.release());
195 web_ui()->CallJavascriptFunction("chrome.sync.dispatchEvent",
196 base::StringValue("onCountersUpdated"),
197 *details);
198 }
199
140 void SyncInternalsMessageHandler::HandleJsEvent( 200 void SyncInternalsMessageHandler::HandleJsEvent(
141 const std::string& name, 201 const std::string& name,
142 const JsEventDetails& details) { 202 const JsEventDetails& details) {
143 DVLOG(1) << "Handling event: " << name 203 DVLOG(1) << "Handling event: " << name
144 << " with details " << details.ToString(); 204 << " with details " << details.ToString();
145 web_ui()->CallJavascriptFunction("chrome.sync.dispatchEvent", 205 web_ui()->CallJavascriptFunction("chrome.sync.dispatchEvent",
146 base::StringValue(name), 206 base::StringValue(name),
147 details.Get()); 207 details.Get());
148 } 208 }
149 209
150 void SyncInternalsMessageHandler::SendAboutInfo() { 210 void SyncInternalsMessageHandler::SendAboutInfo() {
151 scoped_ptr<base::DictionaryValue> value = 211 scoped_ptr<base::DictionaryValue> value =
152 sync_ui_util::ConstructAboutInformation(GetProfileSyncService()); 212 sync_ui_util::ConstructAboutInformation(GetProfileSyncService());
153 web_ui()->CallJavascriptFunction( 213 web_ui()->CallJavascriptFunction(
154 "chrome.sync.dispatchEvent", 214 "chrome.sync.dispatchEvent",
155 base::StringValue("onAboutInfoUpdated"), 215 base::StringValue("onAboutInfoUpdated"),
156 *value); 216 *value);
157 } 217 }
158 218
159 // Gets the ProfileSyncService of the underlying original profile. 219 // Gets the ProfileSyncService of the underlying original profile.
160 // May return NULL (e.g., if sync is disabled on the command line). 220 // May return NULL (e.g., if sync is disabled on the command line).
161 ProfileSyncService* SyncInternalsMessageHandler::GetProfileSyncService() { 221 ProfileSyncService* SyncInternalsMessageHandler::GetProfileSyncService() {
162 Profile* profile = Profile::FromWebUI(web_ui()); 222 Profile* profile = Profile::FromWebUI(web_ui());
163 ProfileSyncServiceFactory* factory = ProfileSyncServiceFactory::GetInstance(); 223 ProfileSyncServiceFactory* factory = ProfileSyncServiceFactory::GetInstance();
164 return factory->GetForProfile(profile->GetOriginalProfile()); 224 return factory->GetForProfile(profile->GetOriginalProfile());
165 } 225 }
166
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/sync_internals_message_handler.h ('k') | chrome/browser/ui/webui/sync_internals_ui.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698