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 "base/utf_string_conversions.h" | 7 #include "base/utf_string_conversions.h" |
8 #include "chrome/browser/background_contents_service.h" | 8 #include "chrome/browser/background_contents_service.h" |
9 #include "chrome/browser/browsing_instance.h" | 9 #include "chrome/browser/browsing_instance.h" |
10 #include "chrome/browser/prerender/prerender_final_status.h" | 10 #include "chrome/browser/prerender/prerender_final_status.h" |
(...skipping 30 matching lines...) Expand all Loading... |
41 const GURL& referrer) | 41 const GURL& referrer) |
42 : prerender_manager_(prerender_manager), | 42 : prerender_manager_(prerender_manager), |
43 render_view_host_(NULL), | 43 render_view_host_(NULL), |
44 prerender_url_(url), | 44 prerender_url_(url), |
45 referrer_(referrer), | 45 referrer_(referrer), |
46 profile_(profile), | 46 profile_(profile), |
47 page_id_(0), | 47 page_id_(0), |
48 has_stopped_loading_(false), | 48 has_stopped_loading_(false), |
49 final_status_(FINAL_STATUS_MAX) { | 49 final_status_(FINAL_STATUS_MAX) { |
50 DCHECK(prerender_manager != NULL); | 50 DCHECK(prerender_manager != NULL); |
51 AddAliasURL(prerender_url_); | 51 DCHECK(AddAliasURL(prerender_url_)); |
52 for (std::vector<GURL>::const_iterator it = alias_urls.begin(); | 52 for (std::vector<GURL>::const_iterator it = alias_urls.begin(); |
53 it != alias_urls.end(); | 53 it != alias_urls.end(); |
54 ++it) { | 54 ++it) { |
55 AddAliasURL(*it); | 55 DCHECK(AddAliasURL(*it)); |
56 } | 56 } |
57 } | 57 } |
58 | 58 |
59 // static | 59 // static |
60 PrerenderContents::Factory* PrerenderContents::CreateFactory() { | 60 PrerenderContents::Factory* PrerenderContents::CreateFactory() { |
61 return new PrerenderContentsFactoryImpl(); | 61 return new PrerenderContentsFactoryImpl(); |
62 } | 62 } |
63 | 63 |
64 void PrerenderContents::StartPrerendering() { | 64 void PrerenderContents::StartPrerendering() { |
65 DCHECK(profile_ != NULL); | 65 DCHECK(profile_ != NULL); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 const ViewHostMsg_FrameNavigate_Params& params) { | 144 const ViewHostMsg_FrameNavigate_Params& params) { |
145 // We only care when the outer frame changes. | 145 // We only care when the outer frame changes. |
146 if (!PageTransition::IsMainFrame(params.transition)) | 146 if (!PageTransition::IsMainFrame(params.transition)) |
147 return; | 147 return; |
148 | 148 |
149 // Store the navigation params. | 149 // Store the navigation params. |
150 ViewHostMsg_FrameNavigate_Params* p = new ViewHostMsg_FrameNavigate_Params(); | 150 ViewHostMsg_FrameNavigate_Params* p = new ViewHostMsg_FrameNavigate_Params(); |
151 *p = params; | 151 *p = params; |
152 navigate_params_.reset(p); | 152 navigate_params_.reset(p); |
153 | 153 |
| 154 if (!AddAliasURL(params.url)) { |
| 155 Destroy(FINAL_STATUS_HTTPS); |
| 156 return; |
| 157 } |
| 158 |
154 url_ = params.url; | 159 url_ = params.url; |
155 | |
156 AddAliasURL(url_); | |
157 } | 160 } |
158 | 161 |
159 void PrerenderContents::UpdateTitle(RenderViewHost* render_view_host, | 162 void PrerenderContents::UpdateTitle(RenderViewHost* render_view_host, |
160 int32 page_id, | 163 int32 page_id, |
161 const std::wstring& title) { | 164 const std::wstring& title) { |
162 if (title.empty()) { | 165 if (title.empty()) { |
163 return; | 166 return; |
164 } | 167 } |
165 | 168 |
166 title_ = WideToUTF16Hack(title); | 169 title_ = WideToUTF16Hack(title); |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
333 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateFavIconURL, OnUpdateFavIconURL) | 336 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateFavIconURL, OnUpdateFavIconURL) |
334 IPC_MESSAGE_UNHANDLED(handled = false) | 337 IPC_MESSAGE_UNHANDLED(handled = false) |
335 IPC_END_MESSAGE_MAP_EX() | 338 IPC_END_MESSAGE_MAP_EX() |
336 | 339 |
337 return handled; | 340 return handled; |
338 } | 341 } |
339 | 342 |
340 void PrerenderContents::OnDidStartProvisionalLoadForFrame(int64 frame_id, | 343 void PrerenderContents::OnDidStartProvisionalLoadForFrame(int64 frame_id, |
341 bool is_main_frame, | 344 bool is_main_frame, |
342 const GURL& url) { | 345 const GURL& url) { |
343 if (is_main_frame) | 346 if (is_main_frame) { |
344 AddAliasURL(url); | 347 if (!AddAliasURL(url)) { |
| 348 Destroy(FINAL_STATUS_HTTPS); |
| 349 return; |
| 350 } |
| 351 } |
345 } | 352 } |
346 | 353 |
347 void PrerenderContents::OnDidRedirectProvisionalLoad(int32 page_id, | 354 void PrerenderContents::OnDidRedirectProvisionalLoad(int32 page_id, |
348 const GURL& source_url, | 355 const GURL& source_url, |
349 const GURL& target_url) { | 356 const GURL& target_url) { |
350 AddAliasURL(target_url); | 357 if (!AddAliasURL(target_url)) |
| 358 Destroy(FINAL_STATUS_HTTPS); |
351 } | 359 } |
352 | 360 |
353 void PrerenderContents::OnUpdateFavIconURL(int32 page_id, | 361 void PrerenderContents::OnUpdateFavIconURL(int32 page_id, |
354 const GURL& icon_url) { | 362 const GURL& icon_url) { |
355 icon_url_ = icon_url; | 363 icon_url_ = icon_url; |
356 } | 364 } |
357 | 365 |
358 void PrerenderContents::AddAliasURL(const GURL& url) { | 366 bool PrerenderContents::AddAliasURL(const GURL& url) { |
| 367 if (!url.SchemeIs("http")) |
| 368 return false; |
359 alias_urls_.push_back(url); | 369 alias_urls_.push_back(url); |
| 370 return true; |
360 } | 371 } |
361 | 372 |
362 bool PrerenderContents::MatchesURL(const GURL& url) const { | 373 bool PrerenderContents::MatchesURL(const GURL& url) const { |
363 return std::find(alias_urls_.begin(), alias_urls_.end(), url) | 374 return std::find(alias_urls_.begin(), alias_urls_.end(), url) |
364 != alias_urls_.end(); | 375 != alias_urls_.end(); |
365 } | 376 } |
366 | 377 |
367 void PrerenderContents::DidStopLoading() { | 378 void PrerenderContents::DidStopLoading() { |
368 has_stopped_loading_ = true; | 379 has_stopped_loading_ = true; |
369 } | 380 } |
370 | 381 |
371 void PrerenderContents::Destroy(FinalStatus final_status) { | 382 void PrerenderContents::Destroy(FinalStatus final_status) { |
372 prerender_manager_->RemoveEntry(this); | 383 prerender_manager_->RemoveEntry(this); |
373 set_final_status(final_status); | 384 set_final_status(final_status); |
374 delete this; | 385 delete this; |
375 } | 386 } |
376 | 387 |
377 } // namespace prerender | 388 } // namespace prerender |
OLD | NEW |