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

Side by Side Diff: content/browser/frame_host/render_frame_host_impl.cc

Issue 2737553003: Remove ChildProcess.HangRendererType. (Closed)
Patch Set: rebase to tot Created 3 years, 9 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "content/browser/frame_host/render_frame_host_impl.h" 5 #include "content/browser/frame_host/render_frame_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 2526 matching lines...) Expand 10 before | Expand all | Expand 10 after
2537 // If there is a JavaScript dialog up, don't bother sending the renderer 2537 // If there is a JavaScript dialog up, don't bother sending the renderer
2538 // the unload event because it is known unresponsive, waiting for the 2538 // the unload event because it is known unresponsive, waiting for the
2539 // reply from the dialog. 2539 // reply from the dialog.
2540 SimulateBeforeUnloadAck(); 2540 SimulateBeforeUnloadAck();
2541 } else { 2541 } else {
2542 // Increment the in-flight event count, to ensure that input events won't 2542 // Increment the in-flight event count, to ensure that input events won't
2543 // cancel the timeout timer. 2543 // cancel the timeout timer.
2544 render_view_host_->GetWidget()->increment_in_flight_event_count(); 2544 render_view_host_->GetWidget()->increment_in_flight_event_count();
2545 render_view_host_->GetWidget()->StartHangMonitorTimeout( 2545 render_view_host_->GetWidget()->StartHangMonitorTimeout(
2546 TimeDelta::FromMilliseconds(RenderViewHostImpl::kUnloadTimeoutMS), 2546 TimeDelta::FromMilliseconds(RenderViewHostImpl::kUnloadTimeoutMS),
2547 blink::WebInputEvent::Undefined, 2547 blink::WebInputEvent::Undefined);
2548 RendererUnresponsiveType::RENDERER_UNRESPONSIVE_BEFORE_UNLOAD);
2549 send_before_unload_start_time_ = base::TimeTicks::Now(); 2548 send_before_unload_start_time_ = base::TimeTicks::Now();
2550 Send(new FrameMsg_BeforeUnload(routing_id_, is_reload)); 2549 Send(new FrameMsg_BeforeUnload(routing_id_, is_reload));
2551 } 2550 }
2552 } 2551 }
2553 } 2552 }
2554 2553
2555 void RenderFrameHostImpl::SimulateBeforeUnloadAck() { 2554 void RenderFrameHostImpl::SimulateBeforeUnloadAck() {
2556 DCHECK(is_waiting_for_beforeunload_ack_); 2555 DCHECK(is_waiting_for_beforeunload_ack_);
2557 base::TimeTicks approx_renderer_start_time = send_before_unload_start_time_; 2556 base::TimeTicks approx_renderer_start_time = send_before_unload_start_time_;
2558 OnBeforeUnloadACK(true, approx_renderer_start_time, base::TimeTicks::Now()); 2557 OnBeforeUnloadACK(true, approx_renderer_start_time, base::TimeTicks::Now());
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
2612 const base::string16& user_input, 2611 const base::string16& user_input,
2613 bool is_before_unload_dialog, 2612 bool is_before_unload_dialog,
2614 bool dialog_was_suppressed) { 2613 bool dialog_was_suppressed) {
2615 GetProcess()->SetIgnoreInputEvents(false); 2614 GetProcess()->SetIgnoreInputEvents(false);
2616 2615
2617 // If we are executing as part of beforeunload event handling, we don't 2616 // If we are executing as part of beforeunload event handling, we don't
2618 // want to use the regular hung_renderer_delay_ms_ if the user has agreed to 2617 // want to use the regular hung_renderer_delay_ms_ if the user has agreed to
2619 // leave the current page. In this case, use the regular timeout value used 2618 // leave the current page. In this case, use the regular timeout value used
2620 // during the beforeunload handling. 2619 // during the beforeunload handling.
2621 if (is_before_unload_dialog) { 2620 if (is_before_unload_dialog) {
2622 RendererUnresponsiveType type =
2623 success ? RendererUnresponsiveType::RENDERER_UNRESPONSIVE_BEFORE_UNLOAD
2624 : RendererUnresponsiveType::RENDERER_UNRESPONSIVE_DIALOG_CLOSED;
2625 render_view_host_->GetWidget()->StartHangMonitorTimeout( 2621 render_view_host_->GetWidget()->StartHangMonitorTimeout(
2626 success 2622 success
2627 ? TimeDelta::FromMilliseconds(RenderViewHostImpl::kUnloadTimeoutMS) 2623 ? TimeDelta::FromMilliseconds(RenderViewHostImpl::kUnloadTimeoutMS)
2628 : render_view_host_->GetWidget()->hung_renderer_delay(), 2624 : render_view_host_->GetWidget()->hung_renderer_delay(),
2629 blink::WebInputEvent::Undefined, type); 2625 blink::WebInputEvent::Undefined);
2630 } 2626 }
2631 2627
2632 SendJavaScriptDialogReply(reply_msg, success, user_input); 2628 SendJavaScriptDialogReply(reply_msg, success, user_input);
2633 2629
2634 // If we are waiting for a beforeunload ack and the user has suppressed 2630 // If we are waiting for a beforeunload ack and the user has suppressed
2635 // messages, kill the tab immediately; a page that's spamming alerts in 2631 // messages, kill the tab immediately; a page that's spamming alerts in
2636 // onbeforeunload is presumably malicious, so there's no point in continuing 2632 // onbeforeunload is presumably malicious, so there's no point in continuing
2637 // to run its script and dragging out the process. This must be done after 2633 // to run its script and dragging out the process. This must be done after
2638 // sending the reply since RenderView can't close correctly while waiting for 2634 // sending the reply since RenderView can't close correctly while waiting for
2639 // a response. 2635 // a response.
2640 if (is_before_unload_dialog && dialog_was_suppressed) { 2636 if (is_before_unload_dialog && dialog_was_suppressed) {
2641 render_view_host_->GetWidget()->delegate()->RendererUnresponsive( 2637 render_view_host_->GetWidget()->delegate()->RendererUnresponsive(
2642 render_view_host_->GetWidget(), 2638 render_view_host_->GetWidget());
2643 RendererUnresponsiveType::RENDERER_UNRESPONSIVE_DIALOG_SUPPRESSED);
2644 } 2639 }
2645 } 2640 }
2646 2641
2647 void RenderFrameHostImpl::SendJavaScriptDialogReply( 2642 void RenderFrameHostImpl::SendJavaScriptDialogReply(
2648 IPC::Message* reply_msg, 2643 IPC::Message* reply_msg,
2649 bool success, 2644 bool success,
2650 const base::string16& user_input) { 2645 const base::string16& user_input) {
2651 FrameHostMsg_RunJavaScriptDialog::WriteReplyParams(reply_msg, success, 2646 FrameHostMsg_RunJavaScriptDialog::WriteReplyParams(reply_msg, success,
2652 user_input); 2647 user_input);
2653 Send(reply_msg); 2648 Send(reply_msg);
(...skipping 807 matching lines...) Expand 10 before | Expand all | Expand 10 after
3461 // There is no pending NavigationEntry in these cases, so pass 0 as the 3456 // There is no pending NavigationEntry in these cases, so pass 0 as the
3462 // pending_nav_entry_id. If the previous handle was a prematurely aborted 3457 // pending_nav_entry_id. If the previous handle was a prematurely aborted
3463 // navigation loaded via LoadDataWithBaseURL, propagate the entry id. 3458 // navigation loaded via LoadDataWithBaseURL, propagate the entry id.
3464 return NavigationHandleImpl::Create( 3459 return NavigationHandleImpl::Create(
3465 params.url, params.redirects, frame_tree_node_, is_renderer_initiated, 3460 params.url, params.redirects, frame_tree_node_, is_renderer_initiated,
3466 params.was_within_same_page, base::TimeTicks::Now(), 3461 params.was_within_same_page, base::TimeTicks::Now(),
3467 entry_id_for_data_nav, false); // started_from_context_menu 3462 entry_id_for_data_nav, false); // started_from_context_menu
3468 } 3463 }
3469 3464
3470 } // namespace content 3465 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/devtools/devtools_manager_unittest.cc ('k') | content/browser/renderer_host/render_view_host_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698