Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1832)

Unified Diff: chrome/browser/net/websocket_experiment/websocket_experiment_task.cc

Issue 7567001: WebSocket: Remove obsolete experiments related files (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/net/websocket_experiment/websocket_experiment_task.cc
diff --git a/chrome/browser/net/websocket_experiment/websocket_experiment_task.cc b/chrome/browser/net/websocket_experiment/websocket_experiment_task.cc
deleted file mode 100644
index 4933d40c72cb9bf9aadcc5fea1f9f85e19ef1d67..0000000000000000000000000000000000000000
--- a/chrome/browser/net/websocket_experiment/websocket_experiment_task.cc
+++ /dev/null
@@ -1,645 +0,0 @@
-// Copyright (c) 2011 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_task.h"
-
-#include "base/hash_tables.h"
-#include "base/metrics/histogram.h"
-#include "chrome/browser/profiles/profile.h"
-#include "content/browser/browser_thread.h"
-#include "net/base/host_resolver.h"
-#include "net/base/load_flags.h"
-#include "net/base/net_errors.h"
-#include "net/url_request/url_request_context_getter.h"
-#include "net/websockets/websocket.h"
-
-using base::Histogram;
-using base::LinearHistogram;
-
-namespace chrome_browser_net_websocket_experiment {
-
-static std::string GetProtocolVersionName(
- net::WebSocket::ProtocolVersion protocol_version) {
- switch (protocol_version) {
- case net::WebSocket::DEFAULT_VERSION:
- return "default protocol";
- case net::WebSocket::DRAFT75:
- return "draft 75 protocol";
- default:
- NOTREACHED();
- }
- return "";
-}
-
-URLFetcher* WebSocketExperimentTask::Context::CreateURLFetcher(
- const Config& config, URLFetcher::Delegate* delegate) {
- net::URLRequestContextGetter* getter =
- Profile::Deprecated::GetDefaultRequestContext();
- // Profile::Deprecated::GetDefaultRequestContext() is initialized lazily, on
- // the UI thread. So here, where we access it from the IO thread, if the task
- // runs before it has gotten lazily initialized yet.
- if (!getter)
- return NULL;
- URLFetcher* fetcher =
- new URLFetcher(config.http_url, URLFetcher::GET, delegate);
- fetcher->set_request_context(getter);
- fetcher->set_load_flags(
- net::LOAD_BYPASS_CACHE | net::LOAD_DISABLE_CACHE |
- net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SEND_AUTH_DATA |
- net::LOAD_IGNORE_CERT_AUTHORITY_INVALID);
- return fetcher;
-}
-
-net::WebSocket* WebSocketExperimentTask::Context::CreateWebSocket(
- const Config& config, net::WebSocketDelegate* delegate) {
- net::URLRequestContextGetter* getter =
- Profile::Deprecated::GetDefaultRequestContext();
- // Profile::Deprecated::GetDefaultRequestContext() is initialized lazily, on
- // the UI thread. So here, where we access it from the IO thread, if the task
- // runs before it has gotten lazily initialized yet.
- if (!getter)
- return NULL;
- net::WebSocket::Request* request(
- new net::WebSocket::Request(config.url,
- config.ws_protocol,
- config.ws_origin,
- config.ws_location,
- config.protocol_version,
- getter->GetURLRequestContext()));
- return new net::WebSocket(request, delegate);
-}
-
-// Expects URL Fetch and WebSocket connection handshake will finish in
-// a few seconds.
-static const int kUrlFetchDeadlineSec = 10;
-static const int kWebSocketConnectDeadlineSec = 10;
-// Expects WebSocket live experiment server echoes message back within a few
-// seconds.
-static const int kWebSocketEchoDeadlineSec = 5;
-// WebSocket live experiment server keeps idle for 1.5 seconds and sends
-// a message. So, expects idle for at least 1 second and expects message
-// arrives within 1 second after that.
-static const int kWebSocketIdleSec = 1;
-static const int kWebSocketPushDeadlineSec = 1;
-// WebSocket live experiment server sends "bye" message soon.
-static const int kWebSocketByeDeadlineSec = 10;
-// WebSocket live experiment server closes after it receives "bye" message.
-static const int kWebSocketCloseDeadlineSec = 5;
-
-// All of above are expected within a few seconds. We'd like to see time
-// distribution between 0 to 10 seconds.
-static const int kWebSocketTimeSec = 10;
-static const int kTimeBucketCount = 50;
-
-// Holds Histogram objects during experiments run.
-static base::hash_map<std::string, Histogram*>* g_histogram_table;
-
-WebSocketExperimentTask::Config::Config()
- : ws_protocol("google-websocket-liveexperiment"),
- ws_origin("http://dev.chromium.org/"),
- protocol_version(net::WebSocket::DEFAULT_VERSION),
- url_fetch_deadline_ms(kUrlFetchDeadlineSec * 1000),
- websocket_onopen_deadline_ms(kWebSocketConnectDeadlineSec * 1000),
- websocket_hello_message("Hello"),
- websocket_hello_echoback_deadline_ms(kWebSocketEchoDeadlineSec * 1000),
- // Note: websocket live experiment server is configured to wait 1.5 sec
- // in websocket_experiment_def.txt on server. So, client expects idle
- // at least 1 sec and expects a message arrival within next 1 sec.
- websocket_idle_ms(kWebSocketIdleSec * 1000),
- websocket_receive_push_message_deadline_ms(
- kWebSocketPushDeadlineSec * 1000),
- websocket_bye_message("Bye"),
- websocket_bye_deadline_ms(kWebSocketByeDeadlineSec * 1000),
- websocket_close_deadline_ms(kWebSocketCloseDeadlineSec * 1000) {
-}
-
-WebSocketExperimentTask::Config::~Config() {}
-
-WebSocketExperimentTask::WebSocketExperimentTask(
- const Config& config,
- net::CompletionCallback* callback)
- : config_(config),
- context_(ALLOW_THIS_IN_INITIALIZER_LIST(new Context())),
- method_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
- callback_(callback),
- next_state_(STATE_NONE),
- last_websocket_error_(net::OK) {
-}
-
-WebSocketExperimentTask::~WebSocketExperimentTask() {
- DCHECK(!websocket_);
-}
-
-/* static */
-void WebSocketExperimentTask::InitHistogram() {
- DCHECK(!g_histogram_table);
- g_histogram_table = new base::hash_map<std::string, Histogram*>;
-}
-
-static std::string GetCounterNameForConfig(
- const WebSocketExperimentTask::Config& config, const std::string& name) {
- std::string protocol_version = "";
- switch (config.protocol_version) {
- case net::WebSocket::DEFAULT_VERSION:
- protocol_version = "Draft76";
- break;
- case net::WebSocket::DRAFT75:
- protocol_version = "";
- break;
- default:
- NOTREACHED();
- }
- if (config.url.SchemeIs("wss")) {
- return "WebSocketExperiment.Secure" + protocol_version + "." + name;
- } else if (config.url.has_port() && config.url.IntPort() != 80) {
- return "WebSocketExperiment.NoDefaultPort" + protocol_version + "." + name;
- } else {
- return "WebSocketExperiment.Basic" + protocol_version + "." + name;
- }
-}
-
-static Histogram* GetEnumsHistogramForConfig(
- const WebSocketExperimentTask::Config& config,
- const std::string& name,
- Histogram::Sample boundary_value) {
- DCHECK(g_histogram_table);
- std::string counter_name = GetCounterNameForConfig(config, name);
- base::hash_map<std::string, Histogram*>::iterator found =
- g_histogram_table->find(counter_name);
- if (found != g_histogram_table->end()) {
- return found->second;
- }
- Histogram* counter = LinearHistogram::FactoryGet(
- counter_name, 1, boundary_value, boundary_value + 1,
- Histogram::kUmaTargetedHistogramFlag);
- g_histogram_table->insert(std::make_pair(counter_name, counter));
- return counter;
-}
-
-static Histogram* GetTimesHistogramForConfig(
- const WebSocketExperimentTask::Config& config,
- const std::string& name,
- base::TimeDelta min,
- base::TimeDelta max,
- size_t bucket_count) {
- DCHECK(g_histogram_table);
- std::string counter_name = GetCounterNameForConfig(config, name);
- base::hash_map<std::string, Histogram*>::iterator found =
- g_histogram_table->find(counter_name);
- if (found != g_histogram_table->end()) {
- return found->second;
- }
- Histogram* counter = Histogram::FactoryTimeGet(
- counter_name, min, max, bucket_count,
- Histogram::kUmaTargetedHistogramFlag);
- g_histogram_table->insert(std::make_pair(counter_name, counter));
- return counter;
-}
-
-static void UpdateHistogramEnums(
- const WebSocketExperimentTask::Config& config,
- const std::string& name,
- Histogram::Sample sample,
- Histogram::Sample boundary_value) {
- Histogram* counter = GetEnumsHistogramForConfig(config, name, boundary_value);
- counter->Add(sample);
-}
-
-static void UpdateHistogramTimes(
- const WebSocketExperimentTask::Config& config,
- const std::string& name,
- base::TimeDelta sample,
- base::TimeDelta min,
- base::TimeDelta max,
- size_t bucket_count) {
- Histogram* counter = GetTimesHistogramForConfig(
- config, name, min, max, bucket_count);
- counter->AddTime(sample);
-}
-
-/* static */
-void WebSocketExperimentTask::ReleaseHistogram() {
- DCHECK(g_histogram_table);
- delete g_histogram_table;
- g_histogram_table = NULL;
-}
-
-void WebSocketExperimentTask::Run() {
- DVLOG(1) << "Run WebSocket experiment for " << config_.url << " "
- << GetProtocolVersionName(config_.protocol_version);
- next_state_ = STATE_URL_FETCH;
- DoLoop(net::OK);
-}
-
-void WebSocketExperimentTask::Cancel() {
- next_state_ = STATE_NONE;
- DoLoop(net::OK);
-}
-
-void WebSocketExperimentTask::SaveResult() const {
- DVLOG(1) << "WebSocket experiment save result for " << config_.url
- << " last_state=" << result_.last_state;
- UpdateHistogramEnums(config_, "LastState", result_.last_state, NUM_STATES);
- UpdateHistogramTimes(config_, "UrlFetch", result_.url_fetch,
- base::TimeDelta::FromMilliseconds(1),
- base::TimeDelta::FromSeconds(kUrlFetchDeadlineSec),
- kTimeBucketCount);
-
- if (result_.last_state < STATE_WEBSOCKET_CONNECT_COMPLETE)
- return;
-
- UpdateHistogramTimes(config_, "WebSocketConnect", result_.websocket_connect,
- base::TimeDelta::FromMilliseconds(1),
- base::TimeDelta::FromSeconds(
- kWebSocketConnectDeadlineSec),
- kTimeBucketCount);
-
- if (result_.last_state < STATE_WEBSOCKET_RECV_HELLO)
- return;
-
- UpdateHistogramTimes(config_, "WebSocketEcho", result_.websocket_echo,
- base::TimeDelta::FromMilliseconds(1),
- base::TimeDelta::FromSeconds(
- kWebSocketEchoDeadlineSec),
- kTimeBucketCount);
-
- if (result_.last_state < STATE_WEBSOCKET_KEEP_IDLE)
- return;
-
- UpdateHistogramTimes(config_, "WebSocketIdle", result_.websocket_idle,
- base::TimeDelta::FromMilliseconds(1),
- base::TimeDelta::FromSeconds(
- kWebSocketIdleSec + kWebSocketPushDeadlineSec),
- kTimeBucketCount);
-
- if (result_.last_state < STATE_WEBSOCKET_CLOSE_COMPLETE)
- return;
-
- UpdateHistogramTimes(config_, "WebSocketTotal", result_.websocket_total,
- base::TimeDelta::FromMilliseconds(1),
- base::TimeDelta::FromSeconds(kWebSocketTimeSec),
- kTimeBucketCount);
-}
-
-// URLFetcher::Delegate method.
-void WebSocketExperimentTask::OnURLFetchComplete(
- const URLFetcher* source,
- const GURL& url,
- const net::URLRequestStatus& status,
- int response_code,
- const net::ResponseCookies& cookies,
- const std::string& data) {
- result_.url_fetch = base::TimeTicks::Now() - url_fetch_start_time_;
- RevokeTimeoutTimer();
- int result = net::ERR_FAILED;
- if (next_state_ != STATE_URL_FETCH_COMPLETE) {
- DVLOG(1) << "unexpected state=" << next_state_
- << " at OnURLFetchComplete for " << config_.http_url;
- result = net::ERR_UNEXPECTED;
- } else if (response_code == 200 || response_code == 304) {
- result = net::OK;
- }
- DoLoop(result);
-}
-
-// net::WebSocketDelegate
-void WebSocketExperimentTask::OnOpen(net::WebSocket* websocket) {
- result_.websocket_connect =
- base::TimeTicks::Now() - websocket_connect_start_time_;
- RevokeTimeoutTimer();
- int result = net::ERR_UNEXPECTED;
- if (next_state_ == STATE_WEBSOCKET_CONNECT_COMPLETE)
- result = net::OK;
- else
- DVLOG(1) << "unexpected state=" << next_state_
- << " at OnOpen for " << config_.url
- << " " << GetProtocolVersionName(config_.protocol_version);
- DoLoop(result);
-}
-
-void WebSocketExperimentTask::OnMessage(
- net::WebSocket* websocket, const std::string& msg) {
- if (!result_.websocket_echo.ToInternalValue())
- result_.websocket_echo =
- base::TimeTicks::Now() - websocket_echo_start_time_;
- if (!websocket_idle_start_time_.is_null() &&
- !result_.websocket_idle.ToInternalValue())
- result_.websocket_idle =
- base::TimeTicks::Now() - websocket_idle_start_time_;
- RevokeTimeoutTimer();
- received_messages_.push_back(msg);
- int result = net::ERR_UNEXPECTED;
- switch (next_state_) {
- case STATE_WEBSOCKET_RECV_HELLO:
- case STATE_WEBSOCKET_RECV_PUSH_MESSAGE:
- case STATE_WEBSOCKET_RECV_BYE:
- result = net::OK;
- break;
- default:
- DVLOG(1) << "unexpected state=" << next_state_
- << " at OnMessage for " << config_.url
- << " " << GetProtocolVersionName(config_.protocol_version);
- break;
- }
- DoLoop(result);
-}
-
-void WebSocketExperimentTask::OnError(net::WebSocket* websocket) {
- // TODO(ukai): record error count?
-}
-
-void WebSocketExperimentTask::OnClose(
- net::WebSocket* websocket, bool was_clean) {
- RevokeTimeoutTimer();
- websocket_ = NULL;
- result_.websocket_total =
- base::TimeTicks::Now() - websocket_connect_start_time_;
- int result = net::ERR_CONNECTION_CLOSED;
- if (last_websocket_error_ != net::OK)
- result = last_websocket_error_;
- DVLOG(1) << "WebSocket onclose was_clean=" << was_clean
- << " next_state=" << next_state_
- << " last_error=" << net::ErrorToString(result);
- if (config_.protocol_version == net::WebSocket::DEFAULT_VERSION) {
- if (next_state_ == STATE_WEBSOCKET_CLOSE_COMPLETE && was_clean)
- result = net::OK;
- } else {
- // DRAFT75 doesn't report was_clean correctly.
- if (next_state_ == STATE_WEBSOCKET_CLOSE_COMPLETE)
- result = net::OK;
- }
- DoLoop(result);
-}
-
-void WebSocketExperimentTask::OnSocketError(
- const net::WebSocket* websocket, int error) {
- DVLOG(1) << "WebSocket socket level error=" << net::ErrorToString(error)
- << " next_state=" << next_state_
- << " for " << config_.url
- << " " << GetProtocolVersionName(config_.protocol_version);
- last_websocket_error_ = error;
-}
-
-void WebSocketExperimentTask::SetContext(Context* context) {
- context_.reset(context);
-}
-
-void WebSocketExperimentTask::OnTimedOut() {
- DVLOG(1) << "OnTimedOut next_state=" << next_state_
- << " for " << config_.url
- << " " << GetProtocolVersionName(config_.protocol_version);
- RevokeTimeoutTimer();
- DoLoop(net::ERR_TIMED_OUT);
-}
-
-void WebSocketExperimentTask::DoLoop(int result) {
- if (next_state_ == STATE_NONE) {
- Finish(net::ERR_ABORTED);
- return;
- }
- do {
- State state = next_state_;
- next_state_ = STATE_NONE;
- switch (state) {
- case STATE_URL_FETCH:
- result = DoURLFetch();
- break;
- case STATE_URL_FETCH_COMPLETE:
- result = DoURLFetchComplete(result);
- break;
- case STATE_WEBSOCKET_CONNECT:
- result = DoWebSocketConnect();
- break;
- case STATE_WEBSOCKET_CONNECT_COMPLETE:
- result = DoWebSocketConnectComplete(result);
- break;
- case STATE_WEBSOCKET_SEND_HELLO:
- result = DoWebSocketSendHello();
- break;
- case STATE_WEBSOCKET_RECV_HELLO:
- result = DoWebSocketReceiveHello(result);
- break;
- case STATE_WEBSOCKET_KEEP_IDLE:
- result = DoWebSocketKeepIdle();
- break;
- case STATE_WEBSOCKET_KEEP_IDLE_COMPLETE:
- result = DoWebSocketKeepIdleComplete(result);
- break;
- case STATE_WEBSOCKET_RECV_PUSH_MESSAGE:
- result = DoWebSocketReceivePushMessage(result);
- break;
- case STATE_WEBSOCKET_ECHO_BACK_MESSAGE:
- result = DoWebSocketEchoBackMessage();
- break;
- case STATE_WEBSOCKET_RECV_BYE:
- result = DoWebSocketReceiveBye(result);
- break;
- case STATE_WEBSOCKET_CLOSE:
- result = DoWebSocketClose();
- break;
- case STATE_WEBSOCKET_CLOSE_COMPLETE:
- result = DoWebSocketCloseComplete(result);
- break;
- default:
- NOTREACHED();
- break;
- }
- result_.last_state = state;
- } while (result != net::ERR_IO_PENDING && next_state_ != STATE_NONE);
-
- if (result != net::ERR_IO_PENDING)
- Finish(result);
-}
-
-int WebSocketExperimentTask::DoURLFetch() {
- DCHECK(!url_fetcher_.get());
-
- url_fetcher_.reset(context_->CreateURLFetcher(config_, this));
- if (!url_fetcher_.get()) {
- // Request context is not ready.
- next_state_ = STATE_NONE;
- return net::ERR_UNEXPECTED;
- }
-
- next_state_ = STATE_URL_FETCH_COMPLETE;
- SetTimeout(config_.url_fetch_deadline_ms);
- url_fetch_start_time_ = base::TimeTicks::Now();
- url_fetcher_->Start();
- return net::ERR_IO_PENDING;
-}
-
-int WebSocketExperimentTask::DoURLFetchComplete(int result) {
- url_fetcher_.reset();
-
- if (result < 0)
- return result;
-
- next_state_ = STATE_WEBSOCKET_CONNECT;
- return net::OK;
-}
-
-int WebSocketExperimentTask::DoWebSocketConnect() {
- DCHECK(!websocket_);
-
- websocket_ = context_->CreateWebSocket(config_, this);
- if (!websocket_) {
- // Request context is not ready.
- next_state_ = STATE_NONE;
- return net::ERR_UNEXPECTED;
- }
- next_state_ = STATE_WEBSOCKET_CONNECT_COMPLETE;
- websocket_connect_start_time_ = base::TimeTicks::Now();
- websocket_->Connect();
-
- SetTimeout(config_.websocket_onopen_deadline_ms);
- return net::ERR_IO_PENDING;
-}
-
-int WebSocketExperimentTask::DoWebSocketConnectComplete(int result) {
- if (result < 0)
- return result;
- DCHECK(websocket_);
-
- next_state_ = STATE_WEBSOCKET_SEND_HELLO;
- return net::OK;
-}
-
-int WebSocketExperimentTask::DoWebSocketSendHello() {
- DCHECK(websocket_);
-
- next_state_ = STATE_WEBSOCKET_RECV_HELLO;
-
- websocket_echo_start_time_ = base::TimeTicks::Now();
- websocket_->Send(config_.websocket_hello_message);
- SetTimeout(config_.websocket_hello_echoback_deadline_ms);
- return net::ERR_IO_PENDING;
-}
-
-int WebSocketExperimentTask::DoWebSocketReceiveHello(int result) {
- if (result < 0)
- return result;
-
- DCHECK(websocket_);
-
- if (received_messages_.size() != 1)
- return net::ERR_INVALID_RESPONSE;
-
- std::string msg = received_messages_.front();
- received_messages_.pop_front();
- if (msg != config_.websocket_hello_message)
- return net::ERR_INVALID_RESPONSE;
-
- next_state_ = STATE_WEBSOCKET_KEEP_IDLE;
- return net::OK;
-}
-
-int WebSocketExperimentTask::DoWebSocketKeepIdle() {
- DCHECK(websocket_);
-
- next_state_ = STATE_WEBSOCKET_KEEP_IDLE_COMPLETE;
- websocket_idle_start_time_ = base::TimeTicks::Now();
- SetTimeout(config_.websocket_idle_ms);
- return net::ERR_IO_PENDING;
-}
-
-int WebSocketExperimentTask::DoWebSocketKeepIdleComplete(int result) {
- if (result != net::ERR_TIMED_OUT) {
- // Server sends back too early, or unexpected close?
- if (result == net::OK)
- result = net::ERR_UNEXPECTED;
- return result;
- }
-
- DCHECK(websocket_);
-
- next_state_ = STATE_WEBSOCKET_RECV_PUSH_MESSAGE;
- SetTimeout(config_.websocket_receive_push_message_deadline_ms);
- return net::ERR_IO_PENDING;
-}
-
-int WebSocketExperimentTask::DoWebSocketReceivePushMessage(int result) {
- if (result < 0)
- return result;
-
- DCHECK(websocket_);
- if (received_messages_.size() != 1)
- return net::ERR_INVALID_RESPONSE;
-
- push_message_ = received_messages_.front();
- received_messages_.pop_front();
-
- next_state_ = STATE_WEBSOCKET_ECHO_BACK_MESSAGE;
- return net::OK;
-}
-
-int WebSocketExperimentTask::DoWebSocketEchoBackMessage() {
- DCHECK(websocket_);
- DCHECK(!push_message_.empty());
-
- next_state_ = STATE_WEBSOCKET_RECV_BYE;
- websocket_->Send(push_message_);
- SetTimeout(config_.websocket_bye_deadline_ms);
- return net::ERR_IO_PENDING;
-}
-
-int WebSocketExperimentTask::DoWebSocketReceiveBye(int result) {
- if (result < 0)
- return result;
-
- DCHECK(websocket_);
-
- if (received_messages_.size() != 1)
- return net::ERR_INVALID_RESPONSE;
-
- std::string bye = received_messages_.front();
- received_messages_.pop_front();
-
- if (bye != config_.websocket_bye_message)
- return net::ERR_INVALID_RESPONSE;
-
- next_state_ = STATE_WEBSOCKET_CLOSE;
- return net::OK;
-}
-
-int WebSocketExperimentTask::DoWebSocketClose() {
- DCHECK(websocket_);
-
- next_state_ = STATE_WEBSOCKET_CLOSE_COMPLETE;
- websocket_->Close();
- SetTimeout(config_.websocket_close_deadline_ms);
- return net::ERR_IO_PENDING;
-}
-
-int WebSocketExperimentTask::DoWebSocketCloseComplete(int result) {
- websocket_ = NULL;
- return result;
-}
-
-void WebSocketExperimentTask::SetTimeout(int64 deadline_ms) {
- bool r = BrowserThread::PostDelayedTask(
- BrowserThread::IO,
- FROM_HERE,
- method_factory_.NewRunnableMethod(&WebSocketExperimentTask::OnTimedOut),
- deadline_ms);
- DCHECK(r) << "No IO thread running?";
-}
-
-void WebSocketExperimentTask::RevokeTimeoutTimer() {
- method_factory_.RevokeAll();
-}
-
-void WebSocketExperimentTask::Finish(int result) {
- url_fetcher_.reset();
- scoped_refptr<net::WebSocket> websocket = websocket_;
- websocket_ = NULL;
- if (websocket)
- websocket->DetachDelegate();
- DVLOG(1) << "Finish WebSocket experiment for " << config_.url
- << " " << GetProtocolVersionName(config_.protocol_version)
- << " next_state=" << next_state_
- << " result=" << net::ErrorToString(result);
- callback_->Run(result); // will release this.
-}
-
-} // namespace chrome_browser_net
« no previous file with comments | « chrome/browser/net/websocket_experiment/websocket_experiment_task.h ('k') | chrome/browser/profiles/profile.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698