1// Copyright (c) 2010 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/content_setting_combo_model.h"
6
7#include "base/command_line.h"
8#include "base/string16.h"
9#include "chrome/common/chrome_switches.h"
10#include "grit/generated_resources.h"
11#include "ui/base/l10n/l10n_util.h"
12
13namespace {
14
15// The settings shown in the combobox if show_session_ is false;
16const ContentSetting kNoSessionSettings[] = { CONTENT_SETTING_ALLOW,
17                                              CONTENT_SETTING_BLOCK };
18
19// The settings shown in the combobox if show_session_ is true;
20const ContentSetting kSessionSettings[] = { CONTENT_SETTING_ALLOW,
21                                            CONTENT_SETTING_SESSION_ONLY,
22                                            CONTENT_SETTING_BLOCK };
23
24// The settings shown in the combobox for plug-ins;
25const ContentSetting kAskSettings[] = { CONTENT_SETTING_ALLOW,
26                                        CONTENT_SETTING_ASK,
27                                        CONTENT_SETTING_BLOCK };
28
29}  // namespace
30
31ContentSettingComboModel::ContentSettingComboModel(ContentSettingsType type)
32    : content_type_(type) {
33}
34
35ContentSettingComboModel::~ContentSettingComboModel() {
36}
37
38int ContentSettingComboModel::GetItemCount() {
39  if (content_type_ == CONTENT_SETTINGS_TYPE_PLUGINS &&
40      CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableClickToPlay))
41    return arraysize(kAskSettings);
42  if (content_type_ == CONTENT_SETTINGS_TYPE_COOKIES)
43    return arraysize(kSessionSettings);
44  return arraysize(kNoSessionSettings);
45}
46
47string16 ContentSettingComboModel::GetItemAt(int index) {
48  switch (SettingForIndex(index)) {
49    case CONTENT_SETTING_ALLOW:
50      return l10n_util::GetStringUTF16(IDS_EXCEPTIONS_ALLOW_BUTTON);
51    case CONTENT_SETTING_BLOCK:
52      return l10n_util::GetStringUTF16(IDS_EXCEPTIONS_BLOCK_BUTTON);
53    case CONTENT_SETTING_ASK:
54      return l10n_util::GetStringUTF16(IDS_EXCEPTIONS_ASK_BUTTON);
55    case CONTENT_SETTING_SESSION_ONLY:
56      return l10n_util::GetStringUTF16(IDS_EXCEPTIONS_SESSION_ONLY_BUTTON);
57    default:
58      NOTREACHED();
59  }
60  return string16();
61}
62
63ContentSetting ContentSettingComboModel::SettingForIndex(int index) {
64  if (content_type_ == CONTENT_SETTINGS_TYPE_PLUGINS &&
65      CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableClickToPlay))
66    return kAskSettings[index];
67  if (content_type_ == CONTENT_SETTINGS_TYPE_COOKIES)
68    return kSessionSettings[index];
69  return kNoSessionSettings[index];
70}
71
72int ContentSettingComboModel::IndexForSetting(ContentSetting setting) {
73  for (int i = 0; i < GetItemCount(); ++i)
74    if (SettingForIndex(i) == setting)
75      return i;
76  NOTREACHED();
77  return 0;
78}
79
80