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

Issue 659487 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: Dec 2016
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Mac
Pri: 2
Type: Bug-Regression



Sign in to add a comment

Regression : Sign in promo image is seen missing in history/syncedTabs duplicate tab.

Reported by yfulgaon...@etouch.net, Oct 26 2016

Issue description

Chrome Version : 55.0.2883.28 (Official Build) eec10a413008022b45380e6d0b44a1ac0b2ea414-refs/branch-heads/2883@{#305} 64-bit
OS : Mac(10.10.5, 10.11.4, 10.11.5)

Precondition : Enable “Material design history” flag from chrome://flags

What steps will reproduce the problem?
1. Launch chrome and navigate to chrome://history page.
2. Click on ‘Tabs from other devices’ and reload the page.
3. Now middle click on ‘Tabs from other devices’ button (duplicate tab is seen) and observe the contents of duplicate tab.

Actual : Sign in promo image is missing in history/syncedTabs duplicate tab.
Expected : Sign in promo image should be seen in duplicate tab as well.

This is a regression issue broken in ‘M-55’, below is the Manual Regression range and will soon update bisect info.
Good build : 55.0.2876.0
Bad build : 55.0.2878.0

Note : This is Mac specific issue and the same is working fine on Windows & Linux OS.
 
Actual_history.mov
3.5 MB Download
Expected_history.mov
3.3 MB Download
Cc: brajkumar@chromium.org
Labels: hasbisect-per-revision
Owner: lshang@chromium.org
Status: Assigned (was: Unconfirmed)
Bisect Information:
------------------------
You are probably looking for a change made after 422037 (known good), but no later than 422038 (first known bad).

CHANGELOG URL:
----------------
https://chromium.googlesource.com/chromium/src/+log/932d7f1488771d98c3519ffca0ca84deca523d05..93a39a3cfff736b8e10f65e9d7bf2612186a26c8

From the CL above, assigning the issue to the concern owner 

@lshang - Could you please check whether this is caused with respect to your change, if not please help us in assigning it to the right owner.

Thanks!
Cc: calamity@chromium.org tsergeant@chromium.org
Cc: dbeam@chromium.org
I took a look at this and it looks like disabling the WebUI DataSource reload fixes this. This was done to fix the Loading... state of the synced device manager when the user signs in. We can probably do that another way and avoid the data source reloading here somehow.

I think lshang@ and I have figured out a decent approach:
-Remove the loadTimeData signin bool
-If the signin state goes from undefined => true, then the user is already signed in
-If the signin state goes from false => true, the user just signed in and we are loading tabs

The only possible problem I can see here is that we might flash the wrong UI for a moment. That can probably be worked around.

Comment 4 by dbeam@chromium.org, Oct 29 2016

Cc: groby@chromium.org
sooooooooo i dug more into this

a) we should fix the console error that happens when <iron-location>/<history-router> get initialized and try to show the synced tab page before the lazy load bundle is ready.  there's a lot of ways to do this, most of them result in flicker when loading /syncedTab.  ¯\_(ツ)_/¯ whatcha gonna do?  here's one way:
https://codereview.chromium.org/2456783006/

b) I was thinking that in order to avoid recreating the data sources a lot, we should package up a little update (like a base::DictionaryValue) and add an interface from content/public to *update* a WebUIDataSource.  you can basically be sure that one exists if the page is open, you just can't guarantee it's the same one if other pages have been created (they generally replace).  the updates would need to be applied on a different thread, but are probably guaranteed to be eventually consistent (just like a data source is guaranteed to eventually be associated with URL requests and are added on the IO thread via PostTask()).

I thought of a bunch of other hacks (i.e. inlining the image via grit instead), but it ultimately doesn't fix other types of data races that may apply from repeatedly re-creating data sources.  My proposal might also just trade the old problems for new one, we'll see.

Comment 5 by dbeam@chromium.org, Nov 10 2016

