Index: chrome/browser/net/passive_log_collector.h |
=================================================================== |
--- chrome/browser/net/passive_log_collector.h (revision 0) |
+++ chrome/browser/net/passive_log_collector.h (revision 0) |
@@ -0,0 +1,138 @@ |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CHROME_BROWSER_NET_PASSIVE_LOG_COLLECTOR_H_ |
+#define CHROME_BROWSER_NET_PASSIVE_LOG_COLLECTOR_H_ |
+ |
+#include <vector> |
+ |
+#include "base/hash_tables.h" |
+#include "chrome/browser/net/chrome_net_log.h" |
+#include "net/base/net_log.h" |
+ |
+class PassiveLogCollector : public ChromeNetLog::Observer { |
+ public: |
+ struct RequestInfo { |
+ RequestInfo() : num_entries_truncated(0) {} |
+ std::string url; |
+ std::vector<net::NetLog::Entry> entries; |
+ size_t num_entries_truncated; |
+ }; |
+ |
+ typedef std::vector<RequestInfo> RequestInfoList; |
+ |
+ // This class stores and manages the passively logged information for |
+ // URLRequests/SocketStreams/ConnectJobs. |
+ class RequestTrackerBase { |
+ public: |
+ explicit RequestTrackerBase(size_t max_graveyard_size); |
+ |
+ void OnAddEntry(const net::NetLog::Entry& entry); |
+ |
+ RequestInfoList GetLiveRequests() const; |
+ void ClearRecentlyDeceased(); |
+ RequestInfoList GetRecentlyDeceased() const; |
+ void SetUnbounded(bool unbounded); |
+ |
+ bool IsUnbounded() const { return is_unbounded_; } |
+ |
+ void Clear(); |
+ |
+ const RequestInfo* GetRequestInfoFromGraveyard(int id) const; |
+ |
+ protected: |
+ enum Action { |
+ ACTION_NONE, |
+ ACTION_DELETE, |
+ ACTION_MOVE_TO_GRAVEYARD, |
+ }; |
+ |
+ // Updates |out_info| with the information from |entry|. Returns an action |
+ // to perform for this map entry on completion. |
+ virtual Action DoAddEntry(const net::NetLog::Entry& entry, |
+ RequestInfo* out_info) = 0; |
+ |
+ bool is_unbounded() const { return is_unbounded_; } |
+ |
+ private: |
+ typedef base::hash_map<int, RequestInfo> SourceIDToInfoMap; |
+ |
+ bool HandleNotificationOfConnectJobID(const net::NetLog::Entry& entry, |
+ RequestInfo* live_entry); |
+ |
+ void RemoveFromLiveRequests(const RequestInfo& info); |
+ void InsertIntoGraveyard(const RequestInfo& info); |
+ |
+ SourceIDToInfoMap live_requests_; |
+ size_t max_graveyard_size_; |
+ size_t next_graveyard_index_; |
+ RequestInfoList graveyard_; |
+ bool is_unbounded_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(RequestTrackerBase); |
+ }; |
+ |
+ // Specialization of RequestTrackerBase for handling ConnectJobs. |
+ class ConnectJobTracker : public RequestTrackerBase { |
+ public: |
+ static const size_t kMaxGraveyardSize; |
+ |
+ ConnectJobTracker(); |
+ |
+ protected: |
+ virtual Action DoAddEntry(const net::NetLog::Entry& entry, |
+ RequestInfo* out_info); |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(ConnectJobTracker); |
+ }; |
+ |
+ // Specialization of RequestTrackerBase for handling URLRequest/SocketStream. |
+ class RequestTracker : public RequestTrackerBase { |
+ public: |
+ static const size_t kMaxGraveyardSize; |
+ static const size_t kMaxGraveyardURLSize; |
+ |
+ explicit RequestTracker(ConnectJobTracker* connect_job_tracker); |
+ |
+ protected: |
+ virtual Action DoAddEntry(const net::NetLog::Entry& entry, |
+ RequestInfo* out_info); |
+ |
+ private: |
+ // Searches through |connect_job_tracker_| for information on the |
+ // ConnectJob specified in |entry|, and appends it to |live_entry|. |
+ void AddConnectJobInfo(const net::NetLog::Entry& entry, |
+ RequestInfo* live_entry); |
+ |
+ ConnectJobTracker* connect_job_tracker_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(RequestTracker); |
+ }; |
+ |
+ PassiveLogCollector(); |
+ ~PassiveLogCollector(); |
+ |
+ // Observer implementation: |
+ virtual void OnAddEntry(const net::NetLog::Entry& entry); |
+ |
+ // Clears all of the passively logged data. |
+ void Clear(); |
+ |
+ RequestTracker* url_request_tracker() { |
+ return &url_request_tracker_; |
+ } |
+ |
+ RequestTracker* socket_stream_tracker() { |
+ return &socket_stream_tracker_; |
+ } |
+ |
+ private: |
+ ConnectJobTracker connect_job_tracker_; |
+ RequestTracker url_request_tracker_; |
+ RequestTracker socket_stream_tracker_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(PassiveLogCollector); |
+}; |
+ |
+#endif // CHROME_BROWSER_NET_PASSIVE_LOG_COLLECTOR_H_ |
Property changes on: chrome\browser\net\passive_log_collector.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |