| Index: net/url_request/url_request_http_job.cc
 | 
| diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc
 | 
| index fcf296b1e772498a438a905c3dd86d3897a7f4ad..e2cd99da864fce7822eb1e635d9f5c0664c0530c 100644
 | 
| --- a/net/url_request/url_request_http_job.cc
 | 
| +++ b/net/url_request/url_request_http_job.cc
 | 
| @@ -228,6 +228,7 @@ URLRequestHttpJob::URLRequestHttpJob(
 | 
|      NetworkDelegate* network_delegate,
 | 
|      const HttpUserAgentSettings* http_user_agent_settings)
 | 
|      : URLRequestJob(request, network_delegate),
 | 
| +      priority_(DEFAULT_PRIORITY),
 | 
|        response_info_(NULL),
 | 
|        response_cookies_save_index_(0),
 | 
|        proxy_auth_state_(AUTH_STATE_DONT_NEED_AUTH),
 | 
| @@ -268,6 +269,87 @@ URLRequestHttpJob::URLRequestHttpJob(
 | 
|    ResetTimer();
 | 
|  }
 | 
|  
 | 
| +URLRequestHttpJob::~URLRequestHttpJob() {
 | 
| +  CHECK(!awaiting_callback_);
 | 
| +
 | 
| +  DCHECK(!sdch_test_control_ || !sdch_test_activated_);
 | 
| +  if (!is_cached_content_) {
 | 
| +    if (sdch_test_control_)
 | 
| +      RecordPacketStats(FilterContext::SDCH_EXPERIMENT_HOLDBACK);
 | 
| +    if (sdch_test_activated_)
 | 
| +      RecordPacketStats(FilterContext::SDCH_EXPERIMENT_DECODE);
 | 
| +  }
 | 
| +  // Make sure SDCH filters are told to emit histogram data while
 | 
| +  // filter_context_ is still alive.
 | 
| +  DestroyFilters();
 | 
| +
 | 
| +  if (sdch_dictionary_url_.is_valid()) {
 | 
| +    // Prior to reaching the destructor, request_ has been set to a NULL
 | 
| +    // pointer, so request_->url() is no longer valid in the destructor, and we
 | 
| +    // use an alternate copy |request_info_.url|.
 | 
| +    SdchManager* manager = SdchManager::Global();
 | 
| +    // To be extra safe, since this is a "different time" from when we decided
 | 
| +    // to get the dictionary, we'll validate that an SdchManager is available.
 | 
| +    // At shutdown time, care is taken to be sure that we don't delete this
 | 
| +    // globally useful instance "too soon," so this check is just defensive
 | 
| +    // coding to assure that IF the system is shutting down, we don't have any
 | 
| +    // problem if the manager was deleted ahead of time.
 | 
| +    if (manager)  // Defensive programming.
 | 
| +      manager->FetchDictionary(request_info_.url, sdch_dictionary_url_);
 | 
| +  }
 | 
| +  DoneWithRequest(ABORTED);
 | 
| +}
 | 
| +
 | 
| +void URLRequestHttpJob::SetPriority(RequestPriority priority) {
 | 
| +  priority_ = priority;
 | 
| +  if (transaction_)
 | 
| +    transaction_->SetPriority(priority_);
 | 
| +}
 | 
| +
 | 
| +void URLRequestHttpJob::Start() {
 | 
| +  DCHECK(!transaction_.get());
 | 
| +
 | 
| +  // Ensure that we do not send username and password fields in the referrer.
 | 
| +  GURL referrer(request_->GetSanitizedReferrer());
 | 
| +
 | 
| +  request_info_.url = request_->url();
 | 
| +  request_info_.method = request_->method();
 | 
| +  request_info_.load_flags = request_->load_flags();
 | 
| +  request_info_.request_id = request_->identifier();
 | 
| +
 | 
| +  // Strip Referer from request_info_.extra_headers to prevent, e.g., plugins
 | 
| +  // from overriding headers that are controlled using other means. Otherwise a
 | 
| +  // plugin could set a referrer although sending the referrer is inhibited.
 | 
| +  request_info_.extra_headers.RemoveHeader(HttpRequestHeaders::kReferer);
 | 
| +
 | 
| +  // Our consumer should have made sure that this is a safe referrer.  See for
 | 
| +  // instance WebCore::FrameLoader::HideReferrer.
 | 
| +  if (referrer.is_valid()) {
 | 
| +    request_info_.extra_headers.SetHeader(HttpRequestHeaders::kReferer,
 | 
| +                                          referrer.spec());
 | 
| +  }
 | 
| +
 | 
| +  request_info_.extra_headers.SetHeaderIfMissing(
 | 
| +      HttpRequestHeaders::kUserAgent,
 | 
| +      http_user_agent_settings_ ?
 | 
| +          http_user_agent_settings_->GetUserAgent(request_->url()) :
 | 
| +          EmptyString());
 | 
| +
 | 
| +  AddExtraHeaders();
 | 
| +  AddCookieHeaderAndStart();
 | 
| +}
 | 
| +
 | 
| +void URLRequestHttpJob::Kill() {
 | 
| +  http_transaction_delegate_->OnDetachRequest();
 | 
| +
 | 
| +  if (!transaction_.get())
 | 
| +    return;
 | 
| +
 | 
| +  weak_factory_.InvalidateWeakPtrs();
 | 
| +  DestroyTransaction();
 | 
| +  URLRequestJob::Kill();
 | 
| +}
 | 
| +
 | 
