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