Index: chrome/browser/net/network_stats.h |
=================================================================== |
--- chrome/browser/net/network_stats.h (revision 132599) |
+++ chrome/browser/net/network_stats.h (working copy) |
@@ -21,6 +21,7 @@ |
#include "net/base/io_buffer.h" |
#include "net/base/ip_endpoint.h" |
#include "net/base/test_data_stream.h" |
+#include "net/proxy/proxy_info.h" |
#include "net/socket/socket.h" |
namespace chrome_browser_net { |
@@ -100,6 +101,7 @@ |
bool Start(net::HostResolver* host_resolver, |
const net::HostPortPair& server, |
HistogramPortSelector histogram_port, |
+ bool has_no_proxy_server, |
uint32 bytes_to_send, |
const net::CompletionCallback& callback); |
@@ -114,6 +116,7 @@ |
// |finished_callback| is mainly useful for unittests. |
void Initialize(uint32 bytes_to_send, |
HistogramPortSelector histogram_port, |
+ bool has_no_proxy_server, |
const net::CompletionCallback& finished_callback); |
// Called after host is resolved. UDPStatsClient and TCPStatsClient implement |
@@ -213,21 +216,29 @@ |
// Returns the histogram names for collecting network connectivity stats. |
// This is called by RecordHistograms. It sets the histogram names in |
- // |rtt_histogram_name| and |status_histogram_name|. |
+ // |rtt_histogram_name| and |status_histogram_name|. It always returns |
+ // "NetConnectivity.<protocol>.Status.<port>.<load_size>" as histogram name |
+ // for status histogram in |status_histogram_name|. |
// If |result| equals to net::OK, it returns |
// "NetConnectivity.<protocol>.Success.<port>.<load_size>.RTT" as histogram |
- // name for RTT histogram and |
- // "NetConnectivity.<protocol>.Status.<port>.<load_size>" as histogram name |
- // for status histogram. |protocol| argument sets <protocol> in the histogram |
- // name. It would be either TCP or UDP. <port> is the string representation of |
- // |histogram_port|. |load_size| argument determines <load_size> in the |
- // histogram name. It would be either 100B or 1K. |
+ // name in |rtt_histogram_name|. If |has_no_proxy_server| is true, it returns |
+ // "NetConnectivity.<protocol>.NoProxy.Success.<port>.<load_size>.RTT" as |
+ // histogram name for RTT histogram in |rtt_no_proxy_histogram_name| and |
+ // "NetConnectivity.<protocol>.NoProxy.Status.<port>.<load_size>" as histogram |
+ // name for status histogram in |status_no_proxy_histogram_name|. |
+ // |protocol| argument sets <protocol> in the histogram name. It would be |
+ // either TCP or UDP. <port> is the string representation of |histogram_port|. |
+ // |load_size| argument determines <load_size> in the histogram name. It would |
+ // be either 100B or 1K. |
static void GetHistogramNames(const ProtocolValue& protocol, |
HistogramPortSelector histogram_port, |
+ bool has_no_proxy_server, |
uint32 load_size, |
int result, |
std::string* rtt_histogram_name, |
- std::string* status_histogram_name); |
+ std::string* rtt_no_proxy_histogram_name, |
+ std::string* status_histogram_name, |
+ std::string* status_no_proxy_histogram_name); |
// The socket handle for this session. |
scoped_ptr<net::Socket> socket_; |
@@ -254,6 +265,9 @@ |
// connectivity. |
HistogramPortSelector histogram_port_; |
+ // |has_no_proxy_server_| specifies if there is a proxy server or not. |
+ bool has_no_proxy_server_; |
+ |
// HostResolver fills out the |addresses_| after host resolution is completed. |
net::AddressList addresses_; |
@@ -324,6 +338,40 @@ |
void OnConnectComplete(int result); |
}; |
+class ProxyClient { |
+ public: |
+ // Constructs a ProxyClient object that resolves if access to |
+ // network_stats_server goes through a proxy server or not. |
+ ProxyClient(const std::string& network_stats_server, |
+ NetworkStats::HistogramPortSelector histogram_port, |
+ IOThread* io_thread); |
+ virtual ~ProxyClient(); |
+ |
+ // This method uses system ProxyService to resolve the proxy for the given |
+ // |network_stats_server| and |histogram_port|. |
+ void ResolveProxy(); |
+ |
+ // Collects the network connectivity stats for UDP and TCP protocols. |
+ void OnResolveProxyComplete(int result); |
+ |
+ private: |
+ // |network_stats_server_| specifies the TCP/UDP echo server name. |
+ std::string network_stats_server_; |
+ |
+ // |histogram_port_| specifies the port for which we are testing the network |
+ // connectivity. |
+ NetworkStats::HistogramPortSelector histogram_port_; |
+ |
+ // |proxy_info_| holds proxy information returned by ResolveProxy. |
+ net::ProxyInfo proxy_info_; |
+ |
+ // The IOThread for accessing global HostResolver to resolve |
+ // network_stats_server_ host and for accessing global system ProxyService. |
+ // |io_thread_| is accessed on IO thread and it is safe to access it on IO |
+ // thread. |
+ IOThread* io_thread_; |
+}; |
+ |
// This collects the network connectivity stats for UDP and TCP for small |
// percentage of users who are participating in the experiment. All users must |
// have enabled "UMA upload". This method gets called only if UMA upload to the |