Home | History | Annotate | only in /external/chromium/chrome/browser/sync
Up to higher level directory
NameDateSize
abstract_profile_sync_service_test.cc10-Oct-20124K
abstract_profile_sync_service_test.h10-Oct-20121.9K
backend_migrator.cc10-Oct-20126.2K
backend_migrator.h10-Oct-20122.3K
backend_migrator_unittest.cc10-Oct-20129.9K
DEPS10-Oct-2012108
engine/10-Oct-2012
glue/10-Oct-2012
js_arg_list.cc10-Oct-20121.5K
js_arg_list.h10-Oct-20121.4K
js_arg_list_unittest.cc10-Oct-20121.6K
js_backend.h10-Oct-20121.2K
js_event_handler.h10-Oct-2012709
js_event_handler_list.cc10-Oct-20122.7K
js_event_handler_list.h10-Oct-20122.3K
js_event_handler_list_unittest.cc10-Oct-20124K
js_event_router.h10-Oct-20121.1K
js_frontend.h10-Oct-20121.2K
js_sync_manager_observer.cc10-Oct-20124.5K
js_sync_manager_observer.h10-Oct-20121.9K
js_sync_manager_observer_unittest.cc10-Oct-20129.7K
js_test_util.cc10-Oct-20121.9K
js_test_util.h10-Oct-20122.3K
notifier/10-Oct-2012
PRESUBMIT.py10-Oct-2012479
profile_sync_factory.h10-Oct-20125.6K
profile_sync_factory_impl.cc10-Oct-201213.5K
profile_sync_factory_impl.h10-Oct-20122.9K
profile_sync_factory_impl_unittest.cc10-Oct-20125.2K
profile_sync_factory_mock.cc10-Oct-20121.2K
profile_sync_factory_mock.h10-Oct-20123.6K
profile_sync_service.cc10-Oct-201243.9K
profile_sync_service.h10-Oct-201225.8K
profile_sync_service_autofill_unittest.cc10-Oct-201243.1K
profile_sync_service_bookmark_unittest.cc10-Oct-201248K
profile_sync_service_harness.cc10-Oct-201222K
profile_sync_service_harness.h10-Oct-20128.4K
profile_sync_service_mock.cc10-Oct-2012481
profile_sync_service_mock.h10-Oct-20122.7K
profile_sync_service_observer.h10-Oct-20121,006
profile_sync_service_password_unittest.cc10-Oct-201223.5K
profile_sync_service_preference_unittest.cc10-Oct-201219K
profile_sync_service_session_unittest.cc10-Oct-201216.9K
profile_sync_service_startup_unittest.cc10-Oct-201210.1K
profile_sync_service_typed_url_unittest.cc10-Oct-201221.8K
profile_sync_service_unittest.cc10-Oct-201213.7K
profile_sync_test_util.cc10-Oct-20122.5K
profile_sync_test_util.h10-Oct-20122.5K
protocol/10-Oct-2012
README.js10-Oct-20122.4K
resources/10-Oct-2012
sessions/10-Oct-2012
signin_manager.cc10-Oct-20125.8K
signin_manager.h10-Oct-20123.3K
signin_manager_unittest.cc10-Oct-20125.7K
sync_setup_flow.cc10-Oct-201215.2K
sync_setup_flow.h10-Oct-20126.3K
sync_setup_flow_handler.h10-Oct-20121.2K
sync_setup_wizard.cc10-Oct-20122.6K
sync_setup_wizard.h10-Oct-20123.5K
sync_setup_wizard_unittest.cc10-Oct-201219.8K
sync_ui_util.cc10-Oct-201217.6K
sync_ui_util.h10-Oct-20122.8K
sync_ui_util_mac.h10-Oct-2012922
sync_ui_util_mac.mm10-Oct-20122.4K
sync_ui_util_mac_unittest.mm10-Oct-20123.9K
sync_ui_util_unittest.cc10-Oct-20121.5K
syncable/10-Oct-2012
test_profile_sync_service.cc10-Oct-20128.8K
test_profile_sync_service.h10-Oct-20124.6K
tools/10-Oct-2012
unrecoverable_error_handler.h10-Oct-2012972
util/10-Oct-2012

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