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

Side by Side Diff: chrome/browser/chromeos/cros/network_library.cc

Issue 8804021: Proper management for policy-configured networks. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years 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 | « no previous file | chrome/browser/chromeos/cros/onc_network_parser.cc » ('j') | 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) 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/chromeos/cros/network_library.h" 5 #include "chrome/browser/chromeos/cros/network_library.h"
6 6
7 #include <dbus/dbus-glib.h> 7 #include <dbus/dbus-glib.h>
8 #include <dbus/dbus-gtype-specialized.h> 8 #include <dbus/dbus-gtype-specialized.h>
9 #include <glib-object.h> 9 #include <glib-object.h>
10 10
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 bool is_unicode_char = base::ReadUnicodeCharacter(str.c_str(), str.size(), 155 bool is_unicode_char = base::ReadUnicodeCharacter(str.c_str(), str.size(),
156 &index, &code_point_out); 156 &index, &code_point_out);
157 if (is_unicode_char && (code_point_out >= 0x20)) 157 if (is_unicode_char && (code_point_out >= 0x20))
158 base::WriteUnicodeCharacter(code_point_out, output); 158 base::WriteUnicodeCharacter(code_point_out, output);
159 else 159 else
160 // Puts REPLACEMENT CHARACTER (U+FFFD) if character is not readable UTF-8 160 // Puts REPLACEMENT CHARACTER (U+FFFD) if character is not readable UTF-8
161 base::WriteUnicodeCharacter(0xFFFD, output); 161 base::WriteUnicodeCharacter(0xFFFD, output);
162 } 162 }
163 } 163 }
164 164
165 NetworkProfileType GetProfileTypeForSource(NetworkUIData::ONCSource source) {
166 switch (source) {
167 case NetworkUIData::ONC_SOURCE_DEVICE_POLICY:
168 return PROFILE_SHARED;
169 case NetworkUIData::ONC_SOURCE_USER_POLICY:
170 return PROFILE_USER;
171 case NetworkUIData::ONC_SOURCE_NONE:
172 case NetworkUIData::ONC_SOURCE_USER_IMPORT:
173 return PROFILE_NONE;
174 }
175 NOTREACHED() << "Unknown ONC source " << source;
176 return PROFILE_NONE;
177 }
178
165 //////////////////////////////////////////////////////////////////////////////// 179 ////////////////////////////////////////////////////////////////////////////////
166 // glib 180 // glib
167 181
168 Value* ConvertGlibValue(const GValue* gvalue); 182 Value* ConvertGlibValue(const GValue* gvalue);
169 183
170 void AppendListElement(const GValue* gvalue, gpointer user_data) { 184 void AppendListElement(const GValue* gvalue, gpointer user_data) {
171 ListValue* list = static_cast<ListValue*>(user_data); 185 ListValue* list = static_cast<ListValue*>(user_data);
172 Value* value = ConvertGlibValue(gvalue); 186 Value* value = ConvertGlibValue(gvalue);
173 list->Append(value); 187 list->Append(value);
174 } 188 }
(...skipping 2664 matching lines...) Expand 10 before | Expand all | Expand 10 after
2839 OncNetworkParser parser(onc_blob, source); 2853 OncNetworkParser parser(onc_blob, source);
2840 2854
2841 for (int i = 0; i < parser.GetCertificatesSize(); i++) { 2855 for (int i = 0; i < parser.GetCertificatesSize(); i++) {
2842 // Insert each of the available certs into the certificate DB. 2856 // Insert each of the available certs into the certificate DB.
2843 if (!parser.ParseCertificate(i)) { 2857 if (!parser.ParseCertificate(i)) {
2844 DLOG(WARNING) << "Cannot parse certificate in ONC file"; 2858 DLOG(WARNING) << "Cannot parse certificate in ONC file";
2845 return false; 2859 return false;
2846 } 2860 }
2847 } 2861 }
2848 2862
2863 // Parse all networks. Bail out if that fails.
2864 std::vector<Network*> networks;
stevenjb 2011/12/05 20:36:38 Can use ScopedVector here instead of STLDeleteElem
Mattias Nissler (ping if slow) 2011/12/05 20:58:29 Done.
2849 for (int i = 0; i < parser.GetNetworkConfigsSize(); i++) { 2865 for (int i = 0; i < parser.GetNetworkConfigsSize(); i++) {
2850 // Parse Open Network Configuration blob into a temporary Network object. 2866 // Parse Open Network Configuration blob into a temporary Network object.
2851 scoped_ptr<Network> network(parser.ParseNetwork(i)); 2867 Network* network = parser.ParseNetwork(i);
2852 if (!network.get()) { 2868 if (!network) {
2853 DLOG(WARNING) << "Cannot parse network in ONC file"; 2869 DLOG(WARNING) << "Cannot parse network in ONC file";
2870 STLDeleteElements(&networks);
2854 return false; 2871 return false;
2855 } 2872 }
2873 networks.push_back(network);
2874 }
2856 2875
2876 // Configure the networks.
2877 std::string profile_path(GetProfilePath(GetProfileTypeForSource(source)));
2878
2879 // This map collects the unique identifiers of the networks that are defined
2880 // in this ONC blob. It's later used to clean out any previously-existing
2881 // networks that had been configured through policy but are no longer
2882 // specified in the updated ONC blob.
2883 std::set<std::string> network_ids;
stevenjb 2011/12/05 20:36:38 These comments are a little confusing; the "Config
Mattias Nissler (ping if slow) 2011/12/05 20:58:29 Done.
2884
2885 for (std::vector<Network*>::iterator iter(networks.begin());
2886 iter != networks.end(); ++iter) {
2887 Network* network = *iter;
2857 DictionaryValue dict; 2888 DictionaryValue dict;
2858 for (Network::PropertyMap::const_iterator props = 2889 for (Network::PropertyMap::const_iterator props =
2859 network->property_map_.begin(); 2890 network->property_map_.begin();
2860 props != network->property_map_.end(); ++props) { 2891 props != network->property_map_.end(); ++props) {
2861 std::string key = 2892 std::string key =
2862 NativeNetworkParser::property_mapper()->GetKey(props->first); 2893 NativeNetworkParser::property_mapper()->GetKey(props->first);
2863 if (!key.empty()) 2894 if (!key.empty())
2864 dict.SetWithoutPathExpansion(key, props->second->DeepCopy()); 2895 dict.SetWithoutPathExpansion(key, props->second->DeepCopy());
2865 else 2896 else
2866 VLOG(2) << "Property " << props->first << " will not be sent"; 2897 VLOG(2) << "Property " << props->first << " will not be sent";
2867 } 2898 }
2868 2899
2900 // Set the appropriate profile for |source|.
2901 if (!profile_path.empty())
2902 dict.SetString(flimflam::kProfileProperty, profile_path);
2903
2869 CallConfigureService(network->unique_id(), &dict); 2904 CallConfigureService(network->unique_id(), &dict);
2905 network_ids.insert(network->unique_id());
2870 } 2906 }
2907
2908 // Go through the list of existing remembered networks and clean out the ones
2909 // that no longer have a definition in the ONC blob. We first collect the
2910 // networks and the actual deletion later because ForgetNetwork() changes the
stevenjb 2011/12/05 20:36:38 s/and the/and do the/
Mattias Nissler (ping if slow) 2011/12/05 20:58:29 Done.
2911 // remembered network vectors.
2912 if (source != NetworkUIData::ONC_SOURCE_USER_IMPORT) {
2913 std::vector<std::string> to_be_deleted;
2914 for (WifiNetworkVector::iterator i(remembered_wifi_networks_.begin());
2915 i != remembered_wifi_networks_.end(); ++i) {
2916 WifiNetwork* network = *i;
2917 if (NetworkUIData::GetONCSource(network) == source &&
2918 network_ids.find(network->unique_id()) == network_ids.end())
2919 to_be_deleted.push_back(network->service_path());
2920 }
2921
2922 for (VirtualNetworkVector::iterator i(remembered_virtual_networks_.begin());
2923 i != remembered_virtual_networks_.end(); ++i) {
2924 VirtualNetwork* network = *i;
2925 if (NetworkUIData::GetONCSource(network) == source &&
2926 network_ids.find(network->unique_id()) == network_ids.end())
2927 to_be_deleted.push_back(network->service_path());
2928 }
2929
2930 for (std::vector<std::string>::const_iterator i(to_be_deleted.begin());
2931 i != to_be_deleted.end(); ++i) {
2932 ForgetNetwork(*i);
2933 }
2934 }
2935
2936 STLDeleteElements(&networks);
2871 return parser.GetNetworkConfigsSize() != 0; 2937 return parser.GetNetworkConfigsSize() != 0;
2872 } 2938 }
2873 2939
2874 //////////////////////////////////////////////////////////////////////////// 2940 ////////////////////////////////////////////////////////////////////////////
2875 // Testing functions. 2941 // Testing functions.
2876 2942
2877 bool NetworkLibraryImplBase::SetActiveNetwork( 2943 bool NetworkLibraryImplBase::SetActiveNetwork(
2878 ConnectionType type, const std::string& service_path) { 2944 ConnectionType type, const std::string& service_path) {
2879 Network* network = NULL; 2945 Network* network = NULL;
2880 if (!service_path.empty()) 2946 if (!service_path.empty())
(...skipping 2461 matching lines...) Expand 10 before | Expand all | Expand 10 after
5342 return impl; 5408 return impl;
5343 } 5409 }
5344 5410
5345 ///////////////////////////////////////////////////////////////////////////// 5411 /////////////////////////////////////////////////////////////////////////////
5346 5412
5347 } // namespace chromeos 5413 } // namespace chromeos
5348 5414
5349 // Allows InvokeLater without adding refcounting. This class is a Singleton and 5415 // Allows InvokeLater without adding refcounting. This class is a Singleton and
5350 // won't be deleted until its last InvokeLater is run. 5416 // won't be deleted until its last InvokeLater is run.
5351 DISABLE_RUNNABLE_METHOD_REFCOUNT(chromeos::NetworkLibraryImplBase); 5417 DISABLE_RUNNABLE_METHOD_REFCOUNT(chromeos::NetworkLibraryImplBase);
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/chromeos/cros/onc_network_parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698