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#ifndef CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_SHARED_SETTINGS_UPDATE_H_
6#define CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_SHARED_SETTINGS_UPDATE_H_
7
8#include <string>
9
10#include "base/callback.h"
11#include "base/callback_list.h"
12#include "base/memory/scoped_ptr.h"
13
14namespace base {
15class Value;
16}
17
18class SupervisedUserSharedSettingsService;
19
20// Lets clients of SupervisedUserSharedSettingsService change settings and wait
21// for the Sync server to acknowledge the change. The callback passed in the
22// constructor will be called with a true success value after the Sync server
23// has flipped the acknowledgement flag for the setting. If another client
24// changes the value in the mean time, the callback will be run with a false
25// success value. If the object is destroyed before that, the callback will not
26// be run. Note that any changes made to the setting will not be undone when
27// destroying the object, even if the update was not successful or was canceled.
28class SupervisedUserSharedSettingsUpdate {
29 public:
30  SupervisedUserSharedSettingsUpdate(
31      SupervisedUserSharedSettingsService* service,
32      const std::string& su_id,
33      const std::string& key,
34      scoped_ptr<base::Value> value,
35      const base::Callback<void(bool)>& success_callback);
36  ~SupervisedUserSharedSettingsUpdate();
37
38 private:
39  typedef base::CallbackList<void(const std::string&, const std::string&)>
40      CallbackList;
41
42  void OnSettingChanged(const std::string& su_id,
43                        const std::string& key);
44
45  SupervisedUserSharedSettingsService* service_;
46  std::string su_id_;
47  std::string key_;
48  scoped_ptr<base::Value> value_;
49  base::Callback<void(bool)> callback_;
50  scoped_ptr<CallbackList::Subscription> subscription_;
51};
52
53#endif  // CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_SHARED_SETTINGS_UPDATE_H_
54