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

Unified Diff: content/browser/renderer_host/render_view_host_impl.cc

Issue 2724203004: Test run for https://codereview.chromium.org/2725993002/ with the timer intentionally broken. (Closed)
Patch Set: Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/render_view_host_impl.cc
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
index 8388af1bad8925ce675338110d87c801e8c1f58a..7a15dea549c747ce2d613556f1345b24b9ce0765 100644
--- a/content/browser/renderer_host/render_view_host_impl.cc
+++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -38,6 +38,7 @@
#include "content/browser/gpu/gpu_process_host.h"
#include "content/browser/host_zoom_map_impl.h"
#include "content/browser/loader/resource_dispatcher_host_impl.h"
+#include "content/browser/renderer_host/input/timeout_monitor.h"
#include "content/browser/renderer_host/render_process_host_impl.h"
#include "content/browser/renderer_host/render_view_host_delegate.h"
#include "content/browser/renderer_host/render_view_host_delegate_view.h"
@@ -229,6 +230,9 @@ RenderViewHostImpl::RenderViewHostImpl(
base::Unretained(ResourceDispatcherHostImpl::Get()),
GetProcess()->GetID(), GetRoutingID()));
}
+
+ close_timeout_.reset(new TimeoutMonitor(base::Bind(
+ &RenderViewHostImpl::ClosePageTimeout, weak_factory_.GetWeakPtr())));
}
RenderViewHostImpl::~RenderViewHostImpl() {
@@ -575,10 +579,6 @@ WebPreferences RenderViewHostImpl::ComputeWebkitPrefs() {
void RenderViewHostImpl::ClosePage() {
is_waiting_for_close_ack_ = true;
- GetWidget()->StartHangMonitorTimeout(
- TimeDelta::FromMilliseconds(kUnloadTimeoutMS),
- blink::WebInputEvent::Undefined,
- RendererUnresponsiveType::RENDERER_UNRESPONSIVE_CLOSE_PAGE);
bool is_javascript_dialog_showing = delegate_->IsJavaScriptDialogShowing();
@@ -586,10 +586,8 @@ void RenderViewHostImpl::ClosePage() {
// close event because it is known unresponsive, waiting for the reply from
// the dialog.
if (IsRenderViewLive() && !is_javascript_dialog_showing) {
- // Since we are sending an IPC message to the renderer, increase the event
- // count to prevent the hang monitor timeout from being stopped by input
- // event acknowledgments.
- GetWidget()->increment_in_flight_event_count();
+ // Intentionally broken timer.
+ // close_timeout_->Start(TimeDelta::FromMilliseconds(kUnloadTimeoutMS));
// TODO(creis): Should this be moved to Shutdown? It may not be called for
// RenderViewHosts that have been swapped out.
@@ -607,7 +605,7 @@ void RenderViewHostImpl::ClosePage() {
}
void RenderViewHostImpl::ClosePageIgnoringUnloadEvents() {
- GetWidget()->StopHangMonitorTimeout();
+ close_timeout_->Stop();
is_waiting_for_close_ack_ = false;
sudden_termination_allowed_ = true;
@@ -853,7 +851,6 @@ void RenderViewHostImpl::OnTakeFocus(bool reverse) {
}
void RenderViewHostImpl::OnClosePageACK() {
- GetWidget()->decrement_in_flight_event_count();
ClosePageIgnoringUnloadEvents();
}
@@ -959,4 +956,16 @@ void RenderViewHostImpl::RenderViewReady() {
delegate_->RenderViewReady(this);
}
+void RenderViewHostImpl::ClosePageTimeout() {
+ if (delegate_->ShouldIgnoreUnresponsiveRenderer())
+ return;
+
+ UMA_HISTOGRAM_ENUMERATION(
+ "ChildProcess.HangRendererType",
+ RendererUnresponsiveType::RENDERER_UNRESPONSIVE_CLOSE_PAGE,
+ RendererUnresponsiveType::RENDERER_UNRESPONSIVE_MAX);
+
+ ClosePageIgnoringUnloadEvents();
+}
+
} // namespace content
« no previous file with comments | « content/browser/renderer_host/render_view_host_impl.h ('k') | content/browser/web_contents/web_contents_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698