OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_service.h" | 5 #include "net/proxy/proxy_service.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 1300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1311 if (resolver_.get()) | 1311 if (resolver_.get()) |
1312 resolver_->PurgeMemory(); | 1312 resolver_->PurgeMemory(); |
1313 } | 1313 } |
1314 | 1314 |
1315 void ProxyService::ForceReloadProxyConfig() { | 1315 void ProxyService::ForceReloadProxyConfig() { |
1316 DCHECK(CalledOnValidThread()); | 1316 DCHECK(CalledOnValidThread()); |
1317 ResetProxyConfig(false); | 1317 ResetProxyConfig(false); |
1318 ApplyProxyConfigIfAvailable(); | 1318 ApplyProxyConfigIfAvailable(); |
1319 } | 1319 } |
1320 | 1320 |
| 1321 void ProxyService::StartTearDown() { |
| 1322 config_service_->StartTearDown(); |
| 1323 } |
| 1324 |
1321 // static | 1325 // static |
1322 ProxyConfigService* ProxyService::CreateSystemProxyConfigService( | 1326 ProxyConfigService* ProxyService::CreateSystemProxyConfigService( |
1323 base::SingleThreadTaskRunner* io_thread_task_runner, | 1327 base::SingleThreadTaskRunner* glib_thread_task_runner, |
1324 MessageLoop* file_loop) { | 1328 MessageLoop* file_loop) { |
1325 #if defined(OS_WIN) | 1329 #if defined(OS_WIN) |
1326 return new ProxyConfigServiceWin(); | 1330 return new ProxyConfigServiceWin(); |
1327 #elif defined(OS_IOS) | 1331 #elif defined(OS_IOS) |
1328 return new ProxyConfigServiceIOS(); | 1332 return new ProxyConfigServiceIOS(); |
1329 #elif defined(OS_MACOSX) | 1333 #elif defined(OS_MACOSX) |
1330 return new ProxyConfigServiceMac(io_thread_task_runner); | 1334 return new ProxyConfigServiceMac( |
| 1335 MessageLoopForIO::current()->message_loop_proxy()); |
1331 #elif defined(OS_CHROMEOS) | 1336 #elif defined(OS_CHROMEOS) |
1332 LOG(ERROR) << "ProxyConfigService for ChromeOS should be created in " | 1337 LOG(ERROR) << "ProxyConfigService for ChromeOS should be created in " |
1333 << "profile_io_data.cc::CreateProxyConfigService and this should " | 1338 << "profile_io_data.cc::CreateProxyConfigService and this should " |
1334 << "be used only for examples."; | 1339 << "be used only for examples."; |
1335 return new UnsetProxyConfigService; | 1340 return new UnsetProxyConfigService; |
1336 #elif defined(OS_LINUX) | 1341 #elif defined(OS_LINUX) |
1337 ProxyConfigServiceLinux* linux_config_service = | |
1338 new ProxyConfigServiceLinux(); | |
1339 | |
1340 // Assume we got called on the thread that runs the default glib | |
1341 // main loop, so the current thread is where we should be running | |
1342 // gconf calls from. | |
1343 scoped_refptr<base::SingleThreadTaskRunner> glib_thread_task_runner = | |
1344 base::ThreadTaskRunnerHandle::Get(); | |
1345 | |
1346 // The file loop should be a MessageLoopForIO on Linux. | 1342 // The file loop should be a MessageLoopForIO on Linux. |
1347 DCHECK_EQ(MessageLoop::TYPE_IO, file_loop->type()); | 1343 DCHECK_EQ(MessageLoop::TYPE_IO, file_loop->type()); |
1348 | 1344 return new ProxyConfigServiceLinux( |
1349 // Synchronously fetch the current proxy config (since we are | 1345 glib_thread_task_runner, |
1350 // running on glib_default_loop). Additionally register for | 1346 MessageLoopForIO::current()->message_loop_proxy(), |
1351 // notifications (delivered in either |glib_default_loop| or | |
1352 // |file_loop|) to keep us updated when the proxy config changes. | |
1353 linux_config_service->SetupAndFetchInitialConfig( | |
1354 glib_thread_task_runner, io_thread_task_runner, | |
1355 static_cast<MessageLoopForIO*>(file_loop)); | 1347 static_cast<MessageLoopForIO*>(file_loop)); |
1356 | |
1357 return linux_config_service; | |
1358 #elif defined(OS_ANDROID) | 1348 #elif defined(OS_ANDROID) |
1359 return new ProxyConfigServiceAndroid( | 1349 return new ProxyConfigServiceAndroid( |
1360 io_thread_task_runner, | 1350 glib_thread_task_runner, |
1361 MessageLoopForUI::current()->message_loop_proxy()); | 1351 MessageLoopForIO::current()->message_loop_proxy()); |
1362 #else | 1352 #else |
1363 LOG(WARNING) << "Failed to choose a system proxy settings fetcher " | 1353 LOG(WARNING) << "Failed to choose a system proxy settings fetcher " |
1364 "for this platform."; | 1354 "for this platform."; |
1365 return new ProxyConfigServiceDirect(); | 1355 return new ProxyConfigServiceDirect(); |
1366 #endif | 1356 #endif |
1367 } | 1357 } |
1368 | 1358 |
1369 // static | 1359 // static |
1370 const ProxyService::PacPollPolicy* ProxyService::set_pac_script_poll_policy( | 1360 const ProxyService::PacPollPolicy* ProxyService::set_pac_script_poll_policy( |
1371 const PacPollPolicy* policy) { | 1361 const PacPollPolicy* policy) { |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1552 OnCompletion(result_); | 1542 OnCompletion(result_); |
1553 } | 1543 } |
1554 } | 1544 } |
1555 | 1545 |
1556 void SyncProxyServiceHelper::OnCompletion(int rv) { | 1546 void SyncProxyServiceHelper::OnCompletion(int rv) { |
1557 result_ = rv; | 1547 result_ = rv; |
1558 event_.Signal(); | 1548 event_.Signal(); |
1559 } | 1549 } |
1560 | 1550 |
1561 } // namespace net | 1551 } // namespace net |
OLD | NEW |