1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/ui/webui/options/easy_unlock_handler.h" 6 7 #include <string> 8 9 #include "base/bind.h" 10 #include "base/values.h" 11 #include "chrome/browser/profiles/profile.h" 12 #include "chrome/browser/signin/easy_unlock_service.h" 13 #include "chrome/grit/generated_resources.h" 14 #include "content/public/browser/web_ui.h" 15 16 namespace options { 17 18 EasyUnlockHandler::EasyUnlockHandler() { 19 } 20 21 EasyUnlockHandler::~EasyUnlockHandler() { 22 EasyUnlockService::Get(Profile::FromWebUI(web_ui()))->RemoveObserver(this); 23 } 24 25 void EasyUnlockHandler::GetLocalizedValues(base::DictionaryValue* values) { 26 static OptionsStringResource resources[] = { 27 {"easyUnlockTurnOffButton", IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_BUTTON}, 28 {"easyUnlockTurnOffTitle", IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_TITLE}, 29 {"easyUnlockTurnOffDescription", 30 IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_DESCRIPTION}, 31 {"easyUnlockTurnOffOfflineTitle", 32 IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_OFFLINE_TITLE}, 33 {"easyUnlockTurnOffOfflineMessage", 34 IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_OFFLINE_MESSAGE}, 35 {"easyUnlockTurnOffErrorTitle", 36 IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_ERROR_TITLE}, 37 {"easyUnlockTurnOffErrorMessage", 38 IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_ERROR_MESSAGE}, 39 {"easyUnlockTurnOffRetryButton", 40 IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_RETRY_BUTTON}, 41 }; 42 43 RegisterStrings(values, resources, arraysize(resources)); 44 } 45 46 void EasyUnlockHandler::InitializeHandler() { 47 EasyUnlockService::Get(Profile::FromWebUI(web_ui()))->AddObserver(this); 48 } 49 50 void EasyUnlockHandler::RegisterMessages() { 51 web_ui()->RegisterMessageCallback( 52 "easyUnlockGetTurnOffFlowStatus", 53 base::Bind(&EasyUnlockHandler::HandleGetTurnOffFlowStatus, 54 base::Unretained(this))); 55 web_ui()->RegisterMessageCallback( 56 "easyUnlockRequestTurnOff", 57 base::Bind(&EasyUnlockHandler::HandleRequestTurnOff, 58 base::Unretained(this))); 59 web_ui()->RegisterMessageCallback( 60 "easyUnlockTurnOffOverlayDismissed", 61 base::Bind(&EasyUnlockHandler::HandlePageDismissed, 62 base::Unretained(this))); 63 } 64 65 void EasyUnlockHandler::OnTurnOffOperationStatusChanged() { 66 SendTurnOffOperationStatus(); 67 } 68 69 void EasyUnlockHandler::SendTurnOffOperationStatus() { 70 EasyUnlockService::TurnOffFlowStatus status = 71 EasyUnlockService::Get(Profile::FromWebUI(web_ui())) 72 ->GetTurnOffFlowStatus(); 73 74 // Translate status into JS UI state string. Note the translated string 75 // should match UIState defined in easy_unlock_turn_off_overlay.js. 76 std::string status_string; 77 switch (status) { 78 case EasyUnlockService::IDLE: 79 status_string = "idle"; 80 break; 81 case EasyUnlockService::PENDING: 82 status_string = "pending"; 83 break; 84 case EasyUnlockService::FAIL: 85 status_string = "server-error"; 86 break; 87 default: 88 LOG(ERROR) << "Unknown Easy unlock turn-off operation status: " << status; 89 status_string = "idle"; 90 break; 91 } 92 web_ui()->CallJavascriptFunction("EasyUnlockTurnOffOverlay.updateUIState", 93 base::StringValue(status_string)); 94 } 95 96 void EasyUnlockHandler::HandleGetTurnOffFlowStatus( 97 const base::ListValue* args) { 98 SendTurnOffOperationStatus(); 99 } 100 101 void EasyUnlockHandler::HandleRequestTurnOff(const base::ListValue* args) { 102 EasyUnlockService::Get(Profile::FromWebUI(web_ui()))->RunTurnOffFlow(); 103 } 104 105 void EasyUnlockHandler::HandlePageDismissed(const base::ListValue* args) { 106 EasyUnlockService::Get(Profile::FromWebUI(web_ui()))->ResetTurnOffFlow(); 107 } 108 109 } // namespace options 110