| 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 |