Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(34)

Side by Side Diff: chrome/browser/prerender/prerender_contents.cc

Issue 6879114: Cancels prerendering on prerendering RenderView crash (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Sync Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/i18n/rtl.h" 7 #include "base/i18n/rtl.h"
8 #include "base/process_util.h" 8 #include "base/process_util.h"
9 #include "base/task.h" 9 #include "base/task.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 } 240 }
241 241
242 ViewType::Type PrerenderContents::GetRenderViewType() const { 242 ViewType::Type PrerenderContents::GetRenderViewType() const {
243 return ViewType::BACKGROUND_CONTENTS; 243 return ViewType::BACKGROUND_CONTENTS;
244 } 244 }
245 245
246 int PrerenderContents::GetBrowserWindowID() const { 246 int PrerenderContents::GetBrowserWindowID() const {
247 return extension_misc::kUnknownWindowId; 247 return extension_misc::kUnknownWindowId;
248 } 248 }
249 249
250 void PrerenderContents::RenderViewGone(RenderViewHost* render_view_host,
251 base::TerminationStatus status,
252 int error_code) {
253 DCHECK_EQ(render_view_host_, render_view_host);
254 // Cancel the prerender if the RenderView crashes.
255 Destroy(FINAL_STATUS_RENDERER_CRASHED);
256 }
257
250 void PrerenderContents::DidNavigate( 258 void PrerenderContents::DidNavigate(
251 RenderViewHost* render_view_host, 259 RenderViewHost* render_view_host,
252 const ViewHostMsg_FrameNavigate_Params& params) { 260 const ViewHostMsg_FrameNavigate_Params& params) {
261 DCHECK_EQ(render_view_host_, render_view_host);
262
253 // We only care when the outer frame changes. 263 // We only care when the outer frame changes.
254 if (!PageTransition::IsMainFrame(params.transition)) 264 if (!PageTransition::IsMainFrame(params.transition))
255 return; 265 return;
256 266
257 // Store the navigation params. 267 // Store the navigation params.
258 ViewHostMsg_FrameNavigate_Params* p = new ViewHostMsg_FrameNavigate_Params(); 268 ViewHostMsg_FrameNavigate_Params* p = new ViewHostMsg_FrameNavigate_Params();
259 *p = params; 269 *p = params;
260 navigate_params_.reset(p); 270 navigate_params_.reset(p);
261 271
262 if (!AddAliasURL(params.url)) { 272 if (!AddAliasURL(params.url)) {
263 Destroy(FINAL_STATUS_HTTPS); 273 Destroy(FINAL_STATUS_HTTPS);
264 return; 274 return;
265 } 275 }
266 276
267 url_ = params.url; 277 url_ = params.url;
268 } 278 }
269 279
270 void PrerenderContents::UpdateTitle( 280 void PrerenderContents::UpdateTitle(
271 RenderViewHost* render_view_host, 281 RenderViewHost* render_view_host,
272 int32 page_id, 282 int32 page_id,
273 const base::i18n::String16WithDirection& title) { 283 const base::i18n::String16WithDirection& title) {
284 DCHECK_EQ(render_view_host_, render_view_host);
274 if (title.string().empty()) 285 if (title.string().empty())
275 return; 286 return;
276 287
277 // TODO(evan): use directionality of title. 288 // TODO(evan): use directionality of title.
278 // http://code.google.com/p/chromium/issues/detail?id=27094 289 // http://code.google.com/p/chromium/issues/detail?id=27094
279 title_ = title.string(); 290 title_ = title.string();
280 page_id_ = page_id; 291 page_id_ = page_id;
281 } 292 }
282 293
283 void PrerenderContents::RunJavaScriptMessage( 294 void PrerenderContents::RunJavaScriptMessage(
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 set_final_status(final_status); 531 set_final_status(final_status);
521 delete this; 532 delete this;
522 } 533 }
523 534
524 void PrerenderContents::OnJSOutOfMemory() { 535 void PrerenderContents::OnJSOutOfMemory() {
525 Destroy(FINAL_STATUS_JS_OUT_OF_MEMORY); 536 Destroy(FINAL_STATUS_JS_OUT_OF_MEMORY);
526 } 537 }
527 538
528 void PrerenderContents::RendererUnresponsive(RenderViewHost* render_view_host, 539 void PrerenderContents::RendererUnresponsive(RenderViewHost* render_view_host,
529 bool is_during_unload) { 540 bool is_during_unload) {
541 DCHECK_EQ(render_view_host_, render_view_host);
530 Destroy(FINAL_STATUS_RENDERER_UNRESPONSIVE); 542 Destroy(FINAL_STATUS_RENDERER_UNRESPONSIVE);
531 } 543 }
532 544
533 545
534 base::ProcessMetrics* PrerenderContents::MaybeGetProcessMetrics() { 546 base::ProcessMetrics* PrerenderContents::MaybeGetProcessMetrics() {
535 if (process_metrics_.get() == NULL) { 547 if (process_metrics_.get() == NULL) {
536 // If a PrenderContents hasn't started prerending, don't be fully formed. 548 // If a PrenderContents hasn't started prerending, don't be fully formed.
537 if (!render_view_host_ || !render_view_host_->process()) 549 if (!render_view_host_ || !render_view_host_->process())
538 return NULL; 550 return NULL;
539 base::ProcessHandle handle = render_view_host_->process()->GetHandle(); 551 base::ProcessHandle handle = render_view_host_->process()->GetHandle();
(...skipping 17 matching lines...) Expand all
557 return; 569 return;
558 570
559 size_t private_bytes, shared_bytes; 571 size_t private_bytes, shared_bytes;
560 if (metrics->GetMemoryBytes(&private_bytes, &shared_bytes)) { 572 if (metrics->GetMemoryBytes(&private_bytes, &shared_bytes)) {
561 if (private_bytes > kMaxPrerenderPrivateMB * 1024 * 1024) 573 if (private_bytes > kMaxPrerenderPrivateMB * 1024 * 1024)
562 Destroy(FINAL_STATUS_MEMORY_LIMIT_EXCEEDED); 574 Destroy(FINAL_STATUS_MEMORY_LIMIT_EXCEEDED);
563 } 575 }
564 } 576 }
565 577
566 } // namespace prerender 578 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698