| 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 "chrome/browser/chromeos/dbus/proxy_resolution_service_provider.h" | 5 #include "chromeos/dbus/services/proxy_resolution_service_provider.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/thread_task_runner_handle.h" | 9 #include "base/thread_task_runner_handle.h" |
| 10 #include "chrome/browser/profiles/profile_manager.h" | |
| 11 #include "dbus/bus.h" | 10 #include "dbus/bus.h" |
| 11 #include "dbus/exported_object.h" |
| 12 #include "dbus/message.h" | 12 #include "dbus/message.h" |
| 13 #include "dbus/exported_object.h" | |
| 14 #include "net/base/load_flags.h" | 13 #include "net/base/load_flags.h" |
| 15 #include "net/base/net_errors.h" | 14 #include "net/base/net_errors.h" |
| 16 #include "net/proxy/proxy_service.h" | 15 #include "net/proxy/proxy_service.h" |
| 17 #include "net/url_request/url_request_context.h" | 16 #include "net/url_request/url_request_context.h" |
| 18 #include "net/url_request/url_request_context_getter.h" | 17 #include "net/url_request/url_request_context_getter.h" |
| 19 #include "third_party/cros_system_api/dbus/service_constants.h" | 18 #include "third_party/cros_system_api/dbus/service_constants.h" |
| 20 | 19 |
| 21 namespace chromeos { | 20 namespace chromeos { |
| 22 | 21 |
| 23 // The ProxyResolverInterface implementation used in production. | 22 // The ProxyResolverInterface implementation used in production. |
| (...skipping 20 matching lines...) Expand all Loading... |
| 44 | 43 |
| 45 std::string source_url_; // URL being resolved. | 44 std::string source_url_; // URL being resolved. |
| 46 net::ProxyInfo proxy_info_; // ProxyInfo resolved for source_url_. | 45 net::ProxyInfo proxy_info_; // ProxyInfo resolved for source_url_. |
| 47 std::string error_; // Error from proxy resolution. | 46 std::string error_; // Error from proxy resolution. |
| 48 base::Closure notify_task_; // Task to notify of resolution result. | 47 base::Closure notify_task_; // Task to notify of resolution result. |
| 49 | 48 |
| 50 private: | 49 private: |
| 51 DISALLOW_COPY_AND_ASSIGN(Request); | 50 DISALLOW_COPY_AND_ASSIGN(Request); |
| 52 }; | 51 }; |
| 53 | 52 |
| 54 ProxyResolverImpl() : origin_thread_(base::ThreadTaskRunnerHandle::Get()), | 53 explicit ProxyResolverImpl(scoped_ptr<ProxyResolverDelegate> delegate) |
| 55 weak_ptr_factory_(this) { | 54 : delegate_(delegate.Pass()), |
| 55 origin_thread_(base::ThreadTaskRunnerHandle::Get()), |
| 56 weak_ptr_factory_(this) { |
| 56 } | 57 } |
| 57 | 58 |
| 58 virtual ~ProxyResolverImpl() { | 59 virtual ~ProxyResolverImpl() { |
| 59 DCHECK(OnOriginThread()); | 60 DCHECK(OnOriginThread()); |
| 60 | 61 |
| 61 for (std::set<Request*>::iterator iter = all_requests_.begin(); | 62 for (std::set<Request*>::iterator iter = all_requests_.begin(); |
| 62 iter != all_requests_.end(); ++iter) { | 63 iter != all_requests_.end(); ++iter) { |
| 63 Request* request = *iter; | 64 Request* request = *iter; |
| 64 LOG(WARNING) << "Pending request for " << request->source_url_; | 65 LOG(WARNING) << "Pending request for " << request->source_url_; |
| 65 delete request; | 66 delete request; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 78 Request* request = new Request(source_url); | 79 Request* request = new Request(source_url); |
| 79 request->notify_task_ = base::Bind( | 80 request->notify_task_ = base::Bind( |
| 80 &ProxyResolverImpl::NotifyProxyResolved, | 81 &ProxyResolverImpl::NotifyProxyResolved, |
| 81 weak_ptr_factory_.GetWeakPtr(), | 82 weak_ptr_factory_.GetWeakPtr(), |
| 82 signal_interface, | 83 signal_interface, |
| 83 signal_name, | 84 signal_name, |
| 84 exported_object, | 85 exported_object, |
| 85 request); | 86 request); |
| 86 all_requests_.insert(request); | 87 all_requests_.insert(request); |
| 87 | 88 |
| 88 // GetPrimaryUserProfile() and GetRequestContext() must be called on UI | 89 // GetRequestContext() must be called on UI thread. |
| 89 // thread. | |
| 90 Profile* profile = ProfileManager::GetPrimaryUserProfile(); | |
| 91 scoped_refptr<net::URLRequestContextGetter> getter = | 90 scoped_refptr<net::URLRequestContextGetter> getter = |
| 92 profile->GetRequestContext(); | 91 delegate_->GetRequestContext(); |
| 93 | 92 |
| 94 getter->GetNetworkTaskRunner()->PostTask( | 93 getter->GetNetworkTaskRunner()->PostTask( |
| 95 FROM_HERE, | 94 FROM_HERE, |
| 96 base::Bind(&ProxyResolverImpl::ResolveProxyInternal, | 95 base::Bind(&ProxyResolverImpl::ResolveProxyInternal, |
| 97 request, | 96 request, |
| 98 origin_thread_, | 97 origin_thread_, |
| 99 getter, | 98 getter, |
| 100 exported_object)); | 99 exported_object)); |
| 101 } | 100 } |
| 102 | 101 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 all_requests_.erase(iter); | 166 all_requests_.erase(iter); |
| 168 } | 167 } |
| 169 delete request; | 168 delete request; |
| 170 } | 169 } |
| 171 | 170 |
| 172 // Returns true if the current thread is on the origin thread. | 171 // Returns true if the current thread is on the origin thread. |
| 173 bool OnOriginThread() { | 172 bool OnOriginThread() { |
| 174 return origin_thread_->BelongsToCurrentThread(); | 173 return origin_thread_->BelongsToCurrentThread(); |
| 175 } | 174 } |
| 176 | 175 |
| 176 scoped_ptr<ProxyResolverDelegate> delegate_; |
| 177 scoped_refptr<base::SingleThreadTaskRunner> origin_thread_; | 177 scoped_refptr<base::SingleThreadTaskRunner> origin_thread_; |
| 178 std::set<Request*> all_requests_; | 178 std::set<Request*> all_requests_; |
| 179 base::WeakPtrFactory<ProxyResolverImpl> weak_ptr_factory_; | 179 base::WeakPtrFactory<ProxyResolverImpl> weak_ptr_factory_; |
| 180 | 180 |
| 181 DISALLOW_COPY_AND_ASSIGN(ProxyResolverImpl); | 181 DISALLOW_COPY_AND_ASSIGN(ProxyResolverImpl); |
| 182 }; | 182 }; |
| 183 | 183 |
| 184 ProxyResolutionServiceProvider::ProxyResolutionServiceProvider( | 184 ProxyResolutionServiceProvider::ProxyResolutionServiceProvider( |
| 185 ProxyResolverInterface* resolver) | 185 ProxyResolverInterface* resolver) |
| 186 : resolver_(resolver), | 186 : resolver_(resolver), |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 dbus::MethodCall* method_call, | 257 dbus::MethodCall* method_call, |
| 258 dbus::ExportedObject::ResponseSender response_sender) { | 258 dbus::ExportedObject::ResponseSender response_sender) { |
| 259 if (!provider_weak_ptr) { | 259 if (!provider_weak_ptr) { |
| 260 LOG(WARNING) << "Called after the object is deleted"; | 260 LOG(WARNING) << "Called after the object is deleted"; |
| 261 response_sender.Run(scoped_ptr<dbus::Response>()); | 261 response_sender.Run(scoped_ptr<dbus::Response>()); |
| 262 return; | 262 return; |
| 263 } | 263 } |
| 264 provider_weak_ptr->ResolveProxyHandler(method_call, response_sender); | 264 provider_weak_ptr->ResolveProxyHandler(method_call, response_sender); |
| 265 } | 265 } |
| 266 | 266 |
| 267 ProxyResolutionServiceProvider* ProxyResolutionServiceProvider::Create() { | 267 ProxyResolutionServiceProvider* ProxyResolutionServiceProvider::Create( |
| 268 return new ProxyResolutionServiceProvider(new ProxyResolverImpl); | 268 scoped_ptr<ProxyResolverDelegate> delegate) { |
| 269 return new ProxyResolutionServiceProvider( |
| 270 new ProxyResolverImpl(delegate.Pass())); |
| 269 } | 271 } |
| 270 | 272 |
| 271 ProxyResolutionServiceProvider* | 273 ProxyResolutionServiceProvider* |
| 272 ProxyResolutionServiceProvider::CreateForTesting( | 274 ProxyResolutionServiceProvider::CreateForTesting( |
| 273 ProxyResolverInterface* resolver) { | 275 ProxyResolverInterface* resolver) { |
| 274 return new ProxyResolutionServiceProvider(resolver); | 276 return new ProxyResolutionServiceProvider(resolver); |
| 275 } | 277 } |
| 276 | 278 |
| 277 ProxyResolverInterface::~ProxyResolverInterface() { | 279 ProxyResolverInterface::~ProxyResolverInterface() { |
| 278 } | 280 } |
| 279 | 281 |
| 280 } // namespace chromeos | 282 } // namespace chromeos |
| OLD | NEW |