diff options
Diffstat (limited to 'chrome/browser/sync/js_sync_manager_observer.cc')
-rw-r--r-- | chrome/browser/sync/js_sync_manager_observer.cc | 100 |
1 files changed, 76 insertions, 24 deletions
diff --git a/chrome/browser/sync/js_sync_manager_observer.cc b/chrome/browser/sync/js_sync_manager_observer.cc index 7faf4ec..4c2ff6a 100644 --- a/chrome/browser/sync/js_sync_manager_observer.cc +++ b/chrome/browser/sync/js_sync_manager_observer.cc @@ -7,27 +7,33 @@ #include <cstddef> #include "base/logging.h" +#include "base/tracked.h" #include "base/values.h" #include "chrome/browser/sync/js_arg_list.h" #include "chrome/browser/sync/js_event_details.h" -#include "chrome/browser/sync/js_event_router.h" +#include "chrome/browser/sync/js_event_handler.h" #include "chrome/browser/sync/sessions/session_state.h" #include "chrome/browser/sync/syncable/model_type.h" namespace browser_sync { -JsSyncManagerObserver::JsSyncManagerObserver(JsEventRouter* parent_router) - : parent_router_(parent_router) { - DCHECK(parent_router_); -} +JsSyncManagerObserver::JsSyncManagerObserver() {} JsSyncManagerObserver::~JsSyncManagerObserver() {} +void JsSyncManagerObserver::SetJsEventHandler( + const WeakHandle<JsEventHandler>& event_handler) { + event_handler_ = event_handler; +} + void JsSyncManagerObserver::OnChangesApplied( syncable::ModelType model_type, const sync_api::BaseTransaction* trans, const sync_api::SyncManager::ChangeRecord* changes, int change_count) { + if (!event_handler_.IsInitialized()) { + return; + } DictionaryValue details; details.SetString("modelType", syncable::ModelTypeToString(model_type)); ListValue* change_values = new ListValue(); @@ -35,85 +41,131 @@ void JsSyncManagerObserver::OnChangesApplied( for (int i = 0; i < change_count; ++i) { change_values->Append(changes[i].ToValue(trans)); } - parent_router_->RouteJsEvent("onChangesApplied", JsEventDetails(&details)); + HandleJsEvent(FROM_HERE, "onChangesApplied", JsEventDetails(&details)); } void JsSyncManagerObserver::OnChangesComplete( syncable::ModelType model_type) { + if (!event_handler_.IsInitialized()) { + return; + } DictionaryValue details; details.SetString("modelType", syncable::ModelTypeToString(model_type)); - parent_router_->RouteJsEvent("onChangesComplete", JsEventDetails(&details)); + HandleJsEvent(FROM_HERE, "onChangesComplete", JsEventDetails(&details)); } void JsSyncManagerObserver::OnSyncCycleCompleted( const sessions::SyncSessionSnapshot* snapshot) { + if (!event_handler_.IsInitialized()) { + return; + } DictionaryValue details; details.Set("snapshot", snapshot->ToValue()); - parent_router_->RouteJsEvent("onSyncCycleCompleted", - JsEventDetails(&details)); + HandleJsEvent(FROM_HERE, "onSyncCycleCompleted", JsEventDetails(&details)); } void JsSyncManagerObserver::OnAuthError( const GoogleServiceAuthError& auth_error) { + if (!event_handler_.IsInitialized()) { + return; + } DictionaryValue details; details.Set("authError", auth_error.ToValue()); - parent_router_->RouteJsEvent("onAuthError", JsEventDetails(&details)); + HandleJsEvent(FROM_HERE, "onAuthError", JsEventDetails(&details)); } void JsSyncManagerObserver::OnUpdatedToken(const std::string& token) { + if (!event_handler_.IsInitialized()) { + return; + } DictionaryValue details; details.SetString("token", "<redacted>"); - parent_router_->RouteJsEvent("onUpdatedToken", JsEventDetails(&details)); + HandleJsEvent(FROM_HERE, "onUpdatedToken", JsEventDetails(&details)); } void JsSyncManagerObserver::OnPassphraseRequired( sync_api::PassphraseRequiredReason reason) { + if (!event_handler_.IsInitialized()) { + return; + } DictionaryValue details; details.SetString("reason", sync_api::PassphraseRequiredReasonToString(reason)); - parent_router_->RouteJsEvent("onPassphraseRequired", - JsEventDetails(&details)); + HandleJsEvent(FROM_HERE, "onPassphraseRequired", JsEventDetails(&details)); } void JsSyncManagerObserver::OnPassphraseAccepted( const std::string& bootstrap_token) { + if (!event_handler_.IsInitialized()) { + return; + } DictionaryValue details; details.SetString("bootstrapToken", "<redacted>"); - parent_router_->RouteJsEvent("onPassphraseAccepted", - JsEventDetails(&details)); + HandleJsEvent(FROM_HERE, "onPassphraseAccepted", JsEventDetails(&details)); } void JsSyncManagerObserver::OnEncryptionComplete( const syncable::ModelTypeSet& encrypted_types) { + if (!event_handler_.IsInitialized()) { + return; + } DictionaryValue details; details.Set("encryptedTypes", syncable::ModelTypeSetToValue(encrypted_types)); - parent_router_->RouteJsEvent("onEncryptionComplete", - JsEventDetails(&details)); + HandleJsEvent(FROM_HERE, "onEncryptionComplete", JsEventDetails(&details)); } void JsSyncManagerObserver::OnMigrationNeededForTypes( const syncable::ModelTypeSet& types) { + if (!event_handler_.IsInitialized()) { + return; + } DictionaryValue details; details.Set("types", syncable::ModelTypeSetToValue(types)); - parent_router_->RouteJsEvent("onMigrationNeededForTypes", - JsEventDetails(&details)); + HandleJsEvent(FROM_HERE, "onMigrationNeededForTypes", + JsEventDetails(&details)); } -void JsSyncManagerObserver::OnInitializationComplete() { - parent_router_->RouteJsEvent("onInitializationComplete", JsEventDetails()); +void JsSyncManagerObserver::OnInitializationComplete( + const WeakHandle<JsBackend>& js_backend) { + if (!event_handler_.IsInitialized()) { + return; + } + // Ignore the |js_backend| argument; it's not really convertible to + // JSON anyway. + HandleJsEvent(FROM_HERE, "onInitializationComplete", JsEventDetails()); } void JsSyncManagerObserver::OnStopSyncingPermanently() { - parent_router_->RouteJsEvent("onStopSyncingPermanently", JsEventDetails()); + if (!event_handler_.IsInitialized()) { + return; + } + HandleJsEvent(FROM_HERE, "onStopSyncingPermanently", JsEventDetails()); } void JsSyncManagerObserver::OnClearServerDataSucceeded() { - parent_router_->RouteJsEvent("onClearServerDataSucceeded", JsEventDetails()); + if (!event_handler_.IsInitialized()) { + return; + } + HandleJsEvent(FROM_HERE, "onClearServerDataSucceeded", JsEventDetails()); } void JsSyncManagerObserver::OnClearServerDataFailed() { - parent_router_->RouteJsEvent("onClearServerDataFailed", JsEventDetails()); + if (!event_handler_.IsInitialized()) { + return; + } + HandleJsEvent(FROM_HERE, "onClearServerDataFailed", JsEventDetails()); +} + +void JsSyncManagerObserver::HandleJsEvent( + const tracked_objects::Location& from_here, + const std::string& name, const JsEventDetails& details) { + if (!event_handler_.IsInitialized()) { + NOTREACHED(); + return; + } + event_handler_.Call(from_here, + &JsEventHandler::HandleJsEvent, name, details); } } // namespace browser_sync |