Chromium Code Reviews| Index: chrome/browser/extensions/api/messaging/native_messaging_policy_handler.cc |
| diff --git a/chrome/browser/extensions/api/messaging/native_messaging_policy_handler.cc b/chrome/browser/extensions/api/messaging/native_messaging_policy_handler.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..62c410adbb7c8eb1794ce9101e7d5e542a0ef0df |
| --- /dev/null |
| +++ b/chrome/browser/extensions/api/messaging/native_messaging_policy_handler.cc |
| @@ -0,0 +1,96 @@ |
| +// Copyright 2013 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/extensions/api/messaging/native_messaging_policy_handler.h" |
| + |
| +#include "base/logging.h" |
| +#include "base/prefs/pref_value_map.h" |
| +#include "chrome/browser/extensions/api/messaging/native_messaging_host_manifest.h" |
| +#include "chrome/browser/extensions/external_policy_loader.h" |
| +#include "chrome/common/pref_names.h" |
| +#include "components/policy/core/browser/policy_error_map.h" |
| +#include "components/policy/core/common/policy_map.h" |
| +#include "grit/component_strings.h" |
| +#include "policy/policy_constants.h" |
| + |
| +namespace extensions { |
| + |
| +NativeMessagingHostListPolicyHandler::NativeMessagingHostListPolicyHandler( |
| + const char* policy_name, |
| + const char* pref_path, |
| + bool allow_wildcards) |
| + : policy::TypeCheckingPolicyHandler(policy_name, base::Value::TYPE_LIST), |
| + pref_path_(pref_path), |
| + allow_wildcards_(allow_wildcards) {} |
| + |
| +NativeMessagingHostListPolicyHandler::~NativeMessagingHostListPolicyHandler() {} |
| + |
| +bool NativeMessagingHostListPolicyHandler::CheckPolicySettings( |
| + const policy::PolicyMap& policies, |
| + policy::PolicyErrorMap* errors) { |
| + return CheckAndGetList(policies, errors, NULL); |
| +} |
| + |
| +void NativeMessagingHostListPolicyHandler::ApplyPolicySettings( |
| + const policy::PolicyMap& policies, |
| + PrefValueMap* prefs) { |
| + scoped_ptr<base::ListValue> list; |
| + policy::PolicyErrorMap errors; |
| + if (CheckAndGetList(policies, &errors, &list) && list) |
|
not at google - send to devlin
2013/12/28 04:55:51
If I'm reading this correctly... the "&& list" her
Sergey Ulanov
2014/01/06 23:21:55
That's the way it works for all other policies, e.
|
| + prefs->SetValue(pref_path(), list.release()); |
| +} |
| + |
| +const char* NativeMessagingHostListPolicyHandler::pref_path() const { |
| + return pref_path_; |
| +} |
| + |
| +bool NativeMessagingHostListPolicyHandler::CheckAndGetList( |
| + const policy::PolicyMap& policies, |
| + policy::PolicyErrorMap* errors, |
| + scoped_ptr<base::ListValue>* names) { |
|
not at google - send to devlin
2013/12/28 04:55:51
you could just pass a base::ListValue* here and th
Sergey Ulanov
2014/01/06 23:21:55
We want to distinguish between the case when the p
|
| + if (names) |
| + names->reset(); |
|
not at google - send to devlin
2013/12/28 04:55:51
this will always be a no-op I think.
Sergey Ulanov
2014/01/06 23:21:55
Done.
|
| + |
| + const base::Value* value = NULL; |
| + if (!CheckAndGetValue(policies, errors, &value)) |
| + return false; |
| + |
| + if (!value) |
|
not at google - send to devlin
2013/12/28 04:55:51
what does not finding this value mean?
Sergey Ulanov
2014/01/06 23:21:55
It means that the policy isn't set.
|
| + return true; |
| + |
| + const base::ListValue* list_value = NULL; |
| + if (!value->GetAsList(&list_value)) { |
| + NOTREACHED(); |
| + return false; |
| + } |
| + |
| + // Filter the list, rejecting any invalid extension IDs. |
|
Joao da Silva
2013/12/29 23:25:28
IIUC there are no extension IDs in these values.
Sergey Ulanov
2014/01/06 23:21:55
Copied this code from chrome/browser/extensions/po
|
| + scoped_ptr<base::ListValue> filtered_list(new base::ListValue()); |
| + for (base::ListValue::const_iterator entry(list_value->begin()); |
| + entry != list_value->end(); ++entry) { |
| + std::string name; |
| + if (!(*entry)->GetAsString(&name)) { |
| + errors->AddError(policy_name(), |
| + entry - list_value->begin(), |
| + IDS_POLICY_TYPE_ERROR, |
| + ValueTypeToString(base::Value::TYPE_STRING)); |
| + continue; |
| + } |
| + if (!(allow_wildcards_ && name == "*") && |
| + !NativeMessagingHostManifest::IsValidName(name)) { |
| + errors->AddError(policy_name(), |
| + entry - list_value->begin(), |
| + IDS_POLICY_VALUE_FORMAT_ERROR); |
| + continue; |
| + } |
| + filtered_list->Append(base::Value::CreateStringValue(name)); |
|
not at google - send to devlin
2013/12/28 04:55:51
the "CreateStringValue(...)" methods are deprecate
Sergey Ulanov
2014/01/06 23:21:55
Done.
|
| + } |
| + |
| + if (names) |
| + *names = filtered_list.Pass(); |
|
not at google - send to devlin
2013/12/28 04:55:51
the way this is implemented there isn't any advant
Sergey Ulanov
2014/01/06 23:21:55
We want to distinguish between the case when the p
|
| + |
| + return true; |
| +} |
| + |
| +} // namespace extensions |