Home | History | Annotate | Download | only in debugger
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_DEBUGGER_DEVTOOLS_NETLOG_OBSERVER_H_
      6 #define CHROME_BROWSER_DEBUGGER_DEVTOOLS_NETLOG_OBSERVER_H_
      7 #pragma once
      8 
      9 #include "base/hash_tables.h"
     10 #include "base/memory/ref_counted.h"
     11 #include "chrome/browser/net/chrome_net_log.h"
     12 #include "webkit/glue/resource_loader_bridge.h"
     13 
     14 namespace net {
     15 class URLRequest;
     16 }  // namespace net
     17 
     18 class IOThread;
     19 struct ResourceResponse;
     20 
     21 // DevToolsNetLogObserver watches the NetLog event stream and collects the
     22 // stuff that may be of interest to DevTools. Currently, this only includes
     23 // actual HTTP/SPDY headers sent and received over the network.
     24 //
     25 // As DevToolsNetLogObserver shares live data with objects that live on the
     26 // IO Thread, it must also reside on the IO Thread.  Only OnAddEntry can be
     27 // called from other threads.
     28 class DevToolsNetLogObserver: public ChromeNetLog::ThreadSafeObserver {
     29   typedef webkit_glue::ResourceDevToolsInfo ResourceInfo;
     30 
     31  public:
     32   // ThreadSafeObserver implementation:
     33   virtual void OnAddEntry(net::NetLog::EventType type,
     34                           const base::TimeTicks& time,
     35                           const net::NetLog::Source& source,
     36                           net::NetLog::EventPhase phase,
     37                           net::NetLog::EventParameters* params);
     38 
     39   void OnAddURLRequestEntry(net::NetLog::EventType type,
     40                             const base::TimeTicks& time,
     41                             const net::NetLog::Source& source,
     42                             net::NetLog::EventPhase phase,
     43                             net::NetLog::EventParameters* params);
     44 
     45   void OnAddHTTPStreamJobEntry(net::NetLog::EventType type,
     46                                const base::TimeTicks& time,
     47                                const net::NetLog::Source& source,
     48                                net::NetLog::EventPhase phase,
     49                                net::NetLog::EventParameters* params);
     50 
     51   void OnAddSocketEntry(net::NetLog::EventType type,
     52                         const base::TimeTicks& time,
     53                         const net::NetLog::Source& source,
     54                         net::NetLog::EventPhase phase,
     55                         net::NetLog::EventParameters* params);
     56 
     57   static void Attach(IOThread* thread);
     58   static void Detach();
     59 
     60   // Must be called on the IO thread. May return NULL if no observers
     61   // are active.
     62   static DevToolsNetLogObserver* GetInstance();
     63   static void PopulateResponseInfo(net::URLRequest*, ResourceResponse*);
     64   static int GetAndResetEncodedDataLength(net::URLRequest* request);
     65 
     66  private:
     67   static DevToolsNetLogObserver* instance_;
     68 
     69   explicit DevToolsNetLogObserver(ChromeNetLog* chrome_net_log);
     70   ~DevToolsNetLogObserver();
     71 
     72   ResourceInfo* GetResourceInfo(uint32 id);
     73 
     74   ChromeNetLog* chrome_net_log_;
     75   typedef base::hash_map<uint32, scoped_refptr<ResourceInfo> > RequestToInfoMap;
     76   typedef base::hash_map<uint32, int> RequestToEncodedDataLengthMap;
     77   typedef base::hash_map<uint32, uint32> HTTPStreamJobToSocketMap;
     78   typedef base::hash_map<uint32, uint32> SocketToRequestMap;
     79   RequestToInfoMap request_to_info_;
     80   RequestToEncodedDataLengthMap request_to_encoded_data_length_;
     81   HTTPStreamJobToSocketMap http_stream_job_to_socket_;
     82   SocketToRequestMap socket_to_request_;
     83 
     84   DISALLOW_COPY_AND_ASSIGN(DevToolsNetLogObserver);
     85 };
     86 
     87 #endif  // CHROME_BROWSER_DEBUGGER_DEVTOOLS_NETLOG_OBSERVER_H_
     88