| Index: chrome/browser/chromeos/dbus/proxy_resolution_service_provider.cc
|
| diff --git a/chrome/browser/chromeos/dbus/proxy_resolution_service_provider.cc b/chrome/browser/chromeos/dbus/proxy_resolution_service_provider.cc
|
| deleted file mode 100644
|
| index 0daa8b4ae30b0af281e800cf61b4a4a9eba140c9..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/chromeos/dbus/proxy_resolution_service_provider.cc
|
| +++ /dev/null
|
| @@ -1,280 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/chromeos/dbus/proxy_resolution_service_provider.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/bind_helpers.h"
|
| -#include "base/thread_task_runner_handle.h"
|
| -#include "chrome/browser/profiles/profile_manager.h"
|
| -#include "dbus/bus.h"
|
| -#include "dbus/message.h"
|
| -#include "dbus/exported_object.h"
|
| -#include "net/base/load_flags.h"
|
| -#include "net/base/net_errors.h"
|
| -#include "net/proxy/proxy_service.h"
|
| -#include "net/url_request/url_request_context.h"
|
| -#include "net/url_request/url_request_context_getter.h"
|
| -#include "third_party/cros_system_api/dbus/service_constants.h"
|
| -
|
| -namespace chromeos {
|
| -
|
| -// The ProxyResolverInterface implementation used in production.
|
| -class ProxyResolverImpl : public ProxyResolverInterface {
|
| - public:
|
| - // Data being used in one proxy resolution.
|
| - class Request {
|
| - public:
|
| - explicit Request(const std::string& source_url) : source_url_(source_url) {
|
| - }
|
| -
|
| - virtual ~Request() {}
|
| -
|
| - // Callback on IO thread for when net::ProxyService::ResolveProxy
|
| - // completes, synchronously or asynchronously.
|
| - void OnCompletion(scoped_refptr<base::SingleThreadTaskRunner> origin_thread,
|
| - int result) {
|
| - // Generate the error message if the error message is not yet set,
|
| - // and there was an error.
|
| - if (error_.empty() && result != net::OK)
|
| - error_ = net::ErrorToString(result);
|
| - origin_thread->PostTask(FROM_HERE, notify_task_);
|
| - }
|
| -
|
| - std::string source_url_; // URL being resolved.
|
| - net::ProxyInfo proxy_info_; // ProxyInfo resolved for source_url_.
|
| - std::string error_; // Error from proxy resolution.
|
| - base::Closure notify_task_; // Task to notify of resolution result.
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(Request);
|
| - };
|
| -
|
| - ProxyResolverImpl() : origin_thread_(base::ThreadTaskRunnerHandle::Get()),
|
| - weak_ptr_factory_(this) {
|
| - }
|
| -
|
| - virtual ~ProxyResolverImpl() {
|
| - DCHECK(OnOriginThread());
|
| -
|
| - for (std::set<Request*>::iterator iter = all_requests_.begin();
|
| - iter != all_requests_.end(); ++iter) {
|
| - Request* request = *iter;
|
| - LOG(WARNING) << "Pending request for " << request->source_url_;
|
| - delete request;
|
| - }
|
| - }
|
| -
|
| - // ProxyResolverInterface override.
|
| - virtual void ResolveProxy(
|
| - const std::string& source_url,
|
| - const std::string& signal_interface,
|
| - const std::string& signal_name,
|
| - scoped_refptr<dbus::ExportedObject> exported_object) override {
|
| - DCHECK(OnOriginThread());
|
| -
|
| - // Create a request slot for this proxy resolution request.
|
| - Request* request = new Request(source_url);
|
| - request->notify_task_ = base::Bind(
|
| - &ProxyResolverImpl::NotifyProxyResolved,
|
| - weak_ptr_factory_.GetWeakPtr(),
|
| - signal_interface,
|
| - signal_name,
|
| - exported_object,
|
| - request);
|
| - all_requests_.insert(request);
|
| -
|
| - // GetPrimaryUserProfile() and GetRequestContext() must be called on UI
|
| - // thread.
|
| - Profile* profile = ProfileManager::GetPrimaryUserProfile();
|
| - scoped_refptr<net::URLRequestContextGetter> getter =
|
| - profile->GetRequestContext();
|
| -
|
| - getter->GetNetworkTaskRunner()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&ProxyResolverImpl::ResolveProxyInternal,
|
| - request,
|
| - origin_thread_,
|
| - getter,
|
| - exported_object));
|
| - }
|
| -
|
| - private:
|
| - // Helper function for ResolveProxy().
|
| - static void ResolveProxyInternal(
|
| - Request* request,
|
| - scoped_refptr<base::SingleThreadTaskRunner> origin_thread,
|
| - scoped_refptr<net::URLRequestContextGetter> getter,
|
| - scoped_refptr<dbus::ExportedObject> exported_object) {
|
| - // Make sure we're running on IO thread.
|
| - DCHECK(getter->GetNetworkTaskRunner()->BelongsToCurrentThread());
|
| -
|
| - // Check if we have the URLRequestContextGetter.
|
| - if (!getter.get()) {
|
| - request->error_ = "No URLRequestContextGetter";
|
| - request->OnCompletion(origin_thread, net::ERR_UNEXPECTED);
|
| - return;
|
| - }
|
| -
|
| - // Retrieve ProxyService from profile's request context.
|
| - net::ProxyService* proxy_service =
|
| - getter->GetURLRequestContext()->proxy_service();
|
| - if (!proxy_service) {
|
| - request->error_ = "No proxy service in chrome";
|
| - request->OnCompletion(origin_thread, net::ERR_UNEXPECTED);
|
| - return;
|
| - }
|
| -
|
| - VLOG(1) << "Starting network proxy resolution for "
|
| - << request->source_url_;
|
| - net::CompletionCallback completion_callback =
|
| - base::Bind(&Request::OnCompletion,
|
| - base::Unretained(request),
|
| - origin_thread);
|
| - const int result = proxy_service->ResolveProxy(
|
| - GURL(request->source_url_), net::LOAD_NORMAL, &request->proxy_info_,
|
| - completion_callback, NULL, NULL, net::BoundNetLog());
|
| - if (result != net::ERR_IO_PENDING) {
|
| - VLOG(1) << "Network proxy resolution completed synchronously.";
|
| - completion_callback.Run(result);
|
| - }
|
| - }
|
| -
|
| - // Called on UI thread as task posted from Request::OnCompletion on IO
|
| - // thread.
|
| - void NotifyProxyResolved(
|
| - const std::string& signal_interface,
|
| - const std::string& signal_name,
|
| - scoped_refptr<dbus::ExportedObject> exported_object,
|
| - Request* request) {
|
| - DCHECK(OnOriginThread());
|
| -
|
| - // Send a signal to the client.
|
| - dbus::Signal signal(signal_interface, signal_name);
|
| - dbus::MessageWriter writer(&signal);
|
| - writer.AppendString(request->source_url_);
|
| - writer.AppendString(request->proxy_info_.ToPacString());
|
| - writer.AppendString(request->error_);
|
| - exported_object->SendSignal(&signal);
|
| - VLOG(1) << "Sending signal: " << signal.ToString();
|
| -
|
| - std::set<Request*>::iterator iter = all_requests_.find(request);
|
| - if (iter == all_requests_.end()) {
|
| - LOG(ERROR) << "can't find request slot(" << request->source_url_
|
| - << ") in proxy-resolution queue";
|
| - } else {
|
| - all_requests_.erase(iter);
|
| - }
|
| - delete request;
|
| - }
|
| -
|
| - // Returns true if the current thread is on the origin thread.
|
| - bool OnOriginThread() {
|
| - return origin_thread_->BelongsToCurrentThread();
|
| - }
|
| -
|
| - scoped_refptr<base::SingleThreadTaskRunner> origin_thread_;
|
| - std::set<Request*> all_requests_;
|
| - base::WeakPtrFactory<ProxyResolverImpl> weak_ptr_factory_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(ProxyResolverImpl);
|
| -};
|
| -
|
| -ProxyResolutionServiceProvider::ProxyResolutionServiceProvider(
|
| - ProxyResolverInterface* resolver)
|
| - : resolver_(resolver),
|
| - origin_thread_(base::ThreadTaskRunnerHandle::Get()),
|
| - weak_ptr_factory_(this) {
|
| -}
|
| -
|
| -ProxyResolutionServiceProvider::~ProxyResolutionServiceProvider() {
|
| -}
|
| -
|
| -void ProxyResolutionServiceProvider::Start(
|
| - scoped_refptr<dbus::ExportedObject> exported_object) {
|
| - DCHECK(OnOriginThread());
|
| - exported_object_ = exported_object;
|
| - VLOG(1) << "ProxyResolutionServiceProvider started";
|
| - exported_object_->ExportMethod(
|
| - kLibCrosServiceInterface,
|
| - kResolveNetworkProxy,
|
| - // Weak pointers can only bind to methods without return values,
|
| - // hence we cannot bind ResolveProxyInternal here. Instead we use a
|
| - // static function to solve this problem.
|
| - base::Bind(&ProxyResolutionServiceProvider::CallResolveProxyHandler,
|
| - weak_ptr_factory_.GetWeakPtr()),
|
| - base::Bind(&ProxyResolutionServiceProvider::OnExported,
|
| - weak_ptr_factory_.GetWeakPtr()));
|
| -}
|
| -
|
| -void ProxyResolutionServiceProvider::OnExported(
|
| - const std::string& interface_name,
|
| - const std::string& method_name,
|
| - bool success) {
|
| - if (!success) {
|
| - LOG(ERROR) << "Failed to export " << interface_name << "."
|
| - << method_name;
|
| - }
|
| - VLOG(1) << "Method exported: " << interface_name << "." << method_name;
|
| -}
|
| -
|
| -bool ProxyResolutionServiceProvider::OnOriginThread() {
|
| - return origin_thread_->BelongsToCurrentThread();
|
| -}
|
| -
|
| -void ProxyResolutionServiceProvider::ResolveProxyHandler(
|
| - dbus::MethodCall* method_call,
|
| - dbus::ExportedObject::ResponseSender response_sender) {
|
| - DCHECK(OnOriginThread());
|
| - VLOG(1) << "Handing method call: " << method_call->ToString();
|
| - // The method call should contain the three string parameters.
|
| - dbus::MessageReader reader(method_call);
|
| - std::string source_url;
|
| - std::string signal_interface;
|
| - std::string signal_name;
|
| - if (!reader.PopString(&source_url) ||
|
| - !reader.PopString(&signal_interface) ||
|
| - !reader.PopString(&signal_name)) {
|
| - LOG(ERROR) << "Unexpected method call: " << method_call->ToString();
|
| - response_sender.Run(scoped_ptr<dbus::Response>());
|
| - return;
|
| - }
|
| -
|
| - resolver_->ResolveProxy(source_url,
|
| - signal_interface,
|
| - signal_name,
|
| - exported_object_);
|
| -
|
| - // Send an empty response for now. We'll send a signal once the network proxy
|
| - // resolution is completed.
|
| - response_sender.Run(dbus::Response::FromMethodCall(method_call));
|
| -}
|
| -
|
| -// static
|
| -void ProxyResolutionServiceProvider::CallResolveProxyHandler(
|
| - base::WeakPtr<ProxyResolutionServiceProvider> provider_weak_ptr,
|
| - dbus::MethodCall* method_call,
|
| - dbus::ExportedObject::ResponseSender response_sender) {
|
| - if (!provider_weak_ptr) {
|
| - LOG(WARNING) << "Called after the object is deleted";
|
| - response_sender.Run(scoped_ptr<dbus::Response>());
|
| - return;
|
| - }
|
| - provider_weak_ptr->ResolveProxyHandler(method_call, response_sender);
|
| -}
|
| -
|
| -ProxyResolutionServiceProvider* ProxyResolutionServiceProvider::Create() {
|
| - return new ProxyResolutionServiceProvider(new ProxyResolverImpl);
|
| -}
|
| -
|
| -ProxyResolutionServiceProvider*
|
| -ProxyResolutionServiceProvider::CreateForTesting(
|
| - ProxyResolverInterface* resolver) {
|
| - return new ProxyResolutionServiceProvider(resolver);
|
| -}
|
| -
|
| -ProxyResolverInterface::~ProxyResolverInterface() {
|
| -}
|
| -
|
| -} // namespace chromeos
|
|
|