1// Copyright (c) 2011 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 COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_DETAILS_H_
6#define COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_DETAILS_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "components/content_settings/core/common/content_settings.h"
12#include "components/content_settings/core/common/content_settings_pattern.h"
13#include "components/content_settings/core/common/content_settings_types.h"
14
15// Details for the CONTENT_SETTINGS_CHANGED notification. This is sent when
16// content settings change for at least one host. If settings change for more
17// than one pattern in one user interaction, this will usually send a single
18// notification with update_all() returning true instead of one notification
19// for each pattern.
20class ContentSettingsDetails {
21 public:
22  // Update the setting that matches this pattern/content type/resource.
23  ContentSettingsDetails(const ContentSettingsPattern& primary_pattern,
24                         const ContentSettingsPattern& secondary_pattern,
25                         ContentSettingsType type,
26                         const std::string& resource_identifier);
27
28  // The item pattern whose settings have changed.
29  const ContentSettingsPattern& primary_pattern() const {
30    return primary_pattern_;
31  }
32
33  // The top level frame pattern whose settings have changed.
34  const ContentSettingsPattern& secondary_pattern() const {
35    return secondary_pattern_;
36  }
37
38  // True if all settings should be updated for the given type.
39  bool update_all() const {
40    return primary_pattern_.ToString().empty() &&
41           secondary_pattern_.ToString().empty();
42  }
43
44  // The type of the pattern whose settings have changed.
45  ContentSettingsType type() const { return type_; }
46
47  // The resource identifier for the settings type that has changed.
48  const std::string& resource_identifier() const {
49    return resource_identifier_;
50  }
51
52  // True if all types should be updated. If update_all() is false, this will
53  // be false as well (although the reverse does not hold true).
54  bool update_all_types() const {
55    return CONTENT_SETTINGS_TYPE_DEFAULT == type_;
56  }
57
58 private:
59  ContentSettingsPattern primary_pattern_;
60  ContentSettingsPattern secondary_pattern_;
61  ContentSettingsType type_;
62  std::string resource_identifier_;
63
64  DISALLOW_COPY_AND_ASSIGN(ContentSettingsDetails);
65};
66
67#endif  // COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_DETAILS_H_
68