Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |