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 "extensions/common/permissions/settings_override_permission.h"
6
7#include "base/strings/utf_string_conversions.h"
8#include "grit/extensions_strings.h"
9#include "ui/base/l10n/l10n_util.h"
10
11namespace extensions {
12
13SettingsOverrideAPIPermission::SettingsOverrideAPIPermission(
14    const APIPermissionInfo* permission,
15    const std::string& setting_value)
16    : APIPermission(permission), setting_value_(setting_value) {}
17
18SettingsOverrideAPIPermission::~SettingsOverrideAPIPermission() {}
19
20bool SettingsOverrideAPIPermission::HasMessages() const {
21  return info()->message_id() > PermissionMessage::kNone;
22}
23
24PermissionMessages SettingsOverrideAPIPermission::GetMessages() const {
25  DCHECK(HasMessages());
26  int string_id = -1;
27  switch (id()) {
28    case kHomepage: {
29      string_id = IDS_EXTENSION_PROMPT_WARNING_HOME_PAGE_SETTING_OVERRIDE;
30      break;
31    }
32    case kStartupPages: {
33      string_id = IDS_EXTENSION_PROMPT_WARNING_START_PAGE_SETTING_OVERRIDE;
34      break;
35    }
36    case kSearchProvider: {
37      string_id = IDS_EXTENSION_PROMPT_WARNING_SEARCH_SETTINGS_OVERRIDE;
38      break;
39    }
40    default:
41      NOTREACHED();
42  }
43  PermissionMessages result;
44  result.push_back(
45      PermissionMessage(info()->message_id(),
46                        l10n_util::GetStringFUTF16(
47                            string_id, base::UTF8ToUTF16(setting_value_))));
48  return result;
49}
50
51bool SettingsOverrideAPIPermission::Check(
52    const APIPermission::CheckParam* param) const {
53  return (param == NULL);
54}
55
56bool SettingsOverrideAPIPermission::Contains(const APIPermission* rhs) const {
57  CHECK_EQ(info(), rhs->info());
58  return true;
59}
60
61bool SettingsOverrideAPIPermission::Equal(const APIPermission* rhs) const {
62  if (this != rhs)
63    CHECK_EQ(info(), rhs->info());
64  return true;
65}
66
67bool SettingsOverrideAPIPermission::FromValue(
68    const base::Value* value,
69    std::string* /*error*/,
70    std::vector<std::string>* unhandled_permissions) {
71  return (value == NULL);
72}
73
74scoped_ptr<base::Value> SettingsOverrideAPIPermission::ToValue() const {
75  return scoped_ptr<base::Value>();
76}
77
78APIPermission* SettingsOverrideAPIPermission::Clone() const {
79  return new SettingsOverrideAPIPermission(info(), setting_value_);
80}
81
82APIPermission* SettingsOverrideAPIPermission::Diff(
83    const APIPermission* rhs) const {
84  CHECK_EQ(info(), rhs->info());
85  return NULL;
86}
87
88APIPermission* SettingsOverrideAPIPermission::Union(
89    const APIPermission* rhs) const {
90  CHECK_EQ(info(), rhs->info());
91  return new SettingsOverrideAPIPermission(info(), setting_value_);
92}
93
94APIPermission* SettingsOverrideAPIPermission::Intersect(
95    const APIPermission* rhs) const {
96  CHECK_EQ(info(), rhs->info());
97  return new SettingsOverrideAPIPermission(info(), setting_value_);
98}
99
100void SettingsOverrideAPIPermission::Write(IPC::Message* m) const {}
101
102bool SettingsOverrideAPIPermission::Read(const IPC::Message* m,
103                                         PickleIterator* iter) {
104  return true;
105}
106
107void SettingsOverrideAPIPermission::Log(std::string* log) const {}
108
109}  // namespace extensions
110