| 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 485 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 496 } | 496 } |
| 497 | 497 |
| 498 void PrerenderContents::DidStopLoading() { | 498 void PrerenderContents::DidStopLoading() { |
| 499 has_stopped_loading_ = true; | 499 has_stopped_loading_ = true; |
| 500 } | 500 } |
| 501 | 501 |
| 502 void PrerenderContents::Destroy(FinalStatus final_status) { | 502 void PrerenderContents::Destroy(FinalStatus final_status) { |
| 503 if (prerendering_has_been_cancelled_) | 503 if (prerendering_has_been_cancelled_) |
| 504 return; | 504 return; |
| 505 | 505 |
| 506 prerendering_has_been_cancelled_ = true; | |
| 507 prerender_manager_->MoveEntryToPendingDelete(this); | |
| 508 | |
| 509 if (child_id_ != -1 && route_id_ != -1) { | 506 if (child_id_ != -1 && route_id_ != -1) { |
| 510 // Cancel the prerender in the PrerenderTracker. This is needed | 507 // Cancel the prerender in the PrerenderTracker. This is needed |
| 511 // because destroy may be called directly from the UI thread without calling | 508 // because destroy may be called directly from the UI thread without calling |
| 512 // TryCancel(). This is difficult to completely avoid, since prerendering | 509 // TryCancel(). This is difficult to completely avoid, since prerendering |
| 513 // can be cancelled before a RenderView is created. | 510 // can be cancelled before a RenderView is created. |
| 514 bool is_cancelled = prerender_tracker_->TryCancel( | 511 bool is_cancelled = prerender_tracker_->TryCancel( |
| 515 child_id_, route_id_, final_status); | 512 child_id_, route_id_, final_status); |
| 516 CHECK(is_cancelled); | 513 CHECK(is_cancelled); |
| 517 | 514 |
| 518 // A different final status may have been set already from another thread. | 515 // A different final status may have been set already from another thread. |
| 519 // If so, use it instead. | 516 // If so, use it instead. |
| 520 if (!prerender_tracker_->GetFinalStatus(child_id_, route_id_, | 517 if (!prerender_tracker_->GetFinalStatus(child_id_, route_id_, |
| 521 &final_status)) { | 518 &final_status)) { |
| 522 NOTREACHED(); | 519 NOTREACHED(); |
| 523 } | 520 } |
| 524 } | 521 } |
| 525 set_final_status(final_status); | 522 set_final_status(final_status); |
| 526 | 523 |
| 524 prerendering_has_been_cancelled_ = true; |
| 525 // This has to be done after setting the final status, as it adds the |
| 526 // prerender to the history. |
| 527 prerender_manager_->MoveEntryToPendingDelete(this); |
| 528 |
| 527 // We may destroy the PrerenderContents before we have initialized the | 529 // We may destroy the PrerenderContents before we have initialized the |
| 528 // RenderViewHost. Otherwise set the Observer's PrerenderContents to NULL to | 530 // RenderViewHost. Otherwise set the Observer's PrerenderContents to NULL to |
| 529 // avoid any more messages being sent. | 531 // avoid any more messages being sent. |
| 530 if (render_view_host_observer_.get()) | 532 if (render_view_host_observer_.get()) |
| 531 render_view_host_observer_->set_prerender_contents(NULL); | 533 render_view_host_observer_->set_prerender_contents(NULL); |
| 532 } | 534 } |
| 533 | 535 |
| 534 base::ProcessMetrics* PrerenderContents::MaybeGetProcessMetrics() { | 536 base::ProcessMetrics* PrerenderContents::MaybeGetProcessMetrics() { |
| 535 if (process_metrics_.get() == NULL) { | 537 if (process_metrics_.get() == NULL) { |
| 536 // If a PrenderContents hasn't started prerending, don't be fully formed. | 538 // If a PrenderContents hasn't started prerending, don't be fully formed. |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 596 return NULL; | 598 return NULL; |
| 597 DictionaryValue* dict_value = new DictionaryValue(); | 599 DictionaryValue* dict_value = new DictionaryValue(); |
| 598 dict_value->SetString("url", prerender_url_.spec()); | 600 dict_value->SetString("url", prerender_url_.spec()); |
| 599 base::TimeTicks current_time = base::TimeTicks::Now(); | 601 base::TimeTicks current_time = base::TimeTicks::Now(); |
| 600 base::TimeDelta duration = current_time - load_start_time_; | 602 base::TimeDelta duration = current_time - load_start_time_; |
| 601 dict_value->SetInteger("duration", duration.InSeconds()); | 603 dict_value->SetInteger("duration", duration.InSeconds()); |
| 602 return dict_value; | 604 return dict_value; |
| 603 } | 605 } |
| 604 | 606 |
| 605 } // namespace prerender | 607 } // namespace prerender |
| OLD | NEW |