easy_unlock_private_api.cc revision 5f1c94371a64b3196d4be9466099bb892df9b88e
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"
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/common/extensions/api/easy_unlock_private.h"
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/browser/browser_context_keyed_api_factory.h"
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "grit/generated_resources.h"
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(OS_CHROMEOS)
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/chromeos_utils.h"
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace extensions {
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace api {
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace {
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static base::LazyInstance<BrowserContextKeyedAPIFactory<EasyUnlockPrivateAPI> >
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    g_factory = LAZY_INSTANCE_INITIALIZER;
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Utility method for getting the API's crypto delegate.
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateCryptoDelegate* GetCryptoDelegate(
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    content::BrowserContext* context) {
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return BrowserContextKeyedAPIFactory<EasyUnlockPrivateAPI>::Get(context)
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)             ->crypto_delegate();
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// static
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)BrowserContextKeyedAPIFactory<EasyUnlockPrivateAPI>*
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    EasyUnlockPrivateAPI::GetFactoryInstance() {
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return g_factory.Pointer();
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateAPI::EasyUnlockPrivateAPI(content::BrowserContext* context)
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    : crypto_delegate_(EasyUnlockPrivateCryptoDelegate::Create()) {
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateAPI::~EasyUnlockPrivateAPI() {}
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateGetStringsFunction::EasyUnlockPrivateGetStringsFunction() {
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateGetStringsFunction::~EasyUnlockPrivateGetStringsFunction() {
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivateGetStringsFunction::RunSync() {
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<base::DictionaryValue> strings(new base::DictionaryValue);
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(OS_CHROMEOS)
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const base::string16 device_type = chromeos::GetChromeDeviceType();
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(isherman): Set an appropriate device name for non-ChromeOS devices.
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const base::string16 device_type = base::ASCIIToUTF16("Chromeschnozzle");
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif  // defined(OS_CHROMEOS)
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Setup notification strings.
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupNotificationTitle",
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_EASY_UNLOCK_SETUP_NOTIFICATION_TITLE,
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                 device_type));
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupNotificationMessage",
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_EASY_UNLOCK_SETUP_NOTIFICATION_MESSAGE,
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                 device_type));
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupNotificationButtonTitle",
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_NOTIFICATION_BUTTON_TITLE));
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Success notification strings.
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "successNotificationTitle",
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_EASY_UNLOCK_SUCCESS_NOTIFICATION_TITLE));
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "successNotificationMessage",
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_EASY_UNLOCK_SUCCESS_NOTIFICATION_MESSAGE,
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                 device_type));
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Setup dialog strings.
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Step 1: Intro.
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroHeaderTitle",
935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_HEADER_TITLE, device_type));
955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroHeaderText",
975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_HEADER_TEXT, device_type));
995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroHeaderFootnote",
1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_HEADER_FOOTNOTE));
1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroFindPhoneButtonLabel",
1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_FIND_PHONE_BUTTON_LABEL));
1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroFindingPhoneButtonLabel",
1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_FINDING_PHONE_BUTTON_LABEL));
1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupIntroHowIsThisSecureLinkText",
1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_INTRO_HOW_IS_THIS_SECURE_LINK_TEXT));
1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Step 2: Found a viable phone.
1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupFoundPhoneHeaderTitle",
1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_FOUND_PHONE_HEADER_TITLE, device_type));
1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupFoundPhoneHeaderText",
1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_FOUND_PHONE_HEADER_TEXT, device_type));
1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupFoundPhoneUseThisPhoneButtonLabel",
1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_FOUND_PHONE_USE_THIS_PHONE_BUTTON_LABEL));
1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Step 3: Setup completed successfully.
1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupCompleteHeaderTitle",
1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_COMPLETE_HEADER_TITLE));
1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupCompleteHeaderText",
1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_COMPLETE_HEADER_TEXT));
1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupCompleteTryItOutButtonLabel",
1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_COMPLETE_TRY_IT_OUT_BUTTON_LABEL));
1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupCompleteSettingsLinkText",
1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_COMPLETE_SETTINGS_LINK_TEXT));
1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Error strings.
1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupErrorBluetoothUnavailable",
1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_ERROR_BLUETOOTH_UNAVAILBLE, device_type));
1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupErrorOffline",
1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_ERROR_OFFLINE, device_type));
1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupErrorFindingPhone",
1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_EASY_UNLOCK_SETUP_ERROR_FINDING_PHONE));
1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupErrorBluetoothConnectionFailed",
1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_ERROR_BLUETOOTH_CONNECTION_FAILED,
1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          device_type));
1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "setupErrorConnectingToPhone",
1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_ERROR_CONNECTING_TO_PHONE, device_type));
1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(isherman): Remove these strings once the app has been updated.
1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "notificationTitle",
1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_EASY_UNLOCK_SETUP_NOTIFICATION_TITLE,
1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                 device_type));
1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "notificationMessage",
1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_EASY_UNLOCK_SETUP_NOTIFICATION_MESSAGE,
1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                 device_type));
1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  strings->SetString(
1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "notificationButtonTitle",
1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_EASY_UNLOCK_SETUP_NOTIFICATION_BUTTON_TITLE));
1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SetResult(strings.release());
1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivatePerformECDHKeyAgreementFunction::
1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivatePerformECDHKeyAgreementFunction() {}
1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivatePerformECDHKeyAgreementFunction::
1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)~EasyUnlockPrivatePerformECDHKeyAgreementFunction() {}
1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivatePerformECDHKeyAgreementFunction::RunAsync() {
1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<easy_unlock_private::PerformECDHKeyAgreement::Params> params =
1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      easy_unlock_private::PerformECDHKeyAgreement::Params::Create(*args_);
1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params);
1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GetCryptoDelegate(browser_context())->PerformECDHKeyAgreement(
1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->private_key,
1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->public_key,
2005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(&EasyUnlockPrivatePerformECDHKeyAgreementFunction::OnData,
2015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                 this));
2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void EasyUnlockPrivatePerformECDHKeyAgreementFunction::OnData(
2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& secret_key) {
2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(tbarzic): Improve error handling.
2085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!secret_key.empty()) {
2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    results_ = easy_unlock_private::PerformECDHKeyAgreement::Results::Create(
2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        secret_key);
2115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
2125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SendResponse(true);
2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateGenerateEcP256KeyPairFunction::
2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateGenerateEcP256KeyPairFunction() {}
2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateGenerateEcP256KeyPairFunction::
2195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)~EasyUnlockPrivateGenerateEcP256KeyPairFunction() {}
2205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivateGenerateEcP256KeyPairFunction::RunAsync() {
2225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GetCryptoDelegate(browser_context())->GenerateEcP256KeyPair(
2235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(&EasyUnlockPrivateGenerateEcP256KeyPairFunction::OnData,
2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                 this));
2255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
2265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void EasyUnlockPrivateGenerateEcP256KeyPairFunction::OnData(
2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& private_key,
2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& public_key) {
2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(tbarzic): Improve error handling.
2325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!public_key.empty() && !private_key.empty()) {
2335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    results_ = easy_unlock_private::GenerateEcP256KeyPair::Results::Create(
2345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        public_key, private_key);
2355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
2365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SendResponse(true);
2375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateCreateSecureMessageFunction::
2405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateCreateSecureMessageFunction() {}
2415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateCreateSecureMessageFunction::
2435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)~EasyUnlockPrivateCreateSecureMessageFunction() {}
2445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivateCreateSecureMessageFunction::RunAsync() {
2465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<easy_unlock_private::CreateSecureMessage::Params> params =
2475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      easy_unlock_private::CreateSecureMessage::Params::Create(*args_);
2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params);
2495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GetCryptoDelegate(browser_context())->CreateSecureMessage(
2515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->payload,
2525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->key,
2535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->options.associated_data ?
2545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          *params->options.associated_data : std::string(),
2555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->options.public_metadata ?
2565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          *params->options.public_metadata : std::string(),
2575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->options.verification_key_id ?
2585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          *params->options.verification_key_id : std::string(),
2595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->options.encrypt_type,
2605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->options.sign_type,
2615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(&EasyUnlockPrivateCreateSecureMessageFunction::OnData,
2625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                 this));
2635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
2645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void EasyUnlockPrivateCreateSecureMessageFunction::OnData(
2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& message) {
2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(tbarzic): Improve error handling.
2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!message.empty()) {
2705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    results_ = easy_unlock_private::CreateSecureMessage::Results::Create(
2715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        message);
2725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
2735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SendResponse(true);
2745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateUnwrapSecureMessageFunction::
2775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateUnwrapSecureMessageFunction() {}
2785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateUnwrapSecureMessageFunction::
2805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)~EasyUnlockPrivateUnwrapSecureMessageFunction() {}
2815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivateUnwrapSecureMessageFunction::RunAsync() {
2835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<easy_unlock_private::UnwrapSecureMessage::Params> params =
2845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      easy_unlock_private::UnwrapSecureMessage::Params::Create(*args_);
2855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params);
2865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GetCryptoDelegate(browser_context())->UnwrapSecureMessage(
2885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->secure_message,
2895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->key,
2905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->options.associated_data ?
2915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          *params->options.associated_data : std::string(),
2925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->options.encrypt_type,
2935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->options.sign_type,
2945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(&EasyUnlockPrivateUnwrapSecureMessageFunction::OnData,
2955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                 this));
2965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
2975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void EasyUnlockPrivateUnwrapSecureMessageFunction::OnData(
3005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& data) {
3015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // TODO(tbarzic): Improve error handling.
3025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!data.empty())
3035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    results_ = easy_unlock_private::UnwrapSecureMessage::Results::Create(data);
3045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SendResponse(true);
3055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::
3085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction() {}
3095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::
3115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ~EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction() {}
3125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::RunAsync() {
3145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<easy_unlock_private::SeekBluetoothDeviceByAddress::Params> params(
3155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      easy_unlock_private::SeekBluetoothDeviceByAddress::Params::Create(
3165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          *args_));
3175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params.get());
3185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  easy_unlock::SeekBluetoothDeviceByAddress(
3205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      params->device_address,
3215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::Bind(
3225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          &EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::
3235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              OnSeekCompleted,
3245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          this));
3255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
3265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void EasyUnlockPrivateSeekBluetoothDeviceByAddressFunction::OnSeekCompleted(
3295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const easy_unlock::SeekDeviceResult& seek_result) {
3305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (seek_result.success) {
3315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    SendResponse(true);
3325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  } else {
3335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    SetError(seek_result.error_message);
3345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    SendResponse(false);
3355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
3365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace api
3395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace extensions
340