Chromium Code Reviews| Index: chrome/browser/android/offline_pages/prerender_adapter.cc |
| diff --git a/chrome/browser/android/offline_pages/prerender_adapter.cc b/chrome/browser/android/offline_pages/prerender_adapter.cc |
| index 031314981274d1e0ad11ebb66c641c4fb6197515..4e2dbfccadd38bbff0cd8a70c32308a91a8e7e85 100644 |
| --- a/chrome/browser/android/offline_pages/prerender_adapter.cc |
| +++ b/chrome/browser/android/offline_pages/prerender_adapter.cc |
| @@ -74,8 +74,11 @@ bool PrerenderAdapter::IsActive() const { |
| void PrerenderAdapter::DestroyActive() { |
| DCHECK(IsActive()); |
| - active_handle_->OnCancel(); |
| - active_handle_.reset(nullptr); |
| + // Clear active handle and call OnCancel from local variable to avoid |
| + // immediate Observer OnPrerenderStop() call from thinking still active. |
| + prerender::PrerenderHandle* handle_to_destroy = active_handle_.release(); |
| + handle_to_destroy->OnCancel(); |
| + delete handle_to_destroy; |
|
Pete Williamson
2016/06/08 17:32:16
I didn't see any definitions of handle_to_destroy
dougarnett
2016/06/08 20:02:31
? handle_to_destroy is defined 2 lines above and t
Pete Williamson
2016/06/08 20:09:40
Acknowledged. My bad, I saw the assignment on lin
|
| } |
| void PrerenderAdapter::OnPrerenderStart(prerender::PrerenderHandle* handle) { |
| @@ -86,7 +89,7 @@ void PrerenderAdapter::OnPrerenderStart(prerender::PrerenderHandle* handle) { |
| void PrerenderAdapter::OnPrerenderStopLoading( |
| prerender::PrerenderHandle* handle) { |
| DCHECK(active_handle_.get() == handle); |
| - observer_->OnPrerenderDomContentLoaded(); |
| + observer_->OnPrerenderStopLoading(); |
| } |
| void PrerenderAdapter::OnPrerenderDomContentLoaded( |
| @@ -96,8 +99,10 @@ void PrerenderAdapter::OnPrerenderDomContentLoaded( |
| } |
| void PrerenderAdapter::OnPrerenderStop(prerender::PrerenderHandle* handle) { |
| - DCHECK(active_handle_.get() == handle); |
| - observer_->OnPrerenderStop(); |
| + if (IsActive()) { |
| + DCHECK(active_handle_.get() == handle); |
| + observer_->OnPrerenderStop(); |
| + } |
| } |
| } // namespace offline_pages |