• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 // Run WebSocket live experiment to collect metrics about WebSocket
6 // availability in the real Internet.
7 // It tries to open WebSocket connection to websocket-experiment.chromium.org,
8 // send/receive some static content over the connection, and see how it works
9 // well.
10 // It must be started only if the user permits metrics reporting with the
11 // checkbox in the prefs.
12 // For more detail what the experiment is, see websocket_experiment_task.h.
13 
14 #ifndef CHROME_BROWSER_NET_WEBSOCKET_EXPERIMENT_WEBSOCKET_EXPERIMENT_RUNNER_H_
15 #define CHROME_BROWSER_NET_WEBSOCKET_EXPERIMENT_WEBSOCKET_EXPERIMENT_RUNNER_H_
16 #pragma once
17 
18 #include "base/basictypes.h"
19 #include "base/memory/linked_ptr.h"
20 #include "base/memory/ref_counted.h"
21 #include "base/memory/scoped_ptr.h"
22 #include "chrome/browser/net/websocket_experiment/websocket_experiment_task.h"
23 #include "net/base/completion_callback.h"
24 
25 namespace chrome_browser_net_websocket_experiment {
26 
27 class WebSocketExperimentRunner
28     : public base::RefCountedThreadSafe<WebSocketExperimentRunner> {
29  public:
30   class Config {
31    public:
Config()32     Config()
33         : initial_delay_ms(0),
34           next_delay_ms(0) {}
35 
36     int64 initial_delay_ms;
37     int64 next_delay_ms;
38     WebSocketExperimentTask::Config ws_config[6];
39   };
40   static void Start();
41   static void Stop();
42 
43   void Run();
44   void Cancel();
45 
46  private:
47   enum State {
48     STATE_NONE,
49     STATE_IDLE,
50     STATE_RUN_WS,
51     STATE_RUN_WSS,
52     STATE_RUN_WS_NODEFAULT_PORT,
53     STATE_RUN_WS_DRAFT75,
54     STATE_RUN_WSS_DRAFT75,
55     STATE_RUN_WS_NODEFAULT_PORT_DRAFT75,
56     NUM_STATES,
57   };
58   WebSocketExperimentRunner();
59   virtual ~WebSocketExperimentRunner();
60   friend class base::RefCountedThreadSafe<WebSocketExperimentRunner>;
61 
62   void InitConfig();
63   void DoLoop();
64   void OnTaskCompleted(int result);
65   void UpdateTaskResultHistogram(const WebSocketExperimentTask* task);
66 
67   Config config_;
68   State next_state_;
69   State task_state_;
70   scoped_ptr<WebSocketExperimentTask> task_;
71   net::CompletionCallbackImpl<WebSocketExperimentRunner> task_callback_;
72 
73   DISALLOW_COPY_AND_ASSIGN(WebSocketExperimentRunner);
74 };
75 
76 }  // namespace chrome_browser_net_websocket_experiment
77 
78 #endif  // CHROME_BROWSER_NET_WEBSOCKET_EXPERIMENT_WEBSOCKET_EXPERIMENT_RUNNER_H_
79