16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file.
46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/ui/webui/options/easy_unlock_handler.h"
66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <string>
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/bind.h"
106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/values.h"
116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/signin/easy_unlock_service.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h"
146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/public/browser/web_ui.h"
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace options {
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockHandler::EasyUnlockHandler() {
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EasyUnlockHandler::~EasyUnlockHandler() {
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EasyUnlockService::Get(Profile::FromWebUI(web_ui()))->RemoveObserver(this);
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void EasyUnlockHandler::GetLocalizedValues(base::DictionaryValue* values) {
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  static OptionsStringResource resources[] = {
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      {"easyUnlockTurnOffButton", IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_BUTTON},
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      {"easyUnlockTurnOffTitle", IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_TITLE},
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      {"easyUnlockTurnOffDescription",
306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)       IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_DESCRIPTION},
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      {"easyUnlockTurnOffOfflineTitle",
326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)       IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_OFFLINE_TITLE},
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      {"easyUnlockTurnOffOfflineMessage",
346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)       IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_OFFLINE_MESSAGE},
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      {"easyUnlockTurnOffErrorTitle",
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)       IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_ERROR_TITLE},
376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      {"easyUnlockTurnOffErrorMessage",
386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)       IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_ERROR_MESSAGE},
396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      {"easyUnlockTurnOffRetryButton",
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)       IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_RETRY_BUTTON},
416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  };
426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  RegisterStrings(values, resources, arraysize(resources));
446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void EasyUnlockHandler::InitializeHandler() {
476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EasyUnlockService::Get(Profile::FromWebUI(web_ui()))->AddObserver(this);
486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void EasyUnlockHandler::RegisterMessages() {
516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "easyUnlockGetTurnOffFlowStatus",
536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      base::Bind(&EasyUnlockHandler::HandleGetTurnOffFlowStatus,
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                 base::Unretained(this)));
556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "easyUnlockRequestTurnOff",
576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      base::Bind(&EasyUnlockHandler::HandleRequestTurnOff,
586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                 base::Unretained(this)));
596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "easyUnlockTurnOffOverlayDismissed",
616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      base::Bind(&EasyUnlockHandler::HandlePageDismissed,
626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                 base::Unretained(this)));
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void EasyUnlockHandler::OnTurnOffOperationStatusChanged() {
666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  SendTurnOffOperationStatus();
676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void EasyUnlockHandler::SendTurnOffOperationStatus() {
706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EasyUnlockService::TurnOffFlowStatus status =
716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      EasyUnlockService::Get(Profile::FromWebUI(web_ui()))
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          ->GetTurnOffFlowStatus();
736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Translate status into JS UI state string. Note the translated string
756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // should match UIState defined in easy_unlock_turn_off_overlay.js.
766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  std::string status_string;
776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  switch (status) {
786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    case EasyUnlockService::IDLE:
796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      status_string = "idle";
806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      break;
816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    case EasyUnlockService::PENDING:
826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      status_string = "pending";
836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      break;
846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    case EasyUnlockService::FAIL:
856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      status_string = "server-error";
866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      break;
876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    default:
886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      LOG(ERROR) << "Unknown Easy unlock turn-off operation status: " << status;
896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      status_string = "idle";
906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      break;
916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  web_ui()->CallJavascriptFunction("EasyUnlockTurnOffOverlay.updateUIState",
936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                   base::StringValue(status_string));
946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void EasyUnlockHandler::HandleGetTurnOffFlowStatus(
976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    const base::ListValue* args) {
986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  SendTurnOffOperationStatus();
996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
1006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void EasyUnlockHandler::HandleRequestTurnOff(const base::ListValue* args) {
1026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EasyUnlockService::Get(Profile::FromWebUI(web_ui()))->RunTurnOffFlow();
1036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
1046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void EasyUnlockHandler::HandlePageDismissed(const base::ListValue* args) {
1066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EasyUnlockService::Get(Profile::FromWebUI(web_ui()))->ResetTurnOffFlow();
1076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
1086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}  // namespace options
110