Commit d6e72e27 authored by rdevlin.cronin's avatar rdevlin.cronin Committed by Commit bot

[Extensions] Fix crash in chrome://extensions metrics

DidStartProvisionalLoadInFrame() is apparently not guaranteed to be
called before DocumentLoadedInFrame() or
DocumentOnLoadCompletedInMainFrame(). Because of this, the timer was
sometimes uninitialized. Handle this gracefully.

BUG=647272

Review-Url: https://codereview.chromium.org/2348383004
Cr-Commit-Position: refs/heads/master@{#419629}
parent 5237db09
......@@ -56,8 +56,10 @@ class ExtensionWebUiTimer : public content::WebContentsObserver {
void DocumentLoadedInFrame(
content::RenderFrameHost* render_frame_host) override {
if (render_frame_host != web_contents()->GetMainFrame())
if (render_frame_host != web_contents()->GetMainFrame() ||
!timer_) { // See comment in DocumentOnLoadCompletedInMainFrame()
return;
}
if (is_md_) {
UMA_HISTOGRAM_TIMES("Extensions.WebUi.DocumentLoadedInMainFrameTime.MD",
timer_->Elapsed());
......@@ -68,6 +70,12 @@ class ExtensionWebUiTimer : public content::WebContentsObserver {
}
void DocumentOnLoadCompletedInMainFrame() override {
// Sometimes*, DidStartProvisionalLoadForFrame() isn't called before this
// or DocumentLoadedInFrame(). Don't log anything in those cases.
// *This appears to be for in-page navigations like hash changes.
// TODO(devlin): The usefulness of these metrics remains to be seen.
if (!timer_)
return;
if (is_md_) {
UMA_HISTOGRAM_TIMES("Extensions.WebUi.LoadCompletedInMainFrame.MD",
timer_->Elapsed());
......@@ -75,6 +83,7 @@ class ExtensionWebUiTimer : public content::WebContentsObserver {
UMA_HISTOGRAM_TIMES("Extensions.WebUi.LoadCompletedInMainFrame.Uber",
timer_->Elapsed());
}
timer_.reset();
}
void WebContentsDestroyed() override { delete this; }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment