| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "ios/web/net/request_tracker_impl.h" | 5 #include "ios/web/net/request_tracker_impl.h" |
| 6 | 6 |
| 7 #include <pthread.h> | 7 #include <pthread.h> |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 | 10 |
| (...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 477 | 477 |
| 478 void RequestTrackerImpl::StartRequest(net::URLRequest* request) { | 478 void RequestTrackerImpl::StartRequest(net::URLRequest* request) { |
| 479 DCHECK_CURRENTLY_ON(web::WebThread::IO); | 479 DCHECK_CURRENTLY_ON(web::WebThread::IO); |
| 480 DCHECK(!counts_by_request_.count(request)); | 480 DCHECK(!counts_by_request_.count(request)); |
| 481 DCHECK_EQ(is_for_static_file_requests_, request->url().SchemeIsFile()); | 481 DCHECK_EQ(is_for_static_file_requests_, request->url().SchemeIsFile()); |
| 482 | 482 |
| 483 bool addedRequest = live_requests_.insert(request).second; | 483 bool addedRequest = live_requests_.insert(request).second; |
| 484 if (!is_for_static_file_requests_ && addedRequest) { | 484 if (!is_for_static_file_requests_ && addedRequest) { |
| 485 NSString* networkActivityKey = GetNetworkActivityKey(); | 485 NSString* networkActivityKey = GetNetworkActivityKey(); |
| 486 web::WebThread::PostTask( | 486 web::WebThread::PostTask( |
| 487 web::WebThread::UI, FROM_HERE, | 487 web::WebThread::UI, FROM_HERE, base::BindBlockArc(^{ |
| 488 base::BindBlock(^{ | |
| 489 [[CRWNetworkActivityIndicatorManager sharedInstance] | 488 [[CRWNetworkActivityIndicatorManager sharedInstance] |
| 490 startNetworkTaskForGroup:networkActivityKey]; | 489 startNetworkTaskForGroup:networkActivityKey]; |
| 491 })); | 490 })); |
| 492 } | 491 } |
| 493 | 492 |
| 494 if (new_estimate_round_) { | 493 if (new_estimate_round_) { |
| 495 // Starting a new estimate round. Ignore the previous requests for the | 494 // Starting a new estimate round. Ignore the previous requests for the |
| 496 // calculation. | 495 // calculation. |
| 497 counts_by_request_.clear(); | 496 counts_by_request_.clear(); |
| 498 estimate_start_index_ = counts_.size(); | 497 estimate_start_index_ = counts_.size(); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 558 } | 557 } |
| 559 } | 558 } |
| 560 | 559 |
| 561 void RequestTrackerImpl::StopRequest(net::URLRequest* request) { | 560 void RequestTrackerImpl::StopRequest(net::URLRequest* request) { |
| 562 DCHECK_CURRENTLY_ON(web::WebThread::IO); | 561 DCHECK_CURRENTLY_ON(web::WebThread::IO); |
| 563 | 562 |
| 564 int removedRequests = live_requests_.erase(request); | 563 int removedRequests = live_requests_.erase(request); |
| 565 if (!is_for_static_file_requests_ && removedRequests > 0) { | 564 if (!is_for_static_file_requests_ && removedRequests > 0) { |
| 566 NSString* networkActivityKey = GetNetworkActivityKey(); | 565 NSString* networkActivityKey = GetNetworkActivityKey(); |
| 567 web::WebThread::PostTask( | 566 web::WebThread::PostTask( |
| 568 web::WebThread::UI, FROM_HERE, | 567 web::WebThread::UI, FROM_HERE, base::BindBlockArc(^{ |
| 569 base::BindBlock(^{ | |
| 570 [[CRWNetworkActivityIndicatorManager sharedInstance] | 568 [[CRWNetworkActivityIndicatorManager sharedInstance] |
| 571 stopNetworkTaskForGroup:networkActivityKey]; | 569 stopNetworkTaskForGroup:networkActivityKey]; |
| 572 })); | 570 })); |
| 573 } | 571 } |
| 574 | 572 |
| 575 if (counts_by_request_.count(request)) { | 573 if (counts_by_request_.count(request)) { |
| 576 StopRedirectedRequest(request); | 574 StopRedirectedRequest(request); |
| 577 Notify(); | 575 Notify(); |
| 578 } | 576 } |
| 579 } | 577 } |
| 580 | 578 |
| 581 void RequestTrackerImpl::StopRedirectedRequest(net::URLRequest* request) { | 579 void RequestTrackerImpl::StopRedirectedRequest(net::URLRequest* request) { |
| 582 DCHECK_CURRENTLY_ON(web::WebThread::IO); | 580 DCHECK_CURRENTLY_ON(web::WebThread::IO); |
| 583 | 581 |
| 584 int removedRequests = live_requests_.erase(request); | 582 int removedRequests = live_requests_.erase(request); |
| 585 if (!is_for_static_file_requests_ && removedRequests > 0) { | 583 if (!is_for_static_file_requests_ && removedRequests > 0) { |
| 586 NSString* networkActivityKey = GetNetworkActivityKey(); | 584 NSString* networkActivityKey = GetNetworkActivityKey(); |
| 587 web::WebThread::PostTask( | 585 web::WebThread::PostTask( |
| 588 web::WebThread::UI, FROM_HERE, | 586 web::WebThread::UI, FROM_HERE, base::BindBlockArc(^{ |
| 589 base::BindBlock(^{ | |
| 590 [[CRWNetworkActivityIndicatorManager sharedInstance] | 587 [[CRWNetworkActivityIndicatorManager sharedInstance] |
| 591 stopNetworkTaskForGroup:networkActivityKey]; | 588 stopNetworkTaskForGroup:networkActivityKey]; |
| 592 })); | 589 })); |
| 593 } | 590 } |
| 594 | 591 |
| 595 if (counts_by_request_.count(request)) { | 592 if (counts_by_request_.count(request)) { |
| 596 TrackerCounts* counts = counts_by_request_[request]; | 593 TrackerCounts* counts = counts_by_request_[request]; |
| 597 DCHECK(!counts->done); | 594 DCHECK(!counts->done); |
| 598 const net::SSLInfo& ssl_info = request->ssl_info(); | 595 const net::SSLInfo& ssl_info = request->ssl_info(); |
| 599 if (ssl_info.is_valid()) | 596 if (ssl_info.is_valid()) |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 741 RequestTrackerImpl* inconstant_t = const_cast<RequestTrackerImpl*>(t); | 738 RequestTrackerImpl* inconstant_t = const_cast<RequestTrackerImpl*>(t); |
| 742 if (web::WebThread::CurrentlyOn(web::WebThread::IO)) { | 739 if (web::WebThread::CurrentlyOn(web::WebThread::IO)) { |
| 743 inconstant_t->Destruct(); | 740 inconstant_t->Destruct(); |
| 744 } else { | 741 } else { |
| 745 // Use BindBlock rather than Bind to avoid creating another scoped_refpter | 742 // Use BindBlock rather than Bind to avoid creating another scoped_refpter |
| 746 // to |this|. |inconstant_t| isn't retained by the block, but since this | 743 // to |this|. |inconstant_t| isn't retained by the block, but since this |
| 747 // method is the mechanism by which all RequestTrackerImpl instances are | 744 // method is the mechanism by which all RequestTrackerImpl instances are |
| 748 // destroyed, the object inconstant_t points to won't be deleted while | 745 // destroyed, the object inconstant_t points to won't be deleted while |
| 749 // the block is executing (and Destruct() itself will do the deleting). | 746 // the block is executing (and Destruct() itself will do the deleting). |
| 750 web::WebThread::PostTask(web::WebThread::IO, FROM_HERE, | 747 web::WebThread::PostTask(web::WebThread::IO, FROM_HERE, |
| 751 base::BindBlock(^{ | 748 base::BindBlockArc(^{ |
| 752 inconstant_t->Destruct(); | 749 inconstant_t->Destruct(); |
| 753 })); | 750 })); |
| 754 } | 751 } |
| 755 } | 752 } |
| 756 | 753 |
| 757 void RequestTrackerImpl::Destruct() { | 754 void RequestTrackerImpl::Destruct() { |
| 758 DCHECK_CURRENTLY_ON(web::WebThread::IO); | 755 DCHECK_CURRENTLY_ON(web::WebThread::IO); |
| 759 DCHECK(is_closing_); | 756 DCHECK(is_closing_); |
| 760 | 757 |
| 761 pthread_once(&g_once_control, &InitializeGlobals); | 758 pthread_once(&g_once_control, &InitializeGlobals); |
| 762 { | 759 { |
| 763 base::AutoLock scoped_lock(*g_trackers_lock); | 760 base::AutoLock scoped_lock(*g_trackers_lock); |
| 764 g_trackers->erase(request_group_id_); | 761 g_trackers->erase(request_group_id_); |
| 765 } | 762 } |
| 766 InvalidateWeakPtrs(); | 763 InvalidateWeakPtrs(); |
| 767 // Delete on the UI thread. | 764 // Delete on the UI thread. |
| 768 web::WebThread::PostTask(web::WebThread::UI, FROM_HERE, base::BindBlock(^{ | 765 web::WebThread::PostTask(web::WebThread::UI, FROM_HERE, base::BindBlockArc(^{ |
| 769 delete this; | 766 delete this; |
| 770 })); | 767 })); |
| 771 } | 768 } |
| 772 | 769 |
| 773 #pragma mark Other private methods | 770 #pragma mark Other private methods |
| 774 | 771 |
| 775 void RequestTrackerImpl::Notify() { | 772 void RequestTrackerImpl::Notify() { |
| 776 DCHECK_CURRENTLY_ON(web::WebThread::IO); | 773 DCHECK_CURRENTLY_ON(web::WebThread::IO); |
| 777 if (is_closing_) | 774 if (is_closing_) |
| 778 return; | 775 return; |
| 779 // Notify() is called asynchronously, it runs later on the same | 776 // Notify() is called asynchronously, it runs later on the same |
| 780 // thread. This is used to collate notifications together, avoiding | 777 // thread. This is used to collate notifications together, avoiding |
| (...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1293 // requests are all canceled by the system shortly after and nothing bad | 1290 // requests are all canceled by the system shortly after and nothing bad |
| 1294 // happens. | 1291 // happens. |
| 1295 for (it = live_requests_.begin(); it != live_requests_.end(); ++it) | 1292 for (it = live_requests_.begin(); it != live_requests_.end(); ++it) |
| 1296 (*it)->Cancel(); | 1293 (*it)->Cancel(); |
| 1297 | 1294 |
| 1298 int removedRequests = live_requests_.size(); | 1295 int removedRequests = live_requests_.size(); |
| 1299 live_requests_.clear(); | 1296 live_requests_.clear(); |
| 1300 if (!is_for_static_file_requests_ && removedRequests > 0) { | 1297 if (!is_for_static_file_requests_ && removedRequests > 0) { |
| 1301 NSString* networkActivityKey = GetNetworkActivityKey(); | 1298 NSString* networkActivityKey = GetNetworkActivityKey(); |
| 1302 web::WebThread::PostTask( | 1299 web::WebThread::PostTask( |
| 1303 web::WebThread::UI, FROM_HERE, | 1300 web::WebThread::UI, FROM_HERE, base::BindBlockArc(^{ |
| 1304 base::BindBlock(^{ | |
| 1305 [[CRWNetworkActivityIndicatorManager sharedInstance] | 1301 [[CRWNetworkActivityIndicatorManager sharedInstance] |
| 1306 clearNetworkTasksForGroup:networkActivityKey]; | 1302 clearNetworkTasksForGroup:networkActivityKey]; |
| 1307 })); | 1303 })); |
| 1308 } | 1304 } |
| 1309 } | 1305 } |
| 1310 | 1306 |
| 1311 void RequestTrackerImpl::SetCertificatePolicyCacheForTest( | 1307 void RequestTrackerImpl::SetCertificatePolicyCacheForTest( |
| 1312 web::CertificatePolicyCache* cache) { | 1308 web::CertificatePolicyCache* cache) { |
| 1313 policy_cache_ = cache; | 1309 policy_cache_ = cache; |
| 1314 } | 1310 } |
| 1315 | 1311 |
| 1316 } // namespace web | 1312 } // namespace web |
| OLD | NEW |