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#include "chrome/browser/chromeos/login/signed_settings_helper.h" 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <string> 8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <vector> 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "base/lazy_instance.h" 11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/logging.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted.h" 13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/signed_settings.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/policy/proto/device_management_backend.pb.h" 15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace chromeos { 18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace { 20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass OpContext { 22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen class Delegate { 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnOpCreated(OpContext* context) = 0; 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnOpStarted(OpContext* context) = 0; 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnOpCompleted(OpContext* context) = 0; 28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }; 29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual ~OpContext() {} 31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Creates and execute op. 33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void Execute() { 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen CreateOp(); 35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen CHECK(op_.get()); 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (delegate_) 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen delegate_->OnOpCreated(this); 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Note that the context could be released when op_->Execute() returns. 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // So keep a local copy of delegate and executing flag to use after 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // the call. 42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Delegate* delegate = delegate_; 4321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen executing_ = true; 4421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen op_->Execute(); 4521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (delegate) 4621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen delegate->OnOpStarted(this); 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Cancels the callback. 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void CancelCallback() { 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen callback_ = NULL; 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Cancels the callback and cancels the op if it is not executing. 55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void Cancel() { 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen CancelCallback(); 57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!executing_) 59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OnOpCompleted(); 60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Accessors. 63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettings* op() const { 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return op_.get(); 65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper::Callback* callback() const { 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return callback_; 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void set_delegate(Delegate* delegate) { 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen delegate_ = delegate; 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen protected: 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OpContext(SignedSettingsHelper::Callback* callback, 77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Delegate* delegate) 78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen : executing_(false), 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen delegate_(delegate), 80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen callback_(callback) { 81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Creates the op to execute. 84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void CreateOp() = 0; 85bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Callback on op completion. 87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnOpCompleted() { 88bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (delegate_) 89bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen delegate_->OnOpCompleted(this); 90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 91bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen delete this; 92bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 93bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 94bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool executing_; 95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Delegate* delegate_; 96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_refptr<SignedSettings> op_; 98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper::Callback* callback_; 99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass WhitelistOpContext : public SignedSettings::Delegate<bool>, 102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public OpContext { 103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 104bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen enum Type { 105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen CHECK, 106bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ADD, 107bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen REMOVE, 108bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }; 109bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WhitelistOpContext(Type type, 111bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& email, 112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper::Callback* callback, 113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OpContext::Delegate* delegate) 114bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen : OpContext(callback, delegate), 115bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen type_(type), 116bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen email_(email) { 117bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 118bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 119bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // chromeos::SignedSettings::Delegate implementation 12021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void OnSettingsOpCompleted(SignedSettings::ReturnCode code, 121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool value) OVERRIDE { 122bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (callback_) { 123bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen switch (type_) { 124bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen case CHECK: 12521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen callback_->OnCheckWhitelistCompleted(code, email_); 126bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen break; 127bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen case ADD: 12821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen callback_->OnWhitelistCompleted(code, email_); 129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen break; 130bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen case REMOVE: 13121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen callback_->OnUnwhitelistCompleted(code, email_); 132bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen break; 133bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen default: 134bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen LOG(ERROR) << "Unknown WhitelistOpContext type " << type_; 135bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen break; 136bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 137bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 138bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OnOpCompleted(); 139bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 140bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 141bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen protected: 142bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // OpContext implemenetation 143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void CreateOp() OVERRIDE { 144bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen switch (type_) { 145bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen case CHECK: 146bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen op_ = SignedSettings::CreateCheckWhitelistOp(email_, this); 147bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen break; 148bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen case ADD: 149bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen op_ = SignedSettings::CreateWhitelistOp(email_, true, this); 150bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen break; 151bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen case REMOVE: 152bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen op_ = SignedSettings::CreateWhitelistOp(email_, false, this); 153bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen break; 154bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen default: 155bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen LOG(ERROR) << "Unknown WhitelistOpContext type " << type_; 156bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen break; 157bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 158bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 159bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 160bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private: 161bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Type type_; 162bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string email_; 163bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 164bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DISALLOW_COPY_AND_ASSIGN(WhitelistOpContext); 165bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 166bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 167bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass StorePropertyOpContext : public SignedSettings::Delegate<bool>, 168bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public OpContext { 169bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 170bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen StorePropertyOpContext(const std::string& name, 171bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& value, 172bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper::Callback* callback, 173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OpContext::Delegate* delegate) 174bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen : OpContext(callback, delegate), 175bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen name_(name), 176bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen value_(value) { 177bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 178bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 179bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // chromeos::SignedSettings::Delegate implementation 18021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void OnSettingsOpCompleted(SignedSettings::ReturnCode code, 181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool unused) OVERRIDE { 18221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen VLOG(2) << "OnSettingsOpCompleted, code = " << code; 183bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (callback_) 18421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen callback_->OnStorePropertyCompleted(code, name_, value_); 185bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OnOpCompleted(); 186bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 187bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 188bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen protected: 189bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // OpContext implemenetation 190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void CreateOp() OVERRIDE { 191bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen op_ = SignedSettings::CreateStorePropertyOp(name_, value_, this); 192bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 193bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 194bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private: 195bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string name_; 196bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string value_; 197bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 198bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DISALLOW_COPY_AND_ASSIGN(StorePropertyOpContext); 199bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 200bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 201bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass RetrievePropertyOpContext 202bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen : public SignedSettings::Delegate<std::string>, 203bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public OpContext { 204bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 205bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen RetrievePropertyOpContext(const std::string& name, 206bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper::Callback* callback, 207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OpContext::Delegate* delegate) 208bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen : OpContext(callback, delegate), 209bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen name_(name) { 210bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 211bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 212bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // chromeos::SignedSettings::Delegate implementation 21321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void OnSettingsOpCompleted(SignedSettings::ReturnCode code, 214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string value) OVERRIDE { 215bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (callback_) 21621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen callback_->OnRetrievePropertyCompleted(code, name_, value); 217bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 218bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OnOpCompleted(); 219bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 220bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 221bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen protected: 222bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // OpContext implemenetation 223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void CreateOp() OVERRIDE { 224bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen op_ = SignedSettings::CreateRetrievePropertyOp(name_, this); 225bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 226bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 227bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private: 228bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string name_; 229bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 230bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DISALLOW_COPY_AND_ASSIGN(RetrievePropertyOpContext); 231bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 232bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 233ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass StorePolicyOpContext : public SignedSettings::Delegate<bool>, 234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public OpContext { 235ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 236ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StorePolicyOpContext(const em::PolicyFetchResponse& policy, 237ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SignedSettingsHelper::Callback* callback, 238ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OpContext::Delegate* delegate) 239ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : OpContext(callback, delegate), 240ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen policy_(policy) { 241ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 242ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 243ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // chromeos::SignedSettings::Delegate implementation 244ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnSettingsOpCompleted(SignedSettings::ReturnCode code, 245ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool unused) OVERRIDE { 246ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen VLOG(2) << "OnSettingsOpCompleted, code = " << code; 247ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (callback_) 248ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen callback_->OnStorePolicyCompleted(code); 249ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OnOpCompleted(); 250ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 251ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 252ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen protected: 253ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // OpContext implementation 254ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void CreateOp() OVERRIDE { 255ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen op_ = SignedSettings::CreateStorePolicyOp(&policy_, this); 256ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 257ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 258ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 259ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen em::PolicyFetchResponse policy_; 260ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(StorePolicyOpContext); 261ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 262ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 263ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass RetrievePolicyOpContext 264ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : public SignedSettings::Delegate<const em::PolicyFetchResponse&>, 265ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public OpContext { 266ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 267ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen RetrievePolicyOpContext(SignedSettingsHelper::Callback* callback, 268ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OpContext::Delegate* delegate) 269ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : OpContext(callback, delegate) { 270ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 271ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 272ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // chromeos::SignedSettings::Delegate implementation 273ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnSettingsOpCompleted( 274ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SignedSettings::ReturnCode code, 275ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const em::PolicyFetchResponse& policy) OVERRIDE { 276ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (callback_) 277ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen callback_->OnRetrievePolicyCompleted(code, policy); 278ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OnOpCompleted(); 279ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 280ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 281ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen protected: 282ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // OpContext implementation 283ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void CreateOp() OVERRIDE { 284ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen op_ = SignedSettings::CreateRetrievePolicyOp(this); 285ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 286ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 287ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 288ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(RetrievePolicyOpContext); 289ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 290ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 291bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} // namespace 292bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 293bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 294bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass SignedSettingsHelperImpl : public SignedSettingsHelper, 295bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public OpContext::Delegate { 296bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 297bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // SignedSettingsHelper implementation 298bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void StartCheckWhitelistOp(const std::string& email, 299ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Callback* callback) OVERRIDE; 300bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void StartWhitelistOp(const std::string& email, 301bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool add_to_whitelist, 302ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Callback* callback) OVERRIDE; 303bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void StartStorePropertyOp(const std::string& name, 304bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& value, 305ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Callback* callback) OVERRIDE; 306bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void StartRetrieveProperty(const std::string& name, 307ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Callback* callback) OVERRIDE; 308ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void StartStorePolicyOp(const em::PolicyFetchResponse& policy, 309ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Callback* callback) OVERRIDE; 310ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void StartRetrievePolicyOp(Callback* callback) OVERRIDE; 311ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void CancelCallback(Callback* callback) OVERRIDE; 312bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 313bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // OpContext::Delegate implementation 314bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnOpCreated(OpContext* context); 315bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnOpStarted(OpContext* context); 316bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnOpCompleted(OpContext* context); 317bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 318bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private: 319bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelperImpl(); 320bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ~SignedSettingsHelperImpl(); 321bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 322bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void AddOpContext(OpContext* context); 323bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void ClearAll(); 324bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 325bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::vector<OpContext*> pending_contexts_; 326bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 32721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen friend struct base::DefaultLazyInstanceTraits<SignedSettingsHelperImpl>; 328bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DISALLOW_COPY_AND_ASSIGN(SignedSettingsHelperImpl); 329bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 330bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 33121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenstatic base::LazyInstance<SignedSettingsHelperImpl> 33221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen g_signed_settings_helper_impl(base::LINKER_INITIALIZED); 33321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 334bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenSignedSettingsHelperImpl::SignedSettingsHelperImpl() { 335bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 336bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 337bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenSignedSettingsHelperImpl::~SignedSettingsHelperImpl() { 338bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!pending_contexts_.empty()) { 339bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen LOG(WARNING) << "SignedSettingsHelperImpl shutdown with pending ops, " 340bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen << "changes will be lost."; 341bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ClearAll(); 342bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 343bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 344bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 345bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid SignedSettingsHelperImpl::StartCheckWhitelistOp( 346bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string&email, 347bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper::Callback* callback) { 348bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AddOpContext(new WhitelistOpContext( 349bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WhitelistOpContext::CHECK, 350bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen email, 351bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen callback, 352bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen this)); 353bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 354bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 355bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid SignedSettingsHelperImpl::StartWhitelistOp( 356bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string&email, 357bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool add_to_whitelist, 358bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper::Callback* callback) { 359bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AddOpContext(new WhitelistOpContext( 360bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen add_to_whitelist ? WhitelistOpContext::ADD : WhitelistOpContext::REMOVE, 361bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen email, 362bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen callback, 363bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen this)); 364bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 365bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 366bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid SignedSettingsHelperImpl::StartStorePropertyOp( 367bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& name, 368bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& value, 369ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SignedSettingsHelper::Callback* callback) { 370bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AddOpContext(new StorePropertyOpContext( 371bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen name, 372bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen value, 373bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen callback, 374bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen this)); 375bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 376bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 377bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid SignedSettingsHelperImpl::StartRetrieveProperty( 378bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& name, 379bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper::Callback* callback) { 380bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AddOpContext(new RetrievePropertyOpContext( 381bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen name, 382bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen callback, 383bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen this)); 384bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 385bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 386ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SignedSettingsHelperImpl::StartStorePolicyOp( 387ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const em::PolicyFetchResponse& policy, 388ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SignedSettingsHelper::Callback* callback) { 389ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddOpContext(new StorePolicyOpContext(policy, callback, this)); 390ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 391ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 392ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SignedSettingsHelperImpl::StartRetrievePolicyOp( 393ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SignedSettingsHelper::Callback* callback) { 394ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddOpContext(new RetrievePolicyOpContext(callback, this)); 395ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 396ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 397bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid SignedSettingsHelperImpl::CancelCallback( 398bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SignedSettingsHelper::Callback* callback) { 399731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 400bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 401bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (size_t i = 0; i < pending_contexts_.size(); ++i) { 402bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (pending_contexts_[i]->callback() == callback) { 403bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen pending_contexts_[i]->CancelCallback(); 404bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 405bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 406bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 407bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 408bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid SignedSettingsHelperImpl::AddOpContext(OpContext* context) { 409731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 410bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen CHECK(context); 411bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 412bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen pending_contexts_.push_back(context); 413bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (pending_contexts_.size() == 1) 414bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen context->Execute(); 415bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 416bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 417bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid SignedSettingsHelperImpl::ClearAll() { 418bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (size_t i = 0; i < pending_contexts_.size(); ++i) { 419bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen pending_contexts_[i]->set_delegate(NULL); 420bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen pending_contexts_[i]->Cancel(); 421bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 422bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen pending_contexts_.clear(); 423bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 424bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 425bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid SignedSettingsHelperImpl::OnOpCreated(OpContext* context) { 426bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (test_delegate_) 427bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen test_delegate_->OnOpCreated(context->op()); 428bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 429bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 430bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid SignedSettingsHelperImpl::OnOpStarted(OpContext* context) { 431731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 432bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 433bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (test_delegate_) 434bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen test_delegate_->OnOpStarted(context->op()); 435bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 436bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 437bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid SignedSettingsHelperImpl::OnOpCompleted(OpContext* context) { 438731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 439bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK(pending_contexts_.front() == context); 440bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 441bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen pending_contexts_.erase(pending_contexts_.begin()); 442bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!pending_contexts_.empty()) 443bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen pending_contexts_.front()->Execute(); 444bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 445bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (test_delegate_) 446bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen test_delegate_->OnOpCompleted(context->op()); 447bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 448bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 449bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenSignedSettingsHelper* SignedSettingsHelper::Get() { 45021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return g_signed_settings_helper_impl.Pointer(); 451bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 452bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 453bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} // namespace chromeos 454