Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/proxy/proxy_resolver_v8_tracing.h" | 5 #include "net/proxy/proxy_resolver_v8_tracing.h" |
| 6 | 6 |
| 7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
| 8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
| 9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| (...skipping 743 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 754 BlockableHostResolver() | 754 BlockableHostResolver() |
| 755 : num_cancelled_requests_(0), waiting_for_resolve_(false) {} | 755 : num_cancelled_requests_(0), waiting_for_resolve_(false) {} |
| 756 | 756 |
| 757 virtual int Resolve(const RequestInfo& info, | 757 virtual int Resolve(const RequestInfo& info, |
| 758 AddressList* addresses, | 758 AddressList* addresses, |
| 759 const CompletionCallback& callback, | 759 const CompletionCallback& callback, |
| 760 RequestHandle* out_req, | 760 RequestHandle* out_req, |
| 761 const BoundNetLog& net_log) OVERRIDE { | 761 const BoundNetLog& net_log) OVERRIDE { |
| 762 EXPECT_FALSE(callback.is_null()); | 762 EXPECT_FALSE(callback.is_null()); |
| 763 EXPECT_TRUE(out_req); | 763 EXPECT_TRUE(out_req); |
| 764 *out_req = reinterpret_cast<RequestHandle*>(1); // Magic value. | |
| 765 | 764 |
| 766 if (!action_.is_null()) | 765 if (!action_.is_null()) |
| 767 action_.Run(); | 766 action_.Run(); |
| 768 | 767 |
| 769 // Indicate to the caller that a request was received. | 768 // Indicate to the caller that a request was received. |
| 770 EXPECT_TRUE(waiting_for_resolve_); | 769 EXPECT_TRUE(waiting_for_resolve_); |
| 771 MessageLoop::current()->Quit(); | 770 MessageLoop::current()->Quit(); |
| 772 | 771 |
| 772 // This line is intentionally after action_.Run(), since one of the | |
| 773 // tests does a cancellation inside of Resolve(), and it is more | |
| 774 // interesting if *out_req hasn't been written yet at that point. | |
| 775 *out_req = reinterpret_cast<RequestHandle*>(1); // Magic value. | |
| 776 | |
| 773 // Return ERR_IO_PENDING as this request will NEVER be completed. | 777 // Return ERR_IO_PENDING as this request will NEVER be completed. |
| 774 // Expectation is for the caller to later cancel the request. | 778 // Expectation is for the caller to later cancel the request. |
| 775 return ERR_IO_PENDING; | 779 return ERR_IO_PENDING; |
| 776 } | 780 } |
| 777 | 781 |
| 778 virtual int ResolveFromCache(const RequestInfo& info, | 782 virtual int ResolveFromCache(const RequestInfo& info, |
| 779 AddressList* addresses, | 783 AddressList* addresses, |
| 780 const BoundNetLog& net_log) OVERRIDE { | 784 const BoundNetLog& net_log) OVERRIDE { |
| 781 NOTREACHED(); | 785 NOTREACHED(); |
| 782 return ERR_DNS_CACHE_MISS; | 786 return ERR_DNS_CACHE_MISS; |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 842 resolver.CancelRequest(request1); | 846 resolver.CancelRequest(request1); |
| 843 resolver.CancelRequest(request2); | 847 resolver.CancelRequest(request2); |
| 844 | 848 |
| 845 EXPECT_EQ(2, host_resolver.num_cancelled_requests()); | 849 EXPECT_EQ(2, host_resolver.num_cancelled_requests()); |
| 846 | 850 |
| 847 // After leaving this scope, the ProxyResolver is destroyed. | 851 // After leaving this scope, the ProxyResolver is destroyed. |
| 848 // This should not cause any problems, as the outstanding work | 852 // This should not cause any problems, as the outstanding work |
| 849 // should have been cancelled. | 853 // should have been cancelled. |
| 850 } | 854 } |
| 851 | 855 |
| 856 void CancelRequestAndPause(ProxyResolverV8Tracing* resolver, | |
| 857 ProxyResolver::RequestHandle request) { | |
| 858 resolver->CancelRequest(request); | |
| 859 | |
| 860 // Sleep for a little bit. This makes it more likely for the worker | |
| 861 // thread to have returned from its call, and serves as a regression | |
| 862 // test for http://crbug.com/173373. | |
| 863 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(30)); | |
| 864 } | |
| 865 | |
| 852 // In non-blocking mode, the worker thread actually does block for | 866 // In non-blocking mode, the worker thread actually does block for |
| 853 // a short time to see if the result is in the DNS cache. Test | 867 // a short time to see if the result is in the DNS cache. Test |
| 854 // cancellation while the worker thread is waiting on this event. | 868 // cancellation while the worker thread is waiting on this event. |
| 855 TEST_F(ProxyResolverV8TracingTest, CancelWhileBlockedInNonBlockingDns) { | 869 TEST_F(ProxyResolverV8TracingTest, CancelWhileBlockedInNonBlockingDns) { |
|
mmenke
2013/01/31 21:11:23
Hmm...The purpose of this test was to cancel befor
eroman
2013/01/31 21:29:49
I think the test works as is (it is testing two im
| |
| 856 BlockableHostResolver host_resolver; | 870 BlockableHostResolver host_resolver; |
| 857 MockErrorObserver* error_observer = new MockErrorObserver; | 871 MockErrorObserver* error_observer = new MockErrorObserver; |
| 858 ProxyResolverV8Tracing resolver(&host_resolver, error_observer, NULL); | 872 ProxyResolverV8Tracing resolver(&host_resolver, error_observer, NULL); |
| 859 | 873 |
| 860 InitResolver(&resolver, "dns.js"); | 874 InitResolver(&resolver, "dns.js"); |
| 861 | 875 |
| 862 ProxyInfo proxy_info; | 876 ProxyInfo proxy_info; |
| 863 ProxyResolver::RequestHandle request; | 877 ProxyResolver::RequestHandle request; |
| 864 | 878 |
| 865 int rv = resolver.GetProxyForURL( | 879 int rv = resolver.GetProxyForURL( |
| 866 GURL("http://foo/"), &proxy_info, | 880 GURL("http://foo/"), &proxy_info, |
| 867 base::Bind(&CrashCallback), &request, BoundNetLog()); | 881 base::Bind(&CrashCallback), &request, BoundNetLog()); |
| 868 | 882 |
| 869 EXPECT_EQ(ERR_IO_PENDING, rv); | 883 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 870 | 884 |
| 871 host_resolver.SetAction(base::Bind(&ProxyResolverV8Tracing::CancelRequest, | 885 host_resolver.SetAction( |
| 872 base::Unretained(&resolver), request)); | 886 base::Bind(CancelRequestAndPause, &resolver, request)); |
| 873 | 887 |
| 874 host_resolver.WaitUntilRequestIsReceived(); | 888 host_resolver.WaitUntilRequestIsReceived(); |
| 875 | 889 |
| 876 // At this point the host resolver ran Resolve(), and should have cancelled | 890 // At this point the host resolver ran Resolve(), and should have cancelled |
| 877 // the request. | 891 // the request. |
| 878 | 892 |
| 879 EXPECT_EQ(1, host_resolver.num_cancelled_requests()); | 893 EXPECT_EQ(1, host_resolver.num_cancelled_requests()); |
| 880 } | 894 } |
| 881 | 895 |
| 882 // Cancel the request while there is a pending DNS request, however before | 896 // Cancel the request while there is a pending DNS request, however before |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 919 | 933 |
| 920 host_resolver.WaitUntilRequestIsReceived(); | 934 host_resolver.WaitUntilRequestIsReceived(); |
| 921 | 935 |
| 922 resolver.CancelSetPacScript(); | 936 resolver.CancelSetPacScript(); |
| 923 EXPECT_EQ(1, host_resolver.num_cancelled_requests()); | 937 EXPECT_EQ(1, host_resolver.num_cancelled_requests()); |
| 924 } | 938 } |
| 925 | 939 |
| 926 } // namespace | 940 } // namespace |
| 927 | 941 |
| 928 } // namespace net | 942 } // namespace net |
| OLD | NEW |