1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_SIGNED_SETTINGS_HELPER_H_ 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#define CHROME_BROWSER_CHROMEOS_LOGIN_SIGNED_SETTINGS_HELPER_H_ 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#pragma once 8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <string> 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/chromeos/login/signed_settings.h" 12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace enterprise_management { 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass PolicyFetchResponse; 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace enterprise_management 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace em = enterprise_management; 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace chromeos { 18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass SignedSettings; 20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Helper to serialize signed settings ops, provide unified callback interface, 22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// and handle callbacks destruction before ops completion. 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass SignedSettingsHelper { 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen class Callback { 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Callback of CheckWhitelistOp. |success| indicates whether the op succeeds 28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // or not. |email| is the email that is checked against. 2921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void OnCheckWhitelistCompleted( 3021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen SignedSettings::ReturnCode code, 3121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const std::string& email) {} 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Callback of WhitelistOp that adds |email| to the whitelist. 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnWhitelistCompleted( 3521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen SignedSettings::ReturnCode code, const std::string& email) {} 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Callback of WhitelistOp that removes |email| to the whitelist. 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnUnwhitelistCompleted( 3921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen SignedSettings::ReturnCode code, const std::string& email) {} 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Callback of StorePropertyOp. 42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnStorePropertyCompleted( 4321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen SignedSettings::ReturnCode code, 4421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const std::string& name, 4521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const std::string& value) {} 46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Callback of RetrievePropertyOp. 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnRetrievePropertyCompleted( 4921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen SignedSettings::ReturnCode code, 5021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const std::string& name, 5121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const std::string& value) {} 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Callback of StorePolicyOp. 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnStorePolicyCompleted( 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SignedSettings::ReturnCode code) {} 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Callback of RetrievePolicyOp. 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnRetrievePolicyCompleted( 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SignedSettings::ReturnCode code, 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const em::PolicyFetchResponse& policy) {} 61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }; 62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Class factory 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static SignedSettingsHelper* Get(); 65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Functions to start signed settings ops. 67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void StartCheckWhitelistOp(const std::string& email, 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Callback* callback) = 0; 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void StartWhitelistOp(const std::string& email, 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool add_to_whitelist, 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Callback* callback) = 0; 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void StartStorePropertyOp(const std::string& name, 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& value, 74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Callback* callback) = 0; 75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void StartRetrieveProperty(const std::string& name, 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Callback* callback) = 0; 77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void StartStorePolicyOp(const em::PolicyFetchResponse& policy, 78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Callback* callback) = 0; 79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void StartRetrievePolicyOp(Callback* callback) = 0; 80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Cancels all pending calls of given callback. 82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void CancelCallback(Callback* callback) = 0; 83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen class TestDelegate { 85bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnOpCreated(SignedSettings* op) = 0; 87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnOpStarted(SignedSettings* op) = 0; 88bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnOpCompleted(SignedSettings* op) = 0; 89bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }; 90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 91bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#if defined(UNIT_TEST) 92bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void set_test_delegate(TestDelegate* test_delegate) { 93bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen test_delegate_ = test_delegate; 94bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif // defined(UNIT_TEST) 96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen protected: 98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper() : test_delegate_(NULL) { 99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TestDelegate* test_delegate_; 102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 104bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} // namespace chromeos 105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 106bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif // CHROME_BROWSER_CHROMEOS_LOGIN_SIGNED_SETTINGS_HELPER_H_ 107