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

Side by Side Diff: net/proxy/proxy_config_service_linux.cc

Issue 7033040: Linux: split ProxyConfigServiceLinux::SettingGetter::Setting into several enums. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 7 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
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 "net/proxy/proxy_config_service_linux.h" 5 #include "net/proxy/proxy_config_service_linux.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 #include <fcntl.h> 8 #include <fcntl.h>
9 #if defined(USE_GCONF) 9 #if defined(USE_GCONF)
10 #include <gconf/gconf-client.h> 10 #include <gconf/gconf-client.h>
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 } 292 }
293 293
294 virtual MessageLoop* GetNotificationLoop() { 294 virtual MessageLoop* GetNotificationLoop() {
295 return loop_; 295 return loop_;
296 } 296 }
297 297
298 virtual const char* GetDataSource() { 298 virtual const char* GetDataSource() {
299 return "gconf"; 299 return "gconf";
300 } 300 }
301 301
302 virtual bool GetString(Setting key, std::string* result) { 302 virtual bool GetString(StringSetting key, std::string* result) {
303 switch (key) { 303 switch (key) {
304 case PROXY_MODE: 304 case PROXY_MODE:
305 return GetStringByPath("/system/proxy/mode", result); 305 return GetStringByPath("/system/proxy/mode", result);
306 case PROXY_AUTOCONF_URL: 306 case PROXY_AUTOCONF_URL:
307 return GetStringByPath("/system/proxy/autoconfig_url", result); 307 return GetStringByPath("/system/proxy/autoconfig_url", result);
308 case PROXY_HTTP_HOST: 308 case PROXY_HTTP_HOST:
309 return GetStringByPath("/system/http_proxy/host", result); 309 return GetStringByPath("/system/http_proxy/host", result);
310 case PROXY_HTTPS_HOST: 310 case PROXY_HTTPS_HOST:
311 return GetStringByPath("/system/proxy/secure_host", result); 311 return GetStringByPath("/system/proxy/secure_host", result);
312 case PROXY_FTP_HOST: 312 case PROXY_FTP_HOST:
313 return GetStringByPath("/system/proxy/ftp_host", result); 313 return GetStringByPath("/system/proxy/ftp_host", result);
314 case PROXY_SOCKS_HOST: 314 case PROXY_SOCKS_HOST:
315 return GetStringByPath("/system/proxy/socks_host", result); 315 return GetStringByPath("/system/proxy/socks_host", result);
316 default:
317 return false;
318 } 316 }
317 return false; // placate compiler
vandebo (ex-Chrome) 2011/05/20 20:05:49 nit: Comments should be sentences... "Placate comp
Mike Mammarella 2011/05/20 20:42:36 Done.
319 } 318 }
320 virtual bool GetBool(Setting key, bool* result) { 319 virtual bool GetBool(BoolSetting key, bool* result) {
321 switch (key) { 320 switch (key) {
322 case PROXY_USE_HTTP_PROXY: 321 case PROXY_USE_HTTP_PROXY:
323 return GetBoolByPath("/system/http_proxy/use_http_proxy", result); 322 return GetBoolByPath("/system/http_proxy/use_http_proxy", result);
324 case PROXY_USE_SAME_PROXY: 323 case PROXY_USE_SAME_PROXY:
325 return GetBoolByPath("/system/http_proxy/use_same_proxy", result); 324 return GetBoolByPath("/system/http_proxy/use_same_proxy", result);
326 case PROXY_USE_AUTHENTICATION: 325 case PROXY_USE_AUTHENTICATION:
327 return GetBoolByPath("/system/http_proxy/use_authentication", result); 326 return GetBoolByPath("/system/http_proxy/use_authentication", result);
328 default:
329 return false;
330 } 327 }
328 return false; // placate compiler
331 } 329 }
332 virtual bool GetInt(Setting key, int* result) { 330 virtual bool GetInt(IntSetting key, int* result) {
333 switch (key) { 331 switch (key) {
334 case PROXY_HTTP_PORT: 332 case PROXY_HTTP_PORT:
335 return GetIntByPath("/system/http_proxy/port", result); 333 return GetIntByPath("/system/http_proxy/port", result);
336 case PROXY_HTTPS_PORT: 334 case PROXY_HTTPS_PORT:
337 return GetIntByPath("/system/proxy/secure_port", result); 335 return GetIntByPath("/system/proxy/secure_port", result);
338 case PROXY_FTP_PORT: 336 case PROXY_FTP_PORT:
339 return GetIntByPath("/system/proxy/ftp_port", result); 337 return GetIntByPath("/system/proxy/ftp_port", result);
340 case PROXY_SOCKS_PORT: 338 case PROXY_SOCKS_PORT:
341 return GetIntByPath("/system/proxy/socks_port", result); 339 return GetIntByPath("/system/proxy/socks_port", result);
342 default:
343 return false;
344 } 340 }
341 return false; // placate compiler
345 } 342 }
346 virtual bool GetStringList(Setting key, std::vector<std::string>* result) { 343 virtual bool GetStringList(StringListSetting key,
344 std::vector<std::string>* result) {
347 switch (key) { 345 switch (key) {
348 case PROXY_IGNORE_HOSTS: 346 case PROXY_IGNORE_HOSTS:
349 return GetStringListByPath("/system/http_proxy/ignore_hosts", result); 347 return GetStringListByPath("/system/http_proxy/ignore_hosts", result);
350 default:
351 return false;
352 } 348 }
349 return false; // placate compiler
353 } 350 }
354 351
355 virtual bool BypassListIsReversed() { 352 virtual bool BypassListIsReversed() {
356 // This is a KDE-specific setting. 353 // This is a KDE-specific setting.
357 return false; 354 return false;
358 } 355 }
359 356
360 virtual bool MatchHostsUsingSuffixMatching() { 357 virtual bool MatchHostsUsingSuffixMatching() {
361 return false; 358 return false;
362 } 359 }
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 } 581 }
585 582
586 virtual MessageLoop* GetNotificationLoop() { 583 virtual MessageLoop* GetNotificationLoop() {
587 return loop_; 584 return loop_;
588 } 585 }
589 586
590 virtual const char* GetDataSource() { 587 virtual const char* GetDataSource() {
591 return "gsettings"; 588 return "gsettings";
592 } 589 }
593 590
594 virtual bool GetString(Setting key, std::string* result) { 591 virtual bool GetString(StringSetting key, std::string* result) {
595 DCHECK(client_); 592 DCHECK(client_);
596 switch (key) { 593 switch (key) {
597 case PROXY_MODE: 594 case PROXY_MODE:
598 return GetStringByPath(client_, "mode", result); 595 return GetStringByPath(client_, "mode", result);
599 case PROXY_AUTOCONF_URL: 596 case PROXY_AUTOCONF_URL:
600 return GetStringByPath(client_, "autoconfig-url", result); 597 return GetStringByPath(client_, "autoconfig-url", result);
601 case PROXY_HTTP_HOST: 598 case PROXY_HTTP_HOST:
602 return GetStringByPath(http_client_, "host", result); 599 return GetStringByPath(http_client_, "host", result);
603 case PROXY_HTTPS_HOST: 600 case PROXY_HTTPS_HOST:
604 return GetStringByPath(https_client_, "host", result); 601 return GetStringByPath(https_client_, "host", result);
605 case PROXY_FTP_HOST: 602 case PROXY_FTP_HOST:
606 return GetStringByPath(ftp_client_, "host", result); 603 return GetStringByPath(ftp_client_, "host", result);
607 case PROXY_SOCKS_HOST: 604 case PROXY_SOCKS_HOST:
608 return GetStringByPath(socks_client_, "host", result); 605 return GetStringByPath(socks_client_, "host", result);
609 default:
610 return false;
611 } 606 }
607 return false; // placate compiler
612 } 608 }
613 virtual bool GetBool(Setting key, bool* result) { 609 virtual bool GetBool(BoolSetting key, bool* result) {
614 DCHECK(client_); 610 DCHECK(client_);
615 switch (key) { 611 switch (key) {
616 case PROXY_USE_HTTP_PROXY: 612 case PROXY_USE_HTTP_PROXY:
617 // Although there is an "enabled" boolean in http_client_, it is not set 613 // Although there is an "enabled" boolean in http_client_, it is not set
618 // to true by the proxy config utility. We ignore it and return false. 614 // to true by the proxy config utility. We ignore it and return false.
619 return false; 615 return false;
620 case PROXY_USE_SAME_PROXY: 616 case PROXY_USE_SAME_PROXY:
621 // Similarly, although there is a "use-same-proxy" boolean in client_, 617 // Similarly, although there is a "use-same-proxy" boolean in client_,
622 // it is never set to false by the proxy config utility. We ignore it. 618 // it is never set to false by the proxy config utility. We ignore it.
623 return false; 619 return false;
624 case PROXY_USE_AUTHENTICATION: 620 case PROXY_USE_AUTHENTICATION:
625 // There is also no way to set this in the proxy config utility, but it 621 // There is also no way to set this in the proxy config utility, but it
626 // doesn't hurt us to get the actual setting (unlike the two above). 622 // doesn't hurt us to get the actual setting (unlike the two above).
627 return GetBoolByPath(http_client_, "use-authentication", result); 623 return GetBoolByPath(http_client_, "use-authentication", result);
628 default:
629 return false;
630 } 624 }
625 return false; // placate compiler
631 } 626 }
632 virtual bool GetInt(Setting key, int* result) { 627 virtual bool GetInt(IntSetting key, int* result) {
633 DCHECK(client_); 628 DCHECK(client_);
634 switch (key) { 629 switch (key) {
635 case PROXY_HTTP_PORT: 630 case PROXY_HTTP_PORT:
636 return GetIntByPath(http_client_, "port", result); 631 return GetIntByPath(http_client_, "port", result);
637 case PROXY_HTTPS_PORT: 632 case PROXY_HTTPS_PORT:
638 return GetIntByPath(https_client_, "port", result); 633 return GetIntByPath(https_client_, "port", result);
639 case PROXY_FTP_PORT: 634 case PROXY_FTP_PORT:
640 return GetIntByPath(ftp_client_, "port", result); 635 return GetIntByPath(ftp_client_, "port", result);
641 case PROXY_SOCKS_PORT: 636 case PROXY_SOCKS_PORT:
642 return GetIntByPath(socks_client_, "port", result); 637 return GetIntByPath(socks_client_, "port", result);
643 default:
644 return false;
645 } 638 }
639 return false; // placate compiler
646 } 640 }
647 virtual bool GetStringList(Setting key, std::vector<std::string>* result) { 641 virtual bool GetStringList(StringListSetting key,
642 std::vector<std::string>* result) {
648 DCHECK(client_); 643 DCHECK(client_);
649 switch (key) { 644 switch (key) {
650 case PROXY_IGNORE_HOSTS: 645 case PROXY_IGNORE_HOSTS:
651 return GetStringListByPath(client_, "ignore-hosts", result); 646 return GetStringListByPath(client_, "ignore-hosts", result);
652 default:
653 return false;
654 } 647 }
648 return false; // placate compiler
655 } 649 }
656 650
657 virtual bool BypassListIsReversed() { 651 virtual bool BypassListIsReversed() {
658 // This is a KDE-specific setting. 652 // This is a KDE-specific setting.
659 return false; 653 return false;
660 } 654 }
661 655
662 virtual bool MatchHostsUsingSuffixMatching() { 656 virtual bool MatchHostsUsingSuffixMatching() {
663 return false; 657 return false;
664 } 658 }
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
987 OnChangeNotification(); 981 OnChangeNotification();
988 } 982 }
989 void OnFileCanWriteWithoutBlocking(int fd) { 983 void OnFileCanWriteWithoutBlocking(int fd) {
990 NOTREACHED(); 984 NOTREACHED();
991 } 985 }
992 986
993 virtual const char* GetDataSource() { 987 virtual const char* GetDataSource() {
994 return "KDE"; 988 return "KDE";
995 } 989 }
996 990
997 virtual bool GetString(Setting key, std::string* result) { 991 virtual bool GetString(StringSetting key, std::string* result) {
998 string_map_type::iterator it = string_table_.find(key); 992 string_map_type::iterator it = string_table_.find(key);
999 if (it == string_table_.end()) 993 if (it == string_table_.end())
1000 return false; 994 return false;
1001 *result = it->second; 995 *result = it->second;
1002 return true; 996 return true;
1003 } 997 }
1004 virtual bool GetBool(Setting key, bool* result) { 998 virtual bool GetBool(BoolSetting key, bool* result) {
1005 // We don't ever have any booleans. 999 // We don't ever have any booleans.
1006 return false; 1000 return false;
1007 } 1001 }
1008 virtual bool GetInt(Setting key, int* result) { 1002 virtual bool GetInt(IntSetting key, int* result) {
1009 // We don't ever have any integers. (See AddProxy() below about ports.) 1003 // We don't ever have any integers. (See AddProxy() below about ports.)
1010 return false; 1004 return false;
1011 } 1005 }
1012 virtual bool GetStringList(Setting key, std::vector<std::string>* result) { 1006 virtual bool GetStringList(StringListSetting key,
1007 std::vector<std::string>* result) {
1013 strings_map_type::iterator it = strings_table_.find(key); 1008 strings_map_type::iterator it = strings_table_.find(key);
1014 if (it == strings_table_.end()) 1009 if (it == strings_table_.end())
1015 return false; 1010 return false;
1016 *result = it->second; 1011 *result = it->second;
1017 return true; 1012 return true;
1018 } 1013 }
1019 1014
1020 virtual bool BypassListIsReversed() { 1015 virtual bool BypassListIsReversed() {
1021 return reversed_bypass_list_; 1016 return reversed_bypass_list_;
1022 } 1017 }
1023 1018
1024 virtual bool MatchHostsUsingSuffixMatching() { 1019 virtual bool MatchHostsUsingSuffixMatching() {
1025 return true; 1020 return true;
1026 } 1021 }
1027 1022
1028 private: 1023 private:
1029 void ResetCachedSettings() { 1024 void ResetCachedSettings() {
1030 string_table_.clear(); 1025 string_table_.clear();
1031 strings_table_.clear(); 1026 strings_table_.clear();
1032 indirect_manual_ = false; 1027 indirect_manual_ = false;
1033 auto_no_pac_ = false; 1028 auto_no_pac_ = false;
1034 reversed_bypass_list_ = false; 1029 reversed_bypass_list_ = false;
1035 } 1030 }
1036 1031
1037 FilePath KDEHomeToConfigPath(const FilePath& kde_home) { 1032 FilePath KDEHomeToConfigPath(const FilePath& kde_home) {
1038 return kde_home.Append("share").Append("config"); 1033 return kde_home.Append("share").Append("config");
1039 } 1034 }
1040 1035
1041 void AddProxy(Setting host_key, const std::string& value) { 1036 void AddProxy(StringSetting host_key, const std::string& value) {
1042 if (value.empty() || value.substr(0, 3) == "//:") 1037 if (value.empty() || value.substr(0, 3) == "//:")
1043 // No proxy. 1038 // No proxy.
1044 return; 1039 return;
1045 // We don't need to parse the port number out; GetProxyFromSettings() 1040 // We don't need to parse the port number out; GetProxyFromSettings()
1046 // would only append it right back again. So we just leave the port 1041 // would only append it right back again. So we just leave the port
1047 // number right in the host string. 1042 // number right in the host string.
1048 string_table_[host_key] = value; 1043 string_table_[host_key] = value;
1049 } 1044 }
1050 1045
1051 void AddHostList(Setting key, const std::string& value) { 1046 void AddHostList(StringListSetting key, const std::string& value) {
1052 std::vector<std::string> tokens; 1047 std::vector<std::string> tokens;
1053 StringTokenizer tk(value, ", "); 1048 StringTokenizer tk(value, ", ");
1054 while (tk.GetNext()) { 1049 while (tk.GetNext()) {
1055 std::string token = tk.token(); 1050 std::string token = tk.token();
1056 if (!token.empty()) 1051 if (!token.empty())
1057 tokens.push_back(token); 1052 tokens.push_back(token);
1058 } 1053 }
1059 strings_table_[key] = tokens; 1054 strings_table_[key] = tokens;
1060 } 1055 }
1061 1056
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1114 base::StringToInt(value, &mode); 1109 base::StringToInt(value, &mode);
1115 if (mode) { 1110 if (mode) {
1116 // ProxyConfig does not support authentication parameters, but 1111 // ProxyConfig does not support authentication parameters, but
1117 // Chrome will prompt for the password later. So we ignore this. 1112 // Chrome will prompt for the password later. So we ignore this.
1118 LOG(WARNING) << 1113 LOG(WARNING) <<
1119 "Proxy authentication parameters ignored, see bug 16709"; 1114 "Proxy authentication parameters ignored, see bug 16709";
1120 } 1115 }
1121 } 1116 }
1122 } 1117 }
1123 1118
1124 void ResolveIndirect(Setting key) { 1119 void ResolveIndirect(StringSetting key) {
1125 string_map_type::iterator it = string_table_.find(key); 1120 string_map_type::iterator it = string_table_.find(key);
1126 if (it != string_table_.end()) { 1121 if (it != string_table_.end()) {
1127 std::string value; 1122 std::string value;
1128 if (env_var_getter_->GetVar(it->second.c_str(), &value)) 1123 if (env_var_getter_->GetVar(it->second.c_str(), &value))
1129 it->second = value; 1124 it->second = value;
1130 else 1125 else
1131 string_table_.erase(it); 1126 string_table_.erase(it);
1132 } 1127 }
1133 } 1128 }
1134 1129
1135 void ResolveIndirectList(Setting key) { 1130 void ResolveIndirectList(StringListSetting key) {
1136 strings_map_type::iterator it = strings_table_.find(key); 1131 strings_map_type::iterator it = strings_table_.find(key);
1137 if (it != strings_table_.end()) { 1132 if (it != strings_table_.end()) {
1138 std::string value; 1133 std::string value;
1139 if (!it->second.empty() && 1134 if (!it->second.empty() &&
1140 env_var_getter_->GetVar(it->second[0].c_str(), &value)) 1135 env_var_getter_->GetVar(it->second[0].c_str(), &value))
1141 AddHostList(key, value); 1136 AddHostList(key, value);
1142 else 1137 else
1143 strings_table_.erase(it); 1138 strings_table_.erase(it);
1144 } 1139 }
1145 } 1140 }
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
1295 if (kioslaverc_touched) { 1290 if (kioslaverc_touched) {
1296 // We don't use Reset() because the timer may not yet be running. 1291 // We don't use Reset() because the timer may not yet be running.
1297 // (In that case Stop() is a no-op.) 1292 // (In that case Stop() is a no-op.)
1298 debounce_timer_.Stop(); 1293 debounce_timer_.Stop();
1299 debounce_timer_.Start(base::TimeDelta::FromMilliseconds( 1294 debounce_timer_.Start(base::TimeDelta::FromMilliseconds(
1300 kDebounceTimeoutMilliseconds), this, 1295 kDebounceTimeoutMilliseconds), this,
1301 &SettingGetterImplKDE::OnDebouncedNotification); 1296 &SettingGetterImplKDE::OnDebouncedNotification);
1302 } 1297 }
1303 } 1298 }
1304 1299
1305 typedef std::map<Setting, std::string> string_map_type; 1300 typedef std::map<StringSetting, std::string> string_map_type;
1306 typedef std::map<Setting, std::vector<std::string> > strings_map_type; 1301 typedef std::map<StringListSetting,
1302 std::vector<std::string> > strings_map_type;
1307 1303
1308 int inotify_fd_; 1304 int inotify_fd_;
1309 base::MessagePumpLibevent::FileDescriptorWatcher inotify_watcher_; 1305 base::MessagePumpLibevent::FileDescriptorWatcher inotify_watcher_;
1310 ProxyConfigServiceLinux::Delegate* notify_delegate_; 1306 ProxyConfigServiceLinux::Delegate* notify_delegate_;
1311 base::OneShotTimer<SettingGetterImplKDE> debounce_timer_; 1307 base::OneShotTimer<SettingGetterImplKDE> debounce_timer_;
1312 FilePath kde_config_dir_; 1308 FilePath kde_config_dir_;
1313 bool indirect_manual_; 1309 bool indirect_manual_;
1314 bool auto_no_pac_; 1310 bool auto_no_pac_;
1315 bool reversed_bypass_list_; 1311 bool reversed_bypass_list_;
1316 // We don't own |env_var_getter_|. It's safe to hold a pointer to it, since 1312 // We don't own |env_var_getter_|. It's safe to hold a pointer to it, since
1317 // both it and us are owned by ProxyConfigServiceLinux::Delegate, and have the 1313 // both it and us are owned by ProxyConfigServiceLinux::Delegate, and have the
1318 // same lifetime. 1314 // same lifetime.
1319 base::Environment* env_var_getter_; 1315 base::Environment* env_var_getter_;
1320 1316
1321 // We cache these settings whenever we re-read the kioslaverc file. 1317 // We cache these settings whenever we re-read the kioslaverc file.
1322 string_map_type string_table_; 1318 string_map_type string_table_;
1323 strings_map_type strings_table_; 1319 strings_map_type strings_table_;
1324 1320
1325 // Message loop of the file thread, for reading kioslaverc. If NULL, 1321 // Message loop of the file thread, for reading kioslaverc. If NULL,
1326 // just read it directly (for testing). We also handle inotify events 1322 // just read it directly (for testing). We also handle inotify events
1327 // on this thread. 1323 // on this thread.
1328 MessageLoopForIO* file_loop_; 1324 MessageLoopForIO* file_loop_;
1329 1325
1330 DISALLOW_COPY_AND_ASSIGN(SettingGetterImplKDE); 1326 DISALLOW_COPY_AND_ASSIGN(SettingGetterImplKDE);
1331 }; 1327 };
1332 1328
1333 } // namespace 1329 } // namespace
1334 1330
1335 bool ProxyConfigServiceLinux::Delegate::GetProxyFromSettings( 1331 bool ProxyConfigServiceLinux::Delegate::GetProxyFromSettings(
1336 SettingGetter::Setting host_key, 1332 SettingGetter::StringSetting host_key,
1337 ProxyServer* result_server) { 1333 ProxyServer* result_server) {
1338 std::string host; 1334 std::string host;
1339 if (!setting_getter_->GetString(host_key, &host) || host.empty()) { 1335 if (!setting_getter_->GetString(host_key, &host) || host.empty()) {
1340 // Unset or empty. 1336 // Unset or empty.
1341 return false; 1337 return false;
1342 } 1338 }
1343 // Check for an optional port. 1339 // Check for an optional port.
1344 int port = 0; 1340 int port = 0;
1345 SettingGetter::Setting port_key = 1341 SettingGetter::IntSetting port_key =
1346 SettingGetter::HostSettingToPortSetting(host_key); 1342 SettingGetter::HostSettingToPortSetting(host_key);
1347 setting_getter_->GetInt(port_key, &port); 1343 setting_getter_->GetInt(port_key, &port);
1348 if (port != 0) { 1344 if (port != 0) {
1349 // If a port is set and non-zero: 1345 // If a port is set and non-zero:
1350 host += ":" + base::IntToString(port); 1346 host += ":" + base::IntToString(port);
1351 } 1347 }
1352 1348
1353 // gconf settings do not appear to distinguish between SOCKS version. We 1349 // gconf settings do not appear to distinguish between SOCKS version. We
1354 // default to version 5. For more information on this policy decision, see: 1350 // default to version 5. For more information on this policy decision, see:
1355 // http://code.google.com/p/chromium/issues/detail?id=55912#c2 1351 // http://code.google.com/p/chromium/issues/detail?id=55912#c2
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
1741 void ProxyConfigServiceLinux::RemoveObserver(Observer* observer) { 1737 void ProxyConfigServiceLinux::RemoveObserver(Observer* observer) {
1742 delegate_->RemoveObserver(observer); 1738 delegate_->RemoveObserver(observer);
1743 } 1739 }
1744 1740
1745 ProxyConfigService::ConfigAvailability 1741 ProxyConfigService::ConfigAvailability
1746 ProxyConfigServiceLinux::GetLatestProxyConfig(ProxyConfig* config) { 1742 ProxyConfigServiceLinux::GetLatestProxyConfig(ProxyConfig* config) {
1747 return delegate_->GetLatestProxyConfig(config); 1743 return delegate_->GetLatestProxyConfig(config);
1748 } 1744 }
1749 1745
1750 } // namespace net 1746 } // namespace net
OLDNEW
« no previous file with comments | « net/proxy/proxy_config_service_linux.h ('k') | net/proxy/proxy_config_service_linux_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698