Record who initialized the widget for debugging https://crbug.com/1006814
Bug: 1006814
Change-Id: I2678fe90ca62b7940b49830233278c27bc39ee39
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2143180
Commit-Queue: Fergal Daly <[email protected]>
Auto-Submit: Fergal Daly <[email protected]>
Reviewed-by: Alex Moshchuk <[email protected]>
Cr-Commit-Position: refs/heads/master@{#758732}
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc
index eda3fa4d..6e8fdb4e 100644
--- a/content/browser/frame_host/render_frame_host_manager.cc
+++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -2226,7 +2226,7 @@
render_view_host->GetMainFrameRoutingIdForCrbug1006814();
std::string message = base::StringPrintf(
"created=%d,process=%d,proxy=%d,widget=%d,main_rfh=%d,new_rfh=%d,"
- "in_pdo=%d,in_cpdo=%d",
+ "in_pdo=%d,in_cpdo=%d,wi=%d",
new_render_frame_host->IsRenderFrameCreated(),
new_render_frame_host->GetProcess()->IsInitializedAndNotDead(),
!!GetRenderFrameProxyHost(instance), widget_renderer_initialized,
@@ -2236,7 +2236,8 @@
->GetWithinProcessDiedObserverForCrbug1006814(),
static_cast<RenderProcessHostImpl*>(
render_view_host->GetWidget()->GetProcess())
- ->GetWithinCleanupProcessDiedObserverForCrbug1006814());
+ ->GetWithinCleanupProcessDiedObserverForCrbug1006814(),
+ render_view_host->GetWidget()->get_initializer_for_crbug_1006814());
// This string is whitelisted for collection from Android Webview. It must
// only contain booleans to avoid leaking any PII.
base::debug::SetCrashKeyString(crash_key, message);
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
index 01a4e3dc..851c44e 100644
--- a/content/browser/renderer_host/render_view_host_impl.cc
+++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -339,7 +339,8 @@
DCHECK(main_rfh);
}
- GetWidget()->set_renderer_initialized(true);
+ GetWidget()->set_renderer_initialized(
+ true, RenderWidgetHostImpl::RendererInitializer::kCreateRenderView);
mojom::CreateViewParamsPtr params = mojom::CreateViewParams::New();
params->renderer_preferences =
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index e33060e..cf64f7c 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -514,7 +514,7 @@
void RenderWidgetHostImpl::Init() {
DCHECK(process_->IsInitializedAndNotDead());
- renderer_initialized_ = true;
+ set_renderer_initialized(true, RendererInitializer::kInit);
SendScreenRects();
SynchronizeVisualProperties();
@@ -575,7 +575,7 @@
void RenderWidgetHostImpl::InitForFrame() {
DCHECK(process_->IsInitializedAndNotDead());
- renderer_initialized_ = true;
+ set_renderer_initialized(true, RendererInitializer::kInitForFrame);
if (view_)
view_->OnRenderWidgetInit();
@@ -1946,7 +1946,7 @@
// Clearing this flag causes us to re-create the renderer when recovering
// from a crashed renderer.
- renderer_initialized_ = false;
+ set_renderer_initialized(false, RendererInitializer::kUnknown);
// After the renderer crashes, the view is destroyed and so the
// RenderWidgetHost cannot track its visibility anymore. We assume such
diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h
index 57865bc..244f352 100644
--- a/content/browser/renderer_host/render_widget_host_impl.h
+++ b/content/browser/renderer_host/render_widget_host_impl.h
@@ -593,10 +593,26 @@
void RejectMouseLockOrUnlockIfNecessary(
blink::mojom::PointerLockResult reason);
- void set_renderer_initialized(bool renderer_initialized) {
+ // The places in our codebase that call set_renderer_initialized or set the
+ // state to true directly.
+ // TODO(https://crbug.com/1006814): Delete this.
+ enum class RendererInitializer {
+ kUnknown,
+ kTest, // We don't care about tests, this can be used for any test call.
+ kInit, // RenderWidgetHostImpl
+ kInitForFrame, // RenderWidgetHostImpl
+ kWebContentsInit,
+ kCreateRenderView,
+ };
+ void set_renderer_initialized(bool renderer_initialized,
+ RendererInitializer initializer) {
renderer_initialized_ = renderer_initialized;
+ initializer_ = initializer;
}
-
+ // TODO(https://crbug.com/1006814): Delete this.
+ RendererInitializer get_initializer_for_crbug_1006814() {
+ return initializer_;
+ }
// Store values received in a child frame RenderWidgetHost from a parent
// RenderWidget, in order to pass them to the renderer and continue their
// propagation down the RenderWidget tree.
@@ -1267,6 +1283,10 @@
blink_widget_host_receiver_{this};
mojo::AssociatedRemote<blink::mojom::Widget> blink_widget_;
+ // Who initialized us.
+ // TODO(https://crbug.com/1006814): Delete this.
+ RendererInitializer initializer_ = RendererInitializer::kUnknown;
+
base::WeakPtrFactory<RenderWidgetHostImpl> weak_factory_{this};
DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostImpl);
diff --git a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
index 4e31d0a88..c93f366 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
@@ -371,7 +371,7 @@
/*hidden=*/false,
std::make_unique<FrameTokenMessageQueue>()),
widget_impl_(std::move(widget_impl)) {
- set_renderer_initialized(true);
+ set_renderer_initialized(true, RendererInitializer::kTest);
lastWheelEventLatencyInfo = ui::LatencyInfo();
ON_CALL(*this, Focus())
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index a4a2c55..b93b364 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -2114,7 +2114,8 @@
// corresponding RenderView and main RenderFrame have already been created.
// Ensure observers are notified about this.
if (params.renderer_initiated_creation) {
- GetRenderViewHost()->GetWidget()->set_renderer_initialized(true);
+ GetRenderViewHost()->GetWidget()->set_renderer_initialized(
+ true, RenderWidgetHostImpl::RendererInitializer::kWebContentsInit);
GetRenderViewHost()->DispatchRenderViewCreated();
GetRenderManager()->current_frame_host()->SetRenderFrameCreated(true);
}
diff --git a/content/test/test_render_view_host.cc b/content/test/test_render_view_host.cc
index 75bb605..56038c0 100644
--- a/content/test/test_render_view_host.cc
+++ b/content/test/test_render_view_host.cc
@@ -264,7 +264,8 @@
const FrameReplicationState& replicated_frame_state,
bool window_was_created_with_opener) {
DCHECK(!IsRenderViewLive());
- GetWidget()->set_renderer_initialized(true);
+ GetWidget()->set_renderer_initialized(
+ true, RenderWidgetHostImpl::RendererInitializer::kTest);
DCHECK(IsRenderViewLive());
opener_frame_route_id_ = opener_frame_route_id;
RenderFrameHostImpl* main_frame =