OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/browser/prerender/prerender_handle.h" | |
6 | |
7 #include <algorithm> | |
8 | |
9 #include "chrome/browser/prerender/prerender_contents.h" | |
10 | |
11 namespace prerender { | |
12 | |
13 PrerenderHandle::~PrerenderHandle() { | |
14 DCHECK(!IsValid()); | |
15 // This shouldn't occur, but we also shouldn't leak if it does. | |
16 if (IsValid()) | |
17 OnCancel(); | |
18 } | |
19 | |
20 void PrerenderHandle::OnNavigateAway() { | |
21 DCHECK(CalledOnValidThread()); | |
22 if (!IsValid()) | |
dominich
2012/07/13 15:01:43
I like this a lot. I wonder if we should be strict
gavinp
2012/07/13 16:42:43
I had the same thought, and yesterday had that cod
| |
23 return; | |
24 prerender_data_->OnNavigateAwayByHandle(); | |
25 prerender_data_.reset(); | |
26 } | |
27 | |
28 void PrerenderHandle::OnCancel() { | |
29 DCHECK(CalledOnValidThread()); | |
30 if (!IsValid()) | |
31 return; | |
32 prerender_data_->OnCancelByHandle(); | |
33 prerender_data_.reset(); | |
34 } | |
35 | |
36 bool PrerenderHandle::IsValid() const { | |
37 return prerender_data_ != NULL; | |
38 } | |
39 | |
40 bool PrerenderHandle::IsPending() const { | |
41 DCHECK(CalledOnValidThread()); | |
42 return prerender_data_ && !prerender_data_->contents(); | |
43 } | |
44 | |
45 bool PrerenderHandle::IsPrerendering() const { | |
46 DCHECK(CalledOnValidThread()); | |
47 return prerender_data_ && prerender_data_->contents(); | |
48 } | |
49 | |
50 bool PrerenderHandle::IsFinishedLoading() const { | |
51 DCHECK(CalledOnValidThread()); | |
52 if (!prerender_data_ || IsPending()) | |
53 return false; | |
54 return prerender_data_->contents()->has_finished_loading(); | |
55 } | |
56 | |
57 PrerenderHandle::PrerenderHandle( | |
58 PrerenderManager::PrerenderData* prerender_data) | |
59 : prerender_data_(prerender_data->AsWeakPtr()), | |
60 weak_ptr_factory_(this) { | |
61 prerender_data->OnNewHandle(); | |
62 } | |
63 | |
64 void PrerenderHandle::SwapPrerenderDataWith( | |
65 PrerenderHandle* other_prerender_handle) { | |
66 DCHECK(CalledOnValidThread()); | |
67 DCHECK(other_prerender_handle); | |
68 std::swap(prerender_data_, other_prerender_handle->prerender_data_); | |
69 } | |
70 | |
71 } // namespace prerender | |
OLD | NEW |