| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <functional> | 10 #include <functional> |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 }; | 177 }; |
| 178 | 178 |
| 179 void PrerenderContents::Observer::OnPrerenderStopLoading( | 179 void PrerenderContents::Observer::OnPrerenderStopLoading( |
| 180 PrerenderContents* contents) { | 180 PrerenderContents* contents) { |
| 181 } | 181 } |
| 182 | 182 |
| 183 void PrerenderContents::Observer::OnPrerenderDomContentLoaded( | 183 void PrerenderContents::Observer::OnPrerenderDomContentLoaded( |
| 184 PrerenderContents* contents) { | 184 PrerenderContents* contents) { |
| 185 } | 185 } |
| 186 | 186 |
| 187 void PrerenderContents::Observer::OnPrerenderCreatedMatchCompleteReplacement( | |
| 188 PrerenderContents* contents, PrerenderContents* replacement) { | |
| 189 } | |
| 190 | |
| 191 PrerenderContents::Observer::Observer() { | 187 PrerenderContents::Observer::Observer() { |
| 192 } | 188 } |
| 193 | 189 |
| 194 PrerenderContents::Observer::~Observer() { | 190 PrerenderContents::Observer::~Observer() { |
| 195 } | 191 } |
| 196 | 192 |
| 197 PrerenderContents::PrerenderContents( | 193 PrerenderContents::PrerenderContents( |
| 198 PrerenderManager* prerender_manager, | 194 PrerenderManager* prerender_manager, |
| 199 Profile* profile, | 195 Profile* profile, |
| 200 const GURL& url, | 196 const GURL& url, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 211 final_status_(FINAL_STATUS_MAX), | 207 final_status_(FINAL_STATUS_MAX), |
| 212 match_complete_status_(MATCH_COMPLETE_DEFAULT), | 208 match_complete_status_(MATCH_COMPLETE_DEFAULT), |
| 213 prerendering_has_been_cancelled_(false), | 209 prerendering_has_been_cancelled_(false), |
| 214 child_id_(-1), | 210 child_id_(-1), |
| 215 route_id_(-1), | 211 route_id_(-1), |
| 216 origin_(origin), | 212 origin_(origin), |
| 217 network_bytes_(0) { | 213 network_bytes_(0) { |
| 218 DCHECK(prerender_manager != NULL); | 214 DCHECK(prerender_manager != NULL); |
| 219 } | 215 } |
| 220 | 216 |
| 221 PrerenderContents* PrerenderContents::CreateMatchCompleteReplacement() { | |
| 222 PrerenderContents* new_contents = prerender_manager_->CreatePrerenderContents( | |
| 223 prerender_url(), referrer(), origin()); | |
| 224 | |
| 225 new_contents->load_start_time_ = load_start_time_; | |
| 226 new_contents->session_storage_namespace_id_ = session_storage_namespace_id_; | |
| 227 new_contents->set_match_complete_status( | |
| 228 PrerenderContents::MATCH_COMPLETE_REPLACEMENT_PENDING); | |
| 229 | |
| 230 const bool did_init = new_contents->Init(); | |
| 231 DCHECK(did_init); | |
| 232 DCHECK_EQ(alias_urls_.front(), new_contents->alias_urls_.front()); | |
| 233 DCHECK_EQ(1u, new_contents->alias_urls_.size()); | |
| 234 new_contents->alias_urls_ = alias_urls_; | |
| 235 // Erase all but the first alias URL; the replacement has adopted the | |
| 236 // remainder without increasing the renderer-side reference count. | |
| 237 alias_urls_.resize(1); | |
| 238 new_contents->set_match_complete_status( | |
| 239 PrerenderContents::MATCH_COMPLETE_REPLACEMENT); | |
| 240 NotifyPrerenderCreatedMatchCompleteReplacement(new_contents); | |
| 241 return new_contents; | |
| 242 } | |
| 243 | |
| 244 bool PrerenderContents::Init() { | 217 bool PrerenderContents::Init() { |
| 245 return AddAliasURL(prerender_url_); | 218 return AddAliasURL(prerender_url_); |
| 246 } | 219 } |
| 247 | 220 |
| 248 // static | 221 // static |
| 249 PrerenderContents::Factory* PrerenderContents::CreateFactory() { | 222 PrerenderContents::Factory* PrerenderContents::CreateFactory() { |
| 250 return new PrerenderContentsFactoryImpl(); | 223 return new PrerenderContentsFactoryImpl(); |
| 251 } | 224 } |
| 252 | 225 |
| 253 // static | 226 // static |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 468 FOR_EACH_OBSERVER(Observer, observer_list_, | 441 FOR_EACH_OBSERVER(Observer, observer_list_, |
| 469 OnPrerenderDomContentLoaded(this)); | 442 OnPrerenderDomContentLoaded(this)); |
| 470 } | 443 } |
| 471 | 444 |
| 472 void PrerenderContents::NotifyPrerenderStop() { | 445 void PrerenderContents::NotifyPrerenderStop() { |
| 473 DCHECK_NE(FINAL_STATUS_MAX, final_status_); | 446 DCHECK_NE(FINAL_STATUS_MAX, final_status_); |
| 474 FOR_EACH_OBSERVER(Observer, observer_list_, OnPrerenderStop(this)); | 447 FOR_EACH_OBSERVER(Observer, observer_list_, OnPrerenderStop(this)); |
| 475 observer_list_.Clear(); | 448 observer_list_.Clear(); |
| 476 } | 449 } |
| 477 | 450 |
| 478 void PrerenderContents::NotifyPrerenderCreatedMatchCompleteReplacement( | |
| 479 PrerenderContents* replacement) { | |
| 480 FOR_EACH_OBSERVER(Observer, observer_list_, | |
| 481 OnPrerenderCreatedMatchCompleteReplacement(this, | |
| 482 replacement)); | |
| 483 } | |
| 484 | |
| 485 bool PrerenderContents::OnMessageReceived(const IPC::Message& message) { | 451 bool PrerenderContents::OnMessageReceived(const IPC::Message& message) { |
| 486 bool handled = true; | 452 bool handled = true; |
| 487 // The following messages we do want to consume. | 453 // The following messages we do want to consume. |
| 488 IPC_BEGIN_MESSAGE_MAP(PrerenderContents, message) | 454 IPC_BEGIN_MESSAGE_MAP(PrerenderContents, message) |
| 489 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_CancelPrerenderForPrinting, | 455 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_CancelPrerenderForPrinting, |
| 490 OnCancelPrerenderForPrinting) | 456 OnCancelPrerenderForPrinting) |
| 491 IPC_MESSAGE_UNHANDLED(handled = false) | 457 IPC_MESSAGE_UNHANDLED(handled = false) |
| 492 IPC_END_MESSAGE_MAP() | 458 IPC_END_MESSAGE_MAP() |
| 493 | 459 |
| 494 return handled; | 460 return handled; |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 633 | 599 |
| 634 if (prerendering_has_been_cancelled_) | 600 if (prerendering_has_been_cancelled_) |
| 635 return; | 601 return; |
| 636 | 602 |
| 637 SetFinalStatus(final_status); | 603 SetFinalStatus(final_status); |
| 638 | 604 |
| 639 prerendering_has_been_cancelled_ = true; | 605 prerendering_has_been_cancelled_ = true; |
| 640 prerender_manager_->AddToHistory(this); | 606 prerender_manager_->AddToHistory(this); |
| 641 prerender_manager_->MoveEntryToPendingDelete(this, final_status); | 607 prerender_manager_->MoveEntryToPendingDelete(this, final_status); |
| 642 | 608 |
| 643 // Note that if this PrerenderContents was made into a MatchComplete | 609 if (!prerender_manager_->IsControlGroup() && prerendering_has_started()) |
| 644 // replacement by MoveEntryToPendingDelete, NotifyPrerenderStop will | |
| 645 // not reach the PrerenderHandle. Rather | |
| 646 // OnPrerenderCreatedMatchCompleteReplacement will propogate that | |
| 647 // information to the referer. | |
| 648 if (!prerender_manager_->IsControlGroup() && | |
| 649 (prerendering_has_started() || | |
| 650 match_complete_status() == MATCH_COMPLETE_REPLACEMENT)) { | |
| 651 NotifyPrerenderStop(); | 610 NotifyPrerenderStop(); |
| 652 } | |
| 653 } | 611 } |
| 654 | 612 |
| 655 base::ProcessMetrics* PrerenderContents::MaybeGetProcessMetrics() { | 613 base::ProcessMetrics* PrerenderContents::MaybeGetProcessMetrics() { |
| 656 if (process_metrics_.get() == NULL) { | 614 if (process_metrics_.get() == NULL) { |
| 657 // If a PrenderContents hasn't started prerending, don't be fully formed. | 615 // If a PrenderContents hasn't started prerending, don't be fully formed. |
| 658 if (!GetRenderViewHost() || !GetRenderViewHost()->GetProcess()) | 616 if (!GetRenderViewHost() || !GetRenderViewHost()->GetProcess()) |
| 659 return NULL; | 617 return NULL; |
| 660 base::ProcessHandle handle = GetRenderViewHost()->GetProcess()->GetHandle(); | 618 base::ProcessHandle handle = GetRenderViewHost()->GetProcess()->GetHandle(); |
| 661 if (handle == base::kNullProcessHandle) | 619 if (handle == base::kNullProcessHandle) |
| 662 return NULL; | 620 return NULL; |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 760 void PrerenderContents::AddResourceThrottle( | 718 void PrerenderContents::AddResourceThrottle( |
| 761 const base::WeakPtr<PrerenderResourceThrottle>& throttle) { | 719 const base::WeakPtr<PrerenderResourceThrottle>& throttle) { |
| 762 resource_throttles_.push_back(throttle); | 720 resource_throttles_.push_back(throttle); |
| 763 } | 721 } |
| 764 | 722 |
| 765 void PrerenderContents::AddNetworkBytes(int64_t bytes) { | 723 void PrerenderContents::AddNetworkBytes(int64_t bytes) { |
| 766 network_bytes_ += bytes; | 724 network_bytes_ += bytes; |
| 767 } | 725 } |
| 768 | 726 |
| 769 } // namespace prerender | 727 } // namespace prerender |
| OLD | NEW |