summaryrefslogtreecommitdiffstats
path: root/chrome/browser/sync/js_sync_manager_observer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/sync/js_sync_manager_observer.cc')
-rw-r--r--chrome/browser/sync/js_sync_manager_observer.cc100
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