diff options
Diffstat (limited to 'net/url_request/request_tracker.h')
-rw-r--r-- | net/url_request/request_tracker.h | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/net/url_request/request_tracker.h b/net/url_request/request_tracker.h index f4e2425..abfdf4b 100644 --- a/net/url_request/request_tracker.h +++ b/net/url_request/request_tracker.h @@ -38,6 +38,7 @@ class RequestTracker { }; typedef std::vector<RecentRequestInfo> RecentRequestInfoList; + typedef bool (*RecentRequestsFilterFunc)(const GURL&); // The maximum number of entries for |graveyard_|. static const size_t kMaxGraveyardSize; @@ -45,7 +46,7 @@ class RequestTracker { // The maximum size of URLs to stuff into RecentRequestInfo. static const size_t kMaxGraveyardURLSize; - RequestTracker() : next_graveyard_index_(0) {} + RequestTracker() : next_graveyard_index_(0), graveyard_filter_func_(NULL) {} ~RequestTracker() {} // Returns a list of Requests that are alive. @@ -82,6 +83,7 @@ class RequestTracker { void Add(Request* request) { live_instances_.Append(&request->request_tracker_node_); } + void Remove(Request* request) { // Remove from |live_instances_|. request->request_tracker_node_.RemoveFromList(); @@ -92,11 +94,28 @@ class RequestTracker { const std::string& spec = info.original_url.possibly_invalid_spec(); if (spec.size() > kMaxGraveyardURLSize) info.original_url = GURL(spec.substr(0, kMaxGraveyardURLSize)); - // Add into |graveyard_|. - InsertIntoGraveyard(info); + + if (ShouldInsertIntoGraveyard(info)) { + // Add into |graveyard_|. + InsertIntoGraveyard(info); + } + } + + // This function lets you exclude requests from being saved to the graveyard. + // The graveyard is a circular buffer of the most recently completed + // requests. Pass NULL turn off filtering. Otherwise pass in a function + // returns false to exclude requests, true otherwise. + void SetGraveyardFilter(RecentRequestsFilterFunc filter_func) { + graveyard_filter_func_ = filter_func; } private: + bool ShouldInsertIntoGraveyard(const RecentRequestInfo& info) { + if (!graveyard_filter_func_) + return true; + return graveyard_filter_func_(info.original_url); + } + void InsertIntoGraveyard(const RecentRequestInfo& info) { if (graveyard_.size() < kMaxGraveyardSize) { // Still growing to maximum capacity. @@ -113,6 +132,7 @@ class RequestTracker { size_t next_graveyard_index_; RecentRequestInfoList graveyard_; + RecentRequestsFilterFunc graveyard_filter_func_; }; template<typename Request> |