• Home
Name
Date
Size
#Lines
LOC

..--

engine/03-May-2024-22,72316,431

glue/03-May-2024-22,04915,783

notifier/03-May-2024-3,6022,549

protocol/03-May-2024-2,1261,693

resources/03-May-2024-1,9641,735

sessions/03-May-2024-2,8942,047

syncable/03-May-2024-10,2877,828

tools/03-May-2024-157124

util/03-May-2024-2,8231,996

DEPSD03-May-2024108 64

PRESUBMIT.pyD03-May-2024479 146

README.jsD03-May-20242.4 KiB5744

abstract_profile_sync_service_test.ccD03-May-20244 KiB123104

abstract_profile_sync_service_test.hD03-May-20241.9 KiB7252

backend_migrator.ccD03-May-20246.2 KiB177127

backend_migrator.hD03-May-20242.3 KiB7241

backend_migrator_unittest.ccD03-May-20249.9 KiB268208

js_arg_list.ccD03-May-20241.5 KiB5635

js_arg_list.hD03-May-20241.4 KiB5632

js_arg_list_unittest.ccD03-May-20241.6 KiB6444

js_backend.hD03-May-20241.2 KiB4521

js_event_handler.hD03-May-2024709 3115

js_event_handler_list.ccD03-May-20242.7 KiB9571

js_event_handler_list.hD03-May-20242.3 KiB7743

js_event_handler_list_unittest.ccD03-May-20244 KiB11567

js_event_router.hD03-May-20241.1 KiB3816

js_frontend.hD03-May-20241.2 KiB4419

js_sync_manager_observer.ccD03-May-20244.5 KiB130104

js_sync_manager_observer.hD03-May-20241.9 KiB5738

js_sync_manager_observer_unittest.ccD03-May-20249.7 KiB281221

js_test_util.ccD03-May-20241.9 KiB7746

js_test_util.hD03-May-20242.3 KiB8353

profile_sync_factory.hD03-May-20245.6 KiB14175

profile_sync_factory_impl.ccD03-May-202413.5 KiB317265

profile_sync_factory_impl.hD03-May-20242.9 KiB8459

profile_sync_factory_impl_unittest.ccD03-May-20245.2 KiB140110

profile_sync_factory_mock.ccD03-May-20241.2 KiB3525

profile_sync_factory_mock.hD03-May-20243.6 KiB8270

profile_sync_service.ccD03-May-202443.9 KiB1,305979

profile_sync_service.hD03-May-202425.8 KiB651273

profile_sync_service_autofill_unittest.ccD03-May-202443.1 KiB1,099914

profile_sync_service_bookmark_unittest.ccD03-May-202448 KiB1,363945

profile_sync_service_harness.ccD03-May-202422 KiB634514

profile_sync_service_harness.hD03-May-20248.4 KiB22583

profile_sync_service_mock.ccD03-May-2024481 158

profile_sync_service_mock.hD03-May-20242.7 KiB6653

profile_sync_service_observer.hD03-May-20241,006 2510

profile_sync_service_password_unittest.ccD03-May-202423.5 KiB628546

profile_sync_service_preference_unittest.ccD03-May-202419 KiB501408

profile_sync_service_session_unittest.ccD03-May-202416.9 KiB434361

profile_sync_service_startup_unittest.ccD03-May-202410.1 KiB267194

profile_sync_service_typed_url_unittest.ccD03-May-202421.8 KiB546468

profile_sync_service_unittest.ccD03-May-202413.7 KiB382265

profile_sync_test_util.ccD03-May-20242.5 KiB7960

profile_sync_test_util.hD03-May-20242.5 KiB8965

signin_manager.ccD03-May-20245.8 KiB162122

signin_manager.hD03-May-20243.3 KiB9348

signin_manager_unittest.ccD03-May-20245.7 KiB167122

sync_setup_flow.ccD03-May-202415.2 KiB411340

sync_setup_flow.hD03-May-20246.3 KiB17298

sync_setup_flow_handler.hD03-May-20241.2 KiB3623

sync_setup_wizard.ccD03-May-20242.6 KiB9067

sync_setup_wizard.hD03-May-20243.5 KiB9738

sync_setup_wizard_unittest.ccD03-May-202419.8 KiB537434

sync_ui_util.ccD03-May-202417.6 KiB447371

sync_ui_util.hD03-May-20242.8 KiB7440

sync_ui_util_mac.hD03-May-2024922 3012

sync_ui_util_mac.mmD03-May-20242.4 KiB7262

sync_ui_util_mac_unittest.mmD03-May-20243.9 KiB10988

sync_ui_util_unittest.ccD03-May-20241.5 KiB4328

test_profile_sync_service.ccD03-May-20248.8 KiB263208

test_profile_sync_service.hD03-May-20244.6 KiB14078

unrecoverable_error_handler.hD03-May-2024972 3015

README.js

1 Overview of chrome://sync-internals
2 -----------------------------------
3 
4 This note explains how chrome://sync-internals (also known as
5 about:sync) interacts with the sync service/backend.
6 
7 Basically, chrome://sync-internals sends asynchronous messages to the
8 sync backend and the sync backend asynchronously raises events to
9 chrome://sync-internals, either when replying to messages or when
10 something interesting happens.
11 
12 Both messages and events have a name and a list of arguments, the
13 latter of which is represented by a JsArgList (js_arg_list.h) object,
14 which is basically a wrapper around an immutable ListValue.
15 
16 TODO(akalin): Move all the js_* files into a js/ subdirectory.
17 
18 Message/event flow
19 ------------------
20 
21 chrome://sync-internals is represented by SyncInternalsUI
22 (chrome/browser/web_ui/sync_internals_ui.h).  SyncInternalsUI
23 interacts with the sync service via a JsFrontend (js_frontend.h)
24 object, which has a ProcessMessage() method.  The JsFrontend can
25 handle some messages itself, but it can also delegate the rest to a
26 JsBackend instance (js_backend.h), which also has a ProcessMessage()
27 method.  A JsBackend can in turn handle some messages itself and
28 delegate to other JsBackend instances.
29 
30 Essentially, there is a tree with a JsFrontend as the root and
31 JsBackend as non-root internal nodes and leaf nodes (although
32 currently, the tree is more like a simple list).  The sets of messages
33 handled by the JsBackends and the JsFrontend are disjoint, which means
34 that at most one node handles a given message type.  Also, the
35 JsBackends may live on different threads, but JsArgList is thread-safe
36 so that's okay.
37 
38 SyncInternalsUI is a JsEventHandler (js_event_handler.h), which means
39 that it has a HandleJsEvent() method, but JsBackends cannot easily
40 access those objects.  Instead, each JsBackend keeps track of its
41 parent router, which is a JsEventRouter object (js_event_router.h).
42 Basically, a JsEventRouter is another JsBackend object or a JsFrontend
43 object.  So an event travels up through the JsEventRouter until it
44 reaches the JsFrontend, which knows about the existing JsEventHandlers
45 (via AddHandler()/RemoveHandler()) and so can delegate to the right
46 one.
47 
48 A diagram of the flow of a message and its reply:
49 
50 msg(args) -> F -> B -> B -> B
51              |    |    |
52         H <- R <- R <- R <- reply-event(args)
53 
54 F = JsFrontend, B = JsBackend, R = JsEventRouter, H = JsEventHandler
55 
56 Non-reply events are percolated up similarly.
57