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