{"push_id":781822600,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"b85b175a4c4cc01ad4bec2ef9891f6c2136edb17","before":"ba8e0d40da6897364a836845e74c3612082c5c51","commits":[{"sha":"b85b175a4c4cc01ad4bec2ef9891f6c2136edb17","author":{"email":"542cb5b73770f9741bae40d34cf7a192bc7ad2cc@chromium.org","name":"szager@chromium.org"},"message":"Add overflow:auto scrollbars to child flex basis.\n\nLayoutBlocks delay updating their scrolling information until the\nuppermost flex box has finished layout.  However, if the flex item\nhas overflow:auto, this means that the scrollbar width is not\nincluded in the flex item's logical height during flexing.  This\nleads to spurious scrollbars in the flex direction.\n\nThe original reason for delaying the update of scrolling information\nwas to fix a bug where scroll positions would be lost when a flexbox\nchanged:\n\nhttps://bugs.webkit.org/show_bug.cgi?id=97706\n\nFor better or worse, this also turned out to be a performance\noptimization (albeit at the expense of correctness).  Updating the\nscroll information can cause a block to run layout again, if the\nexistence of scrollbars has changed for the block.  If a block in a\nnested hierarchy of flexboxes runs layout N times during flexing, it\nwould then potentially run one additional layout at the end of\nflexing, for a total of N+1.  However, if the the optimization is\nremoved (i.e., scroll info updating for the flex item is not delayed, but\nrun immediately at the end of layout, potentially triggering a second\nlayout if scrollbars changed), then the potential maximum number of\nlayouts during flexing is N*2.\n\nThis patch fixes the correctness issue while preserving the\noptimization: when a flex item runs layout, and its scrollbars have\nchanged, it immediately adds the size of the scrollbars to its\nlogical width/height, but defers the second layout until flexing is\nfinished.  The implementation splits the existing code from\nDeprecatedPaintLayerScrollableArea::updateAfterLayout() into the\nmethods updateScrollDimensions, which is called immediately at the\nend of layout; and finalizeScrollDimensions, which is called at the\nend of flexing.  When layout happens outside the context of flexing,\nthe two methods are called in immediate sequence, preserving existing\nbehavior.\n\nBUG=512229\nR=ojan@chromium.org,cbiesinger@chromium.org,leviw@chromium.org\n\nReview URL: https://codereview.chromium.org/1295933003\n\ngit-svn-id: svn://svn.chromium.org/blink/trunk@201824 bbb929c8-8fbe-4397-9dbb-9b2b20218538","distinct":true,"url":"https://api.github.com/repos/dstockwell/blink/commits/b85b175a4c4cc01ad4bec2ef9891f6c2136edb17"}]}