Opera Software upstreamed commits

Upstreamed commits in Chromium: 6550, V8: 42, Skia: 12, BoringSSL: 16.

Click message to expand


Author Message When
Allow generation of a chromium outdirs when enable_extensions=false
This allows us at Opera to patch chromium a little less before
building a downstream product that doesn't depend on extensions.

At the moment, the 'chrome' target does not compile when
enable_extensions=false - and this is fine since Chrome indeed
needs extensions. But other browser products that use
enable_extensions=false can now generate an outdir without
getting complaints from GN.


TEST=gn gen out/GnTest
TEST=gn gen --args='enable_extensions=false' out/GnTest
TEST=gn gen --args='is_component_build=true' out/GnTest
TEST=gn gen --args='is_component_build=true enable_extensions=false' out/GnTest
TEST=gn gen --args='target_os="android"' out/GnTest
TEST=gn gen --args='target_os="android" enable_extensions=false' out/GnTest
TEST=gn gen --args='target_os="chromeos"' out/GnTest
TEST=gn gen --args='target_os="chromeos" is_component_build=true' out/GnTest

Review-Url: https://codereview.chromium.org/2904443004
Cr-Commit-Position: refs/heads/master@{#479646}
Remove WebContentsDelegateAndroid::OnGoToEntryOffset
It was added by Opera in https://codereview.chromium.org/684133007, but
has since stopped being used downstream. There are no references to the
method in any upstream code.


Review-Url: https://codereview.chromium.org/2942553002
Cr-Commit-Position: refs/heads/master@{#479637}
Check if we are going to create a new column row, instead of just assuming it.
Before attempting to guess what the height of the next column row is going to
be, make sure that we're actually going to create one. If we're not going to
create one, the height of the already existing row is what we should use.

This fixes a recently introduced DCHECK failure. It also makes us handle
overflowing columns in a nested fragmentation context properly. That has
probably never worked before, though.

Also shortened the name of a parameter, to prevent the code formatter from
creating soup.

Change-Id: I45ccc272312a0757630c0d97d1d023168756d51c
Reviewed-on: https://chromium-review.googlesource.com/535556
Reviewed-by: Emil A Eklund <eae@chromium.org>
Commit-Queue: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#479428}
Add missing #include <cerrno> in socket_options.cc
One of our toolchains does not expose |errno| in the global namespace.


Review-Url: https://codereview.chromium.org/2930873002
Cr-Commit-Position: refs/heads/master@{#479366}
Relax a DCHECK: Column indices out of bounds are fine here.
Just let MultiColumnFragmentainerGroup::LogicalHeightInFlowThreadAt() return
0 if the column index is past the end. The last column *within* bounds will
get its height clamped against the bottom of the flow thread, like before.


Change-Id: Icd0c8d77f73a02b69a27f24ca70b7b0a023c28dd
Reviewed-on: https://chromium-review.googlesource.com/533016
Reviewed-by: Emil A Eklund <eae@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#479436}
Made focus hightlight region calculation (outline-style:auto) multicol-aware.
Went for a very simplistic solution, at least for now. Just use the bounding
box of everything inside the multicol container.


Change-Id: Ie5ca0f747edc4ac3b384ecb784443592edee7379
Reviewed-on: https://chromium-review.googlesource.com/534473
Commit-Queue: Xianzhu Wang <wangxianzhu@chromium.org>
Reviewed-by: Xianzhu Wang <wangxianzhu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#479406}
Let NextLogicalTopForUnbreakableContent() rely on PageLogicalHeightForOffset().
Due to poorly duplicated code (not consistently clamping against computed
height/max-height), the machinery was confused as to how tall a next
fragmentainer group (column group) would be, and would trick the line layout
code into incorrectly believing that there'd be enough space for a tall line,
if we just pushed it all the way past the current fragmentainer group. This
caused a DCHECK failure:

DCHECK_GT(page_logical_height, LayoutUnit()) in

LayoutBox: :PageLogicalHeightForOffset().
Change-Id: I1e34fe3e84d798f3679404589414d90a758a72ea
Reviewed-on: https://chromium-review.googlesource.com/532959
Reviewed-by: Emil A Eklund <eae@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#479305}
Stop assuming metadata contains at least one stream
It is valid for a media::Demuxer implementation to provide 0 streams in
GetAllStreams().  In this case, the metadata built by PipelineImpl is
empty too.  This should be handled, just like PipelineImpl already
handles absence of streams with PIPELINE_ERROR_COULD_NOT_RENDER.


Review-Url: https://codereview.chromium.org/2930333004
Cr-Commit-Position: refs/heads/master@{#479066}
Add ifdef guard to WorkletModuleTreeClient.h
We use "jumbo" compilation of blink in our project. The main idea is
to compile some number of cc files as one compilation unit. It
significantly speeds up compilation time of blink. With "jumbo"
enabled there is compilation error due to lack of ifdef
guard in file WorkletModuleTreeClient.h.


Review-Url: https://codereview.chromium.org/2935823003
Cr-Commit-Position: refs/heads/master@{#478967}
Avoid AudioBufferSourceHandler data race.
Following r478084, the main thread may contend with the audio thread
on accessing AudioBufferSourceNodeHandler's mutable state. Coordinate
such access by introducing a Mutex over |min_playback_rate_|.

Using atomic ops would be the natural choice for handling this, but
steering clear of those over doubles (cf. https://crrev.com/1256053006)
until std::atomic<> is allowed.


Review-Url: https://codereview.chromium.org/2929283002
Cr-Commit-Position: refs/heads/master@{#478679}
Better handling of min/max widths that depend on the containing block.
This is about how we behave when NeedsPreferredWidthsRecalculation()
is true. This is a rather rare situation, and also an unfortunate one,
since min/max width calculation should be strictly bottom-up.

If we mark min/max widths of an object as dirty, we need to guarantee
that they're actually going to be recalculated. Otherwise, if the
object is left around with dirty min/max widths, it will block
subsequent min/max dirtying of any descendant. We also need to make
sure that if we mark min/max widths as dirty due to
NeedsPreferredWidthsRecalculation(), we also need to mark the min/max
widths of every child with the same issue as dirty, recursively, since
any layout change may have affected the min/max widths there too.

Documented NeedsPreferredWidthsRecalculation(). Added one test that
has been failing for ages, and one that started to fail because of the
bug referenced. Both pass now.


Change-Id: I8b9325ba20a6da2329d28d21a6eca6bc1aa36c06
Reviewed-on: https://chromium-review.googlesource.com/527640
Reviewed-by: Stefan Zager <szager@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#478616}
Update HR implementation to match the spec.
Don't hardcode HR as establishing a new formatting context.
Set overflow:hidden in the UA stylesheet instead. [1]
Also specify unicode-bidi:isolate [2]

Some heavy test expectation rebaselining is necessary, since making
HR overflow:hidden entails that it will now establish a PaintLayer.

[1] https://html.spec.whatwg.org/multipage/rendering.html#the-hr-element-2
[2] https://html.spec.whatwg.org/multipage/rendering.html#bidi-rendering


Change-Id: I1734242d240cb236269b218283bcb16b4ca7c0e4
Reviewed-on: https://chromium-review.googlesource.com/521044
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Stefan Zager <szager@chromium.org>
Cr-Commit-Position: refs/heads/master@{#478611}
Avoid unsafe heap access from audio thread.
The audio thread tries to touch main thread Blink GCed objects in a
select few places, which isn't safe as a GC might concurrently run.

Avoid such cross off-thread usage, rearrange the processing of
finished nodes from the audio thread to the main thread.


Review-Url: https://codereview.chromium.org/2913303002
Cr-Commit-Position: refs/heads/master@{#478084}
Declare kAppendWholeFile as constexpr
kAppendWholeFile was dynamically initialized, causing it to be 0 at the
time of the initialization of the kMediaSourceADTSTests array when
built with VC 2015.  This resulted in an assertion failure in
MockMediaSource constructor.

std::numeric_limits::max() is constexpr in C++11, so fix that by
declaring kAppendWholeFile as constexpr too.

While we're here, let's change DCHECKs in mock_media_source.cc to
CHECKS, because there is no reason to prefer DCHECK over CHECK in
test-only code.

TEST=media_unittests --gtest_filter=ProprietaryCodecs/BasicMSEPlaybackTest.PlayToEnd/*

Review-Url: https://codereview.chromium.org/2920243002
Cr-Commit-Position: refs/heads/master@{#477755}
Tidy up SVGListPropertyHelper
Turn some iterations into range-based for-loops. Use operator== from
Vector<...> rather than re-implementing it. Remove FindItem (unused.)
Deduplicate some code, replace 0 with nullptr where appropriate and
simplify the padding loop.


Review-Url: https://codereview.chromium.org/2920103002
Cr-Commit-Position: refs/heads/master@{#476914}
De-virtualize HasRelativeLogical{Height,Width} in LayoutBox.
It's not overridden anywhere.

Change-Id: I5eb4be5ee121c726c5219854ed9e9408b3ac62e5
Reviewed-on: https://chromium-review.googlesource.com/522062
Reviewed-by: Stefan Zager <szager@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#476777}
No longer let 0 mean that fragmentainer height is unknown.
For multicol, PageLogicalHeightForOffset() would normally figure out what to
return by consulting the flow thread, which would find the appropriate column
set, which in turn would find the appropriate fragmentainer group and return
its height.

We used to treat a 0 value as "unknown" most of the time (but there were also
cases where we'd accept it as a column height). We now always have to call
IsPageLogicalHeightKnown() first to tell whether it's known or not. This is
reasonable, since the calling code always has to act upon the situation of not
knowing the height (typically skip some steps, since fragmentation is
impossible until height is known).

It is now forbidden to call PageLogicalHeightForOffset() if height is unknown
(there are DCHECKs). The height is unknown in many cases in the first multicol
balancing pass. The height will be known once we have made a column height
estimate. It doesn't have to be the final and correct height. This CL doesn't
change anything in that regard, but now we are required to be sure that we
have some clue at all before dealing with fragmentainer heights.

MultiColumnFragmentainerGroup now has a flag that tells whether the logical
height is known or not. We need the flag, because the logical height may
actually end up as 0, e.g. when a multicol container just has zero-height
content, or when the multicol container itself has a specified height of 0.
This unclamped height will be used as block progression for the column row,
which will contribute to the final height of the multicol container. The
actual column height will be clamped to not be less than 1px. This is in
accordance with the spec [1]. We previously used to treat truly zero-height
fragmentainer groups as having an unknown height in some parts of the code,
while in other parts of the code we'd just accept it and end up dividing by
it (to convert a flow thread offset to a column index, for instance).

This is a clean-up CL that happens to fix bugs.

[1] https://drafts.csswg.org/css-break/#breaking-rules


Change-Id: I63550d804bef073a5c24570d63bd55176ec5e396
Reviewed-on: https://chromium-review.googlesource.com/514049
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#476270}
Remove svg/animations/animate-local-url.html from TestExpectations
No flakes observed after https://codereview.chromium.org/2907193002.


Review-Url: https://codereview.chromium.org/2917623002
Cr-Commit-Position: refs/heads/master@{#475869}
Always relayout children of LayoutView when printing.
We can normally trust UpdateLogicalWidth() to detect and report size changes,
but this is not the case when printing, because
FrameView::ForceLayoutForPagination() changes the logical width of the
LayoutView behind our back.


Review-Url: https://codereview.chromium.org/2908503003
Cr-Commit-Position: refs/heads/master@{#475862}
Do not prepend implicit type selectors to :host rules.
:host and :host-context() should not have implicit type selectors pre-
pended for universal rules with default @namespace. Default @namespace
applies to type and universal selectors inside :host() and
:host-context(), but a default @namespace rule should not affect :host.
That is, :host matches the host element regardless of any @namespace


Change-Id: I78d2919275aa6bdc4fdc5b02a4772d2352819258
Reviewed-on: https://chromium-review.googlesource.com/518019
Reviewed-by: Takayoshi Kochi <kochi@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#475834}
Put unqualified pseudos into the more specific rulesets.
We were incorrectly putting unqualified pseudo classes for :focus,
:visited, :-webkit-any-link and :link into the universal RuleSet which
meant we would match them for every element defeating the optimization
of having the separate rulesets.

This patch starts tracking the pseudos inside the extraction step to
make sure we put them into the right ruleset. It also adds some asserts
that the default UA sheet never adds any universal rules.

This removes one rule (:focus) from the set of rules for every element.

Bug: 721514
Change-Id: I4208e1c8c938aa0af7a736594f3c0059b6b28fcc
Reviewed-on: https://chromium-review.googlesource.com/517789
Commit-Queue: Rune Lillesveen <rune@opera.com>
Reviewed-by: Naina Raisinghani <nainar@chromium.org>
Cr-Commit-Position: refs/heads/master@{#475642}
Clean up creation of "detached" SVG* data type objects
Add CreateDetached helpers for the various objects (or, their tear-offs)
that can be created without having a context element. This is in
preparation for replacing some of these with their DOM* counterparts
from the Geometry specifications [1]. The "detached" term is borrowed from
the SVG2 specification [2].
Also drop all of the default arguments that pass QualifiedName::Null(),
and instead explicitly pass them where needed (for detached objects.)

[1] https://drafts.fxtf.org/geometry/
[2] https://svgwg.org/svg2-draft/struct.html#__svg__SVGSVGElement__createSVGNumber


Review-Url: https://codereview.chromium.org/2912663002
Cr-Commit-Position: refs/heads/master@{#475583}
Less duplicated code between AvoidsFloats() and CreatesNewFormattingContext().
In general there shouldn't really be any need for both. We could just remove
AvoidsFloats() and keep CreatesNewFormattingContext(). But then again, it might
be considered weird to say that replaced content creates a block formatting
context. So let's keep the both of them for now.

However, the following rule should always apply: If the object creates a new
formatting context, it implies that it also avoids floats. That's the reason for
declaring LayoutBlockFlow::AvoidsFloats() as final.

Furthermore, the only kind of LayoutBlock-type objects that DOESN'T create a
new formatting context, are certain LayoutBlockFlow (block container) objects.
So move the checks over from LayoutBlock to LayoutBlockFlow. Keep a virtual
true-returning CreatesNewFormattingContext() in LayoutBlock. We could actually
consider removing this, but there are 2-3 call sites that currently need it.

This CL causes a couple of minor rendering differences: Previously, HR elements
were told to avoid floats, but not to establish block formatting contexts.
Let's be consistent and return true for both. This makes us more compatible
with Edge. Test included. Turning HR elements into true block formatting
contexts also affects margin collapsing. Its top and bottom margins no longer
collapse. Had to make a change to the default style sheet for HR inside
SELECT because of this. Inside SELECT, HR loses its borders, so that its top
and bottom margins would previously collapse, but not anymore, now that it
establishes a block formatting context. To cancel out any rendering difference,
reduce margins in this particular case.

Similarly for RT (ruby text). LayoutRubyText objects are repositioned after
layout, which essentially requires them to contain all child floats, i.e.
establish a new block formatting context. Previously they achieved a
quasi-formatting context by returning true from AvoidFloats(). The screenshot
test fast/ruby/float-overhang-from-ruby-text.html would fail spectacularly if
they exposed child floats to their sibling ruby base. That test expectation
still requires a tiny update to its layout tree dump, though.

This CL also makes CreatesNewFormattingContext() return true for tables,
flexboxes, grids, and anything blocky that isn't LayoutBlockFlow. This
shouldn't be a web-exposable change, though, since no non-LayoutBlockFlow types
can contain float children (e.g. a float inside a table would have to be
wrapped inside either a table-cell or a table-caption (which both establish a
new block formatting context), and a float inside a flexbox would have to be
wrapped inside a flex item (which establishes a new block formatting context)).


Change-Id: If60c1fc636db73a7ff241471ea7bf95adf996512
Reviewed-on: https://chromium-review.googlesource.com/512824
Reviewed-by: Robert Hogan <robhogan@gmail.com>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#475749}
Fixed flaky test snav-z-index.html.
requestAnimationFrame before initTest().

Without this change, repeat-each=10 caused failures most of the time.
With this change repeat-each=100 has been run locally a few times
without any failures (Linux x64).

Also converted some setTimeout => requestAnimationFrame for better


Change-Id: Ic1f27c3fda1ff7da063ab29286d707cb518ab7a6
Reviewed-on: https://chromium-review.googlesource.com/518163
Reviewed-by: Takayoshi Kochi <kochi@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#475429}
Attempt to fix flakiness in svg/animations/animate-local-url.html
SMIL animations start after the 'load' event has been dispatched, so
make sure to schedule the relevant timer after the 'load' event handler
has run.


Review-Url: https://codereview.chromium.org/2907193002
Cr-Commit-Position: refs/heads/master@{#475364}
Remove unused methods in SVGListPropertyHelper and SVGPropertyTearOff*
SVGPropertyTearOffBase: :GetType, and corresponding concretization in
Review-Url: https://codereview.chromium.org/2913513002
Cr-Commit-Position: refs/heads/master@{#475310}
Use LowerASCII instead of DeprecatedLower in css/
Incorrectly folded upper-case non-ascii characters into ascii for type,
attribute, id, and class selectors causing non-matching selectors to

Also fixed for media types and features.


Change-Id: I5a6f813b2722ee4efcff2ab933f5ad075faadcbb
Reviewed-on: https://chromium-review.googlesource.com/517105
Commit-Queue: Rune Lillesveen <rune@opera.com>
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#475021}
Drop author ::-internal-* pseudo at parse time.
The SelectorChecker already always failed, but the selector should be
invalid and the whole rule dropped. There is a single pseudo
::-internal-media-controls-overlay-cast-button which is still web-
facing. That is tracked by issue 678285.

Moved the update pseudo page in @page into a separate method.


Change-Id: Ifca8a0e593c4d11720b0b0822e4c753ff45fb52b
Reviewed-on: https://chromium-review.googlesource.com/512827
Commit-Queue: Rune Lillesveen <rune@opera.com>
Reviewed-by: Mounir Lamouri <mlamouri@chromium.org>
Cr-Commit-Position: refs/heads/master@{#474987}
Enable heap compaction on all 'container' arenas.
Reconcile indexing for compactable arenas to always be wrt
the arena index -- it was miscued on setting, using an
offset instead, thereby preventing vector[1-4] arenas from
being considered for compaction.


Review-Url: https://codereview.chromium.org/2908463002
Cr-Commit-Position: refs/heads/master@{#474966}
Stricter equality check for local refs in CSSURIValue
'local' references ("#foo") needn't even consider the absolute URL(s)
when being compared. In this particular case, the (redundant) comparison
ended up comparing equal because a base-URL-less parser context is used
when parsing the property (will be fixed separately.)
When |is_local_| is set, only consider the relative URLs during the


Review-Url: https://codereview.chromium.org/2905033003
Cr-Commit-Position: refs/heads/master@{#474717}
blink_gc_plugin: disallow WeakMember<> fields in off-heap objects.
Add missing check for WeakMember<> fields in non-managed classes;
not permitted just like Member<>.


Review-Url: https://codereview.chromium.org/2902563002
Cr-Commit-Position: refs/heads/master@{#474368}
When moving past a left-hand scrollbar, don't jump way outside the content box.
We handle rendering, scrolling and scrollbars quite poorly if a scrollbar is
actually wider than its containing block. See crbug.com/724255 for more info on
this corner-case.

We end up with negative values in parts of the code where they are not
expected. This CL is just a simple regression fix to at least make sure that
scrollWidth doesn't get messed up by left-hand scrollbars.

AngularJS depends on this.


Review-Url: https://codereview.chromium.org/2893833004
Cr-Commit-Position: refs/heads/master@{#474226}
Don't trigger full active style update on styleSheets access.
Element.styleSheets and ShadowRoot.styleSheets need to be made up-to-
date on access. We used to do a full active style update, but re-
collecting the stylesheet list should be enough, leaving the active
style dirty flags intact.

We introduce a dirty-flag for the stylesheet list in
StyleSheetCollection to avoid repeatedly re-collecting this list while
the active style is still dirty.

This coincidentally fixes issue 722826 since we do not collect
stylesheets in import shadow trees as part of the active style update,
but is now made up-to-date on request when accessing the styleSheets
collection on shadow roots inside import documents.

This fixes the performance issue 717506.


Review-Url: https://codereview.chromium.org/2884993002
Cr-Commit-Position: refs/heads/master@{#473846}
Correct logic "Should ContextMenu target the selection?"
If the selection doesn't have focus, it shouldn't be the target
of the context menu.

For example, an _unfocused_ range selection should not be the
context menu's target (the focused element should be the target).

BUG=725005, 725022

Review-Url: https://codereview.chromium.org/2880313002
Cr-Commit-Position: refs/heads/master@{#473842}
Get SVGLayoutTreeAsText shape values from ComputedStyle
The values from ComputedStyle better reflect what values are actually

Review-Url: https://codereview.chromium.org/2888603005
Cr-Commit-Position: refs/heads/master@{#473157}
Make CSSSelector::SelectorText() non-recursive.
Should fix the stack overflow issue for selectors with an excessive
amount of compound selectors.


Change-Id: I2a1cfb8cb2d00d96f8d46a6e7317c5871020c6cd
Reviewed-on: https://chromium-review.googlesource.com/506020
Reviewed-by: Eddy Mead <meade@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#473972}
Update styleSheets list in import without active style update.
Querying document.styleSheets should not need to do a full active style
update. This CL is implementing a light-weight update of the styleSheets
list querying document.styleSheets on html import documents.

We collect and swap style_sheets_for_style_sheet_list_ for the
collection of the import document without touching the active style or
the dirty flags for active style on the master document. This is
straightforward for import documents as they don't have an active
stylesheet list themselves. Doing this optimization for top level
documents and shadow trees is the next step, but we need to be more
careful for those cases to keep the dirtyness without having to re-
collect for the styleSheets api every time.


Review-Url: https://codereview.chromium.org/2880303002
Cr-Commit-Position: refs/heads/master@{#472751}
Remove SVGTextMetrics Width/Height getters
Remove said methods, replacing them with an additional Advance(...)
overload and a new method Extents() for the users that need those (all
in SVGTextQuery.)


Review-Url: https://codereview.chromium.org/2888623008
Cr-Commit-Position: refs/heads/master@{#472650}
Remove duplicate selector list serialization code.
CSSStyleRule::GenerateSelectorText() was identical to
CSSSelectorList::SelectorsText(). Removed the former.


Change-Id: Ia9432434c8a7943228a39fe5d1005b2fb49492bc
Reviewed-on: https://chromium-review.googlesource.com/506730
Reviewed-by: Alexis Menard <alexis.menard@intel.com>
Reviewed-by: Naina Raisinghani <nainar@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#472627}
Clear document scope dirtiness in import StyleEngine.
This is part of the plan to fix 717506 by re-collect sheets for
style_sheets_for_style_sheet_list_  separately from updating all of
active style to make it more light-weight.

Some sanity checking and comment about document scope dirtiness in,
and clear dirtiness after updating active sheets for, html imports.

Also renamed to UpdateActiveStyleSheetsInImport() to make it clearer
what the method does.


Review-Url: https://codereview.chromium.org/2880263002
Cr-Commit-Position: refs/heads/master@{#472447}
Allocate CSSGlobalRuleSet on heap.
Avoids allocating the CSSGlobalRuleSet on html import StyleEngines.

Review-Url: https://codereview.chromium.org/2883003002
Cr-Commit-Position: refs/heads/master@{#472186}
Avoid synchronous stylesheet update on html import loaded.
A use counter was updating the styleSheets list, which updated all of
active style to figure out if an html import contains stylesheets.
Instead, do a simpler walk of the stylesheet candidate nodes and return
early if one of them has a sheet, or a sheet load is in progress.


Review-Url: https://codereview.chromium.org/2882983002
Cr-Commit-Position: refs/heads/master@{#472139}
Rename *Focus*-methods of FrameSelection to clarify its public API
As we've now added FS::SelectionHasFocus in [1], let's rename
FS::*IsFocused* to FS::*FrameIsFocused* to emphasize that these
methods give information about the Frame (in contrast to

TEST=No behavior change

[1] = crrev.com/2841093002

Review-Url: https://codereview.chromium.org/2876973003
Cr-Commit-Position: refs/heads/master@{#472129}
Don't try to set the empty string as the preferred set.
Noticed during debugging that we did an extra MarkDocumentDirty() for
active stylesheet update trying to change the preferred set from empty
string to empty string in a document where no sheets had a title

Guard the call sites which didn't check for emptiness and add a DCHECK
in the SetPreferredStylesheetSetNameIfNotSet implementation.

Review-Url: https://codereview.chromium.org/2879223002
Cr-Commit-Position: refs/heads/master@{#472039}
Use CorrespondingUseElement() in SVGElement::TreeScopeForIdResolution
For elements sourced non-locally, CorrespondingElement() will give the
TreeScope of the document it was sourced from rather than the TreeScope
of the <use> element. Until we are able to resolve references at
ComputedStyle resolution, attempt to use the host of the shadow tree,
i.e the (outermost) <use> element. (This will not work when external
paint servers are supported, or with a paint server defined in the
referenced document.)


Review-Url: https://codereview.chromium.org/2877973002
Cr-Commit-Position: refs/heads/master@{#471955}
Make context menu aware of hidden selection
When the frame's selection is hidden, the context menu should
use the focused element (not the selection) as context.


Expected: Context menu for <a>.
Review-Url: https://codereview.chromium.org/2869713003
Cr-Commit-Position: refs/heads/master@{#471719}
Nested <use>s can resolve against an external resource
Rather than using TargetElementFromIRIString(...) when resolving nested
<use> references, we should be using ResolveTargetElement(), since the
latter also considers a possible external resource.


Review-Url: https://codereview.chromium.org/2875303002
Cr-Commit-Position: refs/heads/master@{#471632}
Distinguish between row (fragmentainer group) height and column (fragmentainer) height.
TLDR; The spec [1] says that a fragmentainer height must always be 1px or
greater, to ensure progress. If we just do this, we'll avoid a lot of trouble
with limitations in the data types that we use.

While *column* heights will now be clamped to >= 1px, we still allow the height
of a *row* (fragmentainer group) to be less than 1px. We don't want the row to
take up more space than it should in its container.
E.g. <div style="columns:2; height:0.5px;"><div style="height:1px";></div></div>
will give a row height of 0.5px, as specified. The column height, on the other
hand, should be clamped up to 1px.

And here, for the nastiness that this CL aims to fix:
<div style="columns:2; height:0.25px;">
    <div style="height:10000000px;"></div>
The content to fragment is 10 million pixels tall, and the column height has
been specified as 0.25px. Internally in our code, heights are stored as
LayoutUnit, which is a fixed-point unit with 6 bits reserved for decimals. On
the other side of the decimal point we have room for 32-6 bits = 26 bits, which
is what we have for a signed integer. That's 25 bits for the absolute value.
That's just over 30 million. LayoutUnit uses saturated arithmetic so there'll
never be any integer overflow or underflow, but there may be other ill effects.
Like in this case, if we actually allow a column height of less than 1px (i.e.
0.25px), when the engine for example wants to figure out the *actual* column
count (column count was *specified* as 2, but there's no way we're going to be
able to fit a 10 millions pixels tall thing in two columns when the column
height is 0.25px, so the actual count will be way higher), we take the flow
thread portion (10000000px) and divide by the column height (0.25px). If we
divide something by something (positive) less than 1, we of course end up with
a quotient larger than the dividend. While the dividend may be small enough to
fit unclamped in a LayoutUnit (10000000px fits just fine), the quotient
(40000000) may not. So, while the actual column count really is 40 million (if
we allow columns to be shorter than 1px), the engine will clamp the 40 million
to fit inside a LayoutUnit. That's 33554431. This is the root of the problem,
and this incorrect column count value may in turn lead to other bad things,
even negative column heights in subsequent rows (and good luck calculating a
used column count off that!). It would probably be possible to cope with this,
if we only take extra care everywhere, when dealing with close-to-insane

Or we can just do what the spec says, and clamp column heights to >= 1px.

[1] https://drafts.csswg.org/css-break/#breaking-rules


Review-Url: https://codereview.chromium.org/2874933005
Cr-Commit-Position: refs/heads/master@{#471330}
Inherit [Unforgeable] attributes between components
Specifically, when an interface in modules/ inherits an interface in core/
that defines an [Unforgeable] attribute, the interface in modules/ should
still have the attribute.


Review-Url: https://codereview.chromium.org/2874153003
Cr-Commit-Position: refs/heads/master@{#471284}
Fix textPath textLength position adjustment for the spacing case
Follow-up to https://codereview.chromium.org/2870393002, adjusting the
<textPath> 'textLength' computation in the same way.


Review-Url: https://codereview.chromium.org/2868413003
Cr-Commit-Position: refs/heads/master@{#471248}
debug_fission does not depend on bundled binutils
Change-Id: Ic6cd79175a1ea51dcd8f6ba11bf48ed6f800db6b
Reviewed-on: https://chromium-review.googlesource.com/503011
Reviewed-by: Nico Weber <thakis@chromium.org>
Reviewed-by: Brett Wilson <brettw@chromium.org>
Commit-Queue: Mostyn Bramley-Moore <mostynb@opera.com>
Cr-Commit-Position: refs/heads/master@{#471243}
Improve LayoutMultiColumnFlowThread::IsPageLogicalHeightKnown().
Simply returning whether the last column set has a known height isn't really
sufficient. All column sets need to have known heights.

However, instead of asking each column set every time we call
LayoutMultiColumnFlowThread::IsPageLogicalHeightKnown(), use a flag.


Review-Url: https://codereview.chromium.org/2877703003
Cr-Commit-Position: refs/heads/master@{#471231}
Rebuild layout tree in flat tree order.
Marking the DOM for layout tree rebuild and the actual rebuilding is
now contained in the lifecycle update at a point where the shadow dom
distribution is up-to-date. We can therefore safely mark the flat-tree
ancestor chain without risking that it's broken by a distribution.

The point of doing RebuildLayoutTree in flat tree order is that layout
boxes can then be re-attached in the layout tree order which makes it
simpler to handle whitespace reattachment. For shadow trees and slotted
elements, when using the shadow-including tree order, we could have
elements rebuild their layout boxes in an order arbitrarily decided by
the slot assignments and slot positions in the shadow tree.

Note that while the RebuildLayoutTree traversal used to happen in the
shadow-including order, the layout attachment already happens in the
flat tree order.

See [1] for a plan to fix correctness and performance of whitespace

This CL is doing the following changes:

1. Modify MarkAncestorsWithChildNeedsReattachLayoutTree to mark flat
   tree ancestry.

2. Rebuild distributed children for InsertionPoint and HTMLSlotElement.
   These children were rebuilt after their host's shadow tree before
   this change.

3. Factored out RebuildLayoutTreeForChild() as common code for both
   walking light tree children in ContainerNode, and distributed
   children in InsertionPoint and HTMLSlotElement.

4. Made FinalDestinationSlot() a member of node instead of a static
   function as it is now needed in multiple files.

[1] http://bit.ly/2ozyBdx

Review-Url: https://codereview.chromium.org/2836753002
Cr-Commit-Position: refs/heads/master@{#471188}
remove superfluous size_t value >= 0 check
This assertion adds no value, and can trigger warnings (and errors if
you build with -Werror). I think it should be removed. If it is really
important, a comment where the variable is defined would suffice.

Patch submitted upstream:

https: //github.com/gperftools/gperftools/pull/885
Change-Id: Ife6de127928bfdd0c3861b65cdeb8e5ccbfee16d
Reviewed-on: https://chromium-review.googlesource.com/503034
Reviewed-by: Will Harris <wfh@chromium.org>
Commit-Queue: Mostyn Bramley-Moore <mostynb@opera.com>
Cr-Commit-Position: refs/heads/master@{#471054}
Merged all PointerToId functions into TraceHelper::PointerToString.
There are many places in scheduler/renderer that need to make a string
out of a pointer for tracing purposes. This creates a shared function
for them.

This was noticed while experimenting with jumbo builds which can not
handle reused symbol names in the global or global anonymous scope.

Review-Url: https://codereview.chromium.org/2837323002
Cr-Commit-Position: refs/heads/master@{#470948}
Check StyleSheetIsLoading before clearing LinkStyle sheet.
StyleSheetIsLoading() returns true if the top sheet is loaded but has
loading imports. If the top level sheet is cleared before we check the
loading status, we will not appropriately call RemovedPendingSheet()
which may block rendering indefinitely.


Review-Url: https://codereview.chromium.org/2873133002
Cr-Commit-Position: refs/heads/master@{#470943}
Fix textLength position adjustment for the "adjust spacing" case
There should be no advance adjustment after the last character (really,
"typographic unit"), so divide the excess space by the character count
minus one - i.e the number of gaps - rather than the character count.


Review-Url: https://codereview.chromium.org/2870393002
Cr-Commit-Position: refs/heads/master@{#470928}
Remove the SVGImageElement::needs_loader_uri_update_ flag
Since xml:base is no longer a thing, there's no reason to delay the
resource (image) load until the <image> element is in the document.

Remove the flag and initiate resource loads a way resembling
HTMLImageElement. This means a change in behavior, since it will now be
possible get the load to start before the image is inserted into the
document. The new behavior matches Gecko.

Also clean up the code a bit, remove some unused includes and add a TODO
for the document adopt case.


Review-Url: https://codereview.chromium.org/2868323002
Cr-Commit-Position: refs/heads/master@{#470898}
Fix compilation of heap compaction debug diagnostics code.

Review-Url: https://codereview.chromium.org/2871123005
Cr-Commit-Position: refs/heads/master@{#470893}
Reimplement [PutForwards] per spec
An attribute setter for an attribute X with [PutForwards=Y] should mostly
just do

  Set(Get(this, X), Y, value)

With the previous implementation, we instead essentially inlined both the
getting of X and setting of Y into the setter. This is unnecessary (both
will be implemented correctly separately) and also incorrect, since both
the getter for X and setter for Y could be overridden by a script.


Review-Url: https://codereview.chromium.org/2733763003
Cr-Commit-Position: refs/heads/master@{#470864}
Algorithm for deciding if a frame's selection should be hidden
Crrev.com/464698 introduced "hiding" of unfocused selections
in text controls. Hiding avoids clearing the selection upon change
of focus.

Now we only hide selections inside text controls.
Selections within content-editable elements must also be hidden.

Generalize previous work into an algorithm that, given current
DOM and its activeElement, determines whether a frame's selection
should be hidden.

See the algorithm in InHidden() for documentation and read its
unit tests in FrameSelectionTest.cpp.

BUG=715059, 715889

Review-Url: https://codereview.chromium.org/2841093002
Cr-Commit-Position: refs/heads/master@{#470822}
include what you use: errno.h in native_test_launcher.cc
Add missing errno.h include.

Review-Url: https://codereview.chromium.org/1428653003
Cr-Commit-Position: refs/heads/master@{#470564}
Counters are always generated content and cannot be selected.
Copying selection across generated ::before/::after with counter() did
not copy the contents, but the counter content was painted as selected
as if it was.

LayoutTextFragment was already overriding the implementation of
CanBeSelectionLeaf() to skip generated content, but LayoutCounter
inherits from LayoutText which returns always true. Return false for
LayoutCounter as it is always generated content.


Review-Url: https://codereview.chromium.org/2867083003
Cr-Commit-Position: refs/heads/master@{#470141}
Avoid duplicating the BleedAvoidanceIsClipping function in Blink paint
There were two copies of BleedAvoidanceIsClipping and that is not what
we want.

I noticed this while experimenting with jumbo builds where the two
identical symbols would collide.

Review-Url: https://codereview.chromium.org/2863083002
Cr-Commit-Position: refs/heads/master@{#469951}
The first table row is pushed down by border-spacing.
We need to make sure this happens *before* laying it out when inside a
fragmentation context.

Added tests fast/multicol/balance-table-with-border-spacing.html and
fragmentation/table-with-border-spacing.html for this.

This change also fixes breaking inside border-spacing adjacent to table
rows with break-inside:avoid set. There should be no reason to prevent
breaking inside border spacing, just because it's adjacent to such table
rows, but it looks like this was the behavior we got, by accident.
Updated printing/avoid-setting-header-offset-on-header.html accordingly
and threw in an additional test
fragmentation/border-spacing-break-before-unbreakable-row.html for this
collateral fix. It's hopefully correct, since we now match Edge's behavior.


Review-Url: https://codereview.chromium.org/2803383002
Cr-Commit-Position: refs/heads/master@{#469690}
Workaround for UCRT deadlock between gpu's main and watchdog threads
Deadlock is likely caused by UCRT lib bug that can be reproduced with
low-frequency in Opera Browser on Windows 7. Deadlock will permanently freeze
gpu process (watchdog will not intervene as, ironically, it's involved in a


Review-Url: https://codereview.chromium.org/2857743004
Cr-Commit-Position: refs/heads/master@{#469617}
Disable inheritance propagation for text-align.
The text-align property has an internal value -webkit-match-parent with
a dependency on the parent computed style used in the UA sheet for LI,
which means the independent inheritance optimization won't work.


Review-Url: https://codereview.chromium.org/2860743004
Cr-Commit-Position: refs/heads/master@{#469609}
Stop matching scrollbar pseudo element without a scrollbar.
While matching rules for elements, we mark elements as affected-by-* for
user action pseudo classes like hover. It means that when the element is
later hovered, we need to recalculate style to apply hover styles to
that element.

In general, we currently don't support pseudo classes after pseudo
elements, but for scrollbar pseudo elements we do:

  ::-webkit-scrollbar:hover {}

However, we do not want such rules to mark the element as affected-by-
hover. The hover style on scrollbar parts get their hover style updated
when hovered regardless of any flags, and making scrollbar pseudo
element rules affect hover updates on the actual elements causes
unnecessary style recalcs.


Review-Url: https://codereview.chromium.org/2850743003
Cr-Commit-Position: refs/heads/master@{#469309}
IsAccessWhiteListed(): avoid unnecessary stringification.
The origin whitelist may well be empty, so check that first
before taking on the stringification of the security origin.


Review-Url: https://codereview.chromium.org/2855133005
Cr-Commit-Position: refs/heads/master@{#469300}
allow_posix_link_time_opt and is_cfi are clang features
This is required for GCC builds with is_official_build=true.


Review-Url: https://codereview.chromium.org/2858723002
Cr-Commit-Position: refs/heads/master@{#469188}
Hoist layout update out of SVGGraphicsElement::GetBBox and overrides
Call Document::UpdateStyleAndLayoutIgnorePendingStylesheets() in the DOM
entrypoint instead of in each GetBBox implementation/override. Add
DCHECKs as needed in the GetBBox implementations instead to assert the
Adjust ResizeObservation::ComputeTargetSize (which shouldn't need to
update the layout anyway) to account for this.

Review-Url: https://codereview.chromium.org/2854123004
Cr-Commit-Position: refs/heads/master@{#469061}
Rename SVGPreserveAspectRatio::GetCTM to ComputeTransform
This method doesn't "get (a) CTM", it rather computes a transform that
maps from the (initial) viewport space to the viewbox space while
considering the value of 'preserveAspectRatio'.

Review-Url: https://codereview.chromium.org/2856863005
Cr-Commit-Position: refs/heads/master@{#469057}
Simplify the SVGGraphicsElement ...CTM methods
GetCTM() only has a single caller, so can be trivially folded. Similarly
GetScreenCTM which has one kAllowStyleUpdate and one
kDisallowStyleUpdate, so it can be folded while hoisting the call to
update style and layout.
This means that there are no longer a collision between internal methods
and the ones exposed in the DOM, so the "...FromJavascript" suffixes can
be dropped.

Review-Url: https://codereview.chromium.org/2858913002
Cr-Commit-Position: refs/heads/master@{#469055}
Don't update column position in StyleDidChange.
StyleDidChange set the first column position to the horizontal border
spacing value regardless of whether this value changed or not.

I am not familiar with how table layout works in Blink and haven't
debugged this extensively, but when we re-layout a table cell because
it has out-of-flow content which needs layout, the first effective
column position is set wrongly. It gets its initial value from the line
removed in this CL by a style recalc on the table element prior to the
re-layout, which is the h_spacing_, but the spacing is subtracted once
more in http://bit.ly/2pBB7x1


Review-Url: https://codereview.chromium.org/2855853002
Cr-Commit-Position: refs/heads/master@{#468920}
More targeted resource-switching mechanism for SVG selection painting
The mechanism by which resources are generated for painting using
selection style for SVG text is a bit too heavy-handed, and can end up
invalidating both layout and other things. All that is needed is looking
up any <paint> ('fill' or 'stroke') references and invalidating any
state from the non-selection style.

Use a reduced/tailored version of SVGResourcesCache::ClientStyleChanged
that only recreates/swaps the SVGResources object for the LayoutObject
and wrap that mechanism in a scope object.


Review-Url: https://codereview.chromium.org/2846513002
Cr-Commit-Position: refs/heads/master@{#468658}
getScreenCTM on <use> should not include the additional translation
This is a partial revert of https://codereview.chromium.org/2711503002,
preserving the fix from that bug (crbug.com/678167) while restoring the
LocalCoordinateSpaceTransform() infrastructure to compute the correct
CTM for <use> elements.


Review-Url: https://codereview.chromium.org/2853223002
Cr-Commit-Position: refs/heads/master@{#468657}
Revert "Verify that constant vectors aren't invalidated during iteration."
Back out the problem diagnosis CHECKs() added in r463124; condition not


Review-Url: https://codereview.chromium.org/2857503002
Cr-Commit-Position: refs/heads/master@{#468584}
Fix detached event listener attribute updating.
The parser will in some cases create new elements in documents that
have become frame-detached. Account for that -- no execution context
due to the document having become detached -- when processing the
event listeners of an event attribute.


Review-Url: https://codereview.chromium.org/2855443002
Cr-Commit-Position: refs/heads/master@{#468294}
Abort the SVG filter content recording if the FilterData was dropped
In the (rare) case of a recording being started and the FilterData
structure being yanked away (and destroyed) from under
SVGFilterPainter's feet, we need to put the PaintController in a
consistent state before destroying it.
Add a new method SVGFilterRecordingContext::Abort() and call that when
SVGFilterPainter::FinishEffect encounters a null FilterData for the


Review-Url: https://codereview.chromium.org/2847133002
Cr-Commit-Position: refs/heads/master@{#468092}
Refactor FilterData::state_ handling in SVGFilterPainter
Make FilterData::state_ only be checked and updated within
SVGFilterPainter, and not by SVGFilterRecordingContext or the local
painting helper.
Instead SVGFilterRecordingContext only manages the recording state, and
gets passed bounds while returning a paint record.
This simplifies some of the corner-cases with regards to how "aborted"
filters are handled, getting rid of some "FilterData is null" in many


Review-Url: https://codereview.chromium.org/2851753002
Cr-Commit-Position: refs/heads/master@{#468085}
Don't truncate the border-spacing before the table-header-group when fragmenting.

Review-Url: https://codereview.chromium.org/2848883002
Cr-Commit-Position: refs/heads/master@{#468055}
Proactively dispose image filters for SVG filter chains
Because of the spanning of multiple heaps by the resources associated
with FilterEffects [GCd] (SkImageFilter [mallocd]), the garbage
collector only observes a relatively slow growth, while resources tied
by or via the other heap can be substantial.

Since we have fairly good control of the lifetimes here, we can try to
dispose of our references to the resources on the other heap up front,
and prevent growth due to (dead) GCd objects in limbo.

Also rename FilterEffect::ClearResult to DisposeImageFilters to better
match it does nowadays.


Review-Url: https://codereview.chromium.org/2846593008
Cr-Commit-Position: refs/heads/master@{#467983}
Avoid sending double responding close control frames in WebSockets
This avoids sending a second ack close frame when we get a flow
control request from the renderer while waiting for the connection to
be closed.


Review-Url: https://codereview.chromium.org/2845033002
Cr-Commit-Position: refs/heads/master@{#467964}
Remove unused AttachContext parameter.
Review-Url: https://codereview.chromium.org/2844253002
Cr-Commit-Position: refs/heads/master@{#467904}
Merge two IsInDocument implementations.
There were two helper functions IsInDocument implementations in
core/input and this moves them to EventHandlingUtil so they can
be shared.


Review-Url: https://codereview.chromium.org/2845973002
Cr-Commit-Position: refs/heads/master@{#467684}
Remove unused "using" statements in WebKit/Source/platform.
Some "using" statements that were no longer used lingered in the
source code so let us remove them.

Review-Url: https://codereview.chromium.org/2841923002
Cr-Commit-Position: refs/heads/master@{#467654}
Better overflow handling for aspect-ratio MQ.
This change fixes two issues:

1. Clamp instead of casting double values from parser to internal
   unsigned storage.
2. Promote width/height/numerator/denominator multiplications to double
   to avoid integer overflow for large numerator/denominators.


Review-Url: https://codereview.chromium.org/2836613002
Cr-Commit-Position: refs/heads/master@{#467615}
Adding missing include guard for SharedGpuContext.h
Review-Url: https://codereview.chromium.org/2841933002
Cr-Commit-Position: refs/heads/master@{#467054}
Make //content/public/renderer dependency on //media public
There's following include chain:

Dependency chain must be also public to make sure that target that depends
on //content/public/renderer has include paths configured properly and
skia header inclusion doesn't cause 'include file not found' error during


Review-Url: https://codereview.chromium.org/2839623002
Cr-Commit-Position: refs/heads/master@{#467018}
Allow forced breaks inside floats.

Review-Url: https://codereview.chromium.org/2840443003
Cr-Commit-Position: refs/heads/master@{#466848}
Tidy up fragment loops in SVGInlineTextBoxPainter
Convert the loop in PaintTextFragments to a for-range, and remove the
unneeded local variable in CollectFragmentsInRange.


Review-Url: https://codereview.chromium.org/2843483002
Cr-Commit-Position: refs/heads/master@{#466696}
Removed superfluous custom style DCHECK.
Custom style callbacks are called during style recalc. There is no need
to check that ShadowRoot does not have such callbacks during layout
tree rebuild. There is already a check in ShadowRoot::RecalcStyle().


Review-Url: https://codereview.chromium.org/2833223002
Cr-Commit-Position: refs/heads/master@{#466551}
Add curly brackets to list of characters that gn needs to escape
Curly brackets {} needs to be escaped to avoid brace expansion
on systems using bash as the default shell.


Review-Url: https://codereview.chromium.org/2809633002
Cr-Commit-Position: refs/heads/master@{#466286}
Scopeless matching of :host rules for style sharing.
The kSharingRules mode for selector matching needs to bypass scope
checking in various places because we match selectors from the set of
global uncommon attribute rules for which the source scope is unknown.

We should really store these rules per scope, at least for Shadow DOM
v1, and pass the correct scope for matching.


Review-Url: https://codereview.chromium.org/2824853004
Cr-Commit-Position: refs/heads/master@{#465980}
Collect media query results for non-matching stylesheets.
Viewport and device dependent media query results are collected after
an active stylesheet update happen. The results are collected on the
ScopedStyleResolvers and propagated to the CSSGlobalRuleSet. It's
necessary that the active stylesheet update causes these media query
results to be up-to-date so that e.g. a viewport resize checks these
results to detect that we need an active stylesheet update for a given

That did not happen when we only added sheets for which the media
attrbute did not match, because adding a sheet with a null RuleSet does
not affect the computed style and the changed_rule_sets set was empty.

Now, if we add or remove a sheet which does not apply, and that sheet
has a viewport or device dependent media query, still return
kActiveSheetsAppended or kActiveSheetsChanged to trigger the re-
collection of those media query results.


Review-Url: https://codereview.chromium.org/2829873002
Cr-Commit-Position: refs/heads/master@{#465912}
Move the BreakCycle() method from the cycle solver to SVGResources
This means we can get rid of the SVGResources::ResetFoo methods, and
thus the "friend"-ship between SVGResourcesCycleSolver and SVGResources.
This also reduces the dependencies between the cycle solver and specific
resource types.
Choose a more "semantic" name (ClearReferencesTo), and also remove the

Review-Url: https://codereview.chromium.org/2821333002
Cr-Commit-Position: refs/heads/master@{#465535}
Update description of mouse-click-plugin-clears-selection.html
After crrev.com/2616623002, we now do expect the layout tree
to contain a selection (a selection that is hidden). So let's
update the test's inline description to reflect this exception.


Review-Url: https://codereview.chromium.org/2817073003
Cr-Commit-Position: refs/heads/master@{#464710}
Do not send redundant selectionchange-events (decouple focus)
This CL aims to remove redundant selectionchange-events
that were sent upon change of focus caused by element.focus(),
tab-navigation, spatnav and mouse-clicks.

1. Send == one selectionchange-event, not two, for each caret jump.
2. Send <= one selectionchange-event, not two, for each focus jump.

When you click/tab to an <input> text-field, a
ViewHostMsg_TextInputStateChanged-message is sent to browser-side.

With current logic, RenderFrameImpl::didChangeSelection is
called twice so two ViewHostMsg_TextInputStateChanged-messages
are sent to browser-side:
 (1) when focus leaves an <input>-field (unnecessary!).
 (2) when focus enters another <input>-field.

Worse, also the web page gets two selectionchange events.
The first one is immediately invalid so the webpage should
not react to it.

(1) happens because FocusController::setFocusedElement()
always clears the selection when a new element gets focus.

Do not clear selection when focus moves. To keep current visual
behavior when focus moves away from a text-field we need to hide
that field's selection (clicking outside a text-field hides its

Test updates:
1. Check for one selectionchange event, not two.
2. LayoutTests' trees now expect the "hidden" selection.
3. A new test in WebFrameTest.cpp tests tab-key navigation.

BUG=678601, 679635, 699015, 692898
TEST=In content_shell, select some text in an <input>-field,
     click another <input>-field (move focus).
     Notice: one selectionchange event is fired (as in Firefox).
TEST=In content_shell, select some text in an <input>-field,
     click on an <img>. Notice: selection gets hid and
     zero selectionchange events are fired (as in Firefox).

Review-Url: https://codereview.chromium.org/2616623002
Cr-Commit-Position: refs/heads/master@{#464698}
Add connected-paranoia in SVGElement::UpdateRelativeLengthsInformation
When (animated attribute) mutations are trigger by a 'id' change (via
an IdTargetObserver), relative lengths state may be revalidated while
the element are in the process of being removed from the document, but
has not yet been marked as such. If relative length state is updated in
such a case, the |elements_with_relative_lengths_| set could end up in
an inconsistent state.
Instead of only relying on the connected bit of the current element,
also check all the ancestors to make sure.


Review-Url: https://codereview.chromium.org/2817913002
Cr-Commit-Position: refs/heads/master@{#464408}
Fix disabling FFMpeg video decoders on non-Android platforms
If disable_ffmpeg_video_decoders is set to true on platfoms other
than Android ffmped_video_decoder.* is always included.
This patch removes those sources and fixes dependencies in code.

Review-Url: https://codereview.chromium.org/2808093008
Cr-Commit-Position: refs/heads/master@{#464394}
Avoid duplicate functions/code in core/inspector: isErrorStatusCode
While experimenting with unity builds I encountered a few duplicate
symbols and functions in core/inspector. One of them was
isErrorStatusCode, a one instruction function that was defined in both
NetworkResourcesData.cpp and InspectorNetworkAgent.cpp.

This patch renames one of them IsHTTPErrorStatusCode, a more suitable

Review-Url: https://codereview.chromium.org/2807533005
Cr-Commit-Position: refs/heads/master@{#464076}
Deduplicating compositing scrollingCoordinator helper
In the experiments with unity builds I ran into the
scrollingCoordinatorFromLayer function that was defined identically at
two different places. This patch moves the code to PaintLayer where
it is also available to PaintLayer itself.


Review-Url: https://codereview.chromium.org/2803013005
Cr-Commit-Position: refs/heads/master@{#464054}
Invalidate the "values cache" when resetting animated value state
When we revalidate the animated value, and the value 'source' is the
'values' attribute, we need to also reset the cached 'from' and 'to'
values kept in SVGAnimationElement. If not, a target change could clear
the animated from/to values and not notice that they are stale on
Companion to https://codereview.chromium.org/2763283002.


Review-Url: https://codereview.chromium.org/2817643003
Cr-Commit-Position: refs/heads/master@{#464037}
Strip only ASCII spaces from SMIL 'values' attributes
This is more consistent with other microsyntaxes used for attribute
parsing, while also making it consistent with the XSSAuditor.

BUG=709365, 710460

Review-Url: https://codereview.chromium.org/2807193003
Cr-Commit-Position: refs/heads/master@{#463662}
Support calc(...) in ConsumeAngleOrPercent / for conic-gradient
Because of the explicit check for <percentage-token>, calc(...) would
not be properly handled for percentages. CSSGradientValue also wasn't
checking for calc() values when evaluating stops.
Rewrite ConsumeAngleOrPercent in a vein similar to
Make CSSPrimitiveValue::IsAngle() consider resolved type, and update
CSSRotation TypedOM implementation to counter this.


Review-Url: https://codereview.chromium.org/2813583002
Cr-Commit-Position: refs/heads/master@{#463585}
Rename cleanup in comments in css/ directory.
After the renaming of methods and variables to match chromium style,
a bunch of comments were not correct.


Review-Url: https://codereview.chromium.org/2812743003
Cr-Commit-Position: refs/heads/master@{#463561}
Rename cleanup in comments in style/ directory.
After the renaming of methods and variables to match chromium style,
a bunch of comments were not correct.


Review-Url: https://codereview.chromium.org/2812593005
Cr-Commit-Position: refs/heads/master@{#463559}
kChildNeedsReattachLayoutTree should not be initially set.
This flag should have been dropped in [1] since we dropped setting
kNeedsReattachLayoutTree initially in that CL.

[1] https://codereview.chromium.org/2760233004


Review-Url: https://codereview.chromium.org/2807063003
Cr-Commit-Position: refs/heads/master@{#463421}
Use a ResizeObserver to determine default font-size for text tracks
Text track needs to derive the default font for the cues from the size
of the <video> area, and currently does this by updating style during
the call to layout() on the LayoutTextTrackContainer, violating the
document lifecycle.

To avoid mutating style during layout, hook up a ResizeObserver from
TextTrackContainer to HTMLVideoElement and rely on the ResizeObserver
logic to iterate on the style and layout.

This eliminates the need to have a special LayoutObject for
TextTrackContainer, so just use a LayoutBlockFlow and remove all traces
of LayoutTextTrackContainer.

The media/track/track-cue-rendering.html test is updated to check sizes
after layout and paint instead of a forced layout.


Review-Url: https://codereview.chromium.org/2803243002
Cr-Commit-Position: refs/heads/master@{#463280}
Verify that constant vectors aren't invalidated during iteration.
Clearing a heap vector while it is being iterated and on the stack is
unsafe, as it promptly releases the backing store.

Add CHECK()s to verify that this doesn't happen for a crasher involving
MediaQuerySets that's proving hard to pindown, but there are some
suggestions that the heap vector contents of MediaQuerySet::m_queries
is being mutated.


Review-Url: https://codereview.chromium.org/2806003002
Cr-Commit-Position: refs/heads/master@{#463124}
Avoiding name collisions between flexbox and grid
I'm still experimenting with unity builds and one of the name
collisions that you encounter when compiling layout is between flexbox
code and grid code. This patch changes top level functions to be
member functions.

No functional changes.

Review-Url: https://codereview.chromium.org/2803323002
Cr-Commit-Position: refs/heads/master@{#463059}
Avoid duplicate functions/code in core/editing: endTag
While experimenting with unity builds I encountered a few duplicate
symbols and functions in core/editing. This patch renames, moves
and unifies them.

elementCannotHaveEndTag is a utility function used in serializers
and since it is used in multiple places, and MarkupFormatter is
not a good place for it, let us put it in EditingUtilities.


Review-Url: https://codereview.chromium.org/2804943002
Cr-Commit-Position: refs/heads/master@{#462994}
A column-span:all element should always establish a new formatting context.
This also applies when the element isn't contained by a multicol container
(which means that we shouldn't require the spanner placeholder to be present).


Review-Url: https://codereview.chromium.org/2799363003
Cr-Commit-Position: refs/heads/master@{#462865}
Avoid converting an IntRect to IntRect via FloatRect
IntRects can be implictly converted to FloatRect so code managed
to call enclosingIntRect on an IntRect which then converted to
FloatRect and back for an expensive noop.


Review-Url: https://codereview.chromium.org/2805203003
Cr-Commit-Position: refs/heads/master@{#462848}
Use long timeout for the svg/interfaces.html test
Lots of interfaces, so can take a while to run. Use the 'long' timeout


Review-Url: https://codereview.chromium.org/2806513002
Cr-Commit-Position: refs/heads/master@{#462655}
Revert "Neuter the "screen scale factor" computation for SVG <text>"
This reverts commit 6f80957a6a5e7ec792a2f3cd7f06e2a744196d1d.

Clean revert, but a reference to FrameHost had to be changed to Page, and
an ASSERT was changed to a DCHECK.


Review-Url: https://codereview.chromium.org/2805043002
Cr-Commit-Position: refs/heads/master@{#462563}
Remove DCHECK in column balancer that failed because of flexbox bugs.
This DCHECK was useful (detects broken layout, but nothing more dangerous than
that). However, as long as we don't paginate flex items at their final block
position (see bug 606350), we cannot assert like this, because it's going to
fail under certain circumstances.


Review-Url: https://codereview.chromium.org/2797313003
Cr-Commit-Position: refs/heads/master@{#462447}
Avoid duplicate functions/code in core/editing: MatchResultICU
While experimenting with unity builds I encountered a few duplicate
symbols and functions in core/editing. This patch renames, moves
and unifies them.

There is a global MatchResult in css/SelectorChecker.h and if that one
is included anywhere in editing, then it will collide with a local
MatchResult used in iterators. Renaming the local one MatchResultICU
will both match the name of other symbols and avoid the collision.


Review-Url: https://codereview.chromium.org/2806433002
Cr-Commit-Position: refs/heads/master@{#462431}
Avoid duplicate functions/code in core/editing: kInvalidOffset
While experimenting with unity builds I encountered a few duplicate
symbols and functions in core/editing. This patch renames, moves
and unifies them.

kInvalidOffset is a name used both by PositionIterator and TextIterator.
This renames on of them kInvalidTextOffset to better match its use and
to avoid the name collision.


Review-Url: https://codereview.chromium.org/2798283002
Cr-Commit-Position: refs/heads/master@{#462428}
Avoid duplicate functions/code in core/editing: DirectionalSelection
While experimenting with unity builds I encountered a few duplicate
symbols and functions in core/editing. This patch renames, moves
and unifies them.

shouldAlwaysUseDirectionalSelection is a common helper function
and since it's not identicallty implemented everywhere it cannot
be merged. Instead make the one in SelectionModifier a member function
to move it out of global scope.


Review-Url: https://codereview.chromium.org/2798143003
Cr-Commit-Position: refs/heads/master@{#462427}
Avoid duplicate functions/code in core/editing: kUnsetCodePoint
While experimenting with unity builds I encountered a few duplicate
symbols and functions in core/editing. This patch renames, moves
and unifies them.

kInvalidCodePoint is used in both ForwardGraphemeBoundaryStateMachine and
BackwardGraphemeBoundaryStateMachine so to avoid clashes, use different
names for them.


Review-Url: https://codereview.chromium.org/2801893004
Cr-Commit-Position: refs/heads/master@{#462423}
Avoid duplicate functions/code in core/editing: computeDistance
While experimenting with unity builds I encountered a few duplicate
symbols and functions in core/editing. This patch renames, moves
and unifies them.

Several classes use computeDistanceToLeftGraphemeBoundary and instead
of copying the whole function, make a single copy in EditingUtilities.
Also move computeDistanceToRightGraphemeBoundary since those two functions
are too similar to split up.


Review-Url: https://codereview.chromium.org/2802953002
Cr-Commit-Position: refs/heads/master@{#462420}
Implement support for the 'transform-box' property


Intent to implement:


Implemented behind the CSSTransformBox Blink runtime flag.
Add some basic tests and a smoke test for the "legacy" transform-box
behavior. Existing tests are adjusted to be compatible with the new
The test svg/transforms/transform-origin-css-property.xhtml is "fixed"
by adding units when required (unitless numbers are not valid in inline


Review-Url: https://codereview.chromium.org/2786643003
Cr-Commit-Position: refs/heads/master@{#462266}
Document::hoverNode() is always an Element.
Make hoverNode(), hoverElement() and only mark Elements as hovered
using FlatTreeTraversal::parentElement() instead of parent(). This
means we can get rid of some checks for nodes being text or element
nodes. It means we also only mark elements as being hovered in the flat
tree ancestor chain.


Review-Url: https://codereview.chromium.org/2797173002
Cr-Commit-Position: refs/heads/master@{#462257}
Removing duplicate functions and symbol names in core/css
In the unity build experiment I encountered a few colliding duplicate
symbol names in core/css and this patch removes them by replacing
duplicated symbols with a single code and by doing some symbol

Review-Url: https://codereview.chromium.org/2797973002
Cr-Commit-Position: refs/heads/master@{#462256}
Allow display:contents elements in hover chain.
Document::updateHoverActiveState walked the shadow-including ancestor
path assuming no layoutObject meant display:none. Changed to walk flat
tree ancestors checking for display:contents style in addition.

ContainerNode::setHovered did not allow hover state to be changed when
setting hovered=true on elements without a layout object. Changed to
allow for display:contents here as well.


Review-Url: https://codereview.chromium.org/2790133002
Cr-Commit-Position: refs/heads/master@{#462199}
Rename duplicate symbols inside core/dom
While experimenting with unity builds I got into problems with
code that used the same symbol name for multiple purposes. This
renames those which also will make the life for symbol debugging
slightly easier.

kSupplementName: Name used in both CSSSelectorWatch.cpp and

WTF::Unicode symbols: Depending on how unity builds are created,
global "using" statements can affect more than intended and trigger
warnings and errors. Now global "using" statements are not allowed by
the Chromium coding standard so assuming it will eventually apply to
Blink as well, the using statements might as well be removed now.

previousAncestorSiblingPostOrder was a function in both
FlatTreeTraversal.cpp and NodeTraversal.cpp. Could easily be made
class local and the name collision was no more.

Review-Url: https://codereview.chromium.org/2802723002
Cr-Commit-Position: refs/heads/master@{#462123}
PagePopupController: handle frame-detached window usage.

Review-Url: https://codereview.chromium.org/2798863002
Cr-Commit-Position: refs/heads/master@{#462078}
Revert increased limit for m_selectorIndex.
If 2^13 simple selectors in a style rule was not enough, 2^14 will be
exceeded at some point. Leave the available bit for later use and avoid
regressions for m_selectorIndex when we need that bit.


Review-Url: https://codereview.chromium.org/2797953002
Cr-Commit-Position: refs/heads/master@{#462015}
Fewer reused duplicate symbol names in animation.
When experimenting with unity builds you get conflicts between
cpp files if they use the same symbol name for different things
(or the same thing). This make names more unique. No functional changes.

Formatted with git cl format (#includes moving around).


Review-Url: https://codereview.chromium.org/2794013002
Cr-Commit-Position: refs/heads/master@{#461755}
Remove duplicate using statement.
One "using namespace WTF::Unicode" is enough, and actually might be one
too many if the Chromium coding style is adapted in blink.

This caused a bit of a problem when experimenting with unity builds.


Review-Url: https://codereview.chromium.org/2792933003
Cr-Commit-Position: refs/heads/master@{#461686}
[LayoutNG] WIP on storing layout output in the legacy tree for multicol.
Painting NG fragment trees is still not supported, so in the meantime
we'll keep LayoutMultiColumnFlowThread and LayoutMultiColumnSet, and have
multicol painted and hit-tested in the old-fashioned way (just like
everything else, really).

Based on work by glebl.


Review-Url: https://codereview.chromium.org/2786923004
Cr-Commit-Position: refs/heads/master@{#461409}
Added available bit to m_selectorIndex.
Increased the max number of simple selectors for one style from 8192 to
16384 by moving one bit to the second 32-bit part to make space for
another bit. There is one bit left, but it cannot be utilized since the
bit field cannot span two 32 bit values. This doesn't really fix the
issue since it's not unlikely someone will use more than 16000 selectors
if they use more than 8000 selectors.


Review-Url: https://codereview.chromium.org/2785103004
Cr-Commit-Position: refs/heads/master@{#461389}
Implement Image::maybeAnimated for SVGImage
This CL renames SVGImage::hasAnimations to maybeAnimated, overriding
the implementation from the base class (Image.) The old method matches
the new one in certainty of the reply, and allows SVGImages to be paused
when being scrolled out of view etc.


Review-Url: https://codereview.chromium.org/2783133002
Cr-Commit-Position: refs/heads/master@{#461094}
Avoid duplicating the target name "svg".
It has not been possible to build just the svg code with
ninja -C out/Default svg
because of two other, minor, build targets named svg.
This commit renames those svg_layout and svg_style.

Review-Url: https://codereview.chromium.org/2783253002
Cr-Commit-Position: refs/heads/master@{#461073}
Rephrased documentation about VTT, ::cue, and custom pseudo scopes.
We should not make these rules part of boundary crossing rules as they
will go away when Shadow DOM v0 goes away. Adjusted the documentation
to not hint in that direction.


Review-Url: https://codereview.chromium.org/2787823002
Cr-Commit-Position: refs/heads/master@{#461059}
Removing unnecessary "using" statements.
In the Chromium code style using statements are not allowed and these
ones are not even needed/used so let us just drop them.

Review-Url: https://codereview.chromium.org/2788693002
Cr-Commit-Position: refs/heads/master@{#460866}
Remove unused variable layout_object.
clang triggered compilation errors about this unused variable when
experimenting with a unity build. Not sure why doesn't detect that it
is unused normally.


Review-Url: https://codereview.chromium.org/2785213002
Cr-Commit-Position: refs/heads/master@{#460862}
Adding missing include in svg/GradientAttributes.h
If you managed to include GradientAttributes.h before you included
SVGGradientElement.h you would have no definition of
SVGSpreadMethod and other types.


Review-Url: https://codereview.chromium.org/2790623002
Cr-Commit-Position: refs/heads/master@{#460791}
Pass nextTextSibling to ::before layout rebuild.
Correct whitespace re-attachment relies on the next text node being
tracked in order to re-attach when a previous sibling element changes
display type. We did that just while traversing light tree siblings or
slotted siblings.

::before pseudo element display type may affect following whitespace
text node, so we need to pass on the next text sibling result from the
descendant traversal.

As we traverse siblings from right-to-left, we should also rebuild
::after before DOM siblings, and ::before after DOM siblings.

This fixes the case where an element, whose left-most child, or shadow
root child, is a whitespace text node, changes its ::before element's
display type from block to inline.

The pseudo element layout tree rebuild is renamed from reattach* to
rebuild* to match the semantics of the rest of the methods.


Review-Url: https://codereview.chromium.org/2766163002
Cr-Commit-Position: refs/heads/master@{#460737}
Render focus-selection-textarea at constant font-size to avoid flakiness
When crrev.com/453211 updated FreeType on Linux, some glyphs
got bigger due to the new antialiasing and hinting settings.

Bigger glyphs made focus-selection-textarea.html layout differently.
With the new layout, scripted mouse clicks no longer hit the right spot.

After the manual rebaselining in crrev.com/453211, the expected result
on Linux started to include FAIL whereas other platforms still expected
PASS. This CL makes also Linux PASS.

BUG=706119, 274030

TEST=python third_party/WebKit/Tools/Scripts/run-webkit-tests -t\
     PcDebug LayoutTests/fast/forms/focus-selection-textarea.html

Review-Url: https://codereview.chromium.org/2786953002
Cr-Commit-Position: refs/heads/master@{#460732}
PaymentApp: Receive payment app responses in Android
This change adds a callback parameter to
ServiceWorkerPaymentInstrument.invokePaymentApp, so that the response
from the payment app can be passed back to the merchant.

Depends on https://codereview.chromium.org/2718013004/


Review-Url: https://codereview.chromium.org/2775933002
Cr-Commit-Position: refs/heads/master@{#460715}
Fix for performance regression on high dpi devices.
ComputedStyle::getRoundedInnerBorderFor() could generate negative
content boxes for boxes with no content and sub pixel borders that
round up (eg. 1.5px-1.99px).  Negative content boxes are illegal per
spec, and causes BoxBorderPainter::paintBorderFastPath() to bail,
and performance to be substantially degraded.

This issue would be evident on the paint-offset-changes perftest when
device pixel ratio was set to eg. 1.5.  The issue was introduced in


Review-Url: https://codereview.chromium.org/2782153002
Cr-Commit-Position: refs/heads/master@{#460534}
Deduplicate testharness test names in LayoutTests/svg/
Some tests were using non-unique names, which triggers a harness error
for "newer" versions of testharness.js.
Twiddle the relevant names a bit so that they become unique.


Review-Url: https://codereview.chromium.org/2782583002
Cr-Commit-Position: refs/heads/master@{#460447}
Corrected specificity for :not for default @namespace.
The argument to :not() consists of a universal, type, or a simple
selector. However, we prepend an implicit universal selector with the
default namespace URI to all compound selectors to correctly match only
elements in the default namespace. That is not necessary for compounds
inside pseudo argument lists, but we do in those cases as well.

When calculating the specificity for :not(), we assume its argument
consists of a single simple selectors, but in the case where we have a
default namespace, a namespaced universal selector is prepended. We
only added the specificity for the universal selector in that case.
Instead, walk all sub-selectors of the :not() compound when calculating
the specificity.


Review-Url: https://codereview.chromium.org/2777063007
Cr-Commit-Position: refs/heads/master@{#460355}
Reland: Do not send redundant selectionchange-events (decouple focus)
Reason for reland:
Update Win7/10 LayoutTests correctly: crbug.com/706119

Blink tells browser-side when a new <input>-element gets focus.
The information is passed in the

With current logic, RenderFrameImpl::didChangeSelection is
called twice so two ViewHostMsg_TextInputStateChanged-messages
are sent to browser-side:
 (1) when focus leaves an <input>-field (unnecessary!).
 (2) when focus enters another <input>-field.

Worse, also the web page gets two selectionchange events.
The first one is immediately invalid so the webpage should
not react to it.

(1) happens because FocusController::setFocusedElement()
always clears the selection when a new element gets focus.

When JavaScript moves focus to an element, element.focus(),
and when the user moves focus using tab-key navigation or
mouse, we don't clear the old selection (we hide it). This
means, we only send one selectionchange event, not two, for
each caret jump (as in Firefox).

Test updates:
1. Check for one selectionchange event, not two.
2. LayoutTests' trees now expect the "hidden" selection.
3. A new test in WebFrameTest.cpp tests tab-key navigation.

Follow-up will remove the remaining redundant clears:
crbug.com/692898 (tab jumps to non-editable elements).

BUG=678601, 679635, 699015
TEST=In content_shell, select some text in an <input>-field,
     click another <input>-field (move focus).
     Notice: one selectionchange event is fired.

Review-Url: https://codereview.chromium.org/2616623002
Cr-Commit-Position: refs/heads/master@{#460314}
Stop appending fragmentainer groups when flow thread offset approaches infinity.
The final column height is a function of the difference between the logical
bottom and logical top of the flow thread portion of a given fragmentainer
group. If the logical top is LayoutUnit::max(), we know for sure that the
bottom won't be any larger than that. Just give up in such cases (and keep
using the current fragmentainer group), rather than ending up dividing by zero.


Review-Url: https://codereview.chromium.org/2784493002
Cr-Commit-Position: refs/heads/master@{#460284}
Remove the wrapper functions content::RecordAction et al
content::RecordAction and content::RecordComputedAction no longer
add any value (they used to do thread hopping) so replace them with
direct calls to base::RecordAction and base::RecordComputedAction.

Also remove includes and using declarations from files not using the
functions at all.


Review-Url: https://codereview.chromium.org/2771233002
Cr-Commit-Position: refs/heads/master@{#460037}
Add separate trace events for recalcStyle and rebuildLayoutTree.
When style recalc and layout tree building is fully separated, it will
be valuable to measure them separately as well.


Review-Url: https://codereview.chromium.org/2779573002
Cr-Commit-Position: refs/heads/master@{#460027}
Do not send redundant selectionchange-events (decouple focus)
Blink tells browser-side when a new <input>-element gets focus.
The information is passed in the

With current logic, RenderFrameImpl::didChangeSelection is
called twice so two ViewHostMsg_TextInputStateChanged-messages
are sent to browser-side:
 (1) when focus leaves an <input>-field (unnecessary!).
 (2) when focus enters another <input>-field.

Worse, also the web page gets two selectionchange events.
The first one is immediately invalid so the webpage should
not react to it.

(1) happens because FocusController::setFocusedElement()
always clears the selection when a new element gets focus.

When JavaScript moves focus to an element, element.focus(),
and when the user moves focus using tab-key navigation or
mouse, we don't clear the old selection (we hide it). This
means, we only send one selectionchange event, not two, for
each caret jump (as in Firefox).

Test updates:
1. Check for one selectionchange event, not two.
2. LayoutTests' trees now expect the "hidden" selection.
3. A new test in WebFrameTest.cpp tests tab-key navigation.

Follow-up will remove the remaining redundant clears:
crbug.com/692898 (tab jumps to non-editable elements).

BUG=678601, 679635, 699015
TEST=In content_shell, select some text in an <input>-field,
     click another <input>-field (move focus).
     Notice: one selectionchange event is fired.

Review-Url: https://codereview.chromium.org/2616623002
Cr-Commit-Position: refs/heads/master@{#459984}
Fix for performance regression on high dpi devices.
ComputedStyle::getRoundedInnerBorderFor() could generate negative
content boxes for boxes with no content and sub pixel borders that
round up (eg. 1.5px-1.99px).  Negative content boxes are illegal per
spec, and causes BoxBorderPainter::paintBorderFastPath() to bail,
and performance to be substantially degraded.

This issue would be evident on the paint-offset-changes perftest when
device pixel ratio was set to eg. 1.5.  The issue was introduced in


Review-Url: https://codereview.chromium.org/2771093003
Cr-Commit-Position: refs/heads/master@{#459770}
Update :in-range/:out-of-range when steppable min/max/value changes.
We called pseudoStateChanged in a lot of cases where it wasn't
necessary. It should suffice to call it for the mentioned pseudo
classes when the min and max attributes changes, or the value is
changed, either as an attribute or as a result of user input.

This should fix the performance regressions in issue 704775.


Review-Url: https://codereview.chromium.org/2774723004
Cr-Commit-Position: refs/heads/master@{#459733}
blink_gc_plugin: retire warn-stack-allocated-trace-method option.
As a final(!) step in phasing in the check over trace() methods inside
of STACK_ALLOCATED() classes, remove the detection of the warning option.
It's always on.


Review-Url: https://codereview.chromium.org/2776033002
Cr-Commit-Position: refs/heads/master@{#459677}
Remove no-op blink-gc-plugin argument.
Following the clang roll in r455977, the clang blink_gc_plugin always
warns of STACK_ALLOCATED() classes having redundant trace() methods;
drop using the gc-plugin no-op option.


Review-Url: https://codereview.chromium.org/2776023002
Cr-Commit-Position: refs/heads/master@{#459676}
Clarify Beacon transmission limit checking.
The implementation of navigator.sendBeacon() imposes a cap on the size
of transmitted beacon payloads. The internal handling of that limit
was not as clear as could be, so attempt to clarify its representation
and handling.

Also clarify the interpretation of a negative cap limit: if a frame's
settings provide a negative value, no transmission limit is imposed.

R=mkwst, tyoshino

Review-Url: https://codereview.chromium.org/2753863003
Cr-Commit-Position: refs/heads/master@{#459564}
Make resource lookup more uniform in SVGResources::buildResources
Replace the pattern:

if (!ensureResources(resources).setFoo(

with a new pattern using a new attachToResource helper which folds in
the last step (addPendingResource) as well. This makes for less
callsites to adjust when modifying resource lookup.
This also makes the return value of the setFoo(...) methods unnecessary,
so make them return void.


Review-Url: https://codereview.chromium.org/2772773005
Cr-Commit-Position: refs/heads/master@{#459533}
Add SVGFitToViewBox::hasValidViewBox helper
This encapsulates the use of the 'is valid' flag of SVGRect. This both
makes for more readable code, and should make it easier to transition
away from the 'is valid' flag. (Note: !isSpecified() implies !isValid().)


Review-Url: https://codereview.chromium.org/2774753004
Cr-Commit-Position: refs/heads/master@{#459520}
PartitionDumpStats(): reduce stack consumption for 'light' reporting.
Following r456291's lead, avoid putting a large array on the stack for
light stats reporting in PartitionDumpStats(), where it isn't made use
of. This avoids running into stack pressure when sampling memory use
in production builds (on Windows, in particular.)


Review-Url: https://codereview.chromium.org/2771033006
Cr-Commit-Position: refs/heads/master@{#459498}
Clear out prefinalizer-allocated vector for conservative GC safety.
It is unsafe to revive dead objects by creating references to them
while in a finalizer, prefinalizer or not. Avoid doing so in
MediaStreamSource::setReadyState(), which MediaStreamComponent's
prefinalizer may end up running.

See associated comment for further details.


Review-Url: https://codereview.chromium.org/2776473003
Cr-Commit-Position: refs/heads/master@{#459390}
Simplify pre+post GC ThreadState steps.
No need to involve the ThreadHeap for these, as they're entirely
handled by the ThreadState now.


Review-Url: https://codereview.chromium.org/2774473003
Cr-Commit-Position: refs/heads/master@{#459373}
Revalidate SMIL animation value after target change
When a target moves in the tree, the animation value was invalidated,
but never revalidated again when the element was reinserted.
Make sure to signal a revalidation if there's an active interval and the
the animation is running after the target element was reinserted.


Review-Url: https://codereview.chromium.org/2763283002
Cr-Commit-Position: refs/heads/master@{#459150}
Use SVGResources in SVGLayoutTreeAsText writeResources
As the FIXME suggests, this should better reflect the actual state of
the resources resolution by including the cycle-solving step.

Some tests (recursive-clip/mask, clip-path-recursive-call-by-child)
needs to be updated to reflect the change to actually show cycles
having been broken. The rests of the tests are updated to reflect
that LayoutSVGInlineText can't have resources.


Review-Url: https://codereview.chromium.org/2763363002
Cr-Commit-Position: refs/heads/master@{#459119}
Notify inspector of stylesheet changes when removing tree scopes.
We did not update active stylesheet lists when removing a shadow since
there is no collection to update. However, the inspector expects a
notification since it receives a flat vector of active stylesheets from
all scopes.

Add a m_treeScopesRemoved member to not early return from
updateActiveStyleSheets and still call probe::activeStyleSheetsUpdated.
Unless other tree scopes are dirty, calling the inspector is all that


Review-Url: https://codereview.chromium.org/2766373002
Cr-Commit-Position: refs/heads/master@{#459039}
Update expat to 2.2.0 to fix CVE vulnerability.
Security fixes:
    CVE-2016-0718 -- Fix crash on malformed input
    CVE-2016-4472 -- Improve insufficient fix to CVE-2015-1283 /
    CVE-2015-2716 introduced with Expat 2.1.1
    CVE-2016-5300 -- Use more entropy for hash initialization
        than the original fix to CVE-2012-0876
    CVE-2012-6702 -- Resolve troublesome internal call to srand
            that was introduced with Expat 2.1.0
            when addressing CVE-2012-0876 (issue #496)


Review-Url: https://codereview.chromium.org/2761253002
Cr-Commit-Position: refs/heads/master@{#459025}
Allow safe per-thread heap compaction UMA reporting.

Review-Url: https://codereview.chromium.org/2769113003
Cr-Commit-Position: refs/heads/master@{#459024}
No default value for AncestorSearchConstraint in locateFlowThreadContainingBlockOf().
The default used to be to bail out and return nullptr if it encountered
something unbreakable. It's better to let callers make a conscious choice here.
Tree-read operations (painting or hit testing, for instance) that call
LayoutObject::locateFlowThreadContainingBlock() are typically interested in
converting from flow thread coordinates to visual coordinates.

This is a defensive CL that only reverts unintended and bad changes from
https://codereview.chromium.org/2748973002 - added a TODO for cases where we
have LayoutState; if we are inside of layout, we should ideally stop at
strictly unbreakable ancestors.


Review-Url: https://codereview.chromium.org/2764883004
Cr-Commit-Position: refs/heads/master@{#458784}
Allow building the dump_syms tool on Windows
The Windows target was not ported from gyp, until now.
We're building dump_syms on Windows in Opera so I though I'd share the patch.


Review-Url: https://codereview.chromium.org/2712423002
Cr-Commit-Position: refs/heads/master@{#458759}
Revert of MediaStreamSource: verify unlocked state when finalizing. (patchset #1 id:1 of https://codereview.chromium.org/2741663004/ )
Reason for revert:
Diagnosis completed, reverting (cf. https://bugs.chromium.org/p/chromium/issues/detail?id=682945#c48 )

Original issue's description:
> MediaStreamSource: verify unlocked state when finalizing.
> To diagnose an audio thread crash condition, verify that the lock
> over audio consumers that MediaStreamSource keeps, isn't held when it is
> being finalized. If it is, then the audio thread is active using the
> MediaStreamSource object..which is not a well-formed state to be in.
> R=
> BUG=682945
> Review-Url: https://codereview.chromium.org/2741663004
> Cr-Commit-Position: refs/heads/master@{#456029}
> Committed: https://chromium.googlesource.com/chromium/src/+/c662576c8bb7cecef0dd9a699112fa5cc4b6ab79

# Not skipping CQ checks because original CL landed more than 1 days ago.

Review-Url: https://codereview.chromium.org/2765073004
Cr-Commit-Position: refs/heads/master@{#458744}
Revert of Lock out GCs while iterating over MediaStreamSource audio consumers. (patchset #1 id:1 of https://codereview.chromium.org/2761463002/ )
Reason for revert:
Revert this check, no longer needed (cf. https://bugs.chromium.org/p/chromium/issues/detail?id=682945#c48 )

Original issue's description:
> Lock out GCs while iterating over MediaStreamSource audio consumers.
> Attempt to diagnose a crash condition by locking out main thread GCs
> while the audio thread propagates consumeAudio() updates.
> R=haraken
> BUG=682945
> Review-Url: https://codereview.chromium.org/2761463002
> Cr-Commit-Position: refs/heads/master@{#457753}
> Committed: https://chromium.googlesource.com/chromium/src/+/e78674d2467706fa8634f8542251591d1d358b57

# Not skipping CQ checks because original CL landed more than 1 days ago.

Review-Url: https://codereview.chromium.org/2768683004
Cr-Commit-Position: refs/heads/master@{#458716}
Revert of Revert "Pull AudioDestinationConsumer off the Blink GC heap." (patchset #1 id:1 of https://codereview.chromium.org/2757883002/ )
Reason for revert:
Experiment finished, we do want bb9b04fe09 (cf. https://bugs.chromium.org/p/chromium/issues/detail?id=682945#c48 )

Original issue's description:
> Revert "Pull AudioDestinationConsumer off the Blink GC heap."
> This reverts commit bb9b04fe0965eeb09f229f7a727fe7235add810f,
> attempting to diagnose root crash cause.
> R=rtoy,haraken
> BUG=682945
> Review-Url: https://codereview.chromium.org/2757883002
> Cr-Commit-Position: refs/heads/master@{#457833}
> Committed: https://chromium.googlesource.com/chromium/src/+/937ebc1a2de7ac71ec1de4c6bb1ed7a6331e4683

# Not skipping CQ checks because original CL landed more than 1 days ago.

Review-Url: https://codereview.chromium.org/2762413004
Cr-Commit-Position: refs/heads/master@{#458700}
Make all setNeedsReattachLayoutTree happen from updateStyle.
The setNeedsReattachLayoutTree calls which were done outside of
updateStyle were all accompanied by a NeedsReattachStyleChange for the
node marking the ancestor chain for recalc. Therefore we can simply
mark for re-attachment inside the recalcStyle pass instead.

Enforce the invariant by introducing a DCHECK that the we are inside
updateStyleAndLayoutTree, and that the shadow DOM distribution is


Review-Url: https://codereview.chromium.org/2760233004
Cr-Commit-Position: refs/heads/master@{#458683}
OfflineAudioContext: add missing suspendIfNeeded() call.

Review-Url: https://codereview.chromium.org/2760323002
Cr-Commit-Position: refs/heads/master@{#458656}
Updating :in-range should not rely on validation.
m_validityIsDirty is not related to isInRange() and isOutOfRange().
This fixes sibling style invalidation using invalidation sets for
:in-range and :out-of-range changes when value changes through


Review-Url: https://codereview.chromium.org/2764023003
Cr-Commit-Position: refs/heads/master@{#458576}
Enable idle GC for worker thread heaps.
Idle task processing is now supported on threads other than
the main thread, hence go ahead and enable idle GCs for
worker thread heaps.


Review-Url: https://codereview.chromium.org/2765843002
Cr-Commit-Position: refs/heads/master@{#458405}
LinkedStack.h is no longer used, remove it

Review-Url: https://codereview.chromium.org/2761853003
Cr-Commit-Position: refs/heads/master@{#458376}
Check detached status before attempting to clear drag transfer state (reland.)
Speculatively try to address failing access of dragState() when
clearing out state after 'dragend' has been dispatched.


Review-Url: https://codereview.chromium.org/2759603002
Cr-Original-Commit-Position: refs/heads/master@{#457993}
Committed: https://chromium.googlesource.com/chromium/src/+/a995166eab58770b85268173bf9b34e4bc276171
Review-Url: https://codereview.chromium.org/2759603002
Cr-Commit-Position: refs/heads/master@{#458354}
MouseEventManager: reset drag state upon detaching.
If an ongoing drag detaches the frame of the dragged element, have
the MouseEventManager reset the drag state while handling the detachment
from the frame. Otherwise the DragState will retain a reference to
the drag source (and its document) for too long, triggering a reported
leak on shutdown.


Review-Url: https://codereview.chromium.org/2762613002
Cr-Commit-Position: refs/heads/master@{#458116}
getClientRects() shouldn't clip against any ancestors.
Inside multicol we used to clip against the column box of each fragment. Since
fragments don't really exist in our implementation (we rather have this tall
flow thread which we slice into columns, when appropriate), we still need to
clip in the block direction, to properly fake the fragments.

Removed fragmentainerInFlowThread(), since it's no longer used. Added a
parameter to the clip rectangle calculation code, to be able to only limit the
clip rectangles in the block direction.


Review-Url: https://codereview.chromium.org/2750153002
Cr-Commit-Position: refs/heads/master@{#458109}
Add include guards to header files in content missing them
Review-Url: https://codereview.chromium.org/2759103002
Cr-Commit-Position: refs/heads/master@{#458053}
Check detached status before attempting to clear drag transfer state.
Speculatively try to address failing access of dragState() when
clearing out state after 'dragend' has been dispatched.


Review-Url: https://codereview.chromium.org/2759603002
Cr-Commit-Position: refs/heads/master@{#457993}
Need to notify the multicol machinery when floats have been laid out.
We may have to trigger creation of additional fragmentainer groups, in case
there's no regular in-flow content that does it for us.

Review-Url: https://codereview.chromium.org/2762483002
Cr-Commit-Position: refs/heads/master@{#457978}
Rework SMIL animation target invalidation
The invalidation of a timed/animation element's target "tuple" (element,
attribute name, attribute type) is somewhat complex.
Rework it to use two methods that can be overridden rather than having
overrides for each setTargetElement/setAttribute{Name,Type}. This allows
to get rid of complicated things like the checkInvalidCSSAttributeType()
in SVGAnimateElement. It should also make the code slightly easier to
reason about when it comes to what state gets invalidated where.


Review-Url: https://codereview.chromium.org/2746013007
Cr-Commit-Position: refs/heads/master@{#457972}
Correctly track cross-thread pending FetchEvents.
ServiceWorkerGlobalScopeProxy is an object that resides on the
main thread heap, but is passed to the embedder and called
on the (service) worker thread. As the object is GC managed
by the main thread, the worker thread cannot update the proxy
object with references to heap objects residing in its heap,
as the per-thread heap design assumes that each heap only keeps
local heap references (via Member<T> and similar.) References
across heaps must instead be kept and handled by explicit
CrossThreadPersistent<> references.

This per-thread heap rule was not being followed for the tracking
of pending FetchEvents; adjust the map representation to do so.


Review-Url: https://codereview.chromium.org/2752203005
Cr-Commit-Position: refs/heads/master@{#457970}
Inherit 'viewBox' into view spec if it is valid
When constructing a view spec from a fragment identifier, the
(negated) hasEmptyViewBox() condition was used to determine if the
viewBox value should be set from the element. This condition however
will equate to:

  !(is-valid && is-empty) => !is-valid || !is-empty

meaning that invalid viewBox values would be transferred. In the case
where a <view> element without a 'viewBox' specified was referenced, the
'viewBox' value from the root could be overwritten by an invalid one.

Use only the validity of the 'viewBox' to determine if the value should
be inherited.


Review-Url: https://codereview.chromium.org/2753773009
Cr-Commit-Position: refs/heads/master@{#457921}
Consistent pagination strut propagation policies.
There's no break opportunity between a spanner and the next block in a column.
Also no break opportunity between a float and an in-flow block. The spec is a
bit vague here, but our implementation certainly doesn't support it.

We have to prevent strut propagation in such cases. If the first piece of
content inside the block (e.g. a line) doesn't fit inside the current
fragmentainer, it's the line that needs to be pushed, not the block.

One of the tests included here used to cause a DCHECK failure.

Review-Url: https://codereview.chromium.org/2746013010
Cr-Commit-Position: refs/heads/master@{#457888}
Always include flow thread overflow in the last column set.
Also do this if the last column set is followed by one or more column spanner
placeholders, or we'd just risk losing content in such situations.


Review-Url: https://codereview.chromium.org/2758663003
Cr-Commit-Position: refs/heads/master@{#457882}
Push the top margin of floats past all useless fragmentainers.
The top margin of a float is not to be split across fragmentainer boundaries if
it can be avoided. We had code to push the margin over to the next
fragmentainer if we were out of space, but we may actually have to push it all
the way to the next fragmentainer *group* (i.e column row) in some cases.

calculatePaginationStrutToFitContent() helps us get there. That's the method we
use to push oversize content (lines and unbreakable blocks) to a better place,
so let's use it for margins too.

Review-Url: https://codereview.chromium.org/2759693002
Cr-Commit-Position: refs/heads/master@{#457881}
Revert "Pull AudioDestinationConsumer off the Blink GC heap."
This reverts commit bb9b04fe0965eeb09f229f7a727fe7235add810f,
attempting to diagnose root crash cause.


Review-Url: https://codereview.chromium.org/2757883002
Cr-Commit-Position: refs/heads/master@{#457833}
Floats are also out-of-flow considering white-space.
When blocks in inlines break lines, we don't create LayoutObjects for
whitespace Text nodes following those blocks unless they are out-of-flow.
However, we incorrectly didn't skip floats looking for such blocks
which caused us to drop whitespace LayoutObjects after floats.


Review-Url: https://codereview.chromium.org/2757563006
Cr-Commit-Position: refs/heads/master@{#457762}
Lock out GCs while iterating over MediaStreamSource audio consumers.
Attempt to diagnose a crash condition by locking out main thread GCs
while the audio thread propagates consumeAudio() updates.


Review-Url: https://codereview.chromium.org/2761463002
Cr-Commit-Position: refs/heads/master@{#457753}
Skip ruleset invalidations for SubtreeStyleChange roots.
When the TreeScope invalidation root is already with SubtreeStyleChange
there is no need to schedule ruleset invalidations for that scope. We
did not end up scheduling the invalidation sets, but went through a lot
of unnecessary steps in scheduleInvalidationsForRuleSets(). Instead,
just return early.

Added some more tests and corrected typos from

Review-Url: https://codereview.chromium.org/2751193004
Cr-Commit-Position: refs/heads/master@{#457715}
Make the gdb Vector pretty-printer work with Python version >= 3.
In iterators it's now called __next__(), not next(), apparently.

Review-Url: https://codereview.chromium.org/2754473007
Cr-Commit-Position: refs/heads/master@{#457711}
Remove incorrect styleResolver() checks.
Whether the StyleResolver is created or not does no longer tell if we
have usable invalidation sets or not. Removing SubtreeStyleChange which
is presumably not necessary anymore.

Add a check for not scheduling any invalidation sets if the document is
already marked for full recalc.

Review-Url: https://codereview.chromium.org/2749273004
Cr-Commit-Position: refs/heads/master@{#457383}
Fix android key event timestamps
Pass a Java long to C++ as a jlong type, not a C++ long which can have a
different size to avoid broken / negative event timestamp values.
ImeAdapter's Java side uses "long" in SendKeyEvent, so the C++ side must
use a jlong or int64_t, and not a C++ long. Otherwise things don't work
well when system uptime is over 2^31ms (~25 days).

Additionally, do not do an extra divide-by-1000 when the used helper
function will do the milliseconds to seconds conversion already, so the
timestamps are correctly measured in milliseconds.

The resulting keyboard event timestamps end up nicely sane and positive,
and no longer clamped to 0 in PerformanceBase.cpp.


Review-Url: https://codereview.chromium.org/2755453004
Cr-Commit-Position: refs/heads/master@{#457369}
Strictly unbreakable objects need to prevent interaction with the outside.
A strictly unbreakable object (i.e. when getPaginationBreakability() ==
ForbidBreaks) has no valid break points inside. This is the case for e.g.
images, writing mode roots and scrollable objects. If such an object is in the
containing block chain between two nested multicol containers, column content
in multicol containers on the inside shouldn't interact with columns in the
enclosing multicol container.


Review-Url: https://codereview.chromium.org/2748973002
Cr-Commit-Position: refs/heads/master@{#457177}
Remove old flow-thread aware code from computeLogicalLocationForFloat().
CSS regions supported variable fragmentainer widths. However, multicol doesn't,
so the code is no longer necessary.

Review-Url: https://codereview.chromium.org/2748963002
Cr-Commit-Position: refs/heads/master@{#457149}
sendBeacon(): once transmission allowance has been reached, always fail.
Fix allowance checking logic for Beacon transmissions upon reaching
the limit. If the allowance limit was 'perfectly' exhausted after N
Beacon requests, subsequent Beacon requests would go ahead without
the (now zero) allowance limit imposed.


Review-Url: https://codereview.chromium.org/2751953002
Cr-Commit-Position: refs/heads/master@{#457088}
Accurate transfer of SerializedScriptValue allocation costs.
r456009 added transferring of allocation costs for a
SerializedScriptValue and any array buffers that it refers to,
transferring that cost from one v8 context to another as part
of a postMessage()

The handoff 'protocol' provided there fell short in that it could
fail to subtract transferable (array buffer contents) costs in
the source context, or end up doing it twice if the postMessage()
failed. Bookkeeping confusion resulted.

Rework the mechanism by instead having ArrayBufferContents keep
track of its external allocation cost registration status, so as
to prevent double discounting. Along with that, it is both safe
and accurate to unregister all allocation costs prior to
transfer. Should the value successfully be posted to its target
context, cost will be registered there. And if not, the value will
be destructed (..but without discounting allocation cost yet again.)


Review-Url: https://codereview.chromium.org/2741793003
Cr-Commit-Position: refs/heads/master@{#456800}
Pull AudioDestinationConsumer off the Blink GC heap.
The AudioDestinationConsumer interface and its single implementation
does not meet the bar for being on the Blink GC heap. It doesn't cause
harm to have them there, but in order to diagnose an unexplained
failure, pull these objects off the heap.

We may want to restore them to the Blink GC heap once the issue has
been resolved.


Review-Url: https://codereview.chromium.org/2748133003
Cr-Commit-Position: refs/heads/master@{#456736}
Dirty pres. attribute style on <svg> dimension change when not attached
When an <svg> wasn't attached, and it had its 'width'/'height' mutated
via the SVG DOM interfaces (SVG*Length), presentation attribute style
would not be dirtied. This could lead to an incorrect size being
computed in some cases.
Ensure that presentation attribute style is always updated if the <svg>
element is not attached.


Review-Url: https://codereview.chromium.org/2747153002
Cr-Commit-Position: refs/heads/master@{#456702}
Invalidate SVG 'transform' pres. attribute style even if not attached
When the 'transform' attribute was manipulated via its SVG DOM
representation (SVGTransformList), the
presentation-attribute-style-is-dirty flag would not be set unless the
element had been attached.
Reorder the contents of the 'transform' branch in
SVGGraphicsElement::svgAttributeChanged so that the presentation
attribute style is always dirtied regardless of attachment status.


Review-Url: https://codereview.chromium.org/2745053005
Cr-Commit-Position: refs/heads/master@{#456696}
Remove argument to LayoutSVGResourceGradient::collectGradientAttributes
We can assume that element() is non-null, and just cast it in the
overriding implementations.
Move the synchronizeAnimatedSVGAttribute(...) calls into actual
attribute collection, so that it applies to all elements in the
inheritance chain.
Also rewrite the lengthy comment, because gradient building has changed
significantly from what it describes, and attribute collection now
precedes the actual Gradient construction. Replicate the new comment to
the similar place for <pattern>s.


Review-Url: https://codereview.chromium.org/2749593002
Cr-Commit-Position: refs/heads/master@{#456662}
Add Gradient::addColorStops method
This seems a better fit on Gradient than on LayoutSVGResourceGradient.

Review-Url: https://codereview.chromium.org/2749583002
Cr-Commit-Position: refs/heads/master@{#456504}
Turn IDBTransaction into the ContextLifecycleObserver it needs to be.
Revert r453574's switch to using ContextClient for IDBTransaction,
going back to ContextLifecycleObserver. This is needed in order for
IDBTransaction's debug checks upon destruction to be able to safely access
the ExecutionContext.

While ContextClient keeps a weak reference to its ExecutionContext,
accessing it from a destructor assumes that weak processing for the
ContextClient will already have run (and cleared out the ExecutionContext
weak reference, if needs be.) This assumes that weak processing will
always run, which it won't if the ContextClient and ExecutionContext are
determined to be garbage during the same GC.

Update ContextLifecycleObserver comments to mention this subtle detail.


Review-Url: https://codereview.chromium.org/2742393002
Cr-Commit-Position: refs/heads/master@{#456432}
Remove <filter> from the chainableResourceTags set
We don't actually support inheritance for <filter>, so having it in the
set is of no use.


Review-Url: https://codereview.chromium.org/2743293002
Cr-Commit-Position: refs/heads/master@{#456380}
Refactor <paint> URL resolution in SVGResources
Hoist the has-url check out of paintingResourceFromSVGPaint(), and
remove |hasPendingResource| - consider all null-returns as having pending
resources. (This means "incorrect" <paint> URL references are considered
pending, just as URL references for other resource types.)


Review-Url: https://codereview.chromium.org/2746933002
Cr-Commit-Position: refs/heads/master@{#456374}
Move common gradient attribute collection to SVGGradientElement
Move the collection of attributes shared by both gradient types to the
base class (collectCommonAttributes.) Introduce a new helper for looking
up a potential element to inherit attributes from. Restructure the
"collection loop" a bit after the common code has been broken out.
This also means that buildStops() can be made private.


Review-Url: https://codereview.chromium.org/2741993002
Cr-Commit-Position: refs/heads/master@{#456371}
Use IdTargetObserver in SVGSMILElement
Move SVGSMILElement (target reference) and SVGSMILElement::Condition to
use IdTargetObserver via SVGURIReference::observeTarget.
Simplify the result to avoid needing the lookupEventBase helper.


Review-Url: https://codereview.chromium.org/2737403003
Cr-Commit-Position: refs/heads/master@{#456367}
PartitionAlloc: use less stack when dumping stats.
Avoid unnecessary stack usage in PartitionDumpStatsGeneric() for
the intermediate array of sizes used for full stats reporting.

Full stat dumps are currently only made use of by unit tests,
light reports do not make really use of an intermediate array and
allocation can be avoided for those. Addressing some reported
stack overflow failures (Windows.)

BUG=699893, 699922

Review-Url: https://codereview.chromium.org/2741853007
Cr-Commit-Position: refs/heads/master@{#456291}
Track lastTextNode during rebuildLayoutTree.
We keep track of last seen text node for more efficient whitespace
re-attachment. When style recalc and layout tree building was split,
the text node is still tracked during recalc, stored in a hash map, and
retreived when needed during layout tree building.

However, the text nodes are also traversed during layout tree building
so that we can track the nodes during that phase instead.
StyleReattachData is removed and this CL reverts back to using the
m_nonAttachedStyle map for ComputedStyle.

The comment about reversed traversal of children for avoiding n^2
performance is moved to rebuildChildrenLayoutTrees() since that's where
the issue is. We should be able to do the child recalc first-to-last
now if we want to.


Review-Url: https://codereview.chromium.org/2740823005
Cr-Commit-Position: refs/heads/master@{#456047}
Initial containing block for print not affected by page zoom.
The page zoom factor is not applied to the ICB for printing, yet the
ICB basis for media queries and viewport units were. Use 1 as a page
zoom factor in viewportSizeForViewportUnits and use that method to get
the size for the ICB for evaluating media queries.


Review-Url: https://codereview.chromium.org/2738173002
Cr-Commit-Position: refs/heads/master@{#456040}
MediaStreamSource: verify unlocked state when finalizing.
To diagnose an audio thread crash condition, verify that the lock
over audio consumers that MediaStreamSource keeps, isn't held when it is
being finalized. If it is, then the audio thread is active using the
MediaStreamSource object..which is not a well-formed state to be in.


Review-Url: https://codereview.chromium.org/2741663004
Cr-Commit-Position: refs/heads/master@{#456029}
Remove LayoutTests that test the now unsupported user-select: ignore

Review-Url: https://codereview.chromium.org/2740953004
Cr-Commit-Position: refs/heads/master@{#456028}
Stop assuming anything about result of MFStartup()
MFStartup() usually returns S_OK.  However, being a system library
function it doesn't have to, and we have no control over it.  It can
return an error when something goes wrong within Media Foundation, or
simply on an "N" edition of Windows that doesn't even have Media

Review-Url: https://codereview.chromium.org/2735783002
Cr-Commit-Position: refs/heads/master@{#456026}
postMessage(): transfer allocation costs along with value.
A MessageEvent's data value will in some cases hold on to significant
amounts of off-heap memory, so we take care of registering that
external allocation with v8, so that it can be taken into consideration
by the GC triggering logic.

However, when posting a message to another context, we must arrange for
its total 'external allocation' to be associated with the target context.
Including the sizes of any transferables (array buffers), so balance the
books more accurately by also transferring the external allocation cost
of those transferables.


Review-Url: https://codereview.chromium.org/2734173002
Cr-Commit-Position: refs/heads/master@{#456009}
Remove side-effects from the SVGTreeScopeResources constructor
SVGTreeScopeResources and SVGDocumentExtensions carries disjoint state,
so this side-effect is not required.

Review-Url: https://codereview.chromium.org/2739063004
Cr-Commit-Position: refs/heads/master@{#455826}
Fold SVGDocumentExtensions::reportError into only user
This method only had a single user, and it seems like it could just call
Document::addConsoleMessage directly.
Also remove a stray 'public' access specifier by moving the single
method in it up a bit in the file.

Review-Url: https://codereview.chromium.org/2738233002
Cr-Commit-Position: refs/heads/master@{#455802}
Remove some dated Member friendships.
CollectionBackingTraceTrait no longer exists, and Visitor only
needs to be friend with WeakMember<>.


Review-Url: https://codereview.chromium.org/2745433003
Cr-Commit-Position: refs/heads/master@{#455786}
Use IdTargetObserver in SVGUseElement
Change SVGUseElement to use the observeTarget() helper from
SVGURIReference. Since SVGUseElement has some additional requirements
for its reference management, a more low-level observeTarget() variant
is exposed.
To facilitate this change, clearShadowTree() is renamed to
clearResourceReference(), and the shadow tree tear-down is hoisted out
of it.


Review-Url: https://codereview.chromium.org/2744613002
Cr-Commit-Position: refs/heads/master@{#455769}
Use IdTargetObserver in SVGFEImageElement
Change SVGFEImageElement to use the observeTarget() helper from
A slight change in behavior for when a load is initiated for a potential
image resource is made. Instead of using a "failed element lookup and a
non-existing id" as the condition, use "failed element lookup and non-
local resource reference".
Also add a new method clearImageResource() and put the tear-down for
the image resource, and change a use of ownerDocument() to just


Review-Url: https://codereview.chromium.org/2740003003
Cr-Commit-Position: refs/heads/master@{#455765}
Disable virtual/gpu-rasterization/images/cross-fade-background-size.html
Minor differences on Windows bots.


Review-Url: https://codereview.chromium.org/2741693002
Cr-Commit-Position: refs/heads/master@{#455714}
Store element reference for event-bases too
Rather than using the (obviously "racy") technique of looking up the
event-base element again when disconnecting from it, store the reference
on connect (sharing storage with the sync-base element since they are
mutual exclusive) and use it to disconnect properly.


Review-Url: https://codereview.chromium.org/2739893002
Cr-Commit-Position: refs/heads/master@{#455699}
Text control elements should contain all (shadow DOM) children.
For instance, INPUT type="search" elements allow styling of the cancel button,
via a ::-webkit-search-cancel-button pseudo element selector. We don't want authors
to be able to escape the containing INPUT element by styling the cancel button as
position:absolute, etc.

Force INPUT and other text control elements to be in the containing block chain of
all its descendants. This should be a good idea in general (and at least harmless),
and there's also C++ code [1] that essentially assumes that it is so.

Since this change makes canContainFixedPositionObjects() in LayoutObject and
ComputedStyle even more different than they used to be, we need to change some
code from using the one in ComputedStyle to the one in LayoutObject.

Two existing tests in fast/forms/ had to be updated, since they were adding together
offsetLeft of an INPUT element and offsetLeft of something inside the INPUT element
in a way that used to work by accident. Use getBoundingClientRect() instead, since
the test ultimately wants absolute coordinates anyway.

[1] See ThemePainterDefault::paintSearchFieldCancelButton()


Review-Url: https://codereview.chromium.org/2733593002
Cr-Commit-Position: refs/heads/master@{#455644}
Add a new mechanism for watching SVGElement 'href' targets
This CL adds a new mechanism for watching elements referenced via 'href'
attributes. It uses IdTargetObserver as the basis adding a callback for
This is a step away from relying on SVGTreeScopeResources for tracking
of "pending" elements for these use cases. Each element is instead does
its own tracking via the relevant TreeScope. This will eventually mean
that the buildPendingResourcesIfNeeded mechanism can be removed.

SVGTextPathElement and SVGMPathElement are updated to use this new
scheme. Other uses will be replaced in future CLs.


Review-Url: https://codereview.chromium.org/2737653006
Cr-Commit-Position: refs/heads/master@{#455584}
Account for borders and padding when calculating background tile size.
This is required when sub-pixel borders and padding are used, otherwise
the tile size may become one pixel too small, causing rendering artifacts.
Test case attached.


Review-Url: https://codereview.chromium.org/2689993003
Cr-Commit-Position: refs/heads/master@{#455454}
Search the entire subtree when looking for the end of an inline continuation chain.
Inlines may be nested, so we may not find the last inline in the chain as a
direct child of the anonymous blocks. We need to search the entire subtree.
Don't do this with anonymous blocks that wrap block children (the block-level
DOM children of the inline-level objects), though. We're not going to find
anything interesting there.

This fix is speculative; the original bug report didn't come with a test case.


Review-Url: https://codereview.chromium.org/2738503004
Cr-Commit-Position: refs/heads/master@{#455420}
XMLHttpRequest: return null upon failing responseArrayBuffer allocation.
The allocation of a response ArrayBuffer may fail, a large enough
contiguous chunk of memory simply not being available from the
underlying allocator. The spec [1] now admits allocation failure as a
possibility, allowing the return of a null buffer if so.

Update our implementation accordingly, returning null rather than
failing hard with an OOM.

1 - https://xhr.spec.whatwg.org/#arraybuffer-response


Review-Url: https://codereview.chromium.org/2730943002
Cr-Commit-Position: refs/heads/master@{#455398}
Move ::selection invalidation to applyPseudoStyleChanges.
Removed need for separate StyleDifference constant for ::selection and
otherwise simplified the code.


Review-Url: https://codereview.chromium.org/2732113002
Cr-Commit-Position: refs/heads/master@{#455262}
Make ::first-line invalidation work when added or removed.
We were only invalidating ::first-line properly when both old and new
ComputedStyle contained ::first-line styles. Now, instead call
setNeedsLayoutAndPrefWidthsRecalc to trigger changes when either old or
new ComputedStyle does not have ::first-line style.

The ::first-line invalidation is moved from Element to LayoutObject,
and unnecessary traversal code removed.

I have not been able to come up with a case where we need to compare
PseudoIdFirstLineInherited style, so diffing that is removed.


Review-Url: https://codereview.chromium.org/2728383002
Cr-Commit-Position: refs/heads/master@{#455088}
Make HashTraits<QualifiedName>::emptyValue return a const reference
This avoids unnecessary construction of a temporary object, saving a few
cycles and some code-space (~2k on x86-64.)
Also inline QualifiedName::null for some additional savings.

Review-Url: https://codereview.chromium.org/2702403013
Cr-Commit-Position: refs/heads/master@{#455069}
Don't double-resolve URL in TextTrackLoader::load
The caller (HTMLTrackElement::loadTimerFired) will already have
resolved the URL.


Review-Url: https://codereview.chromium.org/2731953002
Cr-Commit-Position: refs/heads/master@{#455050}
Allow zero-height fragmentainers.
We used to assert against this, but we really can't, since there are
legitimiate reasons for a fragmentainer (and fragmentainer groups and column
sets) to have zero height, e.g. when its content is zero-height.


Review-Url: https://codereview.chromium.org/2737503002
Cr-Commit-Position: refs/heads/master@{#455040}
TestInterfaces: support delegate clearing.
Following r454834, the implementation of SetDelegate() also needs to
handle resetting of the test delegate.


Review-Url: https://codereview.chromium.org/2738513004
Cr-Commit-Position: refs/heads/master@{#455030}
Improve handling of duplicate id's for SVG resources
This CL attempts to fix the known issues with duplicate id's and SVG
resources. There are a variety of cases where this fails, and the added
tests attempt to cover those as well as possible.

The know bugs generally stem from:

 * Resources being registered in (layout) tree order after style
   recalc. This for instance mean that any later defined resources
   will shadow any earlier appearing resource (which would the correct

 * Removing a resource container does not consider that there could now
   be another resource that is no longer shadowed by the one removed.
   Together with the above, this also meant that removing a resource
   from the DOM could invalidate, and break, all occurences of said

This CL attempts to handle the above by factoring the result of
getElementById into the equation, considering it to be "the truth" when
possible/required. The new methods registerResource and
unregisterResource form the basis of this, codifying the two basic
operations on which the tracking is built. The tracking of the
'registered' flag from LayoutSVGResourceContainer is now handled by
SVGTreeScopeResources. While this flag could be considered an
optimization at this point, DCHECKs are added to attempt to keep it
true to it's purpose.


Review-Url: https://codereview.chromium.org/2722543002
Cr-Commit-Position: refs/heads/master@{#454951}
Stop casting HTMLInputElement to HTMLInputElement.
There can be some confusion which cast method to use, the
one for HTMLElements or the one for ListedElements so don't
even bother.

Review-Url: https://codereview.chromium.org/2728403003
Cr-Commit-Position: refs/heads/master@{#454899}
Add message loop to v8's unittests
When (at least some) v8 unittests are started in bigger batch
we hit v8 garbage collector's incremental marking hard limit.
When it happens v8's engine posts task and it causes crash as
there is no active message loop. This change creates message
loop for v8's unittests to fix this crash.


Review-Url: https://codereview.chromium.org/2735703003
Cr-Commit-Position: refs/heads/master@{#454898}
RenderFrameImpl: avoid creating many temporary WebDocuments.
Accessing a property off of a WebFrame's document will entail instantiating
a WebDocument, which implies a WebPrivatePtr<> holding a persistent reference.

Avoid the overhead via some manual CSEing.


Review-Url: https://codereview.chromium.org/2723083002
Cr-Commit-Position: refs/heads/master@{#454878}
Bit-mask incorrectly removed first-line pseudo bit.
The m_pseudoBits member only contains the 8 bits for the public pseudo
element bits, yet we used a mask to retrieve them. That mask was
incorrectly set to 0x1fe when it should have been 0xff. Anyway, that
mask is unnecessary and removed.

The mask issue caused StylePropagationDiff, returned from
diffPseudoStyles, to be NoChange for pure ::first-line changes. That
NoChange return were the only case which triggered first-line
invalidation properly.

Instead, always check for pseudo style changes in
pseudoStyleCacheIsInvalid. This fixes issue 698451.

The pseudoStyleCacheIsInvalid method has a weird name, has bugs, and
should be put on LayoutObject and called as part of setStyle instead.
That is for follow-up CLs.


Review-Url: https://codereview.chromium.org/2729373003
Cr-Commit-Position: refs/heads/master@{#454850}
Avoid fetching RFH from nav handle for not committed navigations.
For devtool use case there is only a need to check if hosts match,
so compareing frame tree node id instead of raw pointers will give
same result.


Review-Url: https://codereview.chromium.org/2730873002
Cr-Commit-Position: refs/heads/master@{#454849}
Calculate positioningArea and not just size, for tiling background.
Computing the correct background tiling size when sub-pixel border or
padding is used, requires calculating the full positioning area and not
just size. The actual fix for 686435 is in a followup cl.


Review-Url: https://codereview.chromium.org/2690053002
Cr-Commit-Position: refs/heads/master@{#454843}
WebViewTestProxyBase: clear out main test delegate upon destruction.
The first BlinkTestRunner created is set as the main delegate of test
interfaces along with being set as the delegate of the web view test
proxy object.

When that view test proxy goes away, unregister the main delegate at
the same time as it can no longer be safely accessed.


Review-Url: https://codereview.chromium.org/2734713002
Cr-Commit-Position: refs/heads/master@{#454834}
Isolate strictly unbreakable multicol containers that are nested.
A strictly unbreakable object (i.e. when getPaginationBreakability() ==
ForbidBreaks) has no valid break points inside. This is the case for e.g.
images, writing mode roots and scrollable objects. If such an object is an
inner multicol container, column content inside shouldn't interact with
enclosing columns.


Review-Url: https://codereview.chromium.org/2729903003
Cr-Commit-Position: refs/heads/master@{#454765}
Update views::Textfield cursor color on text color change
views::Textfield::SetTextColor should apply new color to the cursor as well.
Currently this will happen but only after Textfield::OnNativeThemeChanged
is triggered in some way.


Review-Url: https://codereview.chromium.org/2730623003
Cr-Commit-Position: refs/heads/master@{#454616}
Remove some unnecessary 'using namespace'
The construct "using namespace" is not allowed by the Chromium
coding style and since these are not even necessary I'm just
removing them.

Review-Url: https://codereview.chromium.org/2729093003
Cr-Commit-Position: refs/heads/master@{#454605}
The WebVTT 'line' settings should be parsed as a float
Per https://w3c.github.io/webvtt/#parse-the-webvtt-cue-settings .
Negative zero is transformed to positive zero.

Also make valid percentages outside of [0, 100] fail quicker.


Review-Url: https://codereview.chromium.org/2725313002
Cr-Commit-Position: refs/heads/master@{#454587}
Call getUncachedPseudoStyle on correct node for ::selection.
getUncachedSelectionStyle is typically called for the LayoutObject we
are currently painting. This might not be the node the ::selection
style is matched for. Specifically, we request getUncachedSelectionStyle
on LayoutText objects, but we need to match the ::selection style on its
parent element.

This already happened inside getUncachedPseudoStyle, but it's guarded by
a hasPseudoStyle() call for the pseudo element type. In the case where
we pass in a LayoutText, we are relying on the computed style with the
PseudoIdSelection bit set to be propagated down to the LayoutText object.
That does not happen if the style change for the element parent is
NoChange or NoInherit.

Instead find the element for which we are matching ::selection in
getUncachedSelectionStyle instead. The firstAncestorOrSelf() call is
still present in getUncachedPseudoStyle as there may be other pseudo
elements types where we rely on this.


Review-Url: https://codereview.chromium.org/2727253004
Cr-Commit-Position: refs/heads/master@{#454575}
Support XMLHttpRequest.send(URLSearchParams)
Update send()'s overloaded set to also include URLSearchParams,
mirroring a recent BodyInit spec addition,



Review-Url: https://codereview.chromium.org/2723583005
Cr-Commit-Position: refs/heads/master@{#454571}
needsPaintInvalidation() should not return true for selection.
In [1] we introduced a paint invalidation constant for repainting
selection. needsPaintInvalidation() started to also return true when
only the selection needed paint invalidation. Callers of that method
assumes that true will cause at least a full element repaint which made
us skip setting the diff to invalidate the object and only invalidate
the selection in some cases. Instead, only return true for
PaintInvalidationObject and PaintInvalidationSubtree.

[1] https://crrev.com/eff357ef


Review-Url: https://codereview.chromium.org/2727843004
Cr-Commit-Position: refs/heads/master@{#454564}
Remove some unnecessary using namespaces and add include guards
The Chromium Code Style doesn't allow using namespace and when
I looked at the code it seems some of them in layout are not
even needed. This removes the ones that are not needed and
adds explicit scoping at the one place it's needed.

Also adding a missing header guard and remove an unused enum.

Review-Url: https://codereview.chromium.org/2722313007
Cr-Commit-Position: refs/heads/master@{#454563}
Add View::AddedToWidget and RemovedFromWidget.
Many views implement ViewHierarchyChanged to perform some setup once a
Widget becomes available to them. This results with code duplication.
With these new methods there will be no need to implement
ViewHierarchyChanged for the common case.


Review-Url: https://codereview.chromium.org/2713643002
Cr-Commit-Position: refs/heads/master@{#454542}
Skip a few "using namespace" that we don't really need.
The Chromium coding style doesn't allow "using namespace" at all
and since the code will eventually adapt and they are causing
issues with some experiments I rather remove them now.

Review-Url: https://codereview.chromium.org/2729583004
Cr-Commit-Position: refs/heads/master@{#454449}
Respect constrained height on nested multicol containers.
If there's no more space in an inner multicol container (according to e.g. its
height or max-height), don't create any additional fragmentainer groups (i.e.
column rows).

The spec isn't clear here, but this change moves us closer to Edge, and also
eliminates cases where we'd previously end up with pathological numbers of
fragmentainer groups.

Also flipped the logic in hasFragmentainerGroupForColumnAt(), and renamed it to


Review-Url: https://codereview.chromium.org/2725943003
Cr-Commit-Position: refs/heads/master@{#454411}
Add a use-counter for transforms using the reference box on SVG element
For gauging the risk of implementing 'transform-box' proper - mostly
with an eye towards the initial value.


Review-Url: https://codereview.chromium.org/2725973003
Cr-Commit-Position: refs/heads/master@{#454408}
Avoid name collision for secondsPerHour/secondsPerMinute
There are other places declaring the names secondsPerHour
and secondsPerMinute. They don't collide right now, but by
moving these to a smaller namespace I can avoid collisions
in some experiments.

Review-Url: https://codereview.chromium.org/2730683004
Cr-Commit-Position: refs/heads/master@{#454384}
Fix core/frame PRESUBMIT for UseCounter changes
The start marker was missing a piece after

Review-Url: https://codereview.chromium.org/2728543006
Cr-Commit-Position: refs/heads/master@{#454312}
blink_gc_plugin: always enable warn_stack_allocated_trace_method check.

Review-Url: https://codereview.chromium.org/2730673003
Cr-Commit-Position: refs/heads/master@{#454307}
Enable Blink GC plugin check for stack allocated classes.
The latest clang roll (crbug.com/685244) included a GC plugin with
support for checking STACK_ALLOCATED() classes w/ unwanted trace
method definitions. Add support for that check to the build system,
unconditionally enabled.


Review-Url: https://codereview.chromium.org/2724353002
Cr-Commit-Position: refs/heads/master@{#454306}
Sync the FeatureObserver (UseCounter) metric in histograms.xml
Catching up with changes to Blink's

Review-Url: https://codereview.chromium.org/2729543004
Cr-Commit-Position: refs/heads/master@{#454280}
React to not committed render frame navigations in devtools.
Currently it was trying to handle only error pages or committed
navigations which lead to RenderFrameDevToolsAgentHost being stuck
in suspended state for navigations that did not commit (for example
downloads). This in turn caused webdriver to get stuck on further
interactions with such frames. This is regression caused by


Review-Url: https://codereview.chromium.org/2720823004
Cr-Commit-Position: refs/heads/master@{#454229}
Drop some "using namespace" in WebKit/Source/html.
Drop some "using namespace" that are not used or not allowed
by the coding standard.

Review-Url: https://codereview.chromium.org/2726603002
Cr-Commit-Position: refs/heads/master@{#453964}
Construct URLSearchParams from sequence initializer.
Follow up recent spec addition[1,2] and support sequence<sequence<USVString>>
initializers for URLSearchParams.

1 - https://github.com/whatwg/url/issues/27
2 - https://github.com/whatwg/url/pull/175


Review-Url: https://codereview.chromium.org/2725593003
Cr-Commit-Position: refs/heads/master@{#453903}
Move MarkupTokenizerInlines.h to core/html
This set of helpers is used by HTMLTokenizer and VTTTokenizer - both of
which reside in core/html.

Review-Url: https://codereview.chromium.org/2724593002
Cr-Commit-Position: refs/heads/master@{#453887}
Avoid conflict between 2 enums named Mode and 2 values named None.
If you include (directly or indirectly) forms/TypeAhead.h or
MediaFragmentURIParser.h or track/vtt/VTTRegion.h you get conflicts
either with the enum value None or the enum name Mode so give the
enum a less generic name.

Review-Url: https://codereview.chromium.org/2724533003
Cr-Commit-Position: refs/heads/master@{#453634}
bluetooth: show better error messages for services, characteristics and descriptors.
The error message now contains the UUID of the respective service, characteristic or descriptor.


Review-Url: https://codereview.chromium.org/2680783002
Cr-Commit-Position: refs/heads/master@{#453590}
Convert unnecessary ContextLifecycleObservers into ContextClients.
Convert remaining types that do not make use of |contextDestroyed()|
overriding, making them be context clients instead.


Review-Url: https://codereview.chromium.org/2721603005
Cr-Commit-Position: refs/heads/master@{#453574}
Use independent property inheritance fast-path for text-align.
This was originally attempted in [1], but the custom function for
applying text-align values did not clear the inherited bit.

Added a test to the framework to catch the case for trying to propagate
a value down to a descendant with the property explicitly set.

[1] https://codereview.chromium.org/2628503002/


Review-Url: https://codereview.chromium.org/2715213003
Cr-Commit-Position: refs/heads/master@{#453430}
Remove out-of-date comment about scoped style resolvers.
Collecting features is not longer connected to StyleResolver and the
comment is no longer correct in any way. The nullptr test is still
there because a TreeScope may have stylesheet candidates which do not
have style sheets. A candidate is causing the TreeScope to be added to
the active list, while it has to have at least one active stylesheet to
enforce a ScopedStyleResolver instance.


Review-Url: https://codereview.chromium.org/2716363002
Cr-Commit-Position: refs/heads/master@{#453427}
Rename SVGPaintContext::paintSubtree to paintResourceSubtree
To better reflect it's use and function.

Review-Url: https://codereview.chromium.org/2715513009
Cr-Commit-Position: refs/heads/master@{#453278}
Tidy up instance time handling in SVGSMILElement
Merge the addBeginTime and addEndTime methods into a single method
addInstanceTime (that takes a BeginOrEnd argument.) Migrate callers to
the new method, getting rid of SVGSMILElement::handleConditionEvent in
the process.
Also inline some trivial functions in SVGAnimationElement.


Review-Url: https://codereview.chromium.org/2712343004
Cr-Commit-Position: refs/heads/master@{#453233}
MessagePort: don't post repeated message dispatch tasks.
If a task has already been posted to drain the incoming queue of messages,
don't post another.


Review-Url: https://codereview.chromium.org/2716163002
Cr-Commit-Position: refs/heads/master@{#453205}
Allow flow thread portion logical bottom to be above its logical top.
We used to try to prevent this, as an attempt to make sure that no
fragmentainer group would have overlapping flow thread portion rectangles with
other fragmentainer groups. But that was already easily achievable with e.g. an
empty block between two column spanners anyway.

There is a legitimate reason for the flow thread portion bottom to be above the
top: negative margins.

Introduce MultiColumnFragmentainerGroup::logicalHeightInFlowThreadAt().
Less duplicated code. Some extra care is now needed, to make sure that we don't
end up with negative logical heights.


Review-Url: https://codereview.chromium.org/2709013007
Cr-Commit-Position: refs/heads/master@{#453201}
Add comment about SVGGraphicsElement.{nearest,farthest}ViewportElement
Move to bottom of interface per common practice.


Review-Url: https://codereview.chromium.org/2714123003
Cr-Commit-Position: refs/heads/master@{#453124}
Update VTTCue enum AlignSetting, "middle" -> "center"
Apparently this was missed in https://codereview.chromium.org/2683633006


Review-Url: https://codereview.chromium.org/2719513002
Cr-Commit-Position: refs/heads/master@{#453121}
Fold svgAttributeChanged into parseAttribute for SVGAnimateElement
This separation does not really give much in terms of benefits. Since
none of the SMIL-related attributes are exposed through SVG DOM, the
former method is always called after the latter. Move the code from the
former to the latter. This even avoids the attribute value lookup, for a
tiny perf gain...


Review-Url: https://codereview.chromium.org/2706243012
Cr-Commit-Position: refs/heads/master@{#452861}
Remove 'begin'/'end' processing from SVGSMILElement::svgAttributeChanged
The svgAttributeChanged hook is (with one exception) used for attributes
that are part of the SVG DOM representation ("object model".) 'begin'
and 'end' are not. Move handling to SVGSMILElement::parseAttribute


Review-Url: https://codereview.chromium.org/2719493002
Cr-Commit-Position: refs/heads/master@{#452858}
Tidy up event-/syncbase registration in SVGSMILElement
Move code for connect/disconnecting from event- and syncbase into the
Condition innerclass to improve readability.
Also make Condition::m_baseID and m_name be AtomicStrings (to avoid
casting and hashing all over the place), convert loops to range-syntax
and use references where it makes sense in related code-paths.


Review-Url: https://codereview.chromium.org/2714643007
Cr-Commit-Position: refs/heads/master@{#452857}
Avoid duplicating the CSS property mapping for SVG pres. attrs.
The attribute (object) -> CSS property mapping is specified at
construction and stored, so rather than having to repeat it, just read
and use the stored value.

Also add a cssValue() helper method to SVGAnimatedPath.

Review-Url: https://codereview.chromium.org/2708923011
Cr-Commit-Position: refs/heads/master@{#452839}
Remove LayoutSVGResourceContainer::m_id
By passing the old and new values to the idChanged() method, the only
"reload" of the value can be eliminated, and other instances can use
getIdAttribute() on the element. This makes the m_id field unused, so
it can be removed.


Review-Url: https://codereview.chromium.org/2714153002
Cr-Commit-Position: refs/heads/master@{#452838}
Verify that a new heap page isn't also marked as being off heap.
Attempt to diagnose a rare assert failure, where a conservative
GC stack scan finds a potential pointer in both the heap's
negative heap page cache and in the map of in-use heap pages.

Those two mapping should be mutually exclusive by construction,
and must be -- the negative page cache must not contain false
positives. Hence, add verification when a new page is committed
& used, it does not already have a mapping in that negative cache.


Review-Url: https://codereview.chromium.org/2715713005
Cr-Commit-Position: refs/heads/master@{#452833}
A per-heap RegionTree needs no lock.

Review-Url: https://codereview.chromium.org/2717613004
Cr-Commit-Position: refs/heads/master@{#452814}
Add header guards to CanvasAsyncBlobCreator.h

Review-Url: https://codereview.chromium.org/2711333002
Cr-Commit-Position: refs/heads/master@{#452812}
Cleanup the SVGTreeScopeResources interface
After some previous refactoring, some methods no longer need to be
public, and some methods can be folded into others to avoid some hash-
Also use HashMap::removeAll in removeElementFromPendingResources, change
some methods to use references and hide a longish typename with 'auto'.


Review-Url: https://codereview.chromium.org/2705163008
Cr-Commit-Position: refs/heads/master@{#452645}
Tidy ScriptRunner pending script handling.

Review-Url: https://codereview.chromium.org/2710233002
Cr-Commit-Position: refs/heads/master@{#452619}
Avoid negative content box sizes.
Negative values had two possible causes:

1. Subtracting the scrollbar size from the border box size. Scrollbars do not
affect the border box size, but they occupy space between some border edge and
padding edge. This means that the presence of a scrollbar on an object reduces
the size of the content box and the containing block established by said
object. This means that if e.g. the specified width of an object is 10px and it
has a vertical scrollbar that takes up more than that, e.g. 15px, the content
box width should become 0, not -5px.

2. Subtracting two huge (or even saturated) LayoutUnit values from one
LayoutUnit value. When we during layout convert a specified content-box width
to border-box (via padding-box), which is what LayoutBox::m_frameRect uses, we
may end up with saturated LayoutUnit values, so that:
LayoutUnit specified_content_box_width = <whatever, something nice, maybe>;
LayoutUnit left_padding = LayoutUnit::max() /*(or something huge, at least)*/;
LayoutUnit right_padding = LayoutUnit::max() /*(or something huge, at least);*/
LayoutUnit padding_box_width = content_box_width + left_padding + right_padding;
LayoutUnit content_box_width = padding_box_width - left_padding - right_padding;
Here, content_box_width won't be the same as specified_content_box_width,
because padding_box_width got saturated. That's kind of inevitable, with
saturated arithmetic and all, but what's worse is that we used to end up with a
negative value in content_box_width, which is illegal. So just clamp negative
values to 0 to avoid that.

Negative box sizes have various kinds of ill effects, such as inline-axis
misalignment and unwanted negative block direction progression. It was possible
to get negative padding (which is illegal) resolved from percentage values.
This in turn caused unnecessary assertion failures in multicol.

Attempted to come up with sensible layout tests that don't make assumptions
about how the engine deals with extreme values internally.


Review-Url: https://codereview.chromium.org/2716583002
Cr-Commit-Position: refs/heads/master@{#452578}
Merge overflowRectForFlowThreadPortion() into flowThreadPortionOverflowRectAt().
No need to keep this in LayoutMultiColumnSet anymore. Also got rid of
unused method LayoutMultiColumnSet::flowThreadPortionOverflowRect().

No behavior changes intended.

Review-Url: https://codereview.chromium.org/2711003005
Cr-Commit-Position: refs/heads/master@{#452537}
Avoid needless InstanceCounter.h inclusion.
Only needed if RefCounted<> is compiled specially.


Review-Url: https://codereview.chromium.org/2714703002
Cr-Commit-Position: refs/heads/master@{#452453}
Move SVGElement::buildPendingResourcesIfNeeded to SVGTreeScopeResources
Move notification of a resource "appearing" to SVGTreeScopeResources,
naming the method notifyResourceAvailable().
Simplify the handling of the pending resources map to avoid unnecessary
hash-lookups in some cases.


Review-Url: https://codereview.chromium.org/2710583005
Cr-Commit-Position: refs/heads/master@{#452187}
DisplayItemClient: avoid hash table temporaries when iterating.

Review-Url: https://codereview.chromium.org/2712703002
Cr-Commit-Position: refs/heads/master@{#452147}
Avoid unnecessary HashTable resizing during copy construction.
We do know the final table size, so reserve its size before starting
to copy over. Thereby avoiding intermediate table allocations.


Review-Url: https://codereview.chromium.org/2715473004
Cr-Commit-Position: refs/heads/master@{#452060}
Move LayoutSVGResourceContainer registration to SVGTreeScopeResources
Move LayoutSVGResourceContainer::registerResource to
SVGTreeScopeResources, renaming it to updateResource while getting rid
of addResource (since it's only called from updateResource.)
Simplify the interaction with the m_pendingResources set a bit, to
eliminate a hash-lookup in certain code-paths.


Review-Url: https://codereview.chromium.org/2714473002
Cr-Commit-Position: refs/heads/master@{#452050}
Remove unnecessary PagePool locks.
With per-thread heap (arenas), there will not be any contention
on adding and removing page pool entries.


Review-Url: https://codereview.chromium.org/2707193004
Cr-Commit-Position: refs/heads/master@{#452023}
Repaint selection when element with ::selection style is recalculated.
Selection was not repainted unless the selected text was repainted due
to other style changes. Now, if the ComputedStyle is recalculated for
an element and either the old or the new ComputedStyle had a bit set
for PseudoIdSelection, schedule paint invalidation for the selection
leaf children of that element.

Note that we don't need to traverse down the descendants because the
current implementation of ::selection in Blink only affects direct
children. The selection state is only propagated to containing block
ancestor, which is why we look for a containing block to check if any
of the children is selected.


Review-Url: https://codereview.chromium.org/2709693003
Cr-Commit-Position: refs/heads/master@{#451992}
Compute a more correct "screen scope" transform for SVGSVGElement
For getScreenCTM, only the position (translation) of the outermost svg
element was computed - any additional transform data was dropped.

Use LayoutObject::localToAbsoluteTransform to compute the full transform
rather than just the position of the layout box. Since using this method
works for any (attached) element, implement getScreenCTM without using
computeCTM, and get rid of the ScreenScope variant of the latter. This
also allows us to simplify SVGSVGElement::localCoordinateSpaceTransform
a bit, and drop the CTMScope argument from the
localCoordinateSpaceTransform declaration(s).

It's not clear from [1] how elements which are not in the rendering tree
(i.e has 'display: none' or similar) should be handled. With this
implementation we will return an identity matrix in those cases, which
doesn't seem unreasonable. (The option would be to return 'null', which
is how elements not in the document should be treated, but we don't have
that semantic implemented yet.)

[1] https://svgwg.org/svg2-draft/types.html#__svg__SVGGraphicsElement__getScreenCTM


Review-Url: https://codereview.chromium.org/2711503002
Cr-Commit-Position: refs/heads/master@{#451938}
Clean up the getLayoutSVGResource*ById helpers
Drop getLayoutSVGResourceContainerById helper, since we can just use
SVGTreeScopeResources::resourceById directly.

For getLayoutSVGResourceById, rather than calling through
TreeScope::ensureSVGTreeScopedResources, just pass the
SVGTreeScopeResources and do the lookup from there. Said object is
already available in the relevant places (only the layout tree dumping
needs to be updated wrt that.)


Review-Url: https://codereview.chromium.org/2708543003
Cr-Commit-Position: refs/heads/master@{#451839}
Disallow cross-thread Persistent<> read access.
A Persistent<> reference is belongs to the thread that created it,
read and write access must only be performed by that thread.

Debug verification have been in place for some time to verify that Persistent<>
updates only happen on its creation thread, and that the updated heap pointer
resides on that thread's heap. Extend the debug checks to also apply to read
access, checking that no other thread accesses the Persistent<>.

This requires converting a handful of Persistent<>s to CrossThreadPersistent<>s.


Review-Url: https://codereview.chromium.org/2702243003
Cr-Commit-Position: refs/heads/master@{#451753}
Gracefully handle navigator.getVRDisplays() in detached contexts.

Review-Url: https://codereview.chromium.org/2703283003
Cr-Commit-Position: refs/heads/master@{#451734}
Simplify MediaStreamAudioSourceNode ownerships.
The processing that happens on the audio thread for this object
doesn't access the MediaStream. Hence the reference to it and the
track can be kept directly on the node object, thereby avoiding the
use of a pair of Persistent<>s.


Review-Url: https://codereview.chromium.org/2699403002
Cr-Commit-Position: refs/heads/master@{#451726}
Make Editor::findEventTargetFrom() to align Clipboard API specification
This patch changes |Editor::findEventTargetFrom()| to return focused element if
selection start is not editable to align Clipboard API specification[1] for
improving interoperability.

[1] https://w3c.github.io/clipboard-apis/#to-fire-a-clipboard-event

TEST=webkit_unittests --gtest_filter=ClipboardEventFlowTest.*

Review-Url: https://codereview.chromium.org/2685723005
Cr-Commit-Position: refs/heads/master@{#451716}
Rewrite svg/zoom/page/zoom-get-screen-ctm.html to use testharness
In preparation for some future tweaks to this test.


Review-Url: https://codereview.chromium.org/2708493003
Cr-Commit-Position: refs/heads/master@{#451657}
Remove unused processedBlocks variable.

Review-Url: https://codereview.chromium.org/2702233003
Cr-Commit-Position: refs/heads/master@{#451651}
Disable flaky compositing/reflections/nested-reflection-* tests
The following two tests appear to produce slightly different results
(different offsets?) somewhat randomly:



Review-Url: https://codereview.chromium.org/2702343002
Cr-Commit-Position: refs/heads/master@{#451635}
Removed dated Persistent<>::checkPointer() assert.
Remove the ASan-only verification that a Persistent<> refers to a heap
object. Static asserts will ensure that Persistent<T> is only instantiated
for GCed types, so this verification adds little extra value.


Review-Url: https://codereview.chromium.org/2701273002
Cr-Commit-Position: refs/heads/master@{#451580}
Invalidate custom pseudo elements for RuleSet invalidations.
When we have selectors containing custom pseudo elements matching
elements inside the UA shadow, and no id, class, or attribute selectors
present, do like we do for type selectors and invalidate as part of an
invalidation set scheduled on the root node of the tree scope for
RuleSet invalidations.

We utilize the same invalidation set as for type invalidations and mark
it as invalidating custom pseudo elements as well as marking it as
tree-boundary-crossing to allow drilling into the UA shadow.

This means we will traverse into all shadow sub-trees, but it should at
least be better than the existing recalc all behavior.

The full recalc for custom pseudo elements caused a full recalc for one
of the stylesheets on facebook.com.


Review-Url: https://codereview.chromium.org/2700943003
Cr-Commit-Position: refs/heads/master@{#451578}
Add out-of-flow objects under the inline in a continuation chain, when possible.
The same goes for floating objects. Only when a floating or out-of-flow
positioned object is to be added between two block-level children should we add
it to the anonymous block box holding the block-level children. If the new
child is to be added before a block-level child, and this beforeChild is the
first block-level child, we should rather make the new child the last child of
the preceding inline, rather than the first child of the anonymous block
containing block-level children.

Also cleaned up and documented the code somewhat.


Review-Url: https://codereview.chromium.org/2698243002
Cr-Commit-Position: refs/heads/master@{#451525}
Schedule a type selector invalidation set for RuleSet invalidations.
We marked all elements which had a selector in the tagRules bucket for
style recalc for RuleSet invalidations. That means we would recalculate
style for all spans if we added a stylesheet containing a rule with an
"#id span" selector (but not for "#id span.class" as that ends up in
the classRules bucket).

Instead, use an invalidation set containing only tag names for the
selectors where there are no ids, classes, or attribute selectors, and
which have a type selector in the rightmost compound. This means that
"#id span" will not add "span" to that set, but "span" and "div span"
will. "div span" will not add "div", and "div *" will cause a full
scope recalc. In order to support invalidation for those, we would have
had to have one invalidation set for each tag name instead of a single
descendant invalidation set for all.

RuleSet invalidations schedule this typeRuleInvalidationSet on the root
of the TreeScope When doing ruleset invalidations.


Review-Url: https://codereview.chromium.org/2703643003
Cr-Commit-Position: refs/heads/master@{#451488}
Use unique id's in svg/filters/feBlend-all-modes.html
The same id's would be reused in all the three groups (color
combinations.) Add the group index to the id's to avoid this.


Review-Url: https://codereview.chromium.org/2703803003
Cr-Commit-Position: refs/heads/master@{#451483}
Avoid over-eager clipping of child layers in multicol.
Self-painting layers (caused by e.g. position:relative) don't contribute to
visual overflow in their parent layout object; see
LayoutBox::addOverflowFromChild(). We cannot use the visual overflow rectangle
set on the flow thread when calculating the bounding box of a fragment
established by a child layer.

Therefore, only clip in the flow thread's block direction in
overflowRectForFlowThreadPortion(), and leave the inline axis alone. I
simplified the implementation, since it's now way easier to start with an
infinite rectangle, and just limit the dimensions that need it afterwards.

Also got rid of an old check for hasOverflowClip(), which must have been
residue from the CSS regions implementation.

This also happened to fix some inaccuracies mostly invisible to the naked
eye, when it comes to transform:scale()d text with glyphs that have negative
left bearing or overflow the line box vertically. It looks like we measure and
lay out with the CSS computed font, and then switch to a scaled font when
painting, so that it looks crisp and nice. This may result in tiny
inaccuracies in the bounding box of the text, and
fast/borders/border-antialiasing.html exhibited this, and had to be
rebaselined. Added fast/multicol/scale-transform-text.html to better
demonstrate what we're fixing.

paint/invalidation/multicol-with-relpos.html also had to be rebaselined,
since it turns out that it has never painted its stuff correctly until now.


Review-Url: https://codereview.chromium.org/2699653002
Cr-Commit-Position: refs/heads/master@{#451376}
Remove stray method declaration in RuleFeatureSet.
Review-Url: https://codereview.chromium.org/2703693002
Cr-Commit-Position: refs/heads/master@{#451307}
Tidy DEFINE_(THREAD_SAFE_)STATIC_LOCAL() implementations.
Move the handling of static local singletons into the
WTF::StaticSingleton<T> wrapper class, including the "same thread"
debug verification.

Use it to also implement the "thread safe" variant also, which can
now be done in a straightforward manner after issue 686866 enabled
C++ thread safe statics.


Review-Url: https://codereview.chromium.org/2680843006
Cr-Commit-Position: refs/heads/master@{#451305}
Don't keep pointers to table sections when told to recalculate sections.
They may have been deleted.

We should ideally assert in header(), footer() and firstBody() in LayoutTable
that we're not waiting for a section recalc, but that's currently failing in one
trybot; see crbug.com/693212

This would have fixed the original use-after-free issue with bug 680224, but
before this CL landed, I found another fix that attacked the root cause instead.
Still no point in keeping potentially dead pointers around, though.


Review-Url: https://codereview.chromium.org/2636153002
Cr-Commit-Position: refs/heads/master@{#451257}
Add type selector invalidation set for ruleset invalidations.
We currently look at RuleSet::tagRules() to figure out if an element
needs a style recalc when adding a stylesheet. This recalculates too
much for rules like "#id span" which ends up in the tagRules bucket,
causing style recalcs for every span. The plan is to use an
m_typeRuleInvalidationSet which contains the tag names for rules which
don't contain other simple selectors which have associated invalidation

For instance, "#id span" will not add span to m_typeRuleInvalidationSet
since we can rely on the invalidation set for #id to invalidate spans.
However, "span" or "div span" will add span to that set.

This CL prepares for this by introducing the set and a way to collect
it. This new set will be scheduled on the root node of the TreeScope
when adding/removing a stylesheet. We did not support scheduling
invalidation sets on the document node, so this CL adds that
possibility as well.


Review-Url: https://codereview.chromium.org/2699883002
Cr-Commit-Position: refs/heads/master@{#451170}
document.lastModified: treat invalid dates like unknown ones.
If the value supplied via Last-Modified: is unparseable, treat the
modification date as unknown and return the current time (rather than
00-00-0000 00:00:00)

This aligns behavior with all other browsers.


Review-Url: https://codereview.chromium.org/2698773005
Cr-Commit-Position: refs/heads/master@{#451123}
Remove unused blink_gc_plugin_flags.py script.
Became unused with GN, now safe to remove.


Review-Url: https://codereview.chromium.org/2691943009
Cr-Commit-Position: refs/heads/master@{#451056}
Less code duplication in PaintLayer::collectFragments()

Review-Url: https://codereview.chromium.org/2691303004
Cr-Commit-Position: refs/heads/master@{#450737}
Don't clear 'web animations dirty' flag if we have no rare data
If an SVGElement has an instantiated ElementAnimations object and
animation time has progressed, but no actual animation has been applied
(and hence no SVGElementRareData has been created), we don't need to
clear the dirty bit in the rare data.
The initial trigger for this seems to be the Element.computedName
implementation for a detached node, which tries to compute style in
this case, triggering a DCHECK in Node::containingTreeScope when doing


Review-Url: https://codereview.chromium.org/2689713003
Cr-Commit-Position: refs/heads/master@{#450689}
Reorder setting of zooming, to prevent reflowing and size mismatch.
When zooming is applied to the document, the color suggestion picker can lose
or gain bottom pixels, which causes missing borders or rendering artifacts.

This appears to be caused by some unfortunate assumptions and interactions
in Source/web/resources/colorSuggestionPicker.js and friends.

The color picker is a separate window, and the contents of the window is
generated in ColorChooserPopupUIController.cpp.  colorSuggestionPicker.js
resizes the window to exactly fit the content, but the zoom factor is applied
afterwards, causing an additional reflow (see WebPagePopupImpl.cpp:329).
There is no guarantee that the zoomed contents will fit the window any more,
and much of the time it doesn't.

By setting zoom factor before forcing layout, the final size is reached the first
time around, and the window size should be correct.


Review-Url: https://codereview.chromium.org/2695723002
Cr-Commit-Position: refs/heads/master@{#450513}
Actually delegate in additional FilterEffectBuilder constructor
Because url(...) filters are ignored/dropped this will not have any
practical effect, but could avoid issues in the future.


Review-Url: https://codereview.chromium.org/2692883003
Cr-Commit-Position: refs/heads/master@{#450374}
Remove unused includes of SVGDocumentExtensions.h
Review-Url: https://codereview.chromium.org/2696803002
Cr-Commit-Position: refs/heads/master@{#450334}
ColumnBalancer: need to examine lines that protrude into the flow thread portion.
We cannot skip a line that starts before the flow thread portion of interest,
if it ends inside the portion.

Some extra care is needed to avoid regressions here: The part of a line that
starts before the multicol container itself needs to be ignored, or we risk
overstretching the multicol container.


Review-Url: https://codereview.chromium.org/2690863003
Cr-Commit-Position: refs/heads/master@{#450033}
Support subpixel layout of borders.
This cl implements subpixel layout of borders.  Painting of subpixel
borders now uses rounding to nearest CSS pixel, and is aligned with
Edge.  Handling of device pixel ratios > 1 isn't implemented here,
and is better covered in a separate task.

This does not implement subpixel borders for tables, as that interacts
with table layout width calculations, which would also need to be
adapted to subpixels.  Again, that's better dealt with in a separate

A number of test cases had to be rebaselined, due to minor changes in
layout and/or painting.  Most of these changes appear in tests that uses
zooming, and implicitly have fractional borders.

svg/zoom/page/zoom-replaced-intrinsic-ratio-001.htm now looks a bit
broken, but that's due to an unrelated issue with aspect ratio and
subpixels (in LayoutPart, if I recall correctly).


Review-Url: https://codereview.chromium.org/2640143005
Cr-Commit-Position: refs/heads/master@{#449943}
Fix partition_alloc unit tests.
BUG=691197, 684513

Review-Url: https://codereview.chromium.org/2689103002
Cr-Commit-Position: refs/heads/master@{#449892}
Tie DragState to DragController.
Clarify ownership & scope of DragState and have the page's
DragController own it.


Review-Url: https://codereview.chromium.org/2687193004
Cr-Commit-Position: refs/heads/master@{#449889}
Remove TextTrack.regions and VTTRegionList
Removed from the WebVTT spec https://github.com/w3c/webvtt/pull/31

Because we no longer need to track a list of regions in TextTrack, we
can also remove all the plumbing between the parser and the (loadable)


Review-Url: https://codereview.chromium.org/2685943004
Cr-Commit-Position: refs/heads/master@{#449791}
Various cleanups in VTTRegion
 * Eliminate single-use pseudo-id functions (and associated statics)

 * Avoid redundant calls to getBoundingClientRect, and use
   ClientRect::height where appropriate.

 * Allow using ElementTraversal::childrenOf in
   VTTRegion::displayLastVTTCueBox by putting a break after

 * Get rid of VTTRegion::m_settings and updateParametersFromRegion
   (they are not used.)

 * Replace 'long' with 'int' for lines, because that matches the
   WebIDL type better.

 * Remove unused includes (add more specific ones when needed.)

Review-Url: https://codereview.chromium.org/2689703002
Cr-Commit-Position: refs/heads/master@{#449790}
Specify orphans:1 and widows:1 in old multicol test.
The test and the ref rendered identically, but it didn't look as asserted by
the textual pass condition.

Review-Url: https://codereview.chromium.org/2692453002
Cr-Commit-Position: refs/heads/master@{#449637}
Implement VTTCue.region and sync the VTTRegion interface
This CL implements the VTTCue.region property, replacing 'regionId'. The
main implementation mechanism is a new map in VTTParser that tracks the
regions currently seen.

Rewrite the region parser test to be based on cues rather than the list
of regions. This will ease the removal of TextTrack.regions.

Sync the VTTRegion with the current spec by

 * renaming the 'height' property to 'lines',

 * adding and using the ScrollSetting IDL enumeration type and

 * dropping the 'id' and 'track' properties.

Update tests as needed to match the above changes.


Review-Url: https://codereview.chromium.org/2682333002
Cr-Commit-Position: refs/heads/master@{#449589}
Prevent icf/comdat folding for OOM_CRASH() entry points.
We have various OOM-failure entry points which call OOM_CRASH() but
not much more. These are all NO/NEVER_INLINEd, but that isn't sufficient
to prevent the linker from common'ing up these identical functions
(see associated bug for an example), leading to confused crash stacks.

Avoid invasive linker optimization by adopting r306650 to OOM_CRASH().


Review-Url: https://codereview.chromium.org/2683033008
Cr-Commit-Position: refs/heads/master@{#449582}
Move VisitorMarkingMode into Visitor.
Move this enum back into Visitor where it better belongs; recent
simplifications to the marking visitor implementation class types
makes that a trivial exercise.


Review-Url: https://codereview.chromium.org/2688083002
Cr-Commit-Position: refs/heads/master@{#449568}
Stay within the containing block when looking for a line to dirty.

Review-Url: https://codereview.chromium.org/2686913002
Cr-Commit-Position: refs/heads/master@{#449237}
Remove TextTrack.{add,remove}Region
Removed from the spec by https://github.com/w3c/webvtt/pull/31


Review-Url: https://codereview.chromium.org/2684993003
Cr-Commit-Position: refs/heads/master@{#449140}
blink_gc_plugin: warn of unused trace methods to stack allocated classes.
A STACK_ALLOCATED()-annotated class does not need a trace method; issue
a warning if encountered.


Review-Url: https://codereview.chromium.org/2685583002
Cr-Commit-Position: refs/heads/master@{#449046}
SVGTransformList.consolidate() should return null on an empty list
SVGTransformList.consolidate() returns an SVGTransform with type
"unknown", which is an invalid object that other parts of the code
couldn't cope with. The specification:


say that 'null' should be returned in this case though, so do that

Rewrite svg/dom/SVGTransformList-empty-list-consolidation.html to use
actually assert this part of the contract, and also convert it use
testharness.js while at it.

BUG=688306, 688303

Review-Url: https://codereview.chromium.org/2681803004
Cr-Commit-Position: refs/heads/master@{#448994}
Clear MatchedPropertiesCache on StyleRule changes.
CSSOM changes used to cause a FullStyleUpdate which cleared the whole
StyleResolver. With the new active stylesheet update using RuleSet-
based style invalidation, clearing the MatchedPropertiesCache was
missing. The reason it needs to be cleared, is that the hash key for
the cache entry is based on StylePropertySet pointers which don't
change when adding/removing declarations to a mutable StylePropertySet.


Review-Url: https://codereview.chromium.org/2679623002
Cr-Commit-Position: refs/heads/master@{#448939}
blink_gc_plugin: report illegal on-heap iterators as warnings/errors.
Fix classification bug, when encountered this should be reported as a
warning/error, not as a supplementary note.


Review-Url: https://codereview.chromium.org/2681753002
Cr-Commit-Position: refs/heads/master@{#448932}
Remove faulty assertion in LayoutSVGResourceContainer::registerResource
When notifying pending elements we don't know what resource type the
registration is for, so it's entirely plausible that the resource type
is one that a possible client isn't really interested in (like a 'mask'
ending up pointing to a <filter>, like in this particular case.)


Review-Url: https://codereview.chromium.org/2680683003
Cr-Commit-Position: refs/heads/master@{#448688}
Remove trace() methods for stack-only classes.
A class annotated with STACK_ALLOCATED() does not require a trace
method, as its heap references are reachable and kept alive by virtue
of being on the stack, should any conservative GC go ahead.


Review-Url: https://codereview.chromium.org/2685563002
Cr-Commit-Position: refs/heads/master@{#448627}
Track constant InputDeviceCapabilities objects per-window.
Do not keep global main thread Persistent<>s for the two
constant InputDeviceCapabilities objects, as that will
end up sharing wrapper objects across contexts.


Review-Url: https://codereview.chromium.org/2675793005
Cr-Commit-Position: refs/heads/master@{#448597}
Out-of-line trace() methods of editing template types.
With a simpler trace method infrastructure in place, we
can now define trace methods of the editing templates


Review-Url: https://codereview.chromium.org/2672413003
Cr-Commit-Position: refs/heads/master@{#448563}
Add missing documentation for Allocator.h macros + EAGERLY_FINALIZE().

Review-Url: https://codereview.chromium.org/2672273002
Cr-Commit-Position: refs/heads/master@{#448234}
Have SubframeLoadingDisabler singleton live off-heap.
Primarily to diagnose potential heap corruption, keep
track of the disabled set off-heap. The untraced references
added aren't unsafe, as they are all stack-reachable by


Review-Url: https://codereview.chromium.org/2667853006
Cr-Commit-Position: refs/heads/master@{#447682}
Disallow sequences with lengths exceeding max allocation supported.
Vector backing stores are limited in size by the maximum allowed by
their allocator. When converting incoming IDL sequence types into
native arrays, check if the requested size exceed that max limit and
throw a TypeError(), if needed.

Only pathological inputs will run up against this limit and exception.


Review-Url: https://codereview.chromium.org/2657173002
Cr-Commit-Position: refs/heads/master@{#447466}
Remove unused declarations of pageLogicalHeight.

Review-Url: https://codereview.chromium.org/2664063003
Cr-Commit-Position: refs/heads/master@{#447323}
Change HeapCompaction feature status to stable.

Review-Url: https://codereview.chromium.org/2653413002
Cr-Commit-Position: refs/heads/master@{#447248}
Chromium doesn't compile with -Wglobal-constructors
We compile chromium with clang flag -Wglobal-constructors in our
project. We have following compilation error during compilation
of user_input_tracker.cc:

error: declaration requires a global constructor [-Werror,-Wglobal-constructors]
const int kRateLimitClampMillis = (kOldestAllowedEventAgeSeconds * 1000) /

In order to get rid of this global constructor I recommend to declare
static class variable UserInputTracker::kMaxTrackedEvents and global
variable kRateLimitClampMillis as constexpr which will be expanded to
numerical value during compilation.


Review-Url: https://codereview.chromium.org/2662803002
Cr-Commit-Position: refs/heads/master@{#447000}
Tidy generated toMemberNativeArray<>() invocations.

Review-Url: https://codereview.chromium.org/2654143006
Cr-Commit-Position: refs/heads/master@{#446662}
Cleanly detach XHR and other pending loader clients from Inspector.
If the XHR object is finalized without first being notified of
ExecutionContext destruction, its prefinalizer is responsible for making
up the difference and behave as if that did.

Do so by delegating to contextDestroyed(); this takes care of
releasing its resources promptly, along with unregistering as
a loader client (with its associated async loader and Inspector.)

Also make other Inspector loading clients cleanly detach when
finalized; prevents Inspector from keeping dead raw pointers to them.


Review-Url: https://codereview.chromium.org/2649323005
Cr-Commit-Position: refs/heads/master@{#446660}
Don't paint selections in <mask>s, <clipPath>s and <pattern>s
Painting a selection within a <mask>, <clipPath> or <pattern> can
trigger a client "style change" to update the resource cache with
whatever the selection style refers to. This "style change" signal will
trigger a layout on the resource's clients while painting.
Since painting selections within these types of resources, add a
PaintLayerFlag and use it to disable selection painting in these cases.
Include the painting of elements references from feImage as well under
the same umbrella.


Review-Url: https://codereview.chromium.org/2648343004
Cr-Commit-Position: refs/heads/master@{#446318}
Remove trace frame template specialization.
More tidying after r445993, only one instantiation of these method


Review-Url: https://codereview.chromium.org/2654243002
Cr-Commit-Position: refs/heads/master@{#446302}
Float32ImageData, PerformanceObserver: no finalization needed.

Review-Url: https://codereview.chromium.org/2652393002
Cr-Commit-Position: refs/heads/master@{#446289}
Emit trace(Visitor*) rather than a templated trace().
One trace() method will now suffice, simplify generated code.


Review-Url: https://codereview.chromium.org/2653153003
Cr-Commit-Position: refs/heads/master@{#446262}
blink_gc_plugin: retire overloaded traceImpl detection and handling.
With the specialized InlineGlobalMarkingVisitor gone (r445993), Blink no
longer use a templated traceImpl() method for its trace methods. Follow
up and remove the checks for it in the GC plugin.


Review-Url: https://codereview.chromium.org/2655933002
Cr-Commit-Position: refs/heads/master@{#446137}
Return ActiveSheetsChanged when rulesets change in common prefix.
When comparing old and new active sheets, we only append the added
sheets to the ScopedStyleResolver if the old sheet vector is a prefix
of the new sheets. However, that's not correct if any of the RuleSets
in the common prefix changed due to media query changes or cssom
modifications of a stylesheet.

I can confirm that this fixes 681472. The other two issues in the BUG
field look like duplicates, but I've not been able to reproduce them.


Review-Url: https://codereview.chromium.org/2650743002
Cr-Commit-Position: refs/heads/master@{#446008}
Revert of Add null check to animations for registered custom property initial values (patchset #2 id:20001 of https://codereview.chromium.org/2649863006/ )
Reason for revert:
This goes together with the revert https://codereview.chromium.org/2649103008/ ; looks like the two CLs didn't match up,


(Hope the double revert doesn't cause too much work.)

Original issue's description:
> Add null check to animations for registered custom property initial values
> After a recent change to CSSInterpolationType for registered custom properties
> it was assumed that all registered custom properties had initial CSSValues.
> This is not the case and null derefs were reachable. This patch fixes up
> the false assumption.
> BUG=684234
> Review-Url: https://codereview.chromium.org/2649863006
> Cr-Commit-Position: refs/heads/master@{#445969}
> Committed: https://chromium.googlesource.com/chromium/src/+/f2ec8922cbe5f632a937cf242faf5f23c0d1b3ff

# Skipping CQ checks because original CL landed less than 1 days ago.

Review-Url: https://codereview.chromium.org/2650403002
Cr-Commit-Position: refs/heads/master@{#445996}
Revert of Add smooth interpolation support for <color> custom properties (patchset #5 id:80001 of https://codereview.chromium.org/2564793002/ )
Reason for revert:
Added test is seen failing on the bots, e.g.,


Original issue's description:
> Add smooth interpolation support for <color> custom properties
> This change enables smooth interpolation for animations on
> custom properties registered as <color>.
> This does not add support for CSS Transitions, only CSS
> Animations and Web Animations.
> This does not add support for currentcolor for CSS Animations,
> supporting this may require further redesigns to style resolution.
> BUG=671904
> Review-Url: https://codereview.chromium.org/2564793002
> Cr-Commit-Position: refs/heads/master@{#445967}
> Committed: https://chromium.googlesource.com/chromium/src/+/96bee2c42c8df73523e971850215d29d1c40c15f

# Skipping CQ checks because original CL landed less than 1 days ago.

Review-Url: https://codereview.chromium.org/2649103008
Cr-Commit-Position: refs/heads/master@{#445994}
Devirtualize Visitor and remove inline visitor specialization.
The Blink GC infrastructure requires its managed objects to provide
a "trace()" method which will visit all the heap references it keeps
into the Blink GC heap, by calling the "trace()" method on each of
these via an incoming |visitor| argument (a Visitor.)

The Visitor interface is really only used for that, i.e., to perform GC
marking, so the flexibility it provides by way of overridable virtual
methods, is unused. And it slows down the GC marking phase, something
the specialized "inline visitor" (InlineGlobalMarkingVisitor) demonstrated,
which devirtualized the mark() method, with noticable improvements to
overall GC marking times.

Given that and Visitor's use, devirtualize Visitor entirely and make
it a GC marking visitor and nothing else. Besides removing code complexity,
this also allows the removal of InlineGlobalMarkingVisitor along with
all the specialized trace() implementation methods that we emit for each
Blink GC managed object.

Performance numbers show a ~10% improvement on marking times for
oilpan_gc_times.{tough_animation_cases, blink_perf_stress}; code size
(Android(ARM) official build, content shell) is 180k less.


Review-Url: https://codereview.chromium.org/2652923002
Cr-Commit-Position: refs/heads/master@{#445993}
Don't "repack" parameters in SVGElement::attributeChanged
Instead of making a AttributeModificationParams which always uses the
"directly" modification reason, just forward the original reason.
The 'reason' argument was added by [1] which did not indicate why SVG
elements would be subject to different treatment than regular elements.

[1] https://codereview.chromium.org/14234005

Review-Url: https://codereview.chromium.org/2652653002
Cr-Commit-Position: refs/heads/master@{#445698}
Merge list of orthogonal writing mode roots into depth-ordered layout list.
If we're going to perform a series of subtree layouts, rather than one layout
from LayoutView, and we at the same time have a list of orthogonal writing mode
roots that need to be laid out before their ancestors, we need to make sure
that subtrees are laid out in an overall tree depth ordered manner, or we risk
skipping layout of a subtree needing layout. That would cause trouble for the
column balancer (which examines the tree after layout and expects everything to
be laid out), and quite possibly other kinds of trouble elsewhere too.


Review-Url: https://codereview.chromium.org/2635143003
Cr-Commit-Position: refs/heads/master@{#445497}
Don't cancel out scroll offset when calculating the clip rectangle for multicol.
We still want the clip rect to be relative to the multicol container, but we
cannot get there by using the location() of the flow thread's PaintLayer,
because then we'll then cancel out the scroll offset that's also baked into

This CL will cause paint/invalidation/paged-with-overflowing-block-rl.html to
regress, but it turned out that it just passed by accident anyway. Having that
test broken is way less serious than barely being able to scroll at all in a
regular multicol container.


Review-Url: https://codereview.chromium.org/2643123004
Cr-Commit-Position: refs/heads/master@{#445478}
Move 'id'-related invalidation to SVGElement::attributeChanged
There's no reason for 'id'-related invalidation to reside in
SVGElement::svgAttributeChanged since it has no interaction with an
(animated) SVG DOM attribute. Move it to SVGElement::attributeChanged
This will also enable us to make use of the old/new value that is
available in attributeChanged().


Review-Url: https://codereview.chromium.org/2645383002
Cr-Commit-Position: refs/heads/master@{#445393}
SVG objects with same idrefs conflict when under different shadow root
When SVG idrefs are the same, even though the
LayoutSVGResourcesContainers are created under different shadow roots,
they conflict and only the last one is available. The problem is that,
currently, the HashMap mapping id's to LayoutSVGResourcesContainers are
owned/scoped to the document instead of the treeScope.
This CL moves that hash map from document to treeScope, so that
LayoutSVGResourcesContainers with the same id in different shadow roots
won't conflict.

Currently the following 2 maps (which are wrapped into the
SVGDocumentExtensions class) are owned by document instead of treeScope:

  HashMap<AtomicString, LayoutSVGResourceContainer*> m_resources;
  HeapHashMap<AtomicString, Member<SVGPendingElements>> m_pendingResources;

Thus when a new LayoutSVGResourcesContainer with the same id is created,
it is inserted into m_resources and overwrites the one with the same
key (id).

This CL separates these 2 maps from SVGDocumentExtensions and wrap them
into a new class (named SVGTreeScopeResources), and lets TreeScope have
them as a member variable (m_svgTreeScopedResources).
This CL also moves the corresponding methods accessing these 2 maps into
the new class.

To make this work together with <use>, we need to make sure to use the
TreeScope of the "original" element. Move the helper from LayoutSVGTextPath
to SVGElement::treeScopeForIdResolution and then use that for this.

Based on https://codereview.chromium.org/2107153002 by Taijin Tei.


Review-Url: https://codereview.chromium.org/2633143002
Cr-Commit-Position: refs/heads/master@{#445378}
PaymentApp: Implement invokePaymentApp for Android
This change implements the
ServiceWorkerPaymentAppBridge.invokePaymentApp() function along with the
corresponding native InvokePaymentApp() function.

The signature of PaymentInstrument.invokePaymentApp() has also been
changed to add the payment details modifiers field, and to align the
ordering and naming of the arguments with the definition of the
PaymentAppRequest dictionary in the specification:



Review-Url: https://codereview.chromium.org/2640743005
Cr-Commit-Position: refs/heads/master@{#445301}
Disable g++ inlining of eager-tracing mark() method.
Versions of g++ (with -Os) are over-eager about inlining the mark()
method that's used for all non-mixin Oilpan objects, resulting in
a code size increase that's unwanted (for Android official builds.)
Other compilers and g++ (with -O2/-O3) are more discriminate about
inlining the method, with no comparable code size increase delta.

Tuning the compiler's optimization option set to avoid the problem
hasn't proven successful, so bluntly address the problem by disabling
inlining for the method.


Review-Url: https://codereview.chromium.org/2643403003
Cr-Commit-Position: refs/heads/master@{#445288}
Initially load new_tab.css with a timestamp for chrome://apps.
This is what incognito_tab.html already does. Changing the url to add a
timestamp query on DOMContentLoaded caused a FoUC.


Review-Url: https://codereview.chromium.org/2647653002
Cr-Commit-Position: refs/heads/master@{#445285}
Have VisitorHelper<> handle moving object registration.
As the registration of objects is only done by a compacting
GC, there isn't any need to be indirect about registering
them - remove a layer of Visitor virtual methods and have
the VisitorHelper<> do the registration directly.


Review-Url: https://codereview.chromium.org/2642933005
Cr-Commit-Position: refs/heads/master@{#445245}
Enable more unittests for BlueZ and ChromeOS.
This patch fixes an issue with the DBUS naming needed for the generic unittests.
This again made it possible to enable a couple of more tests for BlueZ and

Review-Url: https://codereview.chromium.org/2640883002
Cr-Commit-Position: refs/heads/master@{#445117}
'*' is not a valid attribute selector
Per the CSS Selectors specification [1], a '*' is not allowed as the
name of an attribute.

[1] https://drafts.csswg.org/selectors-4/#typedef-attribute-selector


Review-Url: https://codereview.chromium.org/2646493002
Cr-Commit-Position: refs/heads/master@{#445046}
Stop requiring a reader in MultibufferDataSource::SetBitrateTask()
Callers of MultibufferDataSource::SetBitrate() must not be required to
be aware of whether or not there is a |reader_| available, because
that's internal MultibufferDataSource state that changes for several
reasons, some of which aren't necessarily visible to the client calling
SetBitrate(), e.g., OnBufferingHaveEnough().

Note that UpdateBufferSizes(), called from SetBitrate(), handles the
case of a null |reader_| gracefully.

Review-Url: https://codereview.chromium.org/2647483003
Cr-Commit-Position: refs/heads/master@{#444867}
Add SVGResources helper for resource-bounds invalidation
Add a new helper method removeClientFromCacheAffectingObjectBounds to
SVGResources to better describe the intention of code that performs this
operation (removeFromCacheAndInvalidateDependencies.) It also makes
LayoutSVGResourceContainer not depend on its derived classes.
Also make use of it in the generic SVGResources::removeClientFromCache.

Review-Url: https://codereview.chromium.org/2647443004
Cr-Commit-Position: refs/heads/master@{#444811}
Serialize type and attribute selectors as identifiers
Per [1], both the element name of a type selector and the attribute name
of an attribute selector - as well as their corresponding namespace
prefix (if any) - should be serialized as identifiers [2].

[1] https://drafts.csswg.org/cssom/#serialize-a-simple-selector
[2] https://drafts.csswg.org/cssom/#serialize-an-identifier


Review-Url: https://codereview.chromium.org/2645563002
Cr-Commit-Position: refs/heads/master@{#444766}
Adjust placement of non-compaction checks.
The registration of movable objects and their callbacks should be
ignored when running non-compaction GCs. Move the GC kind check one
level out.

At the same time, make these registration methods untyped -- the
Allocator interface for heap collections already provide a typed view,
so unnecessary to extend that one more level.


Review-Url: https://codereview.chromium.org/2645873002
Cr-Commit-Position: refs/heads/master@{#444760}
LocalFileSystem::deleteFileSystem() is no longer used.
This method stopped being used when DevTools retired
its FileSystem API support (crbug.com/588817); follow
through and remove the unused implementation.


Review-Url: https://codereview.chromium.org/2640963002
Cr-Commit-Position: refs/heads/master@{#444667}
[LayoutNG] Initial support for multicol, introducing NGBlockBreakToken.
We can now lay out block-level floats and in-flow blocks inside a multicol
container. Note that painting and hit testing doesn't work too well, since
those operations are still performed on the legacy LayoutObject tree, and
there's no way to fragment a LayoutObject.

No attempt has been made at integrating this with out-of-flow positioning or
inline-level layout.

Review-Url: https://codereview.chromium.org/2632523002
Cr-Commit-Position: refs/heads/master@{#444512}
Percent-width blocks cannot form a re-layout boundary.
A block with non-visible overflow can only form a re-layout boundary if both
width and height are fixed.

The block may be inside a shrink-to-fit container (there's no cheap and
reliable way to detect that), so that changes inside it may affect its width.


Review-Url: https://codereview.chromium.org/2643703002
Cr-Commit-Position: refs/heads/master@{#444467}
Split svg/dom/transform-parser.html
This CL splits the mentioned test into two to alleviate the potential
for test timeouts.
The bulk of the test is moved to a JS file, and the js-test dependency
is dropped since the only useful output of this test is the console log
The TestExpectations entry is dropped.


Review-Url: https://codereview.chromium.org/2646503002
Cr-Commit-Position: refs/heads/master@{#444418}
Leave out empty-valued Access-Control-Request-Headers: on preflights.
Following https://github.com/whatwg/fetch/issues/459 , the above
preflight header should not be included if the request following CORS
has no headers to enumerate in a preflight.


Review-Url: https://codereview.chromium.org/2633423003
Cr-Commit-Position: refs/heads/master@{#444303}
Resolve CSS url(...) non-<image> values against the correct base
In an external stylesheet, the url(...) should resolve against the URL of
the stylesheet. We were always resolving against the document base URL,
meaning that 'filter' url(...)'s referencing external files could resolve
to the wrong URL.
Besides this, add a more generic mechanism to determine whether a CSSValue
contains a URL (and hence may need to be re-resolved if it's within an
inline style declaration, and it's context element is moved to a different
Also adjust the <canvas> 'filter' implementation to resolve against the
elements document when applicable.


Review-Url: https://codereview.chromium.org/2625873010
Cr-Commit-Position: refs/heads/master@{#444179}
Split renderer.lib on Windows to avoid files larger than 2GB.
In certain configurations renderer.lib can exceed 2GB in size which is
too much for the 32 bit build tools. Splitting it avoids that problem.


Review-Url: https://codereview.chromium.org/2622583005
Cr-Commit-Position: refs/heads/master@{#444143}
Introduce LayoutObject::AncestorSkipInfo.
This replaces three optional parameters to container() and similar methods.

No behavioral changes intended.

Review-Url: https://codereview.chromium.org/2634493007
Cr-Commit-Position: refs/heads/master@{#444105}
Document::shutdown(): remove unnecessary static_cast<>.

Review-Url: https://codereview.chromium.org/2638883002
Cr-Commit-Position: refs/heads/master@{#444061}
Try to avoid working on zero-height column sets, when possible.
We may end up with an empty column set between two column spanners, if there is
zero-height column content "separating" them.

We typically have no business inside a zero-height column set, since
fragmentation is impossible there. Fragmentation requires a positive
fragmentainer block size to ensure content progression. So keep looking for a
column set that has a height, and use that one instead, as long as its flow
thread start offset is the same as the one we were requested to map to a
column set.


Review-Url: https://codereview.chromium.org/2631013002
Cr-Commit-Position: refs/heads/master@{#443998}
Do not initiate fetch() on a detached FetchManager.

Review-Url: https://codereview.chromium.org/2631153002
Cr-Commit-Position: refs/heads/master@{#443897}
Provide a CSSParserContext to CSSSyntaxDescriptor
Add a CSSParserContext* argument to CSSSyntaxDescriptor::parse to allow
CSSValues to be resolve against a proper parser context, and resolve
relative URLs and other sourcing sensitive data.
Provide parser contexts as available on call-sites, or use the
strictCSSParserContext() if none is available. Move the TODO up the
callstack as needed.


Review-Url: https://codereview.chromium.org/2632083002
Cr-Commit-Position: refs/heads/master@{#443882}
Remove PageVisibilityObserver contextDestroyed() notifications.
PageVisibilityObserver allows a Page's lifetime states to be
observed, but none of the observers need to be notified of Page

Adjust LifecycleNotifier<>::notifyContextDestroyed(), having it
call its corresponding LifecycleObserver's  contextDestroyed()
notification method if the observer implements it, but not require
that it does implement contextDestroyed(). With that in place,
only have the lifecycle observers that need a contextDestroyed()
notification (all but PageVisibilityObserver) declare it.

This allows the removal of all the empty
PageVisibilityObserver::contextDestroyed() overrides.


Review-Url: https://codereview.chromium.org/2634713002
Cr-Commit-Position: refs/heads/master@{#443816}
Fixed google::FindSymbol reading past end of a section
The symbol reading logic of google::FindSymbol was reading symbols in
blocks of N, not accounting for that a section might not have a multiple
of N symbols in it.

This makes it read in blocks of N or the number of symbols remaining,
whichever is smallest.


Review-Url: https://codereview.chromium.org/2566623003
Cr-Commit-Position: refs/heads/master@{#443571}
bluetooth: bluez: Fixed issue with missing notifications after reconnect.

Review-Url: https://codereview.chromium.org/2625013003
Cr-Commit-Position: refs/heads/master@{#443451}
Simplify visitor marking mode tracking.
Move the marking mode to VisitorHelper<>, so that
both Visitor and InlinedGlobalMarkingVisitor can access
and reuse it.

In order to do so, hoist out Visitor::MarkingMode as an
enum class.


Review-Url: https://codereview.chromium.org/2625363002
Cr-Commit-Position: refs/heads/master@{#443444}
Look for favicon URLs (and similar <link>s) in SVG documents
Previously we were only looking for <link>s with icons within <head>,
and since SVG document don't have those, no icons would be found.
Instead, for SVG documents (with a root/document element of <svg>), just
collect all <link> (HTMLLinkElement) elements, regardless of position in
the document, using a pre-order traversal. This appears to match the
behavior of Gecko.


Review-Url: https://codereview.chromium.org/2628873003
Cr-Commit-Position: refs/heads/master@{#443336}
Revert ExtendableMessageEvent same heap verification.
Revert r440390's debug instrumentation of ExtendableMessageEvent.


Review-Url: https://codereview.chromium.org/2623273004
Cr-Commit-Position: refs/heads/master@{#443299}
[LayoutNG] Make NGLayoutInputNode::AlgorithmForInputNode() more readable.
Use early returns and variables to avoid unwanted line breaks in statements.

Review-Url: https://codereview.chromium.org/2631513002
Cr-Commit-Position: refs/heads/master@{#443284}
[LayoutNG] Put #includes in alphabetical order.
Review-Url: https://codereview.chromium.org/2623423003
Cr-Commit-Position: refs/heads/master@{#443279}
Revert "Verify that FetchEvent::m_request holds same-thread reference."
Undo r440475's temporary use of SameThreadCheckedMember<>.


Review-Url: https://codereview.chromium.org/2629613002
Cr-Commit-Position: refs/heads/master@{#443257}
Try to do less work clearing the font-cache in StyleEngine::didDetach.
Clearing the whole font-cache without considering css-connected fonts
could be cheaper. This is a speculative fix for issue 677415.


Review-Url: https://codereview.chromium.org/2622673003
Cr-Commit-Position: refs/heads/master@{#443202}
Add missing url/gurl.h include
Functions declared in this file return GURL by value.


Review-Url: https://codereview.chromium.org/2627883003
Cr-Commit-Position: refs/heads/master@{#443187}
Add test for style 'transform' vs. presentation attribute 'transform'
The former should "win" over the latter.
Fixed by https://codereview.chromium.org/2478233002.


Review-Url: https://codereview.chromium.org/2621153005
Cr-Commit-Position: refs/heads/master@{#442980}
Update svg/wicd/test-rightsizing-b.xhtml Mac expectations
Less stale expectations (DRT format changes.)


Review-Url: https://codereview.chromium.org/2628893002
Cr-Commit-Position: refs/heads/master@{#442935}
Block animation of the SVGScriptElement
'href' should not be animatable for SVGScriptElements, but currently is.
This will "break" animation of 'className' on the same element.


Review-Url: https://codereview.chromium.org/2618323002
Cr-Commit-Position: refs/heads/master@{#442915}
Remove redefinitions of ExceptionCode.

Review-Url: https://codereview.chromium.org/2625053002
Cr-Commit-Position: refs/heads/master@{#442878}
Remove marking visitors' shouldMarkObject().
With per-thread heap handling being fully enabled, checking for any
cross-thread pointer marking (and not doing it), is no longer an issue.

Retire the should-mark predicate.


Review-Url: https://codereview.chromium.org/2617393004
Cr-Commit-Position: refs/heads/master@{#442554}
Drop MSVC pch warning avoidance.
Unable to reproduce the warning with VS2015; let's try to remove this
special case.


Review-Url: https://codereview.chromium.org/2621763002
Cr-Commit-Position: refs/heads/master@{#442368}
Handle repeated and overlapping (re)starts of mock speechrecognizer.

Review-Url: https://codereview.chromium.org/2617113002
Cr-Commit-Position: refs/heads/master@{#442337}
Added trace for scheduleInvalidationsForRuleSets.

Review-Url: https://codereview.chromium.org/2620673002
Cr-Commit-Position: refs/heads/master@{#442332}
Prefer ContextClient mixin over manual ExecutionContext handling.
The ContextClient mixin interface bundles up the safe handling of
references to ExecutionContexts. Prefer using it over keeping explicit
Member<ExecutionContext> references.


Review-Url: https://codereview.chromium.org/2622533002
Cr-Commit-Position: refs/heads/master@{#442250}
avoid GCC content::CacheStorage::kSizeUnknown redeclaration error
../../content/browser/cache_storage/cache_storage.cc:62:29: error: redeclaration 'content::CacheStorage::kSizeUnknown' differs in 'constexpr'


Review-Url: https://codereview.chromium.org/2607983002
Cr-Commit-Position: refs/heads/master@{#442242}
CrossOriginAccessControl: separate access checks and error message generation
The checking and construction of legible error messages can with benefit
be separated, having the security access checks return an error status
which then can be used to generate a suitable error message.

Along with separating the two, switch to using StringBuilders.


Review-Url: https://codereview.chromium.org/2616323002
Cr-Commit-Position: refs/heads/master@{#442236}
Add use_rtti gn arg to enable rtti globally in the build
Some sanitizer configs already enabled rtti, move the logic to the arg
default value to make experimenting easier. Can be useful when dealing
with some asan-instrumented build startup issued that may go away when
rtti is enabled globally, but don't fall into the existing enable-rtti

One example scenario I had was with a shared_library built with both rtti
and exceptions (in a downstream project) causing immediate asan failure
on startup around std::exception typeinfo alignment. Rebuilding with
rtti enabled globally made things work, so it helps if that's possible
with just a gn arg.

Note that targets that need rtti to be not disabled regardless of global
settings (e.g. third party libraries like icu that need rtti to build)
can still remove the //build/config/compiler:no_rtti config and add
//build/config/compiler:rtti in its place; this is unchanged.


Review-Url: https://codereview.chromium.org/2607903002
Cr-Commit-Position: refs/heads/master@{#442227}
Use setNeedsActiveStyleUpdate instead of markTreeScopeDirty.
setNeedsActiveStyleUpdate checks if the document is active before
calling markTreeScopeDirty. This avoids marking shadow root tree scopes
dirty for non-active documents which caused a DCHECK fail in


Review-Url: https://codereview.chromium.org/2611053004
Cr-Commit-Position: refs/heads/master@{#442028}
Enable type_traits fallback for all < gcc 5.0 releases.
Fixes compilation failures with various < gcc-5.0  toolchains lacking
std::is_trivially_copyable<T>. Without it, compile errors like

../../base/template_util.h:189:36: error: no type named 'is_trivially_copyable' in namespace 'std'
using is_trivially_copyable = std::is_trivially_copyable<T>;
../../base/template_util.h:189:57: error: expected ';' after alias declaration
using is_trivially_copyable = std::is_trivially_copyable<T>;
will be encountered.


Review-Url: https://codereview.chromium.org/2612933003
Cr-Commit-Position: refs/heads/master@{#441985}
Use master StyleEngine to evaluate MQ in html imports.
The StyleEngine for html import documents does not have a Frame which
means size media queries will always evaluate to true. We incorrectly
replaced a passed-in master document StyleEngine with the StyleEngine
from the DocumentStyleSheetCollection in https://crrev.com/90d4ea3d
That was wrong for evaluating media queries.


Review-Url: https://codereview.chromium.org/2618803002
Cr-Commit-Position: refs/heads/master@{#441899}
Added layout test for issue 318468.
Check that adding a type selector rule only invalidates elements with
that type.


Review-Url: https://codereview.chromium.org/2615713005
Cr-Commit-Position: refs/heads/master@{#441823}
Revert of Don't post multiple task for executing blocked scripts. (patchset #2 id:20001 of https://codereview.chromium.org/2609763002/ )
Reason for revert:
Regression in test for time to first meaningful paint: https://crbug.com/678584

Original issue's description:
> Don't post multiple task for executing blocked scripts.
> We may post a lot of tasks for executing blocked scripts in the case
> where we insert multiple shadow trees each containing a style element.
> When we start parsing a style element, we mark it as blocking and
> unblock script execution after finishing parsing. Check if the previous
> task is active before posting.
> Found while measuring performance for issue 603621.
> BUG=603621
> Committed: https://crrev.com/26cb3bdcd2a353402b78b716862567226317dff0
> Cr-Commit-Position: refs/heads/master@{#441110}

# Not skipping CQ checks because original CL landed more than 1 days ago.

Review-Url: https://codereview.chromium.org/2617763002
Cr-Commit-Position: refs/heads/master@{#441783}
eventTargetData(): pull (most of) this singleton off-heap.
Diagnose mutation of GCed object by pulling the collection
wrapper off heap also.


Review-Url: https://codereview.chromium.org/2616913002
Cr-Commit-Position: refs/heads/master@{#441668}
Need to clear viewport dependent units when switching print mode.
Switching between print and screen changes the size of the initial
containing block. Viewport dependent lengths need to be recalculated
and the cache for matched properties cleared.

Normally, notifyResizeForViewportUnits() is called from
performPreLayoutTasks when the initial containing block size changes.
That does not happen when laying out for printing and going back to
screen layout. We skip setting m_lastLayoutSize in
sendResizeEventIfNeeded. We probably do that to avoid triggering resize
events going back and forth between the print (preview) size.

Make sure we clear the matched properties cache from StyleResolver when
updating the media type.


Review-Url: https://codereview.chromium.org/2613733003
Cr-Commit-Position: refs/heads/master@{#441642}
Tidy up XMLHttpRequest::endLoading().

Review-Url: https://codereview.chromium.org/2610653002
Cr-Commit-Position: refs/heads/master@{#441618}
bluetooth: bluez: Implement BluetoothRemoteGattCharacteristicBluez::SubscribeToNotifications and UnsubscribeFromNotifications.

Review-Url: https://codereview.chromium.org/2613473002
Cr-Commit-Position: refs/heads/master@{#441456}
Simplify WorkerGlobalScope::m_eventListeners.
Switch to using a 'mere' HashSet<> for these event listeners. Mainly
done to diagnose GC instability, but removing the use of an involved
abstraction like HeapListHashSet<> is something wanted regardless.


Review-Url: https://codereview.chromium.org/2609413002
Cr-Commit-Position: refs/heads/master@{#441364}
Avoid unnecessary updateActiveStyle comparing shadow styles.
Found while checking performance for issue 603621.

Style sharing is done during style recalc at which point we know that
the active style is up-to-date. Instead of using the API for
document.styleSheets, compare active stylesheets in ScopedStyleResolver


Review-Url: https://codereview.chromium.org/2610513003
Cr-Commit-Position: refs/heads/master@{#441357}
Push attributeName handling down into SVGAnimateElement
SVGAnimateElement (and derived classes) is where 'attributeName' has any
meaning. Move setting/updating of the resolved 'attributeName' value
there. This allows setAttributeName to be devirtualized.
Storage is kept at the SVGSMILElement level because of how it's used at
schedule/unschedule time.


Review-Url: https://codereview.chromium.org/2602423002
Cr-Commit-Position: refs/heads/master@{#441356}
Enforce canCopyWithMemcpy constraint over TerminatedArray<T>.

Review-Url: https://codereview.chromium.org/2610113002
Cr-Commit-Position: refs/heads/master@{#441352}
Use ShadowData in DropShadowFilterOperation
This replaces the "open-coded" (and somewhat compacted) version of a
ShadowData structure within DropShadowFilterOperation with an actual
ShadowData. While this makes the structure slightly larger, it allows
for some additional code-reuse - mostly around style resolution. It's
also a first step against more correct handling of the 'currentcolor'
value within the drop-shadow(...) filter function.
There's a slight change in behavior since ShadowData stores the relevant
values as 'float' rather than as 'int' like the "open-coded" version.


Review-Url: https://codereview.chromium.org/2609803002
Cr-Commit-Position: refs/heads/master@{#441351}
Don't post multiple task for executing blocked scripts.
We may post a lot of tasks for executing blocked scripts in the case
where we insert multiple shadow trees each containing a style element.
When we start parsing a style element, we mark it as blocking and
unblock script execution after finishing parsing. Check if the previous
task is active before posting.

Found while measuring performance for issue 603621.


Review-Url: https://codereview.chromium.org/2609763002
Cr-Commit-Position: refs/heads/master@{#441110}
Always adjust container size when tracing HeapVectorBacking contents.

Review-Url: https://codereview.chromium.org/2602363002
Cr-Commit-Position: refs/heads/master@{#441107}
WindowAudioWorklet: gracefully handle detached use.

Review-Url: https://codereview.chromium.org/2607353002
Cr-Commit-Position: refs/heads/master@{#441094}
Add missing HeapCompact DCHECK().

Review-Url: https://codereview.chromium.org/2604403002
Cr-Commit-Position: refs/heads/master@{#441072}
No longer clean out main thread's heap for LSan's benefit.
The extra GCing that cleanupMainThread() appears to be redundant, as
LSan will have performed leak detection prior to the main thread shutting


Review-Url: https://codereview.chromium.org/2604413002
Cr-Commit-Position: refs/heads/master@{#441068}
Retire speechrecognition-restart-onend.html leak expectation.
No longer reported as leaking.


Review-Url: https://codereview.chromium.org/2603273002
Cr-Commit-Position: refs/heads/master@{#441066}
WorkerGlobalScope: verify same-heap event listeners.
To help narrow down failures during tracing of a WorkerGlobalScope's
event listeners, verify that the listeners added belong to the
same heap as the WorkerGlobalScope itself.


Review-Url: https://codereview.chromium.org/2608113002
Cr-Commit-Position: refs/heads/master@{#441058}
Remove ThreadState::callThreadShutdownHooks() declaration.
No longer provided and used.


Review-Url: https://codereview.chromium.org/2608933002
Cr-Commit-Position: refs/heads/master@{#441041}
Fix for building with ancient toolchain
At Opera we test our SDK on an old MIPS device with a
peculiar toolchain. To be able to compile ImageDocument.o,
we need to call std::round(), not just round().


Review-Url: https://codereview.chromium.org/2548783002
Cr-Commit-Position: refs/heads/master@{#440950}
PaymentApp: Implement nativeGetAllAppManifests
This change connects the ServiceWorkerPaymentAppBridge to the service
worker payment app code in content/browser/payments. This allows
installed service worker payment apps to show up in the Payment Request

I also replace "String scopeUrl" with "long registrationId" as the
identifier for service worker payment apps.

This code is protected by the kServiceWorkerPaymentApps feature flag.


Review-Url: https://codereview.chromium.org/2586213002
Cr-Commit-Position: refs/heads/master@{#440746}
Remove SVGAnimateElement::hasValidAttributeType
Incorporate said method into its only caller - hasValidTarget - and
override that one in SVGAnimateTransformElement instead.
Also fold animatedPropertyType() into hasValidTarget and get rid of
hasInvalidCSSAttributeType() in favor of "naked" access to the
underlying boolean flag.


Review-Url: https://codereview.chromium.org/2599853003
Cr-Commit-Position: refs/heads/master@{#440716}
Remove unwanted declaration of storage for NeedsAdjustAndMark<>.
This rolls back the change made in


We shouldn't have to do this if the class type has been fully
instantiated and "used". Traits used to direct compilation won't run
into this (as the expression will clearly have to be evaluated at
compile-time), but gtest usage of traits may end up evaluating their
predicate expressions in compiled code, thus requiring that the trait
has been instantiated in the compilation unit already. Declaring one
for all uses of NeedsAdjustAndMark<> is too strong, and isn't needed
really (now) -- retire, but avoid running into the issue for the
corresponding unit test.


Review-Url: https://codereview.chromium.org/2599643004
Cr-Commit-Position: refs/heads/master@{#440618}
Fold SVGAnimatedTypeAnimator into SVGAnimateElement
This folds the functionality of SVGAnimatedTypeAnimator, mostly
verbatim, into SVGAnimateElement. Some methods are renamed, and a new
interface is defined, which allows <animateTransform> to be more
isolated from the rest of the <animate> implementation.
SVGAnimateElement::m_animatedProperty is renamed to m_animatedValue, and
SVGAnimatedTypeAnimator::m_animatedProperty is renamed to
Dial down or remove some asserts in favor of other asserts.


Review-Url: https://codereview.chromium.org/2595393002
Cr-Commit-Position: refs/heads/master@{#440613}
Reschedule sibling invalidations as descendant on removal.
When removing elements we schedule sibling invalidations based on
element attributes and state as descendant invalidations when
necessary. However, that didn't work correctly if we removed an
attribute and then removed the element before the sibling invalidation
for the attribute was effectuated.

For instance, if you remove a class affecting succeeding siblings
through selectors, we schedule an invalidation set for that change, but
it will be cleared right after if we remove the element (see the added

Instead we reschedule sibling invalidations on the parent node before
the invalidations for the removed element are cleared.


Review-Url: https://codereview.chromium.org/2592423002
Cr-Commit-Position: refs/heads/master@{#440598}
Verify that FetchEvent::m_request holds same-thread reference.
To diagnose instability seen during GCs of FetchEvents, instrument
the m_request member, checking that we only create event object containing
references to Requests that reside in the current thread's heap.


Review-Url: https://codereview.chromium.org/2594423002
Cr-Commit-Position: refs/heads/master@{#440475}
Make use of ContextClient in modules/speech/
Switch to reusing ContextClient rather than have SpeechSynthesis{Utterance}
explicitly hold ExecutionContext member references.


Review-Url: https://codereview.chromium.org/2595323002
Cr-Commit-Position: refs/heads/master@{#440432}
Update TODO(s) in SVGTransform.idl
Update SVGMatrix vs. DOMMatrix{,ReadOnly} references to match


Review-Url: https://codereview.chromium.org/2599753002
Cr-Commit-Position: refs/heads/master@{#440400}
Verify that ExtendableMessageEvent's message ports reside on the same heap
To potentially help diagnose a GC crash (see associated bug), verify
that ExtendableMessageEvent's MessagePortArray and MessagePorts belong
to the same thread heap as the event object.


Review-Url: https://codereview.chromium.org/2589333005
Cr-Commit-Position: refs/heads/master@{#440390}
Clamp rgba(...) alpha value in the CSS fast-path parser
The general CSS parser will clamp the alpha value to the [0, 1] range,
while the fast-path parser does not. This means that large alpha values
will result in overflow in the cast to int, yielding the wrong color
Add a clamp to the [0, 1] range before converting to the [0, 256) range
and converting to int. Because negative values are handled separately,
we only need to apply the clamp for the range above zero.


Review-Url: https://codereview.chromium.org/2588293004
Cr-Commit-Position: refs/heads/master@{#440374}
Introduce ThreadState::isOnThreadHeap() helper predicate.
Simple helper to make testing for on-thread-heap conditions easier.


Review-Url: https://codereview.chromium.org/2599533002
Cr-Commit-Position: refs/heads/master@{#440370}
Even empty block intervals should be associated with a fragmentainer.
We need to visit the fragmentainer that a block lives in even if said block has
zero height. If we find a column set, don't perform initial bounds checking.


Review-Url: https://codereview.chromium.org/2597633002
Cr-Commit-Position: refs/heads/master@{#440361}
Improve separation between "SMIL times" and timestamps
The 'elapsed' time does not need to be a SMILTime in general - it can
only be non-finite in the case where the document is not active, and
then the timeline should not be running/animations updated.
Thread the double value further from SMILTimeContainer down into
SVGSMILElement. Simplify some computations.


Review-Url: https://codereview.chromium.org/2592103002
Cr-Commit-Position: refs/heads/master@{#440171}
fix mojom bindings generator exception error message
Followup to https://codereview.chromium.org/2171033002

Review-Url: https://codereview.chromium.org/2591123003
Cr-Commit-Position: refs/heads/master@{#440142}
SameThreadCheckedMember<>: verify same-thread usage of heap references.
In debug builds, Member<> checks that the heap references stored resides
in a heap belonging to the same thread as the Member<> itself. The check
carries some overhead, hence it is not enabled outside of checked builds.

In order to be able to diagnose and catch code that incorrectly stores
heap pointers belonging to other threads in a Member<>, add the
SameThreadCheckedMember<> variant of Member<>. A drop-in replacement
for Member<> that can be used to selectively diagnose.


Review-Url: https://codereview.chromium.org/2592063002
Cr-Commit-Position: refs/heads/master@{#440117}
Use double precision in SVGLengthContext::convertValueToUserUnits
This method does a bunch of <float> * <double> operations, which tickles
UBSANs float-overflow warning when the result is stored back into the
float (single precision) local variable.
We clamp the result to a narrow enough range already at the end (and
hence won't see any effects of the overflow, at least assuming IEEE754),
but might as well use a double precision local variable, since that
actually seems to save a few instructions while also avoiding the
overflowing conversion.


Review-Url: https://codereview.chromium.org/2591663003
Cr-Commit-Position: refs/heads/master@{#440056}
Clear active tree scopes on StyleEngine::didDetach().
clearResolver() is not only called on didDetach(). Make it private and
name it clearResolvers to reflect that it clears scoped resolvers as
well. The comments related to style resolver reconstructruction is
removed as that does not happen anymore.

Clearing m_treeBoundaryCrossingScopes is moved into didDetach()
which was a more natural place.

Clear active and dirty tree scopes in didDetach to not unnecessarily
hang on to any memory associated with them.

These changes were done investigating issue 675533, but won't
necessarily fix anything for that issue.


Review-Url: https://codereview.chromium.org/2593643002
Cr-Commit-Position: refs/heads/master@{#439973}
Clear CSSGlobalRuleSet on StyleEngine::didDetach().
This could free up memory sooner. Found while investigating 675533, but
not confirmed that this fixes that issue.


Review-Url: https://codereview.chromium.org/2589243002
Cr-Commit-Position: refs/heads/master@{#439935}
Need to be inside the flow thread before converting a visual point.
Before we can convert from a visual point to a flow thread point, we need the
input point to be exactly relative to the flow thread, or we might end up
mapping it to the wrong column.

In other words, we need to add the flow thread object's location before
converting into the flow thread coordinate space. While the flow thread indeed
is at 0,0 (or at least close enough to 0,0) relatively to the multicol
container in very many cases, this isn't true when the multicol container is in
rtl writing-mode, or when it's scrollable, or even when the multicol container
has borders and/or padding.


Review-Url: https://codereview.chromium.org/2593633002
Cr-Commit-Position: refs/heads/master@{#439855}
Disallow heap objects containing unsafe on-heap iterators.
Do not allow BlinkGC managed objects to include unsafe iterators of
other heap objects; that is, do not allow them to keep iterator
part objects as fields.

These iterators contain untraced references, which is in general
unsafe practice and breaks the general rule that all heap references
must be known to the GC infrastructure, and be marked and traced

This applies to all heap collection iterators but HeapListHashSet<>'s,
which can be safely traced. It is also the only collection iterator
which is kept as a field of an on-heap object (CSSSegmentedFontFace.)


Review-Url: https://codereview.chromium.org/2588943002
Cr-Commit-Position: refs/heads/master@{#439784}
Don't update global ruleset when active style is dirty.
CSSGlobalRuleSet should always be collected as part of the active style
update. RuleSets may have been cleared from StyleSheetContents as a
result of media query changes for instance.

For the given issue, we tried to limit to a global ruleset when lazy-
loading fullscreen UA style, but as part of going fullscreen we had
already cleared rule sets for stylesheets with media queries due to the
media feature change.


Review-Url: https://codereview.chromium.org/2590793003
Cr-Commit-Position: refs/heads/master@{#439781}
Make column snapping optional when translating to flow thread coordinates.
positionForPoint() wants this, but mapAncestorToLocal() requires that no
special behavior be applied.

While this CL doesn't fix bug 663062, it is a prerequisite for fixing it
without breaking existing tests (MulticolWithAbsPosNotContained in
MapCoordinatesTest unit test).


Review-Url: https://codereview.chromium.org/2590463002
Cr-Commit-Position: refs/heads/master@{#439758}
Tracing HeapListHashSet<> iterators.
The HeapListHashSet<> iterators keep a pair of heap references, which
really should be traced like any other such reference during GCs. This
isn't unsafe for the stack allocated uses of these iterators, but one
Blink object (CSSSegmentedFontFace) keeps an iterator as a field on the
heap, we really have to trace these on-heap part object iterators.

Add the needed infrastructure and use it for CSSSegmentedFontFace.


Review-Url: https://codereview.chromium.org/2583363002
Cr-Commit-Position: refs/heads/master@{#439748}
Removed expected Trusty dbg failure after fix.

Review-Url: https://codereview.chromium.org/2586393002
Cr-Commit-Position: refs/heads/master@{#439723}
Stricter float-to-int conversion in SVGIntegerOptionalInteger
SVGIntegerOptionalInteger parses values as floats but stores them as
integers. Add helpers to avoid issues with overflow and to make this
conversion the same way in all places it's needed.
The "normal" parsing code would truncate the float value while the parsing
code for animation values would round. Make them both use truncation (and the
avoid duplicating the code.)


Review-Url: https://codereview.chromium.org/2590433002
Cr-Commit-Position: refs/heads/master@{#439533}
Use a stricter limit for the exponent range in genericParseNumber
The exponent was being checked against numeric_limits<...>::max_exponent
which is the power-of-two limit. Use max_exponent10 instead. Also make
sure to apply any exponent sign prior to the range check so that
min_exponent10 can be used as the lower bound. This means computing the
base number before checking for/parsing the exponent part. This could
be slower in some cases, but reasonably only when an error is
encountered. Also, scientific notation should be fairly scarce to begin

Also move declarations of local variables closer to their first use (and
in the inner-most scope possible.) Unravel the handling of/accumulation
into 'frac' when computing the decimal part.


Review-Url: https://codereview.chromium.org/2588023002
Cr-Commit-Position: refs/heads/master@{#439522}
Get rid of @font-face resource leak.
Clear the StyleEngine of css connected fonts on detach().

This used to be saved by an active stylesheet update, it seems. With
the new active stylesheet update this is done more selectively and it
might have been done when document going inactive before. Clearing the
font cache on detach fixes the leak issues in css3/fonts.


Review-Url: https://codereview.chromium.org/2582413002
Cr-Commit-Position: refs/heads/master@{#439510}
Fixed flaky fullscreen video test.
The media controls are (at least sometimes) painted twice. The second
time after figuring out how many buttons fit into the available width.
At least one of the fullscreen tests were flaky because the first paint
was dumped instead of the second one. Adding a layoutAndPaintAsyncThen
in the full-screen-test.js framework seems to fix the issue.

Although the issue was filed after landing changes for issue 567021,
the flakiness is also seen locally without those changes running the
test with --repeat-each=30 in debug.


Review-Url: https://codereview.chromium.org/2586243002
Cr-Commit-Position: refs/heads/master@{#439483}
Clamp radii in FEMorphology::createImageFilter
Sk{Dilate,Erode}ImageFilter::Make take the radii as integers (int), so
make sure to convert the float FEMorphology stores avoiding overflow.


Review-Url: https://codereview.chromium.org/2585233002
Cr-Commit-Position: refs/heads/master@{#439474}
Fix HTML parser CDATA edge-case and sync state names with spec
When encountering a sequence of ']]]' at the end of a CDATA section, we
should only buffer one ']' (the first one) and "remember" the other two.

The states exists in the spec[1][2][3] nowadays, so sync the names and remove
the comment about the states not being in the spec.

Fixes two subtests of wpt/html/syntax/parsing/html5lib_tests21.html.

[1] https://html.spec.whatwg.org/multipage/syntax.html#cdata-section-state
[2] https://html.spec.whatwg.org/multipage/syntax.html#cdata-section-bracket-state
[3] https://html.spec.whatwg.org/multipage/syntax.html#cdata-section-end-state


Review-Url: https://codereview.chromium.org/2576373002
Cr-Commit-Position: refs/heads/master@{#439396}
Removed resolverChanged().
This method was now empty and has been replaced by asynchronous active
stylesheet update in updateActiveStyleSheets().


Review-Url: https://codereview.chromium.org/2559613002
Cr-Commit-Position: refs/heads/master@{#439142}
Setting preferred stylesheet simplified.
With active stylesheets being applied asynchronously, we no longer need
to avoid the synchronous stylesheet update during link processing. We
can just mark the treeScope dirty to trigger the preferred set to be
updated as part of updateActiveStyleSheets().


Review-Url: https://codereview.chromium.org/2552353003
Cr-Commit-Position: refs/heads/master@{#439115}
Remove unused lazyAppend from StyleResolver.
Active stylesheet update is now asynchronous and handled from


Review-Url: https://codereview.chromium.org/2557773004
Cr-Commit-Position: refs/heads/master@{#439102}
Removed unused StyleSheetInvalidationAnalysis class.

Review-Url: https://codereview.chromium.org/2546343006
Cr-Commit-Position: refs/heads/master@{#439097}
Remove ensureResolver before invalidation set scheduling.
ensureResolver() used to make sure the invalidation sets were up-to-
date with the currently active stylesheets. This is no longer necessary
as ruleset invalidation of changes in active stylesheets will make sure
changes are applied correctly.


Review-Url: https://codereview.chromium.org/2555083002
Cr-Commit-Position: refs/heads/master@{#439096}
Reland: Collect active stylesheets and and apply asynchronously.
This CL enables asynchronously updating the lists of active stylesheets
applying any style changes using rule set invalidations. This means we
more often avoid full style recalcs when we add or remove stylesheets
from the document as well as when the evaluation of media queries

In general, we now alway compare new and old stylesheets by comparing
their rulesets and schedule style invalidations for removed and added

When media queries changes, we used to give completely in and
recalculate all style once we discovered a media query changed its
evaluation. With this patch, we clear rule sets for sheets which
contain media queries which means we will invalidate rules for the sets
before and after the query change. This can be further refined by only
clearing rule sets when the sheets has a media query which actually did
change evaluation, and also just schedule invalidations for rules which
are inside @media rules.

TreeScopeStyleSheetCollectionTest.cpp is removed as it is replaced by
ActiveStyleSheetsTest.cpp which landed earlier.

updateActiveStyle() has been added a few places where
ensureStyleResolver() previously caused active stylesheets to be up-to-
date. ensureStyleResolver() is now merely a method which creates the
StyleResolver if necessary and returns it.

There are some cleanups and code removal which needs to be done after
this CL, but I have left those out to make this CL as small as
possible. For instance resolverChanged(), which synchronously updated
the active stylesheets, has an empty implementation instead of
including a lot of removals in this CL. The code for lazy-appending
stylesheets in StyleResolver is still there, but not in use.


Committed: https://crrev.com/9fb5b60edfb769134733009f9447bad3eaf347b0
Review-Url: https://codereview.chromium.org/2557533005
Cr-Original-Commit-Position: refs/heads/master@{#438148}
Cr-Commit-Position: refs/heads/master@{#439092}
Merge setTimeout calls with same timeout for webfont tests.
Landing async stylesheet update caused a regression in font-display
tests. The values "fallback" and "optional" block display for 100ms
according to the spec. The tests had a setTimeout call to trigger font
loading and a setTimeout call to trigger notifyDone() to render before
100ms has passed with the same timeout value. However, the timer for
allowing fallback display triggers before the notifyDone triggers in
Debug builds on Mac. Calling notifyDone from the same setTimeout
callback as triggering font loading.

The intention of the test is to trigger the screen dump when 0s has
passed, so this should be OK. I have not identified what exactly changed
with the async stylesheet patch and why the timeout methods are
interleaved with the timeout for enabling fallback rendering.

Removing one of the other tests or one of the font-display values from
the test array also makes the "fallback" and "optional" start passing
without this change, so there is clearly a timing issue here.


Review-Url: https://codereview.chromium.org/2584473002
Cr-Commit-Position: refs/heads/master@{#439026}
ActiveScriptWrappable: GC wrappers in detached ExecutionContexts.
Blink objects that implement (Active)ScriptWrappable have the ability
to keep their corresponding v8 wrapper object alive across GCs by
overriding and implementing ScriptWrappable::hasPendingActivity().

Once an ExecutionContext has become detached, we no longer want to
retain wrappers belonging to it, as that will lead to memory leaks.
With full bi-directional tracing of references across the v8 and Blink
heaps, it is possible to make the lifetime of objects "more accurate",
but not keeping a wrapper alive once in a detached setting, has proven
to work out well in practice.

Consequently, a ScriptWrappable in a detached ExecutionContext should
not be retained, even if hasPendingActivity() return |true|. That is,
we should simply ignore hasPendingActivity()'s result, freeing the
implementations of it from having to take care of this 'detached'

This behavior is already provided by the 'standard' Blink wrapper
visitors that v8 invokes during GC, but not with wrapper tracing,
which is what this CL brings.

It does so by extending ActiveScriptWrappable with a predicate for
checking if the object's ExecutionContext has signalled destruction.

(The natural(?) way to express that is to parameterize ActiveScriptWrappable<>
over the class that implements the interface. This makes for a CL
with a larger footprint.)

R=haraken, mlippautz

Review-Url: https://codereview.chromium.org/2577053002
Cr-Commit-Position: refs/heads/master@{#438967}
Ignore minimum font-size for SVG text
In some circumstances, the minimum font-size would be applied to the
"scaled font", messing up rendering. Because of how the font is scaled,
this would trigger much less than one might expect.
Change the useSmartMinimumForFontSize argument to the
FontSize::getComputedSizeFromSpecifiedSize function to be about entirely
ignoring the minimum font-sizes (this function only has two callsites.)
Refactor LayoutSVGInlineText::computeNewScaledFontForStyle a bit to deal
with this new flow. Also always keep the "original" font when we compute
a scale factor of 0 - it should be invisible regardless.


Review-Url: https://codereview.chromium.org/2575863002
Cr-Commit-Position: refs/heads/master@{#438794}
Signal no pending activity in destructed contexts.
Various hasPendingActivity() overrides weren't taking the state of the
ExecutionContext into account, only considering if event listeners were
registered. We're not interested in holding onto a script environment
after an execution context has been destroyed, so adjust the predicates
to return false if the ExecutionContext has been destructed.

The V8GCController wrapper visitors already check if hasPendingActivity()
implementations incorrectly return |true| when used inside of destroyed
ExecutionContexts, but that check is not handled by trace wrappers


Review-Url: https://codereview.chromium.org/2571193002
Cr-Commit-Position: refs/heads/master@{#438787}
Make LayoutSVGViewportContainer -> SVGSVGElement association obvious
This LayoutObject type is only used for non-outermost SVGSVGElements, so
no need to do runtime checks of the type.

Review-Url: https://codereview.chromium.org/2570293002
Cr-Commit-Position: refs/heads/master@{#438532}
Remove unused SVGTextMetrics constructor
Review-Url: https://codereview.chromium.org/2565173007
Cr-Commit-Position: refs/heads/master@{#438523}
Eagerly dispose of ScheduledActions (reland.)
The DOMTimer's ScheduledAction hold on to the script source and
state needed to execute the timer action. Let go of ShceduledAction's
resource early.

Apart from reducing the lifetime of script source, this is a speculative
fix for crashes reported in v8::PersistentValueVector::Clear() during
lazy sweeping of ScheduledAction objects.


Committed: https://crrev.com/11bd50343795ed1dc1977da91e9a1588687522fd
Review-Url: https://codereview.chromium.org/2552673002
Cr-Original-Commit-Position: refs/heads/master@{#436298}
Cr-Commit-Position: refs/heads/master@{#438503}
Only the first layout pass needs to go deep when pagination state changes.
Since we now re-use the LayoutState object in multipass layout (caused by
either fragmentation or the PaintLayerScrollableArea::FreezeScrollbarsScope
mechanism), we need to notify the LayoutState object when we have performed the
necessary deep layout pass, so that not all subsequent passes also go deep


Review-Url: https://codereview.chromium.org/2570643002
Cr-Commit-Position: refs/heads/master@{#438353}
PaymentApp: Implement the JNI bridge
Add two native methods to ServiceWorkerPaymentAppBridge, and implement
them in service_worker_payment_app_bridge.cc. The two methods are
GetAllAppManifests and InvokePaymentApp. At the moment, they are just
stubs, although GetAllAppManifest contains a bit of code, mainly
for illustration and to avoid compile errors for unused @CalledFromNative
methods in ServiceWorkerPaymentAppBridge.


Review-Url: https://codereview.chromium.org/2556753002
Cr-Commit-Position: refs/heads/master@{#438269}
Remove PreFinalizer{Callback} type aliases from view.
Internal types, no good reason to expose these to the outside.


Review-Url: https://codereview.chromium.org/2573783002
Cr-Commit-Position: refs/heads/master@{#438170}
Collect active stylesheets and and apply asynchronously.
This CL enables asynchronously updating the lists of active stylesheets
applying any style changes using rule set invalidations. This means we
more often avoid full style recalcs when we add or remove stylesheets
from the document as well as when the evaluation of media queries

In general, we now alway compare new and old stylesheets by comparing
their rulesets and schedule style invalidations for removed and added

When media queries changes, we used to give completely in and
recalculate all style once we discovered a media query changed its
evaluation. With this patch, we clear rule sets for sheets which
contain media queries which means we will invalidate rules for the sets
before and after the query change. This can be further refined by only
clearing rule sets when the sheets has a media query which actually did
change evaluation, and also just schedule invalidations for rules which
are inside @media rules.

TreeScopeStyleSheetCollectionTest.cpp is removed as it is replaced by
ActiveStyleSheetsTest.cpp which landed earlier.

updateActiveStyle() has been added a few places where
ensureStyleResolver() previously caused active stylesheets to be up-to-
date. ensureStyleResolver() is now merely a method which creates the
StyleResolver if necessary and returns it.

There are some cleanups and code removal which needs to be done after
this CL, but I have left those out to make this CL as small as
possible. For instance resolverChanged(), which synchronously updated
the active stylesheets, has an empty implementation instead of
including a lot of removals in this CL. The code for lazy-appending
stylesheets in StyleResolver is still there, but not in use.


Review-Url: https://codereview.chromium.org/2557533005
Cr-Commit-Position: refs/heads/master@{#438148}
Roll third_party/icu from 73e24736 to 9cd28287

One change in the range: deprecation warning suppresion for non-clang.


Review-Url: https://codereview.chromium.org/2575433002
Cr-Commit-Position: refs/heads/master@{#438139}
Retire ThreadState::registerPreFinalizer<T>()
The registration of the finalization callback now happens under-the-hood
and automatically.


Review-Url: https://codereview.chromium.org/2570463005
Cr-Commit-Position: refs/heads/master@{#438136}
Simple BlinkGC heap compaction.
This implements heap compaction for the Blink GC infrastructure
(Oilpan), compacting the arenas of the BlinkGC heap which are most
susceptible to becoming fragmented during actual use.

Fragmentation is a real problem and a growing one while browsing anything
but static pages: the amount of unused, but allocated, memory is
fluctuating higher over time.

To avoid leaving increasing amounts of unused holes in our heaps,
heap compaction will periodically squeeze out the unused portions,
packing together the live objects. The heap pages that are then
left as unused, are subsequently released and returned to the OS.

Due to a fortunate property of Blink heap collection types, providing
such compaction is within relatively easy reach. Experiments show that
the arenas which hold such collection objects ("backing stores") are
the ones that develop fragmentation the most & persistently. While not
a complete heap compactor of all Blink GC arenas, it addresses the
fragmentation problem where it is most pressing. More can be done, later.

Explainer / design document:



Review-Url: https://codereview.chromium.org/2531973002
Cr-Commit-Position: refs/heads/master@{#438125}
Remove SVGCursorElement
This allows significant cleanup of CSSCursorImageValue, so do that too.




Review-Url: https://codereview.chromium.org/2522443002
Cr-Commit-Position: refs/heads/master@{#438116}
Implicit prefinalizer registration.
Switch to implicit registration of prefinalizers along with removing
the ability to dynamically unregister a prefinalizer; the latter
being an unused feature.

The requirement to manually register a prefinalizer has proven to be
a chore and a source of bugs. Case in point: HTMLCanvasElement
currently declares a prefinalizer, but doesn't register it. Simplify
the programming model by automatically registering prefinalizers.


Review-Url: https://codereview.chromium.org/2565983002
Cr-Commit-Position: refs/heads/master@{#438110}
Avoid conditional Animation prefinalizers.
Recast the conditionally-eager finalization of Animation objects - only
needed if the Animation object has a CompositorAnimationPlayer attached -
wrapping instead the player object inside an eagerly-finalized object.

By doing so, we remove the need to support explicit prefinalizer


Review-Url: https://codereview.chromium.org/2570503002
Cr-Commit-Position: refs/heads/master@{#438089}
Use hash set instead of vector for changed RuleSets.
That way, we don't have to consider the same RuleSet multiple times for
invalidation on active stylesheet update. This fixes a regression in
PerformanceTests/CSS/StyleSheetInsert.html which would have been
introduced by https://codereview.chromium.org/2557533005

This works because the same style element source text used multiple
times will make us use the same StyleSheetContents from the cache and
hence the same RuleSet for all 50 sheets added in that test. It's a bit
like cheating, but this will also make sure we don't invalidate for the
same RuleSet twice if we re-order stylesheets by removing/inserting a
style element where the CSSStyleSheet pointer will be different, but
the RuleSet stays the same.


Review-Url: https://codereview.chromium.org/2569733003
Cr-Commit-Position: refs/heads/master@{#438062}
Disable layout optimization when column height may be non-uniform.
We have no way of telling what changes beyond the first column break, so if we
cannot guarantee that the column height *is* and *was* non-uniform, we need to
re-lay out children that may stretch into the unknown.

Review-Url: https://codereview.chromium.org/2562273003
Cr-Commit-Position: refs/heads/master@{#437928}
Perform "zoom compensation" for 'transform' on <svg:text>
SVGElement::calculateTransform would not compensate for effective zoom
on 'transform' for SVG <text> elements.
Refactor the code a bit so that the different parameter configurations
are selected first, and then use the same code for both <text> and non-
<text>. This makes sure that effective zoom is factored into the
computed transform for <text> as well.


Review-Url: https://codereview.chromium.org/2565403002
Cr-Commit-Position: refs/heads/master@{#437927}
Revert of Eagerly dispose of ScheduledActions. (patchset #2 id:20001 of https://codereview.chromium.org/2552673002/ )
Reason for revert:
Speculative revert for reported perf decrease on system_health.memory_mobile, https://crbug.com/672098

Original issue's description:
> Eagerly dispose of ScheduledActions.
> The DOMTimer's ScheduledAction hold on to the script source and
> state needed to execute the timer action. Let go of ShceduledAction's
> resource early.
> Apart from reducing the lifetime of script source, this is a speculative
> fix for crashes reported in v8::PersistentValueVector::Clear() during
> lazy sweeping of ScheduledAction objects.
> R=
> BUG=
> Committed: https://crrev.com/11bd50343795ed1dc1977da91e9a1588687522fd
> Cr-Commit-Position: refs/heads/master@{#436298}

# Not skipping CQ checks because original CL landed more than 1 days ago.

Review-Url: https://codereview.chromium.org/2568103002
Cr-Commit-Position: refs/heads/master@{#437889}
PaymentApp: Make the PaymentAppFactory asynchronous
The code for fetching and filtering payment instruments in
PaymentRequestImpl is asynchronous anyway, so this change is not too
intrusive. The main thing is to insert an extra asynchronous step to
populate the mApps list before payment instrument filtering starts.

If we want to take this further, a good next step would be to start
showing apps as they are discovered, instead of waiting until we have
received all the payment apps. It would also be a good thing to
refactor some of this functionality out of the PaymentRequestImpl, as
it is growing quite complex.

Other changes that went into this commit:

* Change the PaymentAppFactory into a singleton, rather than being a
  holder class for static functions.

* Extend the AdditionalPaymentFactory functionality, so that the
  PaymentAppFactory can have many additional factories. This lets us
  make the ServiceWorkerPaymentAppBridge an additional factory, and
  normalize the relationship between the two classes.

* Add two unit tests for testing delayed payment app creation.


Review-Url: https://codereview.chromium.org/2559153002
Cr-Commit-Position: refs/heads/master@{#437843}
Simple BlinkGC heap compaction.
This implements heap compaction for the Blink GC infrastructure
(Oilpan), compacting the arenas of the BlinkGC heap which are most
susceptible to becoming fragmented during actual use.

Fragmentation is a real problem and a growing one while browsing anything
but static pages: the amount of unused, but allocated, memory is
fluctuating higher over time.

To avoid leaving increasing amounts of unused holes in our heaps,
heap compaction will periodically squeeze out the unused portions,
packing together the live objects. The heap pages that are then
left as unused, are subsequently released and returned to the OS.

Due to a fortunate property of Blink heap collection types, providing
such compaction is within relatively easy reach. Experiments show that
the arenas which hold such collection objects ("backing stores") are
the ones that develop fragmentation the most & persistently. While not
a complete heap compactor of all Blink GC arenas, it addresses the
fragmentation problem where it is most pressing. More can be done, later.

Explainer / design document:



Review-Url: https://codereview.chromium.org/2531973002
Cr-Commit-Position: refs/heads/master@{#437829}
Strength-reduce the "scale-factor changed" condition in LayoutSVGRoot
Spend some cycles examining the difference between the old and new
local-to-border-box transforms, and only signal scale-factor changes
if that part of the transform changed.
This also means that we now detect changes scale that we previously
didn't (like [1].)

[1] paint/invalidation/svg/absolute-sized-content-with-resources.xhtml


Review-Url: https://codereview.chromium.org/2559123003
Cr-Commit-Position: refs/heads/master@{#437767}
Rebaseline paint/invalidation/resize-iframe-text.html for Mac.

Review-Url: https://codereview.chromium.org/2557743008
Cr-Commit-Position: refs/heads/master@{#437567}
ImageResource: remove unnecessary vector copying during iteration.
Iterations that don't update the underlying collection, can be done


Review-Url: https://codereview.chromium.org/2555103004
Cr-Commit-Position: refs/heads/master@{#437482}
Hopefully deflake some tests, by preloading the Ahem font.

Review-Url: https://codereview.chromium.org/2560073002
Cr-Commit-Position: refs/heads/master@{#437423}
Missing style invalidation for :in-range and :out-of-range.
Added pseudoStateChanged calls for those pseudos where we already did
so for :valid and :invalid.


Review-Url: https://codereview.chromium.org/2556423002
Cr-Commit-Position: refs/heads/master@{#437415}
Fix path search-replace mistakes (?) that prevented resources from being loaded.
This was introduced in https://codereview.chromium.org/2321183002

Review-Url: https://codereview.chromium.org/2558263002
Cr-Commit-Position: refs/heads/master@{#437365}
Unify "contributes to" and "requires mask" for clip-path child iteration
Since contributesToClip(...) and requiresMask(...) have a lot of overlap,
refactor them into a new (set of) function(s) that return an enumeration
based on the requirements for the element in question.

Review-Url: https://codereview.chromium.org/2563613002
Cr-Commit-Position: refs/heads/master@{#437248}
Let LayoutBlockFlow::removeFloatingObject take LayoutUnit instead of int.
Review-Url: https://codereview.chromium.org/2559443002
Cr-Commit-Position: refs/heads/master@{#437221}
[LayoutNG] Remove unnecessary #includes

Review-Url: https://codereview.chromium.org/2561553002
Cr-Commit-Position: refs/heads/master@{#437217}
Make sure media query results are re-collected.
When media attributes change on style elements, we need to re-append
all sheets in the scope in order to collect the viewport and device
dependent media results correctly. This already done forced by the
FullStyleUpdate in parseAttribute, but we want to minimize the changes
here with async style update and ruleset based invalidations by marking
the treeScope dirty, and if nothing changed, invalidate no style.

However, we need to re-add global rule data, or at least the media
query results.

Example: say that we have a window width of 800px below. After the
media attribute has been changed, we don't need to recalculate any
styles, but we need to make sure we detect style changes crossing the
width of 2000px instead of 1000px.

<style media="(min-width: 1000px)"> ... </style>

  styleElement.setAttribute("media", "(min-width: 2000px");


Review-Url: https://codereview.chromium.org/2554193002
Cr-Commit-Position: refs/heads/master@{#437213}
Make setNeedsActiveStyleUpdate mark treescope dirty only.
Pass the treeScope instead of a stylesheet pointer and remove the
synchronous resolverChanged() call. Instead add the resolveChanged()
calls where currently necessary and mark them for removal.

This makes the setNeedsActiveStyleUpdate implementation like what we
want to end up with [1]. I've done it this way to make the following
CLs easier to review.

Also, setNeedsActiveStyleUpdate calls are removed where we call
removeStyleSheetCandidateNode() since that method already marks the
tree-scope dirty.

[1] https://codereview.chromium.org/1913833002/


Review-Url: https://codereview.chromium.org/2546393002
Cr-Commit-Position: refs/heads/master@{#437212}
Mark correct tree-scope dirty removing link in shadow.
Noticed while working on 567021, StyleElement found the correct
tree-scope in from of a shadow root when applicable while
HTMLLinkElement would just use the document. This is what kept us from
being able to use AnalyzedStyleUpdate for removedFrom() for link


Review-Url: https://codereview.chromium.org/2554873002
Cr-Commit-Position: refs/heads/master@{#437210}
Better isPageLogicalHeightKnown() implementation.
Need to consult the flow thread, if we have one. We may run into situations
where fragmentainer groups in the first column set have got their height
calculated, while later column sets still haven't calculated it [1]. So
checking if flow thread offset 0 is in a fragmentainer of known height isn't
good enough.

Also moved the implementation from LayoutBlock to LayoutBox, since it's pretty
coincidental that we currently don't need this particular method outside of

[1] LayoutMultiColumnSet::recalculateColumnHeight() may reset the column
heights if it detects that the column set has been moved since previous layout


Review-Url: https://codereview.chromium.org/2553133002
Cr-Commit-Position: refs/heads/master@{#437063}
Don't check 'visibility' in LayoutSVGResourceMasker
Since 'visibility' does not work in the same way as 'display', it's not
possible to "prune" subtrees based on non-'visible' values of the
property. Remove the check from the two methods that use it, and leave
to lower levels to handle it.


Review-Url: https://codereview.chromium.org/2558793002
Cr-Commit-Position: refs/heads/master@{#436996}
Don't allow <use> <text> references in clip-path fast-path
The fast-path can't handle <text>, but a <use> referencing <text> was
not properly checked resulting in an incorrect clip.
Make the requiresMask(...) helper handle <use> elements and check the
referenced element.


Review-Url: https://codereview.chromium.org/2560773002
Cr-Commit-Position: refs/heads/master@{#436941}
Use correct document for notifying of inserted import.
Notify the root document to update active stylesheets. If the import
child contains stylesheets, the StyleEngine for the import document
will be notified correctly.

Added a couple of sanity DCHECKs.


Review-Url: https://codereview.chromium.org/2551973003
Cr-Commit-Position: refs/heads/master@{#436887}
Never position a float after it has been placed.
When a float is marked as "placed" (which happens in
LayoutBlockFlow::placeNewFloats()), it means that it has been added to a float
interval tree. It is not allowed to move a float afterwards (unless we remove
and re-insert the floats somehow, e.g. by re-laying out its containing block).
Otherwise, the interval tree may get out of sync with reality, and we may fail
to find the reference to a FloatingObject in the interval tree when deleting a
FloatingObject, so that we end up deleting the FloatingObject, but not the
reference to it in the interval tree (which will remain there, pointing to a
now dead object).

This could happen when LayoutBlockFlow::removeFloatingObjectsBelow() was called
during pagination. We sometimes need to re-lay out a line because the line or
floats next to the line get pushed to the next fragmentainer. As part of that,
we also need to get rid of the floats that we thought would sit beside the
line, and re-position them.


Review-Url: https://codereview.chromium.org/2553923003
Cr-Commit-Position: refs/heads/master@{#436776}
Rework SVGViewSpec<->SVGSVGElement integration
This turns SVGViewSpec into a more independent component, by moving
parsing (case) logic into it, and changing adding an accessor interface
on SVGSVGElement that allows access to, and handles invalidation of the
SVGSVGElement's view properties.

The m_useCurrentView is done away with, and instead the code just checks
if there's an SVGViewSpec attached. Naturally this also means that care
needs to be taken to "detach" the old SVGViewSpec when needed.

Review-Url: https://codereview.chromium.org/2552513002
Cr-Commit-Position: refs/heads/master@{#436704}
Unify predicates for elements "contributing" to a <clipPath>
LayoutSVGResourceClipper has four loops that iterate the child elements
that contribute to the clip path. They are however all subtly different.

To remedy this and make it more obvious that the same set of elements
are iterated, add a helper contributesToClip(...) that handles the
checking of if an element is considered to be contributing to the clip
path or not. This yields four loops with a very similar structure.

Also move path-extraction to a helper, use helpers from Traversal<...>
for basic iteration, drop LayoutObject/ComputedStyle related checks
from the SVGUseElement helper (now handled elsewhere) and hoist the
PaintInfo out of the loop in createContentPicture since it is invariant.

Review-Url: https://codereview.chromium.org/2560513002
Cr-Commit-Position: refs/heads/master@{#436703}
Don't fail clip-paths with empty bounds
An empty nested clip-path should result in an empty clip-path (clipping
away everything.)


Review-Url: https://codereview.chromium.org/2555483003
Cr-Commit-Position: refs/heads/master@{#436605}
Properly simulate self-closing tags when in "foreign content" mode
When background parsing, a tag that "opens" foreign content mode and had
the "self-closing" flag set (<svg/> and <math/>), would place the
simulator in foreign content mode without a chance to get out of it.
Run the "end tag" steps in this case too, to properly balance the
namespace stack.


Review-Url: https://codereview.chromium.org/2546373002
Cr-Commit-Position: refs/heads/master@{#436569}
Refactor layoutBlock() and layoutBlockFlow(). Happens to fix bugs.
Move what only needs to be done once into layoutBlock(). Rename
layoutBlockFlow() to layoutChildren(). Establish LayoutState once, and compare
with the actual previous height to properly detect height changes.

This fixes two issues with the PaintLayerScrollableArea::FreezeScrollbarsScope
mechanism. Tests added.

1. We used to push LayoutState for the same object twice when freezing
scrollbars, which confused the fragmentation machinery.

2. We failed to detect height changes when freezing scrollbars, because we were
unable to compare against the original height (we compared against the height
we had when entering the second layout pass, rather than comparing against the
one we had when entering the first layout pass). We might therefore end up
skipping necessary re-layout of absolutely positioned descendants.


Review-Url: https://codereview.chromium.org/2553833002
Cr-Commit-Position: refs/heads/master@{#436414}
Disallow off-heap containers containing raw on-heap pointers.

Review-Url: https://codereview.chromium.org/2553673002
Cr-Commit-Position: refs/heads/master@{#436351}
Eagerly dispose of ScheduledActions.
The DOMTimer's ScheduledAction hold on to the script source and
state needed to execute the timer action. Let go of ShceduledAction's
resource early.

Apart from reducing the lifetime of script source, this is a speculative
fix for crashes reported in v8::PersistentValueVector::Clear() during
lazy sweeping of ScheduledAction objects.


Review-Url: https://codereview.chromium.org/2552673002
Cr-Commit-Position: refs/heads/master@{#436298}
PaymentApp: Add classes for supporting Web Based Payment Apps
This adds an application class, an instrument class and a skeleton
bridging class which can later be implemented to communicate with the
service worker class in C++.

The app factory class has been extended to create instances of the new
web based payment apps in addition to the existing autofill payment app.


Review-Url: https://codereview.chromium.org/2526293003
Cr-Commit-Position: refs/heads/master@{#436274}
Fix Firefox bookmarks import.
Firefox abandoned usage of the moz_bookmarks_roots table since v. 30 and
removed the table in v. 31 in favor of storing relevant info in the
'guid' column of the moz_bookmarks table.


Review-Url: https://codereview.chromium.org/2296633002
Cr-Commit-Position: refs/heads/master@{#436262}
Schedule layout tree update for dirty tree scopes.
In preparation for async stylesheet update, schedule a layout tree
update when marking tree scopes dirty for active style sheets. This is
necessary to trigger a beginFrame which will in turn call
updateActiveStyle as part of the lifecycle update.


Review-Url: https://codereview.chromium.org/2547883002
Cr-Commit-Position: refs/heads/master@{#436248}
Correctly re-collect active style for html imports.
- Need to re-collect active stylesheets when inserting already cached
  import documents.

- Missing markDocumentDirty() when inserting import documents.

- Added test for missing coverage of the need for marking for re-
  collection from HTMLImportChild::ownerInserted().

The fact that we need to recollect sheets in the document scope and
recalculate style for the whole document is not a perf regression, this
is how it used to be before considering the async stylesheet update
with ruleset invalidations, but ideally we would like to do better.
It's unlikely a common use case as html imports are typically loaded in
head as script and rendering blocking.


Review-Url: https://codereview.chromium.org/2551473002
Cr-Commit-Position: refs/heads/master@{#436238}
Complete layout even if a block needs relayout due to widows or column balancing.
We cannot just abort in the middle of layoutBlockFlow() when we detect that we
need another layout pass (due to new column height or because we want an
earlier break to satisfy the widows requirement). We might miss our only
opportunity to detect size changes that way, and thus skip necessary layout and
repositioning of absolutely positioned descendants.


Review-Url: https://codereview.chromium.org/2471623003
Cr-Commit-Position: refs/heads/master@{#436192}
Drop SVGElement::accessDocumentSVGExtensions()
This method has a single user into which it can be folded without any
issues. The comment in the method seem to no longer apply.

Also drop an unused friend declaration while at it.

Review-Url: https://codereview.chromium.org/2548573003
Cr-Commit-Position: refs/heads/master@{#436051}
Returned MediaQuerySet should be const.
The MediaQuerySet is never modified outside the class. We don't have
any evidence that this fixes the mentioned issue though.


Review-Url: https://codereview.chromium.org/2547713003
Cr-Commit-Position: refs/heads/master@{#436031}
Don't include ComputedStyle.h where not needed.
This reduces the dependency on ComputedStyle.h from more than 2000 compilation
units to less than 1000.

Review-Url: https://codereview.chromium.org/2539363003
Cr-Commit-Position: refs/heads/master@{#435928}
Don't include CachedUAStyle.h from StyleResolver.h
Eliminates another 40+ compilation unit dependencies on ComputedStyle.h

Review-Url: https://codereview.chromium.org/2545953003
Cr-Commit-Position: refs/heads/master@{#435925}
Make updateStyleInvalidationIfNeeded() private.
It is not invoked outside of Document.

This is split out of the larger CL for 567021.


Review-Url: https://codereview.chromium.org/2537863006
Cr-Commit-Position: refs/heads/master@{#435922}
Remove MediaQuerySet:createOffMainThread.
The implementation is identical to MediaQuerySet::create.
Removed old cruft from the unit test from when we had two media query
parsing implementation.


Review-Url: https://codereview.chromium.org/2545663005
Cr-Commit-Position: refs/heads/master@{#435920}
Margins that start at fragmentainer boundaries should be collapsed away.
This only applies if the fragmentainer break is unforced. If it's forced, the
margin is to be preserved.
See https://drafts.csswg.org/css-break/#break-margins

Get rid of LayoutBlock::nextPageLogicalTop(), since nobody calls it anymore.


Review-Url: https://codereview.chromium.org/2542723002
Cr-Commit-Position: refs/heads/master@{#435917}
Avoid repeating ourselves in SVGAnimatedEnumerationBase::setBaseVal
After performing the range checks on the value, we can call our "generic"
setBaseVal and avoid repeating this code-sequence.

Review-Url: https://codereview.chromium.org/2548533003
Cr-Commit-Position: refs/heads/master@{#435715}
Only communicate CSSPrimitiveValue references from SVGLength
Make asCSSPrimitiveValue() return a reference to a CSSPrimitiveValue,
rather than a pointer. The CSSPrimitiveValue contained in the SVGLength
can/should never be null.
Add a helper to SVGAnimatedLength to cut down on some boilerplate for
accessing the current CSSValue.

Review-Url: https://codereview.chromium.org/2549563002
Cr-Commit-Position: refs/heads/master@{#435688}
Neuter the "screen scale factor" computation for SVG <text>
This removes the PaintLayer-factor and DSF from the "screen scale factor",
leaving only the transform to the <svg> root and the "content transform" (used
by <pattern>, <mask> and <clipPath>.)


Review-Url: https://codereview.chromium.org/2492013004
Cr-Commit-Position: refs/heads/master@{#435599}
PaymentApp: Allow multiple payment method names for one instrument.
This changes the name and signature of the
PaymentInstrument.getInstrumentMethodName method to:

    Set<String> getInstrumentMethodNames()

This is to match the "enabledMethods" field in the PaymentAppOption
dictionary in the Payment Apps specification, which is defined to be a
sequence of strings.

See: https://w3c.github.io/webpayments-payment-apps-api/#payment-app-options

I also change the name of PaymentInstrument.getInstrumentDetails to
"invokePayment" in order to convey better that this is where the payment
method specific stuff happens. For a Web Based Payment App, this method
is an appropriate point to launch the payment request event into the
service worker.


Review-Url: https://codereview.chromium.org/2530793002
Cr-Commit-Position: refs/heads/master@{#435587}
Cleanup after removal of the SVGViewSpec interface
With DOM requirements gone, we can turn this into something a bit simpler.
Remove the SVGFitToViewBox inheritance in favor of direct references to
the relevant objects. Similarly drop/unwrap the SVGAnimatedTransformList.

The above gets rid of the only users of SVGAnimatedProperty::setReadOnly
and associated state, as well as the corresponding state in the tear-off.

Also drop an unused methods from SVGSVGElement and rename currentView()
to ensureViewSpec(), making it private in the process.

Review-Url: https://codereview.chromium.org/2537223006
Cr-Commit-Position: refs/heads/master@{#435485}
Introduce resetLayout(), to offload layoutBlockFlow().
Review-Url: https://codereview.chromium.org/2529423003
Cr-Commit-Position: refs/heads/master@{#435471}
Avoid rogue line float re-layout.
We cannot just lay out an object without setting its position first. That would
confuse the fragmenation machinery. Fortunately, it's not even necessary to lay
out here. Changed the comment, as an attempt to explain why.


Review-Url: https://codereview.chromium.org/2539813002
Cr-Commit-Position: refs/heads/master@{#435442}
Remove android build dir nesting restriction
It appears that android builds no longer have to be nested exactly two
levels under //. A build with one level works, so the assert in gn is
no longer helpful.


Review-Url: https://codereview.chromium.org/2544493002
Cr-Commit-Position: refs/heads/master@{#435410}
CSSSelectorWatch: avoid unnecessary hash table lookups.
Review-Url: https://codereview.chromium.org/2541853002
Cr-Commit-Position: refs/heads/master@{#435361}
Rename 'interface' parameter
It conflicts with define from combaseapi.h from Windows SDK.


Review-Url: https://codereview.chromium.org/2524733003
Cr-Commit-Position: refs/heads/master@{#435169}
Use the right point for marker orientation when closing a subpath
Path::apply doesn't pass a point along for the PathElementCloseSubpath
command. This would yield the wrong orientation on the last marker-mid
on the path (see crbug.com/633012#c1 for an example.)
Use m_subpathStart where needed instead.


Review-Url: https://codereview.chromium.org/2539763002
Cr-Commit-Position: refs/heads/master@{#434988}
Cleanup SVGMarkerData::updateFromPathElement
Make the updateFromPathElement "closure" a simple thunk-style function,
to make it a little less unwieldy. Also pass PathElement& rather than


Review-Url: https://codereview.chromium.org/2540513005
Cr-Commit-Position: refs/heads/master@{#434987}
[LayoutNG] Correct inline size for children of multicol containers.
This will lay out multicol containers in one single tall column, without any
support for fragmentation or column balancing.

Also had to disable creation of the anonymous LayoutMultiColumnFlowThread child
of multicol containers, since that's not going to be used in LayoutNG.

The algorithm for calculating the used values of column-width and column-count
can be found here: https://drafts.csswg.org/css-multicol-1/#pseudo-algorithm

Review-Url: https://codereview.chromium.org/2528203002
Cr-Commit-Position: refs/heads/master@{#434971}
Position a float before laying it out.
We'll no longer perform inaccurate layout from insertFloatingObject(), but
defer all layout to positionAndLayoutFloat(). We need to do this correctly
everywhere. One crucial thing is also to pay attention to the resulting
pagination strut before the float, if any. There's only one place where we do
this, and that's in positionAndLayoutFloat().

At most call sites, insertFloatingObject() is followed by a call to
placeNewFloats(), which will call positionAndLayoutFloat(). There are
exceptions to this in line layout, though. In some cases we just insert floats
without laying them out and placing them. This happens when we need to figure
out the height of the current line before we can place floats below it. In
order to figure out if a float fits on the current line, though, we first need
to lay it out without marking it as placed.

We lacked some test coverage, so I added
float-pushed-to-next-fragmentainer-by-floats.html . This also passed prior to
this CL, but I nearly broke it while working on this.


Review-Url: https://codereview.chromium.org/2532573003
Cr-Commit-Position: refs/heads/master@{#434969}
[LayoutNG] No need to search for inline children inside a block-children block.
Also type-check that we're dealing with a LayoutBlockFlow before casting.

Review-Url: https://codereview.chromium.org/2527393002
Cr-Commit-Position: refs/heads/master@{#434968}
No longer store page logical height in LayoutState.
That height may not be uniform throughout the entire fragmentation context
anyway, so it's not reliable to do it like this. For multicol, the value was
only used as a flag (0=unknown height, 1=known height).

Move calculation of available column height to LayoutMultiColumnFlowThread. It
no longer needs to live in LayoutBlockFlow.

Review-Url: https://codereview.chromium.org/2529073002
Cr-Commit-Position: refs/heads/master@{#434965}
Update svg/wicd/test-rightsizing-b.xhtml expectations
Attempt to compensate for some recent changes to DRT output. Also try
to get some more "correct" reference images.


Review-Url: https://codereview.chromium.org/2537083003
Cr-Commit-Position: refs/heads/master@{#434962}
Introduce markAllTreeScopesDirty.
When we need to recollect active stylesheets for all scopes, have an
explicit markAllTreeScopesDirty method instead of relying on
FullStyleUpdate which will go away for async active stylesheet updates.

This CL does not contain functional changes.


Review-Url: https://codereview.chromium.org/2534863002
Cr-Commit-Position: refs/heads/master@{#434940}
Make 'transform' a presentation attribute on SVG elements
This makes 'transform', 'gradientTransform' and 'patternTransform'
presentation attributes on SVGGraphicsElements, SVGGradientElements
and SVGPatternElements respectively.



Salvaged from https://codereview.chromium.org/423093014, but takes a
different approach to bridge the syntax gap and avoid crbug.com/577219.

The strategy taken here is to use the SVGTransformList to generate a
CSSValue for the presentation attribute style, and hence postponing
both support for the full transform syntax and a way around the bug
mentioned above. Essentially softening the blow. These two "features"
are expected to be implemented eventually, so this is just a "first


Review-Url: https://codereview.chromium.org/2478233002
Cr-Commit-Position: refs/heads/master@{#434934}
Fix speech-synthesis-speak-multiple.html flakiness.
Follow up on r420711 (crbug.com/589632) and adjust the expected lower
bound on ".elapsedTime" to also include zero for 'start' events.


Review-Url: https://codereview.chromium.org/2540623002
Cr-Commit-Position: refs/heads/master@{#434931}
Handle overlapping uses of MockWebSpeechRecognizer.
More than one speech recognition object may exist at the same time,
all sharing a single MockWebSpeechRecognizer underneath when
running layout tests.

Overlapping uses of speech recognizer objects weren't something
the mock object was designed to gracefully handle, hence fuzzer
inputs would leave the mock object in an invalid state and crash,
when they attempted to do so.

Rather than try to ignore and prevent overlapping uses from going
ahed, we extend MockWebSpeechRecognizer with support for handling
them, queueing recognizer context switching tasks that will run
upon completion of the currently ongoing sequence of tasks that
a speech recognizer object expects.


Review-Url: https://codereview.chromium.org/2525933002
Cr-Commit-Position: refs/heads/master@{#434777}
Rework the "rules for parsing dimension values" implementation
This CL reworks the current implementation of the "rules for parsing
dimension values" [1] (HTMLElement::addHTMLLengthToStyle) into a
separate function and moves it to HTMLDimension.{cpp,h}.
In general, behavior deviating from the specced version is kept with the
following exceptions:

 * Allow all of the "space characters" [2], rather than just U+0020.

 * Cases with multiple full stops (ex: "1.2.3") now parse the same as
   "1.2" rather than failing.

Comments are added where the implementation is known to deviate from the

This also makes it possible to avoid calling into the CSS parser for
actual parsing, which should reduce the amount of special-cases needed
there. This requires a mechanism for disallowing percentage values
though, to properly handle 'cellspacing' on <table>.

[1] https://html.spec.whatwg.org/multipage/infrastructure.html#rules-for-parsing-dimension-values
[2] https://html.spec.whatwg.org/multipage/infrastructure.html#space-character


Review-Url: https://codereview.chromium.org/2528673003
Cr-Commit-Position: refs/heads/master@{#434678}
[LayoutNG] Remove all mentions of NGBox and NGInlineBox.
It's called NGBlockNode and NGInlineNode now.

Also removed an old TODO about common base class for NGBlockNode and
NGInlineNode. They do have a common base class now.

Review-Url: https://codereview.chromium.org/2530083003
Cr-Commit-Position: refs/heads/master@{#434630}
Remove spurious Ctrl+Y character from paint invalidation test.
This caused the test to fail for me, when run locally.

Review-Url: https://codereview.chromium.org/2529843002
Cr-Commit-Position: refs/heads/master@{#434579}
[LayoutNG] Simplify NGBox::CanUseNewLayout().
Review-Url: https://codereview.chromium.org/2535533002
Cr-Commit-Position: refs/heads/master@{#434555}
[LayoutNG] Typos in ComputeMinAndMaxContentSizes() documentation.
Review-Url: https://codereview.chromium.org/2526223004
Cr-Commit-Position: refs/heads/master@{#434525}
[LayoutNG] Unit tests for MinAndMaxContentSizes::ShrinkToFit().
Also DCHECK in the implementation that max_content isn't less than min_content.

Review-Url: https://codereview.chromium.org/2528433006
Cr-Commit-Position: refs/heads/master@{#434458}
Check for styleResolver() in preparation for async style update.
Currently, active stylesheets are appended to ScopedStyleResolver
through the StyleResolver. When we move to async stylesheet update with
ActiveStyleSheets being appended from StyleEngine, styleResolver() is
typically null the first time we update the active stylesheets.

Add a null check before accessing styleResolver() when adding
@font-face rules.


Review-Url: https://codereview.chromium.org/2522423002
Cr-Commit-Position: refs/heads/master@{#434437}
Set the inline position of floats a bit later.
No need to do it so early, since nobody cares about its position at this point.
This means that there's also no need to update it after having been pushed down
by pagination. As long as we set it before positioning subsequent floats or
other types of content, we're good.

Also store margins as local variables. No huge gain, apart from prettier code
with fewer breaks.

No behavior changes intended.

Review-Url: https://codereview.chromium.org/2511283003
Cr-Commit-Position: refs/heads/master@{#434388}
Move MediaQueryResults to RuleFeatureSet.
The existing code only cleared the query results on the StyleResolver
when the StyleResolver was cleared. That meant we could end up in a
situation where the result list was ever-growing. That wasn't a big
issue in practice as the StyleResolver would be cleared quite often on
stylesheet changes. However, that will change when the RuleSet based
style invalidation is enabled.

We move the media query results to RuleFeatureSet so that:

- Results for @media rules are stored in RuleFeatureSet instead of
- Results for media attributes are stored in the ScopedStyleResolver
  when added instead of appending them directly to StyleResolver.
- Accumulated results for all scopes are stored in CSSGlobalRuleSet
  on StyleEngine instead of StyleResolver and are accumulated with
  other rule features in ScopedStyleResolver::collectFeaturesTo().

This CL introduces StyleEngine::ruleSetForSheet() for evaluating the
media attribute of the stylesheet node and create the RuleSet if the
media attribute matches. That way we are able to make the
MediaQueryEvaluator private to StyleEngine. Also, this method is
required when we start using ActiveStyleSheets.


Review-Url: https://codereview.chromium.org/2528633003
Cr-Commit-Position: refs/heads/master@{#434383}
Force adding sheets and recalc for html import re-ordering.
When we remove an import link and re-insert it into the document, the
import Document and CSSStyleSheet pointers are persisted. That means the
comparison of active stylesheets is not able to figure out that the
order of the stylesheets have changed after insertion.

We fall back to re-add all sheets to the scoped resolver and recalculate
style for the whole document if we remove an import in case it is re-
inserted into the document. The assumption is that removing html imports
is very rare.

For re-ordering of link rel=stylesheet the CSSStyleSheet object is
cleared on removal and recreated on insertion. Since the active
stylesheet list keeps references to CSSStyleSheet, CSSStyleSheet
pointers will not be re-used.


Review-Url: https://codereview.chromium.org/2519393002
Cr-Commit-Position: refs/heads/master@{#434374}
Check explicitly for style invalidation/recalc in @font-face test.
needsLayoutTreeUpdate will return true for needing to update the global
ruleset for async style update. Even if the test only tries to add a
@font-face rule, we unconditionally recollect the CSSGlobalRuleSet when
stylesheets are added or removed.

Instead check that adding a @font-face rule in a shadow tree does not
cause style invalidation or recalc.


Review-Url: https://codereview.chromium.org/2520263002
Cr-Commit-Position: refs/heads/master@{#434367}
Adjust VideoRendererAlgorithm for |frame_dropping_disabled_|
This makes video frame hashing in tests immune to timing variations that
are inherent in the rendering algorithm.

TEST=media_unittests pass, new unit test VideoRendererAlgorithmTest.EffectiveFramesQueuedWithoutFrameDropping

Review-Url: https://codereview.chromium.org/2502093002
Cr-Commit-Position: refs/heads/master@{#434350}
EDisplay enum class: Rename [Inline]Box to Webkit[Inline]Box.
The "box" and "inline-box" values (or rather: "-webkit-box" and
"-webkit-inline-box") for "display" are for an early-stage version of the
flexbox spec, which the web embraced before the flexbox spec got around to
going CR (which uses the values "flex" and "inline-flex" instead).

Furthermore: Having both EDisplay::InlineBox enum value and the InlineBox class
(in Source/core/layout/line/InlineBox.h) confuses the symbol lookup in gdb,
which causes a ~40 seconds freeze [1] when working on something that involves the
InlineBox class.

[1] For component builds with gdb_index set to true in gn


Review-Url: https://codereview.chromium.org/2524903003
Cr-Commit-Position: refs/heads/master@{#434316}
No need to force relayout of children when page logical height changes.
Also removed an ignored out-parameter hasSpecifiedPageLogicalHeight from

Review-Url: https://codereview.chromium.org/2509323005
Cr-Commit-Position: refs/heads/master@{#434290}
Move MediaQueryEvaluator from StyleResolver to StyleEngine.
The plan is to move active stylesheet update and viewport/device-
dependent media query results from StyleResolver to StyleEngine which
means it makes sense to move the MediaQueryEvaluator there as well.
That means that the StyleResolver will temporarily ask the StyleEngine
for the evaluator when needed.

See https://codereview.chromium.org/1913833002/ for planned changes.


Review-Url: https://codereview.chromium.org/2521063005
Cr-Commit-Position: refs/heads/master@{#434144}
Apply the font scale factor when generating stroke geometry for <text>
Because of the special font scale factor applied to <svg:text> to bring
it into a pseudo "host" transform, the stroke geometry would end up
being generated in/relative to the wrong coordinate space.
Apply the same scale to dash-related properties as was previously
applied to stroke-width.


Review-Url: https://codereview.chromium.org/2513343005
Cr-Commit-Position: refs/heads/master@{#434135}
Make auto-scrollbar shrink-to-fit test more evil.
Be sure to have laid out before making style changes.

Review-Url: https://codereview.chromium.org/2521193002
Cr-Commit-Position: refs/heads/master@{#434128}
invalidateColumnSets() doesn't need to mark anything for layout.
Review-Url: https://codereview.chromium.org/2522453003
Cr-Commit-Position: refs/heads/master@{#433952}
Add test for line float that removes a tall unbreakable block child.
Review-Url: https://codereview.chromium.org/2521963002
Cr-Commit-Position: refs/heads/master@{#433910}
Move stuff from layoutBlockFlow() into new method addOverhangingFloatsFromChildren().
+ some cleanup in the vicinity.

Review-Url: https://codereview.chromium.org/2515303003
Cr-Commit-Position: refs/heads/master@{#433886}
Drop finalization for ElementShadows.
The empty destructor serves no purpose now, so let it go.


Review-Url: https://codereview.chromium.org/2485373003
Cr-Commit-Position: refs/heads/master@{#433844}
XMLHttpRequest.abort(): follow spec wrt readyState transitions.
readyState is now only set to UNSENT if abort() is called on an object
with readyState in a DONE state.


Review-Url: https://codereview.chromium.org/2517173002
Cr-Commit-Position: refs/heads/master@{#433840}
Enable precompiled headers for Blink on Windows.
One reason Blink is slow to compile is that there is a lot of code
included in every compilation unit. This is partly because everything
depends on either LayoutObject.h or Document.h and those in turn
include huge portions of the rest of Blink.

By precompiling LayoutObject.h and Document.h, the compilation of
core/ and modules/ in Blink can be considerably reduced;
some numbers:

@ r433149       config      build (mins)  size (Kb)
master:         Debug       149:30        9410487
master:         Release     176:16        6118938

opera-pch[2]:   Debug       134:59        9337121
opera-pch[2]:   Release     160:42        6110812

opera-pch[3]:   Debug        93:06        8935714
opera-pch[3]:   Release     108:34        5029242

This for a clean build of target 'blink_tests', i.e., building
both chromium and blink parts. The gains are all local to Blink,
clearly. Host is an i7-3770 (4 phys cores); 32G + 256 SSD -
Win7 Pro.

The precompiled header file is judiciously (and forcefully) included
while compiling the core/ + web/ (and some of modules/) sources. Except
for some name disambiguation trivia when compiling the XPath grammar,
no source changes are needed to make this work out.

Note that distributed compilation system disables precompiled headers
globally so this will *not* make trybots faster. But many developers
don't have access to such super powers.

This already landed[1] in the gyp/VS2013 world some time ago but
unclear & unexplained bot failures caused a revert. Now with gn and
VS2015 the world should be a better place. This CL actually takes over
where [2] got stuck / ran out of time, extending its scope quite
considerably (i.e., 40 mins faster builds wrt the above pch numbers.)

[1] https://codereview.chromium.org/1167523007/
[2] https://codereview.chromium.org/2152783002/
[3] this CL.

Note sheriffs: should unexplained Windows build errors surface on the bots,
similar to the ones seen in crbug.com/511945, then please consider this CL a suspect.
This was with GYP and earlier MSVC toolchains; we have no reason to believe the problem
was fixed with GN and MSVC2015, we're just hoping for the best.


Review-Url: https://codereview.chromium.org/2520863002
Cr-Commit-Position: refs/heads/master@{#433832}
Repaint SVG subtree on viewport changes (resize)
When the (outermost) <svg> is sized using percentages, and an ancestor
changes size, the LayoutSVGRoot will be marked for layout (even though
the dimension/initial viewport changes.)
Since changed dimensions can imply a new scale factor (for instance from
interactions with a viewBox) or previously clipped content being
exposed, we need to issue paint invalidations for the entire SVG.


Review-Url: https://codereview.chromium.org/2511353002
Cr-Commit-Position: refs/heads/master@{#433622}
HashTable: bring per-table stats tracking back to life.
Recording per-hash table stats (DUMP_HASHTABLE_STATS_PER_TABLE)
broke with the introduction of Oilpan, as the feature depended
on finalizable HashTable<>s, something Oilpan heap hash tables
are not.

If the hash table resides on the Oilpan heap, arrange for the
stats object to also reside there.

While here, also unify the handling of global HashTable stats
recording and the per-table representation.


Review-Url: https://codereview.chromium.org/2511983003
Cr-Commit-Position: refs/heads/master@{#433494}
DOMMatrix: add missing propagation of exceptions.

Review-Url: https://codereview.chromium.org/2514453005
Cr-Commit-Position: refs/heads/master@{#433449}
Force re-layout of a float when we just became unfragmented.
We need to re-lay out a float if we cease to be fragmented, in order to remove
any pagination struts that may previously have been set inside.

This is an addition to https://codereview.chromium.org/2454083002 , which fixed
something similar for regular in-flow blocks.

Review-Url: https://codereview.chromium.org/2512163002
Cr-Commit-Position: refs/heads/master@{#433221}
If an object's containing block is in a flow thread, so is the object.
Remove harmful condition in LayoutState that the object not be out-of-flow.

Boring details:

In simplified layout of an absolutely positioned object inside a multicol
container we'd fail to realize that we were paginated, and therefore wouldn't
insert pagination struts. This was only problematic for simplified layout. In
normal non-simplified layout, we'd pass a non-zero page logical height to
LayoutState() when entering the flow thread, and, even if the LayoutState of
the absolutely positioned descendant would have no flow thread associated with
it, it would still become m_paginated, thanks to the non-zero page logical
height. Which was enough to get the machinery to insert struts.


Review-Url: https://codereview.chromium.org/2516463003
Cr-Commit-Position: refs/heads/master@{#433220}
Improve strut handling in initial column balancing pass.
Only use the pagination strut from the first object or line (in each parallel
flow [1]) that we find at a page break. When we need to break before some
content, we may end up setting the pagination strut on some ancestor of said
content, rather than on the content (layout object or line box). This happens
when there's no break opportunity (class A, B or C break point [2]) before the
content that doesn't fit in its current fragmentainer (there's no break
opportunity before the first line in a block, for instance). In such cases we
need to propagate the strut to some ancestor that comes after a valid break
opportunity. In such situations, there'll be severeal layout objects or line
boxes that start at the exact top of the next fragmentainer. Only the first
object in layout tree order will have the strut. Subsequent objects (children,
typically) or lines that also are flush with the top of the fragmentainer will
have a strut of 0. We shouldn't overwrite the actual strut with 0, or we risk
overstretching the columns. At each break we need to know the exact amount of
space that was "wasted" because of the break, and subtract it, in order to
calculate a minimal column height.

[1] https://www.w3.org/TR/css-break-3/#parallel-flows
[2] https://www.w3.org/TR/css-break-3/#possible-breaks

We also need to make sure that we associate breaks with the right column when
balancing, i.e. the former column, not the latter. This distinction matters if
the pagination strut is 0 and we're at the exact top/bottom of some column.

This CL also enables using specified column height even when balancing a
multicol container. It may be that the final column height will actually be the
same as the specified height, which means that if we set it right away, we
might be able to eliminate a subsequent layout pass [1]. Almost more importantly,
doing this will exercise code in the column balancer that was previously only
used when balancing inside nested multicol. This in turn means that it will
become less cumbersome to write tests for this code, and hopefully more
difficult for bugs to hide in there as well.

[1] LayoutTests/paint/invalidation/column-rules-fixed-height.html no longer
requires the contents of the multicol container to be relaid out when
column-rule changes.

Review-Url: https://codereview.chromium.org/2509813004
Cr-Commit-Position: refs/heads/master@{#433166}
XMLHttpRequest: check if 'loadstart' handler cancelled send().
'loadstart' is dispatched to both 'download' and upload event handlers
while initiating a send() operation. Should those event handlers cause
the ongoing send operation to be aborted/stopped/cancelled, this outer
send() operation shouldn't proceed upon return.


Review-Url: https://codereview.chromium.org/2507773002
Cr-Commit-Position: refs/heads/master@{#433157}
isPageLogicalHeightKnown() doesn't need a parameter.
If page logical height is (un)known, it's (un)known throughout the entire
fragmentation context, so location doesn't matter.

Review-Url: https://codereview.chromium.org/2514573002
Cr-Commit-Position: refs/heads/master@{#433145}
Introduce adjustFloatLogicalTopForPagination(), to offload positionAndLayoutFloat().
Also renamed a variable from childBox to child in positionAndLayoutFloat().


Review-Url: https://codereview.chromium.org/2513643002
Cr-Commit-Position: refs/heads/master@{#433143}
Rename positionNewFloats() to placeNewFloats().
This will distinguish it better from the method named "positionAndLayoutFloat".

Also be explicit about the fact that we use the top margin edge when
positioning floats, as opposed to the top border edge, which is common for all
other object types. So "logicalTop" usually means the logical top of the border
edge. Therefore, use "logicalTopMarginEdge" for floats.

No behavioral changes, just cleanup.


Review-Url: https://codereview.chromium.org/2505943003
Cr-Commit-Position: refs/heads/master@{#432895}
Let lowestFloatLogicalBottom() take EClear instead of FloatingObject::Type
Review-Url: https://codereview.chromium.org/2505853004
Cr-Commit-Position: refs/heads/master@{#432801}
DOMParser: handle use from contexts without an "active document".
Handle detached uses of parseFromString(), where there is no context
document to inherit the security origin from.

Relevant spec reference,



Review-Url: https://codereview.chromium.org/2509813002
Cr-Commit-Position: refs/heads/master@{#432782}
No forced active stylesheet recollect when pending sheets reach 0.
We forced a FullStyleUpdate which causes an active stylesheet update
for all tree scopes in the presence of placeholder style. What we need
to do for placeholder style is to trigger a full style recalc. For
instance, we don't need to update active stylesheets in shadow trees
if the last blocking resource that finishes loading is a document scope
stylesheet or import.


Review-Url: https://codereview.chromium.org/2500923002
Cr-Commit-Position: refs/heads/master@{#432630}
When placing a float, pay attention to its final logical top.
Subsequent floats may not be placed above this location.


Review-Url: https://codereview.chromium.org/2504173002
Cr-Commit-Position: refs/heads/master@{#432503}
Let querySelector(All) match (nth-)last with unclosed parent.
While parsing, we don't match :last*, :nth-last* etc until we finish
parsing children to avoid alternating between different computed styles
during loading. For querying selectors, however, we should. I couldn't
find this explicitly mentioned in w3c or whatwg specs for
querySelector(All), but Firefox and IE does this.

This could happen if you have:


Adding expectations file for a wpt which now fails. The modifications
to the test has been upstreamed to the github repo. See PR [1].

[1] https://github.com/w3c/web-platform-tests/pull/4216


Review-Url: https://codereview.chromium.org/2505543004
Cr-Commit-Position: refs/heads/master@{#432493}
Add missing include of errno.h
This allows us to build the object file independently.


Review-Url: https://codereview.chromium.org/2501323002
Cr-Commit-Position: refs/heads/master@{#432459}
Media element: avoid v8 allocations in hasPendingActivity().
Blink code is not allowed to allocate objects on the v8
heap while its GC calls out to hasPendingActivity();
re-entrancy is not supported.

Hence, disable 'officialPlaybackPosition' updates while
in hasPendingActivity(), as that will trigger v8
allocations by way of microtask allocations.


Review-Url: https://codereview.chromium.org/2498033002
Cr-Commit-Position: refs/heads/master@{#432453}
Use an SVGElementProxy in ReferenceClipPathOperation
This transforms ReferenceClipPathOperation into using the SVGElementProxy
mechanism. Currently only for PaintLayer clients.

PaintLayerFilterInfo is generalized to PaintLayerResourceInfo and used as
the proxy/resource client for the 'clip-path' property. This enables change
notifications to flow back to the PaintLayer from the <clipPath> subtree.

The SVGElementProxySet is made a little bit generic by moving it to
SVGElementRareData, however it's still only made available for the few element
types that are used with it.


Review-Url: https://codereview.chromium.org/2484153003
Cr-Commit-Position: refs/heads/master@{#432193}
Make updateStyleAndLayoutTree ready for async stylesheet update.
Introduce Document::updateActiveStyle() and corresponding
updateActiveStyle()/updateActiveStyleSheets() methods in StyleEngine to
prepare for doing active stylesheet updates as part of

We move updateViewport() to updateActiveStyle() as the first step. This
is done by removing the synchronous calls to ViewportStyleResolver::
updateViewport() and instead schedule a layout tree update. In order to
trigger actual work to be done when the layout tree update happens, we
need to return true from Document::needsFullLayoutTreeUpdate() when we
need an active style update (for viewport atm).


Review-Url: https://codereview.chromium.org/2484863003
Cr-Commit-Position: refs/heads/master@{#432182}
Tidy up ScriptLoader (MIME) type matching.
MIME is case-insensitively handled within Blink, so remove some
unnecessary normalization of MIME type (and "language=") strings
in ScriptLoader.


Review-Url: https://codereview.chromium.org/2497873002
Cr-Commit-Position: refs/heads/master@{#432162}
XMLHttpRequest: implement "send() flag" tracking and updating per spec.
The implementation has until now tracked/approximated the spec's
"send() flag"[1] by checking if the XMLHttpRequest object had an active
loader. That object does not have lifetime equal to what the spec
requires for the "send() flag", nor is the loader set for sync XHR

There's no good reason to hold out on tracking this flag per spec,
so introduce it here.

[1] - https://xhr.spec.whatwg.org/#send-flag


Review-Url: https://codereview.chromium.org/2496933002
Cr-Commit-Position: refs/heads/master@{#432148}
ContentSecurityPolicy: avoid defining static String singletons.
As CSP is used by multiple threads, we cannot define string literals
in terms of DEFINE_STATIC_LOCAL(). Follow what is done elsewhere
for ContentSecurityPolicy and resort to using plain string literals.


Review-Url: https://codereview.chromium.org/2497543003
Cr-Commit-Position: refs/heads/master@{#431956}
Refactor CSS property mapping for SMIL Animation
Currently the SMIL code relies on 'attributeName' mapping 1:1 to the
CSS property name. This would not work with for instance with
'gradientTransform', which is supposed to map to the 'transform'

To support this, store a CSS property id in SVGAnimatedTypeAnimator, and
use the CSS property id stored in SVGAnimatedProperty to populate it when
possible (using the current method in other cases.)

While doing this, also remove the stored 'context element' from
SVGAnimatedTypeAnimator, since it's only used in the reset(...) method,
and hence can simply be passed as an argument.

Also cleanup the uses of a CSSPropertyID in SVGAnimateElement (the sole
user of SVGAnimatedTypeAnimator) by using the stored CSS property id.

Make SVGAnimateElement::shouldApplyAnimation return bool, and use the
data from the SVGAnimatedTypeAnimator instead to determine which
animation code-path to use.


Review-Url: https://codereview.chromium.org/2496583002
Cr-Commit-Position: refs/heads/master@{#431862}
gn: Include source files outside the source root for Xcode workspace
This change unifies Xcode workspaces with projects for other IDEs.


Review-Url: https://codereview.chromium.org/2489673004
Cr-Commit-Position: refs/heads/master@{#431856}
Remove Deque<>::findIf<>().
This function template is unused, and any future uses are
better served by using <algorithm>'s std::find_if().


Review-Url: https://codereview.chromium.org/2500763002
Cr-Commit-Position: refs/heads/master@{#431855}
Internals.setValueForUser(): add argument type check.

Review-Url: https://codereview.chromium.org/2500793002
Cr-Commit-Position: refs/heads/master@{#431845}
InitialColumnHeightFinder needs to take all expected rows into account.
When a balanced multicol is nested inside another balanced multicol, it will
not be able to create any fragmentainer groups in the first layout pass, since
the height of the outer columns is still unknown.

We need to detect this situation, so that we don't limit the number of content
runs (content portions without explicit breaks) to the used value of
column-count. We are going to need ALL content runs, and group them into
imaginary rows, to figure out a minimal height of the entire inner multicol
container in the first balancing pass.

This will help set a better initial outer column height, and, more importantly,
set some sensible height on the inner multicol container right away, so that
we're not going to believe that it's super-short, which might prevent us from
marking it for re-layout when the outer coulmns have been sized.
childNeedsRelayoutForPagination() would simply fail to see that it's actually
going to cross outer column boundaries, and just bail.

We also treat tallestUnbreakableLogicalHeight() somewhat differently in such
situations. We require that the last "row" alone (rather than the entire
multicol container) be at least as tall as this.

Broke a newFragmentainerGroupsAllowed() out of
appendNewFragmentainerGroupIfNeeded(), since the column balancer code now also
needs to know when we're nested but are not allowed to create fragmentainer

Some, but not all, new tests used to fail before the code changes in this CL.
The passing ones are there to point out regressions that I nearly introduced
while working on this CL.

This is a patch in preparation for removing the relayoutChildren = true thing
in LayoutBlockFlow::layoutBlockFlow() when page logical height changes.

Review-Url: https://codereview.chromium.org/2493833004
Cr-Commit-Position: refs/heads/master@{#431844}
Make FileReader.abort() (synchronously) follow the spec.
It is problematic to cancel a ThreadableLoader (by way of FileReaderLoader)
while it is on the stack, which is one of the steps involved when
abort()ing a reader (as part of the "terminate" step.) To avoid such
potential trouble, the loader termination is done asynchronously.

However, there's no good reason to delay performing the other (user
visible) abort() steps, so arrange for that to happen and align with
the spec & others.


Review-Url: https://codereview.chromium.org/2491363003
Cr-Commit-Position: refs/heads/master@{#431639}
Match camelCased SVG attributes selectors in html documents.
Attribute names are stored lower-case in stylesheets in HTML documents.
SVG attribute names are normalized to the camelCase form in HTML
documents. That meant SVG attributes with camelCase like viewBox never
matched in HTML documents.

We had the same issue for camelCased element names in [1]. In that CL
we decided to allow insensitive matching for non-html elements in order
to avoid having to store the tag names twice in CSSSelector, even if
that is wrong according to the HTML spec. This CL does exactly the same
for attribute selectors.

[1] https://crrev.com/bab4aa7b9


Review-Url: https://codereview.chromium.org/2490393002
Cr-Commit-Position: refs/heads/master@{#431544}
Support fetching attribute listeners from outside v8 context scopes.
A number of the <body> element's event handler attributes represent
and expose event handlers on the window object, hence the parser
will update & replace attribute event listeners while parsing the
attributes. This may well happen while executing outside any v8
context; adjust the lookup of attribute event listeners
to support such usage.


Review-Url: https://codereview.chromium.org/2492793002
Cr-Commit-Position: refs/heads/master@{#431509}
Skip independent inherited property propagation to pseudo elements.
UpdatePseudoElements and IndependentInherit conflict in the following
way. If we both have an independent inherit change on the actual dom
element, and we detect that we need to update the style for the pseudo
element we need to signal the inheritance propagation to the real dom
children and signal the pseudo element recalc to the pseudo element
children. If we return IndependentInherit, we lose the information
about the need for a pseudo element recalc, and if we return
UpdatePseudoElement, we lose the inheritance propagation for the actual
dom children.

We could introduce a new IndependentInheritAndUpdatePseudoElements, but
if there exists pseudo element, we would always return this constant,
so instead just force recalc on pseudo elements on IndependentInherit.


Review-Url: https://codereview.chromium.org/2492783002
Cr-Commit-Position: refs/heads/master@{#431430}
Split positionAndLayoutFloat() off positionNewFloats().
Float layout is somewhat broken when it comes to fragmentation (multicol,
printing). We're going to have to make sure that we always position the
float before laying it out, and, after layout, insert a break before it if
needed. This is a preparatory CL for that.

We currently lay out a float e.g. in insertFloatingObject() without
worrying about setting the position first.

No behavior changes intended.


Review-Url: https://codereview.chromium.org/2486413002
Cr-Commit-Position: refs/heads/master@{#431422}
IDBObserver does not need to be GC finalizable.

Review-Url: https://codereview.chromium.org/2493713002
Cr-Commit-Position: refs/heads/master@{#431268}
Reland of "Tracking reference filter mutation via SVGElementProxy"
This introduces SVGElementProxy - a new piece with the functionality of
DocumentResourceReference and the ReferenceFilterBuilder merged. It
provides the means to track clients of a certain element (only
SVGFilterElements for now, but will likely be extended to other types if
it ends up sticking.) An SVGElementProxy is created, and primarily
owned, by CSSURIValue. The proxy also handles loading of a resource
document, if requested.

Clients are SVGResourceClients, like before, with methods/callbacks
renamed. Some of the old functionality of SVGResourceClient has either
been moved to clients, to the proxy or been replaced with different

Mutations to the element/subtree is signaled separately from any
potential changes to the actual reference (anything that might
invalidate the element reference.)

Fixed an issue from [1] where an observer would be removed too early if
there was several clients sharing it, causing crashes.

[1] https://codereview.chromium.org/2401343002


Review-Url: https://codereview.chromium.org/2490163002
Cr-Commit-Position: refs/heads/master@{#431235}
Store CSSPropertyID in SVGAnimatedPropertyBase
With an increasing amount of SVG attributes being "promoted" to
presentation attributes, it makes sense to try to keep the property
mapping with the other attribute related data.
To make room for these additional bits in SVGAnimatedPropertyBase, pack
some of its fields into a bitfield:

 * m_isReadOnly only needs a single bit.
 * m_type only need room for 21 different values, so 5 bits should

With this new field in place, plumb it through for SVG element
attributes, then, as a start, use the SVG property map to simplify the
implementations of isPresentationAttributeWithSVGDOM and

This could also be used to provide storage for attribute initial values
in the future (crbug.com/225807.)


Review-Url: https://codereview.chromium.org/2485663002
Cr-Commit-Position: refs/heads/master@{#431229}
Moved applyRuleSetChanges functions to StyleEngine.
A lot of the side effects were calls to StyleEngine, so moved the
method there instead. Also fixed the TODO for adding the call to make
CSSGlobalRuleSet dirty.


Review-Url: https://codereview.chromium.org/2487653002
Cr-Commit-Position: refs/heads/master@{#431227}
Let positionNewFloats() take a logicalTop parameter.
It seemed ugly to temporarily change the logical height before calling
positionNewFloats(), just to make the method behave.

Review-Url: https://codereview.chromium.org/2483023002
Cr-Commit-Position: refs/heads/master@{#431115}
Fix a subtle proguard incremental build error
Prevent a confusing incremental build failure where proguard would
read and write to the same file accidentally, failing hard. Can
happen after switching the build from not using proguard, where the
output jar is a gn-copy hardlink to the input jar, to using proguard,
where the output is written to by a script reading from the input jar.

Fix by checking if the output is not a hardlink to the input in the
wrapper script.

NB. The build normally uses proguard on an apk, but makes it possible
to try and only proguard a single jar, and the bug potentially only
happens in this case.

Review-Url: https://codereview.chromium.org/2485663003
Cr-Commit-Position: refs/heads/master@{#430890}
Before turning objects into spanners, check that they are not already spanners.
During style recalculation, we may end up in a situation where we think that we
go from a state where an object couldn't contain spanners, to being able to
contain them, while in reality, the object was able to contain spanners all

This happens when changing the writing mode on the multicol container and all
objects in the parent chain between the spanner and the multicol container (and
there is nothing that prevents the descendant from being a spanner). The
problem is that when determining whether an object is a writing mode root, we
compare the object's writing mode to that of its parent. If they are different,
we decide that it's a writing mode root. However, if we're in styleWillChange()
for said object, and its writing mode is actually about to change to the same
value as that of the parent, there'll be no writing mode root in the end.
Still, we're going to think that we used to be a writing mode root (i.e. not be
able to contain spanners).

It would be possible to fix it for writing mode roots, to provide a reliable
implementation of isWritingModeRoot(), by using a bit in LayoutObject to
specify whether it's a writing mode root, rather than using current computed
style to determine that. Using computed style during style recalculation is
risky. That said, it's probably better to be fault-tolerant for such situations
in toggleSpannersInSubtree() instead, especially since may be other (unknown,
at the time being) scenarios where this situation may occur.


Review-Url: https://codereview.chromium.org/2485173002
Cr-Commit-Position: refs/heads/master@{#430887}
Build v8 snapshot with correct default float configuration on Linux ARM
V8 currently defaults to arm_float_abi="hard" and arm_use_neon=true but
the V8 snapshot defaults to arm_float_abi="softfp" and arm_use_neon=false
on Linux ARM builds.

This patch makes both targets default to hard + neon by changing the
"is simulator build" check from comparing current_cpu with v8_current_cpu
to comparing target_cpu with v8_target_cpu instead. Similarly to how it is
checked in v8/BUILD.gn.


Review-Url: https://codereview.chromium.org/2483153004
Cr-Commit-Position: refs/heads/master@{#430776}
Tracking reference filter mutation via SVGElementProxy
This introduces SVGElementProxy - a new piece with the functionality of
DocumentResourceReference and the ReferenceFilterBuilder merged. It
provides the means to track clients of a certain element (only
SVGFilterElements for now, but will likely be extended to other types if
it ends up sticking.) An SVGElementProxy is created, and primarily owned,
by CSSURIValue. The proxy also handles loading of a resource document, if

Clients are SVGResourceClients, like before, with methods/callbacks
renamed. Some of the old functionality of SVGResourceClient has either
been moved to clients, to the proxy or been replaced with different

Mutations to the element/subtree is signaled separately from any
potential changes to the actual reference (anything that might invalidate
the element reference.)


Review-Url: https://codereview.chromium.org/2401343002
Cr-Commit-Position: refs/heads/master@{#430550}
There should never be unplaced floats from other blocks.
When positioning new floats in a block, all unplaced floats should belong to
said block. If we find unplaced floats from other blocks, someone somewhere
must have forgotten to place them on their own.

No need for code to skip such floats. DCHECK instead.

Review-Url: https://codereview.chromium.org/2479173002
Cr-Commit-Position: refs/heads/master@{#430544}
Use range-based for in toCompositorTransformOperations
Avoids the awkward-looking indexing expressions. Make casted operations
const while at it.

Review-Url: https://codereview.chromium.org/2473013002
Cr-Commit-Position: refs/heads/master@{#430247}
Don't use url from ImageResource for computed style.
ImageResource objects are shared between urls which only differ in
fragment identifier. The fragment identifier of the first requested url
is stored on ImageResource. That gave incorrect results when requesting
computed style values of backgroundImage for pseudo elements.

Use the url which is stored on StyleFetchedImage instead.


Review-Url: https://codereview.chromium.org/2474093003
Cr-Commit-Position: refs/heads/master@{#430246}
Don't include LayoutObject-derived headers where not needed.
Or, if a LayoutObject-derived header is still required, pick the most generic
one possible.

Review-Url: https://codereview.chromium.org/2474603002
Cr-Commit-Position: refs/heads/master@{#430165}
Descendants may become or cease to be spanners when an ancestor changes style.
When building the tree, when inserting something that looks like a
column spanner, we first examine all the parents all the way up to the
multicol container, to make sure that they are all valid spanner
containers. This already works fine.

In our implementation, a valid column spanner container is, roughly, a
"regular" in-flow block. Among other things, it may not establish a
new block formatting context. Nor transforms. And a few other

If the style of a valid column spanner container changes, it may end
up as no longer being a valid spanner container, and vice versa: an
invalid spanner container may become a valid spanner container, all of
a sudden.

Detect this during style change. If a block ceases to be a valid
spanner container, we need to check its subtree for spanners, and turn
them into regular column content. And, vice versa, if a block is
turned into a valid spanner container, we need to check its subtree
for column-span:all objects, which may have to be changed from regular
column content into spanners.


Review-Url: https://codereview.chromium.org/2479873002
Cr-Commit-Position: refs/heads/master@{#430005}
Link stylesheets in shadow trees do not belong to document scope.
We have incorrectly kept DCHECKs checking that stylesheets in shadow
trees come from style elements. That is no longer true, and modifying
link elements in shadow trees would trigger some of these DCHECKs.

Also, we simply used Document as the TreeScope handling link elements.
Always use the treeScope() from the associated node instead. Using the
wrong TreeScope in these cases would cause missing updates of active
stylesheets in ShadowTreeStyleSheetCollections for AnalyzedStyleUpdate.
I have not been able to find a triggering test case for this.


Review-Url: https://codereview.chromium.org/2472973002
Cr-Commit-Position: refs/heads/master@{#429877}
Add missing web_contents.h include

Review-Url: https://codereview.chromium.org/2473793002
Cr-Commit-Position: refs/heads/master@{#429853}
Mark TranslateTransformOperation final
Nothing derives from it. This also allows devirtualization of the call
to apply() for the 'translate' (independent) property.


Review-Url: https://codereview.chromium.org/2468303005
Cr-Commit-Position: refs/heads/master@{#429840}
Remove ShadowRoot::numberOfStyles().
This probably used to be an optimization which made sense when we had
<style scoped> implemented. Now, it should be equally cheap to just
check the ScopedStyleResolver member. The ScopedStyleResolver is null
when there are no active stylesheets in the tree-scope.

This also caused issue 659596 because we only registered style elements
and not link elements, which lead the code to believe there were no
rules to match from the scope when there were only link stylesheets


Review-Url: https://codereview.chromium.org/2472613004
Cr-Commit-Position: refs/heads/master@{#429824}
Properly avoid breaking inside a float's top margin.
We used to depend on stumbling upon unbreakable content (such as lines) at
column boundaries for this to work, but we failed in the really simple cases
(where there was no content at all, for instance).

Move the logic for this to float-specific code, so that we don't have to be
aware of it at several other locations in the code.

Doing this correctly during layout also helps the balancer find the right
column height. Added a test for something that used to fail in this area.

Review-Url: https://codereview.chromium.org/2479483002
Cr-Commit-Position: refs/heads/master@{#429641}
Don't let a column spanner affect the self-margin-collapsing state of the parent.
When a spanner is removed from the tree, we mark the container chain for
layout, just like we do when removing any other kind of object. The container
of a spanner is the multicol container, though, so the direct parent of the
spanner may not be marked for layout. And that should not be necessary either,
since the spanner is essentially taken out of normal flow.

We get some marking for layout for free in layoutBlockFlow(), if
pageLogicalHeightChanged, but that only goes one level deep. Eliminate the need
for layout in situations like this.

Prior to this change, we'd fail on an assert that required that the cached
state of self-collapsing be in sync with reality.

Review-Url: https://codereview.chromium.org/2473953003
Cr-Commit-Position: refs/heads/master@{#429638}
logicalHeightWithVisibleOverflow() needs to include overhanging floats.
Otherwise we might end up skipping layout of blocks that contain floats
that really need to be relaid out.

We get some marking for layout for free in layoutBlockFlow(), if
pageLogicalHeightChanged, but that only goes one level deep.

Review-Url: https://codereview.chromium.org/2474883002
Cr-Commit-Position: refs/heads/master@{#429611}
Tidy up ComputedStyle::applyTransform
Use range-based for-loops when iterating transform operations (also in
ComputedStyle::requireTransformOrigin), since it's both tidier and
avoids unnecessary index-checks (in operator[].)
Move computation of offsetX/offsetY closer to their point of usage.
Extract the size of the bounding box once, and also drop some unneeded
qualifications of enumeration values.


Review-Url: https://codereview.chromium.org/2474043002
Cr-Commit-Position: refs/heads/master@{#429598}
Make offsetTop/Left handle a relative positioned inline offsetParent correctly.
offsetTop and offsetLeft happily ignored the fact that offsetParent could
be a relative positioned inline.

I used the opportunity to change some variable names in
LayoutBoxModelObject::adjustedPositionRelativeTo() in order to hopefully
make it clearer what's going on.


Review-Url: https://codereview.chromium.org/2414683002
Cr-Commit-Position: refs/heads/master@{#429571}
Fix a bunch of generated file build flakes in //extensions
Several files in //extensions could randomly fail to build due to
missing dependencies on header generator targets, mostly mojo
and grit. Add the dependencies so builds are not flaky.


Review-Url: https://codereview.chromium.org/2452943003
Cr-Commit-Position: refs/heads/master@{#429543}
adjustedPositionRelativeTo() couldn't find offsetParent.
LayoutBoxModelObject::adjustedPositionRelativeTo() could get confused
by inline continuations, and could fail if offsetParent itself was a split
continuation.  If the child belongs to the second part of the continuation,
we'll instead race to the root of the tree.  By comparing with the node instead,
we correctly identify the offsetParent and stop the search.


Review-Url: https://codereview.chromium.org/2454693003
Cr-Commit-Position: refs/heads/master@{#429541}
Simplify SVG pending resource (re)validation
The contents of the m_pendingResourcesForRemoval map has a lifespan that
does not extend beyond the scope of SVGElement's
buildPendingResourcesIfNeeded() method.
So instead of passing through the map in SVGDocumentExtensions, just
take the corresponding set for the pending 'id' and iterate that
directly, avoiding indirection and complicated removal sequence.
This also allow SVGDocumentExtensions::removeElementFromPendingResources
to be simplified, so do that, and then remove the
m_pendingResourcesForRemoval map from SVGDocumentExtensions.


Review-Url: https://codereview.chromium.org/2473483004
Cr-Commit-Position: refs/heads/master@{#429539}
Remove pageLogicalHeightChanged() from LayoutState.
It was only used from insertFloatingObject(), and in a bogus manner at that.
Added a TODO instead. We haven't even positioned the float at this point, so
attempting layout for pagination here is essentially bad.

We make sure to relayout correctly for pagination when we get to
positionNewFloats() later, anyway.

Review-Url: https://codereview.chromium.org/2467353003
Cr-Commit-Position: refs/heads/master@{#429533}
Reland of Improve how the column balancer handles top margins on floats. (patchset #1 id:1 of https://codereview.chromium.org/2468193002/ )
Reason for revert:
csspaint/invalidation-background-image.html was also failing (flaky) before landing this CL.

Original issue's description:
> Revert of Improve how the column balancer handles top margins on floats. (patchset #3 id:40001 of https://codereview.chromium.org/2465363003/ )
> Reason for revert:
> Speculative revert to fix csspaint/invalidation-background-image.html failure on "WebKit Win7 (dbg)" bot.
> Failed build:
> https://build.chromium.org/p/chromium.webkit/builders/WebKit%20Win7%20%28dbg%29/builds/7961
> Original issue's description:
> > Improve how the column balancer handles top margins on floats.
> >
> > Float margins do not collapse with column boundaries, so we should make room
> > for them after the break, if the border box of the float starts in the next
> > column.
> >
> > Let the balancer work on the margin box of the float (and the border box for
> > all other objects). For floats, we want to insert breaks before the
> > margin-before edge, not the border-before edge. This lets us remove
> > some special-code for unbreakable floats in InitialColumnHeightFinder, which
> > was the only place that previously bothered about this.
> >
> > Changed how we determine which objects to process. We used to include the
> > overflow both before and after the border box, but we really don't have to
> > bother with content preceding it, since that shouldn't undergo fragmentation
> > anyway.
> >
> > Discovered (one test regressed) that logicalHeightIncludingOverflow() also
> > included clipped overflow, which certainly wasn't the intention. This didn't
> > make much of a difference as long as the method was only called to check if we
> > could skip re-layout. But now we also use it to determine the column height.
> > Fixed it to only include visible overflow and renamed it to
> > logicalHeightWithVisibleOverflow().
> >
> > Committed: https://crrev.com/7c82da727f64121aa34aa1decf82452c37ef7a2d
> > Cr-Commit-Position: refs/heads/master@{#429245}
> TBR=eae@chromium.org,mstensho@opera.com
> # Skipping CQ checks because original CL landed less than 1 days ago.
> NOTRY=true
> Committed: https://crrev.com/58f81484437d367285de9f0fc1fdd4034eb5c333
> Cr-Commit-Position: refs/heads/master@{#429265}

# Skipping CQ checks because original CL landed less than 1 days ago.

Review-Url: https://codereview.chromium.org/2471933002
Cr-Commit-Position: refs/heads/master@{#429415}
Move LayerHitTestRects to a separate file.
This way, ScrollingCoordinator.h doesn't need to include LayoutObject.h

Review-Url: https://codereview.chromium.org/2468073002
Cr-Commit-Position: refs/heads/master@{#429311}
Move MapCoordinatesMode and MapCoordinatesFlags to a separate header.
This way, LayoutGeometryMap.h doesn't need to include LayoutObject.h

Review-Url: https://codereview.chromium.org/2472573002
Cr-Commit-Position: refs/heads/master@{#429294}
Improve how the column balancer handles top margins on floats.
Float margins do not collapse with column boundaries, so we should make room
for them after the break, if the border box of the float starts in the next

Let the balancer work on the margin box of the float (and the border box for
all other objects). For floats, we want to insert breaks before the
margin-before edge, not the border-before edge. This lets us remove
some special-code for unbreakable floats in InitialColumnHeightFinder, which
was the only place that previously bothered about this.

Changed how we determine which objects to process. We used to include the
overflow both before and after the border box, but we really don't have to
bother with content preceding it, since that shouldn't undergo fragmentation

Discovered (one test regressed) that logicalHeightIncludingOverflow() also
included clipped overflow, which certainly wasn't the intention. This didn't
make much of a difference as long as the method was only called to check if we
could skip re-layout. But now we also use it to determine the column height.
Fixed it to only include visible overflow and renamed it to

Review-Url: https://codereview.chromium.org/2465363003
Cr-Commit-Position: refs/heads/master@{#429245}
Make siblingRules and uncommonAttributeRules private.
These vectors only need to be modified inside the RuleFeatureSet class.
Added methods for const access.


Review-Url: https://codereview.chromium.org/2469143002
Cr-Commit-Position: refs/heads/master@{#429220}
Don't always have to relayout a child when fragmentainer height is unknown.
Fragmentainer height is unknown in the first multicol layout pass, before
the initial balancing attempt. It also happens when we have to restart the
column balancing algorithm (due to dynamic content change, containing block
logical width change, etc.). In this case we only need to relayout if the child
did previously break (because then there may be pagination stuts inside that we
need to clear).

Review-Url: https://codereview.chromium.org/2473433002
Cr-Commit-Position: refs/heads/master@{#429135}
Avoid unnecessary relayout of floats when not paginated.
Made a mistake when excluding floats from being considered for pagination
relayout skipping, by ALWAYS marking them for layout, EVEN WHEN NOT PAGINATED.
Make sure that we check that we're paginated first. No need to slow down layout
when not paginated.

Broke the logic for determining whether we need layout or not into a separate
method, so that we don't need a quarter of a dozen calls to
setChildNeedsLayout(). The logic is now reversed; rather than checking if we
don't need layout, we check if we DO need layout. Tried to make the code a bit
clearer, and document what goes on at each step.

Review-Url: https://codereview.chromium.org/2459293004
Cr-Commit-Position: refs/heads/master@{#429051}
Reduce CSSStyleSheet size by moving bool member.
Grouping bool members together saved 8 bytes from 120 to 112 on 64 bit

Also started using class initializers, removed unnecessary nullptr
initialization of Member<>, and a 0 -> nullptr.


Review-Url: https://codereview.chromium.org/2469693002
Cr-Commit-Position: refs/heads/master@{#428977}
Rewrite css3/filters/effect-reference-delete.html
Make sure we get a layout+paint before removing the <svg> (w/ descendant
filter) so that we test a proper transition.

Review-Url: https://codereview.chromium.org/2453403002
Cr-Commit-Position: refs/heads/master@{#428706}
Make sure to always reset the cached filter in ReferenceFilterOperation

Review-Url: https://codereview.chromium.org/2453033004
Cr-Commit-Position: refs/heads/master@{#428678}
Be more restrictive about forcing relayout of children for pagination.
Avoid full subtree re-layouts that could especially occur in tables. This could
slow down printing and multicol by a lot.

This change makes PerformanceTests/Layout/multicol/deeply-nested-tables.html
about 1300 times faster (from 5.1 runs/s to 6813 runs/s when tested
locally). The test in bug 487026 will now show print preview instantly, rather
than taking a couple of minutes to finish.

Store the amount of space used (including the trailing strut) before the first
break (if any) instead of the offset from the top of the first fragmentainer.
We'll use this information in markChildForPaginationRelayoutIfNeeded() to
determine if we really need to force re-layout of some child. We really only
need to force re-layout of a child if there's a chance that it needs to
recalculate its pagination struts. It won't need to recalculate anything if we
know that there were no fragmentainer breaks AND that there won't be any if
we re-lay out. Even if there ARE fragmentainer breaks in there, we can still
skip layout if we know that the breaks will remain at the exact same locations
relative to the child. Store this information after layout by calling
updateFragmentationInfoForChild(). We need to include the overflow portion
after the bottom border edge of the child, since overflow also gets fragmented.

The old implementation of markChildForPaginationRelayoutIfNeeded() re-laid out
everything as long as LayoutState's pageLogicalHeightChanged() was true.
However, this flag is only set when entering layout of some fragmentation
context. Some objects, such as tables, requires multi-pass layout. If the flag
was true the first time the object was laid out, it's going to be true in all
subsequent re-layouts as well, potentially resulting in numerous deep layouts.


Review-Url: https://codereview.chromium.org/2462643002
Cr-Commit-Position: refs/heads/master@{#428626}
Add missing generator dependencies in content/renderer/mus
Building //content/renderer/mus could fail due to transitive
dependencies on header generators pulled in via render_frame_impl.h
and render_thread_impl.h (building render_widget_mus_connection.cc
or compositor_mus_connection.cc could fail).

Unfortunately //content/renderer deps on //content/renderer/mus,
so there's no easy way to get these deps for free (cyclic dep).


Review-Url: https://codereview.chromium.org/2461643002
Cr-Commit-Position: refs/heads/master@{#428428}
Add a //chrome/common dep to //chrome/browser/devtools
Devtools include chrome/common headers which include the generated
features header, so without the dep the build is flaky.


Review-Url: https://codereview.chromium.org/2454943004
Cr-Commit-Position: refs/heads/master@{#428413}
Move Document global rule data to CSSGlobalRuleSet.
This CL is split out from [1] with some modifications.

Instead of storing these data in the StyleResolver, create a new class
to store them in StyleEngine instead. See the design document linked
from issue 401359 which talks about moving this content off of
StyleResolver. Also made a note that we should further try to contain
as much of this data as possible per TreeScope to avoid the need for
constantly having to update these meta data for shadow tree

We get rid of some of the duplicate storing of some of these features.
See what was previously set on StyleEngine (resetCSSFeatureFlags()).

This is also in preparation for async stylesheet update (issue 567021).
There are few places where we synchronously update this new rule set
directly after marking it as dirty which will happen later when all
parts of [1] lands.

Another synchronous update we will be able to remove later is making
the RuleFeatureSet up-to-date when scheduling style invalidations
(marked as TODOs for sync calls to ensureResolver()). The need for
these calls is supported by the added invalidation tests which would
otherwise fail.

[1] https://codereview.chromium.org/1913833002/


Review-Url: https://codereview.chromium.org/2451893003
Cr-Commit-Position: refs/heads/master@{#428327}
Missing document null pointer check in Internals.
updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks did not check
if the document was null before using it.


Review-Url: https://codereview.chromium.org/2461633002
Cr-Commit-Position: refs/heads/master@{#428312}
Use StyleEngine::resetAuthorStyle instead of clearScopedStyleResolver.
The former will make sure the shadow root is removed from
treeBoundaryCrossingScopes appropriately.

This code is not in production yet, so there were no observable bug.


Review-Url: https://codereview.chromium.org/2456753003
Cr-Commit-Position: refs/heads/master@{#428275}
Provide a dedicated getter for the offset to a repeatable THEAD.
pageLogicalOffset() is otherwise only used as an optimization during layout,
and the way we're optimizing for fragmenting is soon going to change.

Review-Url: https://codereview.chromium.org/2455733003
Cr-Commit-Position: refs/heads/master@{#428203}
Don't establish LayoutState for LayoutTableRow objects.
Table rows are not the containing block of anything. The real containing block
of a table cell is their table section, not the table row.

With this change, we no longer need to pass the object's location to
LayoutState(). Just call locationOffset() on the object in the constructor
instead, rather than doing it at all call sites.

Review-Url: https://codereview.chromium.org/2458823002
Cr-Commit-Position: refs/heads/master@{#428190}
Need to remove line pagination struts when no longer fragmented.
We only used to recalculate pagination struts on lines when we were inside a
fragmentation context, but if said fragmentation context ceases to be one, we
need one final strut recalculation pass, to get rid of them all.


Review-Url: https://codereview.chromium.org/2460673002
Cr-Commit-Position: refs/heads/master@{#428161}
Add a couple of regression tests for float fragmentation.
These tests change the fragmentainer heights, so that the float will fit in the
first fragmentainer afterwards, rather than in the second one.

Review-Url: https://codereview.chromium.org/2445193007
Cr-Commit-Position: refs/heads/master@{#428160}
Need a deep layout pass when becoming (un)fragmented.
When an object ceases to be fragmented (e.g. when leaving print preview), there
may be pagination struts that need to be removed. Therefore, we need to lay out
all descendants of a block that ceased to establish a fragmentation context.

Similarly, when becoming fragmented (e.g. when entering print preview), we need
to go through every descendant. There may both be implicit and forced breaks to


Review-Url: https://codereview.chromium.org/2454083002
Cr-Commit-Position: refs/heads/master@{#428062}
Allow pagination struts to push objects below the exact top of the next column.
The top margin of a float may push its border box below the top of the next

Similarly, a repeated table header may do the same to the first row in the next
column, to make room for itself above it.

The column balancer had assertions to boom at such situations, but it's pretty
clear now that it's an unreasonable requirements that sturts take us to the
exact top of the next column.

Added visual tests that crashed before (in debug). No behavioral changes here,
apart from the fact that the tests no longer crash.

Review-Url: https://codereview.chromium.org/2456003002
Cr-Commit-Position: refs/heads/master@{#428047}
Removed unused StyleEngine::didRemoveShadowRoot().
Also tried to figure out and document why we are clearing
ScopedStyleResolvers for shadow trees in clearResolver().


Review-Url: https://codereview.chromium.org/2454903002
Cr-Commit-Position: refs/heads/master@{#427950}
Removed unnecessary rule feature reset when no ScopedStyleResolver.
Resetting rule features when a shadow tree did not contain any
stylesheets, and hence didn't have a ScopedStyleResolver, caused a
performance regression in the select-single-remove performance test.

UA shadow trees typically don't have any stylesheets.

This is a regression from [1].

[1] https://codereview.chromium.org/2443933002


Review-Url: https://codereview.chromium.org/2452733004
Cr-Commit-Position: refs/heads/master@{#427949}
LayoutState doesn't need to store both layout and pagination offset.
We only ever used those two in combination to figure out how far away we were
from the start of the pagination context. So, let's just store that directly instead.
This allows us to clean up quite a bit. Also changed LayoutState() to do more
early returns, when we have no more work left to do.

Also consolidated two sections that disabled pagination for unsupported content
(one for SVG and one for other unbreakable content).

Review-Url: https://codereview.chromium.org/2444193009
Cr-Commit-Position: refs/heads/master@{#427945}
Clear m_treeBoundaryCrossingScopes when reconstructing StyleResolver.
When m_treeBoundaryCrossingScopes were part of StyleResolver, they were
cleared when the StyleResolver was cleared. Now that they outlive the
StyleResolver, they need to be cleared separately.


Review-Url: https://codereview.chromium.org/2450353002
Cr-Commit-Position: refs/heads/master@{#427912}
Fix a large number of missing dependencies in the blink gn build
Make all blink_core_sources targets public_dep on all the code
generators in core to ensure required headers are always generated first
and a successful build does not depend on lucky ordering. Manually fix
similar dep issues in core/inspector.

There are now more dependencies than strictly necessary, but they will
only trigger the generators with no effect on build commands (tested by
checking that the patch doesn't trigger a rebuild of any c++ code).

The end result is that the total number of targets that don't have proper
deps in the 'chrome' target build goes down from over 1800 to about 40,
and no missing dependencies on gen/blink files exist.


Review-Url: https://codereview.chromium.org/2452473004
Cr-Commit-Position: refs/heads/master@{#427856}
The column balancer needs to look inside inlines.
There may be floats there.

Split traverseSubtree() into traverseLines() and traverseChildren(), so that
traverseChildren() can easily be called directly when at inlines.


Review-Url: https://codereview.chromium.org/2453743002
Cr-Commit-Position: refs/heads/master@{#427724}
Fix some mojo dependencies in blink
Several places in blink were using mojo headers without a dependency on
mojo targets that generate said headers, causing build flakiness.


Review-Url: https://codereview.chromium.org/2453653003
Cr-Commit-Position: refs/heads/master@{#427659}
No longer mark two tests in ietestcenter/css3/multicolumn as failing.
They pass now, probably because of the fix for bug 291616.


Review-Url: https://codereview.chromium.org/2446023003
Cr-Commit-Position: refs/heads/master@{#427370}
Call willInsertBody() in MediaDocument::createDocumentStructure()
Follow up on https://codereview.chromium.org/1343493002 and add the same
willInsertBody() call that ImageDocument has.

Review-Url: https://codereview.chromium.org/2427563002
Cr-Commit-Position: refs/heads/master@{#427312}
Don't assume python is in /usr/bin in js_minify.py

Review-Url: https://codereview.chromium.org/2438293002
Cr-Commit-Position: refs/heads/master@{#427304}
Deal with canceled requests when flushing deferred messages.
Flushing deferred messages might lead to a request being canceled
(e.g. when an ImageResource loads a corrupt image). The code didn't
fully take this into account which would cause crashes (and resource
leaks if it would have survived).


Review-Url: https://codereview.chromium.org/2425173003
Cr-Commit-Position: refs/heads/master@{#427298}
Move TreeBoundaryCrossingScopes to StyleEngine.
This is split out of the work for async stylesheet updates [1], but is
also part of the work on componentized style resolving in general.

The moved resetAuthorStyle method on StyleEngine may soon be gone
altogether as it does so in [1].

The plan is that TreeBoundaryCrossingScopes will also be completely
gone when we remove support for Shadow DOM v0. For Shadow DOM v1 we can
look up the scoped resolvers for the affecting scopes directly like we
already do in StyleResolver::matchScopedRules for the pure v1 case.

The documentation of the special casing of VTT and custom pseudo
elements is updated to not suggest that these rules are handled as part
of boundary crossing scopes as the current solution is better once v0
shadows go away.

[1] https://codereview.chromium.org/1913833002


Review-Url: https://codereview.chromium.org/2443933002
Cr-Commit-Position: refs/heads/master@{#427284}
Fix more null-checks in SVGLengthContext::convertValueFrom*
The following methods in SVGLengthContext:


needs the same treatment as convertValueFromCHSToUserUnits got in


Review-Url: https://codereview.chromium.org/2449433002
Cr-Commit-Position: refs/heads/master@{#427080}
Remove unused hasPendingResourceUpdate bit from LayoutObject.
Also recounted, updated and corrected total bit count.

Review-Url: https://codereview.chromium.org/2442283002
Cr-Commit-Position: refs/heads/master@{#427050}
Rename collectTreeBoundaryCrossingRules.
Include V0Cascade order to reflect that this is the legacy code for
Shadow DOM V0 cascading order in pure V0 documents.


Review-Url: https://codereview.chromium.org/2445673002
Cr-Commit-Position: refs/heads/master@{#427042}
Use a converter for building style value for 'transform'
Also change TransformBuilder::createTransformOperations to return the
TransformOperations rather than use an out argument.

Review-Url: https://codereview.chromium.org/2435413002
Cr-Commit-Position: refs/heads/master@{#427036}
Avoid copying value in ComputedStyle CoW comparions (compareEqual)
Because of the cast of the RHS, |u|, a copy would be generated, with
code and cycle bloat as the result. In some cases this can even have
prevented inlining. Particularly nasty examples:

 bool compareEqual(const Vector<LengthPoint>&, const Vector<LengthPoint>&) [210 bytes]
 bool compareEqual(const Vector<CSSPropertyID>&, const Vector<CSSPropertyID>&) [274 bytes]
 bool compareEqual(const Vector<GridTrackSize>&, const Vector<GridTrackSize>&) [182 bytes]
 bool compareEqual(const HashMap<String, GridArea>&, const HashMap<String, GridArea>&) [308 bytes]
 bool compareEqual(const TransformOperations&, const TransformOperations&) [441 bytes]
 bool compareEqual(const LengthBox&, const LengthBox&) [249 bytes]

Remove the U->T cast in compareEqual to avoid the copies. Nothing seems
to require this coercion (anymore?) This eliminates the above symbols
entirely. A total binary size reduction of >30k (x86-64; non-official) also
indicates even the simpler cases/types may have benefited.

Review-Url: https://chromiumcodereview.appspot.com/2438353002
Cr-Commit-Position: refs/heads/master@{#426990}
Always evaluate media features to true without MediaValues.
Having a constructor taking bool made it possible to construct a
MediaQueryEvaluator passing a pointer to an object of an arbitrary
type as the pointer was converted to a bool without a warning.

By closer inspection, the use of the m_expectedResult value had two
purposes. One was to return true for matching media type ignoring the
rest of the media query. The other cases were for testing purposes
where there was no media rules to match, so the result didn't matter.

Since there are no useful applications for returning false for media
queries containing expressions in addition to type, we can safely
return true for all query expression when no MediaValues object is

There is one place we change the behavior. The StyleResolver
constructor has a fallback evaluator when we have no FrameView. That
should never happen, though, and it would yield incorrect results
regardless of whether we would always return true or false for media
query expressions.


Review-Url: https://chromiumcodereview.appspot.com/2432153005
Cr-Commit-Position: refs/heads/master@{#426752}
Fix NULL pointer dereference in FinishedAsyncCopyRequest()
Due to undefined (favorably right to left) argument evaluation order,
the tracker might have been passed and set to NULL before the window
is looked up which results in a NULL pointer dereference.


Review-Url: https://chromiumcodereview.appspot.com/2435033002
Cr-Commit-Position: refs/heads/master@{#426748}
MediaValuesInitialViewport passed to MediaQueryEvaluator as bool.
The test coverage for [1] was not good enough. We tried to pass a
MediaValues pointer into the MediaQueryEvaluator constructor, but since
none of the constructors took such a type, it was converted into a bool
for which there was a constructor.

I'm planning to change the bool parameter to an enum in a follow-up CL
to avoid such mistakes in the future.

[1] https://codereview.chromium.org/2414343002/


Review-Url: https://chromiumcodereview.appspot.com/2430923005
Cr-Commit-Position: refs/heads/master@{#426747}
Pay attention to tall rowspanned cells in the first layout pass.
If a rowspanned cell gets fragmented, and this cell needs to stretch the table
rows in order to fit, only stretch the last row (i.e. the one we're currently
laying out). That's the only thing we can do if we don't want mess up
fragmentation (pagination struts) of earlier content.

Furthermore, to leave those rows completely alone, don't let a subsequent
rowspanned cell that shares at least one row with the previous rowspanned cell
stretch those rows, either, as that would lead to unfair height distribution
anyway (since the last row has already got all the extra space).
table-overlapping-rowspan.html tests this.


Review-Url: https://chromiumcodereview.appspot.com/2433403002
Cr-Commit-Position: refs/heads/master@{#426590}
Clean up LayoutTableSection::calcRowLogicalHeight() a bit.
Since nobody apparently wants to deal with a rowspanned cell unless we're at
its first row, just skip that cell for subsequent rows, instead of having
checks for this everywhere.

Also removed a debug hashmap that was just used to assert that we didn't add
duplicate cells to a vector. Check the vector directly instead.

Review-Url: https://chromiumcodereview.appspot.com/2434033003
Cr-Commit-Position: refs/heads/master@{#426555}
Remove last-minute row height stretching for pagination.
This code no longer has any effect, since we now fragment and set the correct
row heights way BEFORE cell alignment and flexing. It was also buggy, in that
it didn't recalculate intrinsic padding after resizing the row.


Review-Url: https://chromiumcodereview.appspot.com/2433413002
Cr-Commit-Position: refs/heads/master@{#426512}
Performance test for deeply nested tables inside multicol.
This is similar to printing deeply nested tables, and we have serious
performance issues with this.

Landing the performance test separately from the actual fix, so that we can
observe the improvement when the fix eventually lands.


Review-Url: https://chromiumcodereview.appspot.com/1695193006
Cr-Commit-Position: refs/heads/master@{#426461}
Specified row height should be applied during initial section layout.

Review-Url: https://chromiumcodereview.appspot.com/2434543004
Cr-Commit-Position: refs/heads/master@{#426441}
Remove first-line-in-cell strut subtraction workaround.
This is no longer needed. In fact, it was causing some trouble.


Review-Url: https://chromiumcodereview.appspot.com/2438613004
Cr-Commit-Position: refs/heads/master@{#426435}
Simplify SVGAnimated* initialization
In several cases, all initial values are the same, so callers of
SVGAnimated<TYPE>::create can be relieved of the duty of calling
SVG<TYPE>::create() explicitly.

This affects:

  SVGAnimatedString and

These should hopefully also all reset to the correct value when
encountering an invalid (string) value.


Review-Url: https://chromiumcodereview.appspot.com/2436793002
Cr-Commit-Position: refs/heads/master@{#426429}
Collect @viewport before constructing RuleSets.
- Move ViewportStyleResolver to StyleEngine.

- Only create a ViewportStyleResolver for top level documents.

- Collect @viewport rules via the DocumentStyleSheetCollection.

- Use the initial viewport size for resolving viewport relative

- Introduce initialViewportChanged() and viewportRulesChanged() in
  StyleEngine to trigger re-collection and resolution of the actual
  viewport. These currently trigger an immediate call to updateViewport
  which will later be a part of the document lifecycle phase for
  updating active stylesheets.

This finally fixes issues 332763, 455136, and 463098.


Review-Url: https://chromiumcodereview.appspot.com/2420413005
Cr-Commit-Position: refs/heads/master@{#426427}
Initial viewport is not the same as FrameView rect.
FrameView rect is also changed by the visual viewport.

Set the initial viewport size on FrameView whenever it changes in
WebViewImpl and use it for matching media queries when collecting
@viewport rules. See [2] for spec reference.

This is fixing what was introduced in [1].

[1] https://codereview.chromium.org/2414343002/
[2] https://www.w3.org/TR/css-device-adapt-1/#media-queries


Review-Url: https://chromiumcodereview.appspot.com/2431613002
Cr-Commit-Position: refs/heads/master@{#426424}
Move table row pagination strut insertion to the first layout pass.
Pagination struts are inserted before a table row, when we should avoid
breaking inside it, and it doesn't fit as a whole in its current fragmentainer.
We should avoid breaking inside rows when their break-inside is "avoid", or
when there are repeating table headers (which turns on break-inside:avoid for
all rows in the table).

This CL also includes the code that deals with repeating headers, since it
proved hard to separate it from the rest.

We need to make sure to subtract the struts from previous rows' height now;
just like we don't include border spacing in the rows, we should also omit the
pagination strut of the next row. In order to be consistent about this,
layoutRows() in LayoutTableSection now uses the rows' logical heighs more
extensively than before (rather than using the m_rowPos array to calculate
heights). This has an implication for rowspanned cells. We now need to wait
until we are at their last row before processing them, since we calculate row
heights on the fly. There's a small fix here. Previously, the strut wasn't
baked into the logical top of a table row, unlike all other layout objects.
This resulted in wrong offsets for table rows after fragmentainer breaks,
but the cells in there still had correct offsets, so it wasn't possible
to observe this bug in any visual test. It does affect a couple of
dump-render-tree printing tests, though. Added a couple of tests for this
on my own, which use offsetTop and offsetHeight.

table-disable-fragmentation.html is just a regression test. We need to be
careful to ignore struts when not fragmented. It passed before and it passes
now, but I nearly broke it while working on this.


Review-Url: https://chromiumcodereview.appspot.com/2433473002
Cr-Commit-Position: refs/heads/master@{#426265}
Clean up break-inside restriction propagation from table headers.
If a table header has break-inside:avoid, our implementation currently
propagates that to all table rows in the table. Make this more obvious (and
consistent) with a getPaginationBreakability() override in LayoutTableRow,
rather than checking it at only one place (paginationStrutForRow()), although
that may very well have been the only place that needed to care.

No behavioral changes expected.

Review-Url: https://chromiumcodereview.appspot.com/2426553004
Cr-Commit-Position: refs/heads/master@{#426020}
Set logical top and height of table rows and cells in the first layout pass.
This gives the fragmentation machinery an opportunity to insert breaks at the
right places. We previously assumed that all cells were at the top of their
table section, so break insertion was completely bogus. While we'd get a second
chance to break correctly in the second layout pass, this doesn't always work
too well. There's currently some code in layoutRows() in LayoutTableSection
that attempts to adjust the row height when we change where we break inside a
table cell, but it doesn't re-align cells vertically after this adjustment.
That code must die, and this CL is a preparatory step.


Review-Url: https://chromiumcodereview.appspot.com/2423403002
Cr-Commit-Position: refs/heads/master@{#426015}
Removed unused includes from Internals.cpp.

Review-Url: https://codereview.chromium.org/2428543004
Cr-Commit-Position: refs/heads/master@{#425945}
Implement collection of @viewport rules from DocumentStyleCollection.
The @viewport rules will be recollected and re-resolved from a new
updateViewport() method. Rule will need to be re-collected when
stylesheets are added, or when media queries change. Re-resolution
needs to happen when the viewport descriptors contain vh/vw units, or
after a re-collection of rules.

Store the viewport and device dependent mq results on the
ViewportStyleResolver as these may be different from the results
collected when constructing the rulesets because of the initial/actual
viewport difference. The device dependent will not be different, but
nested media queries may cause some media queries to be skipped for
ruleset construction which would not be skipped for @viewport rule

We also change the existing code to lazily reset() in preparation for
the re-collect/re-resolve distinction.


Review-Url: https://codereview.chromium.org/2424823002
Cr-Commit-Position: refs/heads/master@{#425942}
Separate method for calculating logical height based on CSS properties.
Move it out of LayoutTable::layout(), since that method is more than crowded
enough as it is.

Had to make convertStyleLogicalHeightToComputedHeight() a const method, since I
decided to make the new method const. Constified
convertStyleLogicalWidthToComputedWidth() as well, for the sake of consistency.

Review-Url: https://codereview.chromium.org/2422103003
Cr-Commit-Position: refs/heads/master@{#425757}
Disable row stretching for tables crossing fragmentainer boundaries.
Edge also does this.

Allowing rows to be stretched and thus moved after fragmentation would require
us to re-fragment (since the fragmentainer boundaries would be elsewhere, due
to row stretching), then re-stretch, the re-re-fragment, and so on (cyclic


Review-Url: https://codereview.chromium.org/2421133002
Cr-Commit-Position: refs/heads/master@{#425705}
Add missing exclusive_access_manager.h includes

Review-Url: https://codereview.chromium.org/2424773002
Cr-Commit-Position: refs/heads/master@{#425670}
Spell-checking and proof-reading WhitespaceLayoutObjects.md.

Review-Url: https://codereview.chromium.org/2423963002
Cr-Commit-Position: refs/heads/master@{#425663}
Removed incorrect comment about raw pointer.
LocalFrame now traced as Member of MediaValuesDynamic.


Review-Url: https://codereview.chromium.org/2417973002
Cr-Commit-Position: refs/heads/master@{#425629}
Implement MediaValues for initial viewport.
Viewport-dependent media queries evaluate in the context of the initial
viewport when collecting @viewport rules as specified in [1]. Implement
a MediaValuesInitialViewport which returns the initial viewport
dimensions instead of the actual viewport. This change doesn't fix
issue 332763 until we start collecting author @viewport rules before
creating RuleSets.

[1] https://www.w3.org/TR/css-device-adapt-1/#media-queries


Review-Url: https://codereview.chromium.org/2414343002
Cr-Commit-Position: refs/heads/master@{#425628}
Lay out table children in visual order, and set position and size.
Set caption and section positions before the first layout pass, and set the
logical height right after. This will help the fragmentation code break at the
right places.

By doing it in visual order right away we can also get rid of some code that
dealt with sections being moved after layout.


Review-Url: https://codereview.chromium.org/2421613002
Cr-Commit-Position: refs/heads/master@{#425425}
Correctly check if we have a valid page height before checking remaining space.
LayoutState::pageLogicalHeight() is bogus, and the sooner we convince it to
take a long walk on the short pier, the better. :(

Additionally, bail out earlier from fragmentation-specific code. No need to
waste time on calling crossesPageBoundary() when not fragmented.


Review-Url: https://codereview.chromium.org/2413413003
Cr-Commit-Position: refs/heads/master@{#425420}
Simpler viewportAndroid.css setup for WebFrameTests.
Enable use of viewportAndroid.css by setting WebViewportStyle::Mobile
instead of explicitly parsing the sheet as part of the tests.

Also corrected some typos.


Review-Url: https://codereview.chromium.org/2423463002
Cr-Commit-Position: refs/heads/master@{#425355}
Clean up SVGViewSpec::parseViewSpecInternal
Make this function slightly more readable by partitioning it as:
  1) Parse outer function ("svgView")
  2) For all functions:
  2.1) Match/parse "function name"
  2.2) Parse arguments to said function

This gets rid of a lot of the parameter list boilerplate that every case
shares. (I.e handling '(' and ')'.)

Also change to use skipExactly and skipUntil from ParsingUtilities.h.

Review-Url: https://codereview.chromium.org/2421863002
Cr-Commit-Position: refs/heads/master@{#425315}
Don't generate RuleSets for viewport UA sheets.
Start collecting UA @viewport rules from the StyleSheetContents instead
of the RuleSet. The reason is that we need to collect viewport rules
before creating the RuleSet in order to use the correct actual viewport
for evaluating media queries. This is split out from [1].

Also introducing a separate MediaQueryEvaluator in the
ViewportStyleResolver which should eventually be based on the initial
viewport and not the actual viewport as described in the CSS Device
Adaptation spec.

[1] https://codereview.chromium.org/2405143003


Review-Url: https://codereview.chromium.org/2410283005
Cr-Commit-Position: refs/heads/master@{#425284}
Add hasViewportRule() flag to StyleSheetContents.
This is a pre-requisite for collecting viewport rules before generating
the RuleSet. The RuleSet contents depends on media query evaluation,
which in turn depends on viewport size resolution, which means we are
currently may generate the RuleSet, and recalculate style, twice in the
presence of both @media and @viewport.

This CL is split out from [1] which in turn is split out from [2].

[1] https://codereview.chromium.org/2405143003/
[2] https://codereview.chromium.org/1913833002/


Review-Url: https://codereview.chromium.org/2408353003
Cr-Commit-Position: refs/heads/master@{#425273}
Support margin-top for legend in fieldset.
The implementation aligns with Edge, Gecko centers the legend+margins, which
looks undesirable to me.  The specs say nothing about this.

The new behaviour causes two tests to change, both have been rebaselined. One
was additionally modified to not trigger the scrollbar, which in turn would
render differently on various platforms.


Review-Url: https://codereview.chromium.org/2396813002
Cr-Commit-Position: refs/heads/master@{#425127}
Top-align table cells in rows that cross fragmentainer boundaries.
Ignore whatever vertical-align says and force everything to be top aligned in
those cases. Edge also behaves like this.

Doing both fragmentation and vertical alignment for table parts could cause
unresolvable situations (cyclic dependencies).

Two tests that depended on vertical alignment working under such circumstances
are now invalid, and were therefore removed.


Review-Url: https://codereview.chromium.org/2412923002
Cr-Commit-Position: refs/heads/master@{#425112}
Make HarfBuzzFace release SimpleFontData.
HarfBuzzFace did a retained look up of SimpleFontData from the
FontDataCache but never released the SimpleFontData. This caused the
SimpleFontData to remain in the cache, indefinitely holding on to
SkFontFaces and all associated data. This fix makes HarfBuzzFace
release the SimpleFontData when deleted.


Review-Url: https://codereview.chromium.org/2411643002
Cr-Commit-Position: refs/heads/master@{#424993}
Add the Ahem font license
Review-Url: https://codereview.chromium.org/2397303003
Cr-Commit-Position: refs/heads/master@{#424769}
documentStyleSheetCollection() is always non-null.
Return a reference instead of a pointer to make that clear.


Review-Url: https://codereview.chromium.org/2405793002
Cr-Commit-Position: refs/heads/master@{#424706}
Push hasValidAttributeName/Type down into SVGAnimateElement
Introduce a new "validator" method for SVGSMILElements - hasValidTarget.
With this new method in place, the hasValidAttributeType and
hasValidAttributeName methods can be pushed down the hierarchy to where
they belong, namely SVGAnimateElement.
As a bonus, some conditions and assertions can be simplified.


Review-Url: https://codereview.chromium.org/2408913002
Cr-Commit-Position: refs/heads/master@{#424389}
Consolidate FilterOperation and FilterEffect mapRect implementations
The FilterOperations and FilterEffects for drop-shadow and gaussian blur
has very similar but slightly different implementations.
Restructure the code a bit so that the entire thing can be shared/reused
between the two different code-paths. The new canonical location is the
corresponding FilterEffect (FEGaussianBlur and FEDropShadow.)

Review-Url: https://codereview.chromium.org/2393993004
Cr-Commit-Position: refs/heads/master@{#424263}
Remove davve@ from OWNERS files
Recently I haven't had, and don't expect to get, much time to
contribute to Blink.


Review-Url: https://codereview.chromium.org/2406823002
Cr-Commit-Position: refs/heads/master@{#424130}
Document LayoutObject generation for whitespace nodes.

Review-Url: https://codereview.chromium.org/2402653002
Cr-Commit-Position: refs/heads/master@{#423947}
Don't break before a first in-flow block container.
There's no break opportunity there, but break-inside:avoid used to trick us
into inserting a break there anyway in some cases.

As part of this work, we need allowsPaginationStrut() to check better if a
strut is allowed, or it might just end up getting eaten and forgotten about by
a first in-flow block further up in the tree. This matters for monolithic
content [1], such as lines and image blocks. We should never break inside
those, so allow breaking before them, even if they are the first piece of
content inside some block (just like we did before this change).
break-before-first-line-in-first-child.html and image-block-as-first-child.html
test that we don't regress in this regard.

Also removed a FIXME about checking for sufficient height. This would be
incorrect to fix. If there's no break point here, we have to propagate the
strut, if we're allowed to.

Had to update some tests, and even rename one, because they relied on the old
buggy behavior.

[1] https://drafts.csswg.org/css-break-3/#possible-breaks


Review-Url: https://codereview.chromium.org/2400083003
Cr-Commit-Position: refs/heads/master@{#423926}
A forced break inside a break-inside:avoid object may make it fit where it is.
If an object with break-inside:avoid is taller than what fits in the current
fragmentainer, but it has a forced break before we get to the end of the
fragmentainer, we don't have to push the object to the next one, since what's
before the forced break fits fine where it is.


Review-Url: https://codereview.chromium.org/2401753002
Cr-Commit-Position: refs/heads/master@{#423884}
Move isTargetAttributeCSSProperty to SVGAnimateElement
SVGAnimateElement is the only user. Move it and make it a free function.


Review-Url: https://codereview.chromium.org/2395793004
Cr-Commit-Position: refs/heads/master@{#423817}
Apply RuleSet changes for active stylesheet changes.
Introduce an applyRuleSetChanges method which will take the old and new
ActiveStyleSheetVector use the existing comparison method and apply the
RuleSet diff to invalidate style for the document.

The normal mode for style rules is to schedule RuleSet invalidations
which will decide what to recalculate based on the invalidation sets.
Universal selectors, the presence of Shadow DOM v0 combinators, or
@font-face rules for the document scope, will cause a subtree recalc
for the TreeScope.

@keyframes rules utilizes the existing functionality for invalidating
style in the TreeScope and the host TreeScope for running and
unresolved animations.

This CL introduces appendActiveStyleSheets which will eventually
replace the combination of the lazy appending of sheets in
StyleResolver and appending pending sheets into the ScopedStyleResolver
through appendCSSStyleSheet.

This CL is split out of https://codereview.chromium.org/1913833002 and
re-worked a bit.

The functionality is not yet in use.


Review-Url: https://codereview.chromium.org/2394353003
Cr-Commit-Position: refs/heads/master@{#423810}
Allow active sheets to have nullptr for RuleSet.
CSSStyleSheets which have a non-matching media attribute may have a
nullptr for RuleSet since it's not needed. Handle that in active style-
sheet diffing. That means adding a sheet with non-matching media should
not cause any style recalculations.


Review-Url: https://codereview.chromium.org/2401573002
Cr-Commit-Position: refs/heads/master@{#423804}
Skip reflowed comments css/parser for git-blame.

Review-Url: https://codereview.chromium.org/2396433006
Cr-Commit-Position: refs/heads/master@{#423712}
Adjust some includes around SVGResourceClient and FilterOperation
Also drop an unused include of ReferenceFilterBuilder.h.


Review-Url: https://codereview.chromium.org/2400663002
Cr-Commit-Position: refs/heads/master@{#423708}
Store physical location in LayoutTableRow, just like in all other objects.

Review-Url: https://codereview.chromium.org/2399633002
Cr-Commit-Position: refs/heads/master@{#423701}
Add missing dependencies to extensions BUILD.gns
Some files from guest_view include (not directly) file
extensions/common/api/events.h which is generated by target
//extensions/common/api. This dependency is missing and
sometimes it causes compilation errors. Build will fail if
no target which depends on //extensions/common/api is built
before guest_view. It happens quite rarely: it failed once
on ~10 rebuilds on my mac.


Review-Url: https://codereview.chromium.org/2402453002
Cr-Commit-Position: refs/heads/master@{#423613}
Skip reflowed comments css/invalidation for git-blame.

Review-Url: https://codereview.chromium.org/2393393002
Cr-Commit-Position: refs/heads/master@{#423503}
Reflow comments in core/css/parser

Review-Url: https://codereview.chromium.org/2398013002
Cr-Commit-Position: refs/heads/master@{#423482}
Move handling of 'attributeType' to SVGAnimateElement
Another animation property that applies only to the SVGAnimateElement
part/subtree of the element hierarchy. Move it down for continued
"unlocking" of the structure.


Review-Url: https://codereview.chromium.org/2391993006
Cr-Commit-Position: refs/heads/master@{#423467}
Reflow comments in core/css/invalidation.

Review-Url: https://codereview.chromium.org/2398833004
Cr-Commit-Position: refs/heads/master@{#423441}
Move table cell height flexing into a separate method.
TableSection::layoutRows() is long enough as it is. :)

Review-Url: https://codereview.chromium.org/2392353002
Cr-Commit-Position: refs/heads/master@{#423248}
Move shouldApplyAnimation to SVGAnimateElement
Only used by SVGAnimateElement.


Review-Url: https://codereview.chromium.org/2394583002
Cr-Commit-Position: refs/heads/master@{#422935}
Hoist target element null-checks out of SVGAnimateElement::calculate*
The calculateFromAndToValues, calculateFromAndByValues and
calculateDistance share a common entrypoint (startedActiveInterval), so
we can tighten this code-path a bit checking for a target element up
front. (No target element makes for pretty useless animations anyway...)
calculateAnimatedValue gets similar treatment in its updateAnimation
(sole) entrypoint.

Also refill comments to 80 columns in SVGAnimateMotionElement.cpp.


Review-Url: https://codereview.chromium.org/2386013002
Cr-Commit-Position: refs/heads/master@{#422484}
Push animation value 'inherit' handling into SVGAnimateElement
Handling of 'inherit' doesn't need to live on SVGAnimationElement,
because only SVGAnimateElement makes use of it. Move it down the
class structure and simplify.

Also refill/wrap comments in the files touched to 80 columns.


Review-Url: https://codereview.chromium.org/2384013002
Cr-Commit-Position: refs/heads/master@{#422446}
remove obsolete(?) git attributes from old top-level WebKit settings
It is a little surprising (for automated scripts, mostly) for files to
be export-ignore'd from subdirectories.  This patch removes some old WebKit
export-ignore attributes that I suspect are no longer useful.

This was the original patch that added the attributes, I have not been able
to locate details of the review or why it was originally required:

Review-Url: https://codereview.chromium.org/2387033002
Cr-Commit-Position: refs/heads/master@{#422412}
Add WebRange test for explicit empty ranges creation.
This is followup of https://codereview.chromium.org/2373613005/.

Review-Url: https://codereview.chromium.org/2385643002
Cr-Commit-Position: refs/heads/master@{#422405}
Use ceil() when integerizing pagination struts before table rows.
Subpixel rendering is not supported in table parts, so everything needs to be
integers. However, instead of rounding the pagination strut down to the nearest
integer, round it up. This way we at least make sure that we manage to push all
the content over to the designated fragmentainer, rather than leaving one tiny
strip behind in the previous fragmentainer. There'll still be off-by-one
errors, but at least all the content is in the right fragmentainer.

Updated some tests to not use subpixel multicol heights, since what they
required cannot really be satisfied without adding full subpixel support to

Also added a new test that *does* use subpixel multicol height. This test
merely makes sure that nothing is left behind in the previous fragmentainer at
breaks, without worrying about the exact top position of the objects.

This problem was discovered while working on bug 487026, which is about
reducing the amount of forced re-layouts that we do for fragmentation, and it
turns out that table layout in general, and perhaps strut calculation there in
particular, tends to need more layout passes it explicitly asks for (so it
depends on other parts of the system dealing out layout passes for free). Added
body { overflow:hidden; } declarations to some tests, to reduce the number of
layout passes you get for free, i.e. make the tests more evil.


Review-Url: https://codereview.chromium.org/2382043003
Cr-Commit-Position: refs/heads/master@{#422312}
Fold bits of SVGAnimatedTypeAnimator into SVGAnimateElement
This folds non-property-construction methods from
SVGAnimatedTypeAnimator into SVGAnimateElement and gets rid of simple
forwarding methods. This leaves SVGAnimatedTypeAnimator as a property-
value factory.


Review-Url: https://codereview.chromium.org/2387513002
Cr-Commit-Position: refs/heads/master@{#422188}
Don't allow form-feed (U+000C) as a WebVTT signature separator
Per the WebVTT parser algorithm [1], only space, tab or newline (after
normalization) are allowed to follow the "WEBVTT" signature.

[1] https://w3c.github.io/webvtt/#webvtt-parser-algorithm


Review-Url: https://codereview.chromium.org/2382173002
Cr-Commit-Position: refs/heads/master@{#422093}
Don't use absolute bounding boxes in LayoutVTTCue
LayoutVTTCue was using absoluteContentBox()/absoluteBoundingBoxRect()
during overlap resolution. This would mean that boxes were computed
relative to the containing frame. The former also doesn't take
transforms into account, which would mean that the basic overlap check
against the title area would fail if a transform was present.

Instead compute the various bounding boxes relative to a common
ancestor, namely the text track container (which is also the containing
block of the cues.) Adjust the controls rect similarly to get it into the
same coordinate space.


Review-Url: https://codereview.chromium.org/2377193003
Cr-Commit-Position: refs/heads/master@{#422072}
Introduce markChildForPaginationRelayoutIfNeeded().
No behavioral changes intended.

This replaces markForPaginationRelayoutIfNeeded(). Since the method was always
called when it was the container that was being laid out, this is more
"correct", and in the same spirit as e.g.
updateBlockChildDirtyBitsBeforeLayout(), adjustBlockChildForPagination(), and
so on.

This is a preparatory patch to allow for calling
offsetFromLogicalTopOfFirstPage(), which uses LayoutState more heavily.
When using LayoutState, you generally need to be laying out the very same
object as the one LayoutState points to.


Review-Url: https://codereview.chromium.org/2382733002
Cr-Commit-Position: refs/heads/master@{#421815}
Move FilterOperation*.{cpp,h} to core/style/
Move the FilterOperation(s) structures to core/style to make them a
"style type". This is in preparation for an improved mechanism for
signaling mutations to "reference" filters.

This is essentially a pure move, with only minor modifications to fix
some presubmit issues and to facilitate (fix) building.


Review-Url: https://codereview.chromium.org/2375453002
Cr-Commit-Position: refs/heads/master@{#421796}
Avoid creating consecutive whitespace renderers.
In textLayoutObjectIsNeeded(), return false if we are a whitespace-only
text node, and our previous LayoutObject sibling is a whitespace
renderer. This avoids for instance creating a consecutive list of
whitespace renderers when we have multiple display:none sibling

This change makes [1] take ~900ms instead of ~2600ms on my computer.

[1] https://bugs.chromium.org/p/chromium/issues/attachmentText?aid=8037


Review-Url: https://codereview.chromium.org/2369963005
Cr-Commit-Position: refs/heads/master@{#421794}
Adding @keyframes rules only affects TreeScope plus host.
@keyframes rules may apply to animations in the same TreeScope as the
rule and the host element if the TreeScope is a shadow tree. Instead of
invalidating all keyframe animations or recalculating every element in
the document, limit such changes to the relevant TreeScopes.

Currently, this doesn't have an effect since analyzed style update only
happens in the document TreeScope, but that will change with RuleSet
invalidation for crbug.com/567021


Review-Url: https://codereview.chromium.org/2361733004
Cr-Commit-Position: refs/heads/master@{#421781}
Support for multiple block fragments in getClientRects().
Objects crossing column boundaries, for instance, should create one rectangle
for each column they live in.

Two old tests had to be updated, because they depended on the old and incorrect
behavior (pick the bigger / center column and create one huge rectangle there).

Add fragmentainerInFlowThread() to FragmentainerIterator. Removed the
updateOutput() thing. Instead, have the getters compute what they need on the
fly. This makes more sense now, since none of the (2) FragmentainerIterator
users need to calculate everything. Also don't require a clip rectangle.

Some extra attention is required when processing objects with a zero-height
bounding box now. Previously, we didn't need to worry about those, since no
bounding box means no painting, hit-testing, etc. But now, with
getBoundingClientRect(), life is different.


Review-Url: https://codereview.chromium.org/2360913004
Cr-Commit-Position: refs/heads/master@{#421643}
Add use counters for SVGCursorElement
This adds one counter for presence of an SVGCursorElement, and one for
if any ComputedStyle references the element (==the SVGCursorElement has
a client.)


Review-Url: https://codereview.chromium.org/2376613004
Cr-Commit-Position: refs/heads/master@{#421630}
Speculative fix for SelectorFilter crash.
It looks from the crash log that the string impl() is nullptr. Found no
possible way for a null string to be added to the SpaceSplitString, but
let's add a null check to see if it helps.


Review-Url: https://codereview.chromium.org/2376703002
Cr-Commit-Position: refs/heads/master@{#421492}
Update DCHECK in WebRange constructor.
Currently creating empty range (0,0) triggers it, judging by
the comment it was intende to check null range only.

Review-Url: https://codereview.chromium.org/2373613005
Cr-Commit-Position: refs/heads/master@{#421252}
Reland of Force U.S. English keyboard layout for TextfieldTest.KeysWithModifiersTest
Reverted in

Reason for revert:
Tests are failing on Mac ASAN builder. See details here:


Review-Url: https://codereview.chromium.org/2353333002
Cr-Commit-Position: refs/heads/master@{#421191}
Fix GDI leak in NativeThemeWin::PaintIndirect
There was a GDI leak when hovering input elements. Reaching 10000 GDI objects
would cause process to crash.

Fixed by deleting HBITMAP that was selected onto the HDC. Deleting HDC does not
take care of that.

The skia utility function was removed and replaced with a custom scoped object
at call site as it was used only in one place and making it safe to use for
others would be a bit tricky as bitmap needs to be deleted before HDC and there
is no easy access to the bitmap after utility function returns HDC.



Review-Url: https://codereview.chromium.org/2365903002
Cr-Commit-Position: refs/heads/master@{#421142}
Missing sibling invalidation across removed element.
When removing B from siblings A B C, we scheduled invalidations for
features of A requiring two adjacent combinators to schedule an
invalidation at all. That is fine for rules already affecting C, but
for rules kicking in after B is removed, a single combinator is enough.
For instance ".a + .c".


Review-Url: https://codereview.chromium.org/2362463004
Cr-Commit-Position: refs/heads/master@{#421124}
Make SVGAnimatedBoolean.h less popular
SVGAnimatedBoolean is only used by/for SVGFEConvolveMatrix, but was
being included in a lot of places. Remove the unnecessary includes of
SVGAnimatedBoolean.h, and also remove some other obvious unnecessary
includes in the vicinity.

Review-Url: https://codereview.chromium.org/2371593002
Cr-Commit-Position: refs/heads/master@{#420993}
Reduce includes of some SVG*TearOff types
SVG*TearOff types are only of real interest to the bindings, so don't
need to be included in something that isn't direclty interacting with
bindings. Shuffle declarations and definitions to reduce the impact of
SVGPointTearOff and SVGRectTearOff.

Review-Url: https://codereview.chromium.org/2361973003
Cr-Commit-Position: refs/heads/master@{#420920}
Move buildFilterOperations to FilterEffectBuilder
This puts all FilterOperations conversions (to FilterEffect and
CompositorFilterOperations) in one spot - FilterEffectBuilder.
This allows folding the functionality of resolveReferenceFilters into
FilterEffectBuilder, and hence get rid of the explicit extra step to
update the "cached" Filter chain in ReferenceFilterOperation.

This is one step on the way to turning FilterOperations into a core
style type, to allow for more straight-forward interaction with other
parts of the style system.


Review-Url: https://codereview.chromium.org/2357633003
Cr-Commit-Position: refs/heads/master@{#420844}
unbreak builds with webrtc disabled
https://codereview.chromium.org/2123863004 broke non-webrtc non-android
builds.  Let's fix that.


Review-Url: https://codereview.chromium.org/2370583002
Cr-Commit-Position: refs/heads/master@{#420832}
Make SVG*StringList and SVGStringListTearOff scarcer
(Primarily) because of their inclusion in the SVGTests interface, these
two make their way into a lot more compilation units than has use for
them. The principal access to this data is the SVGTests::isValid()
method, so only the actual bindings should need any deeper insight into
these. Shuffle declarations and definitions to make their inclusion more
scarce. (From ~194 -> ~13 total dependencies for the latter, based on
"ninja -t deps".)

Review-Url: https://codereview.chromium.org/2360383003
Cr-Commit-Position: refs/heads/master@{#420614}
Fold DisplayItem creation into paintFilteredContent in SVGFilterPainter
Brings uses of any form of "filter bounds" closer together.
Rename |filterRegion| and |boundaries| to |filterBounds|.


Review-Url: https://codereview.chromium.org/2367463002
Cr-Commit-Position: refs/heads/master@{#420397}
Fix effect mapping computation for displacement-map w/ negative scale
When scale is negative, the displacement will be in the opposite
direction. Hence we need to only use the magnitude of the scale when
computing the effect of the filter.


Review-Url: https://codereview.chromium.org/2359133003
Cr-Commit-Position: refs/heads/master@{#420396}
Content that starts before the first fragmentainer should stay where it is.
It should not undergo pagination, but rather remain in the underflow area of
the first fragmentainer. There's no reason to pull everything into the content
area of the first fragmentainer.


Review-Url: https://codereview.chromium.org/2360253002
Cr-Commit-Position: refs/heads/master@{#420353}
Document* -> Document& for loadSubimages and friends.
Document* should never be nullptr in these places. Also made them const
and propagated the const-ness where necessary.


Review-Url: https://codereview.chromium.org/2352193004
Cr-Commit-Position: refs/heads/master@{#420319}
Harmonize FilterEffect::mapRect and mapPaintRect
This CL terminates the FilterEffect::determineAbsolutePaintRect codepath,
replacing the last user (SVGFilterPainter) with mapRect().
A new structure for FilterEffect::mapRect is introduced (taking some
hints from the SkImageFilter implementation), where mapRect is the entry-
point (replacing mapRectRecursive), which in turn calls: 1) mapInputs,
2) mapEffect and 3) applyBounds. The last simply applies any clip bounds
set on the effect, while also adjusting for affectsTransparentPixels().
mapInputs() computes the contribution from inputs to the current effect,
while mapEffect() applies the contribution from the current effect
itself. The notion of forward/reverse is not retained since only forward
mapping is used.

BUG=642035, 640264, 611674, 600430

Review-Url: https://codereview.chromium.org/2341923002
Cr-Commit-Position: refs/heads/master@{#420293}
Remove SVGSVGElement dependency from SVGTransformListTearOff
Rather than having the latter depend on the former for code-sharing,
have them both depend on the underlying primitive (SVGTransformTearOff.)

Review-Url: https://codereview.chromium.org/2360083002
Cr-Commit-Position: refs/heads/master@{#420278}
Implemented scoped invalidation for added/removed RuleSets.
Async stylesheet update will schedule invalidation sets based on the
RuleFeatureSets for added/removed stylesheets. Implement the
functionality in StyleEngine for scheduling invalidations in the
stylesheet's TreeScope, including host and slotted elements if


Review-Url: https://codereview.chromium.org/2333693002
Cr-Commit-Position: refs/heads/master@{#420192}
Drop the SVGLengthType enumeration
After the transition to using CSSPrimitiveValue, this enumeration is
not used by anything but the DOM-side of SVGLength (SVGLengthTearOff),
and for that we might as well use the interface constants directly.

The LengthTypeREMS and LengthTypeCHS values are dropped entirely because
they are not referenced by anything.

Review-Url: https://codereview.chromium.org/2354283002
Cr-Commit-Position: refs/heads/master@{#420150}
Stay put at the top of the current page when inserting a forced break.
If we attempt to insert a forced break, and we're already at the top of a page
or column, we should stay right there, instead of leaving an entire page or
column blank. We used to ensure this by calling nextPageLogicalTop() with

But it was broken, because AssociateWithFormerPage could take us to a column
set preceding a column spanner that we had actually moved past. This would
confuse various parts of the machinery, and could, among other things, find
unused space in the last column preceding a spanner, and use this as a
pagination strut on an object *following* the spanner.

Remove PageBoundaryRule from nextPageLogicalTop(), and let the forced break
insertion code handle this on its own instead, and do it correctly, without
looking back at preceding columns.


Review-Url: https://codereview.chromium.org/2356183002
Cr-Commit-Position: refs/heads/master@{#420072}
Need to consider the need for a soft break even when inserting a forced break.
A forced break will just take us to the next fragmentainer. However, the next
fragmentainer may not be tall enough to fit any part of the block we're laying
out, which means that we may have to skip to a fragmentainer further ahead -
one that is tall enough. This situation may arise in nested multicol, because
then we may get inner fragmentainers of variable height.

Another reason why we need this is that a forced break on an object is inserted
before we apply clearance. After we have applied clearance, we may have ended
up at a position where there's not enough space left to fit any part of the
block we're laying out. So, again, we may need to skip to the next


Review-Url: https://codereview.chromium.org/2359733002
Cr-Commit-Position: refs/heads/master@{#420041}
Widen Mac expectations for move_backward_line_import_crash.html
appears to also Crash on Mac Debug.



Review-Url: https://codereview.chromium.org/2360593002
Cr-Commit-Position: refs/heads/master@{#420040}
Make stylesheet owner node a reference instead of pointer.
The CSSStyleSheet owner node is always non-null when passed in on
sheet creation. Make it a reference in various APIs.

The real change here that triggered this was the realization that
StyleEngine::createSheet is always called with an owner node which
belongs to the very same Document/StyleEngine. So we can turn:




Also made parseSheet non-static as it needed the StyleEngine pointer


Review-Url: https://codereview.chromium.org/2354773003
Cr-Commit-Position: refs/heads/master@{#420018}
Consolidate read-only exception throwing for SVG*TearOffs
Where possible, use the "standard" message for read-only objects from
ExceptionMessages. Move the setup of the ExceptionState with this
message to SVGPropertyTearOffBase and reuse. It also saves a small chunk
of code-space.

Also drop a bunch of vspace, reorder checks in
SVGPreserveAspectRatioTearOff to check for immutability first and do
less work on error in SVGMatrixTearOff.

Review-Url: https://codereview.chromium.org/2357463002
Cr-Commit-Position: refs/heads/master@{#419875}
Don't include LayoutObject.h from FrameView.h
This reduces the LayoutObject.h dependency by about 50 compilation units.

Needed to move data of DepthOrderedLayoutObjectList into a forward-declared
struct, since HashSet members need their T defined, even if it's a pointer.
This due to oilpan. See https://codereview.chromium.org/1999343002 for details.


Review-Url: https://codereview.chromium.org/2348993002
Cr-Commit-Position: refs/heads/master@{#419728}
Prepare to use invalidation set for adding/removing RuleSets.
Currently, we sometimes use StyleSheetInvalidationAnalysis to be smart
about recalculating affected element when adding/removing a stylesheet.

The plan is to start using the StyleInvalidator to trigger style
recalculations When adding/removing stylesheets. We will then use the
invalidation sets from the stylesheet RuleSet and schedule them on
elements in the stylesheet's document or shadow tree.

We fall back to a full recalc for the document / shadow tree for if we
find selectors which don't have simple selectors for which we have an
invalidation set we can use. This is similar to what we do with the
universalSiblingInvalidationSet for DOM mutations.

This first implementation supports id, class, attribute, and type
selectors in the rightmost compound[1]. We could later support to use
invalidation sets for universal pseudo class rules like ":hover".

The invalidations are to be scheduled for elements in the same
TreeScope as the stylesheet, including the host element.

Rules which are boundary crossing have their features collected in
ScopedStyleResolver::addTreeBoundaryCrossingRules() and not in their
respective stylesheet's RuleSet. We fall back to full style recalc
for rules containing ::content, ::shadow, and /deep/. ::slotted rules
are currently also collected on the ScopedStyleResolver, but in order
to avoid full recalcs, we do LocalStyleChange on slot-distributed
elements for RuleSet invalidations when there are ::slotted rules in
the RuleSet.

As mentioned earlier we will schedule invalidations on the host element
as well, which means we will schedule the invalidation set for ".a" for
":host(.a)". :host-context() do also support RuleSet invalidation as
long as there are features in addition to the ones inside the
:host-context() pseudo.

As for sibling invalidations on DOM mutations, negated selectors like
":not(.a)" are considered universal.

This CL is split out of [2]. The next step is to land the invalidation
code in StyleEngine from the same CL.

[1] Even though we don't have invalidation sets for tag names, we can
check the presence of rules in the tag name hash map for the RuleSet.
This means "body *" will cause a full recalc, but "body" won't. Also
note that "div.enabled" will cause every div element to be invalidated
because the rule would end up in the class rule hashmap.

[2] https://codereview.chromium.org/1913833002/


Review-Url: https://codereview.chromium.org/2326033002
Cr-Commit-Position: refs/heads/master@{#419704}
Replace FilterData::filter with lastEffect
This brings the FilterData+SVGFilterPainter (etc)  "complex" closer to
the PaintLayer+PaintLayerFilterInfo structure by keep the last effect
in the chain and accessing the Filter through that when needed.
In general we want these two "complexes" to closely resemble each other
as possible - because they are supposed to implement the same thing, with
only a difference in the parametrization (like which bounding-box to use.)
This also brings one tiny (tiny tiny) step closer to being able to get
shorthand filters working in the SVG code-path.

Also try to reduce dependencies a bit in the surrounding code.


Review-Url: https://codereview.chromium.org/2350063002
Cr-Commit-Position: refs/heads/master@{#419700}
Don't include LayoutBlock.h from MediaControlElementTypes.h
Reduces the dependencies on LayoutBlock.h by 5 compilation units.


Review-Url: https://codereview.chromium.org/2341423002
Cr-Commit-Position: refs/heads/master@{#419699}
Turn FilterEffectBuilder into a stack-allocated helper
This moves the FilterEffect reference out of FilterEffectBuilder and
into the owner (PaintLayerFilterInfo), and then turns
FilterEffectBuilder into a more proper builder-style object that is
configured by the client and then has build...() called upon it to
construct the filter.
Rename the old build() method to buildFilterEffect().
Fix up PaintLayer to remove the indirection, and similarly adjust the
other users (CanvasRenderingContext2DState, SVGFilterPainter).


Review-Url: https://codereview.chromium.org/2349183002
Cr-Commit-Position: refs/heads/master@{#419697}
Remove unused StyleElement::clearDocumentData().
Review-Url: https://codereview.chromium.org/2350743002
Cr-Commit-Position: refs/heads/master@{#419556}
Force U.S. English keyboard layout for TextfieldTest.KeysWithModifiersTest

Review-Url: https://codereview.chromium.org/2197113002
Cr-Commit-Position: refs/heads/master@{#419454}
Reland of Evacuate ComputedStyle references from the CSS*Value hierarchy
Fold uses of:

  CSSPrimitiveValue::create(..., const ComputedStyle&)
  CSSValuePair::create(..., const ComputedStyle&)

into the (few) users. Handle the fall-out.

Review-Url: https://codereview.chromium.org/2345893004
Cr-Commit-Position: refs/heads/master@{#419390}
ConvolverOptions.buffer should be nullable

Review-Url: https://codereview.chromium.org/2352463002
Cr-Commit-Position: refs/heads/master@{#419388}
Slim includes in CSSValue.h
This drops includes from CSSValue.h that are not directly used by it.
Downstream dependents are fixed up as needed. Also strip some includes
from StyleImage.h and other places that includes CSSValue.h while

Review-Url: https://codereview.chromium.org/2345223002
Cr-Commit-Position: refs/heads/master@{#419384}
Evacuate ComputedStyle references from the CSS*Value hierarchy
Fold uses of:

  CSSPrimitiveValue::create(..., const ComputedStyle&)
  CSSValuePair::create(..., const ComputedStyle&)

into the (few) users. Handle the fall-out.

Review-Url: https://codereview.chromium.org/2345893004
Cr-Commit-Position: refs/heads/master@{#419382}
Revert of Show ancestor hierarchy in accessibility panel (patchset #10 id:180001 of https://codereview.chromium.org/2322413003/ )
Reason for revert:
Fails the compile step on Linux ChromiumOS GN (headless_unittests)

Original issue's description:
> Show ancestor hierarchy in accessibility panel
> BUG=560525
> Committed: https://crrev.com/3558706c1b2a630557929b61fefc74e28975f3a6
> Cr-Commit-Position: refs/heads/master@{#419369}

# Skipping CQ checks because original CL landed less than 1 days ago.

Review-Url: https://codereview.chromium.org/2351443003
Cr-Commit-Position: refs/heads/master@{#419371}
Let clients of FilterEffectBuilder compute/provide the reference-box
Rather than having code to compute the reference box for the various
clients that use FilterEffectBuilder in the class itself, let clients
compute the desired reference box themselves and pass it along.
This separates concerns, and makes code for computing the reference box
less defensive. It also eliminates the need to add even more cases in
the future (like for SVG shorthand support.)

Also push calls to resolveReferenceFilters() in PaintLayer closer to the
filter-building calls, and rename computeFilterOperations to
addReflectionToFilterOperations. This allows us to eliminate a redundant
call to resolveReferenceFilters() in the mapRectForFilter() code-path.


Review-Url: https://codereview.chromium.org/2343173002
Cr-Commit-Position: refs/heads/master@{#419290}
Don't include LineLayoutItem.h from SVGTextContentElement.h.
Review-Url: https://codereview.chromium.org/2342203004
Cr-Commit-Position: refs/heads/master@{#419274}
Don't treat shorthand filters as errors on SVG content
We don't support filter shorthands yet, so we shouldn't treat them as
errors. Fix up the hasFilter() condition to also check if it's a filter
that we pretend we can handle.

Also straighten out the code-flow in applyFilterIfNecessary.


Review-Url: https://codereview.chromium.org/2349743003
Cr-Commit-Position: refs/heads/master@{#419267}
Don't include LayoutViewItem.h from StyleResolverState.h
This reduces the number of compilation units that depend on files like
LayoutBlock.h by more than 200 (from around 500 to around 280).

Review-Url: https://codereview.chromium.org/2348853003
Cr-Commit-Position: refs/heads/master@{#419202}
Clean up includes in SVGFE*Element and thereabouts
Drop inclusion of SVGParserUtilities.h in a number of places since it's
no longer used. Push FE*.h inclusion into the implementation where
possible, and don't include FilterEffect.h in those cases.
Also simplify a loop in SVGFEMergeElement::build.

Review-Url: https://codereview.chromium.org/2342353002
Cr-Commit-Position: refs/heads/master@{#419187}
Setting the link title may change the preferred set.
Make sure we set the preferred style sheet set when setting the title
attribute as long as the preferred set name is not already set.

This used to somehow work if the title was set during loading of a
stylesheet since the preferred set name was set during active
stylesheet collection. In other cases, it didn't work until another
stylesheet operation caused a re-collection of active stylesheets.

When setting the preferred name was moved into the LinkStyle::process()
code, it didn't work at all to set the title after the stylesheet
starts loading.

Make sure we set the preferred set name and trigger an active
stylesheet update when the title is changed.


Review-Url: https://codereview.chromium.org/2337193004
Cr-Commit-Position: refs/heads/master@{#419107}
Push CompositorFilterOperations creation out of GraphicsLayer
Push knowledge of FilterOperations out of GraphicsLayer and into
PaintLayer. This eliminates one dependency from platform/ code to the
FilterOperations structure. The motivation is to try and make
FilterOperation(s) a core (style) type, to make interaction with the
style system and other parts of core easier. It will also aid in
enabling a more layered structure on the various filter-related data

Also change the various generator functions to return a
CompositorFilterOperations by-value rather than through a out-variable.


Review-Url: https://codereview.chromium.org/2335253002
Cr-Commit-Position: refs/heads/master@{#419029}
Add PageBoundaryRule parameter to fragmentainerGroupAtFlowThreadOffset().
If it's an exclusive end offset, we need to know this, so that we map to the
former fragmentainer group, rather than the latter, if the offset is at a
column row boundary.

Review-Url: https://codereview.chromium.org/2345583004
Cr-Commit-Position: refs/heads/master@{#418958}
Correct flowThreadTranslationAtOffset() for vertical-rl writing mode.
The problem was that a rectangle was shifted by offsetFromColumnSet() after
having been made physical. However, offsetFromColumnSet() is semi-logical
(flipped block direction coordinate, like e.g. LayoutBox::m_frameRect), so we
need to add it in before flipping the rectangle.

This caused all fragmentainer groups but the first one to be translated

Review-Url: https://codereview.chromium.org/2344813003
Cr-Commit-Position: refs/heads/master@{#418870}
Add PageBoundaryRule parameter to columnSetAtBlockOffset().
If it's an exclusive end offset, we need to know this, so that we map to the
former column set, rather than the latter, if the offset is at a column set

Review-Url: https://codereview.chromium.org/2340213003
Cr-Commit-Position: refs/heads/master@{#418839}
Unprefix -webkit-clip-path
This CL renames '-webkit-clip-path' to 'clip-path', and makes the former
an alias of the latter.
For LayoutSVGRoot, clip-path is now applied only by the PaintLayer and
not by SVGPaintContext.




Review-Url: https://codereview.chromium.org/2312713002
Cr-Commit-Position: refs/heads/master@{#418827}
Handle exclusive end offsets when translating from flow thread coordinates.
If we're in flipped blocks writing mode (i.e. vertical-rl), the flow thread
block offset we're dealing with may be a logical end point, and end points are
exclusive. This means that we need to pick the previous column, not the next,
if the offset is exactly at a column boundary.

Let flowThreadTranslationAtOffset() and columnIndexAtOffset() take a
PageBoundaryRule argument to handle this.

This makes offsetLeft and offsetTop work properly in vertical-rl writing mode
for elements that end at column boundaries. Added a test for that, and threw in
a vertical-lr test too, for good measure.

Remove ColumnIndexCalculationMode from columnIndexAtOffset(). It was partially
and inaccurately used to make sure we didn't escape the valid column range in
case an exclusive end offset was passed. Have the call sites that really need
to clamp the column index do it themselves. It's up to the callers to decide
how to treat offsets outside the range of columns anyway.

Review-Url: https://codereview.chromium.org/2339973002
Cr-Commit-Position: refs/heads/master@{#418800}
//device/media_transfer_protocol depends on dbus
The build should fail early if //device/media_transfer_protocol is included with dbus explicitly disabled.


Review-Url: https://codereview.chromium.org/2333573003
Cr-Commit-Position: refs/heads/master@{#418744}
Add support for <basic-shape> to 'clip-path' on SVG elements
Use ClipPathOperation as storage for the property in SVGComputedStyle,
and add support for <basic-shape>s where needed. This also means that
nesting a <clipPath> with a <basic-shape> is added.
Since SVGPaintContext::applyClipIfNecessary can't fail in a useful way,
just drop the returned bool (test added.) An invalid clip-path will
just be ignored (per spec.)


Review-Url: https://codereview.chromium.org/2322343003
Cr-Commit-Position: refs/heads/master@{#418387}
Fix baselines for media/video-zoom-controls.html
Attempt to tidy up after mid-flight collision.


Review-Url: https://codereview.chromium.org/2328353002
Cr-Commit-Position: refs/heads/master@{#417973}
Simplified compound feature extraction.
Started to return the last simple selector in the compound instead of
the pointer to the next compound from
extractInvalidationSetFeaturesFromCompound. That means we can update
feature flags for the combinator from updateInvalidationSets, which
also means we can get rid of the duplicated code for updating the
nthInvalidationSet(). Additionally, we can use the siblingFeatures as
initialized by updateFeaturesFromCombinator().

Removed unused UseFeatureTypes.

There should be no functional changes.


Review-Url: https://codereview.chromium.org/2326783002
Cr-Commit-Position: refs/heads/master@{#417915}
[LayoutNG] Remove unnecessary #inclusions of LayoutObject and derived class definitions.
That reduces the number of compilation units that depend on LayoutObject.h by 9
when building content_shell.


Review-Url: https://codereview.chromium.org/2328243002
Cr-Commit-Position: refs/heads/master@{#417909}
Drop FilterEffect::m_absolutePaintRect
This rect is a remnant of the old ImageBuffer-based implementation of
FilterEffect, and is likely doing more harm than good at this point in
time. If we want to cache the result of a call to
determineAbsolutePaintRect(), that can be done equally well by the
client code.

Since removing this state removes the last side-effect from the
determineAbsolutePaintRect() methods we can mark it and related methods
(affectsTransparentPixels) as const.


Review-Url: https://codereview.chromium.org/2329803002
Cr-Commit-Position: refs/heads/master@{#417908}
A container of out-of-flow positioned descendants should be an offsetParent.
This reflects a recent spec change [1]. Previously, the condition was that the
position property be different from 'static', but it's unreasonable that we
shouldn't also include other objects that serve as containing blocks for fixed
and absolutely positioned descendants, such as "transform". Gecko and Edge
already have this behavior.

[1] https://github.com/w3c/csswg-drafts/commit/180b348a1ac0931043cd195651fc5164463d2bce


Review-Url: https://codereview.chromium.org/2328633003
Cr-Commit-Position: refs/heads/master@{#417903}
Walk the entire offsetParent chain in fast/forms/resources/common.js utility functions.
They used to assume that the only offsetParent was the root node, but that's no
longer going to be true when https://codereview.chromium.org/2328633003/ lands.
One test that calls searchCancelButtonPosition() is inside a transformed
element, which will become an offsetParent.


Review-Url: https://codereview.chromium.org/2332553002
Cr-Commit-Position: refs/heads/master@{#417893}
Revert of Make canceling Timers fast. (patchset #10 id:180001 of https://codereview.chromium.org/2319053004/ )
Reason for revert:
Wreaks havoc on the ASAN bots:


STDERR: =================================================================
STDERR: ==4==ERROR: AddressSanitizer: use-after-poison on address 0x7ed9a5616190 at pc 0x00000768b0da bp 0x7fff4bbca630 sp 0x7fff4bbca628
STDERR: READ of size 8 at 0x7ed9a5616190 thread T0 (content_shell)
STDERR:     #0 0x768b0d9 in operator-> third_party/WebKit/Source/wtf/RefPtr.h:68:50
STDERR:     #1 0x768b0d9 in revokeAll third_party/WebKit/Source/wtf/WeakPtr.h:146:0
STDERR:     #2 0x768b344 in ?? third_party/WebKit/Source/platform/Timer.cpp:124:22
STDERR:     #3 0x47a4461 in Run base/callback.h:56:12
STDERR:     #4 0x47a4461 in RunTask base/debug/task_annotator.cc:54:0
STDERR:     #5 0x79e2381 in ProcessTaskFromWorkQueue third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc:316:19
STDERR: AddressSanitizer can not describe address in more detail (wild memory access suspected).
STDERR: SUMMARY: AddressSanitizer: use-after-poison

Appears to be accessing a "user-poison" area, so maybe a timer in something that was swept? (Wild guess.)

Original issue's description:
> Make canceling Timers fast.
> base::Closure recently got an IsCancelled method. Taking advantage of
> that the scheduler can short circuit a bunch of logic for cancelled
> tasks and avoid running them and the rest of the task selection
> machinery.
> On the new TimerPerfTest benchmark this makes running 10000 cancelled
> tasks aprox 50x - 60x faster (measured on Android and Linux).
> Note this patch reverts many of the changes made in
> https://codereview.chromium.org/2258713004 in favor of
> WeakPtr based cancellation as favored by the base owners.
> BUG=605718, 638542
> Committed: https://crrev.com/e4e5868c5f32b015bf0d07a6eeace892d6a789a1
> Cr-Commit-Position: refs/heads/master@{#417621}

# Not skipping CQ checks because original CL landed more than 1 days ago.
BUG=605718, 638542

Review-Url: https://codereview.chromium.org/2326313003
Cr-Commit-Position: refs/heads/master@{#417846}
Mark */fast/canvas/canvas-hit-regions-*-test.html are timing out on Win
Timing out on win_chromium_rel_ng. Maybe just Slow?


Review-Url: https://codereview.chromium.org/2324333003
Cr-Commit-Position: refs/heads/master@{#417840}
Update leak expectations after https://codereview.chromium.org/2321183002
Moved to paint/invalidation/japanese-rl-selection-clear.html from


Review-Url: https://codereview.chromium.org/2331723002
Cr-Commit-Position: refs/heads/master@{#417839}
[LayoutNG] Handle border and padding when sizing a block and when placing its children.

Review-Url: https://codereview.chromium.org/2325073002
Cr-Commit-Position: refs/heads/master@{#417827}
Translate the clip rect correctly when iterating over fragmentainers.
The clip rect is visual, so we need to shift each fragmentainer group by its
visual translation. This matters for nested multicol.


Review-Url: https://codereview.chromium.org/2321333002
Cr-Commit-Position: refs/heads/master@{#417563}
Let LayoutNG handle childless block flows.
The fact that they are marked with childrenInline() doesn't matter if they have
no children.


Review-Url: https://codereview.chromium.org/2320393002
Cr-Commit-Position: refs/heads/master@{#417543}
Replace FilterEffect::maxEffectRect() with absoluteBounds()
This removes maxEffectRect(), determineMaximumEffectRect() and the
associated state (m_maxEffectRect) from FilterEffect. The replacement is
the new method absoluteBounds() that computes bounds for the node in
question using the filter primitive (sub)region and the filter region.
This should match what determineMaximumEffectRect() was computing for
use from SVGFilterPainter.


Review-Url: https://codereview.chromium.org/2319293004
Cr-Commit-Position: refs/heads/master@{#417530}
Corrected variable name to not contain "Tag".
Incorrectly named. We don't include type selectors.


Review-Url: https://codereview.chromium.org/2321013002
Cr-Commit-Position: refs/heads/master@{#417456}
Fixed access to `constraint_flags` array in ParseHEVCCodecId function.
This patch adds necessary offset when accessing this array.
`constraint_flags` is an array of 6 elements, however in
`for` loop it can be accessed with indices from 4 to 9
instead of indices from 0 to 5.

Review-Url: https://codereview.chromium.org/2320063002
Cr-Commit-Position: refs/heads/master@{#417351}
Removed m_isSettingStyleSheetText from InspectorCSSAgent.
The variable supressed an unnecessary re-collection of inspector
stylesheets when the stylesheet text is modified from the inspector. If
the text added contains an @import rule with a data: uri, it also
suppresses the collection of that sheet, which is wrong.


Review-Url: https://codereview.chromium.org/2319533004
Cr-Commit-Position: refs/heads/master@{#417290}
Replace collectLayerFragments() with FragmentainerIterator.
No functional changes intended.

The way collectLayerFragments() and PaintLayer::collectFragments() cooperated
to populate the PaintLayerFragments was rather messy. collectLayerFragments()
set two members, and then, later on, PaintLayer::collectFragments() would set
the remaining members, translate and clip. With this change, the layout code no
longer uses PaintLayerFragments.

It should also be mentioned that collectLayerFragments() was a bad name,
because this functionality shouldn't be strictly for layers. We're soon going
to need it for getClientRects() as well.


Review-Url: https://codereview.chromium.org/2314763002
Cr-Commit-Position: refs/heads/master@{#417271}
Don't include headers from the layout API from other headers needlessly.
Including layout API headers involves including some LayoutObject derivate,
which takes a lot of time to compile.


Review-Url: https://codereview.chromium.org/2316533004
Cr-Commit-Position: refs/heads/master@{#417265}
Store a single inspector stylesheet hidden from CSSOM.
Custom style rules can be added via the inspector. These were stored in
a stylesheet appended to <head>. That meant it was visible to the
document via CSSOM. Also, enabling/disabling the inspector would not
remember that a stylesheet was added, so the inspector started out with
a new blank stylesheet for editing, yet the existing rules still

This CL introduces a single inspector stylesheet in the StyleEngine
which takes part in the document collection to apply the rules, but it
is not appended to the document.styleSheets list. Neither is it
accessible through a <style> element in the DOM.

The stylesheet ends up after the author stylesheets in the order of
appearance. That is similar to how it was, but previously, sheets in
<body> would appear after the inspector sheet while sheets in <head>
would appear before.

The inspector sheet source is stored in a resource container like
changes for author stylesheets. This means the inspector sheet source
will persist across inspector enable/disable.


Review-Url: https://codereview.chromium.org/2312953002
Cr-Commit-Position: refs/heads/master@{#417021}
Fix typo in enable-blink-features command line switch.
This one doesn't disable features, it *enables* them.


Review-Url: https://codereview.chromium.org/2319503002
Cr-Commit-Position: refs/heads/master@{#416968}
Refactored invalidation set extraction.
Refactor into smaller more descriptive methods.

Implemented InvalidationSetFeatures::add() and hasFeatures() to add
features conditionally for selector lists like in :-webkit-any() instead
of tracking non-feature compounds using a foundFeatures variable.

Review-Url: https://codereview.chromium.org/2305593002
Cr-Commit-Position: refs/heads/master@{#416912}
Remove dead uses of FilterEffect::determineMaximumEffectRect
Said method only computes m_maxEffectRect. The only users of this data
is SVGFilterPainter, directly and via determineAbsolutePaintRect (which
in turn uses mapPaintRect which uses maxEffectRect in one case.) Hence
all other callsites are calling determineMaximumEffectRect() without
making use of the side-effect is has. Remove those uses.
This also mean that we can tailor the method for the one remaining
user by cleaning up, and removing, the flags argument.


Review-Url: https://codereview.chromium.org/2307343002
Cr-Commit-Position: refs/heads/master@{#416888}
Correct multicol dirty rect for scrolled and flipped blocks writing mode.
Calling LayoutBox::location() to make a physical rectangle relative to the
multicol container instead of the flowthread isn't going to work if writing
mode is with flipped blocks direction (vertical-rl), because location() returns
a semi-logical offset. It would have worked with topLeftLocation(), though.
But since we'd still have issues with scrolling, make the dirty rectangle
relative to the multicol container right away on the PaintLayer side instead,
since layers know how they have been scrolled. This also happens to be in line
with the comment there, so now we're actually doing what we say that we're
doing. :)

This makes fast/repaint/paged-with-overflowing-block-rl.html pass.

Review-Url: https://codereview.chromium.org/2310233002
Cr-Commit-Position: refs/heads/master@{#416859}
Update expectations for css3/filters/effect-reference-hw.html

Review-Url: https://codereview.chromium.org/2310993002
Cr-Commit-Position: refs/heads/master@{#416563}
New Win10 baselines for css3/filters/effect-reference-hw.html

Review-Url: https://codereview.chromium.org/2311933002
Cr-Commit-Position: refs/heads/master@{#416555}
Win10 needs new baselines for css3/filters/effect-reference-hw.html

Review-Url: https://codereview.chromium.org/2311943002
Cr-Commit-Position: refs/heads/master@{#416546}
Reland of Revamp filter primitive region calculations for Filter Effects
This moves the filter primitive region calculation to
SVGFilterPrimitiveStandardAttributes::setStandardAttributes, folding in
FilterEffect::applyEffectBoundaries and getting rid of
FilterEffect::m_effectBoundaries and related flags.
What's left of FilterEffect::determineFilterPrimitiveSubregion() is
renamed to determineMaximumEffectRect(), and callsites updated.


Review-Url: https://codereview.chromium.org/2303703002
Cr-Commit-Position: refs/heads/master@{#416537}
Implemented RuleSet diff for active stylesheets.
This is an implementation of the diffing of active stylesheets outlined
in [1] to replace the current compareStyleSheets method in
TreeScopeStyleSheetCollection which currently cause a "Reconstruct" if
you both have insertions and removals. With async stylesheet update we
will more likely end up in those situations as changes to the list can
happen in a batches.

An important new aspect here is that together with each stylesheet keep
a traced pointer to the RuleSet it had reference last time the active
stylesheet list was updated. That way we can figure out what changed on
media query and CSSOM changes.

The comparison algorithm works like this:

INPUTS: The new and old active stylesheet vectors
OUTPUTS: A vector of added and removed RuleSets.
         Also a return value saying if we only appended stylesheets at
         the end. Given that sheets were only appended we can do certain
         optimizations updating rule data.

* First linearly walk the old and new active list as long as the
  stylesheet pointers are the same. If the ruleset changed for the
  given sheet, add the old and new rulesets to the list of changed

* If we are finished walking any of the active lists, we have either
  appended a set of sheets to the end, or we have removed a set from
  the tail. Add the added/removed rulesets to the changed list and we
  are finished.

* If we have remaining sheets in both the old and new active list,
  merge the remaining items from both lists and sort the merged vector
  on stylesheet pointers. For stylesheet pointers occuring in pairs, if
  the rulesets are different for the two entries, the ruleset changed
  so we add them to the changed list. For stylesheets which do not occur
  in pairs, they are either added or removed and we add the ruleset to
  the changed list.

The time complexity for the algorithm is O(k) for the common prefix
and the complexity for std::sort for the m + n remaining sheets in the
new and old active lists. Note that each scope has its active list, so
the larger n's will be for the document scope as shadow trees most
often have a single stylesheet (I measured a max of three running some
Polymer apps).

An assumption here is that we will do ensureRuleSet() including media
query evaluation for the media attribute as we collect active
stylesheets. Currently, the analysis of which elements needs a style
recalc happens synchronously while updating the active sheets while the
rulesets are (re-)created asynchronously/on-demand via
lazyAppendAuthorStyleSheets in StyleResolver. The idea is that since
the active stylesheet update will be async, we can drop the lazyAppend
things from StyleResolver and add the stylesheets directly to the
ScopedStyleResolvers during the active stylesheet update.

Creating the RuleSets as we collect active stylesheets means we have
invalidation sets readily available to use style invalidation to
trigger style recalcs only on elements affected by the added/removed

[1] http://bit.ly/25uxtnU


Review-Url: https://codereview.chromium.org/1889993002
Cr-Commit-Position: refs/heads/master@{#416520}
Revamp filter primitive region calculations for Filter Effects
This moves the filter primitive region calculation to
SVGFilterPrimitiveStandardAttributes::setStandardAttributes, folding in
FilterEffect::applyEffectBoundaries and getting rid of
FilterEffect::m_effectBoundaries and related flags.
What's left of FilterEffect::determineFilterPrimitiveSubregion() is
renamed to determineMaximumEffectRect(), and callsites updated.


Review-Url: https://codereview.chromium.org/2303703002
Cr-Commit-Position: refs/heads/master@{#416472}
Compute better reference/visual boxes for clip-path in columns
clip-path's are applied before fragmentation, which means that we need
to adjust the coordinate space for the clip-path and its reference box
"manually" to get the correct visual coordinate space.

Also fix the origin used for clip-path to be the top-left corner of the
reference box. This only applies when SVG <clipPath> elements with
clipPathUnits='userSpaceOnUse' is referenced.


Review-Url: https://codereview.chromium.org/2300383002
Cr-Commit-Position: refs/heads/master@{#416451}
css3/masking/clip-path-reference-userSpaceOnUse.html no longer fails

Review-Url: https://codereview.chromium.org/2307063002
Cr-Commit-Position: refs/heads/master@{#416308}
Tweak css3/masking/clip-path-reference-userSpaceOnUse.html
Turn the <svg> into a block to avoid having to compensate for the
baseline of an inline.


Review-Url: https://codereview.chromium.org/2303043003
Cr-Commit-Position: refs/heads/master@{#416271}
Align reference box computation for inline boxes with Gecko
For inline boxes, the reference box should be computed per-fragment, and
be subject to box-decoration-break. We're not quite there yet though, so
go for "local compat" for now and align with Gecko. This way we're
slightly closer to "correct" (the "single line" case ought to be fairly
correct for instance), and hopefully avoid getting sucked into a compat
Adjust css3/masking/clip-path-reference-box-inline.html to match.


Review-Url: https://codereview.chromium.org/2303773002
Cr-Commit-Position: refs/heads/master@{#416264}
Simplify contain constraint calculation
We're selecting between two rectangles given by the intrinsic aspect ratio:
(defaultWidth / aspect ratio, defaultHeight) or (defaultWidth, defaultHeight x
aspect ratio). One rectangle is 'contained' and the other one 'covers'. Select
the 'contained' rectangle by trying out the first to see if its width fit, and
if so we're done. Otherwise compute and select the other rectangle.

Due to how floating point math works, it's possible that both computed
rectangles, or neither computed rectangle, will fit the case when the two ratios
are equal. See https://bugs.chromium.org/p/chromium/issues/detail?id=641221 for
one example. However, in this case it doesn't matter much which rectangle we
choose, the contained and and cover rectangle would be the same rectangle and
the floating point discrepancy has no known practical implication.


Review-Url: https://codereview.chromium.org/2294683002
Cr-Commit-Position: refs/heads/master@{#416238}
Don't cache matched properties for elements without a flat-tree parent.
When there's not flat tree parent for the element we are computing
style for, setHasExplicitlyInheritedProperties will not be set on the
ComputedStyle during property application. Without that flag set
correctly we allowed to add to the matched properties cache even though
we shouldn't.

There are some open questions here:

* How should body -> html propagation work when html has a shadow tree?
* Do children of a shadow host have a computed style at all when not

It should be noted that attachShadow is not allowed on the <html>
element. That is why the test case uses a v0 shadow tree.


Review-Url: https://codereview.chromium.org/2283933003
Cr-Commit-Position: refs/heads/master@{#416200}
Use LayoutSVGResourceClipper::resourceBoundingBox() in ClipPathClipper
Use the reference box to compute the clip-path bounds in ClipPathClipper,
using the resourceBoundingBox() method from LayoutSVGResourceClipper. This
should give reasonably tight-fitting bounds for the clip-as-mask code-path
which uses these bounds. It also means one less item to pass around.

This means that the clip-path code in PaintLayerPainter no longer needs
the |rootRelativeBounds| and associated bool, so that code can be pushed
down into FilterPainter with additional plumbing simplifications.

Also straighten out the code-flow in ClipPathClipper for less indented,
and hopefully easier to follow, code.

BUG=633028, 626097

Review-Url: https://codereview.chromium.org/2279823002
Cr-Commit-Position: refs/heads/master@{#416073}
Synthesize preserveAspectRatio='none' for non-viewBoxed <img>
For SVGs embedded in an image context, we will synthesize a viewBox that
matches the intrinsic dimensions of the SVGs, if no viewBox is
specified. This would result in an image where the aspect ratio
expressed by the intrinsic dimensions would be preserved.
This does not appear to match author expectations - they rather see that
the behavior in these cases match that of a "regular" raster-based
image. To achieve this, also synthesize a preserveAspectRatio-value of
"none" in these cases. This will result in the original image being
stretched in the most common cases. Any percentage dimensions will be
resolved against the computed dimensions (replaced size), and can hence
also produce a useful viewBox.

The implemented behavior is not currently specced (neither was the old
synthesizing of a viewBox), but matches Gecko.


Review-Url: https://codereview.chromium.org/2290173005
Cr-Commit-Position: refs/heads/master@{#416059}
We will not update the cached characteristic value when writing, nor will we call the observers' GattCharacteristicValueChanged method.
Update the documentation for WriteRemoteCharacteristic and change the name of the "new_value" parameter to "value".

See http://crbug.com/614534


Review-Url: https://codereview.chromium.org/2287273002
Cr-Commit-Position: refs/heads/master@{#416028}
Clear HTTP auth data on clearing cache

Review-Url: https://codereview.chromium.org/2097043002
Cr-Commit-Position: refs/heads/master@{#415919}
Resolve percentage in <use> against the instance's viewport element
In LayoutSVGTransformableContainer::calculateLocalTransform, 'x' and 'y'
were resolved against the original (corresponding) element. For a <use>
nested within a <symbol>, this would mean that when were going to look
up the viewport element, we'd return the outer <symbol> element and thus
fail to get a viewport.
Use the instance element to setup the SVGLengthContext instead.


Review-Url: https://codereview.chromium.org/2298783002
Cr-Commit-Position: refs/heads/master@{#415910}
Move SVGAnimateElement::findElementInstances to SVGElement.cpp
There's now only a single user of this function, so fold the function
into that one.


Review-Url: https://codereview.chromium.org/2293173003
Cr-Commit-Position: refs/heads/master@{#415901}
Fragment blocks with non-visible overflow as normally when printing.
Splitting scrollbars into multiple fragmentainers is only problematic in
interactive media. We don't need to impose any such pagination restrictions
when printing, since printing is non-interactive,


Review-Url: https://codereview.chromium.org/2298193002
Cr-Commit-Position: refs/heads/master@{#415645}
bluetooth: Added script for converting the Web Bluetooth blacklist.

Review-Url: https://codereview.chromium.org/2285663002
Cr-Commit-Position: refs/heads/master@{#415594}
Don't add redundant references to animated target element
SVGSMILElement adds a reference to its target, and any instances of the
target should never be mutated, so the registration of reference to the
extended target element set in SVGAnimateElement::resetAnimatedType does
not add any value.


Review-Url: https://codereview.chromium.org/2292983002
Cr-Commit-Position: refs/heads/master@{#415393}
Stricter treatment of SVGSVGElement::m_useCurrentView
m_useCurrentView being true implies that m_viewSpec is non-null. Perhaps
defensively, most code that checks it is written in a way such that it
expects that m_viewSpec can be null if m_useCurrentView is true - which
is not the case, and adds unnecessary code.
Instead change the code to adhere to the rule above, and assert that in
the various places instead.
Also add some checks of the invariant in methods that set the flag and
m_viewSpec. Refactor SVGSVGElement::setupInitialView to avoid the need
to sprinkle invariant checks "all over" it.


Review-Url: https://codereview.chromium.org/2290293003
Cr-Commit-Position: refs/heads/master@{#415346}
Simplify SVGAnimatedTypeAnimator interface
The two methods startAnimValAnimation and resetAnimValToBaseVal share
the same implementation, but are called in two different branches of the
same if-statement. Fold the two and add a new method
createAnimatedValue() to provide the animated value, to make this appear
as straight-forward as it is. Also fold the stopAnimValAnimation()
method since it's only used once, and because this makes the start/stop
action somewhat symmetric.
Rename the constructFromString(...) method to
createAnimatedValueFromString() to illustrate its relation to the newly
minted method and make it a bit more clear what it does.


Review-Url: https://codereview.chromium.org/2284263002
Cr-Commit-Position: refs/heads/master@{#415271}
Don't use substring() for a simple prefix match
The language code match in SVGTests::isValid() uses String::substring()
to limit the match to the primary language subtag. In the case where the
defaultLanguage() only contains the/a primary language subtag, this will
not require a copy, but otherwise it would.

Using startsWith() and a length-check guarantees that no copies will be
made. (A valid primary language subtag is always 2 letter long, so
checking only for length == 2 should be enough, although previously the
code could theoretically match a 1 letter, or even a zero-length tag.)

Review-Url: https://codereview.chromium.org/2284273002
Cr-Commit-Position: refs/heads/master@{#415255}
Tighten SVGAnimationElement::shouldApplyAnimation
Fold the targetIsUsable(...) helper from SVGAnimateElement into said
method, and then replace the uses of the former with the corresponding
'should apply' predicate.


Review-Url: https://codereview.chromium.org/2287983002
Cr-Commit-Position: refs/heads/master@{#415253}
Removed unused parentStyle in StyleAdjuster.
Parent style not used for HTML element adjustment.

Review-Url: https://codereview.chromium.org/2290623002
Cr-Commit-Position: refs/heads/master@{#415235}
Tidy up some loops in SMILTimeContainer::updateAnimations
Use for-range style loops and get rid of the local 'size' variable.
Also move the sort() call down after the early-out when there are no
animations to apply.


Review-Url: https://codereview.chromium.org/2287973002
Cr-Commit-Position: refs/heads/master@{#415165}
Reorder the AnimatedPropertyType enumeration
By moving AnimatedUnknown first (giving it the ordinal value 0), we can
simplify SVGElement::animatedPropertyTypeForCSSAttribute by removing
the contains() call (avoiding a double hash/lookup for the common case.)

Review-Url: https://codereview.chromium.org/2288583002
Cr-Commit-Position: refs/heads/master@{#415069}
Hoist updateAnimation() calls from SVGSMILElement::progress
The updateAnimation() calls in SVGSMILElement::progress() corresponds
to the timed element contributing to the animation "sandwich", so it's
trivial to hoist it out into the caller. Well there, the |resultElement|
logic can be replaced with a vector onto contributing timed elements are
appended. When all contributing timed elements are collected the value
is computed.


Review-Url: https://codereview.chromium.org/2283843002
Cr-Commit-Position: refs/heads/master@{#414937}
Allow multiple type and id selectors in invalidation set features.
:-webkit-any allows for more than one type selector in a compound
selector. Likewise, it may also allow for disjunct id selectors. Make
them vectors in InvalidationSetFeatures like we do for classes and
attributes to make style invalidation work for multiple id and type
selectors in :-webkit-any.


Review-Url: https://codereview.chromium.org/2284633002
Cr-Commit-Position: refs/heads/master@{#414933}
Reduce 'iterate self and instances' helper-count in SVGElement.cpp
Generalizing updateInstancesAnimatedAttribute{,NoInvalidate} to one
higher-level helper to get rid of the subtle differences brought on
by the differences in invalidation semantics.


Review-Url: https://codereview.chromium.org/2280923002
Cr-Commit-Position: refs/heads/master@{#414845}
Fold SMIL animation value application helpers and simplify
Folds the following helper functions:


into their users, hoisting common predicates and simplifies


Review-Url: https://codereview.chromium.org/2285473002
Cr-Commit-Position: refs/heads/master@{#414808}
svg/animations/use-animate-width-and-height.html no longer time out

Review-Url: https://codereview.chromium.org/2279263003
Cr-Commit-Position: refs/heads/master@{#414801}
Move onclick handler in svg/animations/use-animate-width-and-height.html
We can no longer listen after events on something that is an instance in
a <use>. Move the executeTest() call to the <use> element instead.

Since the mentioned file is almost a stub, the actual change is in


Review-Url: https://codereview.chromium.org/2283893002
Cr-Commit-Position: refs/heads/master@{#414776}
Fix clip-path reference box/coordinate space setup for hit-testing
Synchronize hit-testing code with rendering code with regards to how the
coordinate space is handled (for userSpaceOnUse <clipPath>s), and how
the reference boxes is computed.

Also "straighten" out code-flow a bit while here.


Review-Url: https://codereview.chromium.org/2280963002
Cr-Commit-Position: refs/heads/master@{#414730}
Bundle fake Widevine component manifest for stub CDM
Encrypted media browser tests involving Widevine use the stub CDM when
branding != Chrome.  This change allows them to register the
preinstalled component containing the stub CDM.


TEST=Widevine browser tests 'browser_tests --gtest_filter=*Widevine*' pass

Review-Url: https://codereview.chromium.org/2136983002
Cr-Commit-Position: refs/heads/master@{#414706}
Fix channel mapping for 8-ch audio in ffmpeg_aac_bitstream_converter
FFmpeg's AVCodecContext->channels contains "raw number of channels"
(e.g. "2" for 2 channels, "8" for 8 channels). The change ensures that:
- the value of "8" is correctly mapped to 0b111 ADTS channel
config (aka MPEG-4 Channel Configuration),
- the value of "7" becomes unsupported.


Review-Url: https://codereview.chromium.org/2273203003
Cr-Commit-Position: refs/heads/master@{#414685}
Use AnalyzedStyleUpdate for non-blocking sheets.
For no apparent reason we were always doing a full document recalc when
finishing loading a non-blocking stylesheet.

From webkit: https://bugs.webkit.org/show_bug.cgi?id=119236


Review-Url: https://codereview.chromium.org/2278803002
Cr-Commit-Position: refs/heads/master@{#414682}
Move animVal invalidation from SVGAnimateElement to SVGElement

Review-Url: https://codereview.chromium.org/2281643003
Cr-Commit-Position: refs/heads/master@{#414543}
Remove temporary file that was accidentally checked in
This file was added as part of https://codereview.chromium.org/2211473003
but looks like it was done so by mistake. Remove it again.


Review-Url: https://codereview.chromium.org/2276423002
Cr-Commit-Position: refs/heads/master@{#414467}
Use LocalStyleChange for insertion point inheritance propagation.
For shadow dom v0, we used a SubtreeStyleChange for propagating
inherited style changes through insertion points to distributed nodes.
LocalStyleChange should suffice. We already use LocalStyleChange in the
HTMLSlotElement case.

We still need to use SubtreeStyleChange where we have a
SubtreeStyleChange/Force from further up the tree like:

    <style>.a::content * { background: green }</style>
    <div id="a">
  <div>Green when #a gets class a.</div>


Review-Url: https://codereview.chromium.org/2258793003
Cr-Commit-Position: refs/heads/master@{#414386}
Refactor SMIL animation value updates
Push updating of the animation value into SVGElement. This resembles the
Web Animations code-path to some degree and maybe we can make them even
more similar eventually. This is the first CL in a series that will
remove knowledge of <use>/shadow trees from the SMIL animation code.


Review-Url: https://codereview.chromium.org/2272033002
Cr-Commit-Position: refs/heads/master@{#414366}
Simplify SMIL animation CSS property updates
After https://codereview.chromium.org/2251073002 we should no longer
need to walk any <use> instances "manually", since setNeedsStyleRecalc
does that already. This should also avoid the potential double-work
because of this.



Review-Url: https://codereview.chromium.org/2270363004
Cr-Commit-Position: refs/heads/master@{#414358}
Move JNI bindings for url_formatter from chrome to //components/url_formatter
By moving the url_formatter methods out of
org.chromium.chrome.browser.UrlUtilities to it's component, other emdedders than
Chrome can benefit from the Java version.

This CL removes the tests originally written for a Java implementation of the
methods replaced by FormatUrlForSecurityDisplay in
https://codereview.chromium.org/1357563002. It's not trivial to move the tests
over to the component as they depend on native library initialization performed
by //content which is disallowed in components/url_formatter/DEPS. Also, the
tests are redundant as the code is thoroughly tested by other means.

Currently there are no users of formatUrlForDisplay() in Chromium, but Opera
would like it exposed.


Review-Url: https://codereview.chromium.org/2110543004
Cr-Commit-Position: refs/heads/master@{#414356}
Consider pseudo classes as matching for shared style rejection.
The user action pseudo classes rely on affectedBy bits to be correctly
set on ComputedStyle in order to recalculate style for such changes
later on. If two elements may otherwise share style, but will have the
affectedBy bits set differently, they may not share style.


  <style>[attr]:hover {}</style>
  <div attr></div>

The second div may share style with the first one when none of them is
hovered. However, matching the selector against the first div will fail
on the attribute selector before we try to match :hover, hence the flag
for affectedByHover will not be set. If we share that ComputedStyle
object with the second div, hovering the second div later will have no

Instead we always match :hover/:active/:focus/:-webkit-drag when
matching rules for style sharing (attribute and sibling rules). That
will lead to the attribute selector in the example above to match which
will cause style sharing to be rejected for the second div.


Review-Url: https://codereview.chromium.org/2272683002
Cr-Commit-Position: refs/heads/master@{#414221}
Use border-box as the reference box for (-webkit-)clip-path
The 'clip-path' property should use the border box as the reference box
(per default; <geometry-box> not yet supported) [1].
The new behavior matches WebKit and Gecko (except for inline boxes,
see below.)

For inline boxes that span multiple lines we use the union of all the
lines. The test css3/masking/clip-path-reference-box-inline.html added
to track this behavior.

[1] https://drafts.fxtf.org/css-masking-1/#the-clip-path


Review-Url: https://codereview.chromium.org/2273733002
Cr-Commit-Position: refs/heads/master@{#414118}
Don't skip column set interval tree search for flow thread offset == 0.
We cannot assume that offset 0 is in the first column set, since the first
column set may be empty.

Review-Url: https://codereview.chromium.org/2274683002
Cr-Commit-Position: refs/heads/master@{#413939}
Update test that rendered incorrectly because orphans and widows are now 2 by default.
The test and the ref were rendered identically (so no failure was reported),
but the result was wrong according to the pass condition text.

Change the ref to not use multicol, to reduce the risk of something like this
going unnoticed in the future.


Review-Url: https://codereview.chromium.org/2271633002
Cr-Commit-Position: refs/heads/master@{#413789}
Implement device::BatteryStatus support for UPower daemon 0.99.x
The org.freedesktop.UPower API was changed when upgrading the UPower daemon
from version 0.9.23 to 0.99.x. The BatteryStatusManagerLinux used the
"Changed" signal which was replaced by the "PropertyChanged" signal.

Change the BatteryStatusManagerLinux to use the new UPower API
(and keep compatibility with the 0.9.23 version, which is still used in
Ubuntu 14.04 LTS).

1. use dbus::PropertySet: the dbus::PropertySet provides simple access to
the properties and connection to the property-changed notifications.

2. Use UPower method GetDisplayDevice:
The 'DisplayDevice' is a composite battery device. That was added in UPower
version 0.99.0. If we don't get that device or if it is no battery, then we
continue to enumerate all devices.

3. Listen to 'DeviceAdded' and 'DeviceRemoved' signals:
Re-enumerate battery devices if a device is added/removed.

4. Compatibility with UPower version < 0.99
Only old UPower versions need to connect to the 'Changed' signal.

5. Rewrite the existing unittests to use a BatteryStatusManagerLinux instance
with a dbus::MockBus and mock the dbus-methods/properties for the test.
Add more unittests:
- for changing device properties
- for the DisplayDevice
- for enumerating devices
- for the DeviceAdded and DeviceRemoved signals

Review-Url: https://codereview.chromium.org/2066503002
Cr-Commit-Position: refs/heads/master@{#413745}
Refactor ClipPathHelper in PaintLayerPainter.cpp for reuse
Separate out client concerns and move the helper class to a new file and
rename it to ClipPathClipper. This will allow sharing this code between
the PaintLayerPainter and SVGPaintContext code-paths.


Review-Url: https://codereview.chromium.org/2265123002
Cr-Commit-Position: refs/heads/master@{#413518}
Use base::SizeTToString instead of std::to_string
std::to_string is disallowed by the chromium code style and we get into trouble with a custom mips toolchain that lacks support.


Review-Url: https://codereview.chromium.org/2264993002
Cr-Commit-Position: refs/heads/master@{#413513}
More const LayoutObject references in SVGLayoutSupport

Review-Url: https://codereview.chromium.org/2265113002
Cr-Commit-Position: refs/heads/master@{#413501}
Drop outdated comment in SVGClipPainter.h
This FIXME/comment can no longer be considered relevant. (Dates back
to when similar methods to prepareEffect/finishEffect lived in the
LayoutSVGResourceContainer hierarchy.)

Review-Url: https://codereview.chromium.org/2261173003
Cr-Commit-Position: refs/heads/master@{#413479}
Implement BluetoothGattNotifySession::Stop on Android, 2nd attempt
This change enables the stopNotifications function for remote GATT
characteristics on Android. In order to do so, two distinct refactorings have been done;

1) The session classes have been simplified so that platform specific versions are no longer required. All code that previously used BluetoothGattNotifySession[Mac|Win|BlueZ] now simply use the base BluetoothGattNotifySession class.

2) BluetoothRemoteGattCharacteristic::StartNotifySession and StopNotifySession have been rewritten so that all the code for keeping track of the different session objects and the notification state sits in the base class. Inheriting classes should no longer override these two functions, but instead override the much simpler SubscribeToNotifications and UnsubscribeFromNotifications.


Committed: https://crrev.com/d41af3adfd8500c81c827ab03ed2736909cf1ee8
Review-Url: https://codereview.chromium.org/2051333004
Cr-Original-Commit-Position: refs/heads/master@{#412498}
Cr-Commit-Position: refs/heads/master@{#413417}
Replace SMILTime with double for elapsed time in SMILTimeContainer
We don't really make use of of the special properties of SMILTime for
this case, and using double means slightly less impedance mismatching.


Review-Url: https://codereview.chromium.org/2261443002
Cr-Commit-Position: refs/heads/master@{#413345}
Don't schedule a wake-up if the timeline hasn't started
Before the timeline has started we shouldn't update animations. This
makes resume() symmetric with pause().


Review-Url: https://codereview.chromium.org/2254303005
Cr-Commit-Position: refs/heads/master@{#413336}
Refactor SMILTimeContainer can-schedule-frame predicate
begin() and updateAnimationsAndScheduleFrameIfNeeded() use the same
predicate to check if they should schedule an animation frame - although
they phrase it slightly differently (because of local knowledge.)
Move the generic version to a canScheduleFrame() method and use that in
both cases.


Review-Url: https://codereview.chromium.org/2257803002
Cr-Commit-Position: refs/heads/master@{#413328}
Simplify time tracking in SMILTimeContainer
Instead of 5 difference time fields, use two - one to track the last
seek/pause time in the container ("presentation time"), and one to
track the document time corresponding to that.
Use two bool flags for tracking 'paused' and 'started' state.

Also straighten out code-flow in SMILTimeContainer::begin() to make it
a bit more obvious that we're essentially mirroring the contents of
updateAnimationsAndScheduleFrameIfNeeded. begin() is also renamed into
start(). Pass double to SMILTimeContainer::scheduleAnimationFrame, do
some ASSERT->DCHECK transformations when touching code and touch up
some comments.


Review-Url: https://codereview.chromium.org/2248643003
Cr-Commit-Position: refs/heads/master@{#413283}
Avoid stack allocating StyleSheetCollections.
StyleSheetCollection is a GarbageCollected<>-derived object, which ideally
shouldn't be allocated on the stack (== outside the heap), as it leaves
the door open for it being attempted marked (and traced), which it the
allocation doesn't support (the allocation has no header information
preceeding it.)


Review-Url: https://codereview.chromium.org/2096653004
Cr-Commit-Position: refs/heads/master@{#413088}
Remove unused StyleChangeReasons.
The removed reasons are no longer used because they have been replaced
by using invalidation sets.


Review-Url: https://codereview.chromium.org/2256233002
Cr-Commit-Position: refs/heads/master@{#413034}
Avoid setting timers from SVGImage::resetAnimation()
When resetting the timeline to t=0, we may up generating syncbase
notification, which sets up a timer (to update any possibly dependent
intervals.) Since resetAnimation() is what's called when the (SVG)Image
no longer has any clients, we should try to make sure it is indeed
idle after that happens. This avoids trying to update animation state
while the image is otherwise dead, leaving "reactivation" to the time
it is next painted.


Review-Url: https://codereview.chromium.org/2247783003
Cr-Commit-Position: refs/heads/master@{#412798}
gn: make gn gen preserve import statements passed in --args
Previously, gn gen would expand all imports and only record the final
arg keyvalue pairs in args.gn, if called as gn gen --args='import...'.

Now the actual import statement will be recorded. This allows avoiding
a manual args.gn edit of you want an actual import statement there, for
example if the imported gni houses a predefined set of default args
that you want to follow, and want to re-gn when it changes.


Review-Url: https://codereview.chromium.org/2250623004
Cr-Commit-Position: refs/heads/master@{#412687}
remove duplicate atk GN config
The atk GN configs were moved to a separate GN file in
https://codereview.chromium.org/1909273002 but it appears
that the original configs were not removed, and are still
referenced.  Let's remove the old configs and just use
the new ones.

And while we're at it, add an assertion to check that glib
is enabled when atk is.



Review-Url: https://codereview.chromium.org/2251673004
Cr-Commit-Position: refs/heads/master@{#412680}
Make sure there is no crash on parsing empty manifest
Changes match the logic in SourceHighlighter in the same file and will
result in UI showing message akin to 'No source file available'. This is fine
as already the same happens for other source files in bundled extensions.


Review-Url: https://codereview.chromium.org/2245143004
Cr-Commit-Position: refs/heads/master@{#412556}
"Inline" auto-positioned out-of-flow objects are affected by pagination struts.
An out-of-flow positioned object that "belongs" to a line may need to adjust
its block position after the line has been laid out, since the line may have
been pushed to the next fragmentainer by a pagination strut.


Review-Url: https://codereview.chromium.org/2249853007
Cr-Commit-Position: refs/heads/master@{#412546}
Implement BluetoothGattNotifySession::Stop on Android
This change enables the stopNotifications function for remote GATT
characteristics on Android. In order to do so, two distinct refactorings have been done;

1) The session classes have been simplified so that platform specific versions are no longer required. All code that previously used BluetoothGattNotifySession[Mac|Win|BlueZ] now simply use the base BluetoothGattNotifySession class.

2) BluetoothRemoteGattCharacteristic::StartNotifySession and StopNotifySession have been rewritten so that all the code for keeping track of the different session objects and the notification state sits in the base class. Inheriting classes should no longer override these two functions, but instead override the much simpler SubscribeToNotifications and UnsubscribeFromNotifications.


Review-Url: https://codereview.chromium.org/2051333004
Cr-Commit-Position: refs/heads/master@{#412498}
Handle auto-positioned out-of-flow objects inside multicol containers correctly.
We used to get it all wrong for out-of-flow children of multicol containers
whose containing block were on the outside of the multicol container. Those
do not live in the flow thread coordinate space, so we have to convert their
location to visual coordinates.


Review-Url: https://codereview.chromium.org/2250713002
Cr-Commit-Position: refs/heads/master@{#412375}
-fno-auto-profile is only available beginning with stock GCC 5
This followup to https://codereview.chromium.org/2198253002
unbreaks stock GCC 4.8/4.9 builds.

(We suspect that the chromeos GCC 4.9 toolchain has a local patch for this feature.)


Review-Url: https://codereview.chromium.org/2244983002
Cr-Commit-Position: refs/heads/master@{#412267}
Correct offsetLeft and offsetTop calculation for column-span:all.
adjustedPositionRelativeTo() handled multicol incorrectly (the calls to
columnOffset()), which was especially hurtful for spanners. We should only call
it on objects in our containing block chain. This means that we need to walk
the ancestry using container() instead of parent(). The container() of a
spanner is the multicol container. We need to skip the inbetween flow thread,
since it only contains column content, and not spanners.

We also had bugs here with absolutely positioned objects inside multicol
containers whose containing block are on the outside of the multicol container,
but that's not really going to matter until we're able to lay out such objects
correctly. That's bug 291616. As such, this CL is also a preparatory patch for
fixing that bug.

This CL will also make it possible to write check-layout.js tests for spanners,
instead of having to resort to reftest or something even lesser.


Review-Url: https://codereview.chromium.org/2251443002
Cr-Commit-Position: refs/heads/master@{#412255}
Corrected :nth-child invalidation test description.

Review-Url: https://codereview.chromium.org/2242113002
Cr-Commit-Position: refs/heads/master@{#411950}
Ignored title in shadow should cause StyleSheet.title = null.


Review-Url: https://codereview.chromium.org/2239353002
Cr-Commit-Position: refs/heads/master@{#411942}
Use invalidation sets for nth invalidations.
Invalidate siblings of inserted/removed elements for :nth type changes
by scheduling a descendant invalidation set on the parent node of the
inserted element.

There is currently one such set for all structural pseudo classes with
the exception of :first-child, :last-child, and :only-child, which have
their own sets and may have so since they can't affect arbitrary

The descendant set never has invalidatesSelf since it's scheduled on
the parent node of where the actual change happens.

Structural pseudo classes in the righmost compound adds rightmost
compound features to the descendant set:

  .a:nth-child(3n) {} => adds ".a" to the descendant set.

Righmost compound structural pseudo classes where there are no other
features makes the descendant set have wholeSubtreeInvalid since all
siblings where the mutation happens have to be invalidated:

  :nth-child(3n) {} => setWholeSubtreeInvalid()

Sibling selectors turns into descendant features:

  :nth-child(3n) + .a {} => adds ".a" to the descendant set.

Descendant selectors causes features to be added as normal:

  :nth-child(3n) .a {} => adds ".a" to the descendant set.

This approach isn't super optimal since having a rightmost structural
pseudo without other features in the compound will cause nth-
invalidations to still be full subtree invalidations, but it should be
a good first iteration.

What we could do is something along the lines of what sibling
invalidations do where they have a maximum number of siblings a set
applies to. The nth-invalidation where the pseudo is in the rightmost
compound really needs to invalidation all siblings and not their
descendants. We could have some notion of removing descendant sets
which should no longer apply walking down the tree.

Traversing siblings scheduling invalidation sets on them was not chosen
for the same reason we schedule siblings invalidations as descendant
invalidations on the parent node for sibling mutations already.


Review-Url: https://codereview.chromium.org/2235723002
Cr-Commit-Position: refs/heads/master@{#411647}
Need to roll back the multicol machinery state when re-laying out a block child.
If a block child contains a column spanner, and we need to re-lay it out
because the initial logical top estimate turned out to be wrong, we need to
roll back to the first column set that "contains" the block child.

Otherwise, LayoutMultiColumnFlowThread::columnSetAtBlockOffset() may return the
wrong column set.


Review-Url: https://codereview.chromium.org/2231383002
Cr-Commit-Position: refs/heads/master@{#411352}
Elide LifecycleObserver<T,O>::Context type alias.
No longer a need to bind LifecycleObserver<T, O>'s T parameter to a
separate alias/name; simplify to LifecycleObserver<Context, O>.


Review-Url: https://codereview.chromium.org/2238503002
Cr-Commit-Position: refs/heads/master@{#411271}
ASan-exempt CrossThreadPersistentRegion::shouldTracePersistentNode().
CrossThreadPersistent<T>s can reside on heap objects which are lazily
swept. Consequently, when a (per-)thread GC runs and it iterates over the
CrossThreadPersistentRegion to determine what nodes point into its heaps,
it can in the general case also touch lazily sweepable heap objects.

This is a benign read access to a region of memory that Oilpan has poisoned;
therefore, shouldTracePersistentNode() must be exempt from ASan checks to
prevent false negatives from being caught and reported.


Review-Url: https://codereview.chromium.org/2230623002
Cr-Commit-Position: refs/heads/master@{#410980}
Use elementAfter/Before, not nodeAfter/Before for nth-invalidation.
If the node after/before the inserted element is a text node, and that
text node is the last/first sibling, then it shouldn't prevent the
optimization for skipping recalc for nth/nth-last selectors.


Review-Url: https://codereview.chromium.org/2228933002
Cr-Commit-Position: refs/heads/master@{#410758}
There's no class A break point before or after a float.
LayoutBox::classABreakPointValue() should only be called at class A break
points. Document the assertion there, and make sure that
needsForcedBreakBefore() only calls it when at in-flow objects.


Review-Url: https://codereview.chromium.org/2228803003
Cr-Commit-Position: refs/heads/master@{#410703}
Style invalidation support for :first/last/only-child.
Got rid of SubtreeStyleChanges for those pseudo classes. Also fixed
issue 245914 by looking at next/previous element, not node, to figure
out if we are the first. The code in checkForSiblingStyleChanges could
be restructured quite a bit and made simpler now have changedElement
(changedNode => changeElement since the input is always an element).


Review-Url: https://codereview.chromium.org/2229503002
Cr-Commit-Position: refs/heads/master@{#410472}
Cached style element sheets may not have an owner node.
The assert for cacheability of shared StyleSheetContents required the
ownerNode to be a non-null style element. Referring to and modify a
stylesheet is however possible after the style element has been removed
and the ownerNode set to null. Change the assert to just check for the
two types of cacheability.

This was not triggered by stylesheets not having @media rules since the
cacheability of linked resources would be true and made the assert

Also, made the ASSERT a DCHECK along with the other ASSERTs in the
modified file.


Review-Url: https://codereview.chromium.org/2220863002
Cr-Commit-Position: refs/heads/master@{#410305}
Initialize MaterialDesignController in NativeThemeMacTest
This is fix for crash (CHECK) in NativeThemeMacTest.SystemColorsExist:
FATAL:material_design_controller.cc(66)] Check failed: is_mode_initialized_


Review-Url: https://codereview.chromium.org/2120273002
Cr-Commit-Position: refs/heads/master@{#410108}
Revert of Add a fast-path for independent inherited properties (patchset #13 id:240001 of https://codereview.chromium.org/2117143003/ )
Reason for revert:
Caused issues 634254 and 633859.

Original issue's description:
> Add a fast-path for independent inherited properties
> Add a fast-path for inherited properties which do not depend on and do
> not affect any other properties on ComputedStyle. When these properties
> are modified in a parent element, set them directly on ComputedStyle and
> skip doing a full recalc for elements only affected by this change.
> Also implemented two of these properties: visibility and pointer-events,
> storing an extra 2 bits per ComputedStyle. This increases the size of
> ComputedStyle by 1 byte on Windows and some Android builds (due to
> aligned fields), which increases the memory usage for a standard page
> with ~1000 elements by up to 1kb (although potentially up to 4/8kb on
> 32/64 bit builds due to packing, although this depends on the allocator
> implementation details) but realistically less since style sharing only
> creates one ComputedStyle object for each unique style.
> Benchmarks show a speed increase of up to 2x for setting these
> properties on the root element of a typical web page (Facebook, Twitter,
> Pinterest, Amazon, Wikipedia) and letting the change propagate directly
> onto the child ComputedStyle objects, rather than doing a full style
> recalc.
> Initial Benchmarks:
> https://docs.google.com/spreadsheets/d/1mUuJEs8cPWyNTR7tQw27oxq6fDTvWiAwgatf_g--B4w/edit#gid=1597242813
> Follow-up Benchmarks:
> https://docs.google.com/spreadsheets/d/1mUuJEs8cPWyNTR7tQw27oxq6fDTvWiAwgatf_g--B4w/edit#gid=918856082
> BUG=622138
> Committed: https://crrev.com/f24dba9f04dd093aac4298378c671ecd44d0fe97
> Cr-Commit-Position: refs/heads/master@{#409143}

# Not skipping CQ checks because original CL landed more than 1 days ago.

Review-Url: https://codereview.chromium.org/2213223004
Cr-Commit-Position: refs/heads/master@{#410030}
SSLPolicy::OnCertError: expired_previous_decision might be used uninitialized.

Review-Url: https://codereview.chromium.org/2219463002
Cr-Commit-Position: refs/heads/master@{#409918}
Remove unused includes of shell::InterfaceRegistry
This is a follow-up to:

Review-Url: https://codereview.chromium.org/2207873002
Cr-Commit-Position: refs/heads/master@{#409776}
Use weak members to cache StyleSheetContents.
We used the client count to detect if we could remove a
StyleSheetContents from the StyleEngine cache or not. The problem is
that the client references are removed when the element is removed from
the DOM, but the StyleSheetContents is still referenced from the
CSSStyleSheet which is accessible from CSSOM. That caused bugs with
StyleSheetContents being marked as mutable without removing it from the
cache causing assertions, and mutating the sheet without copy-on-write
because we thought we only had a single client for the contents.

Instead use weak members in the cache and let garbage collection delete
the StyleSheetContents when no longer referenced. Also, add a flag to
StyleSheetContents to say that it is referenced by multiple sheets when
we use and already cached object instead of incorrectly relying on
client count.


Review-Url: https://codereview.chromium.org/2205843003
Cr-Commit-Position: refs/heads/master@{#409495}
Add option to not generate VS projects for targets deps

Review-Url: https://codereview.chromium.org/2200123002
Cr-Commit-Position: refs/heads/master@{#409489}
Removed unused accessor for StyleResolver::m_features.

Review-Url: https://codereview.chromium.org/2207693003
Cr-Commit-Position: refs/heads/master@{#409458}
make use of existing gn args in net/BUILD.gn

Review-Url: https://codereview.chromium.org/2188043002
Cr-Commit-Position: refs/heads/master@{#409209}
make use of the use_gio gn arg

Review-Url: https://codereview.chromium.org/2190793002
Cr-Commit-Position: refs/heads/master@{#409204}
make use of existing gn args in ui build config

Review-Url: https://codereview.chromium.org/2185163003
Cr-Commit-Position: refs/heads/master@{#409203}
Have ResizeViewportAnchor derive from GarbageCollected<> only.
Drop use of GarbageCollectedFinalized<>; not needed for this


Review-Url: https://codereview.chromium.org/2192373002
Cr-Commit-Position: refs/heads/master@{#408888}
Remove unused function template overloads.
Leftover from r408135, remove the generated isT(*RefPtr<T>)
overloads also.


Review-Url: https://codereview.chromium.org/2201633002
Cr-Commit-Position: refs/heads/master@{#408887}
Move DOMConvenienceAPI to stable.
Move ChildNode.{before,after,replaceWith}() +
ParentNode.{prepend,append}() to stable.


Review-Url: https://codereview.chromium.org/2184223004
Cr-Commit-Position: refs/heads/master@{#408582}
Remove unnecessary eager finalization of PingLoaders.
A PingLoader instance controls its own lifetime, releasing its
self-keepalive reference upon completion of the load request. At that
time it also lets go of its loader object (and stops the timer), hence
there's no need to eagerly finalize this object -- it serves no real


Review-Url: https://codereview.chromium.org/2180423005
Cr-Commit-Position: refs/heads/master@{#408417}
Update and fix sendBeacon() redirect behavior.
Refresh the implementation to follow the specification changes in


In particular, correctly flag a CORS-disallowed redirect as not to
be followed by WebURLLoader.


Review-Url: https://codereview.chromium.org/2177383006
Cr-Commit-Position: refs/heads/master@{#408380}
harfbuzz-ng: make use of the use_glib gn arg

Review-Url: https://codereview.chromium.org/2187163002
Cr-Commit-Position: refs/heads/master@{#408370}
make use of use_gconf & use_glib gn args in content/browser/
Review-Url: https://codereview.chromium.org/2191733002
Cr-Commit-Position: refs/heads/master@{#408362}
power_save_blocker_x11.cc depends on dbus
Review-Url: https://codereview.chromium.org/2189523004
Cr-Commit-Position: refs/heads/master@{#408275}
Move platform/ParsingUtilities.h to wtf/text/
Review-Url: https://codereview.chromium.org/2175123002
Cr-Commit-Position: refs/heads/master@{#408249}
(gcc) fix compilation of os_exchange_data_provider_aurax11.cc
This fixes a gcc compilation error in os_exchange_data_provider_aurax11.cc:
error: cannot convert 'ret' from type 'std::unique_ptr<ui::OSExchangeDataProviderAuraX11>'
    to type 'std::unique_ptr<ui::OSExchangeDataProviderAuraX11>&&'

Tested with gcc 4.8.4.

Followup to https://codereview.chromium.org/2179813003


Review-Url: https://codereview.chromium.org/2192533002
Cr-Commit-Position: refs/heads/master@{#408233}
Remove unused function template overloads.

Review-Url: https://codereview.chromium.org/2182213005
Cr-Commit-Position: refs/heads/master@{#408135}
(gyp): breakpad_host should push include_dirs to dependents
Followup to https://codereview.chromium.org/2169063002

BUG=internal b/30003601

Review-Url: https://codereview.chromium.org/2183613003
Cr-Commit-Position: refs/heads/master@{#407758}
Disable svg/parser/whitespace-length-invalid-1.html

Review-Url: https://codereview.chromium.org/2178993003
Cr-Commit-Position: refs/heads/master@{#407580}
Simplify ElementVisibilityObserver implementation.
Recast ElementVisibilityObserver's VisibilityCallback in a more
Blink-like manner by way of a Client interface. Thereby also addressing
on-off-heap cycle, a leak source.

Similarly, simplify the connection between ElementVisibilityObserver and
IntersectionObserver -- have the former directly implement the
IntersectionObserverCallback instead of indirectly using closure callbacks.


Review-Url: https://codereview.chromium.org/2173353002
Cr-Commit-Position: refs/heads/master@{#407450}
Remove unnecessary finalization of IDBObserver classes.
Re-apply r402117 which r404283 accidentally reverted.


Review-Url: https://codereview.chromium.org/2177083002
Cr-Commit-Position: refs/heads/master@{#407418}
Don't resolve non-local -webkit-clip-path references as local
Whether the reference was local or not was disregarded, meaning that
any URL with a valid fragment part could potential result in a valid
clip - regardless of whether it was local or not. I.e foo.svg#bar would
reference an element with the id 'bar' in the local document.

Check if the URL reference resolver flagged the reference as being local,
and only pass a non-null fragment if it was.


Review-Url: https://codereview.chromium.org/2174813003
Cr-Commit-Position: refs/heads/master@{#407300}
Make fragment-only URLs always be document-local references
This implements the 'local url' handling per:


which is also referenced from:


Most of the logic is handled by a new helper class named
SVGURLReferenceResolver, which keeps state, resolves the URL
and extracts the fragment identifier as needed.


Review-Url: https://codereview.chromium.org/2174833002
Cr-Commit-Position: refs/heads/master@{#407299}
Reland of Remove platform/text/ParserUtilities.h
platform/ParsingUtilities.h caters to the same needs, so transition
users of skipString(...) to skipToken(...) and remove

Review-Url: https://codereview.chromium.org/2176623003
Cr-Commit-Position: refs/heads/master@{#407259}
Remove platform/text/ParserUtilities.h
platform/ParsingUtilities.h caters to the same needs, so transition
users of skipString(...) to skipToken(...) and remove

Review-Url: https://codereview.chromium.org/2176623003
Cr-Commit-Position: refs/heads/master@{#407187}
Resolve URL/target reference at a single point in SVGUseElement
The <base> URL can change between the attribute (href) is updated and
the shadow tree constructed. This causes confusion in the target
resolving code since it can produce different results at different
points in time.
Only resolve the URL on changes (to 'href'), extract the fragment
identifier and store whether the reference is local or not.
Refactor the SVGUseElement target element lookup with an eye to
future handling of "fragment-only" (local) URLs.
This makes the externalDocument in
SVGURIReference::targetElementFromIRIString unused, so remove that
codepath and simplify the function accordingly.

This changes behavior from resolving the URL and target element when
needed (depending on when layouts happen), to only when the 'href' is
mutated. This new behavior matches Edge, but not Gecko.

BUG=601203, 470608

Review-Url: https://codereview.chromium.org/2173453002
Cr-Commit-Position: refs/heads/master@{#407128}
Merge CSSSVGDocumentValue with CSSURIValue
These two CSSValue classes are used to represent the same semantic,
which is a reference to an element by means of a "url(...)" function.
CSSSVGDocumentValue carries additional state to be able to handle
references to external documents, by caching a DocumentResource.

Move all the DocumentResource state to CSSURIValue, while also keeping
the naming of the URL string (m_url). Also do some minor cleanup, for
instance by removing "SVG" from the cachedSVGDocument() method name and
dropping some unnecessary .get()s.

This bloats CSSURIValue a bit for the cases where the DocumentResource
is not utilized, but this bloat will be reduced (in relative terms) with
future developments. On the "pro"-side is naturally that we now don't
have to extend two CSSValue classes with additional functionality and

BUG=470608, 405315

Review-Url: https://codereview.chromium.org/2165833006
Cr-Commit-Position: refs/heads/master@{#407126}
Use absolute namespace references in //base/logging.h macros
Macros can be used in various namespace contexts, and macros that expand
to "logging::Something" can end up choosing some_namespace::logging
if used in a context wher ethere exists a nested namespace logging with
a conflicting name like LogMessage. It's fixable by using "::logging::"
instead of "logging::" in the macros.

No examples of such issues in chrome, but this can help downstream and
seems a good thing to do consistently.


Review-Url: https://codereview.chromium.org/2045203004
Cr-Commit-Position: refs/heads/master@{#406910}
rebaseline huge-image-viewport-scale.html
This test was not being run with correctly initialized
preferences, and an invalid baseline.  This fixes the
initialization, and rebaselines the test.

This is a prerequisite of https://codereview.chromium.org/2155273002/

BUG=331654, 464295

Review-Url: https://codereview.chromium.org/2163953002
Cr-Commit-Position: refs/heads/master@{#406679}
Remove WebContents::InsertCSS since it is unused
This looks like it hasn't been used since CL923463003 landed
over a year ago.


Review-Url: https://codereview.chromium.org/2157153002
Cr-Commit-Position: refs/heads/master@{#406656}
Simplify URL-resolving in targetElementFromIRIString
Use Document::completeURL for URL resolving, rather than using
String::substring et.c to reproduce essentially the same code.
Use KURL::fragmentIdentifier and friends to extract the fragment

Fold urlFromIRIStringWithFragmentIdentifier into its only user.
Open-code isExternalURIReference in targetElementFromIRIString, since we
already have the URL resolved and ready.


Review-Url: https://codereview.chromium.org/2170453002
Cr-Commit-Position: refs/heads/master@{#406578}
Simplify "is external URL" in filter operations resolving
We've already resolved the URL, so we might as well just use
equalIgnoringFragmentIdentifier on that rather than potentially
re-resolve and compare. No functional change.
Eventually we'll need to have the URL resolved before style resolution.

BUG=470608, 405315

Review-Url: https://codereview.chromium.org/2167733002
Cr-Commit-Position: refs/heads/master@{#406574}
Fix uninitialized variable in PrefServiceSyncable class.
Review-Url: https://codereview.chromium.org/2165943002
Cr-Commit-Position: refs/heads/master@{#406571}
Only flag the LayoutObject on CSP error if one is attached
When instantiating a plugin through the (somewhat special) code-path
that does not require a LayoutObject to be present, we would end up
dereferencing a null-pointer if a CSP error was flagged, failing the
plugin load sequence.


Review-Url: https://codereview.chromium.org/2162473003
Cr-Commit-Position: refs/heads/master@{#406295}
[net-internals] Fix JS exception on stopping capturing while in Capture view
Store a map of link enabled states so that we can use it to enable next
visibile view on hidding active view. Map is ordered so it works to iterate it.


Review-Url: https://codereview.chromium.org/2121763002
Cr-Commit-Position: refs/heads/master@{#405942}
gyp: url_mojom should be a hard_dependency
The url/url.gyp:url_mojom target depends on url_interfaces_mojom,
which generates header files, and sets itself as a
hard_dependency.  Thhat hard_dependency status is not propagated
to url_mojom. Let's add it explicitly.

Review-Url: https://codereview.chromium.org/2153093002
Cr-Commit-Position: refs/heads/master@{#405794}
Fix TouchSelectionControllerImpl tests failing with DPI=125%
Make textfield a bit larger so text fits it when system DPI is set to 125%.

Fixes following tests:


Review-Url: https://codereview.chromium.org/2120353003
Cr-Commit-Position: refs/heads/master@{#405743}
Fix invalidating the text track indexes after append or remove text track from the list
There was a trivial bug in 'for' loop which iterates through the array
indexes but always uses the initialisation value of the iterator instead of
real value of the iterator.


Review-Url: https://codereview.chromium.org/2144543002
Cr-Commit-Position: refs/heads/master@{#405709}
In ChromeVox Next, create a text edit handler on "LoadComplete" if there is already a focused text field in order not to miss the initial value change on such.

Review-Url: https://codereview.chromium.org/2151763003
Cr-Commit-Position: refs/heads/master@{#405704}
Reland of "Fix build of Widevine CDM stub on Mac"
The combination of 'branding=Chromium' and 'enable_widevine=1' causes
'widevinecdm' to be a 'shared_library' build of the CDM stub.
Additionally combined with 'mac_strip_release=1', this triggers
'strip_save_dsym', which fails, because it doesn't support

This fix does to 'widevinecdm' what has already been done to
'clearkeycdm': Split the target into 'widevinecdm_binary' which builds
and strips the stub binary, and 'widevinecdm' which just copies the

This CL relands https://codereview.chromium.org/2117343005/ with the
following change:

The new 'widevinecdm_binary' target is now defined conditionally for the
case when it is really needed, to fix the ninja error "multiple rules
generate WidevineCdm/_platform_specific/win_x86/widevinecdm.dll".


TEST='build/gyp_chromium -Gconfig=Release -Dbranding=Chromium -Denable_widevine=1 -Dmac_strip_release=1 && ninja -C out/Release widevinecdm' is successful

Review-Url: https://codereview.chromium.org/2149233003
Cr-Commit-Position: refs/heads/master@{#405635}
Drop unnecessary finalization of NavigatorShare::ShareClientImpl.

Review-Url: https://codereview.chromium.org/2151803002
Cr-Commit-Position: refs/heads/master@{#405488}
Fix build of Widevine CDM stub on Mac
The combination of 'branding=Chromium' and 'enable_widevine=1' causes
'widevinecdm' to be a 'shared_library' build of the CDM stub.
Additionally combined with 'mac_strip_release=1', this triggers
'strip_save_dsym', which fails, because it doesn't support

This fix does to 'widevinecdm' what has already been done to
'clearkeycdm': Split the target into 'widevinecdm_binary' which builds
and strips the stub binary, and 'widevinecdm' which just copies the


TEST='build/gyp_chromium -Gconfig=Release -Dbranding=Chromium -Denable_widevine=1 -Dmac_strip_release=1 && ninja -C out/Release widevinecdm' is successful

Review-Url: https://codereview.chromium.org/2117343005
Cr-Commit-Position: refs/heads/master@{#405371}
fix gyp build after proto_zero_plugin skeleton landed
Followup to https://codereview.chromium.org/2147613002 / crrev.com/2147613002


Review-Url: https://codereview.chromium.org/2146063003
Cr-Commit-Position: refs/heads/master@{#405330}
Expose final download URL (actual url after redirects) in the extension API.

Review-Url: https://codereview.chromium.org/1706193002
Cr-Commit-Position: refs/heads/master@{#404619}
Drop the adding and removing of the 'running' class in SVGTestCase.js
This class will trigger layouts that could hide the intended effects of
the tests using this "framework". Since the same elements are marked as
being hidden, this will not affect the graphical output.


Review-Url: https://codereview.chromium.org/2104943005
Cr-Commit-Position: refs/heads/master@{#404380}
Fallback to 300x150 instead of 0x0 size for SVG inside content()
Prior to r379801, the fallback 300x150 in SVGImage::dataChanged() was
used. Post r379801 we instead used the empty rect as fallback. Both
are probably wrong but 300x150 matches what we did previously more
closely and we are less likely to end up with an empty image.


Review-Url: https://codereview.chromium.org/2121973002
Cr-Commit-Position: refs/heads/master@{#404374}
Allow 'alphabetic' for alignment-baseline and dominant-baseline
This keyword is not included in any of the ranges used, so needs to be
mentioned specifically.


Review-Url: https://codereview.chromium.org/2131483003
Cr-Commit-Position: refs/heads/master@{#404338}
Refine cull rect for SVGInlineTextBox painting
The PaintInfo cull rect can (will) change between paints, so use
the moral equivalent of logicalOverflowRect() to compute a more
accurate cull rect instead.

This fixes under-invalidation in the following tests:

 svg/dynamic-updates/SVGTextElement-svgdom-lengthAdjust-prop.html and

Exposed by https://codereview.chromium.org/2104943005


Review-Url: https://codereview.chromium.org/2124553002
Cr-Commit-Position: refs/heads/master@{#404265}
Use the outermost SVG as base when computing offsetX/Y for SVG elements
This reverts the behavior back to what it was prior to
https://codereview.chromium.org/1747223002. In short, the closest
ancestor CSS layout box is used for any SVG element. This will always
be the outermost SVG root (LayoutSVGRoot.)


Review-Url: https://codereview.chromium.org/2124283002
Cr-Commit-Position: refs/heads/master@{#404217}
Update FilterEffect colorspace on color-interpolation-filters changes
Changes to the 'color-interpolation-filters' property would not get
propagated to any built (cached) filter chains, and hence any future
paints would still use the old chain.
Add support for updating this FilterEffect property down in the filter
primitive element base-class setFilterEffectAttribute, and then make
sure any derived classes forward to it.


Review-Url: https://codereview.chromium.org/2128193004
Cr-Commit-Position: refs/heads/master@{#404200}
gyp: don't build gamepad_platform_data_fetcher_linux.cc when udev is disabled
Fixup after https://codereview.chromium.org/2081583002


Review-Url: https://codereview.chromium.org/2125223003
Cr-Commit-Position: refs/heads/master@{#404168}
Use the correct bounding rect in SVGInlineTextBox::nodeAtPoint
When writing-mode was unprefixed, SVGInlineTextBoxes started getting the
same treatment as their base-class, and hence we need to be careful when
we consider sizes for the inline boxes.
Use logicalWidth() and logicalHeight() instead of size().


Review-Url: https://codereview.chromium.org/2124793002
Cr-Commit-Position: refs/heads/master@{#403913}
Consider 'order' when updating feConvolveMatrix 'target*'
SVGFEConvolveMatrixElement's 'targetX' or 'targetY' attribute depend on
'order' for their initial value. When updating the target value of
an instantiated FEConvolveMatrix, order would however not be considered,
instead using the initial value of the attribute (zero.)

Refactor the code a bit to make it easy to consider the correct initial
value even when updating an existing FEConvolveMatrix, introducing
new methods matrixOrder() and targetPoint(). Clean up and simplify
as appropriate.

This fixes the following tests:


with https://codereview.chromium.org/2104943005 applied.


Review-Url: https://codereview.chromium.org/2124583002
Cr-Commit-Position: refs/heads/master@{#403814}
remove duplicate friend declaration
This unbreaks GCC builds after https://codereview.chromium.org/2036403002

TBR=lfg@chromium.org, dcheng@chromium.org

Review-Url: https://codereview.chromium.org/2121953003
Cr-Commit-Position: refs/heads/master@{#403795}
Don't schedule wholeSubtreeInvalid sets.
The StyleInvalidator asserts if we scheduled such sets. Mark element
for SubtreeStyleChange instead.


Review-Url: https://codereview.chromium.org/2106063007
Cr-Commit-Position: refs/heads/master@{#403663}
Skip scheduling sibling invalidation based on direct adjacent count.
When scheduling sibling invalidation sets for sibling insertion/removal
we schedule sets for N preceding siblings where N is the maximum number
of consecutive direct adjacent combinators, or infinite for indirect
adjacent combinators.

However, the further left of the mutation we schedule, the more direct
adjacent combinators are required to affect siblings following the
mutation. The maximum adjacent number is stored for every sibling
invalidation set, which means we can drop scheduling the set if that
count is too low.



  .a + div + div + span {}
  .b + span {}
  .c + span {}


  div.x div.a div.b div.c div#remove span

When removing #remove we start scheduling sibling invalidations for
div.c which needs at least one adjacent combinator to reach the span or
any subsequent elements. div.b needs at least two, and so on. For the
case above, we schedule the set for .c, but not for .b since the max
adjacent combinator count for .b is 1 and it needs to be at least 2.
.a needs to have at least 3, which is the case, so we schedule the set
for .a. We never consider the div.x element because the max adjacent
combinator count for the document is 3.


Review-Url: https://codereview.chromium.org/2116503002
Cr-Commit-Position: refs/heads/master@{#403530}
Relocate tests from fast/svg/ to svg/
Some files are renamed to avoid name clashes on case-insensitive

 svgangle.html  => svgangle-units.html
 svglength.html => svglength-units.html
 svglist.html   => svglist-basic-interface.html

(The last one did not actually clash, but was renamed for easier


Review-Url: https://codereview.chromium.org/2118903003
Cr-Commit-Position: refs/heads/master@{#403511}
Fold fast/svg/script-tests/animation-events.js into the test using it
There's only one test using this "framework", so fold it into the test
itself. Move the result to svg/animation/.

Straight copy of the .js file into the .html file. Whitespace is adjusted
and some redundant things are removed (';' and <div>.)


Review-Url: https://codereview.chromium.org/2112373002
Cr-Commit-Position: refs/heads/master@{#403510}
Robustify Internals entry points against detached uses.
Fuzzers generate pointless overhead using these test-only methods from
frame-detached contexts. Add required nullchecks throughout.

Simple test case for each of these entry points (w/ --run-layout-test):

 <a href="javascript:'replaced'" id=anchor>click</a>
 console.log('no crash');


Review-Url: https://codereview.chromium.org/2109613007
Cr-Commit-Position: refs/heads/master@{#403421}
0 -> nullptr for UseCounter pointer in CSSParserContext.
I repeatedly find myself looking for constructors taking flags through
unsigned before realizing this is actually a pointer.

Review-Url: https://codereview.chromium.org/2101143005
Cr-Commit-Position: refs/heads/master@{#403256}
Use a converter for -webkit-clip-path
Add StyleBuilderConverter::convertClipPath and use it for computing
the ClipPathOperation.


Review-Url: https://codereview.chromium.org/2105383002
Cr-Commit-Position: refs/heads/master@{#403153}
Optimize style recalc when adding @keyframes.
We only need to recalculate the elements with running animations unless
we tried to find an @keyframes rule and couldn't, for which we fall
back to a full document recalc.

The motivation for doing this is that the current WIP for issue 567021
shows that we're still getting full document recalcs due to the
presence of @keyframes rules.


Review-Url: https://codereview.chromium.org/2105743002
Cr-Commit-Position: refs/heads/master@{#403118}
Wire up invalidation for flood-{color,opacity} on <feDropShadow>
Make sure to call primitiveAttributeChanged() for this element and
property combination. Implement the required infrastructure in
SVGFEDropShadowElement::setFilterEffectAttribute and FEDropShadow.

Because of an issue with SVGTestCase.js the tests below would not
previously fail as expected. That is being addressed by the CL at


Review-Url: https://codereview.chromium.org/2112563002
Cr-Commit-Position: refs/heads/master@{#403025}
Notify context element after changes in SVGPreserveAspectRatioTearOff
Without this the associated LayoutObject will not be notified of the


Review-Url: https://codereview.chromium.org/2108333002
Cr-Commit-Position: refs/heads/master@{#402960}
Move ClipPathOperation.h to core/style/
This is stored as part of ComputedStyle, so style/ seems a better fit
than layout/.


Review-Url: https://codereview.chromium.org/2108213002
Cr-Commit-Position: refs/heads/master@{#402935}
Tidy CrossThreadCopier.h inclusion.
This header file declares a set of types as being cross-copiable; avoid
bringing in all of Oilpan for its two cross-thread persistent types.

Tidy up some downstream header files which were implicitly depending on
Oilpan being included here.

BUG=597856, 624419

Review-Url: https://codereview.chromium.org/2104283002
Cr-Commit-Position: refs/heads/master@{#402823}
Schedule sibling invalidation sets for sibling insert/remove.
Invalidation sets have been used only for changes which do not alter the
tree structure, like changing id, class names, other attributes, and
pseudo states. For dom tree changes, style invalidation relies on attach
and detach of the layout tree for the inserted/removed element. For
subsequent siblings of inserted/removed elements, we have been marking
siblings for subtree recalc (when we know we have tried to match
adjacent combinators on one of the siblings before) based on the maximum
number of consecutive direct adjacent combinators or all subsequent
siblings for indirect adjacent combinators.

This CL starts using sibling invalidation sets on siblings instead of
doing subtree recalcs.

The following properties of invalidation sets affected how this
implementation was done:

* Even though we invalidate descendants/siblings based on tag names, we
  don't have invalidation sets for tag names as elements do not change
  tag names dynamically. For inserted/removed elements, we could have
  used invalidation sets for tag names. Take the selector "div + span".
  If we remove a div we could have scheduled an invalidation set for div
  which invalidates a span sibling.

* Invalidation sets for simple selectors and their negated versions, for
  instance ".a" and ":not(.a)", share invalidation sets and they may do
  so because invalidation sets have been applied when they change. That
  is, "a" is either part of old or the new class attribute when the
  invalidation set needs to be scheduled. When removing/inserting
  elements, a selector like ":not(.a) + .b" will need to schedule a
  sibling for ".a" for all elements not having the class "a".

* Consider the selector "* + .a". We have to schedule a sibling
  invalidation for any inserted/removed element to invalidate a sibling
  with class "a". However, invalidation set construction has only
  created an invalidation set for ".a" with the invalidateSelf flag set.

For this CL, we create a single universal sibling invalidation set to
handle the cases above. In fact this CL only do sibling invalidations on
element insert/remove for id, class, and attribute in addition to
scheduling the universal sibling invalidation set. Also, we skip
selector lists (that is, :not() and :-webkit-any() as :host()
:host-context() and :slotted() never match when followed by an adjacent

For the following set of selectors:

  :not(.a) + .b + .c
  #x:not(.a) + .d
  div + span
  :-webkit-any(.x) + .f .g

We end up with the following universal sibling invalidation set with the
descendant invalidation set, containing ".g", to the right.

  { .c, span, .f, invalidatesSelf } => { .g }

Note that if a compound contains both :not() and for instance an id
selector, we will not add it to the universal sibling invalidation set
as we can properly invalidate ".d" siblings above using the invalidation
set for "#x".

== Scheduling sibling invalidations

For changes not modifying the tree, we schedule sibling invalidation
sets on the changed element and invalidate the siblings with descendant
sets during the invalidation process. When removing an element, however,
the element is not left in the tree, so we need to associate the
invalidation set with another element.

When we remove an element, we instead schedule the sibling invalidation
set, and the sibling invalidation set's descendant set, as descendant
invalidation sets on the parent element or shadow root.

Likewise for inserting an element. When inserting an element, we have
elements to schedule the sibling sets on, but the sets would need to be
scheduled on elements further to the right in the sibling list in order
to reach the siblings we needed to invalidate. Also, they would have to
be moved further right on subsequent insertions.

== The effect on amazon.com

This CL gets rid of all post-page-load full recalcs before you start
interacting with the page. The full recalcs after you start interacting
needs to be investigated further.


Review-Url: https://codereview.chromium.org/2089063005
Cr-Commit-Position: refs/heads/master@{#402770}
Mark stylesheet as having media queries at consume time.
Marking the stylesheet as having media queries for @media at insertion
time meant we didn't mark the stylesheet when @media was a child rule
of another @-rule like @supports. Instead do the marking from the
consume method like we already did for @font-face rules.

Removed unnecessary marking from insertion methods and an unnecessary
boolean parameter which was always true.


Review-Url: https://codereview.chromium.org/2081893003
Cr-Commit-Position: refs/heads/master@{#402766}
Fix for cross compiling 32bit linux on 64bit host machine
Right now when custom sysroot is provided as gn parameter (target_sysroot)
only 32 bit custom sysroot will be used. 64 bit sysroot (which is also needed
by 32 bit build by - for example - protobuf) is expected to be found in default
location. This change adds possibility to provide path to directory containing
both sysroots for linux (32 bit and 64 bit).


Review-Url: https://codereview.chromium.org/2096323002
Cr-Commit-Position: refs/heads/master@{#402742}
Handle cross-thread weak persistents during global weak processing.
r401880 changed the handling of weak persistents, clearing
and releasing their underlying PersistentNodes once their
weak references point to otherwise unreferenced objects.

However, performing that weak processing step cannot reliably
be done as part of thread-local weak processing if the
weak persistent is a CrossThreadWeakPersistent<T> (CTWP) as the
object it refers to may reside on a different thread's heap than
where the CTWP resides. If both locations need to be accessed,
doing that as part of thread-local weak processing is too
late and unsafe.

Instead we process the cross-thread weak persistents along with the
'weak cells' during global weak processing. WeakPersistent<>s are
still handled during thread-local weak processing.


Review-Url: https://codereview.chromium.org/2106863003
Cr-Commit-Position: refs/heads/master@{#402734}
Disable HeapTest.TraceDeepEagerly for Android targets.
This test is heavy on allocation and considered too slow to be
running w/ asserts enabled. Disable it entirely for Android,
as the overhead is bogging down bots too much.


Review-Url: https://codereview.chromium.org/2101363002
Cr-Commit-Position: refs/heads/master@{#402470}
Allow lazy removal of (context) lifecycle observers while stopping.
r402141 imposed the restriction on ContextLifecycleObservers behavior
during stop() notifications of no longer being allowed to remove
observers while handling stop(). That constraint enables iteration
to be handled without allocating a snapshot of the observer set.

That restriction proves too constraining for media elements indirectly
holding onto AssociatedURLLoader objects while being stopped
(see associated bug for info.) Consequently, we allow observer removals
while keeping observer set iteration safe & allocation-free -- removals
are recorded while iterating, and removed in one go afterwards.

This is only done for notifyStoppingActiveDOMObjects(), as the other
notifications over context lifecycle observers do not require this


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

Review-Url: https://codereview.chromium.org/2099183003
Cr-Commit-Position: refs/heads/master@{#402406}
Retire http/tests/htmlimports/redirect.html leak exemption.
Back to normal, retire expectation.


Review-Url: https://codereview.chromium.org/2096373002
Cr-Commit-Position: refs/heads/master@{#402152}
Avoid snapshotting ContextLifecycleObservers when iterating.
To allow safe iteration over the set of ExecutionContext observers,
a snapshot of the set was taken before iterating over it. So as to
allow observers to unregister themselves while being notified.

Apart from PostMessageTimer unregistering itself while being stop()ed,
the ContextLifecycleObservers do not mutate the observer set, hence
we can avoid the snapshot step and iterate directly over the observers.
Attempts to remove an observer while iterating is caught and
asserted for.

As the observer set is a set of weak references, some care is needed
to keep those references strong while iterating. That and other details
surrounding observer iteration is now handled by the auxiliary scope object

Should the constraint of not being allowed to remove observers while
iterating prove too cumbersome, supporting lazy removal of observers
(post iteration) would be straightforward.


Review-Url: https://codereview.chromium.org/2094143002
Cr-Commit-Position: refs/heads/master@{#402141}
Move preferred stylesheet set out of active sheet update.
There are two reasons for this:

1. In preparation for async active stylesheet update, in which case
   setting the preferred stylesheet set would otherwise be happening
   too late.

2. Doing it during the active stylesheet update means only the
   alternate stylesheets following the link with the title setting the
   preferred sheet set would be enabled appropriately. crbug.com/621479

This CL is split out of https://codereview.chromium.org/1913833002


Review-Url: https://codereview.chromium.org/2079303002
Cr-Commit-Position: refs/heads/master@{#402139}
Remove unnecessary finalization of IDBObserver classes.
IDBObserver and IDBObserverChanges do not need to be finalized,
nor have user-defined empty destructors.


Review-Url: https://codereview.chromium.org/2098243002
Cr-Commit-Position: refs/heads/master@{#402117}
Don't create m_style for option element in display:none subtree.
Instead create a ComputedStyle on demand in rare data like we do for
other display:none elements. This caused out-of-date computed style for
option elements in display:none subtrees because recalcOwnStyle is
skipped for elements without a parentComputedStyle().


Review-Url: https://codereview.chromium.org/2095973002
Cr-Commit-Position: refs/heads/master@{#402095}
On Android there is no notification when a device is lost. This change keeps track of when a device was last seen and removes outdated devices.
This was already implemented for OSX and the code has been moved to make it accessible to Android as well.


Review-Url: https://codereview.chromium.org/1842223003
Cr-Commit-Position: refs/heads/master@{#401940}
Completely clear weak persistent references.
If weak processing determines that a WeakPersistent<T> is now pointing
to an otherwise unreferenced object, clear out and deallocate its
underlying PersistentNode.

We previously would only clear the persistent reference, but keep the
PersistentNode. This would lead to imprecise counts of live persistents,
potentially triggering false asserts of leaking persistents during thread
termination GCs.


Review-Url: https://codereview.chromium.org/2094973002
Cr-Commit-Position: refs/heads/master@{#401880}
Update baselines for svg/text/text-viewbox-rescale.html
Incorporate changes from https://codereview.chromium.org/1920833002.


Review-Url: https://codereview.chromium.org/2085413003
Cr-Commit-Position: refs/heads/master@{#401584}
gn: add Blink GC plugin options
The Blink GC clang plugin supports a couple of extra options which the
Blink GN configuration does not currently expose. Do so here, but without
depending on the 'flags' script used by the gyp build system

Specifically, this adds the following Blink GN variables:

 - blink_gc_plugin_option_do_dump_graph [ = false ]
     emit JSON-serialized representation of class graph.
 - blink_gc_plugin_option_warn_unneeded_finalizer [ = false ]
     warn of unnecessary destructor usage.


Review-Url: https://codereview.chromium.org/2097433002
Cr-Commit-Position: refs/heads/master@{#401568}
Update expectations for crbug.com/621915
These tests no longer appear flaky:



Review-Url: https://codereview.chromium.org/2097443002
Cr-Commit-Position: refs/heads/master@{#401566}
gn: define and use clang_base_path
Replace uses of "//third_party/llvm-build/Release+Asserts"
with the configurable option clang_base_path.


Review-Url: https://codereview.chromium.org/2088373002
Cr-Commit-Position: refs/heads/master@{#401551}
Fix Mac10.9 baselines for two svg/custom/ tests
Remove incorrect baselines for:



Review-Url: https://codereview.chromium.org/2082253004
Cr-Commit-Position: refs/heads/master@{#401387}
Add ASan exemption when iterating cross-thread-persistents.
When running a termination GC or tracing, the set/region of live
CrossThreadPersistent nodes are iterated over, checking if the objects
they point to belong to the current thread.

As heap objects can have CrossThreadPersistent<> fields, it is possible
for there to be CrossThreadPersistent nodes which point back to heap
objects about to be swept. When ASan is enabled, the page sweeping takes
care of poisioning all to-be-swept objects first.

The combination of the above two means that persistent iteration can
try to inspect one of these poisoned objects, which will trigger an
ASan error. The persistent will not be further used, as it doesn't
belong to the thread. To accommodate this, we do disable ASan while
performing the object lookup while iterating the CrossThreadPersistent
node set.


Review-Url: https://codereview.chromium.org/2087253002
Cr-Commit-Position: refs/heads/master@{#401354}
Deflake svg/custom/createImageElement2.xhtml
Need to wait for the image to load before ending the test.


Review-Url: https://codereview.chromium.org/2086383002
Cr-Commit-Position: refs/heads/master@{#401347}
Deflake svg/custom/pointer-events-image*.svg
Rewrite these two tests (which are essentially the same, modulo a
transform) to first wait for all the images to load, and then perform
all the clicks.


Review-Url: https://codereview.chromium.org/2088733006
Cr-Commit-Position: refs/heads/master@{#401343}
Update/tighten expectations for crbug.com/552433
Passing after getting updated baselines:


Failing (a few pixels differ) on Win7 Debug:



Review-Url: https://codereview.chromium.org/2090553002
Cr-Commit-Position: refs/heads/master@{#401270}
bluetooth: android: removed duplicate restart of scanning.
This is a followup fix to commit 3a38a46. There is no need to restart the search in this callback as this will be done from native code (BluetoothChooserAndroid::SetAdapterPresence).


Review-Url: https://codereview.chromium.org/2065893002
Cr-Commit-Position: refs/heads/master@{#401257}
content/public/common should depend on the mojo_bindings target
Rather than the mojo_bindings_mojom target, which exports sources, and
causes multiple definition errors in component builds.

Followup to https://codereview.chromium.org/2089823002


Review-Url: https://codereview.chromium.org/2088163002
Cr-Commit-Position: refs/heads/master@{#401230}
Common up SVG transform "change detection" (classification)
This moves the transform change classification to a helper class
(SVGTransformChangeDetector) and move
LayoutSVGContainer::TransformChange along with it, renaming it to


Review-Url: https://codereview.chromium.org/2086583004
Cr-Commit-Position: refs/heads/master@{#401111}
Stop PingLoader's cancellation timer early.
If the ping completed, stop the loader's cancellation timer.


Review-Url: https://codereview.chromium.org/2083023002
Cr-Commit-Position: refs/heads/master@{#401068}
Reland of "Remove redundant "layout size changed" state from LayoutSVGRoot"
In LayoutSVGRoot::layout, two slightly different "layout size changed"
values are computed - one which is used for propagation to children
via SVGLayoutSupport::layoutSizeOfNearestViewportChanged
(|m_isLayoutSizeChanged|), and one which is used to mark direct
descendant children (local |layoutSizeChanged|).
Ultimately their use is the same though, so only using the more narrow
predicate for both of these cases should yield the same result.
It also has the side-effect of making it more obvious that changes to
layout-size is only of interest when there exist clients of the SVG
root that have relative lengths.


Review-Url: https://codereview.chromium.org/2065093002
Cr-Commit-Position: refs/heads/master@{#400987}
Rebaseline svg/dom/length-list-parser.html

Review-Url: https://codereview.chromium.org/2083983003
Cr-Commit-Position: refs/heads/master@{#400976}
Rebaseline svg/W3C-SVG-1.1/coords-units-02-b.svg

Review-Url: https://codereview.chromium.org/2088733003
Cr-Commit-Position: refs/heads/master@{#400971}
Rebaseline svg/transforms/text-with-pattern-with-svg-transform.svg

Review-Url: https://codereview.chromium.org/2080243004
Cr-Commit-Position: refs/heads/master@{#400970}
Rebaseline svg/hixie/perf/006.xml

Review-Url: https://codereview.chromium.org/2082963002
Cr-Commit-Position: refs/heads/master@{#400961}
Avoid using forced layout to trigger paint invalidation for SVG containers
Currently, SVG containers in the LayoutObject hierarchy force layout of
their children if the transform changes. The main reason for this is to
trigger paint invalidation of the subtree. In some cases - changes to the
scale factor - there are other reasons to trigger layout, like computing
a new scale factor for <text> or re-layout nodes with non-scaling stroke.

Compute a "scale-factor change" in addition to the "transform change"
already computed, then use this new signal to determine if layout should
be forced for the subtree. Trigger paint invalidation using the
LayoutObject flags instead.

The downside to this is that paint invalidation will walk into "hidden"
containers which rarely require repaint (since they are not technically
visible). This will hopefully be rectified in a follow-up CL.

For the testcase from 603850, this essentially eliminates the cost of
layout (from ~350ms to ~0ms on authors machine; layout cost is related
to text metrics recalculation), bumping frame rate significantly.


Review-Url: https://codereview.chromium.org/1996543002
Cr-Commit-Position: refs/heads/master@{#400950}
Delay resetting image animation, if possible.
When the last client of an ImageResource removes itself, the animations
of the image is explicitly reset. That resetting can happen either while
finalizing objects after a GC or as part of other explicit removals of
ImageObserver clients.

Having that reset happen as part of a garbage collection is interacting badly
with code in the middle of updating animations (which happen to trigger a
conservative GC.) So, to avoid introducing such abrupt & harmful resets, delay
the reset'ing until back at the event loop (and the animations update step
having completed.)

BUG=613709, 581546

Review-Url: https://codereview.chromium.org/2004263003
Cr-Commit-Position: refs/heads/master@{#400934}
Clean up WeakIdentifierMap<> implementation.
Avoid (literal) code duplication between (non)GC versions
of WeakIdentifierMap<>.

Other changes (for the GC version):

  - Do not separately allocate the HeapHashMap<>s, but keep these
    as part objects on WeakIdentifierMap<> instead.
  - Support explicit removal (via notifyObjectDestroyed()).


Review-Url: https://codereview.chromium.org/2086643002
Cr-Commit-Position: refs/heads/master@{#400907}
Reject invert for outline-color at parse time.
We don't support invert as outline-color, so we should drop it at parse
time as per spec[1]. Added test to check that the initial value of
outline-color is the computed value of currentColor.

Gecko also drops declarations with invert for outline-color.

[1] https://drafts.csswg.org/css2/ui.html#value-def-invert


Review-Url: https://codereview.chromium.org/2081633002
Cr-Commit-Position: refs/heads/master@{#400902}
Update baselines for svg/filters/filter-refresh.svg

Review-Url: https://codereview.chromium.org/2086713002
Cr-Commit-Position: refs/heads/master@{#400818}
Unprefix the CSS 'filter' property
Parse 'filter' in the same way as '-webkit-filter', and make the latter
an alias of the former.
For SVG content, only the "url(...)" function is allowed still, with the
exception of the outermost <svg> (LayoutSVGRoot), since that "has a box".

Update tests to use 'filter' where reasonable and applicable.

Intent to Ship: https://groups.google.com/a/chromium.org/d/topic/blink-dev/ZVT2kxuFMaA/discussion

Based on https://codereview.chromium.org/1987943002 by noel@chromium.org.


Review-Url: https://codereview.chromium.org/2065593002
Cr-Commit-Position: refs/heads/master@{#400752}
add some missing power_save_blocker gyp deps
Followup to https://codereview.chromium.org/2075153002

BUG=612337, 612563, 257943

Review-Url: https://codereview.chromium.org/2073393002
Cr-Commit-Position: refs/heads/master@{#400723}
skip neon intrinsics in libpng when neon is not available
Followup to https://codereview.chromium.org/2021403002

BUG=599917, 618061

Review-Url: https://codereview.chromium.org/2074363002
Cr-Commit-Position: refs/heads/master@{#400714}
GC plugin: improve error reporting when tracing illegal fields.
Add detection of trace() calls over smart pointer types that either do not
wrap up references to heap objects, or are otherwise not meant to be traced
over. In particular, CrossThread(Weak)Persistent<T> fields are now detected
as being illegal to trace over. Also consider OwnPtr<T>, RefPtr<T> and
std::unique_ptr<T> as illegal to trace over & emit a more concise error
messages for these.


Committed: https://crrev.com/3ba6089cd6a901b62ff5a0d8f08a2bd818edcbe8
Review-Url: https://codereview.chromium.org/2060553002
Cr-Original-Commit-Position: refs/heads/master@{#399861}
Cr-Commit-Position: refs/heads/master@{#400653}
Revert of Remove redundant "layout size changed" state from LayoutSVGRoot (patchset #1 id:1 of https://codereview.chromium.org/2065093002/ )
Reason for revert:
Possible cause of crbug.com/620228

Original issue's description:
> Remove redundant "layout size changed" state from LayoutSVGRoot
> In LayoutSVGRoot::layout, two slightly different "layout size changed"
> values are computed - one which is used for propagation to children
> via SVGLayoutSupport::layoutSizeOfNearestViewportChanged
> (|m_isLayoutSizeChanged|), and one which is used to mark direct
> descendant children (local |layoutSizeChanged|).
> Ultimately their use is the same though, so only using the more narrow
> predicate for both of these cases should yield the same result.
> It also has the side-effect of making it more obvious that changes to
> layout-size is only of interest when there exist clients of the SVG
> root that have relative lengths.
> BUG=603956
> Committed: https://crrev.com/30770a70834c73670884f0de91bb7624df0ba003
> Cr-Commit-Position: refs/heads/master@{#399791}

# Not skipping CQ checks because original CL landed more than 1 days ago.

Review-Url: https://codereview.chromium.org/2071953004
Cr-Commit-Position: refs/heads/master@{#400411}
remove leftover forward declaration of OnscreenDisplayClient

Review-Url: https://codereview.chromium.org/2079513002
Cr-Commit-Position: refs/heads/master@{#400267}
Remove unnecessary MemberHash<> templates.
Directly define the hash traits of all heap reference template types
(Member<T> - or Persistent<T>-derived) in terms of MemberHash<T>,
and avoid introducing ad-hoc templates for these.

Add missing (CrossThread)WeakPersistent<T> hash traits also.


Review-Url: https://codereview.chromium.org/2067223005
Cr-Commit-Position: refs/heads/master@{#400155}
Align the Mac Omnibox items vertically again
OmniboxViewMac::GetBoldFieldFont() needs to request a bold font, then make it larger. Resource bundle will do the opposite, which makes a large system normal font a non-system bold font. That gives a different baseline to making the non-system bold font larger. And while the omnibox locks the baseline in ApplyTextStyle(), OmniboxPopupCellData does not.


Review-Url: https://codereview.chromium.org/2068163002
Cr-Commit-Position: refs/heads/master@{#400144}
GC plugin: improve error reporting when tracing illegal fields.
Add detection of trace() calls over smart pointer types that either do not
wrap up references to heap objects, or are otherwise not meant to be traced
over. In particular, CrossThread(Weak)Persistent<T> fields are now detected
as being illegal to trace over. Also consider OwnPtr<T>, RefPtr<T> and
std::unique_ptr<T> as illegal to trace over & emit a more concise error
messages for these.


Review-Url: https://codereview.chromium.org/2060553002
Cr-Commit-Position: refs/heads/master@{#399861}
Allow prolonged CanvasAsyncBlobCreator lifetime, avoid indirect leaks.
Weakly keeping this async object to avoid resource leaks is problematic
(r399445 + r399675), as the object must remain alive until completed.

Undo that experiment and instead keep the object alive until all its
posted tasks have been processed. But for the task that wins and
is processed first, have it clear out the heap references that
would otherwise keep heavy objects alive.


Review-Url: https://codereview.chromium.org/2065913003
Cr-Commit-Position: refs/heads/master@{#399856}
Remove redundant isLayoutSizeChanged check in LayoutSVGText::layout
SVGLayoutSupport::layoutChildren takes care to propagate the needs for
metrics updates via the |screenScalingFactorChanged| and
|layoutSizeChanged| arguments.


Review-Url: https://codereview.chromium.org/2061793003
Cr-Commit-Position: refs/heads/master@{#399796}
Remove redundant "layout size changed" state from LayoutSVGRoot
In LayoutSVGRoot::layout, two slightly different "layout size changed"
values are computed - one which is used for propagation to children
via SVGLayoutSupport::layoutSizeOfNearestViewportChanged
(|m_isLayoutSizeChanged|), and one which is used to mark direct
descendant children (local |layoutSizeChanged|).
Ultimately their use is the same though, so only using the more narrow
predicate for both of these cases should yield the same result.
It also has the side-effect of making it more obvious that changes to
layout-size is only of interest when there exist clients of the SVG
root that have relative lengths.


Review-Url: https://codereview.chromium.org/2065093002
Cr-Commit-Position: refs/heads/master@{#399791}
gn BUILD fixes for disabling enable_extensions and use_ash feature flags.

Review-Url: https://codereview.chromium.org/1950003002
Cr-Commit-Position: refs/heads/master@{#399693}
Revert of Remove ineffective PendingScript prefinalizer (2nd attempt.) (patchset #1 id:1 of https://codereview.chromium.org/2060853002/ )
Reason for revert:
Canary crashes reported,


Original issue's description:
> Remove ineffective PendingScript prefinalizer (2nd attempt.)
> With the missing case from r397106 aboard, retire the prefinalizer
> for PendingScript. Script loader and runner objects are expected
> to explicitly dispose of these upon success or failure.
> R=
> BUG=
> Committed: https://crrev.com/fbf7f01ae80f666a5b37acf0ef38fd174443787f
> Cr-Commit-Position: refs/heads/master@{#399504}

# Skipping CQ checks because original CL landed less than 1 days ago.

Review-Url: https://codereview.chromium.org/2069573002
Cr-Commit-Position: refs/heads/master@{#399691}
Have CanvasAsyncBlobCreator's delayed task keep a weak |this| also.
Followup r399445 and dually have the delayed task that's
posted to check if the idle task has gone ahead, also keep
a weak |this| reference. The non-winning CanvasAsyncBlobCreator
posted main thread tasks can safely be cancelled & dropped if
a GC happens to go ahead.


Review-Url: https://codereview.chromium.org/2069533002
Cr-Commit-Position: refs/heads/master@{#399675}
Clear the SharedBuffer when clearing the image
Previously, in the case of the image failing to be decoded, the buffer
was cleared because error() was called. This was changed in the
following patch:


The patch changes it so that only clear() is called, which does not
clear the m_data buffer. This patch changes clear() to also clear the


Review-Url: https://codereview.chromium.org/2060193002
Cr-Commit-Position: refs/heads/master@{#399668}
gc plugin: remove ScriptWrappable destructor special case.
With Blink having exited its Oilpan transition phase, no need for the
plugin to catch & allow GarbageCollected<>-derived classes that also
derive from ScriptWrappable (but could safely not provide a destructor.)

Remove the unused IsRawPtr(name), IsDummyBase(name) predicates, as well.


Review-Url: https://codereview.chromium.org/2061143002
Cr-Commit-Position: refs/heads/master@{#399667}
Rename StyleLayoutData to StyleGeometryData
The term 'geometry' better matches what is stored here (and is also more
in line with the SVG spec chapter [1] that defines most of the properties
Rename the SVGComputedStyle::layout field to 'geometry' to match.

This is a mechanical rename-only CL, with the exception of some
additional whitespace fixups.

[1] https://svgwg.org/svg2-draft/geometry.html ("Geometry Properties")


Review-Url: https://codereview.chromium.org/2066563002
Cr-Commit-Position: refs/heads/master@{#399649}
Remove ineffective PendingScript prefinalizer (2nd attempt.)
With the missing case from r397106 aboard, retire the prefinalizer
for PendingScript. Script loader and runner objects are expected
to explicitly dispose of these upon success or failure.


Review-Url: https://codereview.chromium.org/2060853002
Cr-Commit-Position: refs/heads/master@{#399504}
Have CanvasAsyncBlobCreator speculative idle tasks keep a weak 'this'.
If image encoding should be attempted done via idle tasks,
CanvasAsyncBlobCreator schedules an idle task along with a delayed
task on the main thread to check if the idle task has been scheduled
before too long. If not, the delayed task will handle the encoding
instead (still on the main thread.)

The idle tasks represent opportunistic work, and should not keep the
CanvasAsyncBlobCreator alive until they eventually do get to run.
Consequently, make them keep a weak 'this' reference.

This addresses leaks exposed by r399181.


Review-Url: https://codereview.chromium.org/2060153002
Cr-Commit-Position: refs/heads/master@{#399445}
Promptly release cross-thread websocket bridge/proxy references
To prevent other threads using cross-thread persistents from accessing
to-be-finalized websocket Peer and Bridge abstractions, promptly free
them on becoming garbage. Delaying this until lazy sweeping runs risks
(benignly) touching poisoned objects.


Review-Url: https://codereview.chromium.org/2064633002
Cr-Commit-Position: refs/heads/master@{#399442}
Move SourceRange and CSSPropertySourceData classes off-heap.
SourceRange is a value/POD class that has no complex
sharing or lifetime handling associated with it. It does not
meet minimal requirements that we've now settled on for when
an object ought to be Oilpan managed -- doesn't have other
heap references nor sharing&lifetime issues that would benefit
from Oilpan use -- hence, we should move it off-heap.

With SourceRange off-heap, a number of classes that package up
SourceRanges in various ways can be converted to off-heap
classes also.


Review-Url: https://codereview.chromium.org/2060433002
Cr-Commit-Position: refs/heads/master@{#399428}
Make trace() over persistents private.
Persistent references register a trace callback with the underlying persistent
node, allowing the Blink GC to trace the persistent root set when marking.

Consequently, there's no need to expose their trace() methods as public
methods. Make them private and thereby disallow calling trace() from
Blink code.


Review-Url: https://codereview.chromium.org/2060683002
Cr-Commit-Position: refs/heads/master@{#399423}
Fix unsafe handling of part object in RuleFeatureSetTest.
The part object needs to be traced; the ad-hoc and unused
trace method used prevented GC plugin detection.


Review-Url: https://codereview.chromium.org/2063603002
Cr-Commit-Position: refs/heads/master@{#399416}
Rename and improve "traceable" templates.
The NeedsTracing<T>::value expression would previously return true
if T had a trace() method or T == Member<U>. It would not be
true if T == WeakMember<U>; something that was convenient when
using NeedsTracing<> in connection with hash table backing stores,
needing to determine whether to trace the elements of the table, but
not if they were weak references & delegate that to weak processing.

As NeedsTracing<T> has grown an increasing number of uses besides
the handling of backing store tracing, where exempting WeakMember<>
makes no great sense, it is time to alter its meaning to accommodate
those uses better. And at the same time rename it to follow the various
other predicate templates we provide over types. So,

 NeedsTracing<T> => IsTraceable<T> (includes weak)
 NeedsTracingLazily<T> => IsTraceableInCollection<T> (excludes weak)
 NeedsTracingTrait<Trait> => IsTraceableInCollectionTrait<T>

Along with these changes, tidy up the static_assert() error messages in
a few places.


Review-Url: https://codereview.chromium.org/2065443002
Cr-Commit-Position: refs/heads/master@{#399389}
Add use counter for parsing of filter functions with no arguments
Count before deciding the future for this, and related, "features".


Review-Url: https://codereview.chromium.org/2051233003
Cr-Commit-Position: refs/heads/master@{#399378}
Removed unnecessary mutable in SiblingData.
Seemingly no reason for this mutable anymore.


Review-Url: https://codereview.chromium.org/2057093002
Cr-Commit-Position: refs/heads/master@{#399354}
Drop unecessary use of CrossThreadPersistent by CanvasAsyncBlobCreator.
The callback object that the CanvasAsyncBlobCreator passes along to a
background thread can be kept as a simple Member<>; no need to
involve CrossThreadPersistent<> and risk inadvertently introducing


Review-Url: https://codereview.chromium.org/2051993002
Cr-Commit-Position: refs/heads/master@{#399181}
Clamp filter functions {grayscale, invert, opacity, sepia} to 100%
The spec says the following for these functions:

 "Values of amount over 100% are allowed but UAs must clamp the values
  to 1."

So do that rather than failing. This matches the behavior of Gecko and

This fixes


from the CSS WG Filter Effects testsuite (w/ the property unprefixed.)


Review-Url: https://codereview.chromium.org/2052883002
Cr-Commit-Position: refs/heads/master@{#399144}
Clean up script-tests in css3/filters
Rewrite the parsing tests using
css-parser/resources/property-parsing-test.js and also use testharness
for the computed style test.

Drop css3/filters/filter-property.html since that is already covered by
the wider parsing tests. Also remove the template html file and inline
the scripts for effect-reference-reset-style-delete-crash.html [1] and
effect-reference-delete-crash.html, clearing out the script-tests sub-

[1] This test was actually referencing the
    effect-reference-delete-crash.js file, meaning it was a duplicate.


Review-Url: https://codereview.chromium.org/2055733002
Cr-Commit-Position: refs/heads/master@{#399136}
Remove unnecessary use of CrossThreadPersistent<>.
The CompositorMutatorImpl object that WebFrameWidgetImpl creates and
controls the lifetime of, should be referenced as a normal Member<>


Review-Url: https://codereview.chromium.org/2056833003
Cr-Commit-Position: refs/heads/master@{#399125}
Move ReferenceFilterBuilder::build to FilterEffectBuilder
This function resolves a filter reference and then builds a filter
(sub)DAG for painting. Split it into the two fairly distinct parts,
leaving ReferenceFilterBuilder as a class that only does element
lookup/resolution, while the DAG-building takes place in
FilterEffectBuilder (with a little help from SVGFilterBuilder.)
Use the new function in SVGFilterPainter.

Also pass Element& to ReferenceFilterBuilder::build, and remove a
redundant null-check of ComputedStyle in
PaintLayer::updateOrRemoveFilterEffectBuilder (already checked by
paintsWithFilters and assumed later in the function.)


Review-Url: https://codereview.chromium.org/2044153002
Cr-Commit-Position: refs/heads/master@{#398866}
Limit live Document tracking to debug builds.
liveDocumentSet() is only used by a debug entry point, so only extend
it on Document creation in debug builds.


Review-Url: https://codereview.chromium.org/2052583003
Cr-Commit-Position: refs/heads/master@{#398839}
Make sure CSS agent messages flush before testing.
While working on updating active stylesheets as part of the style and
layout tree update in [1], two inspector tests started failing. The
reason was these tests rely on a console message to trigger a step in
the test after the active stylesheets have been pushed to the inspector
client. But even if the stylesheets were updated in InspectorCSSAgent
before the console message was sent, the console message arrived in the
client before the new active stylesheets. The reason was that the
console message is immediately flushed, while the messages from the
InspectorCSSAgent are lazily flushed from WebDevToolsAgentImpl::

I tried to force the active stylesheet update with a forced layout tree
update like this:


But, due the console.log message being dispatched first as described
above, I ended up postponing the console.log with a rAF which means it
will run in a later task and the didProcessTask will trigger in between
to flush the active stylesheet message(s).

Note that this was not currently causing any failures. It's done in
preparation for landing changes for 567021 without breaking anything.

Looking at TestExpectations, I noticed crbug.com/597572, which might be
a similar issue.

[1] https://codereview.chromium.org/1913833002/


Review-Url: https://codereview.chromium.org/2049283002
Cr-Commit-Position: refs/heads/master@{#398825}
Mark shouldMarkObject(), arenaForNormalPage() accessors as const.
Also remove some redundant checkHeader() asserts while doing a code
tidying pass.


Review-Url: https://codereview.chromium.org/2054673002
Cr-Commit-Position: refs/heads/master@{#398813}
Simplify contextDestroyed() notifications.
With all lifetime observers now being managed by Oilpan, the
handling of the destruct notification can be made simpler.


Review-Url: https://codereview.chromium.org/2045703004
Cr-Commit-Position: refs/heads/master@{#398490}
Drop FilterEffectBuilder::m_referenceFilters
The job of this Vector used to be to keep a reference to the nested
"reference" filters, to avoid them being destroyed. The entire filter
graph/chain is now on the GC heap, and traced via
FilterEffectBuilder::m_lastEffect, so this additional reference is of no

Review-Url: https://codereview.chromium.org/2043013002
Cr-Commit-Position: refs/heads/master@{#398341}
Clean up markClientsAndObserversFinished().
Simplify transferring a counted element entry from one set to another.

To do so, add generalized version of add() over HashCountedSet that lets
the caller specify a count.


Review-Url: https://codereview.chromium.org/2045883002
Cr-Commit-Position: refs/heads/master@{#398275}
Support underline on Linux again.

https://codereview.chromium.org/1819753003/ accidentally removed
UNDERLINE style support on Linux. This CL fixes the issue.

Review-Url: https://codereview.chromium.org/2031223003
Cr-Commit-Position: refs/heads/master@{#398102}
Remove unused InspectorFrontend declarations.
There seems to be nothing called InspectorFrontend. Removed unused
forward declarations for it and changed comments to say "frontend"


Review-Url: https://codereview.chromium.org/2046433002
Cr-Commit-Position: refs/heads/master@{#398080}
Remove pre-Oilpan protections from LocalFileSystem.

Review-Url: https://codereview.chromium.org/2039713002
Cr-Commit-Position: refs/heads/master@{#398000}
Improve the HeapListHashSet no-weakness static assert message.
Mention the alternate HeapLinkedHashSet<> if WeakMember<>s are
attempted used with HeapListHashSet<>; for non-trivial reasons,
we only support weakness with the former.


Review-Url: https://codereview.chromium.org/2034423002
Cr-Commit-Position: refs/heads/master@{#397999}
Add documentation of SafePointBarrier internal state.
Renamed |m_canResume| to |m_parkingRequested| while doing so,
its (inverted) meaning seems clearer imho in this context.


Review-Url: https://codereview.chromium.org/2039793002
Cr-Commit-Position: refs/heads/master@{#397988}
SVGFE{Spot,Distant,Point}LightElement can have non-SVGFE*Lighting parent
Replace ASSERT_NOT_REACHED with a return statement. We already
thoroughly check for valid parent type and only notify them if so.


Review-Url: https://codereview.chromium.org/2031353002
Cr-Commit-Position: refs/heads/master@{#397941}
Fix Win baselines for r397915


Review-Url: https://codereview.chromium.org/2040713002
Cr-Commit-Position: refs/heads/master@{#397927}
Fix Win baselines for r397912


Review-Url: https://codereview.chromium.org/2041613002
Cr-Commit-Position: refs/heads/master@{#397926}
Update thread-local weak processing comments following r397904.

Review-Url: https://codereview.chromium.org/2040703002
Cr-Commit-Position: refs/heads/master@{#397925}
Updated Win10 baselines for SVG shape-rendering tests

Baselines are the same as the Win7 ones.


Review-Url: https://codereview.chromium.org/2036163002
Cr-Commit-Position: refs/heads/master@{#397923}
Reset ThreadState weak callback stack before GCing.
In the event a thread gets to participate in more than
one GC before it manages to leave its safe point, clear
out its weak callback stack before initiating a new
GC. Otherwise we risk keeping around weak callbacks to
duplicate or dead objects.


Review-Url: https://codereview.chromium.org/2036803004
Cr-Commit-Position: refs/heads/master@{#397904}
Reduce LayoutSVGResource*Gradient building dependency on GradientData
The buildGradient() method can just create and return a Gradient instead
of populating the GradientData struct it's being passed.
Also make calculateGradientTransform() use the return value rather than
an out variable, and make it const qualified. Make
platformSpreadMethodFromSVGType static and use Traversal<> sugar in


Review-Url: https://codereview.chromium.org/2031053004
Cr-Commit-Position: refs/heads/master@{#397763}
Clear media query rulesets on page zoom changes.
Otherwise, resolution media queries won't update properly when page
zoom changes. Changing the deviceScaleFactor already did this. Also,
matchMedia listeners already worked.


Review-Url: https://codereview.chromium.org/2038793002
Cr-Commit-Position: refs/heads/master@{#397697}
Update Win7 baseline for fast/text/emoji-web-font.html

Review-Url: https://codereview.chromium.org/2033403002
Cr-Commit-Position: refs/heads/master@{#397687}
Shrink weak hash tables when adding elements, if needed.
Hash tables containing weak references tend to be asymmetrically
handled -- Blink "user code" will add elements to the hash table,
with the garbage collector taking care of removing references
to elements that have no other strong references to keep them
alive. The weak processing of hash tables isn't capable of
shrinking and allocate a new hash table backing store while
running, hence the table entries are only cleared.

Blink code will rarely do manual removals from these
collections, which gives the hash table no opportunity
to actually shrink the capacity of the backing store.
This can lead to hash tables with a very low load factor,
the majority of the entries be deleted and empty slots.

To allow for shrinking to happen over hash tables with
weak references, add() will check if shrinking is required.


Review-Url: https://codereview.chromium.org/2034883002
Cr-Commit-Position: refs/heads/master@{#397667}
Revert of Switch WTF::find on LChar to use memchr. (patchset #1 id:1 of https://codereview.chromium.org/1948543004/ )
Reason for revert:
LSAN and MSAN bots appear unhappy:


crash log for renderer (pid <unknown>):
STDOUT: <empty>
STDERR: =================================================================
STDERR: ==4==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6030000982af at pc 0x00000045811f bp 0x7fff2f309830 sp 0x7fff2f308fe0
STDERR: READ of size 5006 at 0x6030000982af thread T0 (content_shell)
STDERR:     #0 0x45811e in memchr ??:0
STDERR:     #1 0x3c5c419 in find third_party/WebKit/Source/wtf/text/StringImpl.h:532:9
STDERR:     #2 0x3c5c419 in find third_party/WebKit/Source/wtf/text/StringImpl.h:660:0
STDERR:     #3 0x3c5c419 in find third_party/WebKit/Source/wtf/text/WTFString.h:214:0
STDERR:     #4 0x3c5c419 in find third_party/WebKit/Source/wtf/text/WTFString.h:215:0
STDERR:     #5 0x3c5c419 in parameter third_party/WebKit/Source/platform/ContentType.cpp:50:0
STDERR:     #6 0x8d64b7d in isTypeSupported third_party/WebKit/Source/modules/mediasource/MediaSource.cpp:244:33
STDERR:     #7 0x9251198 in isTypeSupportedMethod ./out/Release/gen/blink/bindings/modules/v8/V8MediaSource.cpp:234:32
STDERR:     #8 0x9251198 in isTypeSupportedMethodCallback ./out/Release/gen/blink/bindings/modules/v8/V8MediaSource.cpp:239:0
STDERR:     #9 0x444b759 in Call v8/src/api-arguments.cc:16:3


Original issue's description:
> Switch WTF::find on LChar to use memchr.
> BUG=607208
> Committed: https://crrev.com/c9f9af30569ac2cd353e234f569052db6ab436f4
> Cr-Commit-Position: refs/heads/master@{#397568}

# Skipping CQ checks because original CL landed less than 1 days ago.

Review-Url: https://codereview.chromium.org/2036993002
Cr-Commit-Position: refs/heads/master@{#397664}
Revert of ImageCapture: move mojom from WebKit/public to media/ (patchset #4 id:60002 of https://codereview.chromium.org/2027023002/ )
Reason for revert:
Appears to cause:


to timeout.


Original issue's description:
> ImageCapture: move mojom from WebKit/public to media/
> This CL moves image_capture.mojom from
> {third_party/WebKit/public/platform/modules => media/mojo/interfaces}
> so the generated data types (e.g. PhotoCapabilities{Ptr})
> can be used from both Blink and media/capture locations.
> Also capture.gypi is trivially relocated to capture/ folder.
> Note that gyp files are -yay!- close to being finally
> removed.
> BUG=518807
> CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel,mac_blink_rel,win_blink_rel
> Committed: https://crrev.com/64aec45d94682ae3b38c0f1c18ff74cd937ff9b5
> Cr-Commit-Position: refs/heads/master@{#397644}

# Skipping CQ checks because original CL landed less than 1 days ago.

Review-Url: https://codereview.chromium.org/2034003002
Cr-Commit-Position: refs/heads/master@{#397663}
Sync LeakExpectations following r397405.

Review-Url: https://codereview.chromium.org/2037613003
Cr-Commit-Position: refs/heads/master@{#397493}
Adjust representation of liveDocumentSet() to help diagnose instability.
The liveDocumentSet singleton keeps a


collection of all the currently live documents. Some crashes are
being reported when this HeapHashSet<>'s weak references are
being processed, indicating that the pointer to the hash table
is misshapen.

To potentially throw some light on how that could come to be,
switch representation to PersistentHeapHashSet<WeakMember<Document>>,
which will keep the hash table wrapper off-heap. That could
help determine if we're dealing with an (Oilpan) heap object
overwrite here.


Review-Url: https://codereview.chromium.org/2033643003
Cr-Commit-Position: refs/heads/master@{#397436}
Delay leak reporting until worker in-process proxies have been finalized.
If a document creates a number of workers, terminating these and having
their destruction ripple all the way back to the in-process proxy objects
isn't immediate. But something that needs to complete before the leak
detector can initiate reporting -- an in-process proxy object maintains a
strong reference to the document, and would generate a leak if not
destructed and its garbage having been collected afterwards.

Address the reliability of multi worker shutdown by maintaining a
counter of how many in-process proxy objects are still alive and run
GCs until it drops to zero. Do that at most two times around.

BUG=589802, 616714

Review-Url: https://codereview.chromium.org/2026993004
Cr-Commit-Position: refs/heads/master@{#397405}
Avoid unnecessary uses of GarbageCollectedFinalized<>.

Review-Url: https://codereview.chromium.org/2027333003
Cr-Commit-Position: refs/heads/master@{#397402}
Allow various font weights in gfx. These changes make Chromium's gfx::Font more closely match native font APIs &


Review-Url: https://codereview.chromium.org/1819753003
Cr-Commit-Position: refs/heads/master@{#397368}
Remove expectation for svg/W3C-SVG-1.1/struct-frag-02-t.svg
No longer appears to exhibit the behavior described. Give it a try


Review-Url: https://codereview.chromium.org/2033663002
Cr-Commit-Position: refs/heads/master@{#397342}
Delay leak reporting until worker in-process proxies have been finalized.
If a document creates a number of workers, terminating these and having
their destruction ripple all the way back to the in-process proxy objects
isn't immediate. But something that needs to complete before the leak
detector can initiate reporting -- an in-process proxy object maintains a
strong reference to the document, and would generate a leak if not
destructed and its garbage having been collected afterwards.

Address the reliability of multi worker shutdown by maintaining a
counter of how many in-process proxy objects are still alive and run
GCs until it drops to zero. Do that at most two times around.

For documents not creating any workers, monitoring this proxy count
avoids having to perform a third GC, something that was conservatively
done before to address worker shutdown (but not reliably.)


Review-Url: https://codereview.chromium.org/2026993004
Cr-Commit-Position: refs/heads/master@{#397333}
Don't use hasAttribute in SVGFilterPrimitiveStandardAttributes
Use isSpecified() to query for existance in setStandardAttributes. This
avoids triggering unnecessary attribute synchronizations.

While here, drop the "double precondition" checking since the only caller
of this function checks this already.


Review-Url: https://codereview.chromium.org/2026343002
Cr-Commit-Position: refs/heads/master@{#397202}
Have detached ScriptLoaders detach their PendingScripts.
A ScriptLoader that has become detached from its document will not
execute the script once the script resource has loaded.

If in such a detached state, make sure the ScriptLoader lets go
of its PendingScript promptly.


Review-Url: https://codereview.chromium.org/2028613002
Cr-Commit-Position: refs/heads/master@{#397106}
Adjust color for printing list-item markers as we do for text.

Review-Url: https://codereview.chromium.org/2027653004
Cr-Commit-Position: refs/heads/master@{#397099}
remove unused courgette dep from the content layer
Review-Url: https://codereview.chromium.org/2024693002
Cr-Commit-Position: refs/heads/master@{#396968}
Restore PendingScript prefinalizer.
Under some as yet unknown conditions, PendingScript objects can become garbage
without having been explicitly detached/disposed of first. Hence restore the
prefinalizer that r396656 removed.


Review-Url: https://codereview.chromium.org/2021773004
Cr-Commit-Position: refs/heads/master@{#396813}
Address ThreadHeap::willObjectBeLazilySwept() corner case.
If willObjectBeLazilySwept(object) was used when finalizing an object on a
lazily swept page, and |object| happened to reside on the same heap page,
the predicate would return the wrong result if the object had been swept
past (and it had been deemed to be alive.)

Addressed by adding a special case for querying objects on the same page,
making willObjectBeLazilySwept() precisely determine liveness in the
face of lazy sweeping.


Review-Url: https://codereview.chromium.org/2015173003
Cr-Commit-Position: refs/heads/master@{#396798}
Statically disallow delete' over heap collection objects.
Explicitly deleting heap-allocated heap collection objects isn't
allowed nor meaningful, the garbage collector handles their lifetimes
precisely. The implementation of 'delete' over these collection objects
delegate to a allocator-trait class's free() method, so by not providing
it for heap collection objects, compilation fails if 'delete' is ever
attempted instantiated & used over these objects.

As MSVC performs method instantiation more eagerly, we're unable to
statically catch such inappropriate uses of 'delete' at compile time.
Rely on a run-time NOTREACHED() instead.


Review-Url: https://codereview.chromium.org/2021103002
Cr-Commit-Position: refs/heads/master@{#396788}
Make reallocation of large objects reliable.
If ThreadHeap::reallocate<T>() is called with a size that's
equal or greater to the large object threshold (64k, currently),
make sure it ends up being allocated as a large object.

Large objects would previously be attempted allocated on a normal arena,
hoping that the allocation couldn't be serviced by bump allocation, but
fall into an out-of-line allocation.


Review-Url: https://codereview.chromium.org/2019273002
Cr-Commit-Position: refs/heads/master@{#396712}
Tune down debugging emergency for clearAnimatedType() a notch
Fixing re-entrancy into the animation code through the garbage
collector is proving to be a non-trivial task. Since we now know more
about the issue, downgrade the RELEASE_ASSERT to a DCHECK to not
affect more users than necessary while getting this bug sorted out.


Review-Url: https://codereview.chromium.org/2019223003
Cr-Commit-Position: refs/heads/master@{#396705}
Win7 baseline for svg/dynamic-updates/SVGFEBlendElement-dom-in2-attr.html

Review-Url: https://codereview.chromium.org/2008553009
Cr-Commit-Position: refs/heads/master@{#396702}
Fix Visual Studio warning on single file compilation

Review-Url: https://codereview.chromium.org/2018733003
Cr-Commit-Position: refs/heads/master@{#396693}
(Heap)TerminatedArrayBuilders are stack allocated.
HeapTerminatedArrayBuilder is currently only safe if kept on the stack,
restrict it accordingly + have it keep a Member<> reference to the
HeapTerminatedArray it is constructing.


Review-Url: https://codereview.chromium.org/2021713002
Cr-Commit-Position: refs/heads/master@{#396677}
Turn ResourceLoaderSet into a part object.
The abstraction is really a derived HashSet, so make it
a part object.

(Change done in part to diagnose what appears to be a
heap overwrite involving ResourceLoaderSet.)


Review-Url: https://codereview.chromium.org/2019903002
Cr-Commit-Position: refs/heads/master@{#396657}
Tidy PendingScript.
No need for a prefinalizer as ScriptLoader is careful to eagerly and
explicitly dispose of PendingScripts already.

Remove unwanted copy constructor; not needed after PendingScript stopped
being a part object.


Review-Url: https://codereview.chromium.org/2023683002
Cr-Commit-Position: refs/heads/master@{#396656}
Revert of Expand WTF::StringView's API to be more like StringPiece. (patchset #12 id:220001 of https://codereview.chromium.org/2007103003/ )
Reason for revert:
Many a heap-buffer-overflow ASan failures,


Original issue's description:
> Expand WTF::StringView's API to be more like StringPiece.
> StringView no longer owns the string passed into it, and can now wrap
> a raw ptr to some characters.
> This allows us to leverage the inline strlen optimization where the
> compiler will embed the length of literal strings into the binary. It
> also allows the deletion many overloaded methods that used to take
> an LChar*, UChar* or String and can now just take a StringView instead.
> For example the two constructors in TextRun are now a single one that
> takes a StringView. This needed to be done in this patch to avoid
> ambiguous constructors.
> Future patches will replace CSSParserString with StringView, and also
> vastly simplify the huge number of overloads on various methods. We'll
> also expand the API surface of StringView to include the many useful
> operations that StringPiece has.
> BUG=615174
> Committed: https://crrev.com/330deea56e27bc760fa52101040a51428bb7f582
> Cr-Commit-Position: refs/heads/master@{#396493}

# Skipping CQ checks because original CL landed less than 1 days ago.

Review-Url: https://codereview.chromium.org/2025503002
Cr-Commit-Position: refs/heads/master@{#396641}
Revert of Remove StringBuilder::appendLiteral. (patchset #1 id:1 of https://codereview.chromium.org/2017053003/ )
Reason for revert:
Will unfortunately have to back out this one so that the revert https://codereview.chromium.org/2025503002/ will cleanly apply.

(Don't want a tree with this many ASan failures over the long weekend.)

Original iss