| OLD | NEW | 
|    1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |    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 |    2 // Use of this source code is governed by a BSD-style license that can be | 
|    3 // found in the LICENSE file. |    3 // found in the LICENSE file. | 
|    4  |    4  | 
|    5 #include "content/browser/cancelable_request.h" |    5 #include "content/browser/cancelable_request.h" | 
|    6  |    6  | 
|    7 CancelableRequestProvider::CancelableRequestProvider() : next_handle_(1) { |    7 const CancelableRequestProvider::Handle | 
 |    8     CancelableRequestProvider::kInvalidHandle = 0; | 
 |    9 const CancelableRequestProvider::Handle | 
 |   10     CancelableRequestProvider::kFirstHandle = 1; | 
 |   11  | 
 |   12 CancelableRequestProvider::CancelableRequestProvider() | 
 |   13     : next_handle_(CancelableRequestProvider::kFirstHandle) { | 
|    8 } |   14 } | 
|    9  |   15  | 
|   10 CancelableRequestProvider::~CancelableRequestProvider() { |   16 CancelableRequestProvider::~CancelableRequestProvider() { | 
|   11   // There may be requests whose result callback has not been run yet. We need |   17   // There may be requests whose result callback has not been run yet. We need | 
|   12   // to cancel them otherwise they may try and call us back after we've been |   18   // to cancel them otherwise they may try and call us back after we've been | 
|   13   // deleted, or do other bad things. This can occur on shutdown (or profile |   19   // deleted, or do other bad things. This can occur on shutdown (or profile | 
|   14   // destruction) when a request is scheduled, completed (but not dispatched), |   20   // destruction) when a request is scheduled, completed (but not dispatched), | 
|   15   // then the Profile is deleted. |   21   // then the Profile is deleted. | 
|   16   base::AutoLock lock(pending_request_lock_); |   22   base::AutoLock lock(pending_request_lock_); | 
|   17   while (!pending_requests_.empty()) |   23   while (!pending_requests_.empty()) | 
|   18     CancelRequestLocked(pending_requests_.begin()); |   24     CancelRequestLocked(pending_requests_.begin()); | 
|   19 } |   25 } | 
|   20  |   26  | 
|   21 CancelableRequestProvider::Handle CancelableRequestProvider::AddRequest( |   27 CancelableRequestProvider::Handle CancelableRequestProvider::AddRequest( | 
|   22     CancelableRequestBase* request, |   28     CancelableRequestBase* request, | 
|   23     CancelableRequestConsumerBase* consumer) { |   29     CancelableRequestConsumerBase* consumer) { | 
|   24   Handle handle; |   30   Handle handle; | 
|   25   { |   31   { | 
|   26     base::AutoLock lock(pending_request_lock_); |   32     base::AutoLock lock(pending_request_lock_); | 
|   27  |   33  | 
|   28     handle = next_handle_; |   34     handle = next_handle_; | 
|   29     pending_requests_[next_handle_] = request; |   35     pending_requests_[next_handle_] = request; | 
|   30     ++next_handle_; |   36     ++next_handle_; | 
 |   37     DCHECK_NE(kInvalidHandle, next_handle_); | 
|   31   } |   38   } | 
|   32  |   39  | 
|   33   consumer->OnRequestAdded(this, handle); |   40   consumer->OnRequestAdded(this, handle); | 
|   34  |   41  | 
|   35   request->Init(this, handle, consumer); |   42   request->Init(this, handle, consumer); | 
|   36   return handle; |   43   return handle; | 
|   37 } |   44 } | 
|   38  |   45  | 
|   39 void CancelableRequestProvider::CancelRequest(Handle handle) { |   46 void CancelableRequestProvider::CancelRequest(Handle handle) { | 
|   40   base::AutoLock lock(pending_request_lock_); |   47   base::AutoLock lock(pending_request_lock_); | 
|   41   CancelRequestLocked(pending_requests_.find(handle)); |   48   CancelRequestLocked(pending_requests_.find(handle)); | 
|   42 } |   49 } | 
|   43  |   50  | 
 |   51 CancelableRequestProvider::Handle CancelableRequestProvider::InvalidHandle() { | 
 |   52   return kInvalidHandle; | 
 |   53 } | 
 |   54  | 
 |   55 bool CancelableRequestProvider::HandleIsValid(Handle handle) { | 
 |   56   return handle != kInvalidHandle; | 
 |   57 } | 
 |   58  | 
|   44 void CancelableRequestProvider::CancelRequestLocked( |   59 void CancelableRequestProvider::CancelRequestLocked( | 
|   45     const CancelableRequestMap::iterator& item) { |   60     const CancelableRequestMap::iterator& item) { | 
|   46   pending_request_lock_.AssertAcquired(); |   61   pending_request_lock_.AssertAcquired(); | 
|   47   if (item == pending_requests_.end()) { |   62   if (item == pending_requests_.end()) { | 
|   48     NOTREACHED() << "Trying to cancel an unknown request"; |   63     NOTREACHED() << "Trying to cancel an unknown request"; | 
|   49     return; |   64     return; | 
|   50   } |   65   } | 
|   51  |   66  | 
|   52   item->second->consumer()->OnRequestRemoved(this, item->first); |   67   item->second->consumer()->OnRequestRemoved(this, item->first); | 
|   53   item->second->set_canceled(); |   68   item->second->set_canceled(); | 
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   97 } |  112 } | 
|   98  |  113  | 
|   99 void CancelableRequestBase::Init(CancelableRequestProvider* provider, |  114 void CancelableRequestBase::Init(CancelableRequestProvider* provider, | 
|  100                                  CancelableRequestProvider::Handle handle, |  115                                  CancelableRequestProvider::Handle handle, | 
|  101                                  CancelableRequestConsumerBase* consumer) { |  116                                  CancelableRequestConsumerBase* consumer) { | 
|  102   DCHECK(handle_ == 0 && provider_ == NULL && consumer_ == NULL); |  117   DCHECK(handle_ == 0 && provider_ == NULL && consumer_ == NULL); | 
|  103   provider_ = provider; |  118   provider_ = provider; | 
|  104   consumer_ = consumer; |  119   consumer_ = consumer; | 
|  105   handle_ = handle; |  120   handle_ = handle; | 
|  106 } |  121 } | 
| OLD | NEW |