permission_request_creator_sync.cc revision 116680a4aac90f2aa7413d9095a592090648e557
1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file.
4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/permission_request_creator_sync.h"
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/callback.h"
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/values.h"
9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_settings_service.h"
10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_shared_settings_service.h"
11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)using base::Time;
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char kSupervisedUserAccessRequestKeyPrefix[] =
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    "X-ManagedUser-AccessRequests";
16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char kSupervisedUserAccessRequestTime[] = "timestamp";
17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char kSupervisedUserName[] = "name";
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Key for the notification setting of the custodian. This is a shared setting
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// so we can include the setting in the access request data that is used to
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// trigger notifications.
22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kNotificationSetting[] = "custodian-notification-setting";
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)PermissionRequestCreatorSync::PermissionRequestCreatorSync(
25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    SupervisedUserSettingsService* settings_service,
26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    SupervisedUserSharedSettingsService* shared_settings_service,
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const std::string& name,
28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    const std::string& supervised_user_id)
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    : settings_service_(settings_service),
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      shared_settings_service_(shared_settings_service),
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      name_(name),
32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      supervised_user_id_(supervised_user_id) {
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)PermissionRequestCreatorSync::~PermissionRequestCreatorSync() {}
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void PermissionRequestCreatorSync::CreatePermissionRequest(
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const std::string& url_requested,
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const base::Closure& callback) {
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Add the prefix.
41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string key = SupervisedUserSettingsService::MakeSplitSettingKey(
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      kSupervisedUserAccessRequestKeyPrefix, url_requested);
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // TODO(sergiu): Use sane time here when it's ready.
47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  dict->SetDouble(kSupervisedUserAccessRequestTime,
48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                  base::Time::Now().ToJsTime());
49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  dict->SetString(kSupervisedUserName, name_);
51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Copy the notification setting of the custodian.
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const base::Value* value = shared_settings_service_->GetValue(
54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      supervised_user_id_, kNotificationSetting);
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool notifications_enabled = false;
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (value) {
57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    bool success = value->GetAsBoolean(&notifications_enabled);
58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    DCHECK(success);
59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  dict->SetBoolean(kNotificationSetting, notifications_enabled);
61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  settings_service_->UploadItem(key, dict.PassAs<base::Value>());
63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  callback.Run();
65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
66