summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-12 08:24:29 +0000
committerukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-12 08:24:29 +0000
commit40bb792afc009fd48bbee505b3a953309666ae08 (patch)
treeb7423d1b40520f6197b1372fd5f739d51d18a3bf /chrome
parentb7266221e8752f241fe78b191eca5a69ddb574e6 (diff)
downloadchromium_src-40bb792afc009fd48bbee505b3a953309666ae08.zip
chromium_src-40bb792afc009fd48bbee505b3a953309666ae08.tar.gz
chromium_src-40bb792afc009fd48bbee505b3a953309666ae08.tar.bz2
Fix DCHECK in WebSocketExperimentTask.
Don't run experiment task if there are not request context ready yet. BUG=27491 TEST=none Review URL: http://codereview.chromium.org/384076 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@31776 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/net/websocket_experiment/websocket_experiment_task.cc27
1 files changed, 23 insertions, 4 deletions
diff --git a/chrome/browser/net/websocket_experiment/websocket_experiment_task.cc b/chrome/browser/net/websocket_experiment/websocket_experiment_task.cc
index a988008..02942af 100644
--- a/chrome/browser/net/websocket_experiment/websocket_experiment_task.cc
+++ b/chrome/browser/net/websocket_experiment/websocket_experiment_task.cc
@@ -17,7 +17,11 @@ URLFetcher* WebSocketExperimentTask::Context::CreateURLFetcher(
const Config& config, URLFetcher::Delegate* delegate) {
URLRequestContextGetter* getter =
Profile::GetDefaultRequestContext();
- DCHECK(getter);
+ // Profile::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;
DLOG(INFO) << "url=" << config.http_url;
URLFetcher* fetcher =
new URLFetcher(config.http_url, URLFetcher::GET, delegate);
@@ -32,7 +36,11 @@ net::WebSocket* WebSocketExperimentTask::Context::CreateWebSocket(
const Config& config, net::WebSocketDelegate* delegate) {
URLRequestContextGetter* getter =
Profile::GetDefaultRequestContext();
- DCHECK(getter);
+ // Profile::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,
@@ -219,10 +227,16 @@ void WebSocketExperimentTask::DoLoop(int result) {
}
int WebSocketExperimentTask::DoURLFetch() {
- next_state_ = STATE_URL_FETCH_COMPLETE;
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);
DLOG(INFO) << "URLFetch url=" << url_fetcher_->url()
<< " timeout=" << config_.url_fetch_deadline_ms;
@@ -245,8 +259,13 @@ int WebSocketExperimentTask::DoURLFetchComplete(int result) {
int WebSocketExperimentTask::DoWebSocketConnect() {
DCHECK(!websocket_);
- next_state_ = STATE_WEBSOCKET_CONNECT_COMPLETE;
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();