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

Side by Side Diff: chrome/browser/policy/configuration_policy_handler.cc

Issue 8395044: Disable the Developer Tools when Javascript is disabled. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 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 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/policy/configuration_policy_handler.h" 5 #include "chrome/browser/policy/configuration_policy_handler.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/file_path.h" 10 #include "base/file_path.h"
(...skipping 17 matching lines...) Expand all
28 #include "chrome/common/content_settings.h" 28 #include "chrome/common/content_settings.h"
29 #include "chrome/common/pref_names.h" 29 #include "chrome/common/pref_names.h"
30 #include "grit/generated_resources.h" 30 #include "grit/generated_resources.h"
31 #include "policy/configuration_policy_type.h" 31 #include "policy/configuration_policy_type.h"
32 #include "policy/policy_constants.h" 32 #include "policy/policy_constants.h"
33 33
34 namespace policy { 34 namespace policy {
35 35
36 namespace { 36 namespace {
37 37
38 // Helper functions ------------------------------------------------------------
39
40 std::string ValueTypeToString(Value::Type type) {
41 static const char* strings[] = {
42 "null",
43 "boolean",
44 "integer",
45 "double",
46 "string",
47 "binary",
48 "dictionary",
49 "list"
50 };
51 DCHECK(static_cast<size_t>(type) < arraysize(strings));
52 return std::string(strings[type]);
53 }
54
55 const Value* GetTypeCheckedPolicy(const PolicyMap* policies,
56 PolicyErrorMap* errors,
57 ConfigurationPolicyType policy,
58 Value::Type type) {
59 const Value* value = policies->Get(policy);
60 if (value && !value->IsType(type)) {
61 errors->AddError(policy, IDS_POLICY_TYPE_ERROR, ValueTypeToString(type));
62 return NULL;
63 }
64 return value;
65 }
66
67
38 // Implementations of ConfigurationPolicyHandler ------------------------------- 68 // Implementations of ConfigurationPolicyHandler -------------------------------
39 69
40 // Abstract class derived from ConfigurationPolicyHandler that should be 70 // Abstract class derived from ConfigurationPolicyHandler that should be
41 // subclassed to handle a single policy (not a combination of policies). 71 // subclassed to handle a single policy (not a combination of policies).
42 class TypeCheckingPolicyHandler : public ConfigurationPolicyHandler { 72 class TypeCheckingPolicyHandler : public ConfigurationPolicyHandler {
43 public: 73 public:
44 TypeCheckingPolicyHandler(ConfigurationPolicyType policy_type, 74 TypeCheckingPolicyHandler(ConfigurationPolicyType policy_type,
45 base::Value::Type value_type); 75 base::Value::Type value_type);
46 76
47 // ConfigurationPolicyHandler methods: 77 // ConfigurationPolicyHandler methods:
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 { Value::TYPE_LIST, kPolicyDisabledPluginsExceptions, 393 { Value::TYPE_LIST, kPolicyDisabledPluginsExceptions,
364 prefs::kPluginsDisabledPluginsExceptions}, 394 prefs::kPluginsDisabledPluginsExceptions},
365 { Value::TYPE_LIST, kPolicyEnabledPlugins, 395 { Value::TYPE_LIST, kPolicyEnabledPlugins,
366 prefs::kPluginsEnabledPlugins}, 396 prefs::kPluginsEnabledPlugins},
367 { Value::TYPE_BOOLEAN, kPolicyShowHomeButton, 397 { Value::TYPE_BOOLEAN, kPolicyShowHomeButton,
368 prefs::kShowHomeButton }, 398 prefs::kShowHomeButton },
369 { Value::TYPE_BOOLEAN, kPolicySavingBrowserHistoryDisabled, 399 { Value::TYPE_BOOLEAN, kPolicySavingBrowserHistoryDisabled,
370 prefs::kSavingBrowserHistoryDisabled }, 400 prefs::kSavingBrowserHistoryDisabled },
371 { Value::TYPE_BOOLEAN, kPolicyClearSiteDataOnExit, 401 { Value::TYPE_BOOLEAN, kPolicyClearSiteDataOnExit,
372 prefs::kClearSiteDataOnExit }, 402 prefs::kClearSiteDataOnExit },
373 { Value::TYPE_BOOLEAN, kPolicyDeveloperToolsDisabled,
374 prefs::kDevToolsDisabled },
375 { Value::TYPE_BOOLEAN, kPolicyBlockThirdPartyCookies, 403 { Value::TYPE_BOOLEAN, kPolicyBlockThirdPartyCookies,
376 prefs::kBlockThirdPartyCookies }, 404 prefs::kBlockThirdPartyCookies },
377 { Value::TYPE_INTEGER, kPolicyDefaultCookiesSetting, 405 { Value::TYPE_INTEGER, kPolicyDefaultCookiesSetting,
378 prefs::kManagedDefaultCookiesSetting }, 406 prefs::kManagedDefaultCookiesSetting },
379 { Value::TYPE_INTEGER, kPolicyDefaultImagesSetting, 407 { Value::TYPE_INTEGER, kPolicyDefaultImagesSetting,
380 prefs::kManagedDefaultImagesSetting }, 408 prefs::kManagedDefaultImagesSetting },
381 { Value::TYPE_INTEGER, kPolicyDefaultPluginsSetting, 409 { Value::TYPE_INTEGER, kPolicyDefaultPluginsSetting,
382 prefs::kManagedDefaultPluginsSetting }, 410 prefs::kManagedDefaultPluginsSetting },
383 { Value::TYPE_INTEGER, kPolicyDefaultPopupsSetting, 411 { Value::TYPE_INTEGER, kPolicyDefaultPopupsSetting,
384 prefs::kManagedDefaultPopupsSetting }, 412 prefs::kManagedDefaultPopupsSetting },
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 false, false, false, IDS_POLICY_PROXY_MODE_AUTO_DETECT_ERROR }, 539 false, false, false, IDS_POLICY_PROXY_MODE_AUTO_DETECT_ERROR },
512 { ProxyPrefs::kPacScriptProxyModeName, 540 { ProxyPrefs::kPacScriptProxyModeName,
513 true, false, false, IDS_POLICY_PROXY_MODE_PAC_URL_ERROR }, 541 true, false, false, IDS_POLICY_PROXY_MODE_PAC_URL_ERROR },
514 { ProxyPrefs::kFixedServersProxyModeName, 542 { ProxyPrefs::kFixedServersProxyModeName,
515 false, true, true, IDS_POLICY_PROXY_MODE_FIXED_SERVERS_ERROR }, 543 false, true, true, IDS_POLICY_PROXY_MODE_FIXED_SERVERS_ERROR },
516 { ProxyPrefs::kSystemProxyModeName, 544 { ProxyPrefs::kSystemProxyModeName,
517 false, false, false, IDS_POLICY_PROXY_MODE_SYSTEM_ERROR }, 545 false, false, false, IDS_POLICY_PROXY_MODE_SYSTEM_ERROR },
518 }; 546 };
519 547
520 548
521 // Helper functions ------------------------------------------------------------
522
523 std::string ValueTypeToString(Value::Type type) {
524 static const char* strings[] = {
525 "null",
526 "boolean",
527 "integer",
528 "double",
529 "string",
530 "binary",
531 "dictionary",
532 "list"
533 };
534 DCHECK(static_cast<size_t>(type) < arraysize(strings));
535 return std::string(strings[type]);
536 }
537
538
539 // TypeCheckingPolicyHandler implementation ------------------------------------ 549 // TypeCheckingPolicyHandler implementation ------------------------------------
540 550
541 TypeCheckingPolicyHandler::TypeCheckingPolicyHandler( 551 TypeCheckingPolicyHandler::TypeCheckingPolicyHandler(
542 ConfigurationPolicyType policy_type, 552 ConfigurationPolicyType policy_type,
543 Value::Type value_type) 553 Value::Type value_type)
544 : policy_type_(policy_type), 554 : policy_type_(policy_type),
545 value_type_(value_type) { 555 value_type_(value_type) {
546 } 556 }
547 557
548 TypeCheckingPolicyHandler::~TypeCheckingPolicyHandler() { 558 TypeCheckingPolicyHandler::~TypeCheckingPolicyHandler() {
549 } 559 }
550 560
551 ConfigurationPolicyType TypeCheckingPolicyHandler::policy_type() const { 561 ConfigurationPolicyType TypeCheckingPolicyHandler::policy_type() const {
552 return policy_type_; 562 return policy_type_;
553 } 563 }
554 564
555 bool TypeCheckingPolicyHandler::CheckPolicySettings(const PolicyMap* policies, 565 bool TypeCheckingPolicyHandler::CheckPolicySettings(const PolicyMap* policies,
556 PolicyErrorMap* errors) { 566 PolicyErrorMap* errors) {
557 const Value* value = policies->Get(policy_type_); 567 const Value* value = policies->Get(policy_type_);
558 if (value && value_type_ != value->GetType()) { 568 if (value && value_type_ != value->GetType()) {
Mattias Nissler (ping if slow) 2011/10/26 15:09:28 This is almost GetTypeCheckedPolicy(). Share code?
559 errors->AddError(policy_type_, 569 errors->AddError(policy_type_,
560 IDS_POLICY_TYPE_ERROR, 570 IDS_POLICY_TYPE_ERROR,
561 ValueTypeToString(value_type_)); 571 ValueTypeToString(value_type_));
562 return false; 572 return false;
563 } 573 }
564 return true; 574 return true;
565 } 575 }
566 576
567 577
568 // SimplePolicyHandler implementation ------------------------------------------ 578 // SimplePolicyHandler implementation ------------------------------------------
(...skipping 659 matching lines...) Expand 10 before | Expand all | Expand 10 after
1228 // JavascriptPolicyHandler implementation -------------------------------------- 1238 // JavascriptPolicyHandler implementation --------------------------------------
1229 1239
1230 JavascriptPolicyHandler::JavascriptPolicyHandler() { 1240 JavascriptPolicyHandler::JavascriptPolicyHandler() {
1231 } 1241 }
1232 1242
1233 JavascriptPolicyHandler::~JavascriptPolicyHandler() { 1243 JavascriptPolicyHandler::~JavascriptPolicyHandler() {
1234 } 1244 }
1235 1245
1236 bool JavascriptPolicyHandler::CheckPolicySettings(const PolicyMap* policies, 1246 bool JavascriptPolicyHandler::CheckPolicySettings(const PolicyMap* policies,
1237 PolicyErrorMap* errors) { 1247 PolicyErrorMap* errors) {
1238 const Value* javascript_enabled = policies->Get(kPolicyJavascriptEnabled); 1248 // Whether Javascript is globally disabled.
1239 const Value* default_setting = policies->Get(kPolicyDefaultJavaScriptSetting); 1249 bool disabled = false;
1250 ConfigurationPolicyType disabling_policy;
1240 1251
1241 if (javascript_enabled && !javascript_enabled->IsType(Value::TYPE_BOOLEAN)) { 1252 const Value* javascript_enabled =
1242 errors->AddError(kPolicyJavascriptEnabled, 1253 GetTypeCheckedPolicy(policies,
1243 IDS_POLICY_TYPE_ERROR, 1254 errors,
1244 ValueTypeToString(Value::TYPE_BOOLEAN)); 1255 kPolicyJavascriptEnabled,
1245 javascript_enabled = NULL; 1256 Value::TYPE_BOOLEAN);
1257 if (javascript_enabled) {
1258 bool value;
1259 if (javascript_enabled->GetAsBoolean(&value) && !value) {
1260 disabled = true;
1261 disabling_policy = kPolicyJavascriptEnabled;
1262 }
1246 } 1263 }
1247 1264
1248 if (default_setting && !default_setting->IsType(Value::TYPE_INTEGER)) { 1265 // DefaultJavaScriptSetting is forced to CONTENT_SETTING_BLOCK if
1249 errors->AddError(kPolicyDefaultJavaScriptSetting, 1266 // JavascriptEnabled is false.
1250 IDS_POLICY_TYPE_ERROR, 1267 const Value* default_setting =
1251 ValueTypeToString(Value::TYPE_INTEGER)); 1268 GetTypeCheckedPolicy(policies,
1252 default_setting = NULL; 1269 errors,
1270 kPolicyDefaultJavaScriptSetting,
1271 Value::TYPE_INTEGER);
1272 if (default_setting) {
1273 int value;
1274 if (default_setting->GetAsInteger(&value)) {
1275 if (disabled && value != CONTENT_SETTING_BLOCK) {
1276 errors->AddError(kPolicyDefaultJavaScriptSetting,
1277 IDS_POLICY_OVERRIDDEN,
1278 GetPolicyName(kPolicyJavascriptEnabled));
1279 }
1280 if (!disabled && value == CONTENT_SETTING_BLOCK) {
1281 disabled = true;
1282 disabling_policy = kPolicyDefaultJavaScriptSetting;
1283 }
1284 }
1253 } 1285 }
1254 1286
1255 bool enabled; 1287 // DeveloperToolsDisabled is forced to true if javascript is disabled by
1256 int setting; 1288 // JavascriptEnabled or DefaultJavaScriptSetting.
1257 if (javascript_enabled && 1289 const Value* devtools_disabled =
1258 default_setting && 1290 GetTypeCheckedPolicy(policies,
1259 javascript_enabled->GetAsBoolean(&enabled) && 1291 errors,
1260 default_setting->GetAsInteger(&setting) && 1292 kPolicyDeveloperToolsDisabled,
1261 !enabled && 1293 Value::TYPE_BOOLEAN);
1262 setting != CONTENT_SETTING_BLOCK) { 1294 if (devtools_disabled) {
1263 errors->AddError(kPolicyDefaultJavaScriptSetting, 1295 bool value;
1264 IDS_POLICY_OVERRIDDEN, 1296 if (devtools_disabled->GetAsBoolean(&value) && !value && disabled) {
1265 GetPolicyName(kPolicyJavascriptEnabled)); 1297 errors->AddError(kPolicyDeveloperToolsDisabled,
1298 IDS_POLICY_OVERRIDDEN,
1299 GetPolicyName(disabling_policy));
1300 }
1266 } 1301 }
1302
1267 return true; 1303 return true;
1268 } 1304 }
1269 1305
1270 void JavascriptPolicyHandler::ApplyPolicySettings(const PolicyMap* policies, 1306 void JavascriptPolicyHandler::ApplyPolicySettings(const PolicyMap* policies,
1271 PrefValueMap* prefs) { 1307 PrefValueMap* prefs) {
1272 const Value* javascript_enabled = policies->Get(kPolicyJavascriptEnabled); 1308 const Value* javascript_enabled = policies->Get(kPolicyJavascriptEnabled);
1273 const Value* default_setting = policies->Get(kPolicyDefaultJavaScriptSetting); 1309 const Value* default_setting = policies->Get(kPolicyDefaultJavaScriptSetting);
1310 const Value* devtools_disabled = policies->Get(kPolicyDeveloperToolsDisabled);
1274 1311
1275 int setting = CONTENT_SETTING_DEFAULT; 1312 int setting = CONTENT_SETTING_DEFAULT;
1276 if (default_setting) 1313 if (default_setting)
1277 default_setting->GetAsInteger(&setting); 1314 default_setting->GetAsInteger(&setting);
1278 1315
1279 bool enabled = true; 1316 if (javascript_enabled) {
1280 if (javascript_enabled && javascript_enabled->GetAsBoolean(&enabled)) { 1317 bool enabled;
1281 prefs->SetValue(prefs::kWebKitJavascriptEnabled, 1318 if (javascript_enabled->GetAsBoolean(&enabled)) {
1282 javascript_enabled->DeepCopy()); 1319 prefs->SetValue(prefs::kWebKitJavascriptEnabled,
1283 // Force the javascript content setting to BLOCK when this policy disables 1320 javascript_enabled->DeepCopy());
1284 // javascript globally. 1321 // Force the javascript content setting to BLOCK when this policy disables
1285 if (!enabled) 1322 // javascript globally.
1286 setting = CONTENT_SETTING_BLOCK; 1323 if (!enabled)
1324 setting = CONTENT_SETTING_BLOCK;
1325 }
1287 } 1326 }
1288 1327
1289 if (setting != CONTENT_SETTING_DEFAULT) 1328 if (setting != CONTENT_SETTING_DEFAULT) {
1290 prefs->SetValue(prefs::kManagedDefaultJavaScriptSetting, 1329 prefs->SetValue(prefs::kManagedDefaultJavaScriptSetting,
1291 Value::CreateIntegerValue(setting)); 1330 Value::CreateIntegerValue(setting));
1331 }
1332
1333 // Disable the developer tools if javascript is disabled by JavascriptEnabled
1334 // or by DefaultJavaScriptSetting.
1335 bool disabled = false;
1336 if (devtools_disabled)
1337 devtools_disabled->GetAsBoolean(&disabled);
1338 if (setting == CONTENT_SETTING_BLOCK)
1339 disabled = true;
1340 // Only set the preference if there is a policy or if it's forced to true.
1341 if (devtools_disabled || setting == CONTENT_SETTING_BLOCK) {
1342 prefs->SetValue(prefs::kDevToolsDisabled,
1343 Value::CreateBooleanValue(disabled));
Mattias Nissler (ping if slow) 2011/10/26 15:09:28 I'm not sure this is the way to go. It only fixes
Joao da Silva 2011/11/03 18:00:10 It turns out that content settings never disable t
1344 }
1292 } 1345 }
1293 1346
1294 1347
1295 } // namespace 1348 } // namespace
1296 1349
1297 1350
1298 // ConfigurationPolicyHandler implementation ----------------------------------- 1351 // ConfigurationPolicyHandler implementation -----------------------------------
1299 1352
1300 // static 1353 // static
1301 ConfigurationPolicyHandler::HandlerList* 1354 ConfigurationPolicyHandler::HandlerList*
(...skipping 17 matching lines...) Expand all
1319 list->push_back(new SyncPolicyHandler()); 1372 list->push_back(new SyncPolicyHandler());
1320 1373
1321 #if !defined(OS_CHROMEOS) 1374 #if !defined(OS_CHROMEOS)
1322 list->push_back(new DownloadDirPolicyHandler()); 1375 list->push_back(new DownloadDirPolicyHandler());
1323 #endif // !defined(OS_CHROME0S) 1376 #endif // !defined(OS_CHROME0S)
1324 1377
1325 return list; 1378 return list;
1326 } 1379 }
1327 1380
1328 } // namespace policy 1381 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698