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