Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(315)

Side by Side Diff: chrome/browser/ui/webui/options/managed_user_settings_handler.cc

Issue 12594029: Create interface to manage manual exceptions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Minor fixes Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/webui/options/managed_user_settings_handler.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/webui/options/managed_user_settings_handler.h" 5 #include "chrome/browser/ui/webui/options/managed_user_settings_handler.h"
6 6
7 #include <vector>
8
7 #include "base/bind.h" 9 #include "base/bind.h"
8 #include "base/command_line.h" 10 #include "base/command_line.h"
9 #include "base/logging.h" 11 #include "base/logging.h"
10 #include "base/metrics/histogram.h" 12 #include "base/metrics/histogram.h"
11 #include "base/prefs/pref_service.h" 13 #include "base/prefs/pref_service.h"
12 #include "base/time.h" 14 #include "base/time.h"
13 #include "base/values.h" 15 #include "base/values.h"
14 #include "chrome/browser/first_run/first_run.h" 16 #include "chrome/browser/first_run/first_run.h"
17 #include "chrome/browser/managed_mode/managed_user_service.h"
18 #include "chrome/browser/managed_mode/managed_user_service_factory.h"
15 #include "chrome/browser/profiles/profile.h" 19 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/common/chrome_switches.h" 20 #include "chrome/common/chrome_switches.h"
17 #include "chrome/common/pref_names.h" 21 #include "chrome/common/pref_names.h"
18 #include "content/public/browser/user_metrics.h" 22 #include "content/public/browser/user_metrics.h"
19 #include "content/public/browser/web_ui.h" 23 #include "content/public/browser/web_ui.h"
20 #include "grit/chromium_strings.h" 24 #include "grit/chromium_strings.h"
21 #include "grit/generated_resources.h" 25 #include "grit/generated_resources.h"
22 #include "grit/google_chrome_strings.h" 26 #include "grit/google_chrome_strings.h"
23 #include "grit/locale_settings.h" 27 #include "grit/locale_settings.h"
24 28
25 using content::UserMetricsAction; 29 using content::UserMetricsAction;
26 30
31 namespace {
32
33 const char* kSetting = "setting";
34 const char* kPattern = "pattern";
35
36 // Create a DictionaryValue that will act as a row in the pattern list.
37 // Ownership of the pointer is passed to the caller.
38 DictionaryValue* GetEntryForPattern(const std::string pattern,
39 const std::string setting) {
40 base::DictionaryValue* entry = new base::DictionaryValue();
41 entry->SetString(kPattern, pattern);
42 entry->SetString(kSetting, setting);
43 return entry;
44 }
45
46 // Read the manual url and host lists from the current profile and add them to
47 // the list of |entries|.
48 void AddCurrentURLEntries(content::WebUI* web_ui, ListValue* entries) {
49 Profile* profile = Profile::FromWebUI(web_ui);
50 const DictionaryValue* dict =
51 profile->GetPrefs()->GetDictionary(prefs::kManagedModeManualHosts);
52 for (DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) {
53 bool allow = false;
54 bool result = it.value().GetAsBoolean(&allow);
55 DCHECK(result);
56 entries->Append(
57 GetEntryForPattern(it.key(), allow ? "allow" : "block"));
58 }
59
60 dict = profile->GetPrefs()->GetDictionary(prefs::kManagedModeManualURLs);
61 for (DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) {
62 bool allow = false;
63 bool result = it.value().GetAsBoolean(&allow);
64 DCHECK(result);
65 entries->Append(
66 GetEntryForPattern(it.key(), allow ? "allow" : "block"));
67 }
68 }
69
70 } // namespace
71
27 namespace options { 72 namespace options {
28 73
29 ManagedUserSettingsHandler::ManagedUserSettingsHandler() { 74 ManagedUserSettingsHandler::ManagedUserSettingsHandler() {
30 } 75 }
31 76
32 ManagedUserSettingsHandler::~ManagedUserSettingsHandler() { 77 ManagedUserSettingsHandler::~ManagedUserSettingsHandler() {
33 } 78 }
34 79
35 void ManagedUserSettingsHandler::InitializeHandler() { 80 void ManagedUserSettingsHandler::InitializeHandler() {
36 pref_change_registrar_.Init(Profile::FromWebUI(web_ui())->GetPrefs()); 81 pref_change_registrar_.Init(Profile::FromWebUI(web_ui())->GetPrefs());
37 pref_change_registrar_.Add( 82 pref_change_registrar_.Add(
38 prefs::kManagedModeLocalPassphrase, 83 prefs::kManagedModeLocalPassphrase,
39 base::Bind(&ManagedUserSettingsHandler::OnLocalPassphraseChanged, 84 base::Bind(&ManagedUserSettingsHandler::OnLocalPassphraseChanged,
40 base::Unretained(this))); 85 base::Unretained(this)));
41 } 86 }
42 87
43 void ManagedUserSettingsHandler::InitializePage() { 88 void ManagedUserSettingsHandler::InitializePage() {
44 if (CommandLine::ForCurrentProcess()->HasSwitch( 89 if (CommandLine::ForCurrentProcess()->HasSwitch(
45 switches::kEnableManagedUsers)) { 90 switches::kEnableManagedUsers)) {
46 PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs(); 91 PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
47 base::FundamentalValue is_passphrase_set(!pref_service->GetString( 92 base::FundamentalValue is_passphrase_set(!pref_service->GetString(
48 prefs::kManagedModeLocalPassphrase).empty()); 93 prefs::kManagedModeLocalPassphrase).empty());
49 web_ui()->CallJavascriptFunction( 94 web_ui()->CallJavascriptFunction(
50 "ManagedUserSettings.passphraseChanged", 95 "ManagedUserSettings.passphraseChanged",
51 is_passphrase_set); 96 is_passphrase_set);
52 } 97 }
98
99 // Populate the list.
100 UpdateViewFromModel();
53 } 101 }
54 102
55 void ManagedUserSettingsHandler::HandlePageOpened(const base::ListValue* args) { 103 void ManagedUserSettingsHandler::HandlePageOpened(const base::ListValue* args) {
56 start_time_ = base::TimeTicks::Now(); 104 start_time_ = base::TimeTicks::Now();
57 content::RecordAction(UserMetricsAction("ManagedMode_OpenSettings")); 105 content::RecordAction(UserMetricsAction("ManagedMode_OpenSettings"));
58 } 106 }
59 107
60 void ManagedUserSettingsHandler::GetLocalizedValues( 108 void ManagedUserSettingsHandler::GetLocalizedValues(
61 base::DictionaryValue* localized_strings) { 109 base::DictionaryValue* localized_strings) {
62 DCHECK(localized_strings); 110 DCHECK(localized_strings);
63 111
64 static OptionsStringResource resources[] = { 112 static OptionsStringResource resources[] = {
65 // Unlock the settings page to allow editing. 113 // Unlock the settings page to allow editing.
66 { "unlockSettings", IDS_UNLOCK_PASSPHRASE_BUTTON }, 114 { "unlockSettings", IDS_UNLOCK_PASSPHRASE_BUTTON },
67 { "lockSettings", IDS_LOCK_MANAGED_USER_BUTTON }, 115 { "lockSettings", IDS_LOCK_MANAGED_USER_BUTTON },
116 // Manual exception view.
117 { "allowException", IDS_EXCEPTIONS_ALLOW_BUTTON },
118 { "blockException", IDS_EXCEPTIONS_BLOCK_BUTTON },
119 { "addNewExceptionInstructions", IDS_EXCEPTIONS_ADD_NEW_INSTRUCTIONS },
120 { "manageExceptions", IDS_EXCEPTIONS_MANAGE },
121 { "exceptionPatternHeader", IDS_EXCEPTIONS_PATTERN_HEADER },
122 { "exceptionBehaviorHeader", IDS_EXCEPTIONS_ACTION_HEADER },
68 // Installed content packs. 123 // Installed content packs.
69 { "installedContentPacks", IDS_INSTALLED_CONTENT_PACKS_LABEL }, 124 { "manualExceptionsHeader", IDS_MANUAL_EXCEPTION_HEADER },
125 { "manualExceptionsTabTitle", IDS_MANUAL_EXCEPTION_TAB_TITLE },
126 { "contentPacksTabLabel", IDS_CONTENT_PACKS_TAB_LABEL },
70 { "getContentPacks", IDS_GET_CONTENT_PACKS_BUTTON }, 127 { "getContentPacks", IDS_GET_CONTENT_PACKS_BUTTON },
71 { "getContentPacksURL", IDS_GET_CONTENT_PACKS_URL }, 128 { "getContentPacksURL", IDS_GET_CONTENT_PACKS_URL },
72 // Content pack restriction options. 129 // Content pack restriction options.
73 { "contentPackSettings", IDS_CONTENT_PACK_SETTINGS_LABEL }, 130 { "contentPackSettings", IDS_CONTENT_PACK_SETTINGS_LABEL },
74 { "outsideContentPacksAllow", IDS_OUTSIDE_CONTENT_PACKS_ALLOW_RADIO }, 131 { "outsideContentPacksAllow", IDS_OUTSIDE_CONTENT_PACKS_ALLOW_RADIO },
75 { "outsideContentPacksWarn", IDS_OUTSIDE_CONTENT_PACKS_WARN_RADIO }, 132 { "outsideContentPacksWarn", IDS_OUTSIDE_CONTENT_PACKS_WARN_RADIO },
76 { "outsideContentPacksBlock", IDS_OUTSIDE_CONTENT_PACKS_BLOCK_RADIO }, 133 { "outsideContentPacksBlock", IDS_OUTSIDE_CONTENT_PACKS_BLOCK_RADIO },
77 // Other managed user settings 134 // Other managed user settings
78 { "advancedManagedUserSettings", IDS_ADVANCED_MANAGED_USER_LABEL }, 135 { "advancedManagedUserSettings", IDS_ADVANCED_MANAGED_USER_LABEL },
79 { "enableSafeSearch", IDS_SAFE_SEARCH_ENABLED }, 136 { "enableSafeSearch", IDS_SAFE_SEARCH_ENABLED },
80 { "allowSignIn", IDS_SIGNIN_SYNC_ALLOWED }, 137 { "allowSignIn", IDS_SIGNIN_SYNC_ALLOWED },
81 { "disableHistoryDeletion", IDS_HISTORY_DELETION_DISABLED }, 138 { "disableHistoryDeletion", IDS_HISTORY_DELETION_DISABLED },
82 { "usePassphrase", IDS_USE_PASSPHRASE_LABEL }, 139 { "usePassphrase", IDS_USE_PASSPHRASE_LABEL },
83 { "setPassphrase", IDS_SET_PASSPHRASE_BUTTON } 140 { "setPassphrase", IDS_SET_PASSPHRASE_BUTTON }
84 }; 141 };
85 142
86 RegisterStrings(localized_strings, resources, arraysize(resources)); 143 RegisterStrings(localized_strings, resources, arraysize(resources));
87 RegisterTitle(localized_strings, "managedUserSettingsPage", 144 RegisterTitle(localized_strings, "managedUserSettingsPage",
88 IDS_MANAGED_USER_SETTINGS_TITLE); 145 IDS_MANAGED_USER_SETTINGS_TITLE);
89 146 RegisterTitle(localized_strings, "manualExceptions",
147 IDS_MANUAL_EXCEPTION_HEADER);
90 localized_strings->SetBoolean( 148 localized_strings->SetBoolean(
91 "managedUsersEnabled", 149 "managedUsersEnabled",
92 CommandLine::ForCurrentProcess()->HasSwitch( 150 CommandLine::ForCurrentProcess()->HasSwitch(
93 switches::kEnableManagedUsers)); 151 switches::kEnableManagedUsers));
94 } 152 }
95 153
96 void ManagedUserSettingsHandler::RegisterMessages() { 154 void ManagedUserSettingsHandler::RegisterMessages() {
97 web_ui()->RegisterMessageCallback( 155 web_ui()->RegisterMessageCallback(
98 "confirmManagedUserSettings", 156 "confirmManagedUserSettings",
99 base::Bind(&ManagedUserSettingsHandler::SaveMetrics, 157 base::Bind(&ManagedUserSettingsHandler::SaveMetrics,
100 base::Unretained(this))); 158 base::Unretained(this)));
101 web_ui()->RegisterMessageCallback( 159 web_ui()->RegisterMessageCallback(
102 "settingsPageOpened", 160 "settingsPageOpened",
103 base::Bind(&ManagedUserSettingsHandler::HandlePageOpened, 161 base::Bind(&ManagedUserSettingsHandler::HandlePageOpened,
104 base::Unretained(this))); 162 base::Unretained(this)));
163 web_ui()->RegisterMessageCallback("removeManualException",
164 base::Bind(&ManagedUserSettingsHandler::RemoveManualException,
165 base::Unretained(this)));
166 web_ui()->RegisterMessageCallback("setManualException",
167 base::Bind(&ManagedUserSettingsHandler::SetManualException,
168 base::Unretained(this)));
169 web_ui()->RegisterMessageCallback("checkManualExceptionValidity",
170 base::Bind(
171 &ManagedUserSettingsHandler::CheckManualExceptionValidity,
172 base::Unretained(this)));
105 } 173 }
106 174
107 void ManagedUserSettingsHandler::SaveMetrics(const ListValue* args) { 175 void ManagedUserSettingsHandler::SaveMetrics(const ListValue* args) {
108 if (first_run::IsChromeFirstRun()) { 176 if (first_run::IsChromeFirstRun()) {
109 UMA_HISTOGRAM_LONG_TIMES("ManagedMode.UserSettingsFirstRunTime", 177 UMA_HISTOGRAM_LONG_TIMES("ManagedMode.UserSettingsFirstRunTime",
110 base::TimeTicks::Now() - start_time_); 178 base::TimeTicks::Now() - start_time_);
111 } else { 179 } else {
112 UMA_HISTOGRAM_LONG_TIMES("ManagedMode.UserSettingsModifyTime", 180 UMA_HISTOGRAM_LONG_TIMES("ManagedMode.UserSettingsModifyTime",
113 base::TimeTicks::Now() - start_time_); 181 base::TimeTicks::Now() - start_time_);
114 } 182 }
115 } 183 }
116 184
117 void ManagedUserSettingsHandler::OnLocalPassphraseChanged() { 185 void ManagedUserSettingsHandler::OnLocalPassphraseChanged() {
118 PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs(); 186 PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
119 base::FundamentalValue is_passphrase_set(!pref_service->GetString( 187 base::FundamentalValue is_passphrase_set(!pref_service->GetString(
120 prefs::kManagedModeLocalPassphrase).empty()); 188 prefs::kManagedModeLocalPassphrase).empty());
121 web_ui()->CallJavascriptFunction("ManagedUserSettings.passphraseChanged", 189 web_ui()->CallJavascriptFunction("ManagedUserSettings.passphraseChanged",
122 is_passphrase_set); 190 is_passphrase_set);
123 } 191 }
124 192
193 void ManagedUserSettingsHandler::RemoveManualException(
194 const ListValue* args) {
195 size_t arg_i = 0;
196 std::string pattern;
197 CHECK(args->GetString(arg_i++, &pattern));
198
199 UpdateManualBehavior(pattern, ManagedUserService::MANUAL_NONE);
200
201 UpdateViewFromModel();
202 }
203
204 void ManagedUserSettingsHandler::UpdateManualBehavior(
205 std::string pattern,
206 ManagedUserService::ManualBehavior behavior) {
207 ManagedUserService* service =
208 ManagedUserServiceFactory::GetForProfile(Profile::FromWebUI(web_ui()));
209 GURL url(pattern);
210 if (!url.is_valid()) {
211 // This is a host pattern.
212 std::vector<std::string> to_update;
213 to_update.push_back(pattern);
214 service->SetManualBehaviorForHosts(to_update, behavior);
215 } else {
216 // A specific URL.
217 std::vector<GURL> to_update;
218 to_update.push_back(url);
219 service->SetManualBehaviorForURLs(to_update, behavior);
220 }
221 }
222
223 void ManagedUserSettingsHandler::SetManualException(
224 const ListValue* args) {
225 size_t arg_i = 0;
226 std::string pattern;
227 CHECK(args->GetString(arg_i++, &pattern));
228 std::string setting;
229 CHECK(args->GetString(arg_i++, &setting));
230 bool needs_update;
231 CHECK(args->GetBoolean(arg_i++, &needs_update));
232
233 DCHECK(setting == "allow" || setting == "block");
234 ManagedUserService::ManualBehavior behavior =
235 (setting == "allow") ? ManagedUserService::MANUAL_ALLOW
236 : ManagedUserService::MANUAL_BLOCK;
237 UpdateManualBehavior(pattern, behavior);
238
239 if (needs_update)
240 UpdateViewFromModel();
241 }
242
243 void ManagedUserSettingsHandler::CheckManualExceptionValidity(
244 const ListValue* args) {
245 size_t arg_i = 0;
246 std::string pattern_string;
247 CHECK(args->GetString(arg_i++, &pattern_string));
248 bool is_valid = false;
249
250 // First, try to see if it is a valid URL.
251 GURL url(pattern_string);
252 is_valid = url.is_valid() && url.IsStandard();
253
254 // If it's not valid, try to put a http:// schema to it. If it was a host, it
255 // should be valid now, but check that the path, query and ref are empty.
256 if (!is_valid) {
257 url = GURL("http://" + pattern_string);
258 is_valid = url.is_valid() && url.path() == "/" && !url.has_query() &&
259 !url.has_ref();
Bernhard Bauer 2013/03/27 14:41:11 How about using CanonicalizeHost() (from gurl.h)?
Sergiu 2013/03/27 15:26:46 I've changed it to that (the one from url_canon.h)
Bernhard Bauer 2013/03/27 15:55:12 By escaped you mean punycode? We also use that in
260 }
261
262 web_ui()->CallJavascriptFunction(
263 "ManagedUserSettings.patternValidityCheckComplete",
264 base::StringValue(pattern_string),
265 base::FundamentalValue(is_valid));
266 }
267
268 void ManagedUserSettingsHandler::UpdateViewFromModel() {
269 ListValue entries;
270 AddCurrentURLEntries(web_ui(), &entries);
271
272 web_ui()->CallJavascriptFunction(
273 "ManagedUserSettings.setManualExceptions",
274 entries);
275 }
276
125 } // namespace options 277 } // namespace options
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/options/managed_user_settings_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698