Home | History | Annotate | Download | only in websocket_experiment
      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:
     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