New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 648299 link

Starred by 4 users

Issue metadata

Status: Fixed
Owner:
Closed: Nov 2016
Cc:
EstimatedDays: ----
NextAction: ----
OS: Linux
Pri: 1
Type: Bug



Sign in to add a comment

Migrate PageLoadTracker to non-deprecated observer APIs (addresses DidFirstPaintAfterLoad and DidFinishLoad crashers)

Project Member Reported by scf@chromium.org, Sep 19 2016

Issue description

Unfortunately there are no repro steps for this yet.

Its hitting a DCHECK on PageLoadTracker.

void PageLoadTracker::DidFirstPaintAfterLoad(
    content::RenderWidgetHost* render_widget_host) {
  RenderWidgetLoadStatusMap::iterator it =
      render_widget_load_status_.find(render_widget_host);
  DCHECK(it != render_widget_load_status_.end()); // <-----

  it->second.did_first_paint = true;
  if (it->second.Loaded()) {
    client_->SendPageLoadStatusUpdate(PageLoadStatus::LOADED);
    render_widget_load_status_.erase(it);
  }
}

Product name: Chrome_Blimp_Engine
Magic Signature: DidFirstPaintAfterLoad

Current link:
https://crash.corp.google.com/browse?q=product.name%3D'Chrome_Blimp_Engine'%20AND%20custom_data.ChromeCrashProto.ptype%3D'browser'%20AND%20(product.version%3D'55.0.2858.0'%20OR%20product.version%3D'55.0.2860.0')%20AND%20custom_data.ChromeCrashProto.magic_signature_1.name%3D'DidFirstPaintAfterLoad'%20AND%20ReportID%3D'eb7d47f500000000'&ignore_case=false&enable_rewrite=true&omit_field_name=&omit_field_value=&omit_field_opt=%3D#3


Search properties:
product.name: Chrome_Blimp_Engine
custom_data.chromecrashproto.ptype: browser
product.version: 55.0.2858.0' OR product.version='55.0.2860.0
custom_data.chromecrashproto.magic_signature_1.name: DidFirstPaintAfterLoad
reportid: eb7d47f500000000

Metadata :
Product Name: Chrome_Blimp_Engine
Product Version: 55.0.2860.0
Report ID: eb7d47f500000000
Report Time: Thu, 15 Sep 2016 23:43:06 GMT
Uptime: 18732115 ms
Cumulative Uptime: 0 ms
User Email: 
OS Name: Linux
OS Version: 0.0.0 Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u4google (2016-01-26) x86_64
CPU Architecture: amd64
CPU Info: family 6 model 63 stepping 0


 
upload_file_minidump-eb7d47f500000000 (2).dmp
299 KB Download
Cc: nasko@chromium.org
This would happen if we get a DidFirstPaintAfterLoad from the RenderWidget of the main frame without getting a DidStartProvisionalLoadForFrame first.
+nasko, is there something we are assuming incorrectly in the state tracking here?

Comment 2 by nasko@chromium.org, Sep 19 2016

Cc: kenrb@chromium.org
I don't think start load and paint should be correlated much. Commit and paint might be. Also, are you monitoring for failed provisional loads?

Including kenrb@, who has done some work in this area for one of our URL spoof mitigations.
So the state tracking we do keys off of the following,

DidStartProvisionalLoadForFrame: We expect to see before any of the following calls. At this point we are in a state for tracking this navigation's load status.

DidFinishLoad: At this point we know that the main frame has finished loading.
DidFirstPaintAfterLoad: At this point we know that the main frame has performed its first paint.
The 2 above can come in any order so we wait to see both before assuming that the page's data has been sent to the blimp client.

DidFailLoad: Now we know that the load failed so we reset any tracking state for this frame. This is the one to listen to for failed provisional loads right?

Comment 4 by nasko@chromium.org, Sep 19 2016

A provisional load can fail, which I think you need to account for. Also, I would suggest moving over to use the observer APIs which are not deprecated - DidStartNavigation/DidFinishNavigation. Note that loading is the phase which comes once the navigation is complete (navigation - aka we have gotten data from the network and ready to load).
Issue 662233 has been merged into this issue.
Cc: khushals...@chromium.org
Labels: M-57 OS-Linux
Owner: steimel@chromium.org
Status: Assigned (was: Untriaged)

Comment 7 by w...@chromium.org, Nov 14 2016

Issue 630360 has been merged into this issue.
Issue 623591 has been merged into this issue.

Comment 9 by w...@chromium.org, Nov 14 2016

Summary: Migrate PageLoadTracker to non-deprecated observer APIs (addresses DidFirstPaintAfterLoad and DidFinishLoad crashers) (was: Chrome_Blimp_Engine: Crash Report - DidFirstPaintAfterLoad)
I already have a patch up to fix this, https://codereview.chromium.org/2483933003/
Project Member

Comment 11 by bugdroid1@chromium.org, Nov 15 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/1dcad9ce4e13062d7fe0fa8021749e9dab6942a6

commit 1dcad9ce4e13062d7fe0fa8021749e9dab6942a6
Author: khushalsagar <khushalsagar@chromium.org>
Date: Tue Nov 15 03:34:28 2016

blimp: Fix page load status tracking.

Update the PageLoadTracker to use the non-deprecated APIs for tracking
the status of navigations for a RenderFrame. This change also
establishes the policy used for these updates for a tab clearly:

1) The progress bar will be reset when a navigation is initiated. If the
navigation fails, a completion update is sent immediately.
2) If the navigation commits, we wait for at least one frame for this
page to be sent to the client, before sending a completion update.

BUG= 648299 

Review-Url: https://codereview.chromium.org/2483933003
Cr-Commit-Position: refs/heads/master@{#432071}

[modify] https://crrev.com/1dcad9ce4e13062d7fe0fa8021749e9dab6942a6/blimp/engine/session/page_load_tracker.cc
[modify] https://crrev.com/1dcad9ce4e13062d7fe0fa8021749e9dab6942a6/blimp/engine/session/page_load_tracker.h

Status: Fixed (was: Assigned)
Labels: Archive-Blimp

Sign in to add a comment