easy_unlock_private_api.cc revision e4256316f8b5e8d1ec0df1f7762771622a53fa63
15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/extensions/api/easy_unlock_private/easy_unlock_private_api.h"
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <vector>
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/bind.h"
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/lazy_instance.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/linked_ptr.h"
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/strings/utf_string_conversions.h"
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/values.h"
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/extensions/api/easy_unlock_private/easy_unlock_private_crypto_delegate.h"
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/signin/easy_unlock_screenlock_state_handler.h"
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/signin/easy_unlock_service.h"
18e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch#include "chrome/browser/signin/screenlock_bridge.h"
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/common/extensions/api/easy_unlock_private.h"
2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/grit/generated_resources.h"
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/proximity_auth/bluetooth_util.h"
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/browser/browser_thread.h"
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/browser/browser_context_keyed_api_factory.h"
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(OS_CHROMEOS)
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/chromeos_utils.h"
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/user_manager/user.h"
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/user_manager/user_manager.h"
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace extensions {
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace api {
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace {
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static base::LazyInstance<BrowserContextKeyedAPIFactory<EasyUnlockPrivateAPI> >
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    g_factory = LAZY_INSTANCE_INITIALIZER;
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Utility method for getting the API's crypto delegate.
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateCryptoDelegate* GetCryptoDelegate(
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    content::BrowserContext* context) {
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return BrowserContextKeyedAPIFactory<EasyUnlockPrivateAPI>::Get(context)
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)             ->crypto_delegate();
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockScreenlockStateHandler::State ToScreenlockStateHandlerState(
486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    easy_unlock_private::State state) {
496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  switch (state) {
506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    case easy_unlock_private::STATE_NO_BLUETOOTH:
516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_NO_BLUETOOTH;
526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    case easy_unlock_private::STATE_BLUETOOTH_CONNECTING:
536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_BLUETOOTH_CONNECTING;
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    case easy_unlock_private::STATE_NO_PHONE:
556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_NO_PHONE;
566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    case easy_unlock_private::STATE_PHONE_NOT_AUTHENTICATED:
576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_PHONE_NOT_AUTHENTICATED;
586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    case easy_unlock_private::STATE_PHONE_LOCKED:
596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_PHONE_LOCKED;
606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    case easy_unlock_private::STATE_PHONE_UNLOCKABLE:
616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_PHONE_UNLOCKABLE;
626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    case easy_unlock_private::STATE_PHONE_NOT_NEARBY:
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_PHONE_NOT_NEARBY;
6403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    case easy_unlock_private::STATE_PHONE_UNSUPPORTED:
6503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_PHONE_UNSUPPORTED;
666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    case easy_unlock_private::STATE_AUTHENTICATED:
676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED;
686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    default:
696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_INACTIVE;
706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// static
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)BrowserContextKeyedAPIFactory<EasyUnlockPrivateAPI>*
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    EasyUnlockPrivateAPI::GetFactoryInstance() {
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return g_factory.Pointer();
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateAPI::EasyUnlockPrivateAPI(content::BrowserContext* context)
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    : crypto_delegate_(EasyUnlockPrivateCryptoDelegate::Create()) {
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateAPI::~EasyUnlockPrivateAPI() {}
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateGetStringsFunction::EasyUnlockPrivateGetStringsFunction() {
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateGetStringsFunction::~EasyUnlockPrivateGetStringsFunction() {
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivateGetStringsFunction::RunSync() {
935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<base::DictionaryValue> strings(new base::DictionaryValue);
945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(OS_CHROMEOS)
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const base::string16 device_type = chromeos::GetChromeDeviceType();
975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(isherman): Set an appropriate device name for non-ChromeOS devices.
995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const base::string16 device_type = base::ASCIIToUTF16("Chromeschnozzle");
1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif  // defined(OS_CHROMEOS)
1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_CHROMEOS)
1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const user_manager::UserManager* manager = user_manager::UserManager::Get();
1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const user_manager::User* user = manager ? manager->GetActiveUser() : NULL;
1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const std::string user_email_utf8 =
1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      user ? user->display_email() : std::string();
1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const base::string16 user_email = base::UTF8ToUTF16(user_email_utf8);
1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#else
1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // TODO(isherman): Set an appropriate user display email for non-ChromeOS
1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // platforms.
1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const base::string16 user_email = base::UTF8ToUTF16("superman@example.com");
1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif  // defined(OS_CHROMEOS)
1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Common strings.
1156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  strings->SetString(
1166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "learnMoreLinkTitle",
1176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_EASY_UNLOCK_LEARN_MORE_LINK_TITLE));
118e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  strings->SetString("deviceType", device_type);
1196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Setup notification strings.
1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupNotificationTitle",
1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_EASY_UNLOCK_SETUP_NOTIFICATION_TITLE,
1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                 device_type));
1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupNotificationMessage",
1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_EASY_UNLOCK_SETUP_NOTIFICATION_MESSAGE,
1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                 device_type));
1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupNotificationButtonTitle",
1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_NOTIFICATION_BUTTON_TITLE));
1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Success notification strings.
1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "successNotificationTitle",
1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_EASY_UNLOCK_SUCCESS_NOTIFICATION_TITLE));
1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "successNotificationMessage",
1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_EASY_UNLOCK_SUCCESS_NOTIFICATION_MESSAGE,
1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                 device_type));
1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Chromebook added to Easy Unlock notification strings.
1446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  strings->SetString(
1456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "chromebookAddedNotificationTitle",
1466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      l10n_util::GetStringUTF16(
1476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          IDS_EASY_UNLOCK_CHROMEBOOK_ADDED_NOTIFICATION_TITLE));
1486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  strings->SetString(
149e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch      "chromebookAddedNotificationMessage",
150e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch      l10n_util::GetStringFUTF16(
1516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          IDS_EASY_UNLOCK_CHROMEBOOK_ADDED_NOTIFICATION_MESSAGE,
1526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          device_type));
153e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  strings->SetString(
154e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch      "chromebookAddedNotificationAboutButton",
155e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch      l10n_util::GetStringUTF16(
156e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch          IDS_EASY_UNLOCK_CHROMEBOOK_ADDED_NOTIFICATION_ABOUT_BUTTON));
157e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch
158e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  // Shared "Learn more" button for the pairing changed and pairing change
159e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  // applied notification.
160e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  strings->SetString(
161e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch      "phoneChangedNotificationLearnMoreButton",
162e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch      l10n_util::GetStringUTF16(
163e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch          IDS_EASY_UNLOCK_NOTIFICATION_LEARN_MORE_BUTTON));
164e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch
165e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  // Pairing changed notification strings.
166e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  strings->SetString(
167e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch      "phoneChangedNotificationTitle",
168e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch      l10n_util::GetStringUTF16(
169e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch          IDS_EASY_UNLOCK_PAIRING_CHANGED_NOTIFICATION_TITLE));
170e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  strings->SetString(
171e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch      "phoneChangedNotificationMessage",
172e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch      l10n_util::GetStringFUTF16(
173e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch          IDS_EASY_UNLOCK_PAIRING_CHANGED_NOTIFICATION_MESSAGE,
174e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch          device_type));
175e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  strings->SetString(
176e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch      "phoneChangedNotificationUpdateButton",
177e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch      l10n_util::GetStringUTF16(
178e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch          IDS_EASY_UNLOCK_PAIRING_CHANGED_NOTIFICATION_UPDATE_BUTTON));
179e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch
180e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  // Phone change applied notification strings.
181e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  strings->SetString(
182e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch      "phoneChangeAppliedNotificationTitle",
183e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch      l10n_util::GetStringUTF16(
184e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch          IDS_EASY_UNLOCK_PAIRING_CHANGE_APPLIED_NOTIFICATION_TITLE));
185e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  strings->SetString(
186e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch      "phoneChangeAppliedNotificationMessage",
187e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch      l10n_util::GetStringUTF16(
188e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch          IDS_EASY_UNLOCK_PAIRING_CHANGE_APPLIED_NOTIFICATION_MESSAGE));
1896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Setup dialog strings.
1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Step 1: Intro.
1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroHeaderTitle",
1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_HEADER_TITLE, device_type));
1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroHeaderText",
1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      l10n_util::GetStringFUTF16(IDS_EASY_UNLOCK_SETUP_INTRO_HEADER_TEXT,
1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                 device_type,
2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                 user_email));
2015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroFindPhoneButtonLabel",
2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_FIND_PHONE_BUTTON_LABEL));
2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroFindingPhoneButtonLabel",
2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
2085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_FINDING_PHONE_BUTTON_LABEL));
2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "setupIntroRetryFindPhoneButtonLabel",
2116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      l10n_util::GetStringUTF16(
2126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_RETRY_FIND_PHONE_BUTTON_LABEL));
2136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  strings->SetString(
2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroHowIsThisSecureLinkText",
2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_HOW_IS_THIS_SECURE_LINK_TEXT));
2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Step 2: Found a viable phone.
2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupFoundPhoneHeaderTitle",
2205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_FOUND_PHONE_HEADER_TITLE, device_type));
2225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupFoundPhoneHeaderText",
2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
2255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_FOUND_PHONE_HEADER_TEXT, device_type));
2265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupFoundPhoneUseThisPhoneButtonLabel",
2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_FOUND_PHONE_USE_THIS_PHONE_BUTTON_LABEL));
2306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  strings->SetString(
2316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "setupPairingPhoneFailedButtonLabel",
2326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      l10n_util::GetStringUTF16(
2336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_PAIRING_PHONE_FAILED_BUTTON_LABEL));
2345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Step 3: Setup completed successfully.
2355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupCompleteHeaderTitle",
2375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
2385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_COMPLETE_HEADER_TITLE));
2395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupCompleteHeaderText",
2415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
2425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_COMPLETE_HEADER_TEXT));
2435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupCompleteTryItOutButtonLabel",
2455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
2465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_COMPLETE_TRY_IT_OUT_BUTTON_LABEL));
2475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupCompleteSettingsLinkText",
2495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
2505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_COMPLETE_SETTINGS_LINK_TEXT));
2515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Error strings.
2535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupErrorBluetoothUnavailable",
2555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
2565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_ERROR_BLUETOOTH_UNAVAILBLE, device_type));
2575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupErrorOffline",
2595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
2605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_ERROR_OFFLINE, device_type));
2615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupErrorFindingPhone",
2635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_EASY_UNLOCK_SETUP_ERROR_FINDING_PHONE));
2645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupErrorBluetoothConnectionFailed",
2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_ERROR_BLUETOOTH_CONNECTION_FAILED,
2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          device_type));
2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "setupErrorConnectionToPhoneTimeout",
2716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)       l10n_util::GetStringFUTF16(
2726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)           IDS_EASY_UNLOCK_SETUP_ERROR_CONNECT_TO_PHONE_TIMEOUT,
2736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)           device_type));
2746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  strings->SetString(
2756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "setupErrorSyncPhoneState",
2766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)       l10n_util::GetStringUTF16(
2776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)           IDS_EASY_UNLOCK_SETUP_ERROR_SYNC_PHONE_STATE_FAILED));
2786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  strings->SetString(
2795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupErrorConnectingToPhone",
2805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
2815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_ERROR_CONNECTING_TO_PHONE, device_type));
2825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // TODO(isherman): Remove this string once the app has been updated.
2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  strings->SetString("setupIntroHeaderFootnote", base::string16());
2855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SetResult(strings.release());
2875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
2885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivatePerformECDHKeyAgreementFunction::
2915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivatePerformECDHKeyAgreementFunction() {}
2925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivatePerformECDHKeyAgreementFunction::
2945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)~EasyUnlockPrivatePerformECDHKeyAgreementFunction() {}
2955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivatePerformECDHKeyAgreementFunction::RunAsync() {
2975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<easy_unlock_private::PerformECDHKeyAgreement::Params> params =
2985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      easy_unlock_private::PerformECDHKeyAgreement::Params::Create(*args_);
2995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params);
3005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GetCryptoDelegate(browser_context())->PerformECDHKeyAgreement(
3021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      *params,
3035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(&EasyUnlockPrivatePerformECDHKeyAgreementFunction::OnData,
3045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                 this));
3055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
3065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void EasyUnlockPrivatePerformECDHKeyAgreementFunction::OnData(
3095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& secret_key) {
3105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(tbarzic): Improve error handling.
3115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!secret_key.empty()) {
3125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    results_ = easy_unlock_private::PerformECDHKeyAgreement::Results::Create(
3135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        secret_key);
3145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
3155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SendResponse(true);
3165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateGenerateEcP256KeyPairFunction::
3195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateGenerateEcP256KeyPairFunction() {}
3205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateGenerateEcP256KeyPairFunction::
3225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)~EasyUnlockPrivateGenerateEcP256KeyPairFunction() {}
3235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivateGenerateEcP256KeyPairFunction::RunAsync() {
3255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GetCryptoDelegate(browser_context())->GenerateEcP256KeyPair(
3265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(&EasyUnlockPrivateGenerateEcP256KeyPairFunction::OnData,
3275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                 this));
3285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
3295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void EasyUnlockPrivateGenerateEcP256KeyPairFunction::OnData(
3325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& private_key,
3335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& public_key) {
3345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(tbarzic): Improve error handling.
3355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!public_key.empty() && !private_key.empty()) {
3365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    results_ = easy_unlock_private::GenerateEcP256KeyPair::Results::Create(
3375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        public_key, private_key);
3385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
3395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SendResponse(true);
3405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateCreateSecureMessageFunction::
3435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateCreateSecureMessageFunction() {}
3445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateCreateSecureMessageFunction::
3465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)~EasyUnlockPrivateCreateSecureMessageFunction() {}
3475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivateCreateSecureMessageFunction::RunAsync() {
3495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<easy_unlock_private::CreateSecureMessage::Params> params =
3505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      easy_unlock_private::CreateSecureMessage::Params::Create(*args_);
3515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params);
3525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GetCryptoDelegate(browser_context())->CreateSecureMessage(
3541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      *params,
3555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(&EasyUnlockPrivateCreateSecureMessageFunction::OnData,
3565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                 this));
3575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
3585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void EasyUnlockPrivateCreateSecureMessageFunction::OnData(
3615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& message) {
3625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(tbarzic): Improve error handling.
3635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!message.empty()) {
3645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    results_ = easy_unlock_private::CreateSecureMessage::Results::Create(
3655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        message);
3665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
3675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SendResponse(true);
3685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateUnwrapSecureMessageFunction::
3715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateUnwrapSecureMessageFunction() {}
3725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateUnwrapSecureMessageFunction::
3745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)~EasyUnlockPrivateUnwrapSecureMessageFunction() {}
3755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivateUnwrapSecureMessageFunction::RunAsync() {
3775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<easy_unlock_private::UnwrapSecureMessage::Params> params =
3785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      easy_unlock_private::UnwrapSecureMessage::Params::Create(*args_);
3795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params);
3805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GetCryptoDelegate(browser_context())->UnwrapSecureMessage(
3821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      *params,
3835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(&EasyUnlockPrivateUnwrapSecureMessageFunction::OnData,
3845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                 this));
3855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
3865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void EasyUnlockPrivateUnwrapSecureMessageFunction::OnData(
3895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& data) {
3905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(tbarzic): Improve error handling.
3915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!data.empty())
3925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    results_ = easy_unlock_private::UnwrapSecureMessage::Results::Create(data);
3935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SendResponse(true);
3945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::
3975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction() {}
3985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::
4005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ~EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction() {}
4015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::RunAsync() {
4035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<easy_unlock_private::SeekBluetoothDeviceByAddress::Params> params(
4045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      easy_unlock_private::SeekBluetoothDeviceByAddress::Params::Create(
4055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          *args_));
4065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params.get());
4075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  proximity_auth::bluetooth_util::SeekDeviceByAddress(
4095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->device_address,
4105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(
4111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          &EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::OnSeekSuccess,
4121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          this),
4131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      base::Bind(
4141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          &EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::OnSeekFailure,
4151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          this),
4161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      content::BrowserThread::GetBlockingPool());
4175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
4185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
4195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::OnSeekSuccess() {
4211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SendResponse(true);
4221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
4231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::OnSeekFailure(
4251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const std::string& error_message) {
4261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetError(error_message);
4271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SendResponse(false);
4285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
4295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
43003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)EasyUnlockPrivateConnectToBluetoothServiceInsecurelyFunction::
43103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    EasyUnlockPrivateConnectToBluetoothServiceInsecurelyFunction() {}
43203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
43303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)EasyUnlockPrivateConnectToBluetoothServiceInsecurelyFunction::
43403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    ~EasyUnlockPrivateConnectToBluetoothServiceInsecurelyFunction() {}
43503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
43603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void EasyUnlockPrivateConnectToBluetoothServiceInsecurelyFunction::
43703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    ConnectToService(device::BluetoothDevice* device,
43803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                     const device::BluetoothUUID& uuid) {
4391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  proximity_auth::bluetooth_util::ConnectToServiceInsecurely(
44003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      device,
44103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      uuid,
44203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      base::Bind(&EasyUnlockPrivateConnectToBluetoothServiceInsecurelyFunction::
44303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                     OnConnect,
44403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                 this),
44503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      base::Bind(&EasyUnlockPrivateConnectToBluetoothServiceInsecurelyFunction::
44603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                     OnConnectError,
44703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                 this));
44803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
44903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
4506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateUpdateScreenlockStateFunction::
4516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockPrivateUpdateScreenlockStateFunction() {}
4526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateUpdateScreenlockStateFunction::
4546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ~EasyUnlockPrivateUpdateScreenlockStateFunction() {}
4556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool EasyUnlockPrivateUpdateScreenlockStateFunction::RunSync() {
4576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  scoped_ptr<easy_unlock_private::UpdateScreenlockState::Params> params(
4586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      easy_unlock_private::UpdateScreenlockState::Params::Create(*args_));
4596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params.get());
4606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  Profile* profile = Profile::FromBrowserContext(browser_context());
4621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (EasyUnlockService::Get(profile)->UpdateScreenlockState(
4631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          ToScreenlockStateHandlerState(params->state)))
4646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    return true;
4656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  SetError("Not allowed");
4676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return false;
4686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateSetPermitAccessFunction::
4716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockPrivateSetPermitAccessFunction() {
4726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateSetPermitAccessFunction::
4756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ~EasyUnlockPrivateSetPermitAccessFunction() {
4766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool EasyUnlockPrivateSetPermitAccessFunction::RunSync() {
4796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  scoped_ptr<easy_unlock_private::SetPermitAccess::Params> params(
4806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      easy_unlock_private::SetPermitAccess::Params::Create(*args_));
4816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params.get());
4826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  Profile* profile = Profile::FromBrowserContext(browser_context());
4846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EasyUnlockService::Get(profile)
4856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      ->SetPermitAccess(*params->permit_access.ToValue());
4866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return true;
4886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateGetPermitAccessFunction::
4916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockPrivateGetPermitAccessFunction() {
4926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateGetPermitAccessFunction::
4956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ~EasyUnlockPrivateGetPermitAccessFunction() {
4966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool EasyUnlockPrivateGetPermitAccessFunction::RunSync() {
4996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  Profile* profile = Profile::FromBrowserContext(browser_context());
5006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const base::DictionaryValue* permit_value =
5016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      EasyUnlockService::Get(profile)->GetPermitAccess();
5026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (permit_value) {
5036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    scoped_ptr<easy_unlock_private::PermitRecord> permit =
5046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        easy_unlock_private::PermitRecord::FromValue(*permit_value);
5056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    results_ = easy_unlock_private::GetPermitAccess::Results::Create(*permit);
5066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
5076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return true;
5096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
5106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateClearPermitAccessFunction::
5126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockPrivateClearPermitAccessFunction() {
5136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
5146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateClearPermitAccessFunction::
5166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ~EasyUnlockPrivateClearPermitAccessFunction() {
5176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
5186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool EasyUnlockPrivateClearPermitAccessFunction::RunSync() {
5206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  Profile* profile = Profile::FromBrowserContext(browser_context());
5216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EasyUnlockService::Get(profile)->ClearPermitAccess();
5226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return true;
5236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
5246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateSetRemoteDevicesFunction::
5266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockPrivateSetRemoteDevicesFunction() {
5276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
5286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateSetRemoteDevicesFunction::
5306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ~EasyUnlockPrivateSetRemoteDevicesFunction() {
5316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
5326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool EasyUnlockPrivateSetRemoteDevicesFunction::RunSync() {
5346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  scoped_ptr<easy_unlock_private::SetRemoteDevices::Params> params(
5356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      easy_unlock_private::SetRemoteDevices::Params::Create(*args_));
5366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params.get());
5376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  Profile* profile = Profile::FromBrowserContext(browser_context());
5396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (params->devices.empty()) {
5406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockService::Get(profile)->ClearRemoteDevices();
5416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  } else {
5426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    base::ListValue devices;
5436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    for (size_t i = 0; i < params->devices.size(); ++i) {
5446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      devices.Append(params->devices[i]->ToValue().release());
5456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
5466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockService::Get(profile)->SetRemoteDevices(devices);
5476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
5486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return true;
5506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
5516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateGetRemoteDevicesFunction::
5536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockPrivateGetRemoteDevicesFunction() {
5546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
5556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateGetRemoteDevicesFunction::
5576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ~EasyUnlockPrivateGetRemoteDevicesFunction() {
5586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
5596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool EasyUnlockPrivateGetRemoteDevicesFunction::RunSync() {
5616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  Profile* profile = Profile::FromBrowserContext(browser_context());
5626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const base::ListValue* devices =
5636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      EasyUnlockService::Get(profile)->GetRemoteDevices();
5646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  SetResult(devices ? devices->DeepCopy() : new base::ListValue());
5656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return true;
5666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
5676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciEasyUnlockPrivateGetSignInChallengeFunction::
5691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EasyUnlockPrivateGetSignInChallengeFunction() {
5701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciEasyUnlockPrivateGetSignInChallengeFunction::
5731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ~EasyUnlockPrivateGetSignInChallengeFunction() {
5741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool EasyUnlockPrivateGetSignInChallengeFunction::RunSync() {
5771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  Profile* profile = Profile::FromBrowserContext(browser_context());
5781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const std::string challenge =
5791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockService::Get(profile)->GetChallenge();
5801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!challenge.empty()) {
5811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    results_ =
5821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        easy_unlock_private::GetSignInChallenge::Results::Create(challenge);
5831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
5841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return true;
5851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciEasyUnlockPrivateTrySignInSecretFunction::
5881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EasyUnlockPrivateTrySignInSecretFunction() {
5891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciEasyUnlockPrivateTrySignInSecretFunction::
5921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ~EasyUnlockPrivateTrySignInSecretFunction() {
5931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool EasyUnlockPrivateTrySignInSecretFunction::RunSync() {
5961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<easy_unlock_private::TrySignInSecret::Params> params(
5971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      easy_unlock_private::TrySignInSecret::Params::Create(*args_));
5981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXTENSION_FUNCTION_VALIDATE(params.get());
5991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  Profile* profile = Profile::FromBrowserContext(browser_context());
6011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EasyUnlockService::Get(profile)->FinalizeSignin(params->sign_in_secret);
6021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return true;
6031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
6041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciEasyUnlockPrivateGetUserInfoFunction::EasyUnlockPrivateGetUserInfoFunction() {
6061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
6071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciEasyUnlockPrivateGetUserInfoFunction::~EasyUnlockPrivateGetUserInfoFunction() {
6091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
6101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool EasyUnlockPrivateGetUserInfoFunction::RunSync() {
6121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EasyUnlockService* service =
6131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockService::Get(Profile::FromBrowserContext(browser_context()));
6141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  std::vector<linked_ptr<easy_unlock_private::UserInfo> > users;
6151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  std::string user_id = service->GetUserEmail();
6161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!user_id.empty()) {
6171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    users.push_back(
6181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        linked_ptr<easy_unlock_private::UserInfo>(
6191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            new easy_unlock_private::UserInfo()));
6201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    users[0]->user_id = user_id;
6211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    users[0]->logged_in = service->GetType() == EasyUnlockService::TYPE_REGULAR;
6221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    users[0]->data_ready = users[0]->logged_in ||
6231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                           service->GetRemoteDevices() != NULL;
6241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
6251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  results_ = easy_unlock_private::GetUserInfo::Results::Create(users);
6261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return true;
6271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
6281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace api
6305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace extensions
631