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

Side by Side Diff: chrome/browser/extensions/api/messaging/native_messaging_policy_handler.cc

Issue 118253005: Add managed policies for Native Messaging (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 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
OLDNEW
(Empty)
1 // Copyright 2013 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/extensions/api/messaging/native_messaging_policy_handle r.h"
6
7 #include "base/logging.h"
8 #include "base/prefs/pref_value_map.h"
9 #include "chrome/browser/extensions/api/messaging/native_messaging_host_manifest .h"
10 #include "chrome/browser/extensions/external_policy_loader.h"
11 #include "chrome/common/pref_names.h"
12 #include "components/policy/core/browser/policy_error_map.h"
13 #include "components/policy/core/common/policy_map.h"
14 #include "grit/component_strings.h"
15 #include "policy/policy_constants.h"
16
17 namespace extensions {
18
19 NativeMessagingHostListPolicyHandler::NativeMessagingHostListPolicyHandler(
20 const char* policy_name,
21 const char* pref_path,
22 bool allow_wildcards)
23 : policy::TypeCheckingPolicyHandler(policy_name, base::Value::TYPE_LIST),
24 pref_path_(pref_path),
25 allow_wildcards_(allow_wildcards) {}
26
27 NativeMessagingHostListPolicyHandler::~NativeMessagingHostListPolicyHandler() {}
28
29 bool NativeMessagingHostListPolicyHandler::CheckPolicySettings(
30 const policy::PolicyMap& policies,
31 policy::PolicyErrorMap* errors) {
32 return CheckAndGetList(policies, errors, NULL);
33 }
34
35 void NativeMessagingHostListPolicyHandler::ApplyPolicySettings(
36 const policy::PolicyMap& policies,
37 PrefValueMap* prefs) {
38 scoped_ptr<base::ListValue> list;
39 policy::PolicyErrorMap errors;
40 if (CheckAndGetList(policies, &errors, &list) && list)
41 prefs->SetValue(pref_path(), list.release());
42 }
43
44 const char* NativeMessagingHostListPolicyHandler::pref_path() const {
45 return pref_path_;
46 }
47
48 bool NativeMessagingHostListPolicyHandler::CheckAndGetList(
49 const policy::PolicyMap& policies,
50 policy::PolicyErrorMap* errors,
51 scoped_ptr<base::ListValue>* names) {
52 const base::Value* value = NULL;
53 if (!CheckAndGetValue(policies, errors, &value))
54 return false;
55
56 if (!value)
57 return true;
58
59 const base::ListValue* list_value = NULL;
60 if (!value->GetAsList(&list_value)) {
61 NOTREACHED();
62 return false;
63 }
64
65 // Filter the list, rejecting any invalid native messaging host names.
66 scoped_ptr<base::ListValue> filtered_list(new base::ListValue());
67 for (base::ListValue::const_iterator entry(list_value->begin());
68 entry != list_value->end(); ++entry) {
69 std::string name;
70 if (!(*entry)->GetAsString(&name)) {
71 errors->AddError(policy_name(),
72 entry - list_value->begin(),
73 IDS_POLICY_TYPE_ERROR,
74 ValueTypeToString(base::Value::TYPE_STRING));
75 continue;
76 }
77 if (!(allow_wildcards_ && name == "*") &&
78 !NativeMessagingHostManifest::IsValidName(name)) {
79 errors->AddError(policy_name(),
80 entry - list_value->begin(),
81 IDS_POLICY_VALUE_FORMAT_ERROR);
82 continue;
83 }
84 filtered_list->Append(new base::StringValue(name));
85 }
86
87 if (names)
88 *names = filtered_list.Pass();
89
90 return true;
91 }
92
93 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698