We currently have a cyclic dependency between SyncClient and SyncService, each having references to each other and the implementation following a weird initialization sequence, which happens to work because some code is executed lazily (e.g. GetSyncableServiceForType()).
Canonical "clients" in chromium are used to bundle and inject dependencies to a component (usually KeyedService, in this case ProfileSyncService), where the service itself should not be exposed. Contradicting this suggests a layering violation and requires ugly hacks.
Comment 1 by mastiz@chromium.org
, Sep 12