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

Unified Diff: chrome/browser/chromeos/dbus/proxy_resolution_service_provider.cc

Issue 743623002: Move ProxyResolutionServiceProvider to chromeos/dbus/services (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698