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 15 matching lines...) Expand all Loading... |
26 #include "ios/web/public/cert_store.h" | 26 #include "ios/web/public/cert_store.h" |
27 #include "ios/web/public/certificate_policy_cache.h" | 27 #include "ios/web/public/certificate_policy_cache.h" |
28 #include "ios/web/public/ssl_status.h" | 28 #include "ios/web/public/ssl_status.h" |
29 #include "ios/web/public/url_util.h" | 29 #include "ios/web/public/url_util.h" |
30 #include "ios/web/public/web_thread.h" | 30 #include "ios/web/public/web_thread.h" |
31 #import "net/base/mac/url_conversions.h" | 31 #import "net/base/mac/url_conversions.h" |
32 #include "net/base/net_errors.h" | 32 #include "net/base/net_errors.h" |
33 #include "net/http/http_response_headers.h" | 33 #include "net/http/http_response_headers.h" |
34 #include "net/url_request/url_request.h" | 34 #include "net/url_request/url_request.h" |
35 | 35 |
| 36 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 37 #error "This file requires ARC support." |
| 38 #endif |
| 39 |
36 namespace { | 40 namespace { |
37 | 41 |
38 struct EqualNSStrings { | 42 struct EqualNSStrings { |
39 bool operator()(const base::scoped_nsobject<NSString>& s1, | 43 bool operator()(const base::scoped_nsobject<NSString>& s1, |
40 const base::scoped_nsobject<NSString>& s2) const { | 44 const base::scoped_nsobject<NSString>& s2) const { |
41 // Use a ternary due to the BOOL vs bool type difference. | 45 // Use a ternary due to the BOOL vs bool type difference. |
42 return [s1 isEqualToString:s2] ? true : false; | 46 return [s1 isEqualToString:s2] ? true : false; |
43 } | 47 } |
44 }; | 48 }; |
45 | 49 |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
247 | 251 |
248 - (const net::SSLInfo&)sslInfo { | 252 - (const net::SSLInfo&)sslInfo { |
249 return sslInfo_; | 253 return sslInfo_; |
250 } | 254 } |
251 | 255 |
252 - (const web::SSLStatus&)sslStatus { | 256 - (const web::SSLStatus&)sslStatus { |
253 return status_; | 257 return status_; |
254 } | 258 } |
255 | 259 |
256 - (void)errorCallback:(BOOL)flag { | 260 - (void)errorCallback:(BOOL)flag { |
257 base::scoped_nsobject<CRWSSLCarrier> scoped([self retain]); | 261 base::scoped_nsobject<CRWSSLCarrier> scoped(self); |
258 web::WebThread::PostTask(web::WebThread::IO, FROM_HERE, | 262 web::WebThread::PostTask(web::WebThread::IO, FROM_HERE, |
259 base::Bind(&web::RequestTrackerImpl::ErrorCallback, | 263 base::Bind(&web::RequestTrackerImpl::ErrorCallback, |
260 tracker_, scoped, flag)); | 264 tracker_, scoped, flag)); |
261 } | 265 } |
262 | 266 |
263 - (void)buildSSLStatus { | 267 - (void)buildSSLStatus { |
264 DCHECK_CURRENTLY_ON(web::WebThread::IO); | 268 DCHECK_CURRENTLY_ON(web::WebThread::IO); |
265 if (!sslInfo_.is_valid()) | 269 if (!sslInfo_.is_valid()) |
266 return; | 270 return; |
267 | 271 |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 // Take care of the IO-thread init. | 365 // Take care of the IO-thread init. |
362 web::WebThread::PostTask( | 366 web::WebThread::PostTask( |
363 web::WebThread::IO, FROM_HERE, | 367 web::WebThread::IO, FROM_HERE, |
364 base::Bind(&RequestTrackerImpl::InitOnIOThread, tracker, policy_cache)); | 368 base::Bind(&RequestTrackerImpl::InitOnIOThread, tracker, policy_cache)); |
365 RegisterTracker(tracker.get(), request_group_id); | 369 RegisterTracker(tracker.get(), request_group_id); |
366 return tracker; | 370 return tracker; |
367 } | 371 } |
368 | 372 |
369 void RequestTrackerImpl::StartPageLoad(const GURL& url, id user_info) { | 373 void RequestTrackerImpl::StartPageLoad(const GURL& url, id user_info) { |
370 DCHECK_CURRENTLY_ON(web::WebThread::UI); | 374 DCHECK_CURRENTLY_ON(web::WebThread::UI); |
371 base::scoped_nsobject<id> scoped_user_info([user_info retain]); | 375 base::scoped_nsobject<id> scoped_user_info(user_info); |
372 web::WebThread::PostTask( | 376 web::WebThread::PostTask( |
373 web::WebThread::IO, FROM_HERE, | 377 web::WebThread::IO, FROM_HERE, |
374 base::Bind(&RequestTrackerImpl::TrimToURL, this, url, scoped_user_info)); | 378 base::Bind(&RequestTrackerImpl::TrimToURL, this, url, scoped_user_info)); |
375 } | 379 } |
376 | 380 |
377 void RequestTrackerImpl::FinishPageLoad(const GURL& url, bool load_success) { | 381 void RequestTrackerImpl::FinishPageLoad(const GURL& url, bool load_success) { |
378 DCHECK_CURRENTLY_ON(web::WebThread::UI); | 382 DCHECK_CURRENTLY_ON(web::WebThread::UI); |
379 web::WebThread::PostTask( | 383 web::WebThread::PostTask( |
380 web::WebThread::IO, FROM_HERE, | 384 web::WebThread::IO, FROM_HERE, |
381 base::Bind(&RequestTrackerImpl::StopPageLoad, this, url, load_success)); | 385 base::Bind(&RequestTrackerImpl::StopPageLoad, this, url, load_success)); |
(...skipping 838 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1220 // about those anymore. Cancel the request. | 1224 // about those anymore. Cancel the request. |
1221 if ((*it)->ssl_judgment == CertPolicy::UNKNOWN) | 1225 if ((*it)->ssl_judgment == CertPolicy::UNKNOWN) |
1222 CancelRequestForCounts(*it); | 1226 CancelRequestForCounts(*it); |
1223 counts_by_request_.erase((*it)->request); | 1227 counts_by_request_.erase((*it)->request); |
1224 } | 1228 } |
1225 it = counts_.erase(it); | 1229 it = counts_.erase(it); |
1226 } | 1230 } |
1227 | 1231 |
1228 has_mixed_content_ = new_url_has_mixed_content; | 1232 has_mixed_content_ = new_url_has_mixed_content; |
1229 page_url_ = url; | 1233 page_url_ = url; |
1230 user_info_.reset([user_info retain]); | 1234 user_info_.reset(user_info); |
1231 estimate_start_index_ = 0; | 1235 estimate_start_index_ = 0; |
1232 is_loading_ = true; | 1236 is_loading_ = true; |
1233 previous_estimate_ = 0.0f; | 1237 previous_estimate_ = 0.0f; |
1234 new_estimate_round_ = true; | 1238 new_estimate_round_ = true; |
1235 ReevaluateCallbacksForAllCounts(); | 1239 ReevaluateCallbacksForAllCounts(); |
1236 Notify(); | 1240 Notify(); |
1237 } | 1241 } |
1238 | 1242 |
1239 void RequestTrackerImpl::StopPageLoad(const GURL& url, bool load_success) { | 1243 void RequestTrackerImpl::StopPageLoad(const GURL& url, bool load_success) { |
1240 DCHECK_CURRENTLY_ON(web::WebThread::IO); | 1244 DCHECK_CURRENTLY_ON(web::WebThread::IO); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1305 })); | 1309 })); |
1306 } | 1310 } |
1307 } | 1311 } |
1308 | 1312 |
1309 void RequestTrackerImpl::SetCertificatePolicyCacheForTest( | 1313 void RequestTrackerImpl::SetCertificatePolicyCacheForTest( |
1310 web::CertificatePolicyCache* cache) { | 1314 web::CertificatePolicyCache* cache) { |
1311 policy_cache_ = cache; | 1315 policy_cache_ = cache; |
1312 } | 1316 } |
1313 | 1317 |
1314 } // namespace web | 1318 } // namespace web |
OLD | NEW |