|  void URLRequestHttpJob::NotifyHeadersComplete() {
 | 
|    DCHECK(!response_info_);
 | 
|  
 | 
| @@ -394,7 +476,7 @@ void URLRequestHttpJob::StartTransactionInternal() {
 | 
|      DCHECK(request_->context()->http_transaction_factory());
 | 
|  
 | 
|      rv = request_->context()->http_transaction_factory()->CreateTransaction(
 | 
| -        request_->priority(), &transaction_, http_transaction_delegate_.get());
 | 
| +        priority_, &transaction_, http_transaction_delegate_.get());
 | 
|      if (rv == OK) {
 | 
|        if (!throttling_entry_ ||
 | 
|            !throttling_entry_->ShouldRejectRequest(*request_)) {
 | 
| @@ -859,50 +941,6 @@ void URLRequestHttpJob::SetExtraRequestHeaders(
 | 
|    request_info_.extra_headers.CopyFrom(headers);
 | 
|  }
 | 
|  
 | 
| -void URLRequestHttpJob::Start() {
 | 
| -  DCHECK(!transaction_.get());
 | 
| -
 | 
| -  // Ensure that we do not send username and password fields in the referrer.
 | 
| -  GURL referrer(request_->GetSanitizedReferrer());
 | 
| -
 | 
| -  request_info_.url = request_->url();
 | 
| -  request_info_.method = request_->method();
 | 
| -  request_info_.load_flags = request_->load_flags();
 | 
| -  request_info_.request_id = request_->identifier();
 | 
| -
 | 
| -  // Strip Referer from request_info_.extra_headers to prevent, e.g., plugins
 | 
| -  // from overriding headers that are controlled using other means. Otherwise a
 | 
| -  // plugin could set a referrer although sending the referrer is inhibited.
 | 
| -  request_info_.extra_headers.RemoveHeader(HttpRequestHeaders::kReferer);
 | 
| -
 | 
| -  // Our consumer should have made sure that this is a safe referrer.  See for
 | 
| -  // instance WebCore::FrameLoader::HideReferrer.
 | 
| -  if (referrer.is_valid()) {
 | 
| -    request_info_.extra_headers.SetHeader(HttpRequestHeaders::kReferer,
 | 
| -                                          referrer.spec());
 | 
| -  }
 | 
| -
 | 
| -  request_info_.extra_headers.SetHeaderIfMissing(
 | 
| -      HttpRequestHeaders::kUserAgent,
 | 
| -      http_user_agent_settings_ ?
 | 
| -          http_user_agent_settings_->GetUserAgent(request_->url()) :
 | 
| -          EmptyString());
 | 
| -
 | 
| -  AddExtraHeaders();
 | 
| -  AddCookieHeaderAndStart();
 | 
| -}
 | 
| -
 | 
| -void URLRequestHttpJob::Kill() {
 | 
| -  http_transaction_delegate_->OnDetachRequest();
 | 
| -
 | 
| -  if (!transaction_.get())
 | 
| -    return;
 | 
| -
 | 
| -  weak_factory_.InvalidateWeakPtrs();
 | 
| -  DestroyTransaction();
 | 
| -  URLRequestJob::Kill();
 | 
| -}
 | 
| -
 | 
|  LoadState URLRequestHttpJob::GetLoadState() const {
 | 
|    return transaction_.get() ?
 | 
|        transaction_->GetLoadState() : LOAD_STATE_IDLE;
 | 
| @@ -1230,37 +1268,6 @@ HostPortPair URLRequestHttpJob::GetSocketAddress() const {
 | 
|    return response_info_ ? response_info_->socket_address : HostPortPair();
 | 
|  }
 | 
|  
 | 
| -URLRequestHttpJob::~URLRequestHttpJob() {
 | 
| -  CHECK(!awaiting_callback_);
 | 
| -
 | 
| -  DCHECK(!sdch_test_control_ || !sdch_test_activated_);
 | 
| -  if (!is_cached_content_) {
 | 
| -    if (sdch_test_control_)
 | 
| -      RecordPacketStats(FilterContext::SDCH_EXPERIMENT_HOLDBACK);
 | 
| -    if (sdch_test_activated_)
 | 
| -      RecordPacketStats(FilterContext::SDCH_EXPERIMENT_DECODE);
 | 
| -  }
 | 
| -  // Make sure SDCH filters are told to emit histogram data while
 | 
| -  // filter_context_ is still alive.
 | 
| -  DestroyFilters();
 | 
| -
 | 
| -  if (sdch_dictionary_url_.is_valid()) {
 | 
| -    // Prior to reaching the destructor, request_ has been set to a NULL
 | 
| -    // pointer, so request_->url() is no longer valid in the destructor, and we
 | 
| -    // use an alternate copy |request_info_.url|.
 | 
| -    SdchManager* manager = SdchManager::Global();
 | 
| -    // To be extra safe, since this is a "different time" from when we decided
 | 
| -    // to get the dictionary, we'll validate that an SdchManager is available.
 | 
| -    // At shutdown time, care is taken to be sure that we don't delete this
 | 
| -    // globally useful instance "too soon," so this check is just defensive
 | 
| -    // coding to assure that IF the system is shutting down, we don't have any
 | 
| -    // problem if the manager was deleted ahead of time.
 | 
| -    if (manager)  // Defensive programming.
 | 
| -      manager->FetchDictionary(request_info_.url, sdch_dictionary_url_);
 | 
| -  }
 | 
| -  DoneWithRequest(ABORTED);
 | 
| -}
 | 
| -
 | 
|  void URLRequestHttpJob::RecordTimer() {
 | 
|    if (request_creation_time_.is_null()) {
 | 
|      NOTREACHED()
 | 
| 
 |