easy_unlock_private_api.cc revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
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)
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/bind.h"
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/lazy_instance.h"
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/strings/utf_string_conversions.h"
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/values.h"
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/extensions/api/easy_unlock_private/easy_unlock_private_bluetooth_util.h"
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/extensions/api/easy_unlock_private/easy_unlock_private_crypto_delegate.h"
136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/signin/easy_unlock_screenlock_state_handler.h"
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/signin/easy_unlock_service.h"
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/common/extensions/api/easy_unlock_private.h"
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/browser/browser_context_keyed_api_factory.h"
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "grit/generated_resources.h"
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(OS_CHROMEOS)
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/chromeos_utils.h"
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace extensions {
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace api {
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace {
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static base::LazyInstance<BrowserContextKeyedAPIFactory<EasyUnlockPrivateAPI> >
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    g_factory = LAZY_INSTANCE_INITIALIZER;
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Utility method for getting the API's crypto delegate.
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateCryptoDelegate* GetCryptoDelegate(
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    content::BrowserContext* context) {
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return BrowserContextKeyedAPIFactory<EasyUnlockPrivateAPI>::Get(context)
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)             ->crypto_delegate();
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockScreenlockStateHandler* GetScreenlockStateHandler(
416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    content::BrowserContext* context) {
426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return EasyUnlockService::Get(Profile::FromBrowserContext(context))
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      ->GetScreenlockStateHandler();
446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (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;
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    case easy_unlock_private::STATE_AUTHENTICATED:
646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED;
656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    default:
666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return EasyUnlockScreenlockStateHandler::STATE_INACTIVE;
676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// static
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)BrowserContextKeyedAPIFactory<EasyUnlockPrivateAPI>*
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    EasyUnlockPrivateAPI::GetFactoryInstance() {
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return g_factory.Pointer();
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateAPI::EasyUnlockPrivateAPI(content::BrowserContext* context)
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    : crypto_delegate_(EasyUnlockPrivateCryptoDelegate::Create()) {
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateAPI::~EasyUnlockPrivateAPI() {}
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateGetStringsFunction::EasyUnlockPrivateGetStringsFunction() {
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateGetStringsFunction::~EasyUnlockPrivateGetStringsFunction() {
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivateGetStringsFunction::RunSync() {
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<base::DictionaryValue> strings(new base::DictionaryValue);
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(OS_CHROMEOS)
935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const base::string16 device_type = chromeos::GetChromeDeviceType();
945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(isherman): Set an appropriate device name for non-ChromeOS devices.
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const base::string16 device_type = base::ASCIIToUTF16("Chromeschnozzle");
975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif  // defined(OS_CHROMEOS)
985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Common strings.
1006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  strings->SetString(
1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "learnMoreLinkTitle",
1026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_EASY_UNLOCK_LEARN_MORE_LINK_TITLE));
1036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Setup notification strings.
1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupNotificationTitle",
1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_EASY_UNLOCK_SETUP_NOTIFICATION_TITLE,
1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                 device_type));
1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupNotificationMessage",
1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_EASY_UNLOCK_SETUP_NOTIFICATION_MESSAGE,
1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                 device_type));
1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupNotificationButtonTitle",
1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_NOTIFICATION_BUTTON_TITLE));
1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Success notification strings.
1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "successNotificationTitle",
1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_EASY_UNLOCK_SUCCESS_NOTIFICATION_TITLE));
1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "successNotificationMessage",
1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_EASY_UNLOCK_SUCCESS_NOTIFICATION_MESSAGE,
1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                 device_type));
1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Chromebook added to Easy Unlock notification strings.
1286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  strings->SetString(
1296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "chromebookAddedNotificationTitle",
1306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      l10n_util::GetStringUTF16(
1316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          IDS_EASY_UNLOCK_CHROMEBOOK_ADDED_NOTIFICATION_TITLE));
1326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  strings->SetString(
1336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     "chromebookAddedNotificationMessage",
1346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     l10n_util::GetStringFUTF16(
1356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          IDS_EASY_UNLOCK_CHROMEBOOK_ADDED_NOTIFICATION_MESSAGE,
1366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          device_type));
1376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Setup dialog strings.
1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Step 1: Intro.
1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroHeaderTitle",
1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_HEADER_TITLE, device_type));
1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroHeaderText",
1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_HEADER_TEXT, device_type));
1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroHeaderFootnote",
1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_HEADER_FOOTNOTE));
1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroFindPhoneButtonLabel",
1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_FIND_PHONE_BUTTON_LABEL));
1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroFindingPhoneButtonLabel",
1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_FINDING_PHONE_BUTTON_LABEL));
1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "setupIntroRetryFindPhoneButtonLabel",
1626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      l10n_util::GetStringUTF16(
1636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_RETRY_FIND_PHONE_BUTTON_LABEL));
1646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  strings->SetString(
1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroHowIsThisSecureLinkText",
1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_HOW_IS_THIS_SECURE_LINK_TEXT));
1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Step 2: Found a viable phone.
1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupFoundPhoneHeaderTitle",
1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_FOUND_PHONE_HEADER_TITLE, device_type));
1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupFoundPhoneHeaderText",
1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_FOUND_PHONE_HEADER_TEXT, device_type));
1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupFoundPhoneUseThisPhoneButtonLabel",
1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_FOUND_PHONE_USE_THIS_PHONE_BUTTON_LABEL));
1816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  strings->SetString(
1826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "setupPairingPhoneFailedButtonLabel",
1836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      l10n_util::GetStringUTF16(
1846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_PAIRING_PHONE_FAILED_BUTTON_LABEL));
1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Step 3: Setup completed successfully.
1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupCompleteHeaderTitle",
1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_COMPLETE_HEADER_TITLE));
1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupCompleteHeaderText",
1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_COMPLETE_HEADER_TEXT));
1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupCompleteTryItOutButtonLabel",
1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_COMPLETE_TRY_IT_OUT_BUTTON_LABEL));
1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupCompleteSettingsLinkText",
2005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
2015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_COMPLETE_SETTINGS_LINK_TEXT));
2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Error strings.
2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupErrorBluetoothUnavailable",
2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_ERROR_BLUETOOTH_UNAVAILBLE, device_type));
2085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupErrorOffline",
2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
2115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_ERROR_OFFLINE, device_type));
2125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupErrorFindingPhone",
2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_EASY_UNLOCK_SETUP_ERROR_FINDING_PHONE));
2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupErrorBluetoothConnectionFailed",
2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_ERROR_BLUETOOTH_CONNECTION_FAILED,
2195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          device_type));
2205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "setupErrorConnectionToPhoneTimeout",
2226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)       l10n_util::GetStringFUTF16(
2236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)           IDS_EASY_UNLOCK_SETUP_ERROR_CONNECT_TO_PHONE_TIMEOUT,
2246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)           device_type));
2256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  strings->SetString(
2266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "setupErrorSyncPhoneState",
2276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)       l10n_util::GetStringUTF16(
2286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)           IDS_EASY_UNLOCK_SETUP_ERROR_SYNC_PHONE_STATE_FAILED));
2296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  strings->SetString(
2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupErrorConnectingToPhone",
2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
2325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_ERROR_CONNECTING_TO_PHONE, device_type));
2335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(isherman): Remove these strings once the app has been updated.
2355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "notificationTitle",
2375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_EASY_UNLOCK_SETUP_NOTIFICATION_TITLE,
2385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                 device_type));
2395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "notificationMessage",
2415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_EASY_UNLOCK_SETUP_NOTIFICATION_MESSAGE,
2425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                 device_type));
2435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
2445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "notificationButtonTitle",
2455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
2465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_NOTIFICATION_BUTTON_TITLE));
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(
2645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->private_key,
2655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->public_key,
2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(&EasyUnlockPrivatePerformECDHKeyAgreementFunction::OnData,
2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                 this));
2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void EasyUnlockPrivatePerformECDHKeyAgreementFunction::OnData(
2725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& secret_key) {
2735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(tbarzic): Improve error handling.
2745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!secret_key.empty()) {
2755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    results_ = easy_unlock_private::PerformECDHKeyAgreement::Results::Create(
2765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        secret_key);
2775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
2785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SendResponse(true);
2795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateGenerateEcP256KeyPairFunction::
2825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateGenerateEcP256KeyPairFunction() {}
2835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateGenerateEcP256KeyPairFunction::
2855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)~EasyUnlockPrivateGenerateEcP256KeyPairFunction() {}
2865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivateGenerateEcP256KeyPairFunction::RunAsync() {
2885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GetCryptoDelegate(browser_context())->GenerateEcP256KeyPair(
2895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(&EasyUnlockPrivateGenerateEcP256KeyPairFunction::OnData,
2905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                 this));
2915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
2925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void EasyUnlockPrivateGenerateEcP256KeyPairFunction::OnData(
2955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& private_key,
2965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& public_key) {
2975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(tbarzic): Improve error handling.
2985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!public_key.empty() && !private_key.empty()) {
2995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    results_ = easy_unlock_private::GenerateEcP256KeyPair::Results::Create(
3005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        public_key, private_key);
3015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
3025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SendResponse(true);
3035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateCreateSecureMessageFunction::
3065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateCreateSecureMessageFunction() {}
3075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateCreateSecureMessageFunction::
3095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)~EasyUnlockPrivateCreateSecureMessageFunction() {}
3105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivateCreateSecureMessageFunction::RunAsync() {
3125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<easy_unlock_private::CreateSecureMessage::Params> params =
3135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      easy_unlock_private::CreateSecureMessage::Params::Create(*args_);
3145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params);
3155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GetCryptoDelegate(browser_context())->CreateSecureMessage(
3175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->payload,
3185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->key,
3195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->options.associated_data ?
3205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          *params->options.associated_data : std::string(),
3215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->options.public_metadata ?
3225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          *params->options.public_metadata : std::string(),
3235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->options.verification_key_id ?
3245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          *params->options.verification_key_id : std::string(),
3255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->options.encrypt_type,
3265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->options.sign_type,
3275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(&EasyUnlockPrivateCreateSecureMessageFunction::OnData,
3285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                 this));
3295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
3305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void EasyUnlockPrivateCreateSecureMessageFunction::OnData(
3335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& message) {
3345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(tbarzic): Improve error handling.
3355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!message.empty()) {
3365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    results_ = easy_unlock_private::CreateSecureMessage::Results::Create(
3375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        message);
3385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
3395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SendResponse(true);
3405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateUnwrapSecureMessageFunction::
3435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateUnwrapSecureMessageFunction() {}
3445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateUnwrapSecureMessageFunction::
3465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)~EasyUnlockPrivateUnwrapSecureMessageFunction() {}
3475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivateUnwrapSecureMessageFunction::RunAsync() {
3495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<easy_unlock_private::UnwrapSecureMessage::Params> params =
3505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      easy_unlock_private::UnwrapSecureMessage::Params::Create(*args_);
3515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params);
3525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GetCryptoDelegate(browser_context())->UnwrapSecureMessage(
3545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->secure_message,
3555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->key,
3565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->options.associated_data ?
3575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          *params->options.associated_data : std::string(),
3585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->options.encrypt_type,
3595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->options.sign_type,
3605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(&EasyUnlockPrivateUnwrapSecureMessageFunction::OnData,
3615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                 this));
3625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
3635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void EasyUnlockPrivateUnwrapSecureMessageFunction::OnData(
3665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& data) {
3675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(tbarzic): Improve error handling.
3685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!data.empty())
3695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    results_ = easy_unlock_private::UnwrapSecureMessage::Results::Create(data);
3705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SendResponse(true);
3715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::
3745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction() {}
3755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::
3775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ~EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction() {}
3785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::RunAsync() {
3805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<easy_unlock_private::SeekBluetoothDeviceByAddress::Params> params(
3815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      easy_unlock_private::SeekBluetoothDeviceByAddress::Params::Create(
3825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          *args_));
3835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params.get());
3845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  easy_unlock::SeekBluetoothDeviceByAddress(
3865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->device_address,
3875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(
3885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          &EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::
3895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              OnSeekCompleted,
3905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          this));
3915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
3925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::OnSeekCompleted(
3955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const easy_unlock::SeekDeviceResult& seek_result) {
3965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (seek_result.success) {
3975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    SendResponse(true);
3985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  } else {
3995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    SetError(seek_result.error_message);
4005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    SendResponse(false);
4015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
4025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
4035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateUpdateScreenlockStateFunction::
4056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockPrivateUpdateScreenlockStateFunction() {}
4066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateUpdateScreenlockStateFunction::
4086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ~EasyUnlockPrivateUpdateScreenlockStateFunction() {}
4096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool EasyUnlockPrivateUpdateScreenlockStateFunction::RunSync() {
4116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  scoped_ptr<easy_unlock_private::UpdateScreenlockState::Params> params(
4126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      easy_unlock_private::UpdateScreenlockState::Params::Create(*args_));
4136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params.get());
4146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EasyUnlockScreenlockStateHandler* screenlock_state_handler =
4166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      GetScreenlockStateHandler(browser_context());
4176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (screenlock_state_handler) {
4186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    screenlock_state_handler->ChangeState(
4196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        ToScreenlockStateHandlerState(params->state));
4206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    return true;
4216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
4226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  SetError("Not allowed");
4246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return false;
4256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateSetPermitAccessFunction::
4286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockPrivateSetPermitAccessFunction() {
4296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateSetPermitAccessFunction::
4326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ~EasyUnlockPrivateSetPermitAccessFunction() {
4336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool EasyUnlockPrivateSetPermitAccessFunction::RunSync() {
4366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  scoped_ptr<easy_unlock_private::SetPermitAccess::Params> params(
4376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      easy_unlock_private::SetPermitAccess::Params::Create(*args_));
4386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params.get());
4396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  Profile* profile = Profile::FromBrowserContext(browser_context());
4416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EasyUnlockService::Get(profile)
4426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      ->SetPermitAccess(*params->permit_access.ToValue());
4436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return true;
4456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateGetPermitAccessFunction::
4486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockPrivateGetPermitAccessFunction() {
4496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateGetPermitAccessFunction::
4526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ~EasyUnlockPrivateGetPermitAccessFunction() {
4536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool EasyUnlockPrivateGetPermitAccessFunction::RunSync() {
4566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  Profile* profile = Profile::FromBrowserContext(browser_context());
4576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const base::DictionaryValue* permit_value =
4586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      EasyUnlockService::Get(profile)->GetPermitAccess();
4596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (permit_value) {
4606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    scoped_ptr<easy_unlock_private::PermitRecord> permit =
4616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        easy_unlock_private::PermitRecord::FromValue(*permit_value);
4626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    results_ = easy_unlock_private::GetPermitAccess::Results::Create(*permit);
4636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
4646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return true;
4666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateClearPermitAccessFunction::
4696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockPrivateClearPermitAccessFunction() {
4706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateClearPermitAccessFunction::
4736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ~EasyUnlockPrivateClearPermitAccessFunction() {
4746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool EasyUnlockPrivateClearPermitAccessFunction::RunSync() {
4776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  Profile* profile = Profile::FromBrowserContext(browser_context());
4786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EasyUnlockService::Get(profile)->ClearPermitAccess();
4796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return true;
4806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateSetRemoteDevicesFunction::
4836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockPrivateSetRemoteDevicesFunction() {
4846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateSetRemoteDevicesFunction::
4876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ~EasyUnlockPrivateSetRemoteDevicesFunction() {
4886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool EasyUnlockPrivateSetRemoteDevicesFunction::RunSync() {
4916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  scoped_ptr<easy_unlock_private::SetRemoteDevices::Params> params(
4926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      easy_unlock_private::SetRemoteDevices::Params::Create(*args_));
4936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params.get());
4946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  Profile* profile = Profile::FromBrowserContext(browser_context());
4966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (params->devices.empty()) {
4976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockService::Get(profile)->ClearRemoteDevices();
4986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  } else {
4996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    base::ListValue devices;
5006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    for (size_t i = 0; i < params->devices.size(); ++i) {
5016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      devices.Append(params->devices[i]->ToValue().release());
5026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
5036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockService::Get(profile)->SetRemoteDevices(devices);
5046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
5056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return true;
5076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
5086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateGetRemoteDevicesFunction::
5106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    EasyUnlockPrivateGetRemoteDevicesFunction() {
5116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
5126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockPrivateGetRemoteDevicesFunction::
5146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ~EasyUnlockPrivateGetRemoteDevicesFunction() {
5156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
5166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool EasyUnlockPrivateGetRemoteDevicesFunction::RunSync() {
5186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  Profile* profile = Profile::FromBrowserContext(browser_context());
5196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const base::ListValue* devices =
5206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      EasyUnlockService::Get(profile)->GetRemoteDevices();
5216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  SetResult(devices ? devices->DeepCopy() : new base::ListValue());
5226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return true;
5236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
5246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
5255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace api
5265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace extensions
527