| Index: chrome/browser/net/websocket_experiment/websocket_experiment_runner.cc
|
| diff --git a/chrome/browser/net/websocket_experiment/websocket_experiment_runner.cc b/chrome/browser/net/websocket_experiment/websocket_experiment_runner.cc
|
| deleted file mode 100644
|
| index 421d839365561db59ecaefef2218b19ee32328c1..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/net/websocket_experiment/websocket_experiment_runner.cc
|
| +++ /dev/null
|
| @@ -1,236 +0,0 @@
|
| -// Copyright (c) 2010 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.
|
| -
|
| -#include "chrome/browser/net/websocket_experiment/websocket_experiment_runner.h"
|
| -
|
| -#include "base/command_line.h"
|
| -#include "base/compiler_specific.h"
|
| -#include "base/message_loop.h"
|
| -#include "base/metrics/field_trial.h"
|
| -#include "base/stringprintf.h"
|
| -#include "base/task.h"
|
| -#include "chrome/common/chrome_switches.h"
|
| -#include "content/browser/browser_thread.h"
|
| -#include "net/base/host_resolver.h"
|
| -#include "net/base/net_errors.h"
|
| -#include "net/websockets/websocket.h"
|
| -
|
| -namespace chrome_browser_net_websocket_experiment {
|
| -
|
| -static const char *kExperimentHost = "websocket-experiment.chromium.org";
|
| -static const int kAlternativePort = 61985;
|
| -
|
| -// Hold reference while experiment is running.
|
| -static scoped_refptr<WebSocketExperimentRunner> runner;
|
| -
|
| -/* static */
|
| -void WebSocketExperimentRunner::Start() {
|
| - DCHECK(!runner.get());
|
| -
|
| - // After June 30, 2011 builds, it will always be in default group.
|
| - scoped_refptr<base::FieldTrial> trial(
|
| - new base::FieldTrial(
|
| - "WebSocketExperiment", 1000, "default", 2011, 6, 30));
|
| - int active = trial->AppendGroup("active", 5); // 0.5% in active group.
|
| -
|
| - bool run_experiment = (trial->group() == active);
|
| -#ifndef NDEBUG
|
| - const CommandLine& command_line = *CommandLine::ForCurrentProcess();
|
| - std::string experiment_host = command_line.GetSwitchValueASCII(
|
| - switches::kWebSocketLiveExperimentHost);
|
| - if (!experiment_host.empty())
|
| - run_experiment = true;
|
| -#else
|
| - run_experiment = false;
|
| -#endif
|
| - if (!run_experiment)
|
| - return;
|
| -
|
| - runner = new WebSocketExperimentRunner;
|
| - runner->Run();
|
| -}
|
| -
|
| -/* static */
|
| -void WebSocketExperimentRunner::Stop() {
|
| - if (runner.get())
|
| - runner->Cancel();
|
| - runner = NULL;
|
| -}
|
| -
|
| -WebSocketExperimentRunner::WebSocketExperimentRunner()
|
| - : next_state_(STATE_NONE),
|
| - task_state_(STATE_NONE),
|
| - ALLOW_THIS_IN_INITIALIZER_LIST(
|
| - task_callback_(this, &WebSocketExperimentRunner::OnTaskCompleted)) {
|
| - WebSocketExperimentTask::InitHistogram();
|
| - InitConfig();
|
| -}
|
| -
|
| -WebSocketExperimentRunner::~WebSocketExperimentRunner() {
|
| - DCHECK(!task_.get());
|
| - WebSocketExperimentTask::ReleaseHistogram();
|
| -}
|
| -
|
| -void WebSocketExperimentRunner::Run() {
|
| - DCHECK_EQ(next_state_, STATE_NONE);
|
| - next_state_ = STATE_RUN_WS;
|
| - BrowserThread::PostDelayedTask(
|
| - BrowserThread::IO,
|
| - FROM_HERE,
|
| - NewRunnableMethod(this, &WebSocketExperimentRunner::DoLoop),
|
| - config_.initial_delay_ms);
|
| -}
|
| -
|
| -void WebSocketExperimentRunner::Cancel() {
|
| - next_state_ = STATE_NONE;
|
| - BrowserThread::PostTask(
|
| - BrowserThread::IO,
|
| - FROM_HERE,
|
| - NewRunnableMethod(this, &WebSocketExperimentRunner::DoLoop));
|
| -}
|
| -
|
| -void WebSocketExperimentRunner::InitConfig() {
|
| - config_.initial_delay_ms = 5 * 60 * 1000; // 5 mins
|
| - config_.next_delay_ms = 12 * 60 * 60 * 1000; // 12 hours
|
| -
|
| - std::string experiment_host = kExperimentHost;
|
| -#ifndef NDEBUG
|
| - const CommandLine& command_line = *CommandLine::ForCurrentProcess();
|
| - std::string experiment_host_override = command_line.GetSwitchValueASCII(
|
| - switches::kWebSocketLiveExperimentHost);
|
| - if (!experiment_host_override.empty()) {
|
| - experiment_host = experiment_host_override;
|
| - config_.initial_delay_ms = 5 * 1000; // 5 secs.
|
| - }
|
| -#endif
|
| -
|
| - WebSocketExperimentTask::Config* config;
|
| - WebSocketExperimentTask::Config task_config;
|
| -
|
| - task_config.protocol_version = net::WebSocket::DEFAULT_VERSION;
|
| - config = &config_.ws_config[STATE_RUN_WS - STATE_RUN_WS];
|
| - *config = task_config;
|
| - config->url =
|
| - GURL(base::StringPrintf("ws://%s/live_exp", experiment_host.c_str()));
|
| - config->ws_location =
|
| - base::StringPrintf("ws://%s/live_exp", experiment_host.c_str());
|
| - config->http_url =
|
| - GURL(base::StringPrintf("http://%s/", experiment_host.c_str()));
|
| -
|
| - config = &config_.ws_config[STATE_RUN_WSS - STATE_RUN_WS];
|
| - *config = task_config;
|
| - config->url =
|
| - GURL(base::StringPrintf("wss://%s/live_exp", experiment_host.c_str()));
|
| - config->ws_location =
|
| - base::StringPrintf("wss://%s/live_exp", experiment_host.c_str());
|
| - config->http_url =
|
| - GURL(base::StringPrintf("https://%s/", experiment_host.c_str()));
|
| -
|
| - config = &config_.ws_config[STATE_RUN_WS_NODEFAULT_PORT -
|
| - STATE_RUN_WS];
|
| - *config = task_config;
|
| - config->url =
|
| - GURL(base::StringPrintf("ws://%s:%d/live_exp",
|
| - experiment_host.c_str(), kAlternativePort));
|
| - config->ws_location =
|
| - base::StringPrintf("ws://%s:%d/live_exp",
|
| - experiment_host.c_str(), kAlternativePort);
|
| - config->http_url =
|
| - GURL(base::StringPrintf("http://%s:%d/",
|
| - experiment_host.c_str(), kAlternativePort));
|
| -
|
| - task_config.protocol_version = net::WebSocket::DRAFT75;
|
| - config = &config_.ws_config[STATE_RUN_WS_DRAFT75 - STATE_RUN_WS];
|
| - *config = task_config;
|
| - config->url =
|
| - GURL(base::StringPrintf("ws://%s/live_exp", experiment_host.c_str()));
|
| - config->ws_location =
|
| - base::StringPrintf("ws://%s/live_exp", experiment_host.c_str());
|
| - config->http_url =
|
| - GURL(base::StringPrintf("http://%s/", experiment_host.c_str()));
|
| -
|
| - config = &config_.ws_config[STATE_RUN_WSS_DRAFT75 - STATE_RUN_WS];
|
| - *config = task_config;
|
| - config->url =
|
| - GURL(base::StringPrintf("wss://%s/live_exp", experiment_host.c_str()));
|
| - config->ws_location =
|
| - base::StringPrintf("wss://%s/live_exp", experiment_host.c_str());
|
| - config->http_url =
|
| - GURL(base::StringPrintf("https://%s/", experiment_host.c_str()));
|
| -
|
| - config = &config_.ws_config[STATE_RUN_WS_NODEFAULT_PORT_DRAFT75 -
|
| - STATE_RUN_WS];
|
| - *config = task_config;
|
| - config->url =
|
| - GURL(base::StringPrintf("ws://%s:%d/live_exp",
|
| - experiment_host.c_str(), kAlternativePort));
|
| - config->ws_location =
|
| - base::StringPrintf("ws://%s:%d/live_exp",
|
| - experiment_host.c_str(), kAlternativePort);
|
| - config->http_url =
|
| - GURL(base::StringPrintf("http://%s:%d/",
|
| - experiment_host.c_str(), kAlternativePort));
|
| -
|
| -}
|
| -
|
| -void WebSocketExperimentRunner::DoLoop() {
|
| - if (next_state_ == STATE_NONE) {
|
| - if (task_.get()) {
|
| - AddRef(); // Release in OnTaskCompleted after Cancelled.
|
| - task_->Cancel();
|
| - }
|
| - return;
|
| - }
|
| -
|
| - State state = next_state_;
|
| - task_state_ = STATE_NONE;
|
| - next_state_ = STATE_NONE;
|
| -
|
| - switch (state) {
|
| - case STATE_IDLE:
|
| - task_.reset();
|
| - next_state_ = STATE_RUN_WS;
|
| - BrowserThread::PostDelayedTask(
|
| - BrowserThread::IO,
|
| - FROM_HERE,
|
| - NewRunnableMethod(this, &WebSocketExperimentRunner::DoLoop),
|
| - config_.next_delay_ms);
|
| - break;
|
| - case STATE_RUN_WS:
|
| - case STATE_RUN_WSS:
|
| - case STATE_RUN_WS_NODEFAULT_PORT:
|
| - case STATE_RUN_WS_DRAFT75:
|
| - case STATE_RUN_WSS_DRAFT75:
|
| - case STATE_RUN_WS_NODEFAULT_PORT_DRAFT75:
|
| - task_.reset(new WebSocketExperimentTask(
|
| - config_.ws_config[state - STATE_RUN_WS], &task_callback_));
|
| - task_state_ = state;
|
| - if (static_cast<State>(state + 1) == NUM_STATES)
|
| - next_state_ = STATE_IDLE;
|
| - else
|
| - next_state_ = static_cast<State>(state + 1);
|
| - break;
|
| - default:
|
| - NOTREACHED();
|
| - break;
|
| - }
|
| - if (task_.get())
|
| - task_->Run();
|
| -}
|
| -
|
| -void WebSocketExperimentRunner::OnTaskCompleted(int result) {
|
| - if (next_state_ == STATE_NONE) {
|
| - task_.reset();
|
| - // Task is Canceled.
|
| - DVLOG(1) << "WebSocketExperiment Task is canceled.";
|
| - Release();
|
| - return;
|
| - }
|
| - task_->SaveResult();
|
| - task_.reset();
|
| -
|
| - DoLoop();
|
| -}
|
| -
|
| -} // namespace chrome_browser_net_websocket_experiment
|
|
|