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#include "chrome/browser/notifications/desktop_notification_profile_util.h"
6
7#include "chrome/browser/content_settings/host_content_settings_map.h"
8#include "chrome/browser/profiles/profile.h"
9#include "components/content_settings/core/browser/content_settings_provider.h"
10#include "components/content_settings/core/common/content_settings_pattern.h"
11
12void DesktopNotificationProfileUtil::ResetToDefaultContentSetting(
13    Profile* profile) {
14  profile->GetHostContentSettingsMap()->SetDefaultContentSetting(
15      CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_DEFAULT);
16}
17
18// Clears the notifications setting for the given pattern.
19void DesktopNotificationProfileUtil::ClearSetting(
20    Profile* profile, const ContentSettingsPattern& pattern) {
21  profile->GetHostContentSettingsMap()->SetContentSetting(
22      pattern,
23      ContentSettingsPattern::Wildcard(),
24      CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
25      NO_RESOURCE_IDENTIFIER,
26      CONTENT_SETTING_DEFAULT);
27
28}
29
30// Methods to setup and modify permission preferences.
31void DesktopNotificationProfileUtil::GrantPermission(
32    Profile* profile, const GURL& origin) {
33    ContentSettingsPattern primary_pattern =
34        ContentSettingsPattern::FromURLNoWildcard(origin);
35    profile->GetHostContentSettingsMap()->SetContentSetting(
36        primary_pattern,
37        ContentSettingsPattern::Wildcard(),
38        CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
39        NO_RESOURCE_IDENTIFIER,
40        CONTENT_SETTING_ALLOW);
41}
42
43void DesktopNotificationProfileUtil::DenyPermission(
44    Profile* profile, const GURL& origin) {
45    ContentSettingsPattern primary_pattern =
46        ContentSettingsPattern::FromURLNoWildcard(origin);
47    profile->GetHostContentSettingsMap()->SetContentSetting(
48        primary_pattern,
49        ContentSettingsPattern::Wildcard(),
50        CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
51        NO_RESOURCE_IDENTIFIER,
52        CONTENT_SETTING_BLOCK);
53}
54
55void DesktopNotificationProfileUtil::GetNotificationsSettings(
56    Profile* profile, ContentSettingsForOneType* settings) {
57  profile->GetHostContentSettingsMap()->GetSettingsForOneType(
58      CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
59      NO_RESOURCE_IDENTIFIER,
60      settings);
61}
62
63ContentSetting DesktopNotificationProfileUtil::GetContentSetting(
64    Profile* profile, const GURL& origin) {
65  return profile->GetHostContentSettingsMap()->GetContentSetting(
66      origin,
67      origin,
68      CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
69      NO_RESOURCE_IDENTIFIER);
70}
71
72void DesktopNotificationProfileUtil::UsePermission(Profile* profile,
73                                                   const GURL& origin) {
74  profile->GetHostContentSettingsMap()->UpdateLastUsageByPattern(
75      ContentSettingsPattern::FromURLNoWildcard(origin),
76      ContentSettingsPattern::Wildcard(),
77      CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
78}
79