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

Unified Diff: net/proxy/proxy_resolver_mojo.cc

Issue 862813002: WIP: Prototype OOP V8 PAC. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Slight cleanup and report JS memory usage. Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/proxy/proxy_resolver_mojo.h ('k') | net/proxy/proxy_resolver_mojo_host.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/proxy/proxy_resolver_mojo.cc
diff --git a/net/proxy/proxy_resolver_mojo.cc b/net/proxy/proxy_resolver_mojo.cc
new file mode 100644
index 0000000000000000000000000000000000000000..c41d62c7f6b7ce160c1ff12c104bf13062d3a391
--- /dev/null
+++ b/net/proxy/proxy_resolver_mojo.cc
@@ -0,0 +1,198 @@
+// Copyright 2015 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 "net/proxy/proxy_resolver_mojo.h"
+
+#include "base/logging.h"
+#include "base/memory/ref_counted.h"
+#include "base/strings/string16.h"
+#include "base/strings/utf_string_conversions.h"
+#include "mojo/public/cpp/bindings/interface_ptr.h"
+#include "net/base/address_list.h"
+#include "net/base/completion_callback.h"
+#include "net/base/load_states.h"
+#include "net/base/net_errors.h"
+#include "net/base/net_export.h"
+#include "net/base/net_log.h"
+#include "net/dns/single_request_host_resolver.h"
+#include "net/proxy/proxy_info.h"
+#include "net/proxy/proxy_resolver_script_data.h"
+#include "url/gurl.h"
+
+namespace net {
+
+namespace {
+
+class Job : public mojo::InterfaceImpl<proxy::ResolveRequestClient> {
+ public:
+ Job(ProxyInfo* results,
+ const CompletionCallback& callback,
+ const BoundNetLog& net_log,
+ HostResolver* host_resolver);
+ ~Job() override;
+
+ LoadState GetLoadState() const;
+
+ private:
+ void ReportResult(const mojo::String& pac_string) override;
+ void ReportError(int32_t error) override;
+ void UpdateLoadState(int32_t load_state) override;
+
+ void OnConnectionError() override;
+
+ void ResolveHostDone(int32_t result);
+ ProxyInfo* results_;
+ CompletionCallback callback_;
+ BoundNetLog net_log_;
+
+ SingleRequestHostResolver host_resolver_;
+
+ bool host_resolve_in_progress_;
+ AddressList host_resolve_result_;
+ LoadState load_state_ = LOAD_STATE_RESOLVING_PROXY_FOR_URL;
+ mojo::Callback<void(int32_t, mojo::Array<mojo::String>)>
+ host_resolve_callback_;
+
+ DISALLOW_COPY_AND_ASSIGN(Job);
+};
+
+Job::Job(ProxyInfo* results,
+ const CompletionCallback& callback,
+ const BoundNetLog& net_log,
+ HostResolver* host_resolver)
+ : results_(results),
+ callback_(callback),
+ net_log_(net_log),
+ host_resolver_(host_resolver) {
+}
+
+Job::~Job() = default;
+
+LoadState Job::GetLoadState() const {
+ return load_state_;
+}
+
+void Job::ReportResult(const mojo::String& pac_string) {
+ VLOG(1) << pac_string.To<std::string>();
+ results_->UsePacString(pac_string);
+ ReportError(0);
+}
+
+void Job::ReportError(int32_t error) {
+ callback_.Run(error);
+ delete this;
+}
+
+void Job::UpdateLoadState(int32_t load_state) {
+ load_state_ = static_cast<LoadState>(load_state);
+}
+
+void Job::OnConnectionError() {
+ callback_.Run(ERR_FAILED);
+ delete this;
+}
+
+void Job::ResolveHostDone(int32_t result) {
+ host_resolve_in_progress_ = false;
+ if (result != 0) {
+ host_resolve_callback_.Run(result, mojo::Array<mojo::String>());
+ return;
+ }
+}
+
+} // namespace
+
+class ProxyResolverMojo::SetPacScriptJob
+ : public mojo::InterfaceImpl<proxy::SetPacScriptClient> {
+ public:
+ explicit SetPacScriptJob(const CompletionCallback& callback);
+ ~SetPacScriptJob() override;
+
+ base::WeakPtr<SetPacScriptJob> GetWeakPtr();
+
+ private:
+ void ReportResult(int32_t error) override;
+
+ void OnConnectionError() override;
+
+ CompletionCallback callback_;
+
+ base::WeakPtrFactory<SetPacScriptJob> weak_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(SetPacScriptJob);
+};
+
+ProxyResolverMojo::ProxyResolverMojo(
+ mojo::InterfacePtr<proxy::Resolver> resolver,
+ HostResolver* host_resolver)
+ : ProxyResolver(true),
+ resolver_(resolver.Pass()),
+ host_resolver_(host_resolver) {
+ // XXX: Call SetResolver().
+}
+
+ProxyResolverMojo::~ProxyResolverMojo() = default;
+
+int ProxyResolverMojo::GetProxyForURL(const GURL& url,
+ ProxyInfo* results,
+ const CompletionCallback& callback,
+ RequestHandle* request,
+ const BoundNetLog& net_log) {
+ VLOG(1) << "GetProxyForURL " << url;
+ mojo::InterfacePtr<proxy::ResolveRequestClient> handle;
+ *request = mojo::WeakBindToProxy(
+ new Job(results, callback, net_log, host_resolver_), &handle);
+ resolver_->GetProxyForUrl(url.spec(), handle.Pass());
+ return ERR_IO_PENDING;
+}
+
+void ProxyResolverMojo::CancelRequest(RequestHandle request) {
+ delete static_cast<Job*>(request);
+}
+
+LoadState ProxyResolverMojo::GetLoadState(RequestHandle request) const {
+ return static_cast<Job*>(request)->GetLoadState();
+}
+
+void ProxyResolverMojo::CancelSetPacScript() {
+ if (set_pac_script_job_)
+ delete set_pac_script_job_.get();
+}
+
+int ProxyResolverMojo::SetPacScript(
+ const scoped_refptr<ProxyResolverScriptData>& pac_script,
+ const CompletionCallback& callback) {
+ proxy::SetPacScriptClientPtr handle;
+ set_pac_script_job_ = mojo::WeakBindToProxy(new SetPacScriptJob(callback),
+ &handle)->GetWeakPtr();
+ VLOG(1) << "SetPacScript";
+ // XXX: Try to avoid converting between utf16 and utf8 and back to utf16.
+ resolver_->SetPacScript(base::UTF16ToUTF8(pac_script->utf16()),
+ handle.Pass());
+ return ERR_IO_PENDING;
+}
+
+ProxyResolverMojo::SetPacScriptJob::SetPacScriptJob(
+ const CompletionCallback& callback)
+ : callback_(callback), weak_factory_(this) {
+}
+
+ProxyResolverMojo::SetPacScriptJob::~SetPacScriptJob() = default;
+
+base::WeakPtr<ProxyResolverMojo::SetPacScriptJob>
+ProxyResolverMojo::SetPacScriptJob::GetWeakPtr() {
+ return weak_factory_.GetWeakPtr();
+}
+
+void ProxyResolverMojo::SetPacScriptJob::ReportResult(int32_t error) {
+ callback_.Run(error);
+ delete this;
+}
+
+void ProxyResolverMojo::SetPacScriptJob::OnConnectionError() {
+ callback_.Run(ERR_FAILED);
+ delete this;
+}
+
+} // namespace net
« no previous file with comments | « net/proxy/proxy_resolver_mojo.h ('k') | net/proxy/proxy_resolver_mojo_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698