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

Issue 795661 link

Starred by 2 users

Issue metadata

Status: Fixed
Owner:
Closed: Dec 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux , Windows , Mac
Pri: 1
Type: Bug-Regression

Blocking:
issue 650433



Sign in to add a comment

Regression: Blank sheet is seen on preview in Google drive

Reported by nutan.ga...@etouch.net, Dec 18 2017

Issue description

Chrome version: 65.0.3298.0 6586a208880a70a00856529493741971ecfea5c2-refs/heads/master@{#524617}
OS: Windows

Step to reproduce?
1. Launch chrome, navigate to https://drive.google.com and login in with valid crediential
2. Right click on any sheet and click on preview
3. Observe

Actual: Blank sheet is observed on preview
Expected: Content should be seen on preview

This is an Regression issue seen from M-65, will soon update other info:


 
Actual Video.mp4
366 KB View Download
Labels: hasbisect-per-revision OS-Linux OS-Mac
Owner: erikc...@chromium.org
Status: Assigned (was: Untriaged)
This is an Regression issue broken in M-65, below is the bisect info:

Good Build: 65.0.3295.0
Bad Build: 65.0.3296.0

You are probably looking for a change made after 524505 (known good), but no later than 524506 (first known bad).

CHANGELOG URL:

The script might not always return single CL as suspect as some perf builds might get missing due to failure.

https://chromium.googlesource.com/chromium/src/+log/851424e77977c2cf9b8466508dc31ed12eaff87b..75c1af03e20798bbcd01ec14945a9d040c52be92

Suspect: https://chromium.googlesource.com/chromium/src/+/75c1af03e20798bbcd01ec14945a9d040c52be92

Note: Issue is seen on in(7,8,10),Mac(10.12.6,10.13.2),Linux(14.04 LTS) OS
Expected Video.mp4
1.2 MB View Download
Cc: gov...@chromium.org abdulsyed@chromium.org ligim...@chromium.org
Labels: ReleaseBlock-Dev
Adding release blocker for this issue.Please remove if not the case.

Thank You!
Cc: skobes@chromium.org
Status: Started (was: Assigned)
This smells similar to the pdf plugin issue. Investigating.
I've confirmed that setting '--disable-blink-features=DisplayNoneIFrameCreatesNoLayoutObject' fixes the problem.

It looks like the HTML element is incorrectly having its height set to 0. If I use the element inspector to manually set the height of the HTML element to 800, the height of the body element to 800, and the height&width of div id="sheets-viewport" to 800, then some contents shows up.

Comment 5 by gov...@chromium.org, Dec 18 2017

Thank you  erikchen@.

Can this "--disable-blink-features=DisplayNoneIFrameCreatesNoLayoutObject" via Finch to unblock tomorrow's dev release?

Comment 6 by gov...@chromium.org, Dec 18 2017

Per erikchen@, 
revert in CQ: https://chromium-review.googlesource.com/c/chromium/src/+/833347.

I've requested to merge the revert to 3298 branch once it lands. 
skobes: I've got a repro and potential fixes. 

The repro looks like this:

"""
function resize() {
  var el = document.getElementById('blah');
  el.style.width = window.innerWidth;
  el.style.height = window.innerHeight;
}
resize();
window.onresize = resize
"""

The assumption is that this will cause "el" to stay in sync with window. This assumption is violated by this feature. Adding a call to EnqueueResizeEvent() in Document::WillChangeFrameOwnerProperties fixes the problem, e.g.

"""
  if (RuntimeEnabledFeatures::DisplayNoneIFrameCreatesNoLayoutObjectEnabled()) {
    if (documentElement()) {                                                        
      if (is_display_none != owner->IsDisplayNone()) {                               
        documentElement()->LazyReattachIfAttached();                                
        if (!is_display_none)
          EnqueueResizeEvent();                         
      }                              
    }                                                                                                                                                                                                                                                  
  }  
"""

Or perhaps the right solution is to update LocalFrameView::WasViewportResized and LocalFrameView::SendResizeEventIfNeeded() so that a resize event is sent GetLayoutViewItem changes from null to non-null.

I think the latter is cleaner. Thoughts?

Comment 8 by skobes@chromium.org, Dec 19 2017

The LayoutView shouldn't be null, even when the iframe is display: none.

It makes sense that innerWidth and innerHeight are 0 when the iframe is display: none.  Therefore, it makes sense to fire a resize event when the iframe becomes displayed.

When the frame beomes displayed, it should run a layout, and call SendResizeEventIfNeeded.  Does WasViewportResized return false at this time?  If so, why?

Comment 9 by gov...@chromium.org, Dec 19 2017

Erik merged the revert to branch 3298 to unblock tomorrow's dev release - https://chromium.googlesource.com/chromium/src.git/+/af1f64f3e9f29a8e287e7945542810687c22b5f6. Thank you Erik.
Update:
Able to see 2 sec white page before the sheet preview opens in latest canary 65.0.3299.0. Kindly refer the attached screen cast
delay_video.mp4
485 KB View Download
update in comment 10:

Able to see 2 sec white page before the sheet preview opens also in Dev #65.0.3298.3

Thank you
Erik, do you think this is a Dev blocker?
Labels: -ReleaseBlock-Dev
If you believe there's a regression, feel free to take a bisect and find the issue. I turned on a feature, and then turned it back off.
Labels: Needs-Bisect
Labels: -Needs-Bisect
Please file a different bug with a bisect for c#10. This issue tracks the failure-to-appear for the sheet itself.
In my opinion, the video in comment #10 shows the expected behavior, and not a bug.  The two-second period in which the page appears white corresponds to the time spent fetching data from the network, as evidenced by the "Waiting for docs.google.com..." status indicator in the lower left.
@skobes: I've written a layout test with a minimized repro: https://chromium-review.googlesource.com/c/chromium/src/+/834770

With the feature disabled, the first call to blink::LocalFrameView::UpdateLayout sets first_layout_ to false, and last_viewport_size_ to 0x0.

"""
437 3   libblink_core.dylib                 0x000000013c3a8927 blink::LocalFrameView::UpdateLayout() + 2903
438 4   libblink_core.dylib                 0x000000013c3bdba4 blink::LocalFrameView::UpdateStyleAndLayoutIfNeededRecursiveInternal() + 884
439 5   libblink_core.dylib                 0x000000013c3bdda3 blink::LocalFrameView::UpdateStyleAndLayoutIfNeededRecursiveInternal() + 1395
440 6   libblink_core.dylib                 0x000000013c3bb1ac blink::LocalFrameView::UpdateStyleAndLayoutIfNeededRecursive() + 140
441 7   libblink_core.dylib                 0x000000013c3b9955 blink::LocalFrameView::UpdateLifecyclePhasesInternal(blink::DocumentLifecycle::LifecycleState) + 901
442 8   libblink_core.dylib                 0x000000013c3b95c2 blink::LocalFrameView::UpdateAllLifecyclePhases() + 50
443 9   libblink_core.dylib                 0x000000013d0ac625 blink::PageAnimator::UpdateAllLifecyclePhases(blink::LocalFrame&) + 85
444 10  libblink_core.dylib                 0x000000013d0b3db5 blink::PageWidgetDelegate::UpdateAllLifecyclePhases(blink::Page&, blink::LocalFrame&) + 37
445 11  libblink_core.dylib                 0x000000013c2d980c blink::WebViewImpl::UpdateAllLifecyclePhases() + 428
446 12  libblink_core.dylib                 0x000000013c4a08b1 blink::WebViewFrameWidget::UpdateAllLifecyclePhases() + 33
447 13  libcontent.dylib                    0x000000012d6f505b content::RenderWidget::UpdateVisualState() + 43
448 14  libcontent.dylib                    0x000000012d3652fa content::RenderWidgetCompositor::UpdateLayerTreeHost() + 26
449 15  libcc.dylib                         0x000000010da4497a cc::LayerTreeHost::RequestMainFrameUpdate() + 26
"""

The second call to blink::LocalFrameView::UpdateLayout sets layout_size_ to 50x40, but last_viewport_size_ is still 0x0.
"""
515 3   libblink_core.dylib                 0x000000013c3a26ad blink::LocalFrameView::SetLayoutSizeInternal(blink::IntSize const&) + 349
516 4   libblink_core.dylib                 0x000000013c3a6839 blink::LocalFrameView::FrameRectsChanged() + 297
517 5   libblink_core.dylib                 0x000000013c3a6605 blink::LocalFrameView::SetFrameRect(blink::IntRect const&) + 261
518 6   libblink_core.dylib                 0x000000013cc3bc3b blink::LayoutEmbeddedContent::UpdateGeometry(blink::EmbeddedContentView&) + 475
519 7   libblink_core.dylib                 0x000000013c3afdae blink::LocalFrameView::UpdateGeometry() + 510
520 8   libblink_core.dylib                 0x000000013c3af979 blink::LocalFrameView::UpdateGeometries() + 201
521 9   libblink_core.dylib                 0x000000013c3ab96e blink::LocalFrameView::PerformPostLayoutTasks() + 798
522 10  libblink_core.dylib                 0x000000013c3adea7 blink::LocalFrameView::ScheduleOrPerformPostLayoutTasks() + 103
523 11  libblink_core.dylib                 0x000000013c3a96a1 blink::LocalFrameView::UpdateLayout() + 6353
524 12  libblink_core.dylib                 0x000000013bd763c0 blink::Document::ImplicitClose() + 1008
525 13  libblink_core.dylib                 0x000000013bd75dcb blink::Document::CheckCompleted() + 235
526 14  libblink_core.dylib                 0x000000013cf8e2b0 blink::FrameLoader::DidFinishNavigation() + 624
527 15  libblink_core.dylib                 0x000000013bd75faa blink::Document::CheckCompleted() + 714
528 16  libblink_core.dylib                 0x000000013cf8dced blink::FrameLoader::FinishedParsing() + 317
529 17  libblink_core.dylib                 0x000000013bd87534 blink::Document::FinishedParsing() + 884
530 18  libblink_core.dylib                 0x000000013df95588 blink::HTMLConstructionSite::FinishedParsing() + 232
531 19  libblink_core.dylib                 0x000000013e0272e0 blink::HTMLTreeBuilder::Finished() + 384
532 20  libblink_core.dylib                 0x000000013dfae55f blink::HTMLDocumentParser::end() + 383
533 21  libblink_core.dylib                 0x000000013dfa2cc8 blink::HTMLDocumentParser::AttemptToRunDeferredScriptsAndEnd() + 440
534 22  libblink_core.dylib                 0x000000013dfa2a05 blink::HTMLDocumentParser::PrepareToStopParsing() + 581
535 23  libblink_core.dylib                 0x000000013dfa9c8b blink::HTMLDocumentParser::ProcessTokenizedChunkFromBackgroundParser(std::__1::unique_ptr<blink::HTMLDocumentParser::TokenizedChunk, std::__1::default_delete<blink::HTMLDocumentParser:    :TokenizedChunk> >) + 5851
536 24  libblink_core.dylib                 0x000000013dfa45f3 blink::HTMLDocumentParser::PumpPendingSpeculations() + 1571
537 25  libblink_core.dylib                 0x000000013dfb0357 blink::HTMLDocumentParser::ResumeParsingAfterPause() + 1383
538 26  libblink_core.dylib                 0x000000013dfb089a blink::HTMLDocumentParser::NotifyScriptLoaded(blink::PendingScript*) + 490
539 27  libblink_core.dylib                 0x000000013dfdb981 blink::HTMLParserScriptRunner::PendingScriptFinished(blink::PendingScript*) + 497
540 28  libblink_core.dylib                 0x000000013bd1d486 blink::ClassicPendingScript::AdvanceReadyState(blink::ClassicPendingScript::ReadyState) + 950
541 29  libblink_core.dylib                 0x000000013bd1ce8f blink::ClassicPendingScript::FinishWaitingForStreaming() + 479
542 30  libblink_core.dylib                 0x000000013bd1da50 blink::ClassicPendingScript::NotifyFinished(blink::Resource*) + 384
543 31  libblink_platform.dylib             0x0000000143841850 blink::Resource::NotifyFinished() + 304
"""

This causes future calls to LocalFrameView::SendResizeEventIfNeeded to trigger a EnqueueResizeEvent. 

With the feature enabled, the first call never happens. When the second call happens, first_layout_ is true, so both layout_size_ and last_viewport_size_ are set to 50x40. Thus, the resize event is never queued. 

When considering the main frame, we only see a call to blink::LocalFrameView::UpdateLayout, which causes the resize event to correctly not be called.


Project Member

Comment 18 by bugdroid1@chromium.org, Dec 22 2017

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

commit 6c95c9a63d9e8ad3c03c54a5cb160b87ba59866d
Author: Steve Kobes <skobes@chromium.org>
Date: Fri Dec 22 22:30:01 2017

Mark empty LayoutView for initial layout.

Typically the LayoutView is marked for layout when it acquires children,
who mark themselves and their containers.  But we want an initial layout
pass even if the LayoutView has no children, for bookkeeping tasks like
setting LocalFrameView::last_viewport_size_.

Setting last_viewport_size_ during the initial layout ensures that we
send a resize event when an iframe leaves the display: none state.

Two paint invalidation tests have updated baselines reflecting earlier
removal of an iframe's initial vertical scrollbar.

Bug:  795661 
Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel;master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I3e7984b2f4cd012056e964114a803b484da584f1
Reviewed-on: https://chromium-review.googlesource.com/838249
Reviewed-by: Erik Chen <erikchen@chromium.org>
Commit-Queue: Steve Kobes <skobes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#526073}
[add] https://crrev.com/6c95c9a63d9e8ad3c03c54a5cb160b87ba59866d/third_party/WebKit/LayoutTests/fast/events/resize-display-none-iframe.html
[modify] https://crrev.com/6c95c9a63d9e8ad3c03c54a5cb160b87ba59866d/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/iframe-display-none-to-display-block-expected.txt
[modify] https://crrev.com/6c95c9a63d9e8ad3c03c54a5cb160b87ba59866d/third_party/WebKit/LayoutTests/flag-specific/root-layer-scrolls/platform/mac/paint/invalidation/iframe-display-none-to-display-block-expected.txt
[modify] https://crrev.com/6c95c9a63d9e8ad3c03c54a5cb160b87ba59866d/third_party/WebKit/LayoutTests/flag-specific/root-layer-scrolls/platform/mac/paint/invalidation/position/shift-relative-positioned-container-with-image-addition-expected.txt
[modify] https://crrev.com/6c95c9a63d9e8ad3c03c54a5cb160b87ba59866d/third_party/WebKit/LayoutTests/flag-specific/root-layer-scrolls/platform/win/paint/invalidation/iframe-display-none-to-display-block-expected.txt
[modify] https://crrev.com/6c95c9a63d9e8ad3c03c54a5cb160b87ba59866d/third_party/WebKit/LayoutTests/flag-specific/root-layer-scrolls/platform/win/paint/invalidation/position/shift-relative-positioned-container-with-image-addition-expected.txt
[modify] https://crrev.com/6c95c9a63d9e8ad3c03c54a5cb160b87ba59866d/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/iframe-display-none-to-display-block-expected.txt
[modify] https://crrev.com/6c95c9a63d9e8ad3c03c54a5cb160b87ba59866d/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/shift-relative-positioned-container-with-image-addition-expected.txt
[modify] https://crrev.com/6c95c9a63d9e8ad3c03c54a5cb160b87ba59866d/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/iframe-display-none-to-display-block-expected.txt
[modify] https://crrev.com/6c95c9a63d9e8ad3c03c54a5cb160b87ba59866d/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/shift-relative-positioned-container-with-image-addition-expected.txt
[modify] https://crrev.com/6c95c9a63d9e8ad3c03c54a5cb160b87ba59866d/third_party/WebKit/LayoutTests/virtual/spv175/paint/invalidation/iframe-display-none-to-display-block-expected.txt
[modify] https://crrev.com/6c95c9a63d9e8ad3c03c54a5cb160b87ba59866d/third_party/WebKit/LayoutTests/virtual/spv175/paint/invalidation/position/shift-relative-positioned-container-with-image-addition-expected.txt
[modify] https://crrev.com/6c95c9a63d9e8ad3c03c54a5cb160b87ba59866d/third_party/WebKit/Source/core/frame/LocalFrameView.cpp

Blocking: 650433
Owner: skobes@chromium.org
Status: Fixed (was: Started)

Sign in to add a comment