OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 <functional> | 8 #include <functional> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 // prerenders. | 162 // prerenders. |
163 prerender_contents_->Destroy(FINAL_STATUS_REGISTER_PROTOCOL_HANDLER); | 163 prerender_contents_->Destroy(FINAL_STATUS_REGISTER_PROTOCOL_HANDLER); |
164 } | 164 } |
165 | 165 |
166 private: | 166 private: |
167 PrerenderContents* prerender_contents_; | 167 PrerenderContents* prerender_contents_; |
168 }; | 168 }; |
169 | 169 |
170 void PrerenderContents::AddPendingPrerender( | 170 void PrerenderContents::AddPendingPrerender( |
171 const base::WeakPtr<PrerenderHandle> weak_prerender_handle, | 171 const base::WeakPtr<PrerenderHandle> weak_prerender_handle, |
| 172 const Origin origin, |
172 const GURL& url, | 173 const GURL& url, |
173 const content::Referrer& referrer, | 174 const content::Referrer& referrer, |
174 const gfx::Size& size) { | 175 const gfx::Size& size) { |
175 pending_prerenders_.push_back( | 176 pending_prerenders_.push_back( |
176 PendingPrerenderInfo(weak_prerender_handle, url, referrer, size)); | 177 PendingPrerenderInfo(weak_prerender_handle, origin, url, referrer, size)); |
177 } | 178 } |
178 | 179 |
179 bool PrerenderContents::IsPendingEntry( | 180 bool PrerenderContents::IsPendingEntry( |
180 const PrerenderHandle& prerender_handle) const { | 181 const PrerenderHandle& prerender_handle) const { |
181 for (std::vector<PendingPrerenderInfo>::const_iterator it = | 182 for (std::vector<PendingPrerenderInfo>::const_iterator it = |
182 pending_prerenders_.begin(); | 183 pending_prerenders_.begin(); |
183 it != pending_prerenders_.end(); | 184 it != pending_prerenders_.end(); |
184 ++it) { | 185 ++it) { |
185 if (it->weak_prerender_handle.get() == &prerender_handle) | 186 if (it->weak_prerender_handle.get() == &prerender_handle) |
186 return true; | 187 return true; |
(...skipping 12 matching lines...) Expand all Loading... |
199 DCHECK(child_id_ == -1 || session_storage_namespace); | 200 DCHECK(child_id_ == -1 || session_storage_namespace); |
200 | 201 |
201 std::vector<PendingPrerenderInfo> pending_prerender_list; | 202 std::vector<PendingPrerenderInfo> pending_prerender_list; |
202 pending_prerender_list.swap(pending_prerenders_); | 203 pending_prerender_list.swap(pending_prerenders_); |
203 for (std::vector<PendingPrerenderInfo>::iterator it = | 204 for (std::vector<PendingPrerenderInfo>::iterator it = |
204 pending_prerender_list.begin(); | 205 pending_prerender_list.begin(); |
205 it != pending_prerender_list.end(); | 206 it != pending_prerender_list.end(); |
206 ++it) { | 207 ++it) { |
207 if (it->weak_prerender_handle && it->weak_prerender_handle->IsValid()) { | 208 if (it->weak_prerender_handle && it->weak_prerender_handle->IsValid()) { |
208 prerender_manager_->StartPendingPrerender( | 209 prerender_manager_->StartPendingPrerender( |
209 it->weak_prerender_handle.get(), ORIGIN_LINK_REL_PRERENDER, child_id_, | 210 it->weak_prerender_handle.get(), it->origin, child_id_, |
210 it->url, it->referrer, it->size, session_storage_namespace); | 211 it->url, it->referrer, it->size, session_storage_namespace); |
211 } | 212 } |
212 } | 213 } |
213 } | 214 } |
214 | 215 |
215 PrerenderContents::PendingPrerenderInfo::PendingPrerenderInfo( | 216 PrerenderContents::PendingPrerenderInfo::PendingPrerenderInfo( |
216 const base::WeakPtr<PrerenderHandle> weak_prerender_handle, | 217 const base::WeakPtr<PrerenderHandle> weak_prerender_handle, |
| 218 const Origin origin, |
217 const GURL& url, | 219 const GURL& url, |
218 const content::Referrer& referrer, | 220 const content::Referrer& referrer, |
219 const gfx::Size& size) | 221 const gfx::Size& size) |
220 : weak_prerender_handle(weak_prerender_handle), | 222 : weak_prerender_handle(weak_prerender_handle), |
| 223 origin(origin), |
221 url(url), | 224 url(url), |
222 referrer(referrer), | 225 referrer(referrer), |
223 size(size) { | 226 size(size) { |
224 } | 227 } |
225 | 228 |
226 PrerenderContents::PendingPrerenderInfo::~PendingPrerenderInfo() { | 229 PrerenderContents::PendingPrerenderInfo::~PendingPrerenderInfo() { |
227 } | 230 } |
228 | 231 |
229 PrerenderContents::PrerenderContents( | 232 PrerenderContents::PrerenderContents( |
230 PrerenderManager* prerender_manager, | 233 PrerenderManager* prerender_manager, |
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
515 DCHECK_NE(MATCH_COMPLETE_REPLACEMENT_PENDING, match_complete_status_); | 518 DCHECK_NE(MATCH_COMPLETE_REPLACEMENT_PENDING, match_complete_status_); |
516 Destroy(FINAL_STATUS_UNSUPPORTED_SCHEME); | 519 Destroy(FINAL_STATUS_UNSUPPORTED_SCHEME); |
517 return false; | 520 return false; |
518 } | 521 } |
519 if (https && !prerender_manager_->config().https_allowed) { | 522 if (https && !prerender_manager_->config().https_allowed) { |
520 DCHECK_NE(MATCH_COMPLETE_REPLACEMENT_PENDING, match_complete_status_); | 523 DCHECK_NE(MATCH_COMPLETE_REPLACEMENT_PENDING, match_complete_status_); |
521 Destroy(FINAL_STATUS_HTTPS); | 524 Destroy(FINAL_STATUS_HTTPS); |
522 return false; | 525 return false; |
523 } | 526 } |
524 if (match_complete_status_ != MATCH_COMPLETE_REPLACEMENT_PENDING && | 527 if (match_complete_status_ != MATCH_COMPLETE_REPLACEMENT_PENDING && |
525 prerender_manager_->HasRecentlyBeenNavigatedTo(url)) { | 528 prerender_manager_->HasRecentlyBeenNavigatedTo(origin(), url)) { |
526 Destroy(FINAL_STATUS_RECENTLY_VISITED); | 529 Destroy(FINAL_STATUS_RECENTLY_VISITED); |
527 return false; | 530 return false; |
528 } | 531 } |
529 | 532 |
530 alias_urls_.push_back(url); | 533 alias_urls_.push_back(url); |
531 InformRenderProcessAboutPrerender(url, true, creator_child_id_); | 534 InformRenderProcessAboutPrerender(url, true, creator_child_id_); |
532 return true; | 535 return true; |
533 } | 536 } |
534 | 537 |
535 void PrerenderContents::AddAliasURLsFromOtherPrerenderContents( | 538 void PrerenderContents::AddAliasURLsFromOtherPrerenderContents( |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
705 bool PrerenderContents::IsCrossSiteNavigationPending() const { | 708 bool PrerenderContents::IsCrossSiteNavigationPending() const { |
706 if (!prerender_contents_.get() || !prerender_contents_->web_contents()) | 709 if (!prerender_contents_.get() || !prerender_contents_->web_contents()) |
707 return false; | 710 return false; |
708 const WebContents* web_contents = prerender_contents_->web_contents(); | 711 const WebContents* web_contents = prerender_contents_->web_contents(); |
709 return (web_contents->GetSiteInstance() != | 712 return (web_contents->GetSiteInstance() != |
710 web_contents->GetPendingSiteInstance()); | 713 web_contents->GetPendingSiteInstance()); |
711 } | 714 } |
712 | 715 |
713 | 716 |
714 } // namespace prerender | 717 } // namespace prerender |
OLD | NEW |