Labels: -Pri-1 -M-55 M-56 Pri-2

Comment 6 by dbeam@chromium.org, Nov 10 2016

btw, this seems to only happen when the page loads in the background

that means that session restore could probably tickle this, but it filters out even more cases it could happen

Comment 7 by dbeam@chromium.org, Nov 15 2016

Owner: dbeam@chromium.org
Status: Started (was: Assigned)

Comment 8 by hdodda@chromium.org, Nov 22 2016

Issue is reproduced in Latest chrome canary M57 # 57.0.2926.0 .

@dbeam -- can we get latest update on this ??

Thanks!
Issue is still reproducible in Latest chrome canary M57 # 57.0.2935.0

dbeam@, Could you please take a look

Comment 10 by dbeam@chromium.org, Nov 29 2016

Labels: -M-56
i don't think this is particularly bad.  i'm not super happy with the solution i've come up with so far.
Project Member

Comment 11 by bugdroid1@chromium.org, Dec 9 2016

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

commit 25af85bdf26ac7dbfa4a3ba1b408da2634c94345
Author: dbeam <dbeam@chromium.org>
Date: Fri Dec 09 03:34:37 2016

MD History: update (instead of re-create) data sources on sign in change

BUG= 659487 

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

[modify] https://crrev.com/25af85bdf26ac7dbfa4a3ba1b408da2634c94345/chrome/browser/ui/webui/history_ui.cc
[modify] https://crrev.com/25af85bdf26ac7dbfa4a3ba1b408da2634c94345/chrome/browser/ui/webui/history_ui.h
[modify] https://crrev.com/25af85bdf26ac7dbfa4a3ba1b408da2634c94345/chrome/browser/ui/webui/md_history_ui.cc
[modify] https://crrev.com/25af85bdf26ac7dbfa4a3ba1b408da2634c94345/chrome/browser/ui/webui/md_history_ui.h
[modify] https://crrev.com/25af85bdf26ac7dbfa4a3ba1b408da2634c94345/content/browser/webui/url_data_manager.cc
[modify] https://crrev.com/25af85bdf26ac7dbfa4a3ba1b408da2634c94345/content/browser/webui/url_data_manager.h
[modify] https://crrev.com/25af85bdf26ac7dbfa4a3ba1b408da2634c94345/content/browser/webui/url_data_manager_backend.cc
[modify] https://crrev.com/25af85bdf26ac7dbfa4a3ba1b408da2634c94345/content/browser/webui/url_data_manager_backend.h
[modify] https://crrev.com/25af85bdf26ac7dbfa4a3ba1b408da2634c94345/content/browser/webui/url_data_source_impl.cc
[modify] https://crrev.com/25af85bdf26ac7dbfa4a3ba1b408da2634c94345/content/browser/webui/url_data_source_impl.h
[modify] https://crrev.com/25af85bdf26ac7dbfa4a3ba1b408da2634c94345/content/browser/webui/web_ui_data_source_impl.cc
[modify] https://crrev.com/25af85bdf26ac7dbfa4a3ba1b408da2634c94345/content/browser/webui/web_ui_data_source_impl.h
[modify] https://crrev.com/25af85bdf26ac7dbfa4a3ba1b408da2634c94345/content/public/browser/web_ui_data_source.h

Comment 12 by dbeam@chromium.org, Dec 13 2016

Cc: dschuyler@chromium.org mmenke@chromium.org
Status: Fixed (was: Started)
I think there is still an issue regarding buffering resources while data sources are rebuilt.

this CL ^ side-steps the issue, but I'm not sure how to easily fix the original issue because the only way I know how would be:

a) buffer an entire resource in memory, then slowly empty it into a request response
b) add or invoke some sort of invalidation API in URLDataSourceBackend

again, the initial issue is that a datasource's resources change in the middle of responding to a fake net request (from a chrome:// page).

Sign in to add a comment