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

Unified Diff: net/proxy/mojo_proxy_resolver_impl_unittest.cc

Issue 1439053002: Change ProxyResolver::GetProxyForURL() to take a scoped_ptr<Request>* rather than a RequestHandle* (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Restore scoped_ptr to mock and nits Created 4 years, 10 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/mojo_proxy_resolver_impl.cc ('k') | net/proxy/multi_threaded_proxy_resolver.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/proxy/mojo_proxy_resolver_impl_unittest.cc
diff --git a/net/proxy/mojo_proxy_resolver_impl_unittest.cc b/net/proxy/mojo_proxy_resolver_impl_unittest.cc
index b045b27b3008507f88f72db220ed8d34bbcd045d..fb722c0a38e0a7ce3faaeb8a71f552955e83bee2 100644
--- a/net/proxy/mojo_proxy_resolver_impl_unittest.cc
+++ b/net/proxy/mojo_proxy_resolver_impl_unittest.cc
@@ -102,68 +102,87 @@ void TestRequestClient::OnConnectionError() {
class MockProxyResolverV8Tracing : public ProxyResolverV8Tracing {
public:
- struct Request {
+ struct Job {
GURL url;
ProxyInfo* results;
- CompletionCallback callback;
bool cancelled = false;
+ void Complete(int result) {
+ DCHECK(!callback_.is_null());
+ callback_.Run(result);
+ callback_.Reset();
+ }
+
+ bool WasCompleted() { return callback_.is_null(); }
+
+ void SetCallback(CompletionCallback callback) { callback_ = callback; }
+
+ private:
+ CompletionCallback callback_;
+ };
+
+ class RequestImpl : public ProxyResolver::Request {
+ public:
+ RequestImpl(Job* job, MockProxyResolverV8Tracing* resolver)
+ : job_(job), resolver_(resolver) {}
+
+ ~RequestImpl() override {
+ if (job_->WasCompleted())
+ return;
+ job_->cancelled = true;
+ if (!resolver_->cancel_callback_.is_null()) {
+ resolver_->cancel_callback_.Run();
+ resolver_->cancel_callback_.Reset();
+ }
+ }
+
+ LoadState GetLoadState() override {
+ return LOAD_STATE_RESOLVING_PROXY_FOR_URL;
+ }
+
+ private:
+ Job* job_;
+ MockProxyResolverV8Tracing* resolver_;
};
+
MockProxyResolverV8Tracing() {}
// ProxyResolverV8Tracing overrides.
void GetProxyForURL(const GURL& url,
ProxyInfo* results,
const CompletionCallback& callback,
- ProxyResolver::RequestHandle* request,
+ scoped_ptr<ProxyResolver::Request>* request,
scoped_ptr<Bindings> bindings) override;
- void CancelRequest(ProxyResolver::RequestHandle request_handle) override;
- LoadState GetLoadState(ProxyResolver::RequestHandle request) const override;
- // Wait until the mock resolver has received a CancelRequest call.
+ // Wait until the request are cancelled.
void WaitForCancel();
- const std::vector<Request>& pending_requests() { return pending_requests_; }
+ const std::vector<scoped_ptr<Job>>& pending_jobs() { return pending_jobs_; }
private:
base::Closure cancel_callback_;
- std::vector<Request> pending_requests_;
+ std::vector<scoped_ptr<Job>> pending_jobs_;
};
void MockProxyResolverV8Tracing::GetProxyForURL(
const GURL& url,
ProxyInfo* results,
const CompletionCallback& callback,
- ProxyResolver::RequestHandle* request,
+ scoped_ptr<ProxyResolver::Request>* request,
scoped_ptr<Bindings> bindings) {
- pending_requests_.push_back(Request());
- auto& pending_request = pending_requests_.back();
- pending_request.url = url;
- pending_request.results = results;
- pending_request.callback = callback;
- *request =
- reinterpret_cast<ProxyResolver::RequestHandle>(pending_requests_.size());
+ pending_jobs_.push_back(make_scoped_ptr(new Job()));
+ auto pending_job = pending_jobs_.back().get();
+ pending_job->url = url;
+ pending_job->results = results;
+ pending_job->SetCallback(callback);
+ request->reset(new RequestImpl(pending_job, this));
}
-void MockProxyResolverV8Tracing::CancelRequest(
- ProxyResolver::RequestHandle request_handle) {
- size_t id = reinterpret_cast<size_t>(request_handle) - 1;
- pending_requests_[id].cancelled = true;
- if (!cancel_callback_.is_null()) {
- cancel_callback_.Run();
- cancel_callback_.Reset();
- }
-}
-
-LoadState MockProxyResolverV8Tracing::GetLoadState(
- ProxyResolver::RequestHandle request) const {
- return LOAD_STATE_RESOLVING_PROXY_FOR_URL;
-}
void MockProxyResolverV8Tracing::WaitForCancel() {
- while (std::find_if(pending_requests_.begin(), pending_requests_.end(),
- [](const Request& request) {
- return request.cancelled;
- }) != pending_requests_.end()) {
+ while (std::find_if(pending_jobs_.begin(), pending_jobs_.end(),
+ [](const scoped_ptr<Job>& job) {
+ return job->cancelled;
+ }) != pending_jobs_.end()) {
base::RunLoop run_loop;
cancel_callback_ = run_loop.QuitClosure();
run_loop.Run();
@@ -193,19 +212,19 @@ TEST_F(MojoProxyResolverImplTest, GetProxyForUrl) {
TestRequestClient client(mojo::GetProxy(&client_ptr));
resolver_->GetProxyForUrl("http://example.com", std::move(client_ptr));
- ASSERT_EQ(1u, mock_proxy_resolver_->pending_requests().size());
- const MockProxyResolverV8Tracing::Request& request =
- mock_proxy_resolver_->pending_requests()[0];
- EXPECT_EQ(GURL("http://example.com"), request.url);
+ ASSERT_EQ(1u, mock_proxy_resolver_->pending_jobs().size());
+ MockProxyResolverV8Tracing::Job* job =
+ mock_proxy_resolver_->pending_jobs()[0].get();
+ EXPECT_EQ(GURL("http://example.com"), job->url);
- request.results->UsePacString(
+ job->results->UsePacString(
"PROXY proxy.example.com:1; "
"SOCKS4 socks4.example.com:2; "
"SOCKS5 socks5.example.com:3; "
"HTTPS https.example.com:4; "
"QUIC quic.example.com:65000; "
"DIRECT");
- request.callback.Run(OK);
+ job->Complete(OK);
client.WaitForResult();
EXPECT_EQ(OK, client.error());
@@ -240,11 +259,11 @@ TEST_F(MojoProxyResolverImplTest, GetProxyForUrlFailure) {
TestRequestClient client(mojo::GetProxy(&client_ptr));
resolver_->GetProxyForUrl("http://example.com", std::move(client_ptr));
- ASSERT_EQ(1u, mock_proxy_resolver_->pending_requests().size());
- const MockProxyResolverV8Tracing::Request& request =
- mock_proxy_resolver_->pending_requests()[0];
- EXPECT_EQ(GURL("http://example.com"), request.url);
- request.callback.Run(ERR_FAILED);
+ ASSERT_EQ(1u, mock_proxy_resolver_->pending_jobs().size());
+ MockProxyResolverV8Tracing::Job* job =
+ mock_proxy_resolver_->pending_jobs()[0].get();
+ EXPECT_EQ(GURL("http://example.com"), job->url);
+ job->Complete(ERR_FAILED);
client.WaitForResult();
EXPECT_EQ(ERR_FAILED, client.error());
@@ -261,17 +280,17 @@ TEST_F(MojoProxyResolverImplTest, GetProxyForUrlMultiple) {
resolver_->GetProxyForUrl("http://example.com", std::move(client_ptr1));
resolver_->GetProxyForUrl("https://example.com", std::move(client_ptr2));
- ASSERT_EQ(2u, mock_proxy_resolver_->pending_requests().size());
- const MockProxyResolverV8Tracing::Request& request1 =
- mock_proxy_resolver_->pending_requests()[0];
- EXPECT_EQ(GURL("http://example.com"), request1.url);
- const MockProxyResolverV8Tracing::Request& request2 =
- mock_proxy_resolver_->pending_requests()[1];
- EXPECT_EQ(GURL("https://example.com"), request2.url);
- request1.results->UsePacString("HTTPS proxy.example.com:12345");
- request1.callback.Run(OK);
- request2.results->UsePacString("SOCKS5 another-proxy.example.com:6789");
- request2.callback.Run(OK);
+ ASSERT_EQ(2u, mock_proxy_resolver_->pending_jobs().size());
+ MockProxyResolverV8Tracing::Job* job1 =
+ mock_proxy_resolver_->pending_jobs()[0].get();
+ EXPECT_EQ(GURL("http://example.com"), job1->url);
+ MockProxyResolverV8Tracing::Job* job2 =
+ mock_proxy_resolver_->pending_jobs()[1].get();
+ EXPECT_EQ(GURL("https://example.com"), job2->url);
+ job1->results->UsePacString("HTTPS proxy.example.com:12345");
+ job1->Complete(OK);
+ job2->results->UsePacString("SOCKS5 another-proxy.example.com:6789");
+ job2->Complete(OK);
client1.WaitForResult();
client2.WaitForResult();
@@ -300,11 +319,11 @@ TEST_F(MojoProxyResolverImplTest, DestroyClient) {
new TestRequestClient(mojo::GetProxy(&client_ptr)));
resolver_->GetProxyForUrl("http://example.com", std::move(client_ptr));
- ASSERT_EQ(1u, mock_proxy_resolver_->pending_requests().size());
- const MockProxyResolverV8Tracing::Request& request =
- mock_proxy_resolver_->pending_requests()[0];
- EXPECT_EQ(GURL("http://example.com"), request.url);
- request.results->UsePacString("PROXY proxy.example.com:8080");
+ ASSERT_EQ(1u, mock_proxy_resolver_->pending_jobs().size());
+ const MockProxyResolverV8Tracing::Job* job =
+ mock_proxy_resolver_->pending_jobs()[0].get();
+ EXPECT_EQ(GURL("http://example.com"), job->url);
+ job->results->UsePacString("PROXY proxy.example.com:8080");
client.reset();
mock_proxy_resolver_->WaitForCancel();
}
@@ -314,7 +333,7 @@ TEST_F(MojoProxyResolverImplTest, DestroyService) {
TestRequestClient client(mojo::GetProxy(&client_ptr));
resolver_->GetProxyForUrl("http://example.com", std::move(client_ptr));
- ASSERT_EQ(1u, mock_proxy_resolver_->pending_requests().size());
+ ASSERT_EQ(1u, mock_proxy_resolver_->pending_jobs().size());
resolver_impl_.reset();
client.event_waiter().WaitForEvent(TestRequestClient::CONNECTION_ERROR);
}
« no previous file with comments | « net/proxy/mojo_proxy_resolver_impl.cc ('k') | net/proxy/multi_threaded_proxy_resolver.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698