| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/dns/host_resolver_impl.h" | 5 #include "net/dns/host_resolver_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 } | 263 } |
| 264 | 264 |
| 265 bool HasOneAddress(const std::string& address, uint16 port) const { | 265 bool HasOneAddress(const std::string& address, uint16 port) const { |
| 266 return HasAddress(address, port) && (NumberOfAddresses() == 1u); | 266 return HasAddress(address, port) && (NumberOfAddresses() == 1u); |
| 267 } | 267 } |
| 268 | 268 |
| 269 // Returns ERR_UNEXPECTED if timed out. | 269 // Returns ERR_UNEXPECTED if timed out. |
| 270 int WaitForResult() { | 270 int WaitForResult() { |
| 271 if (completed()) | 271 if (completed()) |
| 272 return result_; | 272 return result_; |
| 273 base::CancelableClosure closure(base::MessageLoop::QuitClosure()); | 273 base::CancelableClosure closure(base::MessageLoop::QuitWhenIdleClosure()); |
| 274 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 274 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| 275 FROM_HERE, closure.callback(), TestTimeouts::action_max_timeout()); | 275 FROM_HERE, closure.callback(), TestTimeouts::action_max_timeout()); |
| 276 quit_on_complete_ = true; | 276 quit_on_complete_ = true; |
| 277 base::MessageLoop::current()->Run(); | 277 base::MessageLoop::current()->Run(); |
| 278 bool did_quit = !quit_on_complete_; | 278 bool did_quit = !quit_on_complete_; |
| 279 quit_on_complete_ = false; | 279 quit_on_complete_ = false; |
| 280 closure.Cancel(); | 280 closure.Cancel(); |
| 281 if (did_quit) | 281 if (did_quit) |
| 282 return result_; | 282 return result_; |
| 283 else | 283 else |
| 284 return ERR_UNEXPECTED; | 284 return ERR_UNEXPECTED; |
| 285 } | 285 } |
| 286 | 286 |
| 287 private: | 287 private: |
| 288 void OnComplete(int rv) { | 288 void OnComplete(int rv) { |
| 289 EXPECT_TRUE(pending()); | 289 EXPECT_TRUE(pending()); |
| 290 EXPECT_EQ(ERR_IO_PENDING, result_); | 290 EXPECT_EQ(ERR_IO_PENDING, result_); |
| 291 EXPECT_NE(ERR_IO_PENDING, rv); | 291 EXPECT_NE(ERR_IO_PENDING, rv); |
| 292 result_ = rv; | 292 result_ = rv; |
| 293 handle_ = NULL; | 293 handle_ = NULL; |
| 294 if (!list_.empty()) { | 294 if (!list_.empty()) { |
| 295 EXPECT_EQ(OK, result_); | 295 EXPECT_EQ(OK, result_); |
| 296 EXPECT_EQ(info_.port(), list_.front().port()); | 296 EXPECT_EQ(info_.port(), list_.front().port()); |
| 297 } | 297 } |
| 298 if (handler_) | 298 if (handler_) |
| 299 handler_->Handle(this); | 299 handler_->Handle(this); |
| 300 if (quit_on_complete_) { | 300 if (quit_on_complete_) { |
| 301 base::MessageLoop::current()->Quit(); | 301 base::MessageLoop::current()->QuitWhenIdle(); |
| 302 quit_on_complete_ = false; | 302 quit_on_complete_ = false; |
| 303 } | 303 } |
| 304 } | 304 } |
| 305 | 305 |
| 306 HostResolver::RequestInfo info_; | 306 HostResolver::RequestInfo info_; |
| 307 RequestPriority priority_; | 307 RequestPriority priority_; |
| 308 size_t index_; | 308 size_t index_; |
| 309 HostResolver* resolver_; | 309 HostResolver* resolver_; |
| 310 Handler* handler_; | 310 Handler* handler_; |
| 311 bool quit_on_complete_; | 311 bool quit_on_complete_; |
| (...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 840 struct MyHandler : public Handler { | 840 struct MyHandler : public Handler { |
| 841 void Handle(Request* req) override { | 841 void Handle(Request* req) override { |
| 842 EXPECT_EQ("a", req->info().hostname()); | 842 EXPECT_EQ("a", req->info().hostname()); |
| 843 EXPECT_EQ(80, req->info().port()); | 843 EXPECT_EQ(80, req->info().port()); |
| 844 | 844 |
| 845 DeleteResolver(); | 845 DeleteResolver(); |
| 846 | 846 |
| 847 // Quit after returning from OnCompleted (to give it a chance at | 847 // Quit after returning from OnCompleted (to give it a chance at |
| 848 // incorrectly running the cancelled tasks). | 848 // incorrectly running the cancelled tasks). |
| 849 base::ThreadTaskRunnerHandle::Get()->PostTask( | 849 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 850 FROM_HERE, base::MessageLoop::QuitClosure()); | 850 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure()); |
| 851 } | 851 } |
| 852 }; | 852 }; |
| 853 set_handler(new MyHandler()); | 853 set_handler(new MyHandler()); |
| 854 | 854 |
| 855 for (size_t i = 0; i < 4; ++i) { | 855 for (size_t i = 0; i < 4; ++i) { |
| 856 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("a", 80 + i)->Resolve()) << i; | 856 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("a", 80 + i)->Resolve()) << i; |
| 857 } | 857 } |
| 858 | 858 |
| 859 proc_->SignalMultiple(1u); // One for "a". | 859 proc_->SignalMultiple(1u); // One for "a". |
| 860 | 860 |
| 861 // |MyHandler| will send quit message once all the requests have finished. | 861 // |MyHandler| will send quit message once all the requests have finished. |
| 862 base::MessageLoop::current()->Run(); | 862 base::MessageLoop::current()->Run(); |
| 863 } | 863 } |
| 864 | 864 |
| 865 TEST_F(HostResolverImplTest, DeleteWithinAbortedCallback) { | 865 TEST_F(HostResolverImplTest, DeleteWithinAbortedCallback) { |
| 866 struct MyHandler : public Handler { | 866 struct MyHandler : public Handler { |
| 867 void Handle(Request* req) override { | 867 void Handle(Request* req) override { |
| 868 EXPECT_EQ("a", req->info().hostname()); | 868 EXPECT_EQ("a", req->info().hostname()); |
| 869 EXPECT_EQ(80, req->info().port()); | 869 EXPECT_EQ(80, req->info().port()); |
| 870 | 870 |
| 871 DeleteResolver(); | 871 DeleteResolver(); |
| 872 | 872 |
| 873 // Quit after returning from OnCompleted (to give it a chance at | 873 // Quit after returning from OnCompleted (to give it a chance at |
| 874 // incorrectly running the cancelled tasks). | 874 // incorrectly running the cancelled tasks). |
| 875 base::ThreadTaskRunnerHandle::Get()->PostTask( | 875 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 876 FROM_HERE, base::MessageLoop::QuitClosure()); | 876 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure()); |
| 877 } | 877 } |
| 878 }; | 878 }; |
| 879 set_handler(new MyHandler()); | 879 set_handler(new MyHandler()); |
| 880 | 880 |
| 881 // This test assumes that the Jobs will be Aborted in order ["a", "b"] | 881 // This test assumes that the Jobs will be Aborted in order ["a", "b"] |
| 882 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("a", 80)->Resolve()); | 882 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("a", 80)->Resolve()); |
| 883 // HostResolverImpl will be deleted before later Requests can complete. | 883 // HostResolverImpl will be deleted before later Requests can complete. |
| 884 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("a", 81)->Resolve()); | 884 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("a", 81)->Resolve()); |
| 885 // Job for 'b' will be aborted before it can complete. | 885 // Job for 'b' will be aborted before it can complete. |
| 886 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("b", 82)->Resolve()); | 886 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("b", 82)->Resolve()); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 944 EXPECT_EQ(OK, CreateRequest(hostname, 75)->ResolveFromCache()); | 944 EXPECT_EQ(OK, CreateRequest(hostname, 75)->ResolveFromCache()); |
| 945 | 945 |
| 946 // Ok good. Now make sure that if we ask to bypass the cache, it can no | 946 // Ok good. Now make sure that if we ask to bypass the cache, it can no |
| 947 // longer service the request synchronously. | 947 // longer service the request synchronously. |
| 948 HostResolver::RequestInfo info(HostPortPair(hostname, 71)); | 948 HostResolver::RequestInfo info(HostPortPair(hostname, 71)); |
| 949 info.set_allow_cached_response(false); | 949 info.set_allow_cached_response(false); |
| 950 EXPECT_EQ(ERR_IO_PENDING, | 950 EXPECT_EQ(ERR_IO_PENDING, |
| 951 CreateRequest(info, DEFAULT_PRIORITY)->Resolve()); | 951 CreateRequest(info, DEFAULT_PRIORITY)->Resolve()); |
| 952 } else if (71 == req->info().port()) { | 952 } else if (71 == req->info().port()) { |
| 953 // Test is done. | 953 // Test is done. |
| 954 base::MessageLoop::current()->Quit(); | 954 base::MessageLoop::current()->QuitWhenIdle(); |
| 955 } else { | 955 } else { |
| 956 FAIL() << "Unexpected request"; | 956 FAIL() << "Unexpected request"; |
| 957 } | 957 } |
| 958 } | 958 } |
| 959 }; | 959 }; |
| 960 set_handler(new MyHandler()); | 960 set_handler(new MyHandler()); |
| 961 | 961 |
| 962 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("a", 80)->Resolve()); | 962 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("a", 80)->Resolve()); |
| 963 proc_->SignalMultiple(3u); // Only need two, but be generous. | 963 proc_->SignalMultiple(3u); // Only need two, but be generous. |
| 964 | 964 |
| (...skipping 1204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2169 | 2169 |
| 2170 EXPECT_EQ(OK, requests_[0]->WaitForResult()); | 2170 EXPECT_EQ(OK, requests_[0]->WaitForResult()); |
| 2171 EXPECT_TRUE(requests_[0]->HasOneAddress("192.168.0.1", 80)); | 2171 EXPECT_TRUE(requests_[0]->HasOneAddress("192.168.0.1", 80)); |
| 2172 EXPECT_EQ(OK, requests_[1]->WaitForResult()); | 2172 EXPECT_EQ(OK, requests_[1]->WaitForResult()); |
| 2173 EXPECT_TRUE(requests_[1]->HasOneAddress("192.168.0.2", 80)); | 2173 EXPECT_TRUE(requests_[1]->HasOneAddress("192.168.0.2", 80)); |
| 2174 EXPECT_EQ(OK, requests_[2]->WaitForResult()); | 2174 EXPECT_EQ(OK, requests_[2]->WaitForResult()); |
| 2175 EXPECT_TRUE(requests_[2]->HasOneAddress("192.168.0.3", 80)); | 2175 EXPECT_TRUE(requests_[2]->HasOneAddress("192.168.0.3", 80)); |
| 2176 } | 2176 } |
| 2177 | 2177 |
| 2178 } // namespace net | 2178 } // namespace net |
| OLD | NEW |