Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "net/proxy/proxy_resolver_v8_tracing_wrapper.h" | |
| 6 | |
| 7 #include <string> | |
| 8 | |
| 9 #include "base/bind.h" | |
| 10 #include "base/values.h" | |
| 11 #include "net/base/net_errors.h" | |
| 12 #include "net/log/net_log.h" | |
| 13 #include "net/proxy/proxy_resolver_error_observer.h" | |
| 14 | |
| 15 namespace net { | |
| 16 namespace { | |
| 17 | |
| 18 // Returns event parameters for a PAC error message (line number + message). | |
| 19 scoped_ptr<base::Value> NetLogErrorCallback( | |
| 20 int line_number, | |
| 21 const base::string16* message, | |
| 22 NetLogCaptureMode /* capture_mode */) { | |
| 23 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | |
| 24 dict->SetInteger("line_number", line_number); | |
| 25 dict->SetString("message", *message); | |
| 26 return dict.Pass(); | |
| 27 } | |
| 28 | |
| 29 class ProxyResolverV8TracingWrapper : public ProxyResolver { | |
| 30 public: | |
| 31 ProxyResolverV8TracingWrapper( | |
| 32 scoped_ptr<ProxyResolverV8Tracing> resolver_impl, | |
| 33 NetLog* net_log, | |
| 34 HostResolver* host_resolver, | |
| 35 scoped_ptr<ProxyResolverErrorObserver> error_observer); | |
| 36 | |
| 37 int GetProxyForURL(const GURL& url, | |
| 38 ProxyInfo* results, | |
| 39 const CompletionCallback& callback, | |
| 40 RequestHandle* request, | |
| 41 const BoundNetLog& net_log) override; | |
| 42 | |
| 43 void CancelRequest(RequestHandle request) override; | |
| 44 | |
| 45 LoadState GetLoadState(RequestHandle request) const override; | |
| 46 | |
| 47 private: | |
| 48 class BindingsImpl : public ProxyResolverV8Tracing::Bindings { | |
| 49 public: | |
| 50 BindingsImpl(ProxyResolverV8TracingWrapper* resolver, | |
| 51 const BoundNetLog& bound_net_log) | |
| 52 : resolver_(resolver), bound_net_log_(bound_net_log) {} | |
| 53 | |
| 54 void Alert(const base::string16& message) override { | |
| 55 // Send to the NetLog. | |
| 56 LogEventToCurrentRequestAndGlobally( | |
| 57 NetLog::TYPE_PAC_JAVASCRIPT_ALERT, | |
| 58 NetLog::StringCallback("message", &message)); | |
| 59 } | |
| 60 | |
| 61 void OnError(int line_number, const base::string16& message) override { | |
| 62 // Send the error to the NetLog. | |
| 63 LogEventToCurrentRequestAndGlobally( | |
| 64 NetLog::TYPE_PAC_JAVASCRIPT_ERROR, | |
| 65 base::Bind(&NetLogErrorCallback, line_number, &message)); | |
| 66 if (resolver_->error_observer_) | |
| 67 resolver_->error_observer_->OnPACScriptError(line_number, message); | |
| 68 } | |
| 69 | |
| 70 HostResolver* GetHostResolver() override { | |
| 71 return resolver_->host_resolver_; | |
| 72 } | |
| 73 | |
| 74 BoundNetLog GetBoundNetLog() override { return bound_net_log_; } | |
| 75 | |
| 76 private: | |
| 77 void LogEventToCurrentRequestAndGlobally( | |
| 78 NetLog::EventType type, | |
| 79 const NetLog::ParametersCallback& parameters_callback) { | |
| 80 bound_net_log_.AddEvent(type, parameters_callback); | |
| 81 | |
| 82 // Emit to the global NetLog event stream. | |
| 83 if (resolver_->net_log_) | |
| 84 resolver_->net_log_->AddGlobalEntry(type, parameters_callback); | |
| 85 } | |
| 86 | |
| 87 ProxyResolverV8TracingWrapper* resolver_; | |
| 88 BoundNetLog bound_net_log_; | |
| 89 }; | |
| 90 | |
| 91 scoped_ptr<ProxyResolverV8Tracing> resolver_impl_; | |
| 92 NetLog* net_log_; | |
| 93 HostResolver* host_resolver_; | |
| 94 scoped_ptr<ProxyResolverErrorObserver> error_observer_; | |
| 95 | |
| 96 DISALLOW_COPY_AND_ASSIGN(ProxyResolverV8TracingWrapper); | |
| 97 }; | |
| 98 | |
| 99 ProxyResolverV8TracingWrapper::ProxyResolverV8TracingWrapper( | |
| 100 scoped_ptr<ProxyResolverV8Tracing> resolver_impl, | |
| 101 NetLog* net_log, | |
| 102 HostResolver* host_resolver, | |
| 103 scoped_ptr<ProxyResolverErrorObserver> error_observer) | |
| 104 : resolver_impl_(resolver_impl.Pass()), | |
| 105 net_log_(net_log), | |
| 106 host_resolver_(host_resolver), | |
| 107 error_observer_(error_observer.Pass()) { | |
| 108 } | |
| 109 | |
| 110 int ProxyResolverV8TracingWrapper::GetProxyForURL( | |
| 111 const GURL& url, | |
| 112 ProxyInfo* results, | |
| 113 const CompletionCallback& callback, | |
| 114 RequestHandle* request, | |
| 115 const BoundNetLog& net_log) { | |
| 116 resolver_impl_->GetProxyForURL( | |
| 117 url, results, callback, request, | |
| 118 make_scoped_ptr(new BindingsImpl(this, net_log))); | |
| 119 return ERR_IO_PENDING; | |
| 120 } | |
| 121 | |
| 122 void ProxyResolverV8TracingWrapper::CancelRequest(RequestHandle request) { | |
| 123 resolver_impl_->CancelRequest(request); | |
| 124 } | |
| 125 | |
| 126 LoadState ProxyResolverV8TracingWrapper::GetLoadState( | |
| 127 RequestHandle request) const { | |
| 128 return resolver_impl_->GetLoadState(request); | |
| 129 } | |
| 130 | |
| 131 } // namespace | |
| 132 | |
| 133 class ProxyResolverFactoryV8TracingWrapper::BindingsImpl | |
|
eroman
2015/06/05 01:11:47
This is the same as BindingsImpl above.
Can you e
Sam McNally
2015/06/23 00:32:47
Done.
| |
| 134 : public ProxyResolverV8Tracing::Bindings { | |
| 135 public: | |
| 136 BindingsImpl(ProxyResolverFactoryV8TracingWrapper* factory, | |
| 137 ProxyResolverErrorObserver* error_observer) | |
| 138 : factory_(factory), error_observer_(error_observer) {} | |
| 139 | |
| 140 void Alert(const base::string16& message) override { | |
| 141 // Send to the NetLog. | |
| 142 LogEventToCurrentRequestAndGlobally( | |
| 143 NetLog::TYPE_PAC_JAVASCRIPT_ALERT, | |
| 144 NetLog::StringCallback("message", &message)); | |
| 145 } | |
| 146 | |
| 147 void OnError(int line_number, const base::string16& message) override { | |
| 148 // Send the error to the NetLog. | |
| 149 LogEventToCurrentRequestAndGlobally( | |
| 150 NetLog::TYPE_PAC_JAVASCRIPT_ERROR, | |
| 151 base::Bind(&NetLogErrorCallback, line_number, &message)); | |
| 152 if (error_observer_) | |
| 153 error_observer_->OnPACScriptError(line_number, message); | |
| 154 } | |
| 155 | |
| 156 HostResolver* GetHostResolver() override { return factory_->host_resolver_; } | |
| 157 | |
| 158 BoundNetLog GetBoundNetLog() override { return BoundNetLog(); } | |
| 159 | |
| 160 private: | |
| 161 void LogEventToCurrentRequestAndGlobally( | |
| 162 NetLog::EventType type, | |
| 163 const NetLog::ParametersCallback& parameters_callback) { | |
| 164 // Emit to the global NetLog event stream. | |
| 165 if (factory_->net_log_) | |
| 166 factory_->net_log_->AddGlobalEntry(type, parameters_callback); | |
| 167 } | |
| 168 | |
| 169 ProxyResolverFactoryV8TracingWrapper* factory_; | |
| 170 ProxyResolverErrorObserver* error_observer_; | |
| 171 }; | |
| 172 | |
| 173 ProxyResolverFactoryV8TracingWrapper::ProxyResolverFactoryV8TracingWrapper( | |
| 174 HostResolver* host_resolver, | |
| 175 NetLog* net_log, | |
| 176 const base::Callback<scoped_ptr<ProxyResolverErrorObserver>()>& | |
| 177 error_observer_factory) | |
| 178 : ProxyResolverFactory(true), | |
| 179 factory_impl_(ProxyResolverV8TracingFactory::Create()), | |
| 180 host_resolver_(host_resolver), | |
| 181 net_log_(net_log), | |
| 182 error_observer_factory_(error_observer_factory) { | |
| 183 } | |
| 184 | |
| 185 ProxyResolverFactoryV8TracingWrapper::~ProxyResolverFactoryV8TracingWrapper() = | |
| 186 default; | |
| 187 | |
| 188 int ProxyResolverFactoryV8TracingWrapper::CreateProxyResolver( | |
| 189 const scoped_refptr<ProxyResolverScriptData>& pac_script, | |
| 190 scoped_ptr<ProxyResolver>* resolver, | |
| 191 const CompletionCallback& callback, | |
| 192 scoped_ptr<Request>* request) { | |
| 193 scoped_ptr<scoped_ptr<ProxyResolverV8Tracing>> passable_v8_resolver( | |
| 194 new scoped_ptr<ProxyResolverV8Tracing>); | |
| 195 scoped_ptr<ProxyResolverErrorObserver> error_observer = | |
| 196 error_observer_factory_.Run(); | |
| 197 scoped_ptr<ProxyResolverV8Tracing>* v8_resolver = passable_v8_resolver.get(); | |
| 198 factory_impl_->CreateProxyResolverV8Tracing( | |
| 199 pac_script, make_scoped_ptr(new BindingsImpl(this, error_observer.get())), | |
| 200 v8_resolver, | |
| 201 base::Bind(&ProxyResolverFactoryV8TracingWrapper::OnProxyResolverCreated, | |
| 202 base::Unretained(this), base::Passed(&passable_v8_resolver), | |
| 203 resolver, callback, base::Passed(&error_observer)), | |
| 204 request); | |
| 205 return ERR_IO_PENDING; | |
| 206 } | |
| 207 | |
| 208 void ProxyResolverFactoryV8TracingWrapper::OnProxyResolverCreated( | |
| 209 scoped_ptr<scoped_ptr<ProxyResolverV8Tracing>> v8_resolver, | |
| 210 scoped_ptr<ProxyResolver>* resolver, | |
| 211 const CompletionCallback& callback, | |
| 212 scoped_ptr<ProxyResolverErrorObserver> error_observer, | |
| 213 int error) { | |
| 214 if (error == OK) { | |
| 215 resolver->reset(new ProxyResolverV8TracingWrapper( | |
| 216 v8_resolver->Pass(), net_log_, host_resolver_, error_observer.Pass())); | |
| 217 } | |
| 218 callback.Run(error); | |
| 219 } | |
| 220 | |
| 221 } // namespace net | |
| OLD | NEW |