easy_unlock_private_api.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
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"
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/common/extensions/api/easy_unlock_private.h"
1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/grit/generated_resources.h"
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/proximity_auth/bluetooth_util.h"
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/browser/browser_thread.h"
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/browser/browser_context_keyed_api_factory.h"
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(OS_CHROMEOS)
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/chromeos_utils.h"
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/user_manager/user.h"
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/user_manager/user_manager.h"
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace extensions {
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace api {
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace {
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static base::LazyInstance<BrowserContextKeyedAPIFactory<EasyUnlockPrivateAPI> >
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    g_factory = LAZY_INSTANCE_INITIALIZER;
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Utility method for getting the API's crypto delegate.
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateCryptoDelegate* GetCryptoDelegate(
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    content::BrowserContext* context) {
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return BrowserContextKeyedAPIFactory<EasyUnlockPrivateAPI>::Get(context)
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)             ->crypto_delegate();
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockScreenlockStateHandler::State ToScreenlockStateHandlerState(
476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    easy_unlock_private::State state) {
486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  switch (state) {
496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    case easy_unlock_private::STATE_NO_BLUETOOTH:
506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_NO_BLUETOOTH;
516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    case easy_unlock_private::STATE_BLUETOOTH_CONNECTING:
526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_BLUETOOTH_CONNECTING;
536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    case easy_unlock_private::STATE_NO_PHONE:
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_NO_PHONE;
556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    case easy_unlock_private::STATE_PHONE_NOT_AUTHENTICATED:
566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_PHONE_NOT_AUTHENTICATED;
576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    case easy_unlock_private::STATE_PHONE_LOCKED:
586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_PHONE_LOCKED;
596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    case easy_unlock_private::STATE_PHONE_UNLOCKABLE:
606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_PHONE_UNLOCKABLE;
616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    case easy_unlock_private::STATE_PHONE_NOT_NEARBY:
626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_PHONE_NOT_NEARBY;
6303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    case easy_unlock_private::STATE_PHONE_UNSUPPORTED:
6403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_PHONE_UNSUPPORTED;
656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    case easy_unlock_private::STATE_AUTHENTICATED:
666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED;
676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    default:
686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_INACTIVE;
696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// static
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)BrowserContextKeyedAPIFactory<EasyUnlockPrivateAPI>*
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    EasyUnlockPrivateAPI::GetFactoryInstance() {
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return g_factory.Pointer();
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateAPI::EasyUnlockPrivateAPI(content::BrowserContext* context)
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    : crypto_delegate_(EasyUnlockPrivateCryptoDelegate::Create()) {
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateAPI::~EasyUnlockPrivateAPI() {}
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateGetStringsFunction::EasyUnlockPrivateGetStringsFunction() {
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateGetStringsFunction::~EasyUnlockPrivateGetStringsFunction() {
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivateGetStringsFunction::RunSync() {
925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<base::DictionaryValue> strings(new base::DictionaryValue);
935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(OS_CHROMEOS)
955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const base::string16 device_type = chromeos::GetChromeDeviceType();
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(isherman): Set an appropriate device name for non-ChromeOS devices.
985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const base::string16 device_type = base::ASCIIToUTF16("Chromeschnozzle");
995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif  // defined(OS_CHROMEOS)
1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_CHROMEOS)
1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const user_manager::UserManager* manager = user_manager::UserManager::Get();
1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const user_manager::User* user = manager ? manager->GetActiveUser() : NULL;
1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const std::string user_email_utf8 =
1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      user ? user->display_email() : std::string();
1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const base::string16 user_email = base::UTF8ToUTF16(user_email_utf8);
1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#else
1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // TODO(isherman): Set an appropriate user display email for non-ChromeOS
1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // platforms.
1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const base::string16 user_email = base::UTF8ToUTF16("superman@example.com");
1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif  // defined(OS_CHROMEOS)
1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Common strings.
1146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  strings->SetString(
1156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "learnMoreLinkTitle",
1166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_EASY_UNLOCK_LEARN_MORE_LINK_TITLE));
1176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Setup notification strings.
1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupNotificationTitle",
1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_EASY_UNLOCK_SETUP_NOTIFICATION_TITLE,
1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                 device_type));
1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupNotificationMessage",
1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_EASY_UNLOCK_SETUP_NOTIFICATION_MESSAGE,
1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                 device_type));
1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupNotificationButtonTitle",
1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_NOTIFICATION_BUTTON_TITLE));
1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Success notification strings.
1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "successNotificationTitle",
1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_EASY_UNLOCK_SUCCESS_NOTIFICATION_TITLE));
1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "successNotificationMessage",
1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_EASY_UNLOCK_SUCCESS_NOTIFICATION_MESSAGE,
1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                 device_type));
1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Chromebook added to Easy Unlock notification strings.
1426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  strings->SetString(
1436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "chromebookAddedNotificationTitle",
1446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      l10n_util::GetStringUTF16(
1456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          IDS_EASY_UNLOCK_CHROMEBOOK_ADDED_NOTIFICATION_TITLE));
1466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  strings->SetString(
1476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     "chromebookAddedNotificationMessage",
1486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     l10n_util::GetStringFUTF16(
1496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          IDS_EASY_UNLOCK_CHROMEBOOK_ADDED_NOTIFICATION_MESSAGE,
1506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          device_type));
1516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Setup dialog strings.
1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Step 1: Intro.
1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroHeaderTitle",
1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_HEADER_TITLE, device_type));
1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroHeaderText",
1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      l10n_util::GetStringFUTF16(IDS_EASY_UNLOCK_SETUP_INTRO_HEADER_TEXT,
1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                 device_type,
1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                 user_email));
1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroFindPhoneButtonLabel",
1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_FIND_PHONE_BUTTON_LABEL));
1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroFindingPhoneButtonLabel",
1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_FINDING_PHONE_BUTTON_LABEL));
1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "setupIntroRetryFindPhoneButtonLabel",
1736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      l10n_util::GetStringUTF16(
1746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_RETRY_FIND_PHONE_BUTTON_LABEL));
1756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  strings->SetString(
1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroHowIsThisSecureLinkText",
1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_HOW_IS_THIS_SECURE_LINK_TEXT));
1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Step 2: Found a viable phone.
1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupFoundPhoneHeaderTitle",
1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_FOUND_PHONE_HEADER_TITLE, device_type));
1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupFoundPhoneHeaderText",
1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_FOUND_PHONE_HEADER_TEXT, device_type));
1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupFoundPhoneUseThisPhoneButtonLabel",
1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_FOUND_PHONE_USE_THIS_PHONE_BUTTON_LABEL));
1926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  strings->SetString(
1936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "setupPairingPhoneFailedButtonLabel",
1946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      l10n_util::GetStringUTF16(
1956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_PAIRING_PHONE_FAILED_BUTTON_LABEL));
1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Step 3: Setup completed successfully.
1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupCompleteHeaderTitle",
1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
2005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_COMPLETE_HEADER_TITLE));
2015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupCompleteHeaderText",
2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_COMPLETE_HEADER_TEXT));
2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupCompleteTryItOutButtonLabel",
2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
2085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_COMPLETE_TRY_IT_OUT_BUTTON_LABEL));
2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupCompleteSettingsLinkText",
2115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
2125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_COMPLETE_SETTINGS_LINK_TEXT));
2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Error strings.
2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupErrorBluetoothUnavailable",
2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_ERROR_BLUETOOTH_UNAVAILBLE, device_type));
2195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupErrorOffline",
2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
2225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_ERROR_OFFLINE, device_type));
2235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupErrorFindingPhone",
2255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_EASY_UNLOCK_SETUP_ERROR_FINDING_PHONE));
2265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupErrorBluetoothConnectionFailed",
2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_ERROR_BLUETOOTH_CONNECTION_FAILED,
2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          device_type));
2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "setupErrorConnectionToPhoneTimeout",
2336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)       l10n_util::GetStringFUTF16(
2346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)           IDS_EASY_UNLOCK_SETUP_ERROR_CONNECT_TO_PHONE_TIMEOUT,
2356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)           device_type));
2366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  strings->SetString(
2376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "setupErrorSyncPhoneState",
2386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)       l10n_util::GetStringUTF16(
2396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)           IDS_EASY_UNLOCK_SETUP_ERROR_SYNC_PHONE_STATE_FAILED));
2406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  strings->SetString(
2415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupErrorConnectingToPhone",
2425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
2435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_ERROR_CONNECTING_TO_PHONE, device_type));
2445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // TODO(isherman): Remove this string once the app has been updated.
2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  strings->SetString("setupIntroHeaderFootnote", base::string16());
2475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SetResult(strings.release());
2495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
2505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivatePerformECDHKeyAgreementFunction::
2535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivatePerformECDHKeyAgreementFunction() {}
2545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivatePerformECDHKeyAgreementFunction::
2565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)~EasyUnlockPrivatePerformECDHKeyAgreementFunction() {}
2575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivatePerformECDHKeyAgreementFunction::RunAsync() {
2595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<easy_unlock_private::PerformECDHKeyAgreement::Params> params =
2605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      easy_unlock_private::PerformECDHKeyAgreement::Params::Create(*args_);
2615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params);
2625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GetCryptoDelegate(browser_context())->PerformECDHKeyAgreement(
2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      *params,
2655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(&EasyUnlockPrivatePerformECDHKeyAgreementFunction::OnData,
2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                 this));
2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void EasyUnlockPrivatePerformECDHKeyAgreementFunction::OnData(
2715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& secret_key) {
2725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(tbarzic): Improve error handling.
2735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!secret_key.empty()) {
2745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    results_ = easy_unlock_private::PerformECDHKeyAgreement::Results::Create(
2755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        secret_key);
2765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
2775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SendResponse(true);
2785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateGenerateEcP256KeyPairFunction::
2815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateGenerateEcP256KeyPairFunction() {}
2825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateGenerateEcP256KeyPairFunction::
2845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)~EasyUnlockPrivateGenerateEcP256KeyPairFunction() {}
2855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivateGenerateEcP256KeyPairFunction::RunAsync() {
2875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GetCryptoDelegate(browser_context())->GenerateEcP256KeyPair(
2885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(&EasyUnlockPrivateGenerateEcP256KeyPairFunction::OnData,
2895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                 this));
2905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
2915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void EasyUnlockPrivateGenerateEcP256KeyPairFunction::OnData(
2945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& private_key,
2955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& public_key) {
2965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(tbarzic): Improve error handling.
2975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!public_key.empty() && !private_key.empty()) {
2985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    results_ = easy_unlock_private::GenerateEcP256KeyPair::Results::Create(
2995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        public_key, private_key);
3005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
3015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SendResponse(true);
3025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateCreateSecureMessageFunction::
3055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateCreateSecureMessageFunction() {}
3065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateCreateSecureMessageFunction::
3085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)~EasyUnlockPrivateCreateSecureMessageFunction() {}
3095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivateCreateSecureMessageFunction::RunAsync() {
3115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<easy_unlock_private::CreateSecureMessage::Params> params =
3125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      easy_unlock_private::CreateSecureMessage::Params::Create(*args_);
3135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params);
3145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GetCryptoDelegate(browser_context())->CreateSecureMessage(
3161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      *params,
3175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(&EasyUnlockPrivateCreateSecureMessageFunction::OnData,
3185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                 this));
3195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
3205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void EasyUnlockPrivateCreateSecureMessageFunction::OnData(
3235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& message) {
3245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(tbarzic): Improve error handling.
3255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!message.empty()) {
3265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    results_ = easy_unlock_private::CreateSecureMessage::Results::Create(
3275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        message);
3285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
3295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SendResponse(true);
3305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateUnwrapSecureMessageFunction::
3335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateUnwrapSecureMessageFunction() {}
3345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateUnwrapSecureMessageFunction::
3365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)~EasyUnlockPrivateUnwrapSecureMessageFunction() {}
3375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivateUnwrapSecureMessageFunction::RunAsync() {
3395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<easy_unlock_private::UnwrapSecureMessage::Params> params =
3405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      easy_unlock_private::UnwrapSecureMessage::Params::Create(*args_);
3415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params);
3425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GetCryptoDelegate(browser_context())->UnwrapSecureMessage(
3441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      *params,
3455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(&EasyUnlockPrivateUnwrapSecureMessageFunction::OnData,
3465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                 this));
3475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
3485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void EasyUnlockPrivateUnwrapSecureMessageFunction::OnData(
3515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& data) {
3525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(tbarzic): Improve error handling.
3535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!data.empty())
3545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    results_ = easy_unlock_private::UnwrapSecureMessage::Results::Create(data);
3555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SendResponse(true);
3565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::
3595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction() {}
3605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::
3625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ~EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction() {}
3635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::RunAsync() {
3655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<easy_unlock_private::SeekBluetoothDeviceByAddress::Params> params(
3665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      easy_unlock_private::SeekBluetoothDeviceByAddress::Params::Create(
3675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          *args_));
3685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params.get());
3695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  proximity_auth::bluetooth_util::SeekDeviceByAddress(
3715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->device_address,
3725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(
3731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          &EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::OnSeekSuccess,
3741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          this),
3751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      base::Bind(
3761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          &EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::OnSeekFailure,
3771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          this),
3781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      content::BrowserThread::GetBlockingPool());
3795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
3805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::OnSeekSuccess() {
3831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SendResponse(true);
3841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
3851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::OnSeekFailure(
3871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const std::string& error_message) {
3881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetError(error_message);
3891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SendResponse(false);
3905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
39203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)EasyUnlockPrivateConnectToBluetoothServiceInsecurelyFunction::
39303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    EasyUnlockPrivateConnectToBluetoothServiceInsecurelyFunction() {}
39403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
39503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)EasyUnlockPrivateConnectToBluetoothServiceInsecurelyFunction::
39603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    ~EasyUnlockPrivateConnectToBluetoothServiceInsecurelyFunction() {}
39703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
39803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void EasyUnlockPrivateConnectToBluetoothServiceInsecurelyFunction::
39903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    ConnectToService(device::BluetoothDevice* device,
40003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                     const device::BluetoothUUID& uuid) {
4011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  proximity_auth::bluetooth_util::ConnectToServiceInsecurely(
40203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      device,
40303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      uuid,
40403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      base::Bind(&EasyUnlockPrivateConnectToBluetoothServiceInsecurelyFunction::
40503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                     OnConnect,
40603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                 this),
40703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      base::Bind(&EasyUnlockPrivateConnectToBluetoothServiceInsecurelyFunction::
40803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                     OnConnectError,
40903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                 this));
41003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
41103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
4126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateUpdateScreenlockStateFunction::
4136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockPrivateUpdateScreenlockStateFunction() {}
4146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateUpdateScreenlockStateFunction::
4166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ~EasyUnlockPrivateUpdateScreenlockStateFunction() {}
4176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool EasyUnlockPrivateUpdateScreenlockStateFunction::RunSync() {
4196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  scoped_ptr<easy_unlock_private::UpdateScreenlockState::Params> params(
4206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      easy_unlock_private::UpdateScreenlockState::Params::Create(*args_));
4216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params.get());
4226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  Profile* profile = Profile::FromBrowserContext(browser_context());
4241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (EasyUnlockService::Get(profile)->UpdateScreenlockState(
4251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          ToScreenlockStateHandlerState(params->state)))
4266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    return true;
4276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  SetError("Not allowed");
4296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return false;
4306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateSetPermitAccessFunction::
4336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockPrivateSetPermitAccessFunction() {
4346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateSetPermitAccessFunction::
4376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ~EasyUnlockPrivateSetPermitAccessFunction() {
4386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool EasyUnlockPrivateSetPermitAccessFunction::RunSync() {
4416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  scoped_ptr<easy_unlock_private::SetPermitAccess::Params> params(
4426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      easy_unlock_private::SetPermitAccess::Params::Create(*args_));
4436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params.get());
4446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  Profile* profile = Profile::FromBrowserContext(browser_context());
4466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EasyUnlockService::Get(profile)
4476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      ->SetPermitAccess(*params->permit_access.ToValue());
4486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return true;
4506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateGetPermitAccessFunction::
4536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockPrivateGetPermitAccessFunction() {
4546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateGetPermitAccessFunction::
4576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ~EasyUnlockPrivateGetPermitAccessFunction() {
4586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool EasyUnlockPrivateGetPermitAccessFunction::RunSync() {
4616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  Profile* profile = Profile::FromBrowserContext(browser_context());
4626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const base::DictionaryValue* permit_value =
4636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      EasyUnlockService::Get(profile)->GetPermitAccess();
4646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (permit_value) {
4656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    scoped_ptr<easy_unlock_private::PermitRecord> permit =
4666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        easy_unlock_private::PermitRecord::FromValue(*permit_value);
4676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    results_ = easy_unlock_private::GetPermitAccess::Results::Create(*permit);
4686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
4696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return true;
4716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateClearPermitAccessFunction::
4746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockPrivateClearPermitAccessFunction() {
4756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateClearPermitAccessFunction::
4786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ~EasyUnlockPrivateClearPermitAccessFunction() {
4796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool EasyUnlockPrivateClearPermitAccessFunction::RunSync() {
4826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  Profile* profile = Profile::FromBrowserContext(browser_context());
4836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EasyUnlockService::Get(profile)->ClearPermitAccess();
4846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return true;
4856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateSetRemoteDevicesFunction::
4886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockPrivateSetRemoteDevicesFunction() {
4896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateSetRemoteDevicesFunction::
4926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ~EasyUnlockPrivateSetRemoteDevicesFunction() {
4936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool EasyUnlockPrivateSetRemoteDevicesFunction::RunSync() {
4966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  scoped_ptr<easy_unlock_private::SetRemoteDevices::Params> params(
4976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      easy_unlock_private::SetRemoteDevices::Params::Create(*args_));
4986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params.get());
4996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  Profile* profile = Profile::FromBrowserContext(browser_context());
5016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (params->devices.empty()) {
5026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockService::Get(profile)->ClearRemoteDevices();
5036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  } else {
5046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    base::ListValue devices;
5056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    for (size_t i = 0; i < params->devices.size(); ++i) {
5066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      devices.Append(params->devices[i]->ToValue().release());
5076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
5086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockService::Get(profile)->SetRemoteDevices(devices);
5096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
5106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return true;
5126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
5136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateGetRemoteDevicesFunction::
5156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockPrivateGetRemoteDevicesFunction() {
5166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
5176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateGetRemoteDevicesFunction::
5196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ~EasyUnlockPrivateGetRemoteDevicesFunction() {
5206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
5216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool EasyUnlockPrivateGetRemoteDevicesFunction::RunSync() {
5236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  Profile* profile = Profile::FromBrowserContext(browser_context());
5246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const base::ListValue* devices =
5256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      EasyUnlockService::Get(profile)->GetRemoteDevices();
5266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  SetResult(devices ? devices->DeepCopy() : new base::ListValue());
5276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return true;
5286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
5296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciEasyUnlockPrivateGetSignInChallengeFunction::
5311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EasyUnlockPrivateGetSignInChallengeFunction() {
5321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciEasyUnlockPrivateGetSignInChallengeFunction::
5351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ~EasyUnlockPrivateGetSignInChallengeFunction() {
5361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool EasyUnlockPrivateGetSignInChallengeFunction::RunSync() {
5391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  Profile* profile = Profile::FromBrowserContext(browser_context());
5401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const std::string challenge =
5411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockService::Get(profile)->GetChallenge();
5421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!challenge.empty()) {
5431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    results_ =
5441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        easy_unlock_private::GetSignInChallenge::Results::Create(challenge);
5451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
5461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return true;
5471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciEasyUnlockPrivateTrySignInSecretFunction::
5501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EasyUnlockPrivateTrySignInSecretFunction() {
5511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciEasyUnlockPrivateTrySignInSecretFunction::
5541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ~EasyUnlockPrivateTrySignInSecretFunction() {
5551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool EasyUnlockPrivateTrySignInSecretFunction::RunSync() {
5581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<easy_unlock_private::TrySignInSecret::Params> params(
5591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      easy_unlock_private::TrySignInSecret::Params::Create(*args_));
5601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXTENSION_FUNCTION_VALIDATE(params.get());
5611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  Profile* profile = Profile::FromBrowserContext(browser_context());
5631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EasyUnlockService::Get(profile)->FinalizeSignin(params->sign_in_secret);
5641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return true;
5651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciEasyUnlockPrivateGetUserInfoFunction::EasyUnlockPrivateGetUserInfoFunction() {
5681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciEasyUnlockPrivateGetUserInfoFunction::~EasyUnlockPrivateGetUserInfoFunction() {
5711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool EasyUnlockPrivateGetUserInfoFunction::RunSync() {
5741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EasyUnlockService* service =
5751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockService::Get(Profile::FromBrowserContext(browser_context()));
5761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  std::vector<linked_ptr<easy_unlock_private::UserInfo> > users;
5771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  std::string user_id = service->GetUserEmail();
5781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!user_id.empty()) {
5791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    users.push_back(
5801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        linked_ptr<easy_unlock_private::UserInfo>(
5811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            new easy_unlock_private::UserInfo()));
5821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    users[0]->user_id = user_id;
5831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    users[0]->logged_in = service->GetType() == EasyUnlockService::TYPE_REGULAR;
5841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    users[0]->data_ready = users[0]->logged_in ||
5851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                           service->GetRemoteDevices() != NULL;
5861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
5871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  results_ = easy_unlock_private::GetUserInfo::Results::Create(users);
5881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return true;
5891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace api
5925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace extensions
593