| // Copyright (c) 2011 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_DEBUGGER_DEVTOOLS_NETLOG_OBSERVER_H_ |
| #define CHROME_BROWSER_DEBUGGER_DEVTOOLS_NETLOG_OBSERVER_H_ |
| #pragma once |
| |
| #include "base/hash_tables.h" |
| #include "base/memory/ref_counted.h" |
| #include "chrome/browser/net/chrome_net_log.h" |
| #include "webkit/glue/resource_loader_bridge.h" |
| |
| namespace net { |
| class URLRequest; |
| } // namespace net |
| |
| class IOThread; |
| struct ResourceResponse; |
| |
| // DevToolsNetLogObserver watches the NetLog event stream and collects the |
| // stuff that may be of interest to DevTools. Currently, this only includes |
| // actual HTTP/SPDY headers sent and received over the network. |
| // |
| // As DevToolsNetLogObserver shares live data with objects that live on the |
| // IO Thread, it must also reside on the IO Thread. Only OnAddEntry can be |
| // called from other threads. |
| class DevToolsNetLogObserver: public ChromeNetLog::ThreadSafeObserver { |
| typedef webkit_glue::ResourceDevToolsInfo ResourceInfo; |
| |
| public: |
| // ThreadSafeObserver implementation: |
| virtual void OnAddEntry(net::NetLog::EventType type, |
| const base::TimeTicks& time, |
| const net::NetLog::Source& source, |
| net::NetLog::EventPhase phase, |
| net::NetLog::EventParameters* params); |
| |
| void OnAddURLRequestEntry(net::NetLog::EventType type, |
| const base::TimeTicks& time, |
| const net::NetLog::Source& source, |
| net::NetLog::EventPhase phase, |
| net::NetLog::EventParameters* params); |
| |
| void OnAddHTTPStreamJobEntry(net::NetLog::EventType type, |
| const base::TimeTicks& time, |
| const net::NetLog::Source& source, |
| net::NetLog::EventPhase phase, |
| net::NetLog::EventParameters* params); |
| |
| void OnAddSocketEntry(net::NetLog::EventType type, |
| const base::TimeTicks& time, |
| const net::NetLog::Source& source, |
| net::NetLog::EventPhase phase, |
| net::NetLog::EventParameters* params); |
| |
| static void Attach(IOThread* thread); |
| static void Detach(); |
| |
| // Must be called on the IO thread. May return NULL if no observers |
| // are active. |
| static DevToolsNetLogObserver* GetInstance(); |
| static void PopulateResponseInfo(net::URLRequest*, ResourceResponse*); |
| static int GetAndResetEncodedDataLength(net::URLRequest* request); |
| |
| private: |
| static DevToolsNetLogObserver* instance_; |
| |
| explicit DevToolsNetLogObserver(ChromeNetLog* chrome_net_log); |
| ~DevToolsNetLogObserver(); |
| |
| ResourceInfo* GetResourceInfo(uint32 id); |
| |
| ChromeNetLog* chrome_net_log_; |
| typedef base::hash_map<uint32, scoped_refptr<ResourceInfo> > RequestToInfoMap; |
| typedef base::hash_map<uint32, int> RequestToEncodedDataLengthMap; |
| typedef base::hash_map<uint32, uint32> HTTPStreamJobToSocketMap; |
| typedef base::hash_map<uint32, uint32> SocketToRequestMap; |
| RequestToInfoMap request_to_info_; |
| RequestToEncodedDataLengthMap request_to_encoded_data_length_; |
| HTTPStreamJobToSocketMap http_stream_job_to_socket_; |
| SocketToRequestMap socket_to_request_; |
| |
| DISALLOW_COPY_AND_ASSIGN(DevToolsNetLogObserver); |
| }; |
| |
| #endif // CHROME_BROWSER_DEBUGGER_DEVTOOLS_NETLOG_OBSERVER_H_ |