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" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "net/base/escape.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "url/gurl.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)using base::Time; 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char kSupervisedUserAccessRequestKeyPrefix[] = 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "X-ManagedUser-AccessRequests"; 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char kSupervisedUserAccessRequestTime[] = "timestamp"; 19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char kSupervisedUserName[] = "name"; 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Key for the notification setting of the custodian. This is a shared setting 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// so we can include the setting in the access request data that is used to 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// trigger notifications. 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kNotificationSetting[] = "custodian-notification-setting"; 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)PermissionRequestCreatorSync::PermissionRequestCreatorSync( 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSettingsService* settings_service, 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSharedSettingsService* shared_settings_service, 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string& name, 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const std::string& supervised_user_id) 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : settings_service_(settings_service), 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) shared_settings_service_(shared_settings_service), 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) name_(name), 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_user_id_(supervised_user_id) { 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)PermissionRequestCreatorSync::~PermissionRequestCreatorSync() {} 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void PermissionRequestCreatorSync::CreatePermissionRequest( 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const GURL& url_requested, 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::Closure& callback) { 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Escape the URL and add the prefix. 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string key = SupervisedUserSettingsService::MakeSplitSettingKey( 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kSupervisedUserAccessRequestKeyPrefix, 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::EscapeQueryParamValue(url_requested.spec(), true)); 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue); 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // TODO(sergiu): Use sane time here when it's ready. 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) dict->SetDouble(kSupervisedUserAccessRequestTime, 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Time::Now().ToJsTime()); 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) dict->SetString(kSupervisedUserName, name_); 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Copy the notification setting of the custodian. 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::Value* value = shared_settings_service_->GetValue( 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_user_id_, kNotificationSetting); 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool notifications_enabled = false; 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (value) { 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool success = value->GetAsBoolean(¬ifications_enabled); 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(success); 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dict->SetBoolean(kNotificationSetting, notifications_enabled); 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) settings_service_->UploadItem(key, dict.PassAs<base::Value>()); 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) callback.Run(); 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 69