blob: 675594a9b2a7e44b305c1409dc9fcced9ddd316f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
// Copyright 2014 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.
#ifndef CHROME_BROWSER_UI_WEBUI_SYNC_INTERNALS_MESSAGE_HANDLER_H_
#define CHROME_BROWSER_UI_WEBUI_SYNC_INTERNALS_MESSAGE_HANDLER_H_
#include <string>
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/memory/weak_ptr.h"
#include "base/scoped_observer.h"
#include "base/values.h"
#include "chrome/browser/sync/profile_sync_service_observer.h"
#include "chrome/browser/sync/protocol_event_observer.h"
#include "content/public/browser/web_ui_message_handler.h"
#include "sync/internal_api/public/sessions/type_debug_info_observer.h"
#include "sync/js/js_controller.h"
#include "sync/js/js_event_handler.h"
class ProfileSyncService;
// The implementation for the chrome://sync-internals page.
class SyncInternalsMessageHandler : public content::WebUIMessageHandler,
public syncer::JsEventHandler,
public ProfileSyncServiceObserver,
public browser_sync::ProtocolEventObserver,
public syncer::TypeDebugInfoObserver {
public:
SyncInternalsMessageHandler();
virtual ~SyncInternalsMessageHandler();
virtual void RegisterMessages() OVERRIDE;
// Sets up observers to receive events and forward them to the UI.
void HandleRegisterForEvents(const base::ListValue* args);
// Sets up observers to receive per-type counters and forward them to the UI.
void HandleRegisterForPerTypeCounters(const base::ListValue* args);
// Fires an event to send updated info back to the page.
void HandleRequestUpdatedAboutInfo(const base::ListValue* args);
// Fires and event to send the list of types back to the page.
void HandleRequestListOfTypes(const base::ListValue* args);
// Handler for getAllNodes message. Needs a |request_id| argument.
void HandleGetAllNodes(const base::ListValue* args);
// syncer::JsEventHandler implementation.
virtual void HandleJsEvent(
const std::string& name,
const syncer::JsEventDetails& details) OVERRIDE;
// Callback used in GetAllNodes.
void OnReceivedAllNodes(int request_id, scoped_ptr<base::ListValue> nodes);
// ProfileSyncServiceObserver implementation.
virtual void OnStateChanged() OVERRIDE;
// ProtocolEventObserver implementation.
virtual void OnProtocolEvent(const syncer::ProtocolEvent& e) OVERRIDE;
// TypeDebugInfoObserver implementation.
virtual void OnCommitCountersUpdated(
syncer::ModelType type,
const syncer::CommitCounters& counters) OVERRIDE;
virtual void OnUpdateCountersUpdated(
syncer::ModelType type,
const syncer::UpdateCounters& counters) OVERRIDE;
virtual void OnStatusCountersUpdated(
syncer::ModelType type,
const syncer::StatusCounters& counters) OVERRIDE;
// Helper to emit counter updates.
//
// Used in implementation of On*CounterUpdated methods. Emits the given
// dictionary value with additional data to specify the model type and
// counter type.
void EmitCounterUpdate(syncer::ModelType type,
const std::string& counter_type,
scoped_ptr<base::DictionaryValue> value);
private:
// Fetches updated aboutInfo and sends it to the page in the form of an
// onAboutInfoUpdated event.
void SendAboutInfo();
ProfileSyncService* GetProfileSyncService();
base::WeakPtr<syncer::JsController> js_controller_;
// A flag used to prevent double-registration with ProfileSyncService.
bool is_registered_;
// A flag used to prevent double-registration as TypeDebugInfoObserver with
// ProfileSyncService.
bool is_registered_for_counters_;
base::WeakPtrFactory<SyncInternalsMessageHandler> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(SyncInternalsMessageHandler);
};
#endif // CHROME_BROWSER_UI_WEBUI_SYNC_INTERNALS_MESSAGE_HANDLER_H_
|