1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file.
4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/webui/options/sync_setup_handler.h"
6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/json/json_reader.h"
8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/json/json_writer.h"
9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/values.h"
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/google/google_util.h"
11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/profiles/profile.h"
12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/sync/profile_sync_service.h"
13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/sync/sync_setup_flow.h"
14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "grit/chromium_strings.h"
15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "grit/generated_resources.h"
16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "grit/locale_settings.h"
17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "ui/base/l10n/l10n_util.h"
18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing l10n_util::GetStringFUTF16;
20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing l10n_util::GetStringUTF16;
21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace {
23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// TODO(jhawkins): Move these to url_constants.h.
25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst char* kInvalidPasswordHelpUrl =
26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    "http://www.google.com/support/accounts/bin/answer.py?ctx=ch&answer=27444";
27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst char* kCanNotAccessAccountUrl =
28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    "http://www.google.com/support/accounts/bin/answer.py?answer=48598";
29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#if defined(OS_CHROMEOS)
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst char* kEncryptionHelpUrl =
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    "http://www.google.com/support/chromeos/bin/answer.py?answer=1181035";
32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#else
33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst char* kEncryptionHelpUrl =
34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    "http://www.google.com/support/chrome/bin/answer.py?answer=1181035";
35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst char* kCreateNewAccountUrl =
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    "https://www.google.com/accounts/NewAccount?service=chromiumsync";
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool GetAuthData(const std::string& json,
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                 std::string* username,
41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                 std::string* password,
42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                 std::string* captcha,
43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                 std::string* access_code) {
44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_ptr<Value> parsed_value(base::JSONReader::Read(json, false));
45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!parsed_value.get() || !parsed_value->IsType(Value::TYPE_DICTIONARY))
46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return false;
47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DictionaryValue* result = static_cast<DictionaryValue*>(parsed_value.get());
49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!result->GetString("user", username) ||
50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      !result->GetString("pass", password) ||
51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      !result->GetString("captcha", captcha) ||
52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      !result->GetString("access_code", access_code)) {
53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      return false;
54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  return true;
56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool GetConfiguration(const std::string& json, SyncConfiguration* config) {
59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_ptr<Value> parsed_value(base::JSONReader::Read(json, false));
60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!parsed_value.get() || !parsed_value->IsType(Value::TYPE_DICTIONARY))
61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return false;
62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DictionaryValue* result = static_cast<DictionaryValue*>(parsed_value.get());
64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!result->GetBoolean("keepEverythingSynced", &config->sync_everything))
65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return false;
66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // These values need to be kept in sync with where they are written in
68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // choose_datatypes.html.
69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool sync_bookmarks;
70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!result->GetBoolean("syncBookmarks", &sync_bookmarks))
71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return false;
72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (sync_bookmarks)
73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    config->data_types.insert(syncable::BOOKMARKS);
74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool sync_preferences;
76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!result->GetBoolean("syncPreferences", &sync_preferences))
77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return false;
78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (sync_preferences)
79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    config->data_types.insert(syncable::PREFERENCES);
80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool sync_themes;
82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!result->GetBoolean("syncThemes", &sync_themes))
83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return false;
84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (sync_themes)
85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    config->data_types.insert(syncable::THEMES);
86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool sync_passwords;
88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!result->GetBoolean("syncPasswords", &sync_passwords))
89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return false;
90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (sync_passwords)
91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    config->data_types.insert(syncable::PASSWORDS);
92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool sync_autofill;
94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!result->GetBoolean("syncAutofill", &sync_autofill))
95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return false;
96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (sync_autofill)
97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    config->data_types.insert(syncable::AUTOFILL);
98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool sync_extensions;
100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!result->GetBoolean("syncExtensions", &sync_extensions))
101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return false;
102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (sync_extensions)
103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    config->data_types.insert(syncable::EXTENSIONS);
104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool sync_typed_urls;
106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!result->GetBoolean("syncTypedUrls", &sync_typed_urls))
107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return false;
108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (sync_typed_urls)
109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    config->data_types.insert(syncable::TYPED_URLS);
110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool sync_sessions;
112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!result->GetBoolean("syncSessions", &sync_sessions))
113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return false;
114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (sync_sessions)
115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    config->data_types.insert(syncable::SESSIONS);
116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool sync_apps;
118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!result->GetBoolean("syncApps", &sync_apps))
119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return false;
120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (sync_apps)
121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    config->data_types.insert(syncable::APPS);
122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Encryption settings.
124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!result->GetBoolean("usePassphrase", &config->use_secondary_passphrase))
125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return false;
126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (config->use_secondary_passphrase &&
127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      !result->GetString("passphrase", &config->secondary_passphrase))
128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return false;
129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  return true;
131ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
132ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool GetPassphrase(const std::string& json, std::string* passphrase) {
134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_ptr<Value> parsed_value(base::JSONReader::Read(json, false));
135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!parsed_value.get() || !parsed_value->IsType(Value::TYPE_DICTIONARY))
136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return false;
137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DictionaryValue* result = static_cast<DictionaryValue*>(parsed_value.get());
139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  return result->GetString("passphrase", passphrase);
140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool GetFirstPassphrase(const std::string& json,
143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                        std::string* option,
144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                        std::string* passphrase) {
145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_ptr<Value> parsed_value(base::JSONReader::Read(json, false));
146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!parsed_value.get() || !parsed_value->IsType(Value::TYPE_DICTIONARY))
147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return false;
148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DictionaryValue* result = static_cast<DictionaryValue*>(parsed_value.get());
150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  return result->GetString("option", option) &&
151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen         result->GetString("passphrase", passphrase);
152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}  // namespace
155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenSyncSetupHandler::SyncSetupHandler() : flow_(NULL) {
157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenSyncSetupHandler::~SyncSetupHandler() {
160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SyncSetupHandler::GetLocalizedValues(DictionaryValue* localized_strings) {
163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DCHECK(localized_strings);
164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  localized_strings->SetString(
166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "invalidpasswordhelpurl",
167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      google_util::StringAppendGoogleLocaleParam(kInvalidPasswordHelpUrl));
168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  localized_strings->SetString(
169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "cannotaccessaccounturl",
170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      google_util::StringAppendGoogleLocaleParam(kCanNotAccessAccountUrl));
171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  localized_strings->SetString(
172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "createnewaccounturl",
173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      google_util::StringAppendGoogleLocaleParam(kCreateNewAccountUrl));
174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  localized_strings->SetString(
175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "introduction",
176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      GetStringFUTF16(IDS_SYNC_LOGIN_INTRODUCTION,
177ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                      GetStringUTF16(IDS_PRODUCT_NAME)));
178ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  localized_strings->SetString(
179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "choosedatatypesinstructions",
180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      GetStringFUTF16(IDS_SYNC_CHOOSE_DATATYPES_INSTRUCTIONS,
181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                      GetStringUTF16(IDS_PRODUCT_NAME)));
182ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  localized_strings->SetString(
183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "encryptionInstructions",
184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      GetStringFUTF16(IDS_SYNC_ENCRYPTION_INSTRUCTIONS,
185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                      GetStringUTF16(IDS_PRODUCT_NAME)));
186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  localized_strings->SetString(
187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "encryptionhelpurl",
188ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      google_util::StringAppendGoogleLocaleParam(kEncryptionHelpUrl));
189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  localized_strings->SetString(
190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "passphraseEncryptionMessage",
191ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      GetStringFUTF16(IDS_SYNC_PASSPHRASE_ENCRYPTION_MESSAGE,
192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                      GetStringUTF16(IDS_PRODUCT_NAME)));
193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  static OptionsStringResource resources[] = {
195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "syncSetupOverlayTitle", IDS_SYNC_SETUP_TITLE },
196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "syncSetupConfigureTitle", IDS_SYNC_SETUP_CONFIGURE_TITLE },
197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "signinprefix", IDS_SYNC_LOGIN_SIGNIN_PREFIX },
198ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "signinsuffix", IDS_SYNC_LOGIN_SIGNIN_SUFFIX },
199ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "cannotbeblank", IDS_SYNC_CANNOT_BE_BLANK },
200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "emaillabel", IDS_SYNC_LOGIN_EMAIL },
201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "passwordlabel", IDS_SYNC_LOGIN_PASSWORD },
202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "invalidcredentials", IDS_SYNC_INVALID_USER_CREDENTIALS },
203ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "signin", IDS_SYNC_SIGNIN },
204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "couldnotconnect", IDS_SYNC_LOGIN_COULD_NOT_CONNECT },
205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "cannotaccessaccount", IDS_SYNC_CANNOT_ACCESS_ACCOUNT },
206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "createaccount", IDS_SYNC_CREATE_ACCOUNT },
207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "cancel", IDS_CANCEL },
208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "settingup", IDS_SYNC_LOGIN_SETTING_UP },
209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "settingupsync", IDS_SYNC_LOGIN_SETTING_UP_SYNC },
210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "errorsigningin", IDS_SYNC_ERROR_SIGNING_IN },
211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "captchainstructions", IDS_SYNC_GAIA_CAPTCHA_INSTRUCTIONS },
212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "invalidaccesscode", IDS_SYNC_INVALID_ACCESS_CODE_LABEL },
213ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "enteraccesscode", IDS_SYNC_ENTER_ACCESS_CODE_LABEL },
214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "getaccesscodehelp", IDS_SYNC_ACCESS_CODE_HELP_LABEL },
215ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "getaccesscodeurl", IDS_SYNC_GET_ACCESS_CODE_URL },
216ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "dataTypes", IDS_SYNC_DATA_TYPES_TAB_NAME },
217ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "encryption", IDS_SYNC_ENCRYPTION_TAB_NAME },
218ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "choosedatatypesheader", IDS_SYNC_CHOOSE_DATATYPES_HEADER },
219ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "keepeverythingsynced", IDS_SYNC_EVERYTHING },
220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "choosedatatypes", IDS_SYNC_CHOOSE_DATATYPES },
221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "bookmarks", IDS_SYNC_DATATYPE_BOOKMARKS },
222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "preferences", IDS_SYNC_DATATYPE_PREFERENCES },
223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "autofill", IDS_SYNC_DATATYPE_AUTOFILL },
224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "themes", IDS_SYNC_DATATYPE_THEMES },
225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "passwords", IDS_SYNC_DATATYPE_PASSWORDS },
226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "extensions", IDS_SYNC_DATATYPE_EXTENSIONS },
227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "typedurls", IDS_SYNC_DATATYPE_TYPED_URLS },
228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "apps", IDS_SYNC_DATATYPE_APPS },
229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "foreignsessions", IDS_SYNC_DATATYPE_SESSIONS },
230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "synczerodatatypeserror", IDS_SYNC_ZERO_DATA_TYPES_ERROR },
231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "abortederror", IDS_SYNC_SETUP_ABORTED_BY_PENDING_CLEAR },
232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "encryptAllLabel", IDS_SYNC_ENCRYPT_ALL_LABEL },
233ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "googleOption", IDS_SYNC_PASSPHRASE_OPT_GOOGLE },
234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "explicitOption", IDS_SYNC_PASSPHRASE_OPT_EXPLICIT },
235ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "sectionGoogleMessage", IDS_SYNC_PASSPHRASE_MSG_GOOGLE },
236ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "sectionExplicitMessage", IDS_SYNC_PASSPHRASE_MSG_EXPLICIT },
237ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "passphraseLabel", IDS_SYNC_PASSPHRASE_LABEL },
238ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "confirmLabel", IDS_SYNC_CONFIRM_PASSPHRASE_LABEL },
239ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "emptyErrorMessage", IDS_SYNC_EMPTY_PASSPHRASE_ERROR },
240ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "mismatchErrorMessage", IDS_SYNC_PASSPHRASE_MISMATCH_ERROR },
241ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "passphraseWarning", IDS_SYNC_PASSPHRASE_WARNING },
242ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "cleardata", IDS_SYNC_CLEAR_DATA_FOR_PASSPHRASE },
243ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "cleardatalink", IDS_SYNC_CLEAR_DATA_LINK },
244ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "settingup", IDS_SYNC_LOGIN_SETTING_UP },
245ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "success", IDS_SYNC_SUCCESS },
246ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "firsttimesummary", IDS_SYNC_SETUP_FIRST_TIME_ALL_DONE },
247ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "okay", IDS_SYNC_SETUP_OK_BUTTON_LABEL },
248ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "enterPassphraseTitle", IDS_SYNC_ENTER_PASSPHRASE_TITLE },
249ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "firstPassphraseTitle", IDS_SYNC_FIRST_PASSPHRASE_TITLE },
250ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "customizeLinkLabel", IDS_SYNC_CUSTOMIZE_LINK_LABEL },
251ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "confirmSyncPreferences", IDS_SYNC_CONFIRM_SYNC_PREFERENCES },
252ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "syncEverything", IDS_SYNC_SYNC_EVERYTHING },
253ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "useDefaultSettings", IDS_SYNC_USE_DEFAULT_SETTINGS },
254ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "passphraseSectionTitle", IDS_SYNC_PASSPHRASE_SECTION_TITLE },
255ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "privacyDashboardLink", IDS_SYNC_PRIVACY_DASHBOARD_LINK_LABEL },
256ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "enterPassphraseTitle", IDS_SYNC_ENTER_PASSPHRASE_TITLE },
257ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "enterPassphraseBody", IDS_SYNC_ENTER_PASSPHRASE_BODY },
258ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "enterOtherPassphraseBody", IDS_SYNC_ENTER_OTHER_PASSPHRASE_BODY },
259ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "passphraseLabel", IDS_SYNC_PASSPHRASE_LABEL },
260ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "incorrectPassphrase", IDS_SYNC_INCORRECT_PASSPHRASE },
261ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "passphraseRecover", IDS_SYNC_PASSPHRASE_RECOVER },
262ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "passphraseWarning", IDS_SYNC_PASSPHRASE_WARNING },
263ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "cleardatalink", IDS_SYNC_CLEAR_DATA_LINK },
264ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "cancelWarningHeader", IDS_SYNC_PASSPHRASE_CANCEL_WARNING_HEADER },
265ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "cancelWarning", IDS_SYNC_PASSPHRASE_CANCEL_WARNING },
266ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "yes", IDS_SYNC_PASSPHRASE_CANCEL_YES },
267ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "no", IDS_SYNC_PASSPHRASE_CANCEL_NO },
268ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "sectionExplicitMessagePrefix", IDS_SYNC_PASSPHRASE_MSG_EXPLICIT_PREFIX },
269ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    { "sectionExplicitMessagePostfix",
270ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        IDS_SYNC_PASSPHRASE_MSG_EXPLICIT_POSTFIX },
271ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  };
272ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
273ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  RegisterStrings(localized_strings, resources, arraysize(resources));
274ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
275ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
276ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SyncSetupHandler::Initialize() {
277ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
278ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
279ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SyncSetupHandler::RegisterMessages() {
280ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  web_ui_->RegisterMessageCallback("didShowPage",
281ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      NewCallback(this, &SyncSetupHandler::OnDidShowPage));
282ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  web_ui_->RegisterMessageCallback("didClosePage",
283ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      NewCallback(this, &SyncSetupHandler::OnDidClosePage));
284ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  web_ui_->RegisterMessageCallback("SubmitAuth",
285ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      NewCallback(this, &SyncSetupHandler::HandleSubmitAuth));
286ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  web_ui_->RegisterMessageCallback("Configure",
287ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      NewCallback(this, &SyncSetupHandler::HandleConfigure));
288ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  web_ui_->RegisterMessageCallback("Passphrase",
289ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      NewCallback(this, &SyncSetupHandler::HandlePassphraseEntry));
290ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  web_ui_->RegisterMessageCallback("PassphraseCancel",
291ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      NewCallback(this, &SyncSetupHandler::HandlePassphraseCancel));
292ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  web_ui_->RegisterMessageCallback("FirstPassphrase",
293ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      NewCallback(this, &SyncSetupHandler::HandleFirstPassphrase));
294ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  web_ui_->RegisterMessageCallback("GoToDashboard",
295ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      NewCallback(this, &SyncSetupHandler::HandleGoToDashboard));
296ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
297ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
298ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Called by SyncSetupFlow::Advance.
299ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SyncSetupHandler::ShowGaiaLogin(const DictionaryValue& args) {
300ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  StringValue page("login");
301ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  web_ui_->CallJavascriptFunction(
302ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "SyncSetupOverlay.showSyncSetupPage", page, args);
303ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
304ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
305ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SyncSetupHandler::ShowGaiaSuccessAndClose() {
306ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  web_ui_->CallJavascriptFunction("SyncSetupOverlay.showSuccessAndClose");
307ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
308ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
309ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SyncSetupHandler::ShowGaiaSuccessAndSettingUp() {
310ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  web_ui_->CallJavascriptFunction("SyncSetupOverlay.showSuccessAndSettingUp");
311ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
312ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
313ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Called by SyncSetupFlow::Advance.
314ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SyncSetupHandler::ShowConfigure(const DictionaryValue& args) {
315ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  StringValue page("configure");
316ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  web_ui_->CallJavascriptFunction(
317ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "SyncSetupOverlay.showSyncSetupPage", page, args);
318ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
319ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
320ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SyncSetupHandler::ShowPassphraseEntry(const DictionaryValue& args) {
321ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  StringValue page("passphrase");
322ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  web_ui_->CallJavascriptFunction(
323ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "SyncSetupOverlay.showSyncSetupPage", page, args);
324ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
325ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
326ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SyncSetupHandler::ShowFirstPassphrase(const DictionaryValue& args) {
327ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // TODO(jhawkins): Remove this logic in SyncSetupFlow. It will never be
328ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // reached.
329ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  NOTREACHED();
330ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
331ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
332ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SyncSetupHandler::ShowSettingUp() {
333ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  StringValue page("settingUp");
334ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  web_ui_->CallJavascriptFunction(
335ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "SyncSetupOverlay.showSyncSetupPage", page);
336ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
337ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
338ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SyncSetupHandler::ShowSetupDone(const std::wstring& user) {
339ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  StringValue page("done");
340ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  web_ui_->CallJavascriptFunction(
341ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "SyncSetupOverlay.showSyncSetupPage", page);
342ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
343ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
344ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SyncSetupHandler::ShowFirstTimeDone(const std::wstring& user) {
345ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // TODO(jhawkins): Remove this from Sync since it's not called anymore.
346ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  NOTREACHED();
347ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
348ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
349ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SyncSetupHandler::OnDidShowPage(const ListValue* args) {
350ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DCHECK(web_ui_);
351ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
352ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ProfileSyncService* sync_service =
353ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      web_ui_->GetProfile()->GetProfileSyncService();
354ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!sync_service)
355ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
356ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
357ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  flow_ = sync_service->get_wizard().AttachSyncSetupHandler(this);
358ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
359ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
360ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SyncSetupHandler::OnDidClosePage(const ListValue* args) {
361ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (flow_) {
362ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    flow_->OnDialogClosed(std::string());
363ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    flow_ = NULL;
364ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
365ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
366ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
367ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SyncSetupHandler::HandleSubmitAuth(const ListValue* args) {
368ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::string json;
369ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!args->GetString(0, &json)) {
370ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    NOTREACHED() << "Could not read JSON argument";
371ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
372ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
373ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
374ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (json.empty())
375ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
376ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
377ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::string username, password, captcha, access_code;
378ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!GetAuthData(json, &username, &password, &captcha, &access_code)) {
379ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    // The page sent us something that we didn't understand.
380ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    // This probably indicates a programming error.
381ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    NOTREACHED();
382ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
383ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
384ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
385ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (flow_)
386ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    flow_->OnUserSubmittedAuth(username, password, captcha, access_code);
387ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
388ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
389ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SyncSetupHandler::HandleConfigure(const ListValue* args) {
390ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::string json;
391ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!args->GetString(0, &json)) {
392ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    NOTREACHED() << "Could not read JSON argument";
393ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
394ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
395ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (json.empty()) {
396ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    NOTREACHED();
397ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
398ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
399ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
400ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  SyncConfiguration configuration;
401ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!GetConfiguration(json, &configuration)) {
402ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    // The page sent us something that we didn't understand.
403ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    // This probably indicates a programming error.
404ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    NOTREACHED();
405ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
406ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
407ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
408ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DCHECK(flow_);
409ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  flow_->OnUserConfigured(configuration);
410ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
411ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
412ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SyncSetupHandler::HandlePassphraseEntry(const ListValue* args) {
413ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::string json;
414ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!args->GetString(0, &json)) {
415ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    NOTREACHED() << "Could not read JSON argument";
416ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
417ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
418ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
419ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (json.empty())
420ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
421ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
422ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::string passphrase;
423ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!GetPassphrase(json, &passphrase)) {
424ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    // Couldn't understand what the page sent.  Indicates a programming error.
425ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    NOTREACHED();
426ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
427ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
428ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
429ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DCHECK(flow_);
430ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  flow_->OnPassphraseEntry(passphrase);
431ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
432ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
433ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SyncSetupHandler::HandlePassphraseCancel(const ListValue* args) {
434ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DCHECK(flow_);
435ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  flow_->OnPassphraseCancel();
436ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
437ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
438ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SyncSetupHandler::HandleFirstPassphrase(const ListValue* args) {
439ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::string json;
440ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!args->GetString(0, &json)) {
441ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    NOTREACHED() << "Could not read JSON argument";
442ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
443ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
444ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (json.empty())
445ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
446ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
447ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::string option;
448ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::string passphrase;
449ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!GetFirstPassphrase(json, &option, &passphrase)) {
450ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    // Page sent result which couldn't be parsed.  Programming error.
451ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    NOTREACHED();
452ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
453ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
454ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
455ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DCHECK(flow_);
456ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  flow_->OnFirstPassphraseEntry(option, passphrase);
457ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
458ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
459ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SyncSetupHandler::HandleGoToDashboard(const ListValue* args) {
460ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DCHECK(flow_);
461ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  flow_->OnGoToDashboard();
462ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
463