1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/sync/js_sync_manager_observer.h"
6
7#include <cstddef>
8
9#include "base/logging.h"
10#include "base/values.h"
11#include "chrome/browser/sync/js_arg_list.h"
12#include "chrome/browser/sync/js_event_router.h"
13#include "chrome/browser/sync/sessions/session_state.h"
14#include "chrome/browser/sync/syncable/model_type.h"
15
16namespace browser_sync {
17
18JsSyncManagerObserver::JsSyncManagerObserver(JsEventRouter* parent_router)
19    : parent_router_(parent_router) {
20  DCHECK(parent_router_);
21}
22
23JsSyncManagerObserver::~JsSyncManagerObserver() {}
24
25void JsSyncManagerObserver::OnChangesApplied(
26    syncable::ModelType model_type,
27    const sync_api::BaseTransaction* trans,
28    const sync_api::SyncManager::ChangeRecord* changes,
29    int change_count) {
30  ListValue return_args;
31  return_args.Append(Value::CreateStringValue(
32      syncable::ModelTypeToString(model_type)));
33  ListValue* change_values = new ListValue();
34  return_args.Append(change_values);
35  for (int i = 0; i < change_count; ++i) {
36    change_values->Append(changes[i].ToValue(trans));
37  }
38  parent_router_->RouteJsEvent("onChangesApplied",
39                               JsArgList(return_args), NULL);
40}
41
42void JsSyncManagerObserver::OnChangesComplete(
43    syncable::ModelType model_type) {
44  ListValue return_args;
45  return_args.Append(Value::CreateStringValue(
46      syncable::ModelTypeToString(model_type)));
47  parent_router_->RouteJsEvent("onChangesComplete",
48                               JsArgList(return_args), NULL);
49}
50
51void JsSyncManagerObserver::OnSyncCycleCompleted(
52    const sessions::SyncSessionSnapshot* snapshot) {
53  ListValue return_args;
54  return_args.Append(snapshot->ToValue());
55  parent_router_->RouteJsEvent("onSyncCycleCompleted",
56                               JsArgList(return_args), NULL);
57}
58
59void JsSyncManagerObserver::OnAuthError(
60    const GoogleServiceAuthError& auth_error) {
61  ListValue return_args;
62  return_args.Append(auth_error.ToValue());
63  parent_router_->RouteJsEvent("onAuthError",
64                               JsArgList(return_args), NULL);
65}
66
67void JsSyncManagerObserver::OnUpdatedToken(const std::string& token) {
68  ListValue return_args;
69  return_args.Append(Value::CreateStringValue("<redacted>"));
70  parent_router_->RouteJsEvent("onUpdatedToken",
71                               JsArgList(return_args), NULL);
72}
73
74void JsSyncManagerObserver::OnPassphraseRequired(bool for_decryption) {
75  ListValue return_args;
76  return_args.Append(Value::CreateBooleanValue(for_decryption));
77  parent_router_->RouteJsEvent("onPassphraseRequired",
78                               JsArgList(return_args), NULL);
79}
80
81void JsSyncManagerObserver::OnPassphraseFailed() {
82  parent_router_->RouteJsEvent("onPassphraseFailed", JsArgList(), NULL);
83}
84
85void JsSyncManagerObserver::OnPassphraseAccepted(
86    const std::string& bootstrap_token) {
87  ListValue return_args;
88  return_args.Append(Value::CreateStringValue("<redacted>"));
89  parent_router_->RouteJsEvent("onPassphraseAccepted",
90                               JsArgList(return_args), NULL);
91}
92
93void JsSyncManagerObserver::OnEncryptionComplete(
94    const syncable::ModelTypeSet& encrypted_types) {
95  ListValue return_args;
96  return_args.Append(syncable::ModelTypeSetToValue(encrypted_types));
97  parent_router_->RouteJsEvent("onEncryptionComplete",
98                               JsArgList(return_args), NULL);
99}
100
101void JsSyncManagerObserver::OnMigrationNeededForTypes(
102    const syncable::ModelTypeSet& types) {
103  ListValue return_args;
104  return_args.Append(syncable::ModelTypeSetToValue(types));
105  parent_router_->RouteJsEvent("onMigrationNeededForTypes",
106                               JsArgList(return_args), NULL);
107  // TODO(akalin): Bug 79247. Hook up JS boiler plate!
108}
109
110void JsSyncManagerObserver::OnInitializationComplete() {
111  parent_router_->RouteJsEvent("onInitializationComplete",
112                               JsArgList(), NULL);
113}
114
115void JsSyncManagerObserver::OnStopSyncingPermanently() {
116  parent_router_->RouteJsEvent("onStopSyncingPermanently",
117                               JsArgList(), NULL);
118}
119
120void JsSyncManagerObserver::OnClearServerDataSucceeded() {
121  parent_router_->RouteJsEvent("onClearServerDataSucceeded",
122                               JsArgList(), NULL);
123}
124
125void JsSyncManagerObserver::OnClearServerDataFailed() {
126  parent_router_->RouteJsEvent("onClearServerDataFailed", JsArgList(), NULL);
127}
128
129}  // namespace browser_sync
130