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 "chrome/browser/prerender/prerender_contents.h" | 5 #include "chrome/browser/prerender/prerender_contents.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/process_util.h" | 10 #include "base/process_util.h" |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 GURL url_; | 56 GURL url_; |
57 }; | 57 }; |
58 | 58 |
59 } // end namespace | 59 } // end namespace |
60 | 60 |
61 class PrerenderContentsFactoryImpl : public PrerenderContents::Factory { | 61 class PrerenderContentsFactoryImpl : public PrerenderContents::Factory { |
62 public: | 62 public: |
63 virtual PrerenderContents* CreatePrerenderContents( | 63 virtual PrerenderContents* CreatePrerenderContents( |
64 PrerenderManager* prerender_manager, PrerenderTracker* prerender_tracker, | 64 PrerenderManager* prerender_manager, PrerenderTracker* prerender_tracker, |
65 Profile* profile, const GURL& url, const GURL& referrer, | 65 Profile* profile, const GURL& url, const GURL& referrer, |
66 Origin origin) OVERRIDE { | 66 Origin origin, uint8 experiment_id) OVERRIDE { |
67 return new PrerenderContents(prerender_manager, prerender_tracker, profile, | 67 return new PrerenderContents(prerender_manager, prerender_tracker, profile, |
68 url, referrer, origin); | 68 url, referrer, origin, experiment_id); |
69 } | 69 } |
70 }; | 70 }; |
71 | 71 |
72 // TabContentsDelegateImpl ----------------------------------------------------- | 72 // TabContentsDelegateImpl ----------------------------------------------------- |
73 | 73 |
74 class PrerenderContents::TabContentsDelegateImpl | 74 class PrerenderContents::TabContentsDelegateImpl |
75 : public TabContentsDelegate { | 75 : public TabContentsDelegate { |
76 public: | 76 public: |
77 explicit TabContentsDelegateImpl(PrerenderContents* prerender_contents) : | 77 explicit TabContentsDelegateImpl(PrerenderContents* prerender_contents) : |
78 prerender_contents_(prerender_contents) { | 78 prerender_contents_(prerender_contents) { |
(...skipping 23 matching lines...) Expand all Loading... |
102 AddPageVector add_page_vector_; | 102 AddPageVector add_page_vector_; |
103 | 103 |
104 PrerenderContents* prerender_contents_; | 104 PrerenderContents* prerender_contents_; |
105 }; | 105 }; |
106 | 106 |
107 PrerenderContents::PrerenderContents(PrerenderManager* prerender_manager, | 107 PrerenderContents::PrerenderContents(PrerenderManager* prerender_manager, |
108 PrerenderTracker* prerender_tracker, | 108 PrerenderTracker* prerender_tracker, |
109 Profile* profile, | 109 Profile* profile, |
110 const GURL& url, | 110 const GURL& url, |
111 const GURL& referrer, | 111 const GURL& referrer, |
112 Origin origin) | 112 Origin origin, |
| 113 uint8 experiment_id) |
113 : prerender_manager_(prerender_manager), | 114 : prerender_manager_(prerender_manager), |
114 prerender_tracker_(prerender_tracker), | 115 prerender_tracker_(prerender_tracker), |
115 prerender_url_(url), | 116 prerender_url_(url), |
116 referrer_(referrer), | 117 referrer_(referrer), |
117 profile_(profile), | 118 profile_(profile), |
118 page_id_(0), | 119 page_id_(0), |
119 has_stopped_loading_(false), | 120 has_stopped_loading_(false), |
120 final_status_(FINAL_STATUS_MAX), | 121 final_status_(FINAL_STATUS_MAX), |
121 prerendering_has_started_(false), | 122 prerendering_has_started_(false), |
122 prerendering_has_been_cancelled_(false), | 123 prerendering_has_been_cancelled_(false), |
123 child_id_(-1), | 124 child_id_(-1), |
124 route_id_(-1), | 125 route_id_(-1), |
125 starting_page_id_(-1), | 126 starting_page_id_(-1), |
126 origin_(origin) { | 127 origin_(origin), |
| 128 experiment_id_(experiment_id) { |
127 DCHECK(prerender_manager != NULL); | 129 DCHECK(prerender_manager != NULL); |
128 } | 130 } |
129 | 131 |
130 bool PrerenderContents::Init() { | 132 bool PrerenderContents::Init() { |
131 return AddAliasURL(prerender_url_); | 133 return AddAliasURL(prerender_url_); |
132 } | 134 } |
133 | 135 |
134 // static | 136 // static |
135 PrerenderContents::Factory* PrerenderContents::CreateFactory() { | 137 PrerenderContents::Factory* PrerenderContents::CreateFactory() { |
136 return new PrerenderContentsFactoryImpl(); | 138 return new PrerenderContentsFactoryImpl(); |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 PrerenderContents::~PrerenderContents() { | 289 PrerenderContents::~PrerenderContents() { |
288 DCHECK(final_status_ != FINAL_STATUS_MAX); | 290 DCHECK(final_status_ != FINAL_STATUS_MAX); |
289 DCHECK(prerendering_has_been_cancelled_ || | 291 DCHECK(prerendering_has_been_cancelled_ || |
290 final_status_ == FINAL_STATUS_USED || | 292 final_status_ == FINAL_STATUS_USED || |
291 final_status_ == FINAL_STATUS_CONTROL_GROUP); | 293 final_status_ == FINAL_STATUS_CONTROL_GROUP); |
292 DCHECK(origin_ != ORIGIN_MAX); | 294 DCHECK(origin_ != ORIGIN_MAX); |
293 | 295 |
294 // If we haven't even started prerendering, we were just in the control | 296 // If we haven't even started prerendering, we were just in the control |
295 // group, which means we do not want to record the status. | 297 // group, which means we do not want to record the status. |
296 if (prerendering_has_started()) | 298 if (prerendering_has_started()) |
297 RecordFinalStatus(origin_, final_status_); | 299 prerender_manager_->RecordFinalStatus(origin_, experiment_id_, |
| 300 final_status_); |
298 | 301 |
299 if (child_id_ != -1 && route_id_ != -1) | 302 if (child_id_ != -1 && route_id_ != -1) |
300 prerender_tracker_->OnPrerenderingFinished(child_id_, route_id_); | 303 prerender_tracker_->OnPrerenderingFinished(child_id_, route_id_); |
301 | 304 |
302 // If we still have a TabContents, clean up anything we need to and then | 305 // If we still have a TabContents, clean up anything we need to and then |
303 // destroy it. | 306 // destroy it. |
304 if (prerender_contents_.get()) | 307 if (prerender_contents_.get()) |
305 delete ReleasePrerenderContents(); | 308 delete ReleasePrerenderContents(); |
306 | 309 |
307 // The following URLs are no longer rendering. | 310 // The following URLs are no longer rendering. |
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
590 return NULL; | 593 return NULL; |
591 DictionaryValue* dict_value = new DictionaryValue(); | 594 DictionaryValue* dict_value = new DictionaryValue(); |
592 dict_value->SetString("url", prerender_url_.spec()); | 595 dict_value->SetString("url", prerender_url_.spec()); |
593 base::TimeTicks current_time = base::TimeTicks::Now(); | 596 base::TimeTicks current_time = base::TimeTicks::Now(); |
594 base::TimeDelta duration = current_time - load_start_time_; | 597 base::TimeDelta duration = current_time - load_start_time_; |
595 dict_value->SetInteger("duration", duration.InSeconds()); | 598 dict_value->SetInteger("duration", duration.InSeconds()); |
596 return dict_value; | 599 return dict_value; |
597 } | 600 } |
598 | 601 |
599 } // namespace prerender | 602 } // namespace prerender |
OLD | NEW |