Opera Software upstreamed commits

Upstreamed commits in Chromium: 7020, V8: 61, Skia: 12, BoringSSL: 16.

Click message to expand


Author Message When
Don't expose blink internal types from public headers
Mojo's -blink.h headers expose all the cool internal
Blink types which means they can't be used in public headers.
Instead use the -shared.h versions.

(There is a presubmit coming to prevent accidents like this)

Change-Id: I6e27c66aba3b625a96885c6261fd481bdaa50cf0
Reviewed-on: https://chromium-review.googlesource.com/763227
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#515568}
Avoid clash between two NSAccessibilitySelectedTextMarkerRangeAttribute
There are two
NSString* const NSAccessibilitySelectedTextMarkerRangeAttribute =
and in jumbo builds they will end up in the same translation unit
and trigger compilation errors.

This patch moves one of them to where its used which will prevent
the clash and let the compilation proceed.

Bug: 746953
Change-Id: Iaf440412f7780141f8d22f648dfef59358ef610c
Reviewed-on: https://chromium-review.googlesource.com/758845
Reviewed-by: Elly Fong-Jones <ellyjones@chromium.org>
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#515515}
Wrap X11 headers in ui/gfx/x/x11.h
X11 headers define a lot of common symbols and that will interfere
with other code, in particular in jumbo builds where the X11 headers
get wider visibility. This wraps common X11 headers in
ui/gfx/x/x11.h and adds the necessary symbols to the namespace x11

So instead of writing

XAtom prop_type = None;

you now write

XAtom prop_type = x11::None;

and the same for True, False, Status and a few others.

Bug: 782184
Change-Id: I0d1b83720da615c808a2f7a291ddbf7664b26cd8
Reviewed-on: https://chromium-review.googlesource.com/756711
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Thomas Anderson <thomasanderson@chromium.org>
Reviewed-by: Dan Erat <derat@chromium.org>
Reviewed-by: Elliot Glaysher <erg@chromium.org>
Reviewed-by: Scott Violet <sky@chromium.org>
Cr-Commit-Position: refs/heads/master@{#515373}
Make kMaxRedirects into a C++ constant
Followup from https://chromium-review.googlesource.com/c/chromium/src/+/751744
Make the value a C++ constant instead of an enum.

Cq-Include-Trybots: master.tryserver.chromium.android:android_cronet_tester;master.tryserver.chromium.mac:ios-simulator-cronet
Change-Id: I996f05877f7d68f468cdb41b4c7c1a5dcc1c62fc
Reviewed-on: https://chromium-review.googlesource.com/757398
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Ryan Hamilton <rch@chromium.org>
Cr-Commit-Position: refs/heads/master@{#515328}
Rename two kTrafficAnnotation variables that clash in jumbo builds
In jumbo builds several cc files are merged into one
translation unit and then a variable that is intended to be local
can collide. That happened with kTrafficAnnotation.

This patch renames them
kTrafficAnnotation ->

Bug: 746953
Change-Id: Ia46c25b80956ed04aa081348167883264c57b894
Reviewed-on: https://chromium-review.googlesource.com/758782
Reviewed-by: Joshua Bell <jsbell@chromium.org>
Reviewed-by: Charlie Harrison <csharrison@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#515327}
[LayoutNG] Change table cells to use NG layout.
Switch table cells over to use NG layout, so they can establish
NG block formatting contexts.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng;master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I08bbe28bb14d7b4041cc207ef499cf2d426ce219
Reviewed-on: https://chromium-review.googlesource.com/649698
Commit-Queue: Karl Anders Øygard <karlo@opera.com>
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#515308}
Ship the CSS 'transform-box' property
Intent-to-ship thread:


Bug: 595829
Change-Id: I8b25037046efeeffcc52bf3835aff06c8d110549
Reviewed-on: https://chromium-review.googlesource.com/759040
Reviewed-by: Daniel Bratell <bratell@opera.com>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#515282}
Fix jumbo compilation for Android in //base
The define of "Long" to "long" ended up changing some "Long"
strings in jni code to "long" which broke compilation.

Bug: 775547
Change-Id: If9dab9f193b0cad5067903f46ade98155254c7de
Reviewed-on: https://chromium-review.googlesource.com/758366
Reviewed-by: danakj <danakj@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#514883}
Remove media/track/track-kind.html
Remove this test in favor of the existing and overlapping coverage in
Web Platform Tests:


Bug: 782095
Change-Id: Iff866ddabaa69a30e24f6126f202c6cbd431425a
Reviewed-on: https://chromium-review.googlesource.com/756752
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Reviewed-by: srirama chandra sekhar <srirama.m@samsung.com>
Cr-Commit-Position: refs/heads/master@{#514817}
Merge all KMaxRedirects=20
Too much code took upon itself to define 20 as the constant
for number of redirects. If it's going to be a constant, let it
be a single constant, in this case in the network URLRequest class.

This was noticed because the multiple kMaxRedirects in
content/browser collided in jumbo experiments.

Cq-Include-Trybots: master.tryserver.chromium.android:android_cronet_tester;master.tryserver.chromium.mac:ios-simulator-cronet
Change-Id: Ib11c1ea77ea0f1da0adb5966eb992a8f82e31177
Reviewed-on: https://chromium-review.googlesource.com/751744
Reviewed-by: Ryan Hamilton <rch@chromium.org>
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Reviewed-by: Joshua Bell <jsbell@chromium.org>
Reviewed-by: Makoto Shimazu <shimazu@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#514791}
Fix media/track/track-cue-rendering-tree-is-removed-properly.html
The way media/track/track-cue-rendering-tree-is-removed-properly.html is
using assert_throws is no longer valid, so replace it with a different
Also, <track> does not have a 'mode' content attribute. Using 'default
here seems like it should DTRT.

Bug: 664844
Change-Id: I7cf035dc262160f4748a22f7f92fbc45c2bfe13b
Reviewed-on: https://chromium-review.googlesource.com/756848
Reviewed-by: srirama chandra sekhar <srirama.m@samsung.com>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#514789}
Deduplicate InputEventDispositionToAck
There were two identical InputEventDispositionToAck in
input_handler_manager.cc and widget_input_handler_manager.cc and
in jumbo builds those clashed. This exports the function from
input_handler_manager.cc/.h so that it can be used in

Bug: 746953
Change-Id: I8c032a4f283b0eeb601b75e3d15efddbff360578
Reviewed-on: https://chromium-review.googlesource.com/753325
Reviewed-by: Dave Tapuska <dtapuska@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#514239}
Rename one of two different ClampToValidDimension
There are two ClampToValidDimension in content/render and in
jumbo builds where files are merged those functions clashed.

This patch renames one of them ClampToValidScreenCastDimension
which is a more unique, and descriptive, name.

Bug: 746953
Change-Id: Ib331422044e87b683dde1fb20cffd0395e79a6ea
Reviewed-on: https://chromium-review.googlesource.com/753369
Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#514225}
Avoid leaking mojo -blink.h headers outside blink
mojo's -blink.h headers are for use inside blink. For the rest there
is -shared.h headers.

Change-Id: Iffb6bd56656545c35056ba49badfe06e8519ec29
Reviewed-on: https://chromium-review.googlesource.com/753884
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#514111}
Special-case the 'is2D' case in DOMMatrix::invertSelf
When the DOMMatrix is supposedly well-formed according to the 'is2D'
restrictions, we can perform the inversion on the relevant submatrix
rather than the full matrix. This should avoid some numerical errors
sneaking in, breaking the 'is2D' invariant. It is probably a bit faster
as well.

Bug: 781172
Change-Id: I0e7678ccaf2baae9c40cff0acebb9d0fc498be11
Reviewed-on: https://chromium-review.googlesource.com/753685
Reviewed-by: Jinho Bang <jinho.bang@samsung.com>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#514044}
Handle failed dictionary conversion in DOMPointReadOnly::matrixTransform
DOMMatrixReadOnly::fromMatrix can fail, returning null and generating an

Bug: 781172
Change-Id: If77e4cd57d02e8a09d79875aa96f0bc243f08b40
Reviewed-on: https://chromium-review.googlesource.com/753485
Reviewed-by: Jinho Bang <jinho.bang@samsung.com>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#514041}
Don't leak blink headers outside Blink.
WebCORS.h leaked internal Blink headers that could collide with
other code in for instance content (noticed in jumbo).

Change-Id: Ic874d3b0bfaed843cf1209944685b8368bb56a1c
Reviewed-on: https://chromium-review.googlesource.com/753881
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#513828}
Avoid importing base::Time into global scope
X11 headers add a Time typedef to global scope and in jumbo builds
(where files are merges so more code and headers become visible), that
Time typedef and the "using base::Time" clashed.

This patch imports the constant the code wanted directly, which is less
code (fewer characters) as well.

Bug: 746953
Change-Id: I130cd78080eda80ffaf75ef22afab5b9a68d4e59
Reviewed-on: https://chromium-review.googlesource.com/753447
Reviewed-by: Max Morin <maxmorin@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#513804}
Use PostMessageW instead of PostMessage to avoid undefs
There are code that does #undef PostMessage to avoid
the win32 defines and if such code/headers get included in
render_widget_host_view_event_handler.cc, then there won't be
a PostMessage to call.

The easiest solution is to call PostMessageW instead (the Unicode
version of the API) since that is the function we want to call

Bug: 746953
Change-Id: I6bb61404e2685846b4298223fe588d51fa0704d5
Reviewed-on: https://chromium-review.googlesource.com/753582
Commit-Queue: Avi Drissman <avi@chromium.org>
Reviewed-by: Avi Drissman <avi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#513785}
Avoid clashing two IsUsingMus() functions in jumbo builds
In some jumbo configurations the two IsUsingMus would end up
in the same compilation unit and cause compilation errors.
The function is small enough (barely) to have in two copies so
this patch moves them to a tighter namespace.

Bug: 746953
Change-Id: I08b67606fd6dc68ee5ae9a8c91c79386051f8976
Reviewed-on: https://chromium-review.googlesource.com/749386
Reviewed-by: Avi Drissman <avi@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#513732}
Cleanup extraction of intervals for raster shapes
This restructures Shape::CreateRasterShape so that the raster data is
extracted, followed by the actual extraction of intervals from the
raster data. Move the size restriction from ShapeOutsideInfo to Shape.
The code is generally left as-was with some minor exceptions, like
using IntSize::Area() and using size types for |max_image_size_bytes|.
The console messages previously emitted for "too large" images are
This makes error handling slightly easier and hopefully also improves

Change-Id: I3e0a1bfb08f1c50d73f5ce7c909d98a6e31df5a0
Reviewed-on: https://chromium-review.googlesource.com/750962
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#513591}
Add missing include guard for VideoFrameSubmitter.h
Noticed in jumbo experiments.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: Ida9ad9a3dec791cca3992e5b68c1f3bc722ead5e
Reviewed-on: https://chromium-review.googlesource.com/749401
Reviewed-by: Philip Rogers <pdr@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#513491}
Replace the NOTIMPLEMENTED_POLICY macro with an explicit macro
NOTIMPLEMENTED_POLICY could be used to control what the
NOTIMPLEMENTED macro did, but *only* if set before the first
include of base/logging.h. That made it hard to use and
not at all compatible with jumbo builds.

There were only a few users of NOTIMPLEMENTED_POLICY and they all
set NOTIMPLEMENTED_POLICY to 5 so a better solution seems to be
where spam is feared.

Bug: 777852
Change-Id: Id1b454200a64d43e27df39b2c9a02f07ba4710cf
Reviewed-on: https://chromium-review.googlesource.com/749143
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Scott Violet <sky@chromium.org>
Reviewed-by: danakj <danakj@chromium.org>
Cr-Commit-Position: refs/heads/master@{#513481}
Add some missing include guards in third_party/WebKit/Source
Some of these are technically not needed, but to avoid future
accidents it's best to be consistent.

Note that there is another Forward.h but that one has WTF_Forward_h as
include guard so there won't be a clash.


Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I6f42004c4810e960038c51f47d8e2714f00a7c2d
Reviewed-on: https://chromium-review.googlesource.com/749462
Reviewed-by: Philip Rogers <pdr@chromium.org>
Reviewed-by: Guido Urdaneta <guidou@chromium.org>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#513460}
Unduplicate a kMaxListSize constant that broke jumbo builds
The two kMaxListSize constants collided in jumbo builds where
files are merged before compilation, for higher build performance.

This patch makes the constants be shared.

Bug: 777470
Change-Id: Idf90fcf389ba3895b4f0e28b4649f11ff5f8257e
Reviewed-on: https://chromium-review.googlesource.com/749142
Commit-Queue: Daniel Bratell <bratell@opera.com>
Commit-Queue: Rouslan Solomakhin <rouslan@chromium.org>
Reviewed-by: Rouslan Solomakhin <rouslan@chromium.org>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Reviewed-by: Ganggui Tang <gogerald@chromium.org>
Cr-Commit-Position: refs/heads/master@{#513119}
Fold ImageResourceContent::{Uses,}Image{Container,HasRelative}Size
These methods - UsesImageContainerSize and ImageHasRelativeSize - are
only simple wrappers for similarly named methods on Image. Callers have
access to Image without any hoop-jumping, so just fold these methods.

Bug: 773272
Change-Id: Ie6a02b7e1c4643c5ebfafa0b6281503194904852
Reviewed-on: https://chromium-review.googlesource.com/747102
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#512912}
Percent-decode fragments before using them for SVG references
We were using the "raw" form of the fragment, meaning that any percent-
encoded fragments would not resolve correctly.

Bug: 779420
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: Ic091e775589fd59d25ad1878115f2ad2593bc733
Reviewed-on: https://chromium-review.googlesource.com/746885
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#512895}
The empty string is a not a valid <length> for SVGLength
SVGLength::SetValueAsString was allowing "" to "reset" the value without
signaling an error. Because of how the handling of removeAttribute works
we can't shut down this entirely, but still need to handle the null
string resulting from that.

Convert svg/custom/invalid-length-units.html to testharness.js. (This
test had one item for "" and " ".)

Bug: 779454
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I055b77b07d833a252b325df8fc1a908271c86005
Reviewed-on: https://chromium-review.googlesource.com/746707
Reviewed-by: Philip Rogers <pdr@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#512871}
Adding include guards for print_messages.h
We have had IPC headers where it was up to the user
to carefully only include them once. Jumbo builds where
cc files are compiled together are not that careful so they
need include guards.

This is a followup to equivalent work done in chrome and content.

Bug: 746953
Change-Id: I3dc4067e2c4e23ee41be0def78a34bf4f7cd4b96
Reviewed-on: https://chromium-review.googlesource.com/741597
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#512844}
Rename an empty function to be more unique.
There were two empty functions named "IgnoreError" and this
caused clashes in jumbo build experiments. This patch renames
one of them "EmptyErrorHandler" which is also a good name.

There is no natural place to share the functions, and being empty
there is not that much value in sharing them either.

Bug: 746953
Change-Id: I7c7507cf485710159e64b3945eeea558e2e4f901
Reviewed-on: https://chromium-review.googlesource.com/743786
Reviewed-by: Dan Elphick <delphick@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#512555}
Express the last scroll offset in DIPs.
The RWHVAura::GetLastScrollOffset() method should return values in view
coordinates (device independent pixels) as do other implementations of

When zoom-for-DSF is enabled the coordinates from compositor are
expressed in pixel coordinates which are different from view coordinates
on HiDPI screens.  Therefore the last_scroll_offset_ value needs to be
scaled to view coordinates

BUG: 778228
Change-Id: Ic8da1fdbf821d0073fb2a22a75ecbc40441ce00e
Reviewed-on: https://chromium-review.googlesource.com/610148
Commit-Queue: David Bokan <bokan@chromium.org>
Reviewed-by: Sadrul Chowdhury <sadrul@chromium.org>
Reviewed-by: David Bokan <bokan@chromium.org>
Reviewed-by: Mitsuru Oshima <oshima@chromium.org>
Cr-Commit-Position: refs/heads/master@{#512549}
Disable //base jumbo for iOS
Something with allocators goes wrong in iOS (similar to nacl) and
not having a good way to debug it, and not very mich interest for
jumbo on iOS, it's easiest to just disable it.

Bug: 776313
Change-Id: Ifc8c77fd19aa6fc5bcd790cc8c7056fd8a57640a
Reviewed-on: https://chromium-review.googlesource.com/741804
Reviewed-by: Nico Weber <thakis@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#512263}
Adding include guard to debugging_client.h header
A header missing include guards caused problem in jumbo
build experiments.

Change-Id: Ibef82467108600c566ed71cec00970ec6301f012
Reviewed-on: https://chromium-review.googlesource.com/741504
Reviewed-by: David Trainor <dtrainor@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#512257}
Deduplicate PaintScrollbar
CompositedLayerMapping.cpp and PaintLayerCompositor.cpp has almost
identical (differs by a null-check) PaintScrollbar helpers.
Move a cleaned up version to ScrollableAreaPainter (being the least bad
common location.)
This fixes Jumbo compilation.

Bug: 713137
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: Icc36e57ed364b18716fd56b0363431f352ef0d72
Reviewed-on: https://chromium-review.googlesource.com/741595
Commit-Queue: Xianzhu Wang <wangxianzhu@chromium.org>
Reviewed-by: Xianzhu Wang <wangxianzhu@chromium.org>
Reviewed-by: Philip Rogers <pdr@chromium.org>
Reviewed-by: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#512224}
Removed IsOriginSecure clone and removed "using namespace"
Importing namespaces with "using namespace" can have surprising
results (which is why the coding standard disallows them).

This patch's main motivation is to remove a "using namespace content"
which made indexed_db code unable to distinguish between ::indexed_db 
and ::content::indexed_db in jumbo builds, but in the process it
was realized that the local IsOriginSecure was only partly used
and also seemed to be close enough to content::IsOriginSecure that
one of them should suffice.

There were two IsOriginSecure(). One in {anon ns}::IsOriginSecure() and
one in content::IsOriginSecure(). In mixed_content_navigation_throttle.cc
there are two calls to unqualified "IsOriginSecure()". One was 
supposed to resolve to {anon ns}::IsOriginSecure() and
the other one to content::IsOriginSecure().

After this patch both calls will go to content::IsOriginSecure().

Bug: 629059, 746953
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_site_isolation
Change-Id: Id572c05707545e6303f63f2c4a18acf7fda2a4c4
Reviewed-on: https://chromium-review.googlesource.com/738175
Reviewed-by: Camille Lamy <clamy@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#512174}
Update baselines after Skia SkOffsetImageFilter change

Bug: 778204
Change-Id: I7e531d55d2e8c3daf19ed93226c21d9698037d05
Reviewed-on: https://chromium-review.googlesource.com/741233
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#512162}
Fix for reference counted variable being passed the wrong way
Passing pointers to reference counted variables as raw pointers in
bind is disallowed so this wraps it in base::Unretained like the
other types.

This was discovered while making the code able to be jumbo
compiled because in jumbo builds the type URLRequestContextGetter
was no longer a undefined forward declared type. As long as it
was a pointer to something "unknown" bind.h was fine with it.

Bug: 746953
Change-Id: I72a0d2c2957b885f967c246b1575f6609ae8c9c3
Reviewed-on: https://chromium-review.googlesource.com/739861
Reviewed-by: Charlie Harrison <csharrison@chromium.org>
Reviewed-by: Camille Lamy <clamy@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#512155}
Deduplicate UMALogDeviceAuthorizationTime
There were two implementations of UMALogDeviceAuthorizationTime and
in jumbo builds those clashed. This makes it one implementation and
moves it to AudioOutputAuthorizationHandler since it also
has Authorization in the name.

Bug: 746953
Change-Id: I63159187bd81b355ad6c94398a44e2ce188464bb
Reviewed-on: https://chromium-review.googlesource.com/739901
Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#512126}
Let jumbo use root_build_dir relative paths
Up until now include paths have been relative to the location
of the generated jumbo files. That can make paths rather long 
with many "../../.." in them.

In some circumstances, the paths are now too long for some
Win32 APIs (260 chars) so let us try with 
root_build_dir relative paths instead.

Bug: 778627
Change-Id: Ic7202789f75caf5134b38b174cb5b24a217d0035
Reviewed-on: https://chromium-review.googlesource.com/737836
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Bruce Dawson <brucedawson@chromium.org>
Cr-Commit-Position: refs/heads/master@{#511920}
Rework computed style handling for 'width' and 'height'
getComputedStyle(...) for 'width' and 'height' would always return
'auto' for layout objects to which said property did not "apply" (by
some fuzzy heuristic.) This specifically broke for some SVG elements
where 'width' and 'height' apply (<rect>, <image> and <foreignObject>),
but is also wrong more generally - per CSSOM [1].

Rework the relevant parts of ComputedStyleCSSValueMapping::Get to
consider if the used value or the computed value should be used for the
respective property. The new helper
(WidthOrHeightShouldReturnUsedValue) replaces the old
WidthOrHeightPropertyAppliesToObject, while removing the explicit return
of an 'auto' identifier. 'auto' (or any other computed value) will now
be returned via ZoomAdjustedPixelValueForLength if the resolved value is
not the used value.

This is a behavioral change, and matches the behavior of Gecko.

Fold the old svg/css/getComputedStyle-svg-text-width-height.html test
into a new one that cover more (SVG) cases.

[1] https://drafts.csswg.org/cssom/#resolved-value

Bug: 708888, 772707
Change-Id: I573362a03c9e0d98251bdbcf4e9854a5a5d8dd67
Reviewed-on: https://chromium-review.googlesource.com/707103
Reviewed-by: Philip Rogers <pdr@chromium.org>
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#511848}
Temporarily suppress some feOffset tests
The following tests

 * svg/W3C-SVG-1.1/filters-offset-01-b.svg
 * svg/filters/feOffset.svg

show small differences (obvious progression for the former.)


Bug: 778204
Change-Id: I3b7e8da7856181f920d7889d5f7ac21c764f1071
Reviewed-on: https://chromium-review.googlesource.com/739484
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#511829}
Rename two constants with the same name kVerboseLevel
In jumbo builds where cc files are merged before being
compiled, the two different kVerboseLevel clashed.

This patch renames when kJobVerboseLevel and

Bug: 746953
Change-Id: Id9cf152e3b5d9aeaa41990fb3fa6908c60baf43a
Reviewed-on: https://chromium-review.googlesource.com/738135
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Min Qin <qinmin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#511783}
Fix some typos in jumbo.gni documentation.
Copy+pasted documentation shows a bit too much of its origin.

Change-Id: Idb17d72c74bdff0c3544d7b5ecc23ab00c88e7c8
Reviewed-on: https://chromium-review.googlesource.com/738037
Reviewed-by: Bruce Dawson <brucedawson@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#511772}
Deduplicate two constants kBlobStorageContextKeyName
We declared the key to lookup the chrome blob storage at
two places. This caused problems in jumbo builds where
cc files are merged and the symbols clashed.

Bug: 746953
Change-Id: Icc11b256026536983841b084f6d2a74358594a47
Reviewed-on: https://chromium-review.googlesource.com/738133
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Daniel Murphy <dmurph@chromium.org>
Reviewed-by: Avi Drissman <avi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#511608}
Give two GetUniqueIdInConstructor() unique names
For jumbo builds where cc files are merged, function names need
to be a bit more unique for the code to compile. This patch chooses
two names: CreateUniqueEntryID() and CreateUniqueHandleID().

Bug: 746953
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_site_isolation
Change-Id: I7058575bece926071d2b086c959ee08cd8023b68
Reviewed-on: https://chromium-review.googlesource.com/738369
Reviewed-by: Avi Drissman <avi@chromium.org>
Commit-Queue: Avi Drissman <avi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#511574}
Move ImageResourceContent::BrokenImage to LayoutImageResource
A "broken image" (fallback image) only make sense for "content images",
so LayoutImageResource seems like a better home for it. This also makes
it trivial to provide a decent device scale factor.
Fold the creation of a fallback image into LayoutImageResource too.

Bug: 773272
Change-Id: I3732f87ff8b433188920bfee9ab44acee255f6ae
Reviewed-on: https://chromium-review.googlesource.com/727904
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#511533}
Simplify HTMLImageElement.currentSrc 'current request' heuristics
Rather than depending on whatever ImageResourceContent::GetImage()
returns (which is also always something non-null), just explicitly check
for there being an error or an actual image.

Bug: 773272
Change-Id: I1e71837ccdc4f9d2bf2a066cece6451154fecbf3
Reviewed-on: https://chromium-review.googlesource.com/730755
Reviewed-by: Hiroshige Hayashizaki <hiroshige@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#511517}
Give some storage size constants more unique name.
To avoid clashes in jumbo builds, let local_storage and
dom_storage use differently named constants for max area count
and max cache size.

Bug: 746953
Change-Id: I0acf3d02a938d670f67546830e3f17681b55bb0e
Reviewed-on: https://chromium-review.googlesource.com/735545
Reviewed-by: Michael Nordman <michaeln@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#511478}
Remove reference for test that was removed

Bug: 595829
Change-Id: Ie93a136fbfb6e9425e9c48c89c8132f35ebfbc45
Reviewed-on: https://chromium-review.googlesource.com/738190
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#511439}
The initial value for 'transform-box' should be 'view-box'

Drop support for 'border-box' for the time being, since it no longer is
just an alias for 'view-box'. Remove the test for it (which happened to
be using the wrong keyword even... Oops)

Bug: 595829
Change-Id: Ia2889848eb3355c18164ce6978a13bab9e40e698
Reviewed-on: https://chromium-review.googlesource.com/735560
Reviewed-by: Philip Rogers <pdr@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#511287}
Tidy content box usage in HTMLCanvasElement::DoDeferredPaintInvalidation
Call LayoutBox::ContentBoxRect once and reuse the returned rect instead
of calling the method repeatedly (and mostly just tossing the result.)
Also cast the result to a FloatRect directly to avoid LayoutUnit<->float
impedance mismatches.
Rename some variables and update comments to reflect post-rename names.

Change-Id: Ie1a0bd1b955db7bf9e86e4e38d927c24d8e5ef4c
Reviewed-on: https://chromium-review.googlesource.com/733162
Reviewed-by: Justin Novosad <junov@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#511266}
Rename some socket buffer size constants with the same name
In jumbo builds, where cc files are merged before being compiled,
symbols that should be isolated can still clash and cause
compilation errors.

This patch renames
kReadBufferSize -> {kTcpReadBufferSize, kUdpReadBufferSize)
kRecvSocketBufferSize -> { kUdpRecvSocketBufferSize,
kSendSocketBufferSize -> kTcpSendSocketBufferSize

Bug: 746953
Change-Id: I9fb6d06fa25e8a8ab02f922b247f1b76808daa94
Reviewed-on: https://chromium-review.googlesource.com/723305
Reviewed-by: Sergey Ulanov <sergeyu@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#511230}
Deduplicate GetEventAckName.
We had two GetEventAckName that both converted an
InputEventAckState to a string. This patch merges them and
moves them to input_event_ack_state.cc.

The two GetEventAckNames clashed in jumbo build experiments.

Bug: 746953
Change-Id: Ie07e8d500a0e3cfcc8a705300adc597760ea5751
Reviewed-on: https://chromium-review.googlesource.com/735155
Commit-Queue: Daniel Bratell <bratell@opera.com>
Commit-Queue: Avi Drissman <avi@chromium.org>
Reviewed-by: Avi Drissman <avi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#511178}
Add include guards to message headers in chrome and extensions
The solution without include guards isn't compatible with jumbo
builds and this is in general easier for code to manage. Now
nobody needs to be careful about where they include a message header

This is a followup to a similar patch in content (
https://chromium-review.googlesource.com/580868 )

Bug: 746953
Change-Id: I3ce252d02b9fc916cc8a2ad039214b1da08676bb
Reviewed-on: https://chromium-review.googlesource.com/735480
Reviewed-by: Jochen Eisinger <jochen@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#511154}
Share content box rect in ImagePainter::PaintReplaced
Both of the drawing code-paths in said function use the full content box
rect, so we can compute it once and share it. This also avoids computing
the content size  twice.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I889f6440394fde75bafc8cc8ac0f6b3a1629c0c4
Reviewed-on: https://chromium-review.googlesource.com/733340
Commit-Queue: Xianzhu Wang <wangxianzhu@chromium.org>
Reviewed-by: Xianzhu Wang <wangxianzhu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#510866}
Use ContentSize() for content size stored for paint invalidation
LayoutBox::ContentSize() is more to the point than calling
LayoutBox::ContentBoxRect() and then do Size() on the result (ignoring
the position.) Hopefully it is also faster (4 vs 8 virtual calls.)

Change-Id: If8c370446fad49d976d1d7576ac7041cd8d78180
Reviewed-on: https://chromium-review.googlesource.com/733164
Commit-Queue: Xianzhu Wang <wangxianzhu@chromium.org>
Reviewed-by: Xianzhu Wang <wangxianzhu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#510846}
Move InterpolationQualityContext to platform/graphics
InterpolationQualityContext codifies a pattern that is used by all code
that alters the (default) image interpolation quality.
Move the tiny helper class to its own file, renaming it to
ScopedInterpolationQuality, and then use it where appropriate (which,
per above is "everywhere".)

In HTMLCanvasPainter.cpp, the FIXME referencing crbug.com/353716 is
removed, because the bug in question has been resolved as WontFix.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I8380cd4d20adcbc18dfa175e0d48e4947c51ca5b
Reviewed-on: https://chromium-review.googlesource.com/730205
Reviewed-by: Philip Rogers <pdr@chromium.org>
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#510825}
Tidy up SVGSVGElement::CurrentViewportSize
 * Put the LayoutObject pointer in a local variable.
 * Use ContentSize rather than the fullblown ContentBoxRect() since only
   the size is used.
 * Put the zoom in a local variable.
 * Use FloatRect::Size.

Change-Id: I7b150f53212f0b0cb2524b3867bfb90398ccf6e7
Reviewed-on: https://chromium-review.googlesource.com/733087
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#510788}
Hide Blink internal types from users of WebTappedInfo.h
A few internal types were accidentally exposed to the world.

Bug: 777366
Change-Id: I293070e479e88d76926c8c463a3bec4f04475a6f
Reviewed-on: https://chromium-review.googlesource.com/733082
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#510777}
[LayoutNG] Introduce LayoutNGMixin in preparation for LayoutNGTableCell.
This class holds code shared between LayoutNG subclasses of
LayoutBlockFlow.  Inheritance is parameterized, but only valid
for LayoutBlockFlow and subclasses.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng;master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I973193718d046ec6e8aa1a9bf548c5fef45aa149
Reviewed-on: https://chromium-review.googlesource.com/725346
Commit-Queue: Karl Anders Øygard <karlo@opera.com>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#510749}
Reducing default jumbo chunk size from 100 to 50.
Bruce Dawson and I have mesaured what compile times you can expect
from different chunk sizes and it seems that the advantages of 100
over 50 is at best small so this patch reduces the default to 50.

It will mean that 100 becomes less likely to work without code fixing
since fewer people will compile with 100, but it should be an overall
better experience because smaller jumbo units means single-file changes
need to recompile less unchanged source.

Bug: 766294
Change-Id: I5347c39ad91fbdcd83ea975884ccdb60aa8bbe45
Reviewed-on: https://chromium-review.googlesource.com/671783
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Bruce Dawson <brucedawson@chromium.org>
Reviewed-by: Dirk Pranke <dpranke@chromium.org>
Cr-Commit-Position: refs/heads/master@{#510679}
Deduplicate the ShouldDuckFlash function
Two files had identical ShouldDuckFlash functions which clashed
in jumbo builds (chromium unity build implementation where
source files are merged).

This patch moves the function to media_switches so it can be used by
all code.

Bug: 746953
Change-Id: I0665384f82e8bb3f0dfd6a536d1535b57c9bfe78
Reviewed-on: https://chromium-review.googlesource.com/723468
Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
Reviewed-by: Mounir Lamouri <mlamouri@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#510624}
[LayoutNG] Fix for painting legacy floats with margins.
The legacy painting code uses the margin box as the origin
for floats.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I00f4d3c4362af62555509d2512258bb243877aa2
Reviewed-on: https://chromium-review.googlesource.com/723339
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#510613}
Handle invalidation of SVG filters that are not in the layout tree
If a <filter> was not in the layout tree, we could not invalidate it
because doing that required going through the LayoutObject of the
If the <filter> does not have a LayoutObject associated, then invalidate
through the proxy-set directly.

Bug: 773811
Change-Id: I35612e3915a09b714b3aaa27e4b50ae344b6ff3f
Reviewed-on: https://chromium-review.googlesource.com/728001
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Reviewed-by: Xianzhu Wang <wangxianzhu@chromium.org>
Reviewed-by: Philip Rogers <pdr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#510397}
Renames two RecordCancelled functions to have unique names
In jumbo builds where source files are merged before compiled for
dramatically faster builds, functions that are intended to be local
will have a wider visibility and can clash.

This patch renames two similar, but not quite identical
RecordCancelled functions so that there will be no compilation

Bug: 746953
Change-Id: Ib31e3db19070f6cbbe0b7c383fcc5372ec02b90b
Reviewed-on: https://chromium-review.googlesource.com/727987
Reviewed-by: Sadrul Chowdhury <sadrul@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#510390}
Giving a couple of HandleRequestCallback functions unique names
The different HandleRequestCallback functions clashed in jumbo
builds so this patch renames them.

Jumbo builds are builds where cc files are merged for dramatically
higher build performance.

Bug: 746953
Change-Id: Ie854181f45d8b7d8684ed1da4c96b8ac1b644646
Reviewed-on: https://chromium-review.googlesource.com/725700
Reviewed-by: Dominic Mazzoni <dmazzoni@chromium.org>
Reviewed-by: Bence Béky <bnc@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#510203}
Fix Windows jumbo compilation by excluding the jpeg decoder
The jpeg decoder uses libjpeg_turbo which uses a "boolean" type
defined to be int. At the same time Windows has "boolean" type
which is unsigned char. If those headers meet in a
translation unit you get compilation errors.

An alternative fix would be to redefine libjpeg_turbo to use
unsigned char for its boolean type.

Bug: 775979
Change-Id: I268e0890dfc2fae79d0abe54bbd7bf5c0c23226f
Reviewed-on: https://chromium-review.googlesource.com/727980
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Reviewed-by: Bruce Dawson <brucedawson@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#510155}
Fold away ImageResourceContent::ImageSize
This moves scale-handling out into the (now former) consumers of the
ImageResourceContent::ImageSize method.

Bug: 773272
Change-Id: I08760b181a48f8a5dcc5ceff68a19c67eba3601a
Reviewed-on: https://chromium-review.googlesource.com/726087
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Cr-Commit-Position: refs/heads/master@{#510061}
Refactored some buffer classes to avoid name collisions
There were three different DependentIOBuffer classes, three similar
kBufferSize constants, two similar InitializeResourceBufferConstants
functions and two identical GetNumericArg functions.

Besides being potentially confusing, it causes clashes in jumbo
build experiments (chromium unity build system in development).

This patch moves around GetNumericArg (to merge the two copies) and
InitializeResourceBufferConstants (to make them not clash).
It renames the DependentIOBuffer classes which are deceptively
similar as well as the kBufferSize contstants and some other
variables that were not actually constants.

Bug: 746953
Change-Id: Id7cfa4baac0aa67a7b086896701aeab931e23a96
Reviewed-on: https://chromium-review.googlesource.com/723302
Reviewed-by: Dmitry Gozman <dgozman@chromium.org>
Reviewed-by: Charlie Harrison <csharrison@chromium.org>
Reviewed-by: Michael Nordman <michaeln@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#510042}
Remove mstensho@opera.com as core and core/layout OWNER.
I'm leaving Opera Software today.


Change-Id: Id9e11f73d3a3cbc0f2a772f93945cff21e742933
Reviewed-on: https://chromium-review.googlesource.com/727981
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#510032}
Introduce ImageResourceContent::IntrinsicSize
Most non-layout/paint users that query the size of an image are
interested in the intrinsic size of the image (usually the physical
pixel dimensions.) This is currently achieved by calling the ImageSize()
method with a multiplier of 1.
Split the ImageSize() method into a part that extracts the size of the
image (if any) and one that applies the multiplier (and follow-on
adjustments.) This should allow a future cleanup where the scaling is
moved closer to the layer that uses it - i.e layout and paint.

This also reduces the type-impedance a bit since IntrinsicSize can just
return an IntSize (like Image::Size()) rather than passing through a

Bug: 773272
Change-Id: I18a1c11e9fc891dc6f19c4b2c5bd5dc23c1a5da7
Reviewed-on: https://chromium-review.googlesource.com/718747
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#509770}
Jumbo for //base - disable jumbo when cross compiling for nacl
Jumbo builds with nacl fails in the linker because of too many
instances of memory allocator functions like valloc, realloc, mallopt
when linking libnacl.a.


Bug: 775547
Change-Id: Ibeeb1caa355aa8014c4b9179f4f26e303f13fbf8
Reviewed-on: https://chromium-review.googlesource.com/725284
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#509751}
Fix size keyword comparison in CSSRadialGradientValue::Equals
Said function would ignore any size keyword or explicit size
specification if there was a shape keyword.
Adjust the comparisons so that first any explicit size checked, followed
by checking the size keyword and the shape value.

Also rewrite the if-ladder for the center point (|first_x_| and
|first_y_|) to just use two DataEquivalent.

Bug: 775201
Change-Id: I44686b54d3e02e1fd4682c4288eec3aca0e3e441
Reviewed-on: https://chromium-review.googlesource.com/723460
Reviewed-by: meade_UTC10 <meade@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#509718}
Refactor <filter> invalidation to use the DOM structure
This changes the path used for invalidation of filter effects (SVGFE*)
from the layout tree to the DOM tree. This is done to allow invalidation
to work when the filter is not part of the layout tree. That change
will be done in a follow-up.

Also add casting helpers for SVGFilterPrimitiveStandardAttributes and
use it where applicable.

Bug: 773811
Change-Id: I275534e59eb285c0cab805f6c09d00b1f725e4f4
Reviewed-on: https://chromium-review.googlesource.com/719837
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Reviewed-by: Philip Rogers <pdr@chromium.org>
Commit-Queue: Philip Rogers <pdr@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#509478}
Make different g_observers and g_instances have unique names
This is preporatory patch to make content/browser able to do
jumbo compiles, i.e. compilation with many cc files merged into
one translation unit. For that to compile, names need to be a bit
more unique than they are today.

Bug: 746953
Change-Id: Ie7cb7445d3662d47372bde78df705aec7b130ed5
Reviewed-on: https://chromium-review.googlesource.com/721021
Commit-Queue: Avi Drissman <avi@chromium.org>
Reviewed-by: Avi Drissman <avi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#509429}
Propagate float rects further in SVGRootInlineBox::LayoutInlineBoxes
Compute the union of the children of a flow box using FloatRect too,
then convert to a LayoutRect for setting the InlineBox's logical rect.

Also restructure the physical->logical conversion a bit.

Bug: 757436
Change-Id: I6c8f3a781c3c02dfb28d87eafa3df6cd5fb864f3
Reviewed-on: https://chromium-review.googlesource.com/721320
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#509386}
Remove rune@opera.com from core/OWNERS
Leaving Opera.


Change-Id: Ia6acfa96bc8a899b970cb4edd213cfb43a2abe2b
Reviewed-on: https://chromium-review.googlesource.com/721181
Reviewed-by: Rune Lillesveen <rune@opera.com>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#509353}
Renamed some global cache size constants
There were several different k*Cache*Size variables controlling
different caches but with the same name. These collided in jumbo
builds but also made it harder to discuss them and their values
so renaming them seems like a good improvement.

Bug: 746953
Change-Id: I1e8dc4f687c7b1e3ca8a9f9a5e80409029f8c4b0
Reviewed-on: https://chromium-review.googlesource.com/721205
Reviewed-by: Michael Nordman <michaeln@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#509341}
Give all different kFilteredMessages unique prefixes
There are 5 different kFilteredMessages arrays in content/browser
and some of them collide in jumbo (chromium unity builds)
build experiments.

This patch renames them to:

Bug: 746953
Change-Id: I3fc1b6f6ea3d0e5ccbb2ff47d4d476e02f5c2344
Reviewed-on: https://chromium-review.googlesource.com/721279
Reviewed-by: Ken Buchanan <kenrb@chromium.org>
Reviewed-by: Michael Nordman <michaeln@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#509321}
Give the different KDataFile variables unique prefixes
In the jumbo build experiment (chromium unity builds) there is a
collision between the two different kDataFile strings. This patch
renames them kNetworkErrorDataFile and kTargetsDataFile which also
matches their intended values.

Bug: 746953
Change-Id: Ib9f47fa4d358303c7cdbb65b54b40080521a915d
Reviewed-on: https://chromium-review.googlesource.com/721299
Reviewed-by: Bence Béky <bnc@chromium.org>
Reviewed-by: Dominic Mazzoni <dmazzoni@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#509320}
[LayoutNG] Update some test expectations for multicol.
When multicol support was introduced in NG, a lot of tests started to crash and
time out. I wanted to get rid of those as soon as possible, so I created a
separate bug report. It seems that all the crashes and timeouts introduced by
multicol are now gone.

Some caret-range-outside-columns tests still occasionally time out (they're
actually just very slow), but that doesn't seem multicol related.

Bug: 757767
Change-Id: I4827a090b23b5220e182759a458f3c5a05f115e7
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Reviewed-on: https://chromium-review.googlesource.com/720930
Reviewed-by: Emil A Eklund <eae@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#509123}
Add jumbo also for core/inspector generated files (-1 CPU minute)
Just clearing up minor targets that does not use the standard
templates for third_party/WebKit/Source/core and therefore did not get
jumbo automatically.

This removes about 1 CPU minute from the build effort, which is about
3% of the total cost of building blink/core (post-jumbo), and about
0.1% of the total effort building chrome+content_shell+blink_tests.


Bug: 713137
Change-Id: Iba18116c3da677dd0c530b8db98327e587187368
Reviewed-on: https://chromium-review.googlesource.com/720961
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#509050}
Rename CreateFileForProcess to be more unique.
There are two CreateFileForProcess functions (similar, both for webrtc
but not identical). This causes issues in jumbo builds since you
cannot easily take the address of an overloaded function.  The fix
here is to rename one of them to CreateEventLogFileForChildProcess
which is also more descriptive.

Bug: 746953
Change-Id: I8457adc2194fc24e191ed43e3fb78536c0bb87a3
Reviewed-on: https://chromium-review.googlesource.com/721022
Reviewed-by: Tommi <tommi@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#509040}
<iframe> 'sandbox' tokens are ASCII case-insensitive
Per https://html.spec.whatwg.org/multipage/#attr-iframe-sandbox, tokens
are ASCII case-sensitive.

Bug: 627682
Change-Id: I06784fc40e5561846cd5d6073614b67a5f4e7509
Reviewed-on: https://chromium-review.googlesource.com/718209
Reviewed-by: Mike West <mkwst@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#509023}
Rename ImageLoader::GetImage() to GetContent()
This better reflects what it returns, avoiding some confusion.
Also take this opportunity to rename ImageLoader::image_ to
Also tidy up some code by putting the ImageResourceContent in a local
variable in some cases where it is used repeatedly.

ImageLoader: :image_content_ and similarly for local variables in
Change-Id: Idb8db822b1467b006a04ffd690df1f551ff3b7e9
Reviewed-on: https://chromium-review.googlesource.com/719098
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Reviewed-by: Hiroshige Hayashizaki <hiroshige@chromium.org>
Reviewed-by: Kouhei Ueno <kouhei@chromium.org>
Cr-Commit-Position: refs/heads/master@{#509019}
Fix jumbo build.
TBR=bratell@opera.com, cblume@google.com, wkorman@chromium.org

Bug: 745732
Change-Id: I04e2723d7da10a9021291e59d8edeeec87ee22e9
Reviewed-on: https://chromium-review.googlesource.com/720813
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#509011}
Jumbo for blink/platform unit_tests (-9 CPU minutes)
This adds support for jumbo compilation (merging cc files into larger
translation units for faster compilations) in blink's platform
unit tests.

It shaves 9 CPU minutes from the compilation time which is roughly half
of the remaining time needed to compile blink/platform.

Bug: 761475
Change-Id: Iaafdd9a4b00951a6274582a8e90707e7d3ee7028
Reviewed-on: https://chromium-review.googlesource.com/718203
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#508947}
Organize all ClearSessionOnlyOrigins functions the same
There are 4 different ClearSessionsOnlyOrigins functions in
content/browser and 2 of them collided in jumbo build experiments.

This makes all 4 members of their logical class:

Two of them (AppCache and IndexedDB) had to move for that to be

Bug: 746953
Change-Id: I9c8931b909fc78292e892dcff07d213abde2d8d1
Reviewed-on: https://chromium-review.googlesource.com/718753
Reviewed-by: Avi Drissman <avi@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#508935}
Support jumbo builds in platform/wtf (-2 CPU minutes)
Support jumbo builds in platform/wtf for 2 CPU less effort when using
use_jumbo_build=true. This is about 0.3% of the remaining compilation
effort so don't expect any large change from this commit.

Bug: 761475
Change-Id: Ie3c4b6a4a23783b36a2e333abff457509a4534d3
Reviewed-on: https://chromium-review.googlesource.com/678954
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#508874}
Jumbo for Blink core/editing unit_tests (-8.5 CPU minutes)
Final cleanup of parts of Blink core that had not been jumbified.
Some of the tests in core/editing are very similar so they have
been given custom namespaces.

Bug: 745732
Change-Id: I4db280458053cb31461247345cc2613b38eae884
Reviewed-on: https://chromium-review.googlesource.com/718207
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#508791}
Replace CanvasImageSource::Source{Width,Height} with ElementSize
The ShapeDetector is the sole user of the SourceWidth() and SourceHeight()
methods on the CanvasImageSource.
For the current uses (and hopefully future uses) these should be identical
to the ElementSize() method on the same interface, so use that instead,
and remove the SourceWidth() and SourceHeight() implementations.

Change-Id: Ib4506d567b6f703688ab31873df0a8d23f9ac773
Reviewed-on: https://chromium-review.googlesource.com/716679
Reviewed-by: Miguel Casas <mcasas@chromium.org>
Reviewed-by: Justin Novosad <junov@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#508779}
Removed "using namespace" in BidiResolver.h
If this code uses "using namespace WTF::Unicode" there can be a
conflict for kLeftToRight which also exists in the Mac SDK (in
AVLTree.h). "using namespace" is also not allowed by the coding
standard, and in this case blocks a patch to jumbo compile platform
unit tests.

Bug: 761475
Change-Id: I363dd452adb4ae7ddf7586c9f98a8869f4958c4f
Reviewed-on: https://chromium-review.googlesource.com/718701
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#508776}
Giving some g_factories objects more distinct names
In jumbo builds cc files are compiled together and then multiple
objects all named g_factory causes compilation errors. An easy
fix is to use more distinct names since that is good for other
reasons as well.

Bug: 746953
Change-Id: If91d9ec90f64c18083f60e0647ddebe86dbf42e9
Reviewed-on: https://chromium-review.googlesource.com/719006
Commit-Queue: Daniel Bratell <bratell@opera.com>
Commit-Queue: Avi Drissman <avi@chromium.org>
Reviewed-by: Avi Drissman <avi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#508752}
Remove unused member LevelDBDatabase::lru_max_size_
Jumbo builds (builds where many cc files have been merged and
are compiled together) notices some more unused code than normal
builds and protested (warned) that LevelDBDatabase::lru_max_size_
was unused.

Simple fix: remove it.

Bug: 746953
Change-Id: Iaf58d87c4b962f671350984deaff0825b35e3ad8
Reviewed-on: https://chromium-review.googlesource.com/718857
Commit-Queue: Joshua Bell <jsbell@chromium.org>
Reviewed-by: Joshua Bell <jsbell@chromium.org>
Cr-Commit-Position: refs/heads/master@{#508743}
Remove test that has been disabled since April 2013
StringOperatorsText.cpp tried to measure how many copies a string
concatenation does but has been disabled since April 2013 and was
ultimately broken September 2014. This patch removes it because it
uses a macro in a way that is incompatibile with jumbo.

Bug: 761475
Change-Id: If224b7a7dac8660b1f50c2814deffcd2d664c0fe
Reviewed-on: https://chromium-review.googlesource.com/718703
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#508704}
Fix typo in <meta charset> - uft-8 -> utf-8
Change-Id: I69bca984bba263d003b7a23a95d62b3055c69fa5
Reviewed-on: https://chromium-review.googlesource.com/718676
Reviewed-by: Daniel Bratell <bratell@opera.com>
Reviewed-by: Mike West <mkwst@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#508693}
Use a singleton invalidation set for self invalidations.
We used to create separate invalidation set instances for every single
invalidation set which just contains InvalidatesSelf(). That is, every
simple selector which only appears in the rightmost compound selector:

.a {}
#b:hover {}
#parent > .c {}

The invalidation sets for ".a", "#b", ".c", and ":hover" above are all
the same with only InvalidatesSelf() set.

Instead we can use a singleton invalidation set which is shared for all
such invalidation sets. If we later add more features to the set, we
replace the singleton with a new DescendantInvalidationSet instance
with InvalidatesSelf() set and add new features to that set.

This reduces memory use for invalidation sets from ~1MB to ~256kB on
facebook.com (see measurements in 773880).

Bug: 773880
Change-Id: I1018cea1f51628f1f940c3722cc2b48a3164a777
Reviewed-on: https://chromium-review.googlesource.com/713859
Reviewed-by: Eric Willigers <ericwilligers@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#508692}
[LayoutNG] Able to paint line boxes established by direct multicol children.
The legacy layout write-back code for inline layout used to place the
RootInlineBox objects on the multicol container block. But everything has to be
under the flow thread (an anonymous child of the multicol container).

A few new tests pass, and some other tests regressed, mainly because lines are
now visible, but we still don't fragment them. It's been wrong all along, just

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: Iec5bf74056d961935de45ae027076a79c703ed5b
Reviewed-on: https://chromium-review.googlesource.com/716877
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#508686}
Giving some g_factory objects more distinct names
In jumbo builds cc files are compiled together and then multiple
objects all named g_factory causes compilation errors. An easy
fix is to use more distinct names since that is good for other
reasons as well.

Bug: 746953
Change-Id: Ie6c221225721e230e8b973ab30c4907bc3713836
Reviewed-on: https://chromium-review.googlesource.com/716496
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Avi Drissman <avi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#508663}
Handle small/zero pixel densities correctly for img.naturalWidth/Height
ImageResourceContent::ImageSize has some special logic for clamping
image dimension that end up as "zero" (LayoutUnits) to one after having
been scaled by the multiplier it is passed.
This "correction" means that for images with a small/zero pixel density,
we'll end up returning 1 even when the density corrected dimension is
(integral) 0.

To handle this, pass 1 as the multiplier to avoid the dimension clamping
and perform the pixel scaling "manually".
While doing this also move the pixel density correction code to
HTMLImageElement, and get rid of the code from ImageResourceContent,
since it only used for <img> naturalWidth/naturalHeight.
This makes ImageResourceContent::SizeType only have a single value, so
remove the enumeration and the argument.

Bug: 773272, 773284
Change-Id: Ie4a907d6cb7f262c876a5010bb7dd6a92af1cb9a
Reviewed-on: https://chromium-review.googlesource.com/708815
Reviewed-by: Philip Rogers <pdr@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#508646}
Add include guards to content headers missing include guards
Headers without include guards can not be included more than once
and in jumbo builds there might easily be more than one include
of the same header.

Bug: 746953
Change-Id: I8c19cc0764b5c91dd1aa276ad1f17719b0a70bca
Reviewed-on: https://chromium-review.googlesource.com/716476
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#508637}
Change mojo module from "mojo" to "ui.mojom" because of conflicts
Having the mojo module be "mojo" means that code appear inside the
C++ namespace "mojo" which then can collide with other code.

This happened while preparing for jumbo compiling mojo code and
caused compilation errors in jumbo because of a mojo::blink
namespace colliding with the ::blink namespace.

Since there already was an ui.mojom.TextInputType from ime, this changes
the code to merge the two TextInputType types.

Bug: 771153
Change-Id: Ic88ed6932a2d64f35ffb7661eedde09dc4619691
Reviewed-on: https://chromium-review.googlesource.com/704581
Reviewed-by: Scott Violet <sky@chromium.org>
Reviewed-by: Sadrul Chowdhury <sadrul@chromium.org>
Reviewed-by: Yuzhu Shen <yzshen@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Ken Rockot <rockot@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#508634}
[LayoutNG] Prevent >=1px clamping of columns from stretching the container.
Move the clamping code to only affect the fragmentainer block size in the
constraint space. It's needed here to ensure content progression, but it
shouldn't affect anything else.

The bug was that if height was auto and there was no non-zero height content
inside, the multicol container would still become 1px tall, which was way too
much if there was nothing to contain.

Added four unit tests. Only the two using balancing used to fail. The two
without balancing are there for coverage.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I590c42dee67b83ec8db724f0ea298f0b4dacb5b0
Reviewed-on: https://chromium-review.googlesource.com/716499
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#508510}
Add LayoutTests/fragmentation/ to blink_css_fragmentation_tests watchlist.
Also remove myself. Need to keep the empty list of watchers, or presubmit
checks will fail.

Change-Id: If5be8690ee7242a2c5366cecae148c4f871b6e6f
Reviewed-on: https://chromium-review.googlesource.com/717156
Reviewed-by: Aleks Totic <atotic@chromium.org>
Commit-Queue: Aleks Totic <atotic@chromium.org>
Cr-Commit-Position: refs/heads/master@{#508476}
Remove unused using statement in legacy_router_impl.cc
Noticed because Time is also a macro in X11.

Change-Id: I827617492e82b62eeaf668e24470b5c199718171
Reviewed-on: https://chromium-review.googlesource.com/716482
Reviewed-by: Timothy Dresser <tdresser@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#508466}
Box-less VTTCues needn't be removed from their region
If the timeline was active and had a cue that was attached to a region,
but the cue was invisible, VTTCue::RemoveDisplayTree would still attempt
to remove the cue's box from the region when its end time was reached,
resulting in a crash.

Make the entire VTTCue::RemoveDisplayTree gated on the existance of a
cue box.

Bug: 772508
Change-Id: Ie27fe76ed37c3cb9e21a1c2943d70c9cbac6647a
Reviewed-on: https://chromium-review.googlesource.com/707136
Reviewed-by: Philip Jägenstedt <foolip@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#508457}
Give g_controllers more distinct names in content tracing
The two different g_controllers clashed when I tried a
jumbo build in content/browser. This renames them with more
distinct names.

Bug: 746953
Change-Id: I06daeb3e2f129c093dadbe88a1bd972bfcf436b3
Reviewed-on: https://chromium-review.googlesource.com/716677
Reviewed-by: Primiano Tucci <primiano@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#508437}
[LayoutNG] Calculate overflow on multicol containers.
This gives us correct scrollbars, more or less.

Call UpdateLegacyMultiColumnFlowThread() a tad earlier, before calculating
overflow on the multicol container. It's the column set child that provides
overflow, so make sure that's calculated before calculating it on the parent.

That fixes two tests, but breaks two other tests. They break because of the
refs, which use absolutely positioned objects to cause a scrollbar (but that
doesn't seem to work in NG). But the actual tests now show scrollbars (which is

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I06a848a63c545559b67003f923208a65fd4f054b
Reviewed-on: https://chromium-review.googlesource.com/715598
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#508408}
Limit the maximum paint fragment count further.
Hopefully fixes a flaky test that tends to time out.

Bug: 763809
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I57ad04a4bfd26cb5e8e59786bc83e72052e60099
Reviewed-on: https://chromium-review.googlesource.com/716137
Reviewed-by: Chris Harrelson <chrishtr@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#508389}
Improve SVGInlineTextBox::CalculateBoundaries accuracy
Make said method compute and return a FloatRect (which is then converted
to a LayoutRect in SVGRootInlineBox::LayoutInlineBoxes), as well as
using a float for the baseline.
This should make for more compact, hopefully faster, code (due to less
FloatRect -> LayoutRect and LayoutUnit -> float transitions.) Using a
float for baseline will also yield a small improvement in accuracy, and
is consistent with similar calculations.

Bug: 757436
Change-Id: I8295a2d44f20476f1e234261f8a05fb175484d86
Reviewed-on: https://chromium-review.googlesource.com/708994
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Reviewed-by: Philip Rogers <pdr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#508372}
Undef MAYBE* macros for jumbo builds.
In jumbo builds source files are merged and macros leak between
cc files. The easiest way to avoid that is to undef them after use.

This fixes a compilation problem with the MAYBE() macro which was
defined in two different tests.

R=fs@opera.com, mstensho@opera.com

Bug: 713137
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: Ie06359ad1fd1f432ccf666ca12cbd824216283fc
Reviewed-on: https://chromium-review.googlesource.com/716216
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#508352}
Fix jumbo build.

Bug: 713137
Change-Id: I77d45dc11495dd15740b0189556fce07b6f39d6e
Reviewed-on: https://chromium-review.googlesource.com/715996
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Daniel Bratell <bratell@opera.com>
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#508309}
[LayoutNG] Don't round down when calculating balanced column height.
We need to take some extra care to make sure that the LayoutUnit we return,
multiplied with the number of columns, isn't ever so slightly less than the
content we are to put into the columns. Make it ever so slightly larger instead.
Example: If used column-count is 3 and the content we are going to fit is 100px
tall, we used to calculate a column height of 33.328125px. Now we'll return
33.34375px, which is larger than 33.333333333px, so that the content will
actually fit inside 3 columns, instead of 4.

Otherwise we'd get an overflow column with practically no content, and possibly
an unwanted scrollbar (when we add support for that).

Similar code in ColumnBalancer::ContentRun::ColumnLogicalHeight() for legacy

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I40c9b3004817223487a055ff533c2ad050454b51
Reviewed-on: https://chromium-review.googlesource.com/713416
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#508174}
[LayoutNG] UpdateAfterLayout() on flow threads, column sets, spanner placeholders.
This is just for good measure. I noticed that the PaintLayer established by a
flow thread had zero size, which can't be good. Not that this seemed to cause
any trouble, but still...

The UpdateAfterLayout() override in LayoutBlock now needs to be public, which
seems like a better idea than up-casting to LayoutBox when calling it.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I8512d36a7fa8f0f68f2e95eb3c42e254a47b0727
Reviewed-on: https://chromium-review.googlesource.com/712035
Reviewed-by: Emil A Eklund <eae@chromium.org>
Commit-Queue: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#508140}
[LayoutNG] Enable inline children special code for flow threads.
PlaceChildrenInLayoutBox() has special code for inline child fragments, to
basically skip them, unless we find floats. This wasn't executed for multicol.
This caused DCHECK failures and incorrect layout.

A few new tests now pass. One regresses, but that's because the test expected a
float to be at block offset 0, which it happened to be, since we didn't even
attempt to place it. Now we place it. We place it incorrectly, but at least we
place it. :)

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: Ifee30438885c267f9d6c271a0db2f5c0f191fad6
Reviewed-on: https://chromium-review.googlesource.com/713858
Reviewed-by: Emil A Eklund <eae@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#508126}
[LayoutNG] Add NGPageLayoutAlgorithm.
This one is used when overflow-y is -webkit-paged-x or -webkit-paged-y.

Such declarations will trigger creation of LayoutPagedFlowThread in legacy
layout, very similar to LayoutMultiColumnFlowThread for multicol. The main goal
here is to produce a correct fragment structure (anonymous fragments for pages),
so that we don't get confused when writing them back to legacy layout. I got
some test regressions when trying to clean up some code, so I need to land this
first. Apart from that, I haven't made a huge effort to make it lay out

It may be that this algorithm can also be used for printing, but we'll see.

One text autosizing test has started to fail, for some reason, but it seems that
it has started to fail similarly to constrained-and-overflow-scroll-ancestor.html,
so maybe it's a good sign. :)

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I5e9b15f353376c4508952dab80cf347e35bb7b27
Reviewed-on: https://chromium-review.googlesource.com/712635
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#508041}
Member IconLoader::icon_size_ is unused on Android
The member icon_size_ in IconLoader is unused on Android. Unused members
sometimes, and specifically in this case, cause warnings in jumbo builds
which breaks the build.

This patch removes the unused member if compiling for Android.

Change-Id: Ie9934cc5e0643a25bbc1c8055e08eab138cf33cb
Reviewed-on: https://chromium-review.googlesource.com/703655
Reviewed-by: Jochen Eisinger <jochen@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#507947}
Simplify image size handling in ImageDocument
Move the static CachedImageSize(...) helper to the ImageDocument itself,
renaming it to ImageSize() and using |image_element_| as implicit input.
Simplify expression previously involving CachedImageSize to use the
ImageSize() method.

Change other users of ImageResourceContent::ImageSize to use the new
method instead. (Passing a zoom multiplier is redundant if all you want
to check is if the dimensions are empty.)

Simplify ImageDocument::Scale() by eliminating the "page zoom" factor,
which is part of both the numerator and denominator and hence cancel
out. This removes that last user of the PageZoomFactor(...) helper
function, so it can be removed.

Bug: 773272
Change-Id: Iaaa4a39879b9770a68ad95c045747581eeaa0a00
Reviewed-on: https://chromium-review.googlesource.com/709216
Reviewed-by: Philip Rogers <pdr@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#507796}
Renamed g_factory in src/chrome/browser/extensions
This is a preparatory patch for jumbo[1] in src/chrome.
The chrome code is now, with Blink jumbified, the single largest time
consumer during compilations. chrome/browser/extensions needs
about 30 CPU minutes to compile on a reference machine and that
should be about 5-10 times faster with jumbo.

[1] https://chromium.googlesource.com/chromium/src/+/master/docs/jumbo.md

Bug: 746957
Change-Id: I696dd1da7ca97e1773e4b0f2ab0714ab6a50021a
Reviewed-on: https://chromium-review.googlesource.com/708674
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Devlin <rdevlin.cronin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#507750}
Add include guards for client_surface_embedder.h
Found when experimenting with jumbo builds. Missing include guards
and multiple inclusion does not work well.

Bug: 773275
Change-Id: Ibc327c1c969f15a1dd417bba075eda8aa19953c2
Reviewed-on: https://chromium-review.googlesource.com/708759
Reviewed-by: Sadrul Chowdhury <sadrul@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#507729}
Remove duplicate helper class DestructCounter
There is already a DestructCounter in WTFTestHelpers.h. Having two
complicates jumbo builds and since they are identical, this one
can just be removed.

Bug: 745732
Change-Id: Ieca99932ff66f90d06b3fa8e21fa5b51da0d2f5c
Reviewed-on: https://chromium-review.googlesource.com/708743
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#507675}
Make sure that the border width isn't larger than the border box.
The border box is subject to pixel snapping, but the border width is
rounded.  If the border box snaps down and the border width rounds up,
overpainting can occur.  The border widths are now clamped to the
corresponding border box dimension to prevent this.  This behavior
is in line with Edge.


Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I622d721579a0aad8109900268ca88d5cd85dd11e
Reviewed-on: https://chromium-review.googlesource.com/695109
Commit-Queue: Karl Anders Øygard <karlo@opera.com>
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#507644}
Eliminate some unnecessary includes in WebKit/public/
Mostly about reducing the need for <algorithm>, which is heavy, but removed
some other includes as well.

Bug: 766315
Change-Id: Id92c08e96566dfe5c780f6a101dbfdeb43aa4ac3
Reviewed-on: https://chromium-review.googlesource.com/693236
Reviewed-by: Pavel Feldman <pfeldman@chromium.org>
Reviewed-by: Philip Rogers <pdr@chromium.org>
Reviewed-by: Evan Stade <estade@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#507523}
Add include guards to udp_socket_resource_constants.h
Missing include guards on
ppapi/proxy/udp_socket_resource_constants.h caused issues with
jumbo compilation experiments.

Change-Id: Idad3ef224327ce6b0db9f27366992b28ab8a7d65
Reviewed-on: https://chromium-review.googlesource.com/707248
Reviewed-by: Antoine Labour <piman@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#507469}
Support jumbo for webkit_unit_tests (-2.5 CPU minutes)
This makes webkit_unit_tests support jumbo compilation. In CPU effort
that reduces the reference build time by 2.5 CPU minutes (about 0.3%
of the total build time)

This landed once already as
https://chromium-review.googlesource.com/677449 but broke Android
testing. This has a fix for that problem (splitting test correctly
into test + source_set)

Bug: 713137
Change-Id: I81a42f51e80f02c1874bc5171774d6d292c78a62
Reviewed-on: https://chromium-review.googlesource.com/707137
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Reviewed-by: Dirk Pranke <dpranke@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#507468}
[LayoutNG] Copy back the actual column height to legacy layout.
Don't use the content height of the multicol container. The columns may have
been shortened due to balancing.

I expected this to make some of the old layout tests pass. Only one did, and
that one wasn't really a relevant or illustrating one. Most of the existing
test probably depend on line box fragmentation working (which still doesn't
work at all in NG), and that could explain why no relevant tests started to
pass. Added a new and straight-to-the-point test that uses a simple block.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: Iab5fbbaab9491b430ab9eba1b6ea9ce0d3b0f4ec
Reviewed-on: https://chromium-review.googlesource.com/704837
Commit-Queue: Emil A Eklund <eae@chromium.org>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#507425}
Support jumbo for mojo generated code (-42 CPU minutes)
Mojo generates a lot of code that is expensive to compile and
compiling them through jumbo saves roughly 80-90% of that effort,
which is 42 CPU minutes on the reference machine (surprising that 
mojo code needs that long to compile).

42 CPU minutes is -7% of the current "fastest" compilation, or
-4.5% of current master use_jumbo_build=true. The wall clock effect
will be similar for a 4c/8t machine but smaller the more cores
the computer have.

This patch includes a change to jumbo.gni to handle targets 
with no sources, and streamlines targets with only one file, 
because both happen through the mojo template.

Bug: 771153
Change-Id: Ia11a709711600f1b6eedd098bf47c1df2239a7a5
Reviewed-on: https://chromium-review.googlesource.com/697664
Reviewed-by: Bruce Dawson <brucedawson@chromium.org>
Reviewed-by: Dirk Pranke <dpranke@chromium.org>
Reviewed-by: Ken Rockot <rockot@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#507393}
Remove core/exported jumbo_excluded_source that is no longer needed
Because of an abundance of ToElement WebSearchableFormData was excluded
from jumbo. ToElement<ListedElement> was renamed so this exclude is no
longer needed.

Bug: 713137
Change-Id: I255f6ac5df213f62e5d1f6c2c3ea6b0e96540448
Reviewed-on: https://chromium-review.googlesource.com/704696
Reviewed-by: Jeremy Roman <jbroman@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#507358}
Simplify setting of 'nonce' in SVGElement::InsertedInto
No need to use one hasAttribute() and two getAttribute() for something
that only needs one getAttribute(). (No synchronization required in this
case, so the 'fast' version can be used.)

Change-Id: I8b85ea56900fba73cf31b5a8f60cfdac280bd069
Reviewed-on: https://chromium-review.googlesource.com/704857
Reviewed-by: Mike West <mkwst@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#507307}
[LayoutNG] Framework and initial support for column balancing.
For now, just figure out how tall the content inside the multicol container is,
and divide by the number of columns, and make sure that the result doesn't
overflow the multicol container (by examining height and max-height (or width
and max-width if that's what's at the end of your favorite block axis)).

Previously we just used 42px if the column block size was unspecified, so this
is a slight improvement, as can be seen by the increased number of passing
layout tests. However, there are also some regressions because of this, because
it turned out that 42px was in some cases a better number than what we produce
now. We need to detect unbreakable content by traversing the fragment tree to
improve on this.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I980695a38c7bcaf09793869b1ca3f1e4d1451d37
Reviewed-on: https://chromium-review.googlesource.com/704640
Reviewed-by: Emil A Eklund <eae@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#507283}
Qualify the blink namespace in mojo so that mojo::blink is not used
There is a mojo::blink namespace generated from
ui/platform_window/mojo/text_input_state.mojom and if that one is
visible then the string "blink" will be resolved to the wrong
namespace inside namespace mojo.

This fixes android jumbo compilation (only android generates
blink bindings from the mojom file mentioned above).

Bug: 771153
Change-Id: I923e3bebe4fac3e02fe27c60b4472275f9613df8
Reviewed-on: https://chromium-review.googlesource.com/703654
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#507070}
Fix for jumbo base scripts, don't double filter sources
If someone has managed to get a normally filtered file into
sources we need to not accidentally remove it again. This
problem triggered in net where android targets wanted to use
Linux files.

Bug: 772146
Change-Id: Ibca410c78c5a59e9f49c1d0e302204b598df25ca
Reviewed-on: https://chromium-review.googlesource.com/703694
Reviewed-by: Bruce Dawson <brucedawson@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#507004}
Support jumbo for webkit_unit_tests (-2.5 CPU minutes)
This makes webkit_unit_tests support jumbo compilation. In CPU effort
that reduces the reference build time by 2.5 CPU minutes (about 0.3%
of the total build time)

Bug: 713137
Change-Id: I358ff81769e5fb0ebf91cd1264713c547fd3e47e
Reviewed-on: https://chromium-review.googlesource.com/677449
Reviewed-by: Dirk Pranke <dpranke@chromium.org>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#506867}
Don't update fragment anchor during DOM operations.
We tried to update the fragment anchor position immediately when all
script blocking sheets are removed. As part of that update we do a
style and layout update. The last script blocking sheet may be
removed as part of removing a style element from the DOM. Updating
style and layout in the middle of a DOM operation is not safe.

Instead, update the fragment anchor position during the next safe
lifecycle update. The crash was caused by Document still pointing to a
documentElement being removed while updating the style and layout tree,
but its parent pointer had already been set to null.

Bug: 771088
Change-Id: Iaaaeece23d795c2e41d31b9fb97fc795eb2b8305
Reviewed-on: https://chromium-review.googlesource.com/698305
Commit-Queue: Rune Lillesveen <rune@opera.com>
Reviewed-by: Steve Kobes <skobes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#506854}
[LayoutNG] Ignore scrollbars in anonymous constraint spaces.
We already did ignore borders and padding, but forgot about scrollbars.

This was quite catastrophic for multicol, if a horizontal scrollbar was
actually taller than the columns. We'd end up pushing the scrollbar in front of
us (in block direction), column after column. Infinite loop (until OOM).

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I5c3038406ccf30eeb0e107b31c6bb783c7089ffd
Reviewed-on: https://chromium-review.googlesource.com/702299
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#506844}
Removing "using namespace" in a global scope in password_manager
"using namespace" in a global scope breaks jumbo builds (and
are not allowed in the code style guide). This patch replaces them
with explicit namespaces.

Bug: 771153
Change-Id: If9c4de9e115c5531708cf06f64cb0088daca2d57
Reviewed-on: https://chromium-review.googlesource.com/697370
Reviewed-by: Vadym Doroshenko <dvadym@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#506837}
Removing strange sources from mojo typemap
This patch removes a random sources block that was ignored
in normal builds but triggered an assert in jumbo builds.

This also changes the OWNERS file according to presubmit instructions.

Bug: 771153
Change-Id: Ic32f92db25b1b4bd6e2087b95785b4934a94e120
Reviewed-on: https://chromium-review.googlesource.com/702258
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Steven Bennetts <stevenjb@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#506801}
Avoid using classes named Function in blink
There is a Function template in blink's wtf library and it is easy
to get mixed up in it if you try to use the symbol "Function"
elsewhere in blink.

In particular you can easily get an include of
platform/wtf/Functional.h (which exports WTF::Function to the global
scope) in jumbo builds:

Bug: 745732
Change-Id: Ic4f4a02e1aacc5819ce824b94e284bfc6caa964d
Reviewed-on: https://chromium-review.googlesource.com/702236
Reviewed-by: Yuki Shiino <yukishiino@chromium.org>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#506686}
[LayoutNG] Implement NGColumnLayoutAlgorithm::ComputeMinMaxSize().
Intrinsic sizing for multicol used to be defined in the intrinsic and
extrinsic sizing CSS spec, but it must have been removed at some point.

All we have for inspiration now is the implementation in the legacy engine,
which landed with https://chromiumcodereview.appspot.com/23763002 back in 2013.
That, and common sense. :) The principles of min/max width calculation are,
after all, quite simple:

1. Figure out how much width we need to prevent avoidable overflow (min)
2. Figure out how much width we need to prevent avoidable soft wrapping (max)

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: Id465449369d0227883e08228ce33346eb5b5cdba
Reviewed-on: https://chromium-review.googlesource.com/700460
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#506680}
Avoid "unused member" warnings by removing unused member.
The profile_ member in TriggeredProfileResetter is not read by 
any code so let us remove it for platforms where it is not used.
This warning appeared in jumbo build
experiments (jumbo builds give the compiler more information which
triggers warnings that were not there before).

Bug: 770625
Change-Id: I4fd04d3147b01d0cf853b34c01ac7aa03fbd7d14
Reviewed-on: https://chromium-review.googlesource.com/695102
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Dominic Battré <battre@chromium.org>
Cr-Commit-Position: refs/heads/master@{#506679}
Generate projects for Visual Studio 2017 by default
GN should generate projects for Visual Studio 2017 by default since this
is the default compiler now.

Bug: 683729
Change-Id: I560983cf4c228a785e0ed2648567c7e0f07584d4
Reviewed-on: https://chromium-review.googlesource.com/700258
Reviewed-by: Dirk Pranke <dpranke@chromium.org>
Reviewed-by: Bruce Dawson <brucedawson@chromium.org>
Commit-Queue: Tomasz Moniuszko <tmoniuszko@opera.com>
Cr-Commit-Position: refs/heads/master@{#506665}
Removed unused member in device/bluetooth
Nobody used the member connection_monitor_started and that warning
broke jumbo build experiments (it notices such things more than
non-jumbo builds).

Change-Id: I77055474ecdbb1eaab8fbb925ea9b7a739a6f273
Reviewed-on: https://chromium-review.googlesource.com/700268
Commit-Queue: Daniel Bratell <bratell@opera.com>
Commit-Queue: Vincent Scheib <scheib@chromium.org>
Reviewed-by: Vincent Scheib <scheib@chromium.org>
Cr-Commit-Position: refs/heads/master@{#506429}
Inhibit scroll-to-anchor for embedded SVGs
Fragment anchors are often used for "spriting purposes" when using SVG
documents, so scrolling the referenced element into view could seemingly
randomly scroll the top-level document (if it was same-origin with the
sprite sheet.) This is usually not an expected or wanted behavior.
Inhibit scrolling for all the embedding cases. (It's uncertain whether
this ought to affect <iframe>s or not, but let's include those too for
now. For simplicity.)

While here, also remove the dependency on SVGDocumentExtension for the
trivial operation of getting the root element.

Bug: 493802
Change-Id: I9942093331b2c53ba94ad83cfbe0a3b8b4ca6cbe
Reviewed-on: https://chromium-review.googlesource.com/700638
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#506411}
Removing "using namespace" in a global scope in autofill
"using namespace" in a global scope breaks jumbo builds (and
are not allowed in the code style guide). This patch replaces them
with explicit namespaces.

Bug: 771153
Change-Id: Ic45f740d8081b9f4e531b30ac05f6578a404de11
Reviewed-on: https://chromium-review.googlesource.com/697371
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Sebastien Seguin-Gagnon <sebsg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#506367}
Removing "using namespace" in a global scope in translate
"using namespace" in a global scope breaks jumbo builds (and
are not allowed in the code style guide). This patch replaces them
with explicit namespaces.

Bug: 771153
Change-Id: Iea234b0e02636b198af20b0f2b6ad53e735ebf7b
Reviewed-on: https://chromium-review.googlesource.com/697704
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Hajime Hoshi <hajimehoshi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#506361}
Remove random string in mojo typemap file
There was a random sources block in image_filter.typemap which
broke jumbo since it has asserts that sources contains nothing
random. Normal builds ignored the sources entry since it didn't
match any toolchain.

Bug: 771153
Change-Id: I4b801ae350807701740946ca5ea5984c4086b61e
Reviewed-on: https://chromium-review.googlesource.com/697207
Reviewed-by: Stephen White <senorblanco@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#506350}
Avoid inclusion of <algorithm> from popular header files when possible.
It's heavy to compile.

Bug: 766315
Change-Id: I0182fe1b9c8e8e6bd2024cb71bab7e3fcc501246
Reviewed-on: https://chromium-review.googlesource.com/695106
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Cr-Commit-Position: refs/heads/master@{#506106}
Revert behavior for non-scaling-stroke transform
https://codereview.chromium.org/2711503002 fixed getScreenCTM by
including the actual CTM from the element to the "screen" ("host"
coordinate space.) This of course also included the scale factor
contributed by any ancestor transforms. Including these transforms
however made evaluation of the non-scaling-stroke transform (the host
transform) unreliable, because of how that transform is "baked" into
the display list. (So if the host transform is sampled when it is
degenerate, all rasterization using that display list will produce
"weird" results - which will remain until an new display list is
Revert the computation of the non-scaling-stroke transform back
something akin to what it was previously until we can figure out a
better way to deal with this situation.

Bug: 747708
Change-Id: I8fdd19829c44f88d4d5e0bbbe4dec3ff2bee52a4
Reviewed-on: https://chromium-review.googlesource.com/697809
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#506099}
Adding missing include guard to test header file.
Found when experimenting with jumbo compilation for mojo
generated files.

Change-Id: I202a22fa9aa24df3f928992b67e3ad35321e7e1c
Reviewed-on: https://chromium-review.googlesource.com/693254
Reviewed-by: Ken Rockot <rockot@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#506085}
Jumbo for blink/platform/scheduler and its unit tests (-3.5 CPU minutes)
This adds support for jumbo to the scheduler code, including its
unittest. The total effect is about 3.5 CPU minutes which is about
30% of the remaining blink/platform time, or 0.5% of the total
content_shell+chrome+blink_tests compilation time.

Change-Id: I79f7b4d73e7a585a712744dbe7209f02bb043830
Reviewed-on: https://chromium-review.googlesource.com/693097
Reviewed-by: Alexander Timin <altimin@chromium.org>
Reviewed-by: Sami Kyöstilä <skyostil@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#505982}
Move shared test classes in wtf tests to a shared file
HashSet, HashMap and ListHashSet, Vector and Deque tests have the
same test classes: MoveOnly, CountCopy, DestructCounter, WrappedInt,
LivenessCounter, ...

This both deduplicates the code and prevents symbol collisions in
jumbo builds.

Bug: 745732
Change-Id: I19874a89ba4933260f3c80727ac5ba1160831ad1
Reviewed-on: https://chromium-review.googlesource.com/678934
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#505614}
Adding namespaces to prevent AppendToVectorTestTask clashes
Several test classes in scheduler have implemented
AppendToVectorTestTask and this patch gives those unique namespaces
to prevent them from clashing in jumbo builds.

Bug: 745732
Change-Id: I265c5507cbcc0f934f5904cc62033443442163f9
Reviewed-on: https://chromium-review.googlesource.com/692018
Reviewed-by: Alexander Timin <altimin@chromium.org>
Reviewed-by: Sami Kyöstilä <skyostil@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#505364}
Adding namespaces to prevent NopTask collisions in jumbo builds
Several test classes in scheduler have implemented NopTask and
this patch uses unique namespaces to prevent them from clashing
in jumbo builds.

Bug: 745732
Change-Id: I8c3ecc80ab0696fbe4634d330dfe1e942dbcfa8b
Reviewed-on: https://chromium-review.googlesource.com/690345
Reviewed-by: Alexander Timin <altimin@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#505338}
Adding namespaces to prevent name collisions in jumbo builds
Several test classes in scheduler use the same name. As an alternative
to renaming them, or some of them, use unique namespaces. This
solves problems with MockTask and MockObserver.

Bug: 745732
Change-Id: I56da313dbbfb116d28d45ccd5f261cdfbf48d188
Reviewed-on: https://chromium-review.googlesource.com/687674
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Alexander Timin <altimin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#505147}
Fix pre-order traversal in LayoutBoxModelObject::HasNonEmptyLayoutSize
Passing 'this' (which |object| will be in this case) to
LayoutObject::NextInPreOrder, will turn it into a non-obvious way of
saying FirstChild.
Pass |root| instead of |object| to make the traversal actually pre-

Bug: 769459
Change-Id: I6bc4c487faab053d02bc16826862234f15e2376e
Reviewed-on: https://chromium-review.googlesource.com/690254
Reviewed-by: Philip Rogers <pdr@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#505099}
LayoutBoxModelObject::HasNonEmptyLayoutSize ignores SVG model objects
Extend the DCHECK to also cover SVG layout objects. The IsBox() check
should cover the SVG root, and if it is zero-sized any descendant should
not be considered to have a "non-empty" layout size. Overflow is
disregarded (as it seems to be in general in this method.)

Bug: 769459
Change-Id: Iea15b86032094a15608b614f5baa1057c5d6a686
Reviewed-on: https://chromium-review.googlesource.com/689997
Reviewed-by: Philip Rogers <pdr@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#505072}
Less forcing of column flow flex children layout.
If the logical height of a child is intrinsic, we only need to lay it out if
there's a chance that the logical width of the flex container changed.
Otherwise nothing's going to change in there.

We do this by checking for kForceLayout, so that we don't risk descending into
deep subtrees just because some flex item sibling changed, for instance.


Bug: 766633
Change-Id: I29337a176592779f07a37570fef8c85b1b4f6d99
Reviewed-on: https://chromium-review.googlesource.com/680214
Reviewed-by: Stefan Zager <szager@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#504924}
Don't include UseCounter.h from CSSParserContext.h and others.
public/platform/web_feature.mojom-blink.h is heavy.
Avoid it when possible.

Break the WebFeature defintion out of UseCounter.h and also make that
enum forward-declarable. There are quite a few translation units that
don't need to deal with UseCounter, just because they need to name a
web feature. And then there are also some places where we just need to
have the type forward-declared, such as in CSSParserContext.h

This reduces the number translation units that depend on UseCounter.h
by about 1601 compilation units, which is ~56%.

It seems that most translation units that include UseCounter.h really
need the WebFeature definition as well, so at least for now, it will
be included there.

Bug: 766315
Change-Id: I1cc0ee843373eb407c424ecd3c03c0f9080770bd
Reviewed-on: https://chromium-review.googlesource.com/669020
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Rouslan Solomakhin <rouslan@chromium.org>
Reviewed-by: Hiroki Nakagawa <nhiroki@chromium.org>
Reviewed-by: Rune Lillesveen <rune@opera.com>
Reviewed-by: David Bokan <bokan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#504840}
Properly await promises in inert-tests.
I did not find a way to await each forEach or map in inert-inlines, so
I fell back on a plain old for-loop.

Bug: 726218, 769347
Change-Id: I196ff128ce95319b7ca297254745aec842ef6cff
Reviewed-on: https://chromium-review.googlesource.com/686814
Commit-Queue: Rune Lillesveen <rune@opera.com>
Reviewed-by: Jeremy Roman <jbroman@chromium.org>
Reviewed-by: Dave Tapuska <dtapuska@chromium.org>
Cr-Commit-Position: refs/heads/master@{#504733}
Changing files for some bindings testing helpers
This is a followup to commit e303b7d8 after same followup
review comments.

Bug: 745732
Change-Id: I768e2fb98d6084e5ea7d24edbe74916cd4bc09c4
Reviewed-on: https://chromium-review.googlesource.com/686896
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#504673}
Adding namespaces to prevent name collisions in jumbo builds
Several test classes in scheduler use the same name. As an alternative
to renaming them, or some of them, use unique namespaces.

Bug: 745732
Change-Id: I00bbbc957c58c04013a77b89b2b0cdf7c0c6321d
Reviewed-on: https://chromium-review.googlesource.com/682055
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Sami Kyöstilä <skyostil@chromium.org>
Reviewed-by: Alexander Timin <altimin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#504655}
Missing return of Promise in automated pointerevents test.
Bug: 754222
Change-Id: Ic0c906535182da26f13246248e34023a4a896b8e
Reviewed-on: https://chromium-review.googlesource.com/686821
Reviewed-by: Dave Tapuska <dtapuska@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#504649}
Reland "Store new ComputedStyle object if style did not change."
This is a reland of https://chromium-review.googlesource.com/681755

The comparison of ComputedStyle does not take additional flags into
account. For instance, the AffectedBy* flags used for updating pseudo
classes like :hover. We used to call SetStyleInternal, but this was
removed because the previous comment said it was because of style
sharing which is now removed.

The display:contents case (768406) never worked because the code path
for StoreNonLayoutObjectComputedStyle() was always skipped when
computed style compared to be equal.


Bug: 768406, 767832, 768790
Change-Id: Iee509e43e5fcc29d04944655d3d966ea61cc2adf
Reviewed-on: https://chromium-review.googlesource.com/684186
Commit-Queue: Rune Lillesveen <rune@opera.com>
Reviewed-by: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#504561}
Performance test with deeply nested column flex containers.
In this teste there's a (rather) deeply nested subtree of column-flow flex
containers. The root of this subtree is itself a flex item in a row-flow
container. It has a sibling item whose child changes width, without affecting
the flexed size of the deeply nested subtree. This shouldn't require the
subtree to be re-laid out, but it currently does get re-laid out, thanks to the
fix for bug 752078.

Bug: 766633
Change-Id: I3d76736730f18082a299907f7b2a543d2b087ba8
Reviewed-on: https://chromium-review.googlesource.com/680216
Reviewed-by: Emil A Eklund <eae@chromium.org>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#504458}
Adding missing include guard to ui/views/animation/ink_drop_stub.h
Change-Id: Id3e0139beeca89444f4100de67c21da579c49047
Reviewed-on: https://chromium-review.googlesource.com/684739
Reviewed-by: Mohsen Izadi <mohsen@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#504388}
Deduplicate some testing helper functions in v8 bindings test.
V8ScriptValueSerializerTest and V8ScriptValueSerializerTestForModules
had a few methods in common. This patch makes those methods be
shared, or in the case or non-identical methods, renamed to not collide
in jumbo builds.

Bug: 745732
Change-Id: Ia51d9f8dba1910902465dc4cffc193031b47ee3f
Reviewed-on: https://chromium-review.googlesource.com/677446
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#504379}
Remove a small header by including it in ToV8ForCore.h
A bit of cleanup after a recent commit that added an unnecessary header

Bug: 745732
Change-Id: I1a90f22c9301ab60a09ea2fec9020c5da431460b
Reviewed-on: https://chromium-review.googlesource.com/684177
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#504361}
Update counters after style recalc, not layout.
We used to update counters on every layout as long as there was at
least on LayoutCounter in the rendered document. Also, the update was
triggered by marking the changed element for layout.

We need to update counters when we add/remove LayoutCounter, or when
computed counter directives change on rendered elements during style
recalc. We update counters immediately after style recalc and layout
tree rebuild in Document::UpdateStyle().

Bug: 768357
Change-Id: I32693fefaa7bdb74cf959ef5ead4256d2ec2d0da
Reviewed-on: https://chromium-review.googlesource.com/678676
Commit-Queue: Emil A Eklund <eae@chromium.org>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#504310}
Deduplicate a testing template in v8 bindings test.
The two implementations of ToV8 for testing collided in jumbo builds
so to avoid having to exclude some files in bindings tests from jumbo
this patch moves the template to a shared header.

Bug: 745732
Change-Id: Iaa7cf7e19d987e7a048fc606eafaedb49606959a
Reviewed-on: https://chromium-review.googlesource.com/677394
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Reviewed-by: Jens Widell <jl@opera.com>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#504304}
Store new ComputedStyle object if style did not change.
The comparison of ComputedStyle does not take additional flags into
account. For instance, the AffectedBy* flags used for updating pseudo
classes like :hover. We used to call SetStyleInternal, but this was
removed because the previous comment said it was because of style
sharing which is now removed.

The display:contents case (768406) never worked because the code path
for StoreNonLayoutObjectComputedStyle() was always skipped when
computed style compared to be equal.

Bug: 768406, 767832
Change-Id: Iac4708e3cd3a6451d99c1bb2bb69efb74289b8eb
Reviewed-on: https://chromium-review.googlesource.com/681755
Reviewed-by: nainar <nainar@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#504285}
[LayoutNG] Prevent negative column widths.
If the width of the column gaps is larger than the available content width of
the multicol container, clamp negative column widths to zero. This fixes
DCHECK failures, since the engine doesn't fancy negative widths that much.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I934b28dfe494ccdffb53c0693d1056ff87fed82e
Reviewed-on: https://chromium-review.googlesource.com/666896
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#504134}
Revert "Add jumbo_test template"
This reverts commit 21f6df2a9bbb8c7bc60186c2ae1792b8361e1c5d.

Reason for revert: This added a dependency between //build and //testing that complicates life for //v8. Need time to evaluate what the best fix it.

Original change's description:
> Add jumbo_test template
> We already support jumbo_source_set, jumbo_component and
> jumbo_static_library so this is just another common template with a
> non-default configuration.
> This is needed in some form for jumbo in blink unittests.
> Bug: 761475
> Change-Id: I443fedb4a41c43cf21102e2a2f8ced937961665c
> Reviewed-on: https://chromium-review.googlesource.com/671369
> Reviewed-by: Bruce Dawson <brucedawson@chromium.org>
> Commit-Queue: Daniel Bratell <bratell@opera.com>
> Cr-Commit-Position: refs/heads/master@{#503193}


# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: 761475
Change-Id: Ie58618afa061107ccb28e29cda6e1c50e91629ba
Reviewed-on: https://chromium-review.googlesource.com/681716
Reviewed-by: Daniel Bratell <bratell@opera.com>
Reviewed-by: Michael Achenbach <machenbach@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#504075}
Add missing file extension (.h) in core/layout/BUILD.gn
TextDecorationOffsetBase.h was missing the .h qualification. This broke
Jumbo builds, but is incorrect in general.

Change-Id: Ife16025f01c1fc51ce6620b77140b1485a8fe994
Reviewed-on: https://chromium-review.googlesource.com/681334
Reviewed-by: Daniel Bratell <bratell@opera.com>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#504033}
[LayoutNG] Re-enable CollapsingMarginsCase6 unit test.
Don't know when it started to pass, but at least it passes now. :)

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: If9d7be1de73310d17996fa85c50a6a18f6169b10
Reviewed-on: https://chromium-review.googlesource.com/664806
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#503977}
Include less from Element.h
Bug: 766315
Change-Id: I16b36710368f24b76c7598f9956e3cd80c95f4fc
Reviewed-on: https://chromium-review.googlesource.com/668443
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Kent Tamura <tkent@chromium.org>
Reviewed-by: Dominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#503941}
Ignore <input> and <textarea>'s user-select styling
The CSS spec says that user-select does "selective inheritance",
see https://drafts.csswg.org/css-ui-4/#propdef-user-select.

<input> and <textarea> are two elements that are affected
by this. These elements should not inherit user-select from
parent elements.

Fixed problem:
<input|textarea readonly|disabled> could inherit
"user-select: none".

This regressed because
removed input|textarea's default user-select styling.

Make all text controls always selectable. This is done in

Interoperability note:
<input readonly style="user-select: none"
value="Chrome 61 cannot select this.">. This CL fixes
this by ensuring that all text fields (i.e also readonly fields)
are always selectable (no matter user-select styling).

In other words, <input> and <input readonly> now behave in
the same way (both always allow selections) which aligns
us with Firefox and Edge.

BUG=761433, 764316

Change-Id: I89fc94a2a04caf3a87b12a9071081dafd48a8727
Reviewed-on: https://chromium-review.googlesource.com/663217
Reviewed-by: Yoshifumi Inoue <yosin@chromium.org>
Reviewed-by: Kent Tamura <tkent@chromium.org>
Commit-Queue: Hugo Holgersson <hugoh@opera.com>
Cr-Commit-Position: refs/heads/master@{#503793}
Rename GarbageCollectedHolder to avoid clash
There is already a GarbageCollectedHolder class in webkit_unit_tests
so this renames the second one GarbageCollectedHolderForToV8Test 
to avoid collisions in jumbo builds.

Bug: 745732
Change-Id: Idc625d35fd3590292d93e1a3a0b685db12bd7368
Reviewed-on: https://chromium-review.googlesource.com/677397
Reviewed-by: Jens Widell <jl@opera.com>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#503753}
Allow lookup of videodecoder service to fix HW video decoding on macOS 10.13
Tha macOS sandbox has apparently changed in 10.13.  If we don't allow
lookup of the global Mach service com.apple.coremedia.videodecoder,
VTDecompressionSessionCreate() fails with
kVTVideoDecoderNotAvailableNowErr for some videos.

Bug: 767037
Change-Id: I4fee235d3808a504d57660976ef96b3a0a0f54d7
Reviewed-on: https://chromium-review.googlesource.com/677290
Commit-Queue: Robert Sesek <rsesek@chromium.org>
Reviewed-by: Robert Sesek <rsesek@chromium.org>
Cr-Commit-Position: refs/heads/master@{#503747}
offsetParent fails to consider continuations when searching for parent.
Block-level objects can have inline parents, but this triggers the
insertion of anonymous boxes and continuations, which offsetParent()
currently doesn't understand.

This change lets offsetParent() understand continuations better.
If an anonymous continuation is encountered when finding ancestors,
it will use the split inline as the ancestor, and continue searching
from there.


Change-Id: I8850f9b5dacaffaa26b5f1c414f4f351709d7088
Reviewed-on: https://chromium-review.googlesource.com/674875
Reviewed-by: Emil A Eklund <eae@chromium.org>
Commit-Queue: Karl Anders Øygard <karlo@opera.com>
Cr-Commit-Position: refs/heads/master@{#503704}
[LayoutNG] Implement NG support for the line height quirk.
This cl implements NG support for the line height quirk.  There
are some deviations from the behavior of the old layout code:

- inline boxes with margins in the inline direction will now cancel
  the quirk, previously only borders and padding caused this.  This is
  in line with Gecko and Edge.

- in the existing layout engine, if there's a line break between two
  replaced elements separated by whitespace, the whitespace at the end
  of the line is preserved, in turn causing the line height quirk to
  be cancelled.  The whitespace preservation appears to be in
  violation of CSS 2.2, 16.6.1, and does not exist in NG.

A few test cases had to be altered to accommodate these differences.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I3d8d7eaf0f2c17ef1cbd4545996c29d371aaf7c6
Reviewed-on: https://chromium-review.googlesource.com/664720
Commit-Queue: Karl Anders Øygard <karlo@opera.com>
Reviewed-by: Koji Ishii <kojii@chromium.org>
Cr-Commit-Position: refs/heads/master@{#503566}
Remove unnecessary includes from UseCounter.h
Especially v8.h is heavy.

Bug: 766315
Change-Id: I9bd71910607f829fd0f71d8de0e64d3dbc741461
Reviewed-on: https://chromium-review.googlesource.com/669019
Reviewed-by: David Bokan <bokan@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#503538}
Make sure to include traits before testing them in tests.
It's possible to check traits without including their specialization
or doing an implicit instantiation but then you get the default
values which can be wrong (or you would not have had a specialization).
In jumbo builds this is noted because first you get an implicit
instantiation and then an explicit instantiation which is a C++ error.

Fix is to make the explicit instantiation before any implicit
instantiations can happen. I do wish this error wasn't so invisible. It's
the third or fourth detected through jumbo builds.

Bug: 761475
Change-Id: Ifceb604e027ac8877764b584555007c854c74f03
Reviewed-on: https://chromium-review.googlesource.com/677383
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#503454}
Rename MockScrollableArea to be more unique
There is a MockScrollableArea defined in ScrollbarTestSuite.h so if
the compiler sees that function then you get compilation errors. That
happens in jumbo builds so to avoid this problem this patch renames
the function MockScrollableAreaForAnimatorTest which follows a pattern
used elsewhere.

Bug: 745732
Change-Id: Ia264efac21e4c358e50aa90ec666a95d32366642
Reviewed-on: https://chromium-review.googlesource.com/671424
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#503390}
Expose CSSViewportRule only if runtime flag is enabled.
Bug: 766652
Change-Id: I7e76640a397eafeba28f178fb568b3af7cdccf49
Reviewed-on: https://chromium-review.googlesource.com/674924
Reviewed-by: Rick Byers <rbyers@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#503370}
Add jumbo_test template
We already support jumbo_source_set, jumbo_component and
jumbo_static_library so this is just another common template with a
non-default configuration.

This is needed in some form for jumbo in blink unittests.

Bug: 761475
Change-Id: I443fedb4a41c43cf21102e2a2f8ced937961665c
Reviewed-on: https://chromium-review.googlesource.com/671369
Reviewed-by: Bruce Dawson <brucedawson@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#503193}
Don't include Document.h from CSSParserContext.h
Around 330 fewer dependencies on Document.h.

Bug: 766315
Change-Id: I48cb525c176b27463f06090bad125bb2025b5759
Reviewed-on: https://chromium-review.googlesource.com/668444
Reviewed-by: Rune Lillesveen <rune@opera.com>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Mounir Lamouri <mlamouri@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#503117}
Include less from platform/geometry/ headers.
In particular, avoid <algorithm>.

Specifying the default template parameters to Vector in Forward.h
means that we can no longer specify them along with the template

Bug: 766315
Change-Id: I62eeaf5da82f59431d68011f904a1fcaf9f93f81
Reviewed-on: https://chromium-review.googlesource.com/668367
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Cr-Commit-Position: refs/heads/master@{#502920}
Use differently named test classes in blink/platform tests
Both PODFreeListArenaTest and PODArenaTest had local test classes
naemd TestClass and those collided in jumbo build. This patch
changes the colliding names to be more unique inside blink/platform.

Bug: 745732
Change-Id: I8b31e62125c0e0eb84103d91f3e28dd9decd3f5f
Reviewed-on: https://chromium-review.googlesource.com/671265
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#502812}
Add prefix to test class names to make them more unique.
Jumbo didn't like that there were two TestExtraData classes in
platform/exported tests so this adds appropriate prefixes to them.

Bug: 745732
Change-Id: I9286225bf37dd39342e28aec8ddcca3da6504063
Reviewed-on: https://chromium-review.googlesource.com/671270
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#502811}
Support jumbo in blink/platform/loader (-2.5 CPU minutes)
Supporting jumbo in blink/platform/loader saves about 2.5 CPU minutes
of effort which is about 0.3% of the remaining build time. Not much
but it's only a few added characters.

Bug: 761475
Change-Id: I3ca17ff6fefb04c43dd9571aea5e749bfe86b81d
Reviewed-on: https://chromium-review.googlesource.com/671231
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#502809}
Rename InsertionAndDeletionTest to avoid collisions with other tests
There are InsertionAndDeletionTest functions in both PODIntervalTreeTest
and PODRedBlackTreeTest and in jumbo builds they collide. This patch
renames one of them TreeInsertionAndDeletionTest.

Bug: 745732
Change-Id: Ieba300f4532695060250cb70f88f53713158ccf1
Reviewed-on: https://chromium-review.googlesource.com/671228
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#502808}
Deduplicate some oilpan test utility functions.
Several utility functions existed in both HeapTest.cpp and
HeapCompactTest.cpp. This patch moves them to a shared file so that they
don't collide in jumbo builds. Also, less duplicate code is better.

Bug: 761475
Change-Id: Ia5a4bb0b205646564ccec7e87150283837028191
Reviewed-on: https://chromium-review.googlesource.com/671267
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#502806}
Re-attach whitespace children when removing DOM nodes.
When the display type changes for an element in the DOM tree, the
WhitespaceAttacher would re-attach whitespace siblings appropriately
when traversing the re-attached element.

When a DOM node is removed from the tree, there will be no layout tree
rebuild. Or, at least, the removed node will not be encountered by the
traversal to trigger a re-attachment of any following whitespace nodes.

In order to fix that, introduce a hash set which contains elements
which had one of their layout tree children removed since the last
layout tree update. In the next UpdateStyle mark these elements for
layout tree rebuild and let the WhitespaceAttacher check if any of its
whitespace children needs to be re-attached.

Bug: 763291, 762833, 364817
Change-Id: I4d1b3df10d07f549abfea17df0184beca0623ef7
Reviewed-on: https://chromium-review.googlesource.com/661957
Commit-Queue: Rune Lillesveen <rune@opera.com>
Reviewed-by: nainar <nainar@chromium.org>
Cr-Commit-Position: refs/heads/master@{#502803}
Include less from ContainerNode.h
Bug: 766315
Change-Id: I791ae5a12f0602c95194a60659e29e572dce5c8a
Reviewed-on: https://chromium-review.googlesource.com/668441
Reviewed-by: Kent Tamura <tkent@chromium.org>
Commit-Queue: Kent Tamura <tkent@chromium.org>
Cr-Commit-Position: refs/heads/master@{#502744}
Use differently named test classes in blink/platform tests
Both PaintChunkerTest and PaintControllerTest have test classes named
TestDisplayItem. These collide in jumbo builds so this patch renames
one of them TestDisplayItemGeneric to be unique inside blink/platform.

Bug: 745732
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I3cdd3b21f5523ef54fe3fbe29f4f7dc0607d7874
Reviewed-on: https://chromium-review.googlesource.com/671423
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#502675}
Fix header include guard for MockImageDecoder.h
The include guard was missing the actual define.

Bug: 745732
Change-Id: Id6435955c9011295b9583d29df6f45d008f0e192
Reviewed-on: https://chromium-review.googlesource.com/671233
Commit-Queue: Daniel Bratell <bratell@opera.com>
Commit-Queue: Stephen Chenney <schenney@chromium.org>
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Cr-Commit-Position: refs/heads/master@{#502602}
Rename EXPECT_RECT_EQ to be more unique and accurate
There is an EXPECT_RECT_EQ in //cc/test/geometry_test_utils.h which is
used by other tests. Since that causes problems in jumbo builds and
since it is not an equality comparison, this renames the macro
EXPECT_FLOAT_RECT_NEAR (following a pattern used elsewhere).

Bug: 745732
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I2720f72dbf0b8dac603c19d312109fb83fdfa313
Reviewed-on: https://chromium-review.googlesource.com/671230
Commit-Queue: Daniel Bratell <bratell@opera.com>
Commit-Queue: Stephen Chenney <schenney@chromium.org>
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Cr-Commit-Position: refs/heads/master@{#502601}
Reuse existing ValueToString<float> in test
There is a ValueToString<float> in FloatPolygon to be used by
POD tests so PODIntervalTreeTres doesn't need to define its own.

Noticed in a jumbo build where the two copies collided.

Bug: 745732
Change-Id: I7dd3cd6429ac9c1357dad8c7e3cf98140a58f9d3
Reviewed-on: https://chromium-review.googlesource.com/671266
Commit-Queue: Daniel Bratell <bratell@opera.com>
Commit-Queue: Stephen Chenney <schenney@chromium.org>
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Cr-Commit-Position: refs/heads/master@{#502598}
Include less from Node.h
Node.h is a popular header, so this affects compilation times.

Change-Id: Iea71e63f518885aa7c1552470f75b78a1e29a4cf
Reviewed-on: https://chromium-review.googlesource.com/668370
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Reviewed-by: Kent Tamura <tkent@chromium.org>
Commit-Queue: Kent Tamura <tkent@chromium.org>
Cr-Commit-Position: refs/heads/master@{#502493}
CHR-6375: Fixed crash on fallback from ANGLE to SwiftShader.
During fallback from ANGLE to SwiftShader it is required to unload
ANGLE libraries, otherwise SwiftShader will fail to load its own
libGLESv2 library.

Fixed ANGLE platform reset.

Fixed memory leak on X11 by fixing order in ShutdownGL.

Leak was occuring during fallback from libGL to software GL implementation
because ShutdownGL was cleaning GL implementation info before unloading
GL and therefore libGL was unloaded with known issue crbug.com/250813

Previous attempt with memory leak:

Reverted in:

Bug: 760063, 761930
Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: Ibea80f560aa50ba48cbff6f39a664095db38daaf
Reviewed-on: https://chromium-review.googlesource.com/668357
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Antoine Labour <piman@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Cr-Commit-Position: refs/heads/master@{#502409}
[LayoutNG] Border and padding on multicol containers.
Code was missing both on the column fragment positioning side, and on
the legacy write-back side.

Moved the call to UpdateLegacyMultiColumnFlowThread() further
down. Apart from making sense (nice to have written back the size of
the multicol container before updating the flow thread), this became
necessary now, because otherwise ValidateColumnSets() would nuke the
logical width of the flow thread, now that the flow thread gets its
logical width set earlier.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I1f6906f488b0251d4a00117e66ae6e06649568d6
Reviewed-on: https://chromium-review.googlesource.com/668372
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#502406}
Enable Skia's SkImageGenerator implementation
The SkImageGenerator_none.cpp implementation of
SkImageGenerator::MakeFromEncodedImpl always produce empty output.

Bug: 758459
Change-Id: I0745e28c7c9f4aa09efbe0f0de7c88faab87f868
Reviewed-on: https://chromium-review.googlesource.com/668408
Reviewed-by: Leon Scroggins <scroggo@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#502401}
Propagate GlobalPaintFlags to EmbeddedContentView::Paint
The global paint flags - like the kGlobalPaintFlattenCompositingLayers
flag - were lost when descending into frames for painting. This would
cause composited layers to not be painted.
Add a GlobalPaintFlags argument to EmbeddedContentView::Paint, and pass
the flags carried by PaintInfo to it, and propagate as needed.

Bug: 765099
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I8c824dd12e7caa4c65cfd0bf0c3ab8de69ddfcfb
Reviewed-on: https://chromium-review.googlesource.com/667160
Reviewed-by: Chris Harrelson <chrishtr@chromium.org>
Reviewed-by: Philip Rogers <pdr@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#502328}
[LayoutNG] Unbreakable content in block fragmentation.
This introduces limited support break-inside:avoid on in-flow block-level
elements. After layout, if we discover that we need to insert a break in front
a node, in order to honor break-inside:avoid, drop the fragment and retry at
the start of the next fragmentainer.

The constraint spaces now need to know the full fragmentainer block size, in
addition to what they have available. It's only when the available size is less
than the full fragmentainer size, that we can break before some node. Otherwise
there'd be no progress, and we'd end up with an infinite number of empty

Since I wanted to DCHECK that we only break before the first fragment of some
node, and therefore needed IsFirstFragment(), I moved that function along with
its friends from the anonymous namespace of ng_block_node.cc to a new
ng_fragmentation_utils.h file. There's some uncertainty as to how to treat
non-box fragments here, but we can figure that out later.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I0ad419177d174fdc787061206ee1abd86deb8943
Reviewed-on: https://chromium-review.googlesource.com/666816
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#502217}
Support jumbo in blink/platform (-20.5 CPU minutes)
Supporting jumbo in blink/platform saves about 20.5 CPU minutes on
the reference hardware.

A few files are still excluded and that is tracked in referenced bugs.


Bug: 761475
Change-Id: Ibdd1916f24c50c0ef2c62ca0b1c3b3e80643fb5d
Reviewed-on: https://chromium-review.googlesource.com/652998
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#502211}
Rebuild non-distributed children with separate WhitespaceAttacher.
We used to pass in the same WhitespaceAttacher to the pass over non-
distributed child nodes which caused DidVisitText() to mess up the
whitespace re-attachment of whitespace being the left-most node of the
distributed nodes. In particular if there was a ::before element
changing display type preceding that left-most space.

Instead, make a RebuildNonDistributedChildren() method which passes in
a separate WhitespaceAttacher.

Bug: 765090
Change-Id: I4fd3bd417d7a5d7accdcb8b6155991093ab05f50
Reviewed-on: https://chromium-review.googlesource.com/666681
Reviewed-by: nainar <nainar@chromium.org>
Reviewed-by: meade_UTC10 <meade@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#502202}
Always rebuild layout tree for shadow root when host is rebuilt.
We tried to do a light-weight search for the first in-flow or text
child of the shadow root when shadow root children didn't need a
rebuild. This was done to make the WhiteAttacher point to the correct
text node when re-attaching the ::before element.

This code did not properly handle slots and insertion points. Also,
supporting display:contents for ::after means we will have to traverse
shadow root children from its last node until we find the first in-flow
to properly attach a space inside an ::after element.

For simplicity, and correctness, walk the shadow root children using
RebuildChildrenLayoutTrees() instead.

Bug: 764686
Change-Id: Icb9f8db7172ea54bd876fd95ca722c2906b4c639
Reviewed-on: https://chromium-review.googlesource.com/667138
Reviewed-by: nainar <nainar@chromium.org>
Reviewed-by: meade_UTC10 <meade@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#502194}
Forward cflags/cflags_cc in fuzzer gn template
Forwarding more of the usual gn variables is likely less surprising
-- defines and include_dirs are already forwarded, so add cflags and
cflags_cc too so it takes less effort to suppress a stray warning when
writing a fuzzer test case.

Change-Id: I5a490e4f2520871bdf649fc3ea3b75bbea0653df
Reviewed-on: https://chromium-review.googlesource.com/663860
Reviewed-by: Oliver Chang <ochang@chromium.org>
Reviewed-by: Max Moroz <mmoroz@chromium.org>
Commit-Queue: Tomasz Sniatowski <tsniatowski@opera.com>
Cr-Commit-Position: refs/heads/master@{#501926}
[LayoutNG] Update multicol FlagExpectations for LayoutNG
Two multicol tests time out flakily, but if they don't, they pass.


Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I63f2434629f833c6d52f0a4672faa1a3be1fa8a3
Reviewed-on: https://chromium-review.googlesource.com/666619
Reviewed-by: Koji Ishii <kojii@chromium.org>
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#501923}
LayoutNG] Calculate available fragmentainer space correctly.
When processing children, we forgot to subtract the BFC offset. We just used
the value returned from the constraint space's FragmentainerSpaceAvailable()
directly. Renamed that method in both the constraint space and the builder to
FragmentainerSpaceAtBfcStart(), to make it clear that this value doesn't
necessarily return the space available to the block currently being laid out.

Added FragmentainerSpaceAvailable() to the block algorithm instead, and also
moved IsOutOfSpace() into the class.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: If1232a1a33dd4c7655339eed2a88104b98f06bc0
Reviewed-on: https://chromium-review.googlesource.com/664805
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#501750}
Rework normalization in LayoutSVGInlineText
When performing (whitespace) normalization in an OriginalText override,
we miss normalization when the layout object has its text content
Perform the normalization in the SetTextInternal override instead to
cover the text-content-update case as well.

Bug: 645597
Change-Id: Id65cbbe75dbcc636f4cde38b8bb8887d05caf1d7
Reviewed-on: https://chromium-review.googlesource.com/664812
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#501678}
[LayoutNG] Detect breaks that occur at the exact start of blocks.
Such breaks used to go unnoticed and cause misery and assorted unpleasantries.
Upgraded test expectations. Added a unit test.

As long as we haven't both got an in-flow child that broke AND exceeded
available fragmentainer space, we need to continue and lay out its siblings. A
block of zero height at a fragmentainer boundary actually belongs in the former
fragmentainer, not the latter. A consequence of this change is that even
non-zero height blocks that start at a fragmentainer boundary gets a
zero-height fragment in the former fragmentainer, before it continues in the
next fragmentainer. We may want to avoid this, but I'm not sure what's more
correct yet (or if it matters at all).

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I50e862d8c0dc787a47b799e2e639e5ca7ba57158
Reviewed-on: https://chromium-review.googlesource.com/663141
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#501588}
[LayoutNG] Prevent breaks from escaping the containing fragmentation context.
The call sites that call NGFragmentBuilder::AddChild() also need to explicitly
propagate breaks to their container, if that's what they want. The column
layout algoirithm *doesn't* want this.

Bug: 757767
Change-Id: I203c045fc85a65303dfe4c0cdad20eb60e64fba2
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Reviewed-on: https://chromium-review.googlesource.com/663859
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#501444}
Fix indentation in SVGImage::DataChanged
Change-Id: If895e92065d23e3da4f5d659c114abf024038b38
Reviewed-on: https://chromium-review.googlesource.com/663537
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#501319}
Make the forward declaration of ShapeResultSpacing correct.
The lack of PLATFORM_EXPORT on the forward declaration made the compiler
generate non-exported template instantiations which later caused linker
errors when those methods were missing.

R=drott@chromium.org, mstensho@opera.com

Bug: 764255
Change-Id: I2e03b924185dd7787d8129aa4c3c93716341cdbd
Reviewed-on: https://chromium-review.googlesource.com/663377
Reviewed-by: Dominik Röttsches <drott@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#501260}
Removed unused member variable in OpenTypeCapsSupport
Jumbo builds (where the compiler has more information) noticed that
run_ is unused and emitted a warning.


Change-Id: I4a975375cfc772e77dd5e9692c5cdc982a8453c1
Reviewed-on: https://chromium-review.googlesource.com/663179
Commit-Queue: Daniel Bratell <bratell@opera.com>
Commit-Queue: Dominik Röttsches <drott@chromium.org>
Reviewed-by: Dominik Röttsches <drott@chromium.org>
Cr-Commit-Position: refs/heads/master@{#501256}
[LayoutNG] Update test expectations to get rid of *some* of the unexpected passes.
All probably related to a recent change to TextIterator [1], which made legacy
layout dump text identically to what NG does.

[1] https://chromium-review.googlesource.com/c/chromium/src/+/653665


Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Bug: 758816
Change-Id: Idda7617e54d254d76bf170cb59c8cd7c9ddd16d6
Reviewed-on: https://chromium-review.googlesource.com/663037
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Koji Ishii <kojii@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#501234}
Avoid implicit conversion to CGRect and CGSize.
Implicit conversion to CGRect and CGSize can create extra conversion paths
(if known) between various rect/size types. Such extra conversion paths
can make the compiler fail to compile because of ambiguity.

Since conversions between CGRect and CGSize and internal types are lossy
both ways (float <-> int), it's best to avoid them anyway except when
they are really needed so this patch makes the cast operators explicit.

Short term, the implicit conversions break jumbo builds since the compiler
there knows "too much" and gets confused.

Bug: 761475
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I7b29fba20d4dd836015a594081f4e6256bd42732
Reviewed-on: https://chromium-review.googlesource.com/657645
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#500928}
Adjustments for LayoutNG in LayoutBlockFlow line layout.
LayoutNG ignores LayoutMultiColumnFlowThread objects, so that the DOM
children of a multicol container become actual layout children of said
multicol container (on the NG side), without any intervening flow
thread block. However, the flow thread is still created even in NG (to
be able to paint and hit-test using the legacy layout structure), so
when NG invokes the legacy engine to lay out lines, we need to be able
to stop walking the ancestry when reaching the flow thread.

This fixes a bunch of crashing tests. They will now either pass or
fail (without crashing) instead.

Bug: 757767
Change-Id: I55693c34aefe53b47ceb7d7490059cc1182e5ff8
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Reviewed-on: https://chromium-review.googlesource.com/660297
Reviewed-by: Koji Ishii <kojii@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#500925}
Unduplicated test helper function compare_markers.
The 3 copies of compare_markers collided in jumbo builds.

Bug: 745732
Change-Id: I4363201af5e78dfa5ee59148c48d89feeeaa1a80
Reviewed-on: https://chromium-review.googlesource.com/653277
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#500918}
PlzNavigate: Fix multiple extra_headers in LoadUrlWithParams
NavigationControllerImpl operates on LoadURLParams, which state
"Extra headers for this load, separated by \n.", and on
NavigationEntryImpl, which state "Extra headers (separated by \r\n)
to send during the request". However, there is no conversion
from one form to the other, instead the extra headers are passed

This is not an issue when PlzNavigate is not enabled, because there
are more conversions on the way to and from the renderer, and things
end up working anyway. However, the shorter path of PlzNavigate
makes code further down choke on improper data when more than one
header is passed.

Fix by converting LF to CRLF when moving from LoadURLParams to
NavigationEntryImpl, and by adding a second header to a bunch of tests
that only sent one extra_header, thus not showing the problem.


Cq-Include-Trybots: master.tryserver.chromium.linux:linux_site_isolation
Change-Id: I3e492520c8bd059b0d00107b38cfdf6daa8d96f2
Reviewed-on: https://chromium-review.googlesource.com/659577
Commit-Queue: Tomasz Sniatowski <tsniatowski@opera.com>
Reviewed-by: Camille Lamy <clamy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#500905}
Fix jumbo build.
A static IsPositionValidFor() got added to two .cpp files almost at the same
time. Made them non-static and declared them in Position.h


Change-Id: I50d7006b20ddba2b7f58906eb167107cb38933e6
Reviewed-on: https://chromium-review.googlesource.com/659658
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#500887}
Avoid global "using namespace std"
Importing all of namespaces into the global level causes problems with
jumbo builds (and also coding style). This patch removes a few
using namespace std;
from WTF.

Bug: 761475
Change-Id: Ibdb073db243c960058d06433666f24c6880f40a8
Reviewed-on: https://chromium-review.googlesource.com/657642
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#500877}
Renamed IsValid in blink/platform/network unit tests
Both ParsedContentDispositionTest and ParsedContentTypeTest used a local
helper function named IsValid. That is normally no big deal
but in jumbo builds they can be compiled in the same translation unit
and then the function will collide. This patch gives the functions
unique names so that no tests have to be excluded from jumbo.

Bug: 745732
Change-Id: Icc591553e54062eb189d8c7df243191c3f75f42a
Reviewed-on: https://chromium-review.googlesource.com/657840
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#500860}
Reevaluate SVGImageElement 'href' when moving to a new document
This aligns the behavior of SVGImageElement to that of HTMLImageElement
for when the element is moved to a new document.

Bug: 720310
Change-Id: I2d78778a40de874fe45b710a0f284ded6cc8b84b
Reviewed-on: https://chromium-review.googlesource.com/657384
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#500655}
[LayoutNG] Ignore block-start margin in subsequent fragments.
The block-start margin only matters in the first fragmentainer where the node
occurs. This used to trigger DCHECK failures.

The new unit test used to DCHECK-fail (but would pass with DCHECKs disabled).

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I8ee47f0d08a989f121c5bd8f18806398a4d6d837
Reviewed-on: https://chromium-review.googlesource.com/657182
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#500614}
Include ComputedStyle.h from fewer header files.
Brings down the number of translation units that depend on ComputedStyle.h by
268 (from around 1250).

A recent CL, https://chromium-review.googlesource.com/648536 increased the
number of dependent translation units by 222, so this CL should cancel out the
build time slowdown introduced by that CL.

Change-Id: Ic3eef583dd9679c5e5f94d99b5366003f96b89d8
Reviewed-on: https://chromium-review.googlesource.com/656117
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: meade_UTC10 <meade@chromium.org>
Reviewed-by: Eric Willigers <ericwilligers@chromium.org>
Reviewed-by: Jia Meng <jiameng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#500553}
Skip CharCategory alias since it was only used once
The CharCategory alias caused issues with jumbo builds. Too many
different interpretations of the symbol CharCategory triggered
compilation error. Since this alias really doesn't add any value,
it's easy to just drop it.

Bug: 761475
Change-Id: I8473fda6104a520f1464a88d49ba73599ea5fc62
Reviewed-on: https://chromium-review.googlesource.com/654838
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#500548}
Use Previous/NextSibling instead of Slow*Child().
The former methods should be faster.

Change-Id: I1fb5ae5eeaea78b561cffbe6a78594af0f7a75b6
Reviewed-on: https://chromium-review.googlesource.com/655078
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#500402}
Remove unused state from TextTrackLoader
Merge kIdle and kLoading using the name of the latter.

Bug: 466083
Change-Id: I51041fac66a18df6ff0801bcc9606c1f1c04126d
Reviewed-on: https://chromium-review.googlesource.com/652473
Reviewed-by: Philip Jägenstedt <foolip@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#500382}
Remove unused "using base::Time"
When experimenting with jumbo builds in content this Time conflicts
with other things, and since it's unused it's easy to just remove it.

Change-Id: I853e2da58963c875158b750839a706e49edad93e
Reviewed-on: https://chromium-review.googlesource.com/653161
Reviewed-by: Avi Drissman <avi@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#500370}
[LayoutNG] Customized fragment tree dumping, for use in unit tests.
Add a dump method to NGPhysicalFragment that returns a string, in addition to
the one we already have, that dumps to stderr. Add flags, so that callers can
pick exactly what to dump.

Change most of the column layout algorithm tests to compare a fragment dump
tree string to an expectation string. Maintaining and following what was going
on inside those tests was at the brink of what's humanly possible.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I3151509d0cfb189c2330557bf25ef16b1a78f478
Reviewed-on: https://chromium-review.googlesource.com/652467
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: Aleks Totic <atotic@chromium.org>
Cr-Commit-Position: refs/heads/master@{#500353}
Avoid the name UnicodeRange in tests since it already exists
There is a platform/fonts type UnicodeRange so creating a function
with the same name causes confusion in jumbo builds where both
the type and the function will be known to the compiler at the same


Bug: 745732
Change-Id: Id8c9ebfb7289cd546979638814b3e67b169f6671
Reviewed-on: https://chromium-review.googlesource.com/655457
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#500320}
Deduplicate a couple of hash function in platform/fonts.
In jumbo builds the two implementations of AddToHash and
AddFloatToHash collided. The AddToHash implementations were identical
while AddFloatToHash were slightly different, but it seems better for
everyone to merge them to a single set of functions.

Bug: 761475
Change-Id: I547b432970a4f4f03e2fea7af1e7bfdf400de149
Reviewed-on: https://chromium-review.googlesource.com/651418
Reviewed-by: Dominik Röttsches <drott@chromium.org>
Reviewed-by: Nico Weber <thakis@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#500297}
Removing global "using namespace" in platform Mac code
Importing namespaces into the global namespace causes issues in jumbo
builds. This patch removes some that were not even used and replace
some with explicit namespaces.

Bug: 761475
Change-Id: Iaec529e8a4ea8a8572575fb546263946282d1c59
Reviewed-on: https://chromium-review.googlesource.com/654641
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#500296}
Reuse an existing WebCoreFloatToSkScalar instead of copying it
There is one WebCoreFloatToSkScalar in platform/graphics/skia and one
in platform/geometry. This patch makes platform/geometry use the one in

Bug: 761475
Change-Id: I32c938c5d3ea08d2cf3e7bfc2a0ff469006268b0
Reviewed-on: https://chromium-review.googlesource.com/653159
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#500285}
Merge two implementations of operator<<(FloatPoint3D)
There were two implementations of
TextStream& operator<<(TextStream& ts, const FloatPoint3D& p)
in filter serialization and while that is a minor issue, they caused
conflicts in jumbo builds so rather than excluding files from jumbo,
this moves the implementation to FloatPoint3D.h.

Bug: 761475
Change-Id: I11eee18d33f3eb34b50fb5849bb0e72d6a9a8089
Reviewed-on: https://chromium-review.googlesource.com/651417
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Cr-Commit-Position: refs/heads/master@{#500252}
Forward-declare TextTrack in HTMLMediaElement.h
Change-Id: I535a633cdb7c31c632b61411bad00e5918d62e6c
Reviewed-on: https://chromium-review.googlesource.com/652548
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#500243}
Empty files should not succeed in loading (as WebVTT)
Empty files will naturally not have a valid signature, so should fail
the signature check. When there's no data, the loader will not get any
DataReceived() callback, and hence not create a VTTParser. The
NotifyFinished() callback only checked for any error on the resource,
and would flag success if there were no resource error.
Check for the presence of a parser to detect the case where there's no
data and infer failure from it.

Also move the flush of the VTTParser first in NotifyFinished() since
it could, in rare cases, end up setting |state_| to kFailed.

Bug: 761969
Change-Id: If6c17d50ec968625a98490e625c5f248761efe1a
Reviewed-on: https://chromium-review.googlesource.com/650291
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Reviewed-by: Philip Jägenstedt <foolip@chromium.org>
Cr-Commit-Position: refs/heads/master@{#499925}
[LayoutNG] Skip more virtual test suites.
Test suites that aren't relevant to NG only slow down testing and increase


Change-Id: Ideb731da4441ba839a8d9c19d2fa532c8fd086d1
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Reviewed-on: https://chromium-review.googlesource.com/649655
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#499723}
NGLayoutAlgorithm::Node() doesn't need to be virtual
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: Iddc121dbcf39b0b7381ceb5485606a9a4fea9bdc
Reviewed-on: https://chromium-review.googlesource.com/649654
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#499684}
[LayoutNG] Position multicol children in the legacy flow thread.
Previously we practically skipped positioning of direct multicol children. We
did actually attempt to position direct *floated* children, but that triggered
a DCHECK failure.

Re-enable and update the remaining disabled NGColumnLayoutAlgorithm unit tests.
They were all about floats, and therefore they used to trigger DCHECK failures.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: If3b1d464501a6132254ed4c016886303f224a4f2
Reviewed-on: https://chromium-review.googlesource.com/649532
Reviewed-by: Emil A Eklund <eae@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#499675}
[LayoutNG] Comma instead of 'x' as separator between coordinates in ToString().
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I96dcb6728816c030fffda7fa67a0a90eb7d1fe5f
Reviewed-on: https://chromium-review.googlesource.com/650255
Reviewed-by: Emil A Eklund <eae@chromium.org>
Commit-Queue: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#499654}
Enable jumbo compiling for modules unit test (-13 CPU minutes)
When use_jumbo_build=true this patch should save roughly 12.5
CPU minutes on my reference machine.

Bug: 713137
Change-Id: Icaa9e691ca6212f336691755aea83ddbdbe23a18
Reviewed-on: https://chromium-review.googlesource.com/648408
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#499651}
Remove residual Skips of WPT tests with absolute path
Absolute paths should be working now.

Bug: 498120
Change-Id: I21c69e34a7f9f17122a631b3e2a154c64974042b
Reviewed-on: https://chromium-review.googlesource.com/650248
Reviewed-by: Kent Tamura <tkent@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#499599}
Put local types in the anonymous namespace to be consistent.
BytesConsumerTestUtil.cpp imports BytesConsumer::Result as blink::Result
and BlobBytesConsumerTest.cpp imports BytesConsumer::Result as
blink::{anonymous namespace}::Result and for the Windows compiler that
causes a naming conflict in jumbo builds.

This patch puts both BytesConsumer::Result in the anonymous namespace so
that the compiler won't get confused.

Bug: 745732
Change-Id: I073a36fb71109be2e7fefff34268186d03a5547b
Reviewed-on: https://chromium-review.googlesource.com/649226
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#499595}
Use code path for V1 instead of V0 without shadow trees.
The result should not be different, but this change is using the Shadow
DOM v1 code path for matching CSS rules when we don't have any Shadow
DOM v0 roots. This means we'll use the same code path as we'll use when
Shadow DOM v0 is removed.

Bug: 760405
Change-Id: I90a140db91d1282e59c037a476fef8b95b4e36cc
Reviewed-on: https://chromium-review.googlesource.com/647755
Reviewed-by: Takayoshi Kochi <kochi@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#499570}
Don't compute pseudo element style on other pseudo elements.
Nested pseudo elements are not allowed. We tried to match selectors for
scrollbar pseudo elements on ::before/::after pseudo elements. This
caused DCHECK failure in v1 shadow dom code trying to find assigned
slot for the ::before/::after pseudo. Instead, return early trying to
compute pseudo element style on pseudo elements.

Bug: 761838
Change-Id: Iaa571c96701ad9f5eb87cb93f0cfb085f42c043e
Reviewed-on: https://chromium-review.googlesource.com/649611
Reviewed-by: nainar <nainar@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#499564}
Don't request style on element when pseudo element style is null.
StyleForLayoutObject returns nullptr for ::before and ::after pseudo
elements when the pseudo element should not generate any boxes. This
caused us to incorrectly request OriginStyleForElement as a fall-back
which caused DCHECKs to trigger when trying to match rules against the

Instead, call OriginalStyleForElement as a fall-back in
CustomStyleForElement for elements which do have custom style callbacks
but don't need a specialized CustomStyleForElement.

Bug: 760405
Test: shadow-dom/crashes/css-focus-recalc.html
Change-Id: Ib7bcd50fd624f1ebcefc716533cf7098c203a2f4
Reviewed-on: https://chromium-review.googlesource.com/648984
Reviewed-by: nainar <nainar@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#499558}
CHR-6375: [Windows] Fixed crash on fallback from ANGLE to SwiftShader.
During fallback from ANGLE to SwiftShader it is required to unload
ANGLE libraries, otherwise SwiftShader will fail to load its own

Fixed ANGLE platform reset.

Bug: 760063
Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: I02280b2c1cd6c3d81087c7e2befb412bb2a89510
Reviewed-on: https://chromium-review.googlesource.com/640992
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Antoine Labour <piman@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Cr-Commit-Position: refs/heads/master@{#499529}
Avoid having two g_unique_id in blink/platform
In jumbo builds the two g_unique_id clashed so to avoid having to
exclude one of the files from jumbo builds, it's better to rename them.

With this patch they will be g_unique_media_stream_component_id and
g_unique_media_stream_descriptor_id instead. As a bonus that should help
when analyzing binaries if anyone ever encounter these symbols.

Bug: 761475
Change-Id: Ib6c7120a4ff428bceaf1197441c1d8e271b63d18
Reviewed-on: https://chromium-review.googlesource.com/648409
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#499518}
Avoid using "using namespace ..." in global scope
With jumbo (unity builds, merged translation units) a
"using namespace WTF" or "using namespace Unicode"
statement intended for just the local translation unit will affect
many other translation units which causes various issues.

There is also (with the current implementation of jumbo) a warning
about such usage that will prevent things from compiling.

Without this patch this file will have to be manually excluded from
jumbo builds and I am trying to avoid such exclusion lists for
performance and maintenance.

Bug: 761475
Change-Id: Ide7c7f90b2b2190362f279008e31dfcc31309ad7
Reviewed-on: https://chromium-review.googlesource.com/648407
Reviewed-by: Kent Tamura <tkent@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#499517}
[LayoutNG] Proper overflow legacy write-back inside multicol.
Only calculate overflow when at the last fragment. It's only then that we can
be sure that all children have been laid out. This used to trigger DCHECK
failures in legacy layout.

Also don't let a line break fool us into believing that the block fragmented
(by creating unfinished break tokens).

Re-enable and update unit test OverflowedBlock, now that overflow no longer
causes DCHECK failures in legacy layout.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I9a104c3a7392db66c251e6f8da8ea8c7e16ba357
Bug: 757767
Reviewed-on: https://chromium-review.googlesource.com/645968
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: Koji Ishii <kojii@chromium.org>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#499503}
[LayoutNG] Skip assorted virtual test suites.
They don't seem relevant for NG.


Change-Id: Id701e9773cee3737cceb46440704125b9c9178e0
Reviewed-on: https://chromium-review.googlesource.com/647760
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#499495}
Support all of HTML's character entities in WebVTT
This updates the VTTTokenizer to align with the updated WebVTT tokenizer




The old states for handling "escapes" are removed, adding new ones per
above, for invoking the HTML parser's entity matcher.
A new WEBVTT_SWITCH_TO operation is also added so that state transitions
can be performed without advancing the input position. (Matches
mechanics of the HTML parser.)

The WPT test webvtt/parsing/cue-text-parsing/tests/entities.html is
updated since it had an incorrect expected result for the "&notit;"

Old, now incorrect and/or redundant, tests for entities are removed.

Bug: 761303
Change-Id: I8ffb4fb2da7169c2ba3c84eb8c3206daabefbb30
Reviewed-on: https://chromium-review.googlesource.com/647586
Reviewed-by: Philip Jägenstedt <foolip@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#499473}
Removing unused "using namespace icu".
Having global "using namespace ..." complicates things, or prevents,
jumbo builds but this one seems completely unused anyway.

Bug: 761475
Change-Id: I592035ec4030b575acbdbcf9ca11b24217380ed5
Reviewed-on: https://chromium-review.googlesource.com/647567
Commit-Queue: Kent Tamura <tkent@chromium.org>
Reviewed-by: Kent Tamura <tkent@chromium.org>
Cr-Commit-Position: refs/heads/master@{#499433}
Add NG support for quirky bottom margins plus minor fix for top margins.
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: Ib3b5e035955c0d1379f7c206ef283934a2c31eae
Reviewed-on: https://chromium-review.googlesource.com/645988
Commit-Queue: Karl Anders Øygard <karlo@opera.com>
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#499406}
Removed svg/as-image/svg-nested.html
The test is creating a 50000 nodes deep tree which at some point causes
a stack overflow in one of the recursive methods traversing the DOM
tree. Removing test as it arbitrarily causes a stack overflow.

Bug: 760904
Change-Id: Ib1b841a51cbe383bc630ca57b3dd07c8c859cee0
Reviewed-on: https://chromium-review.googlesource.com/647536
Reviewed-by: Philip Rogers <pdr@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#499392}
Deduplicated the Determinant function in platform/geometry.
Both FloatQuad and FloatPolygon wants to calculate the
determinant/cross product between two FontSize objects and they each
had a copy of such a function. In Jumbo builds those two identical symbols

Bug: 761475
Change-Id: I216b0ec2bf6fdb450ef81315692396fc395c3d6e
Reviewed-on: https://chromium-review.googlesource.com/647847
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Cr-Commit-Position: refs/heads/master@{#499322}
Undef local CONVOLVE_ONE_SAMPLE after use.
Since other code use equally named macros we get jumbo build collision
unless they are undefined (or renamed).

Bug: 761475
Change-Id: I650fe9651a55e9fd682340f6160e2212de024f58
Reviewed-on: https://chromium-review.googlesource.com/647715
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Raymond Toy <rtoy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#499264}
Adding missing include guard on blink header
VideoFrameResourceProvider.h was missing an include guard which happened
to work in normal builds, but not in jumbo builds.

R=haraken@chromium.org, lethalantidote@chromium.org

Change-Id: I72b9c9343ce6862f26d2ae89beaf3af3b084e0ed
Reviewed-on: https://chromium-review.googlesource.com/647538
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#499206}
[LayoutNG] Update FlagExpectations for LayoutNG
Just skip virtual/outofblink-cors/


Change-Id: Iaf28ead83625b01b1017f2a3cd2029299ed61b54
Reviewed-on: https://chromium-review.googlesource.com/645952
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Aleks Totic <atotic@chromium.org>
Cr-Commit-Position: refs/heads/master@{#499180}
Rename ArrayBufferContents::AllocationKind to GetAllocationKind.
Current name clashes with the name of the enum class the function is
supposed to return. Clang does not care, but gcc fails to compile the

Bug: 760070
Change-Id: I935d91493a3fc7b289d03f776c14b6ec4f3f622a
Reviewed-on: https://chromium-review.googlesource.com/645549
Reviewed-by: Yuta Kitamura <yutak@chromium.org>
Commit-Queue: Yuta Kitamura <yutak@chromium.org>
Cr-Commit-Position: refs/heads/master@{#499171}
Add include guards to ipc message headers
The solution without include guards isn't compatible with jumbo.

Bug: 746953
Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: Iaaea9654fa2c38c40ab458678693518abe555d34
Reviewed-on: https://chromium-review.googlesource.com/580868
Reviewed-by: Antoine Labour <piman@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Reviewed-by: dsinclair <dsinclair@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#499162}
Update :in-range/:out-of-range style when input type changes.
The :in-range/:out-of-range pseudo classes only matches for steppable
input typesi. We need to schedule style invalidations for these pseudo
classes when the input changes and at least one of them is steppable.
Changing between two steppable types may also need invalidation as
min/max/value need to be reparsed and their value may not be valid or
their interpretations may be different.

Bug: 751406
Change-Id: I0dc6517ded832fdaa63f1a3bdda161dcf2b3b448
Reviewed-on: https://chromium-review.googlesource.com/646327
Reviewed-by: Kent Tamura <tkent@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#499158}
Update :indeterminate style when input type changes.
The :indeterminate pseudo class only matches for certain input types.
We need to schedule style invalidations for :indeterminate when the
input changes between certain types.

Bug: 751406
Change-Id: I4cae67ce883ec0969119f788718db8b978f9a67d
Reviewed-on: https://chromium-review.googlesource.com/646168
Reviewed-by: Kent Tamura <tkent@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#499157}
Update :checked style when input type changes.
The :checked pseudo class only matches for certain input types. We need
to schedule style invalidations for :checked when the input changes
between certain types.

Bug: 751406
Change-Id: I818b498339a643766e0c619cb6b70bfd09c6efcb
Reviewed-on: https://chromium-review.googlesource.com/645987
Reviewed-by: Kent Tamura <tkent@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#499156}
Min-width takes precedence over max-width.
This also applies to intrinsic sizing, obviously. Clamp to max-width, THEN
min-width - not the other way around.

Bug: 754263
Change-Id: Ide083d3ba591b252cd1bfa28500be3c3c2324d79
Reviewed-on: https://chromium-review.googlesource.com/645306
Commit-Queue: Emil A Eklund <eae@chromium.org>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#499024}
Make SMIL interval position calculations more resilient
When 'dur' is mutated, all dependent state is not updated at once, but
rather lazily. This means that we can get into an inconsistent state
where some timing parameters have been applied while some have not, and
code that uses - and thus realizes - the state changes will be first to
observe them. This can for instance lead to an interval position of NaN
being computed, which would wreak havoc when computing values.

For the specific case, we'd first get an 'indefinite' simple duration
and compute an interval thereafter. When 'dur' is then modified to a
finite value the simple duration will not be updated until the next
frame is computed (triggered by mutation of 'end'), leaving us with
a valid/finite simple duration but an infinite interval. (This then
results in arithmetic with Inf, yielding a NaN value for |percent|.)

Properly updating all the interval computation state on mutations is a
somewhat involved task, so paper over it for now by computing the (last)
active duration differently depending on the case we're in. While this
change is a bit of a workaround, it should be a perfectly reasonable
change on its own.

Bug: 760057
Change-Id: I1878f06db500eb1251ef2ca1cd7f10e0c8f86a00
Reviewed-on: https://chromium-review.googlesource.com/645973
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Reviewed-by: Philip Rogers <pdr@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#498911}
[LayoutNG] Skip siblings preceding the first break token.
When we resume layout in a next fragmentainer, assume that all siblings
preceding the one associated with the first break token have been finished.
Assuming the opposite - that all preceding siblings needed layout - caused
infinite loops.

<div style="columns:5; column-fill:auto; height:60px;">
    <div id="child1" style="height:100px;"></div>
    <div id="child2" style="height:100px;"></div>

After the first column, we'll have an unfinished break token for #child1, which
is what we'll resume with in the second column.
After the second column, we'll have a finished break token for #child1 and an
unfinished break token for #child2.
After the third column, we'll only have an unfinished break token for #child2,
since we skipped #child1 (it was finished).
The fourth column obviously only contains #child2. We shouldn't start at
#child1 just because it has no break token, or we'll get an infinite loop.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I845a75bb646615223f9acfcc51e2fab04b05b058
Bug: 757767
Reviewed-on: https://chromium-review.googlesource.com/639410
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#498817}
Add missing gurl.h include to sensor_permission_context.cc
Change-Id: I2988959a20acd595e046574773101b12135d0f1b
Reviewed-on: https://chromium-review.googlesource.com/640383
Reviewed-by: Raymes Khoury <raymes@chromium.org>
Commit-Queue: Tomasz Moniuszko <tmoniuszko@opera.com>
Cr-Commit-Position: refs/heads/master@{#498777}
Setup AttachContext correctly when attaching pseudo elements.
AttachContext.previous_in_flow was not set up correctly when attaching
pseudo elements. That caused incorrect whitespace attachment in some
cases. In order to do this, the AttachContext for children is set up in
Element instead of ContainerNode as ::before and ::after are attached
in Element before/after ContainerNode::AttachLayoutTree.

I have separated the creation and attachment of pseudo elements.
CreatePseudoElementIfNeeded now only creates the pseudo element.
Previously pseudo elements were sometimes attached as part of style
recalc, at which point we don't have a previous_in_flow to pass in.
This is also good for our goal of separating style recalc and layout
tree construction completely.

We still create pseudo elements when attaching a layout tree if these
pseudo elements are inside a subtree being (re-)attached. When we start
constructing ComputedStyle for elements in sub-trees being re-attached
in RecalcStyle instead of LayoutTreeBuilder, we can fully rely on
pseudo elements being generated for RecalcStyle.

The modified test expectations are actually a revert of what was
changed when landing the WhitespaceAttacher.

Bug: 759532
Change-Id: Ic9f0f61d8c78bc8df7c5e589444a54583c78d763
Reviewed-on: https://chromium-review.googlesource.com/643269
Reviewed-by: nainar <nainar@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#498767}
[LayoutNG] Update FlagExpectations for LayoutNG

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I91ac1b71748f838b922d3e93ba59aa9d17b39bff
Reviewed-on: https://chromium-review.googlesource.com/643070
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#498488}
Fix Jumbo build.
InspectorCacheStorageAgent.cpp has recently got a "using" declaration of
blink::protocol::CacheStorage::Header, and that collided with the
forward-declaration of blink::Header FetchHeaderList.h. Just remove the
forward-declaration. It looks like there's no class named Header in this
district anymore.


Change-Id: I54e5f7ff3b53a388930b1101417e0dc1fa46af2b
Reviewed-on: https://chromium-review.googlesource.com/643127
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#498439}
Don't rely on the cached 'local' flag when resolving <use> target
Since the document URL can change between a <use> 'href' is set, and the
actual element reference is resolved (looked up by id), the notion of
being "local" to the document can change during this window as well.
To avoid this, we need to re-evaluate the "is local" state before
resolving the element reference. This appears to match what other UAs
are doing (but they could/do differ in other ways.) Keep the cached
"is local" state and use where applicable to avoid the full URL compare.

Bug: 749855
Change-Id: Ibbe9b1fb7e37f86b57f775d288203fbd9b3d5f4e
Reviewed-on: https://chromium-review.googlesource.com/641459
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Reviewed-by: Philip Rogers <pdr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#498433}
No need for forced SetStyleInternal for unchanged ComputedStyle.
This was done to avoid use of out-dated ComputedStyle from the style
sharing cache.

Also, removed unnecessary DCHECKs for style sharing sanity and fixed a

Bug: 721517
Change-Id: I3a4117328b7a62dac84ef3e81017702f6f40315b
Reviewed-on: https://chromium-review.googlesource.com/628519
Reviewed-by: nainar <nainar@chromium.org>
Reviewed-by: Eric Willigers <ericwilligers@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#498417}
Invalidate matched properties cache when registering custom properties.
Not forcing SetStyleInternal in Element::RecalcOwnStyle triggered a
DCHECK fail for (!!value == !!parsed_value) in
SetResolvedInheritedVariable(). We were hitting the matched properties
cache to re-use the custom properties from the style recalc before and
after property registration. The property registration made the custom
property value invalid due to the given syntax.

It's possible this should be detected as a style propagation change in
RecalcOwnStyle (ComputedStyle::operator==), but clearing the matched
properties cache seemed like a good idea since all style is
recalculated on property registration anyway.

This CL is split out of:


Test: custom-properties/registered-property-cssom.html
Change-Id: I593f2fa1be788ce00872d46356924f6f5415174e
Reviewed-on: https://chromium-review.googlesource.com/635565
Reviewed-by: nainar <nainar@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#498393}
[LayoutNG] Move column layout algorithm tests to a separate file.
FragmentChildIterator and ConstructBlockLayoutTestConstraintSpace() are needed
by both block and column layout algorithm tests, so they needed a new home. Put
them in ng_base_layout_algorithm_test.h

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I664c1f0a7b04e6096b25bfff344f0ebae9fa1bd0
Reviewed-on: https://chromium-review.googlesource.com/641150
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#498162}
Be more specific about namespace for Message in unit tests
There is a gtest namespace ::testing and a helper namespace in blink
called ::blink::testing. If both are visible to the compiler,
::blink::testing will be used first and classes in ::testing will not
be found. This happens in jumbo builds so we better be more specific.


Change-Id: I611b7afde07fb217978e90cf041e89ce7634fb8e
Reviewed-on: https://chromium-review.googlesource.com/640699
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#498080}
Missing comparison of timing functions for style recalc.
TransitionsMatchForStyleRecalc and AnimationsMatchForStyleRecalc did
not compare timing functions. Move common timing comparison into the
CSSTimingData class and add a test for timing functions.

This was discovered trying to remove a SetStyleInternal hack from

Element: :RecalcOwnStyle().
Change-Id: I11edf92a63653e44ca6384523d0dd4da7786dc25
Reviewed-on: https://chromium-review.googlesource.com/635723
Reviewed-by: Eric Willigers <ericwilligers@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#498047}
[LayoutNG] Make percent sizing work through anonymous constraint spaces.
Re-enable a unit test that now passes again. Also fixes a layout test.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: Ic1d15dccaefc5773ae4305771808d328548007b4
Reviewed-on: https://chromium-review.googlesource.com/637910
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#498034}
Revert "Locate the correct flow thread for spanners and out-of-flow objects."
This reverts commit b71ac55bffca1c376d6ed4e540194436daccfbd1.

Reason for revert: Opened up a can of worms. Re-seal it.

Original change's description:
> Locate the correct flow thread for spanners and out-of-flow objects.
> LayoutFlowThread::LocateFlowThreadContainingBlockOf() used to just
> give up if the nearest ancestor flow thread of some object wasn't the
> containing flow thread.
> The machinery that maintains the special-objects
> (LayoutMultiColumnSet, LayoutMulticolumnSpannerPlaceholder) for
> multicol still needs to ignore out-of-flow objects and spanners,
> though, so I moved the check for this from
> LocateFlowThreadContainingBlockOf() to
> FlowThreadDescendantWasInserted() and
> FlowThreadDescendantWillBeRemoved().
> Checking on the paint side whether page logical height is known is
> no longer necessary.
> Bug: 757947
> Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
> Change-Id: Ief0492e9de52b01b08c3bc0318cb3c8abe67ccd3
> Reviewed-on: https://chromium-review.googlesource.com/632057
> Reviewed-by: Emil A Eklund <eae@chromium.org>
> Commit-Queue: Morten Stenshorne <mstensho@opera.com>
> Cr-Commit-Position: refs/heads/master@{#497437}


# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: 757947
Change-Id: Idf54d6cea2c03871c3a3443880f6b5b331cd7d30
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Reviewed-on: https://chromium-review.googlesource.com/637870
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#497791}
Support ::before and ::after pseudo elements after ::slotted.
Allow pseudo elements after ::slotted() pseudo elements to allow for
scopes to which an element has been slotted to generate ::before /
::after pseudo elements.

The scoping spec[1] allows tree-abiding[2] pseudo elements after
::slotted. This CL adds support for ::before and ::after.

[1] https://drafts.csswg.org/css-scoping/#slotted-pseudo
[2] https://drafts.csswg.org/css-pseudo-4/#treelike

Bug: 754081
Change-Id: I95d91ea06d8fa75537cf8c845da477b2fb034a7d
Reviewed-on: https://chromium-review.googlesource.com/616042
Commit-Queue: Rune Lillesveen <rune@opera.com>
Reviewed-by: Takayoshi Kochi <kochi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#497742}
Include less from LayoutUnit.h.
This header is included in about 4500 compilation units.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng;master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: Icd9996f634899877c84e130f67fdf497a01734a0
Reviewed-on: https://chromium-review.googlesource.com/635726
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: Philip Rogers <pdr@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#497563}
[LayoutNG] Copy multicol layout back to the LayoutObject tree.
Stitch fragments generated from the same layout input node
together, so that the flow thread based multicol implementation
in legacy layout can perform painting, hit-testing and other
layout tree read operations like before.

The position will only be updated when at the first fragment for
each node. The position of subsequent fragments are only relevant
to LayoutNG. For legacy layout they just contribute to the
block-size of the LayoutObject. Currently, the position will
still be mostly wrong, unless the object starts in the first

One change to the break tokens was necessary: the final break
token also needs to set its used block size, just like the
preceding tokens, so that clients can tell that it's not the
first fragment of some node.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I4a1491262bb5a5284abfa27695ed90beb620a56d
Reviewed-on: https://chromium-review.googlesource.com/634223
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#497478}
Locate the correct flow thread for spanners and out-of-flow objects.
LayoutFlowThread::LocateFlowThreadContainingBlockOf() used to just
give up if the nearest ancestor flow thread of some object wasn't the
containing flow thread.

The machinery that maintains the special-objects
(LayoutMultiColumnSet, LayoutMulticolumnSpannerPlaceholder) for
multicol still needs to ignore out-of-flow objects and spanners,
though, so I moved the check for this from
LocateFlowThreadContainingBlockOf() to
FlowThreadDescendantWasInserted() and

Checking on the paint side whether page logical height is known is
no longer necessary.

Bug: 757947
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: Ief0492e9de52b01b08c3bc0318cb3c8abe67ccd3
Reviewed-on: https://chromium-review.googlesource.com/632057
Reviewed-by: Emil A Eklund <eae@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#497437}
Emacs jade rebranded to indium
Change-Id: Iff92857fcf7ef95578687dacb9309fcfad331e6d
Reviewed-on: https://chromium-review.googlesource.com/631720
Reviewed-by: Dominic Mazzoni <dmazzoni@chromium.org>
Commit-Queue: Dominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#497072}
Reland "Reland "[LayoutNG] Bring back native support for multicol.""
This is a reland of 3bb64d0c55ed57a6522cc09f5be97be220c81fc0
Original change's description:
> Reland "[LayoutNG] Bring back native support for multicol."
> This is a reland of b7e830ddf678c7daaa41a982fad87156b1bbbe4b
> Original change's description:
> > [LayoutNG] Bring back native support for multicol.
> > 
> > Still missing: Copy data back into the LayoutObject tree.
> > 
> > Some layout tests now fail, since we're not using the legacy engine to lay out
> > multicol. Quite a few crash or freeze, too.
> > 
> > Also brought back some of the unit tests. They needed some changes, because of
> > the following:
> > 
> > 1. We now create a fragment for each column, from an anonymous constraint
> > space. I.e. we have one more level of fragments, and it's the column fragments
> > that have their inline offset shifted to the correct column, rather than
> > setting it on the first child block, which is what we did last time these tests
> > worked.
> > 
> > 2. Mistakes introduced when converting test to using setBodyInnerHTML() rather
> > than building the layout trees programmatically:
> > https://codereview.chromium.org/2725773002
> > 
> > 3. New bugs. :)
> > 
> > Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
> > Change-Id: I4df85d684f0ddb8f7f0f75d15230a1ab61e9f9a0
> > Reviewed-on: https://chromium-review.googlesource.com/591429
> > Commit-Queue: Morten Stenshorne <mstensho@opera.com>
> > Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
> > Reviewed-by: Emil A Eklund <eae@chromium.org>
> > Cr-Commit-Position: refs/heads/master@{#496446}
> TBR=eae@chromium.org,ikilpatrick@chromium.org
> Change-Id: I479ea313e9ca9a56bdbbcad009a4c1b18a8b9e63
> Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
> Reviewed-on: https://chromium-review.googlesource.com/627358
> Commit-Queue: Morten Stenshorne <mstensho@opera.com>
> Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
> Reviewed-by: Koji Ishii <kojii@chromium.org>
> Reviewed-by: Morten Stenshorne <mstensho@opera.com>
> Cr-Commit-Position: refs/heads/master@{#496814}


Change-Id: Ic81481d78f216e45d437968090f76479326ad708
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Reviewed-on: https://chromium-review.googlesource.com/631816
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#497061}
[LayoutNG] Update FlagExpectations for LayoutNG

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I187593e14a27bf76957055cceb0ec00cf3fae65d
Reviewed-on: https://chromium-review.googlesource.com/631776
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#497023}
Remove Internals.isStyleSharing().
Not in use and style sharing is removed.

Bug: 721517
Change-Id: I9eb72320ba001102f4c29f22240cf9dbd3a4f460
Reviewed-on: https://chromium-review.googlesource.com/628520
Reviewed-by: nainar <nainar@chromium.org>
Reviewed-by: meade_UTC10 <meade@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#496957}
Reland "[LayoutNG] Bring back native support for multicol."
This is a reland of b7e830ddf678c7daaa41a982fad87156b1bbbe4b
Original change's description:
> [LayoutNG] Bring back native support for multicol.
> Still missing: Copy data back into the LayoutObject tree.
> Some layout tests now fail, since we're not using the legacy engine to lay out
> multicol. Quite a few crash or freeze, too.
> Also brought back some of the unit tests. They needed some changes, because of
> the following:
> 1. We now create a fragment for each column, from an anonymous constraint
> space. I.e. we have one more level of fragments, and it's the column fragments
> that have their inline offset shifted to the correct column, rather than
> setting it on the first child block, which is what we did last time these tests
> worked.
> 2. Mistakes introduced when converting test to using setBodyInnerHTML() rather
> than building the layout trees programmatically:
> https://codereview.chromium.org/2725773002
> 3. New bugs. :)
> Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
> Change-Id: I4df85d684f0ddb8f7f0f75d15230a1ab61e9f9a0
> Reviewed-on: https://chromium-review.googlesource.com/591429
> Commit-Queue: Morten Stenshorne <mstensho@opera.com>
> Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
> Reviewed-by: Emil A Eklund <eae@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#496446}


Change-Id: I479ea313e9ca9a56bdbbcad009a4c1b18a8b9e63
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Reviewed-on: https://chromium-review.googlesource.com/627358
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: Koji Ishii <kojii@chromium.org>
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#496814}
[LayoutNG] Update FlagExpectations for LayoutNG

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: Ib177fd2754c2f05d7d7765e7599e6e6bb5d4ceab
Reviewed-on: https://chromium-review.googlesource.com/628878
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#496740}
[LayoutNG] Update FlagExpectations for LayoutNG

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I3c0967138e9f7dd81d052f2f5117ba815ad3249c
Reviewed-on: https://chromium-review.googlesource.com/626296
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#496640}
Remove style sharing workaround from StyleInvalidator.
Style sharing is no longer present in the codebase, so the SetStyle /
LocalStyleChange should no longer be necessary here.

Bug: 721517

Change-Id: I0437f3c3c3188101299b053d81b36a7542baf610
Reviewed-on: https://chromium-review.googlesource.com/625880
Reviewed-by: Eric Willigers <ericwilligers@chromium.org>
Reviewed-by: nainar <nainar@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#496597}
[LayoutNG] Bring back native support for multicol.
Still missing: Copy data back into the LayoutObject tree.

Some layout tests now fail, since we're not using the legacy engine to lay out
multicol. Quite a few crash or freeze, too.

Also brought back some of the unit tests. They needed some changes, because of
the following:

1. We now create a fragment for each column, from an anonymous constraint
space. I.e. we have one more level of fragments, and it's the column fragments
that have their inline offset shifted to the correct column, rather than
setting it on the first child block, which is what we did last time these tests

2. Mistakes introduced when converting test to using setBodyInnerHTML() rather
than building the layout trees programmatically:

3. New bugs. :)

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I4df85d684f0ddb8f7f0f75d15230a1ab61e9f9a0
Reviewed-on: https://chromium-review.googlesource.com/591429
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#496446}
Removed leftover FIXME for whitespace attachment.
WhitespaceAttacher now handles this properly and it's done as part of
layout tree building, not style recalc.

Change-Id: I0fd970c86425c155429c008afdf280866b539a72
Reviewed-on: https://chromium-review.googlesource.com/626301
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#496438}
Saturated arithmetic when calculating multicol preferred widths.
With sufficiently large column-gap and high enough column-count, we'd
integer-overflow and end up with a negative gap_extra result, which is a value
that contributes to the preferred min/max preferred logical widths (which
therefore also could become negative). Let all values involved be of type
LayoutUnit, so that we get saturated arithmetic enabled.

Bug: 743230
Change-Id: I06d7d8f9c1214af35faf0b52f1652fc626cd67ef
Reviewed-on: https://chromium-review.googlesource.com/625624
Commit-Queue: Emil A Eklund <eae@chromium.org>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#496329}
[LayoutNG] Update FlagExpectations for LayoutNG

Change-Id: Ic03560b8ed7ceb89c9bf746c04320b6c655ca1b2
Reviewed-on: https://chromium-review.googlesource.com/625918
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#496293}
Setting DOMMatrix.m33 or m44 to 1 should preserve is2D
Per [1], setting a value other than one (1) should clear the is2D flag.
We had the logic reversed.

[1] https://drafts.fxtf.org/geometry/#dommatrix-attributes

Bug: 756789
Change-Id: I37fcd4e20fedee6ba29bb164e81cdf324971f9a1
Reviewed-on: https://chromium-review.googlesource.com/623410
Commit-Queue: Dominic Cooney <dominicc@chromium.org>
Reviewed-by: Dominic Cooney <dominicc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#496224}
[LayoutNG] Clean up #includes.
NGLayoutResult needs to know about NGUnpositionedFloat, and
NGUnpositionedFloat needs to know about NGLayoutResult, so some
forward-declaring is necessary, to avoid circular dependencies.

Also got a dependency on the rather heavy ComputedStyle out of a header

Change-Id: I8f35bbb48bf39118abf093d8ffb6c8a44545ca57
Reviewed-on: https://chromium-review.googlesource.com/623651
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#496008}
Let LayoutView::StyleWillChange handle viewport invalidation.
Make sure we only do a single SetStyle for viewport ComputedStyle
to which we propagate certain documentElement/body styles. That way we
can do style invalidation diffing on SetStyle. The invalidation will
now be done on LayoutView::StyleWillChange instead of invalidating
LayoutView from LayoutBox::StyleWillChange for documentElement and body

The LayoutView invalidation does still use a limited repaint based on
propagated background changes.

Bug: 755539

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I629098e0073827513801311b730c62fc98079db4
Reviewed-on: https://chromium-review.googlesource.com/609984
Commit-Queue: Rune Lillesveen <rune@opera.com>
Reviewed-by: Philip Rogers <pdr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#495573}
Check for HasNormalColumnGap() for LayoutView style changes.
PropagateStyleToViewport() propagated the absolute length of column-gap
only, and did not consider the "normal" keyword value. A change between
0 and "normal" was not detected as a change, hence the pages were not
laid out with the new value.

Bug: 756423
Change-Id: Idfe6c34b2e88fb741f25950c6d5a79290e33b728
Reviewed-on: https://chromium-review.googlesource.com/618926
Commit-Queue: Rune Lillesveen <rune@opera.com>
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#495256}
Add missing dependency to //base for target device_monitors
Because of lack of this dependency Build sometimes fails because of
missing file base/debug/debugging_flags.h:

[2017-08-17 10:18:12] [526/33287] CXX
[2017-08-17 10:18:12] >>BUILDBOT>>errors>>compile>>
[2017-08-17 10:18:12] FAILED:
[2017-08-17 10:18:12] ninja -t msvc -e environment.x64 --
c:\buildbot\clcache\bin/gomacc.exe "c:\program files (x86)\microsoft
visual studio 14.0\vc\bin\amd64/cl.exe" /nologo /showIncludes
/c ../../media/device_monitors/system_message_window_win.cc
[2017-08-17 10:18:12] CLCache Error: Failed to process compiler output
[2017-08-17 10:18:12] >>BUILDBOT>>errors>>compile>>
[2017-08-17 10:18:12] ../..\base/debug/stack_trace.h(14): fatal error
C1083: Cannot open include file: 'base/debug/debugging_flags.h':
No such file or directory

Bug: 756401
Change-Id: I5468361db2558e082828eaba81458039167e6ab1
Reviewed-on: https://chromium-review.googlesource.com/618571
Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
Commit-Queue: Dale Curtis <dalecurtis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#495240}
[LayoutNG] Remove test failure expectation, now that they apparently pass.
One test doesn't fail anywhere. Three other tests only fail on Mac.

Change-Id: I799cfdac2f3ea32f5fde97957a7053bfd0146195
Reviewed-on: https://chromium-review.googlesource.com/616730
Reviewed-by: Aleks Totic <atotic@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#495191}
Only need to repaint background for color changes with no image.
Implement a VisuallyEqual for backgrounds because computed style
comparison would trigger unnecessary repaints when background image
related properties changed when there were no images.

Bug: 754685
Change-Id: I4c687426905e9687b298549b3015ac1207dbbc17
Reviewed-on: https://chromium-review.googlesource.com/612089
Reviewed-by: meade_UTC10 <meade@chromium.org>
Reviewed-by: Philip Rogers <pdr@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#494738}
When main axis is logical y, lay out flex items before getting intrinsic size.
There's no other way to figure out an object's intrinsic logical height, than
to lay it out. We cannot use the logical height we found in the previous layout
pass as intrinsic size.

Bug: 752078
Change-Id: Ibfd9426752ea8489256ac40f0c16e1a31a74a377
Reviewed-on: https://chromium-review.googlesource.com/612179
Reviewed-by: Emil A Eklund <eae@chromium.org>
Reviewed-by: Rune Lillesveen <rune@opera.com>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#494488}
Removed unused InheritColumnPropertiesFrom.
Change-Id: I39641a2c8fe9045ba3611050c03fd909d18b9ef4
Reviewed-on: https://chromium-review.googlesource.com/613161
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#494086}
Remove ignore_manifest in android_aar_prebuilt
Manifest merging is now supported! \o/

Bug: 643967
Change-Id: I460e4635fc2dc34592f50aed03f4056a5f402364
Reviewed-on: https://chromium-review.googlesource.com/567078
Reviewed-by: Andrew Grieve <agrieve@chromium.org>
Reviewed-by: Brandon Jones <bajones@chromium.org>
Commit-Queue: Ingemar Ådahl <ingemara@opera.com>
Cr-Commit-Position: refs/heads/master@{#494041}
Propagate style to viewport after style recalc.
Since we are now propagating up to the viewport style and don't do any
inheritance after propagation, we can postpone the propagation until
after the style recalc has finished. That means we only have to call
StyleForElement on html and body elements once. It also means we can
remove the code to clear animation update from

InheritHtmlAndBodyElementStyles() has been renamed to
PropagateStyleToViewport() which better explains what the method does.

The rem unit style recalc still needs to be triggered right after the
documentElement has been recalculated, but that code is moved to
the StyleEngine called from Element::RecalcOwnStyle().

Change-Id: I3850aee300aa31174f022581e615e5d66205d674
Reviewed-on: https://chromium-review.googlesource.com/608028
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#493348}
[LayoutNG] Place the root fragment.
All fragments but the root one are already placed by the fragment builder, when
walking through the children of a node. However, the fragment established by
the root node was left unplaced.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I8233b49f271034d6af8b19ebf3fd59b226b59065
Reviewed-on: https://chromium-review.googlesource.com/602207
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#492946}
Apply :placeholder-shown and :read-write changes on input type change.
Whether :placeholder-shown, :read-only, and :read-write matches an html
input element depends on its type. Apply changes on type attribute
changes accordingly.

The placeholder text and visibility had to be updated sychronously,
otherwise the pseudo invalidation happens before the placeholder
visibility update as part of layout tree attachment.

Bug: 751406
Change-Id: Ic5bf1c62073cdf2648dfbf7876828323fecfe4be
Reviewed-on: https://chromium-review.googlesource.com/605252
Commit-Queue: Rune Lillesveen <rune@opera.com>
Reviewed-by: Kent Tamura <tkent@chromium.org>
Cr-Commit-Position: refs/heads/master@{#492935}
No need for recalc on viewport propagation.
Before the fix for issue 732349, we relied on propagation from body to
viewport to affect the computed style of the root element which was
handled through a subtree recalc after viewport propagation. This is no
longer necessary. In fact, when rtl was specified on body, but the
computed style of html was ltr, InheritHtmlAndBodyElementStyles would
always trigger a subtree recalc, which would happen every frame we had a
style recalc.

There's a hope this will fix performance issue 739133.

I think that InheritHtmlAndBodyElementStyles can be made into a
PropagateStyleToViewport method which can be called at the end of
style recalc to avoid calculating html and body style twice. I'll try
to do that in a separate CL.

Bug: 739133
Change-Id: I0beebcf850661434eedb8bd19405698c27b7ae89
Reviewed-on: https://chromium-review.googlesource.com/606007
Commit-Queue: Rune Lillesveen <rune@opera.com>
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#492889}
[LayoutNG] Physical fragment tree dump support.
Call NGPhysicalFragment::ShowFragmentTree() to dump the fragment tree.
The solution is inspired by NGLayoutInputNode::ShowNodeTree().

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: Ie256d74bb80f2be5f372ec57791b693e4f5bdeaf
Reviewed-on: https://chromium-review.googlesource.com/602227
Reviewed-by: Emil A Eklund <eae@chromium.org>
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#492575}
Remove redundant GMS version meta-data
The <meta-data> is merged into the final apk manifest from dependency

//third_party/android_tools:google_play_services_basement_java provides
the manifest and accompanying resource value.

Bug: 643967
Change-Id: I09590a6c060e4e92c45e928ad57d64546d90f7e3
Reviewed-on: https://chromium-review.googlesource.com/567138
Reviewed-by: Yuwei Huang <yuweih@chromium.org>
Reviewed-by: Ted Choc <tedchoc@chromium.org>
Commit-Queue: Ingemar Ådahl <ingemara@opera.com>
Cr-Commit-Position: refs/heads/master@{#492568}
Evaluation of :required and :optional changes on input type changes.
If an input element changes to or from hidden in the presence of a
"required" attribute, the evaluation of :required and :optional will
change. Schedule invalidation sets to update computed style

Bug: 751406
Change-Id: I64ccaaa58067594e4a150f80fe73aaf4c9f93c83
Reviewed-on: https://chromium-review.googlesource.com/602027
Commit-Queue: Rune Lillesveen <rune@opera.com>
Reviewed-by: Kent Tamura <tkent@chromium.org>
Cr-Commit-Position: refs/heads/master@{#492304}
[LayoutNG] Remove NGPhysicalFragment::NGFragmentType from NGFragmentBuilder.
It was always kFragmentBox, even for inline layout, so it was meaningless.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: If03b39b4315b8165045488901dbd67225ff54e8a
Reviewed-on: https://chromium-review.googlesource.com/602245
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: Koji Ishii <kojii@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#492292}
Add tests for scroll direction of propagated writing-mode from body.
Change-Id: Ief891686240dcf4c30012b6282b1616de0500878
Reviewed-on: https://chromium-review.googlesource.com/602240
Reviewed-by: Koji Ishii <kojii@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#492254}
Support unclosed parentheses at end of sizes attribute.
Instead of returning false, match unclosed left-parentheses and
function tokens. Fixes eight cases in the WPT.

Bug: 749381
Change-Id: I7b3f061ee026be1da9ab377488f83007a2a0689d
Reviewed-on: https://chromium-review.googlesource.com/599851
Reviewed-by: Renée Wright <rjwright@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#492235}
Causes problems for Jumbo builds.


Change-Id: If4a37cff9ae787ec0c750b652663fd2d8d6b1a66
Reviewed-on: https://chromium-review.googlesource.com/598090
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Nicholas Verne <nverne@chromium.org>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Commit-Queue: Nicholas Verne <nverne@chromium.org>
Cr-Commit-Position: refs/heads/master@{#491391}
Need to #define EXPECT_RECT_EQ in a header file.
Multiple definitions in various .cpp files causes problems for Jumbo builds.


Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I907fc4bbba428de44579c9466a8884270102483b
Reviewed-on: https://chromium-review.googlesource.com/598070
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Chris Harrelson <chrishtr@chromium.org>
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#491389}
Remove rulesets used for style sharing.
After style sharing code is removed, we no longer need the sibling and
uncommon attribute rulesets to reject style sharing. This also means
RuleFeatureSet no longer needs to be traced, so some oilpan cruft could
be removed.

The StyleEngine API UsesSiblingRules() relied on the size of the sibling
ruleset, but it was only used as what looked like an optimization for
:empty selector updates where :empty is found in non-rightmost compound
selectors. However, the presence of :empty itself would add a sibling
selector in the previous code, and :empty in non-rightmost compound not
followed by an adjacent selector would only have de-generate cases like
":empty span" which could never match anything, or ":not(:empty) span"
which would always be true if the whole selector matches. Therefore, it
makes sense to just drop the API/check.

Bug: 721517
Change-Id: I85100850cb8cec56b17947916d7755ebcf3f15ec
Reviewed-on: https://chromium-review.googlesource.com/597689
Reviewed-by: nainar <nainar@chromium.org>
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#491344}
Remove stats for style sharing.
Style sharing code is removed and these stats will always be 0.

Bug: 721517
Change-Id: Iae76778bd564ad22645d3d14709c1d8d13d796c6
Reviewed-on: https://chromium-review.googlesource.com/595744
Reviewed-by: nainar <nainar@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#490984}
Remove ununsed kSharingMode selector matching.
After style sharing code was removed, this mode is no longer in use.

Bug: 721517
Change-Id: Ia0997792f5641b722d86922f40d631613552c137
Reviewed-on: https://chromium-review.googlesource.com/595728
Reviewed-by: nainar <nainar@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#490958}
Retire sigbjornf@ ownerships.

Change-Id: I764c7f96d306867c8fd0e1dda4f498bfc1285f87
Reviewed-on: https://chromium-review.googlesource.com/593310
Reviewed-by: Sigbjørn Finne <sigbjornf@opera.com>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Sigbjørn Finne <sigbjornf@opera.com>
Cr-Commit-Position: refs/heads/master@{#490722}
[LayoutNG] MultiColumnFragmentainerGroup needs to know its height.
Otherwise DCHECKs will fail when attempting certain read operations on the
legacy layout tree.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I8f09461bf7404aab1ef9a369380542759bb05a53
Reviewed-on: https://chromium-review.googlesource.com/591567
Reviewed-by: Emil A Eklund <eae@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#490657}
Fix truncation from 'double' to 'float' warning in resource_prefetch_predictor.cc
Change-Id: I56e4ef0806162bb42bfc9edf47e8810499737ad6
Reviewed-on: https://chromium-review.googlesource.com/591367
Reviewed-by: Egor Pasko <pasko@chromium.org>
Commit-Queue: Egor Pasko <pasko@chromium.org>
Cr-Commit-Position: refs/heads/master@{#490382}
[LayoutNG] HandleInflow() return a bool rather than WTF::Optional<>.
This way we won't need previous_inflow_position in Layout() to be optional, and
it makes the code more readable, and possibly more efficient too.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: Id42f5b950cf2edec646d5bf8b594b8d4b9948449
Reviewed-on: https://chromium-review.googlesource.com/590427
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#490364}
InlineBlockBaseline() and friends now return LayoutUnit instead of int.
Add support for floating point baselines.  This patch retains integer
calculations for font ascender/descender, to avoid impacting too many
web pages.  Line painting is rounded to CSS pixels at the paint stage.


Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng;master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I15850c55d54fbb0c885d4040be3c90ea2a51d7ca
Reviewed-on: https://chromium-review.googlesource.com/543141
Commit-Queue: Karl Anders Øygard <karlo@opera.com>
Reviewed-by: Javier Fernandez (OOO till Aug 4th) <jfernandez@igalia.com>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#490327}
Fix crash in spatnav when <area> looses its connected <img>
TEST=See above clusterfuzz bug for repro steps.

Change-Id: I9d2ee28c7dab9e5f9af875e3011b1d0acb13ae29
Reviewed-on: https://chromium-review.googlesource.com/586589
Reviewed-by: Takayoshi Kochi <kochi@chromium.org>
Reviewed-by: Kent Tamura <tkent@chromium.org>
Commit-Queue: Hugo Holgersson <hugoh@opera.com>
Cr-Commit-Position: refs/heads/master@{#490049}
[LayoutNG] Reduce variable span, for increased readability.
Also changed the child loop from "while" to "for".

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: Iabca756c82281525818f1d5f3f31613679bae211
Reviewed-on: https://chromium-review.googlesource.com/584755
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#489991}
Rename duplicate MockWebFrameClient classes.
Caused trouble for Jumbo builds, all of a sudden.


Change-Id: I226e3b78c4abe008765123c21ed72868ea3f9f4b
Reviewed-on: https://chromium-review.googlesource.com/588908
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#489888}
Remove sigbjornf@ from blink_dom watchlist.

Change-Id: Id8d1ff08ae2065243894803ece9e0b5da9b131d7
Reviewed-on: https://chromium-review.googlesource.com/588089
Reviewed-by: Sigbjørn Finne <sigbjornf@opera.com>
Commit-Queue: Sigbjørn Finne <sigbjornf@opera.com>
Cr-Commit-Position: refs/heads/master@{#489876}
Let CalculatePaginationStrutToFitContent() figure out the strut all on its own.
Remove the strut_to_next_page parameter, and let it calculate it on its own.

This is a preparatory patch for supporting repeated table footers. That will
break the "space left" == "pagination strut" invariant. Actually, this wasn't
truly an invariant even prior to this CL, because the next fragmentainer isn't
necessarily tall enough to hold the content (which will result in a pagination
strut larger than the amount of remaining space).

No behavior changes intended.

Change-Id: I4f3499d969d6f128077e281f2dd45826cd6d83fc
Reviewed-on: https://chromium-review.googlesource.com/583619
Commit-Queue: Robert Hogan <robhogan@gmail.com>
Reviewed-by: Robert Hogan <robhogan@gmail.com>
Cr-Commit-Position: refs/heads/master@{#489780}
Change jumbo chunk separation to ignore headers
Since jumbo chunks were divided before headers were filtered out, the
actual chunk sizes were not deterministic and much smaller than expected.

This patch filters headers first, and halves the chunk size to get the same
actual chunks.

Bug: 747368
Change-Id: Ia537af07f7226a87d8de1309bf494914789609e4
Reviewed-on: https://chromium-review.googlesource.com/581289
Reviewed-by: Bruce Dawson <brucedawson@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#489598}
Do not show I-beam when hovering 'user-select: none'
All elements now have 'user-select: auto' as their default
value (not 'user-select: text').

Spec: https://drafts.csswg.org/css-ui-4/#propdef-user-select

This default value has no effect; elements are styled as usual.
This is important because Blink needs a "no change" default
to be able to find cases where 'user-select' should affect
mouse pointer styling.


Above 3 tests failed before this patch.

Change-Id: I1ed0ad69daf6a1a1bd4b21623fcdb145ef596d88
Reviewed-on: https://chromium-review.googlesource.com/570246
Commit-Queue: Hugo Holgersson <hugoh@opera.com>
Reviewed-by: Yoshifumi Inoue <yosin@chromium.org>
Reviewed-by: David Bokan <bokan@chromium.org>
Reviewed-by: nainar <nainar@chromium.org>
Reviewed-by: Yoichi Osato <yoichio@chromium.org>
Cr-Commit-Position: refs/heads/master@{#489363}
Explicit namespace ::testing, to not confuse it with blink::testing
This fixes a merge mistake at

That CL overwrote parts of https://codereview.chromium.org/2970833002 ,
which broke Jumbo compilation.


Change-Id: I486a2c49032ffeef2bd81d5e230a9f9cf81b646f
Reviewed-on: https://chromium-review.googlesource.com/582611
Reviewed-by: Kouhei Ueno <kouhei@chromium.org>
Reviewed-by: Philip Rogers <pdr@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#489050}
Fix parsing of $GTK_MODULES
The AtkUtilAuraLinux::Initialize function checks whether accessibility
should be enabled. To do so, it calls PlatformShouldEnableAccessibility,
which parses the content of the environment variable GTK_MODULES. This
variable contains a list of colon-separated modules; the function parses
it as it were a whitespace-separated list, looking for a module called
`gail:atk-bridge`, while in fact, the module to look for is
`atk-bridge`. On systems having a more complex content for GTK_MODULES
(mine is `gail:atk-bridge:unity-gtk-module`), the parse fails, and the
initialization aborts.

Bug: 747393
Change-Id: I17d82331af1d117d0ed70520b4367c5915037316
Reviewed-on: https://chromium-review.googlesource.com/582807
Reviewed-by: Dominic Mazzoni <dmazzoni@chromium.org>
Commit-Queue: Dominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#489022}
Revert "Make border width rounding visible to js via getComputedStyle."
This reverts commit e87da780e04bf05f5ae863d7fda517ee6c03d534.

Reason for revert: This fix is a spec violation, and the previous behavior was more correct. A slightly inaccurate representation (off by less than 0.02px) is better than clamping it to 1px.

Original change's description:
> Make border width rounding visible to js via getComputedStyle.
> CL (https://chromium-review.googlesource.com/c/525536/) moved rounding of border 
> widths to the painting stage, hence rounding is no longer visible in js via 
> getComputedStyle. This cl makes rounding visible again to users via getComputedStyle.
> This cl contains the following changes
> * Implemented a ZoomAdjustedPixelValueWithRounding method.
> - This method is the same as ZoomAdjustedPixelValue except that it
> rounds pixel value to 1 if original value is between 0 and 1.0.
> * Changed ComputedStyle for border-[top|right|bottom|left] to use
> ZoomAdjustedPixelValueWithRounding so that getComputedStyle will
> display rounded pixels for these properties (and also border-width that
> is a shorthand of these 4 longhand properties).
> * Changed a layout test.
> Bug: 737962
> Change-Id: I0656f7ea1212fe32f866d95218995fb3de109e05
> Reviewed-on: https://chromium-review.googlesource.com/560917
> Commit-Queue: Jia Meng <jiameng@chromium.org>
> Reviewed-by: Alan Cutter <alancutter@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#487384}


# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: 737962
Change-Id: I03120da255990456614ffc3e0e3180eaa20a566a
Reviewed-on: https://chromium-review.googlesource.com/582608
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#488947}
Make sure CSSPropertyIdMap knows the CSSPropertyID traits.
CSSPropertyID has some custom traits and without knowing them the
HashTable will not be compiled as intended. This was noticed through
a warning in jumbo builds about the traits being instantiated implicitly
before they were instantiated explicitly (in a specialization).


Bug: 747408
Change-Id: I2dea24bec17c8d071cbe60e443834d440eebfb2a
Reviewed-on: https://chromium-review.googlesource.com/581447
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#488861}
Always relayout when an object gets or loses a PaintLayer.
This rids us of some crufty code, and also fixes bugs. The approach was also
broken for multicol, because we started UpdatePaginationRecursive() in the
middle of the tree without looking for a containing flow thread (pagination
layer). This would result in the new layer erroneously not becoming paginated.

Also had to update a unit test, to satisfy its requirement that the style change
won't trigger layout.


Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I50ed61a7174e360259b7b786bab01cf74616fc32
Reviewed-on: https://chromium-review.googlesource.com/542915
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Steve Kobes <skobes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#488768}
Deduplicated 3 JSON string constants, "null", "true" and "false"
Both JSONParser and JSONValues use constants for the strings
"null", "true" and "false". That is probably no problem since the
linker will merge identical strings, but since the constants had
the same names as well they caused collisions in jumbo builds.

This patch makes JSONParser use the JSONValues constants.

Change-Id: I27b01b354aa9cfeab0f8c636f22ecfbc2762a6bc
Reviewed-on: https://chromium-review.googlesource.com/577552
Reviewed-by: Ian Clelland <iclelland@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#488654}
Fix compilation for ATK (accessibility)
A variable wasn't given the right name inside the ATK support when
a patch consolidated 3 AX properties into single restrictions
property for accessibility objects.

R=aleventhal@chromium.org, jochen@chromium.org

Change-Id: I0c82e055e39614110cfc4f7a7299d226bd4e6ad2
Reviewed-on: https://chromium-review.googlesource.com/580927
Reviewed-by: Jochen Eisinger <jochen@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#488630}
Renamed CreateDecoder helper functions in Image decoder tests
All image decoder test have a helper function "CreateDecoder" which
conflicts in jumbo builds where the tests are merged. This patch renames
them "CreateBMPDecoder", "CreateJPEGDecoder" and so on.

Bug: 745732
Change-Id: I2cfd108c39ade76a09059d77778557ab44b82752
Reviewed-on: https://chromium-review.googlesource.com/576098
Reviewed-by: Noel Gordon <noel@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#488407}
Support jumbo builds in core unit tests (except editing)
This patch makes the build system for core unit tests support jumbo
builds (unity builds) which saves roughly 60 CPU minutes (5% of the
build time) on my computer. Currently jumbo is by default disabled so
this will have no direct effect unless you have
  use_jumbo_build = true
in your gn settings.

Bug: 713137
Change-Id: I376e62fb66738cba9135d02f8079d983cfe67495
Reviewed-on: https://chromium-review.googlesource.com/575055
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Reviewed-by: Dirk Pranke <dpranke@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#488238}
Make blink/modules support jumbo compilations (-60 CPU minutes)
Compiling browser code in blink/modules currently use
about 80 CPU minutes. That is about 7% of the total compilation time.
If you use jumbo compilation (merge many files into a single
translation unit) that time drops to about a fifth of that.

There are also unit_tests in modules that will be jumbofied in
a different patch.

Bug: 713137
Change-Id: I9155d2af0c9dce6b3178f77b9366062eb45d4560
Reviewed-on: https://chromium-review.googlesource.com/568302
Reviewed-by: Dirk Pranke <dpranke@chromium.org>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#488179}
Include less from platform/graphics/Image.h
Change-Id: I00ae6625688bb740ecf0235c98e25f41296b359f
Reviewed-on: https://chromium-review.googlesource.com/553298
Reviewed-by: Philip Rogers <pdr@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#487925}
Avoid using the name Function since it collides with WTF::Function
If a class named Function is created and the header
platform/wtf/Functional.h included, any attempt at using WTF::Function
will fail with a lot of strange template instantiation errors.

This can happen unexpectedly in jumbo builds so to avoid that error
this patch renames a testing class that used to be 
named Function, ReaderFunction.


Bug: 746343
Change-Id: I498ecf4f8cb293de634c40060a2df34c78a23e09
Reviewed-on: https://chromium-review.googlesource.com/574864
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#487870}
Make multiple jumbo_* templates instead of just jumbo_target
Initially there was just one template, jumbo_target, but that
caused problems with default configurations and also made every
patch one line more verbose than necessary. Better to have multiple
templates and make the usage just a little bit simple.

Bug: 713137
Change-Id: I7e2b1f0c5216b4465bae331763d6aa5a08e1c996
Reviewed-on: https://chromium-review.googlesource.com/575058
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Dirk Pranke <dpranke@chromium.org>
Cr-Commit-Position: refs/heads/master@{#487823}
Deduplicate CreateIDBValue() used in indexeddb unit_tests
IDBRequestTest and IDBTransactionTest both had an identical helper
function CreateIDBValue. In jumbo builds those identical functions
collided so this patch moves the code to a shared helper file.

Bug: 745732

Change-Id: I36c658509c76deca4e03590858140e02a07f38d3
Reviewed-on: https://chromium-review.googlesource.com/575145
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Joshua Bell <jsbell@chromium.org>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#487547}
Avoid "using namespace blink" in global scope
With jumbo (unity builds, merged translation units) a "using blink"
statement intended for just the local translation unit will affect
many other translation units which causes various issues.

There is also (with jumbo) a warning about such usage that will prevent
things from compiling.

Without this patch this file will have to be manually excluded from
jumbo builds and I am trying to avoid such exclusion lists for
performance and maintenance.

Review-Url: https://codereview.chromium.org/2965323002
Cr-Commit-Position: refs/heads/master@{#487501}
Made test class names unique in media_controls unit tests
MediaControlsImplTest and MediaControlsOrientationLockDelegate use the
same class names for Mock classes. Such as MockChromeClient and
StubLocalFrameClient. That is normally no big deal but in jumbo builds
they can be compiled in the same translation unit and then the classes
will collide. This patch gives the class names unique suffixes so that
media_controls tests don't have to be excluded from jumbo.

Bug: 745732

Change-Id: I6c3a4d5d92ae690ece53aa093ffb4039eb79137e
Reviewed-on: https://chromium-review.googlesource.com/575140
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#487485}
Renamed MockEventListener in presentation and remoteplayback unit tests
Both PresentationReceiverTest and RemotePlaybackTest use a local test
class named MockEventListener. That is normally no big deal
but in jumbo builds they can be compiled in the same translation unit
and then the classes will collide. This patch gives the classes
unique prefixes so that no tests have to be excluded from jumbo.

Bug: 745732

Change-Id: Ic9a5e4e896b226d5ef7f99f2549cd3d4bb66fc42
Reviewed-on: https://chromium-review.googlesource.com/575141
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Mounir Lamouri <mlamouri@chromium.org>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#487479}
Renamed MockWebAudioDevice in webaudio unit tests
Both AudioContextTest and BaseAudioContextTest use a local test
class named MockWebAudioDevice. That is normally no big deal
but in jumbo builds they can be compiled in the same translation unit
and then the classes will collide. This patch gives the classes
unique prefixes so that no tests have to be excluded from jumbo.

Bug: 745732

Change-Id: Ie736a0541082c56af745d51061897a081d2d1da5
Reviewed-on: https://chromium-review.googlesource.com/575142
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#487475}
Made constant names unique in notification unit tests
NotificationDataTest, NotificationImageLoaderTest and
NotificationResourceLoaderTest all use constants, such as kBaseDir,
with the same name. That is normally no big deal but in jumbo builds they
can be compiled in the same translation unit and then the constants
will collide. This patch gives the constants unique prefixes so that
the tests don't have to be excluded from jumbo.

Change-Id: Ib01d88e75cdc876a58c52a6ee3b49a942ccb19ab
Reviewed-on: https://chromium-review.googlesource.com/576088
Reviewed-by: Peter Beverloo <peter@chromium.org>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#487458}
Renaming unit_test class MockHTMLResourcePreloader to not collide.
CSSPreloadScannerTest and HTMLPreloadScannerTest
both use a local MockHTMLResourcePreloader class for
testing. That is normally no big deal but in jumbo builds they
can be compiled in the same translation unit and then the classes
will collide. This patch gives the classes unique prefixes.


Change-Id: I29cd360e919c6b708a6021b6930b3347e5ae8194
Reviewed-on: https://chromium-review.googlesource.com/574707
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Charlie Harrison <csharrison@chromium.org>
Cr-Commit-Position: refs/heads/master@{#487242}
Renaming unit_test class MockLocalFrameClient to not collide.
Both FrameFetchContextTest and MixedContentCheckerTest deckare a class
named MockLocalFrameClient. That is normally no big deal
but in jumbo builds they can be compiled in the same translation unit
and then the functions will collide. This patch adds a prefix to
the class names to make them more unique.


Change-Id: I215f7edafa2fa0b229dc5847a1e158df825e8c27
Reviewed-on: https://chromium-review.googlesource.com/574708
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#487140}
Renaming unit_test class StubLocalFrameClient to not collide.
ElementVisibilityObserverTest, HTMLMediaElementEventListenersTest and
VideoPainterTest all use a local StubLocalFrameClient class for
testing. That is normally no big deal but in jumbo builds they
can be compiled in the same translation unit and then the classes
will collide. This patch gives the classes unique prefixes.


Change-Id: I47c7088486456e22ca776419a836f4e5d18be39c
Reviewed-on: https://chromium-review.googlesource.com/574605
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#487122}
Include less from Color.h
Moved the rarely used Blend() overload to a new file ColorBlend.h,
since it requires heavy stuff to be included.

This change caused Image.h to lose its inclusion of FloatSize.h. Removed the
default value from a FloatSize parameter.

Change-Id: I9b32e425c86b237b4c3a69ec53e601faa713f56f
Reviewed-on: https://chromium-review.googlesource.com/553139
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Philip Rogers <pdr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#487119}
Use more unique names for blink core TestCase classes
It is fairly common to have a help struct with test data and a fair
portion of the code call that struct TestCase and put it in a fairly
global namespace. In jumbo builds those structs will collide so this
patch renames them to more specific names such as
MediaQuerySetTestCase or SizesCalcTestCase.


Change-Id: Ic02ef5062782a0ec3862ad3bffdc462574ca8a61
Reviewed-on: https://chromium-review.googlesource.com/574600
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#487114}
Renaming unit_test class MockValidationTestClient to not collide.
Both DocumentTest and HTMLFormControlTest uses a local
MockValidationTestClient class for testing. That is normally no big deal
but in jumbo builds they can be compiled in the same translation unit
and then they will collide. This patch gives the classes unique


Change-Id: If1f2d22fca4c5f7b3ad662f6ae746cef4baf48c3
Reviewed-on: https://chromium-review.googlesource.com/574174
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#487091}
Renaming unit_test class MockChromeClient to not collide.
LocalFrameViewTest, HTMLVideoElementPersistentTest and
PaintLayerScrollableTests all use a local MockChromeClient class for
testing. That is normally no big deal but in jumbo builds they
can be compiled in the same translation unit and then the classes
will collide. This patch gives the classes unique prefixes.


Change-Id: Ibd6c9d17e1e8dfbe42cbb254344e52a81ce48788
Reviewed-on: https://chromium-review.googlesource.com/574176
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#487090}
Avoid using "using" in global scope
"using namespace" in global scope introduces a lot of symbols into the
current scope and does not work well with jumbo. In case of WTF you
can also equally well just write a WTF:: prefix.

Change-Id: Id615f60151e0bc46cfe2a5e9a6a9313c412f1344
Reviewed-on: https://chromium-review.googlesource.com/570446
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#487076}
Renaming unit_test function ConstructConstraintSpace to not collide
ng_block_layout_algorithm_test and ng_constraint_space both use a local
function ConstructConstraintSpace for testing. That is normally
no big deal but in jumbo builds they can be compiled in
the same translation unit and then the functions will collide.
This patch gives the functions unique names.


Change-Id: I3941094aad201b7ec6796d63664da8cfba8056c3
Reviewed-on: https://chromium-review.googlesource.com/574237
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#487072}
Move unit_test *_EQ macros to a shared file instead of repeating them
There are several classes in frame which have use of for instance
EXPECT_POINT_EQ and EXPECT_SIZE_EQ. The problem (beyond duplicating
code) is that in jumbo builds those defines collide.

This patch moves the shared macros to core/frame/FrameTestHelpers.h.

There are also equally named macros in cc/test/geometry_test_utils.h
but those work on gfx::Rect/gfx::RectF which is not quite API 
compatible (different character case).


Change-Id: I60cb7eff533e4dccc796937a027ec090071cd5c2
Reviewed-on: https://chromium-review.googlesource.com/574179
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#487071}
Be more specific about namespace for _ in unit tests
There is a gtest namespace ::testing and a helper namespace in blink
called ::blink::testing. If both are visible to the compiler,
::blink::testing will be used first and classes in ::testing will not
be found. This happens in jumbo builds so we better be more specific.


Change-Id: I4da27383432226191b0fcb72f3c54784698f0262
Reviewed-on: https://chromium-review.googlesource.com/574488
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#487070}
Add support for jumbo_component.
Normal jumbo_target has the wrong default configs for components so this
adds a new jumbo_component that has the right default configs.

Bug: 713137
Change-Id: I32fd2d015162d85b7ff07d5515489b9e33cfb987
Reviewed-on: https://chromium-review.googlesource.com/571790
Reviewed-by: Dirk Pranke <dpranke@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#487068}
Deduplicate helper class SampleInterpolation in unit tests
Both InterpolableValueTest and InterpolationEffectTest use an
identical class for value testing. These classes collided in jumbo
builds where they were compiled in the same translation unit.

This patch moves the class to AnimationTestHelper.h and changes its
name to be more descriptive now when it isn't as close to where it
is used anymore.

Also changing the name of the kDuration constant that interfered
with blink::kDuration.


Change-Id: Ic90cec2972f5464d7932b2ba91994273968e87c4
Reviewed-on: https://chromium-review.googlesource.com/574489
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#487067}
Renaming unit_test classes Mock* to not collide
IdleDeadlineTest and ScriptedIdleTaskControllerTest both use similarly
names mock classes, MockScheduler, MockThread and MockPlatform which
collide in jumbo builds where they are merged into the
same translation unit.

This patch gives the classes unique names.


Change-Id: I305cb3fbdfbd3b3b6fc7c18e8c3ceccf89da863e
Reviewed-on: https://chromium-review.googlesource.com/574487
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#487066}
Renaming unit_test class MockCanvas to not collide.
PageOverlayTest and PrintContextTest both use a local mock
test class named MockCanvas for testing. That is normally
no big deal but in jumbo builds they can be compiled
in the same translation unit and then the classes
will collide. This patch gives the classes unique names.


Change-Id: Icfcb2b4b553e50e08cb6ac56712e4e9aa5f2b69e
Reviewed-on: https://chromium-review.googlesource.com/574349
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#487065}
Avoiding redefining LineBreakType in unit_tests.
There is blink enum class LineBreakType used to correctly layout text.
That makes it unsuitable to use the same name in a unit_test since they
may collide, and actually will collide in jumbo builds.

This patch changes LineBreakType to NewlineType


Change-Id: I3c5ae6ea5b6e199990c8b51c3a55eb1d17a8f19e
Reviewed-on: https://chromium-review.googlesource.com/574238
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#487064}
Renaming unit_test functions Ident and Dimension to not collide.
CSSTokenizerTest already uses functions named Ident and Dimension so to
avoid special casing in jumbo builds where the tests are compiled
together, rename them here.


Change-Id: I6b600c269463d897b6d56287e450e37d027b2911
Reviewed-on: https://chromium-review.googlesource.com/574173
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#487058}
Renaming unit_test class TestParam to not collide.
HTMLMediaElementTest and MediaCustomControlsFullscreenDetectorTest
both use a local TestParam struct/enum for testing.
That is normally no big deal but in jumbo builds they
can be compiled in the same translation unit and then the classes
will collide. This patch gives the classes unique prefixes.


Change-Id: I17a4d3a25e38bc0789071fcec31b066a385d34a0
Reviewed-on: https://chromium-review.googlesource.com/574178
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#487057}
Renaming unit_test function RegisterMockedURLLoad to not collide.
There is a shared RegisterMockedURLLoad in URLTestHelpers and a couple of
local ones imported with "using" or locally declared. That is
normally no big deal but in jumbo builds they
can be compiled in the same translation unit and then the functions
will collide. This patch removes a "using" and renames a function
to make the names more unique.


Change-Id: I6866f13bd1903e42269b7286645a9f07396b68a8
Reviewed-on: https://chromium-review.googlesource.com/574180
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#487056}
Renaming unit_test class PreconnectTestCase to not collide.
HTMLResourcePreloaderTest and HTMLPreloadScannerTest
both use a local PreconnectTestCase struct for
testing. That is normally no big deal but in jumbo builds they
can be compiled in the same translation unit and then the classes
will collide. This patch gives the classes unique prefixes.


Change-Id: I99f315843fd6908ba94595e852e6c1fac6acdedb
Reviewed-on: https://chromium-review.googlesource.com/574177
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Reviewed-by: Yoav Weiss <yoav@yoav.ws>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#487053}
Avoid using the function name Function in unit_tests.
There is a ::Function template in wtf/Functional.h and if someone else
defines a function with the same name that template will be harder to
use. This is more of a problem in jumbo builds where more code is
visible so that both the definitions becomes visible at the same time.


Change-Id: I0be2f2e2441f3e5db0049f65e1b4c0be8997d586
Reviewed-on: https://chromium-review.googlesource.com/574028
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#487050}
Be more specific about namespace for Message in unit tests
There is a gtest namespace ::testing and a helper namespace in blink
called ::blink::testing. If both are visible to the compiler,
::blink::testing will be used first and classes in ::testing will not
be found. This happens in jumbo builds so we better be more specific.


Change-Id: I912ed721a0ccae7b8e8b622020f87f15204362cf
Reviewed-on: https://chromium-review.googlesource.com/574027
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#487049}
don't forget to actually return the number of specified test jobs
TEST=Running browser_tests with the flags below, should print "Using 1 parallel jobs."
--run-manual --ui-test-action-max-timeout=350000 --test-launcher-jobs=1 --test-launcher-bot-mode --test-launcher-print-test-stdio=always

Change-Id: I33f2b4fc54b43ebec8a27c532da17146b42c07cd
Reviewed-on: https://chromium-review.googlesource.com/573380
Reviewed-by: Mostyn Bramley-Moore <mostynb@opera.com>
Commit-Queue: Mostyn Bramley-Moore <mostynb@opera.com>
Cr-Commit-Position: refs/heads/master@{#487014}
Use more unique names in fonts testcases
Many fonts tests use local helper classes TestRun, ExpectedRun and
helper macros DECLARE_RUNSVECTOR and CHECK_RUNS. With jumbo builds
those names start colliding so this patch gives the classes and
macros a prefix related to the actual test.

Change-Id: I494cfc182070ae37a87b68f08303fc8cc3ef9cfe
Reviewed-on: https://chromium-review.googlesource.com/570424
Commit-Queue: Emil A Eklund <eae@chromium.org>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#486866}
Explicit template forward declaration for platform/fonts
Doing an implicit template instantiation before doing an explicit
template instantiation in the same translation unit is a C++
violation. That happens if you jumbo compile blink platform but is
easy to avoid with a forward declaration such as the one this patch

Change-Id: I7b22e28b2bf8f2583598e97db69d68fa1613550e
Reviewed-on: https://chromium-review.googlesource.com/570444
Commit-Queue: Emil A Eklund <eae@chromium.org>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#486858}
Unduplicate SkiaScalarToHarfBuzzPosition
There were two implementation of SkiaScalarToHarfBuzzPosition and
in jumbo builds they collided. This patch merges them.

Change-Id: Ibea7aeffbfdf77eb3fd088949f912eb41e56c462
Reviewed-on: https://chromium-review.googlesource.com/570428
Commit-Queue: Emil A Eklund <eae@chromium.org>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#486856}
blink/platform: Be explicit about namespace testing to not mix it with blink::testing
There are two namespaces named testing used in Blink unit tests, one
from gtest and one internal helper namespace. If both are visible then
the gtest testing namespace won't be used unless prepended with ::, as
is already done in large parts of the code.


Change-Id: I48f6a3145886253576a53d1ad9c08307ceca0d52
Reviewed-on: https://chromium-review.googlesource.com/567143
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#486839}
Remove some jumbo exclusions no longer needed
The files listed in core_generated jumbo exclusions have since been
fixed so the exclusions are no longer necessary.


Bug: 713137
Change-Id: Ib9a9216147e9df7d8b196de761556d3f23997448
Reviewed-on: https://chromium-review.googlesource.com/571222
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#486804}
Merge the two identical To16Bit functions in font tests
There are two very small, identical, To16Bit functions in
font shaping tests. Since they caused collisions in jumbo builds and
I didn't want to exclude the files from jumbo files I've merged them
into a utilities file.

Change-Id: I0c7e7d4ee708431a6401de7a01790f78c4e75e08
Reviewed-on: https://chromium-review.googlesource.com/570426
Commit-Queue: Emil A Eklund <eae@chromium.org>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#486794}
--gtest_filter should only change NumParallelJobs' default value

Change-Id: Ib95bd85e2f1ad14e27ba8fa76f8b52f8e137e830
Reviewed-on: https://chromium-review.googlesource.com/569159
Reviewed-by: Paweł Hajdan Jr. <phajdan.jr@chromium.org>
Commit-Queue: Mostyn Bramley-Moore <mostynb@opera.com>
Cr-Commit-Position: refs/heads/master@{#486773}
Clean out some "using namespace WTF".
Some global "using namspace WTF" caused problems with jumbo builds
and since WTF is also meant to be used without using namespace WTF
this patch just replaces them with explicit namespaces.

Change-Id: Ifc06e163c095de0e2ce5a8c69123578557ef0dee
Reviewed-on: https://chromium-review.googlesource.com/565413
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Commit-Queue: bratell at Opera <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#486735}
Fix error in error message concatenation in jumbo script.
Best to not try to add a string to a set without converting the set to
a string first.


Bug: 713137
Change-Id: Id4c632b1f944fcafdd046983b1ddd4678c44928f
Reviewed-on: https://chromium-review.googlesource.com/564939
Reviewed-by: Bruce Dawson <brucedawson@chromium.org>
Commit-Queue: bratell at Opera <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#486706}
Rename 5*ExtraDataContainer to SomethingExtraDataContainer
There are five different classes in
third_party/WebKit/Source/platform/exported named ExtraDataContainer.
They are only used as local internal classes so they don't normally
collide in the compiler, but they do so in jumbo builds.

This patch renames them so that the names are more unique.

Bug: 742337
Change-Id: Iad42e0d29f600fabd6ea9081687a7107d3043282
Reviewed-on: https://chromium-review.googlesource.com/570052
Reviewed-by: Philip Rogers <pdr@chromium.org>
Commit-Queue: bratell at Opera <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#486481}
Rename the two different TestClient classes in fetch unit tests
In jumbo the two different TestClient classes clashed so this patch
renames them to not collide so that these files can be included in
jumbo compilations.


Change-Id: Ieea187ba6928df04df0059ad357730d7a82022bc
Reviewed-on: https://chromium-review.googlesource.com/570040
Commit-Queue: bratell at Opera <bratell@opera.com>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Reviewed-by: Takeshi Yoshino <tyoshino@chromium.org>
Cr-Commit-Position: refs/heads/master@{#486367}
Let there be only one global class Result in fetch unit tests
Both BytesConsumer::Result and WebDataConsumerHandle::Result are
imported into global/blink namespace in fetch unit tests. That causes
collisions in jumbo builds so this removes the
WebDataConsumerHandle::Result in that namespace.


Change-Id: I52f860aa4ccd59b4be944f950c25797022582b68
Reviewed-on: https://chromium-review.googlesource.com/570042
Reviewed-by: Takeshi Yoshino <tyoshino@chromium.org>
Commit-Queue: bratell at Opera <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#486346}
Reduce the number of MockClient classes in fetch unit tests
Jumbo builds had the three different MockClient classes colliding. This
patch renames two of them so that they will not collide.


Change-Id: Ib646bdb3ed4e08cbf28b736a67d4fcb3646ede00
Reviewed-on: https://chromium-review.googlesource.com/570043
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Reviewed-by: Takeshi Yoshino <tyoshino@chromium.org>
Commit-Queue: bratell at Opera <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#486344}
Merge three identical ToString implementations in fetch unit tests
In jumbo builds the ToString implementations collided and since they
are identical anyway, this patch just merges them to one implementation.


Change-Id: I379a6e7bf759e12ae6f37347e8e2e80154a1079b
Reviewed-on: https://chromium-review.googlesource.com/570039
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Reviewed-by: Takeshi Yoshino <tyoshino@chromium.org>
Commit-Queue: bratell at Opera <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#486343}
Make the fetch unit test Command class not collide.
In jumbo builds the two Command classes in fetch unit_tests would collide
since they are both imported into the same global/blink scope with
"using" statements. This patch changed the "using" statements to give
the classes different names.


Bug: 742239
Change-Id: I37a783755049ff36ebd63f6b432a0e07bce4a4db
Reviewed-on: https://chromium-review.googlesource.com/570018
Commit-Queue: bratell at Opera <bratell@opera.com>
Reviewed-by: Takeshi Yoshino <tyoshino@chromium.org>
Cr-Commit-Position: refs/heads/master@{#486342}
Deflake two tests in svg/animations/mozilla/
Pause the timeline after adjusting the current time, similarly to how
it's done in other tests in this directory and in other places. This
avoids flakiness due to the timing of the first frame differing from
that of the 'load' event.


Change-Id: Id9753fc1d5b53a389a59f9b8f36a8965fb9597d0
Reviewed-on: https://chromium-review.googlesource.com/569619
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#486323}
Show pointer (not I-beam) when mouse drags in the air
A bug surfaced when Blink started to allow hidden selections.
The condition "show I-beam if we have a non-empty selection"
became too generous.

We should show an I-beam when:
- Node is editable
- Node is selectable
- A link's text is being selected

Besides fixing the condition I moved its block into
ShouldShowIBeamForNode() to try to gather stray I-beam
logic into one place.



Change-Id: I5366462c713155754de39b0c5d11fa33656eb6e3
Reviewed-on: https://chromium-review.googlesource.com/566798
Reviewed-by: Yoshifumi Inoue <yosin@chromium.org>
Reviewed-by: David Bokan <bokan@chromium.org>
Commit-Queue: Hugo Holgersson <hugoh@opera.com>
Cr-Commit-Position: refs/heads/master@{#486308}
Remove kInitialFrameDelay from SMILTimeContainer::Start
This is an old hack to preserve behavior of certain tests. These tests
have since been fixed to not rely on this. Get rid of it and just call
UpdateAnimationsAndScheduleFrameIfNeeded(...) instead to schedule the
first frame just like any other.


Change-Id: I1ff2673a8d4b71ea237a2902f10599e08bcfb7d6
Reviewed-on: https://chromium-review.googlesource.com/564608
Reviewed-by: Philip Rogers <pdr@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#486115}
Drop inspector jumbo excludes as they are not needed
Some files excluded from jumbo compilation seems to compile just
fine in jumbo so this patch removes their special treatment.

Review-Url: https://codereview.chromium.org/2971153002
Cr-Commit-Position: refs/heads/master@{#486000}
Avoid duplicate functions: one AddStringToDigestor is enough
There are two implementation of AddStringToDigestor. Beyond being
one more than needed, they also conflict in jumbo builds.

This patch merges the two AddStringToDigestor and removes the
conflicting files from the jumbo exclusion list.

Review-Url: https://codereview.chromium.org/2800133003
Cr-Commit-Position: refs/heads/master@{#485992}
Rename a constant in editing unit tests to make it more unique.
kDescription is the name of two constants in editing unit_tests and
in jumbo builds those collides. This renames one of them
kTestDescription to make both constants have unique names.


Change-Id: I7fcb2fde1a6841ef92fe7d55a7b363da7c2c7fa0
Reviewed-on: https://chromium-review.googlesource.com/568146
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: bratell at Opera <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#485970}
Avoid naming conflict for Cache and Response in cachestorage
There are multiple Cache types and Response types so when importing
one of them into the global namespace you can easily get naming conflicts, especially with jumbo. This renames Cache and Protocol
locally to avoid such naming conflicts.

Review-Url: https://codereview.chromium.org/2968183002
Cr-Commit-Position: refs/heads/master@{#485939}
Also check jumbo_excluded_sources when jumbo is disabled
Since jumbo is still disabled by default and there is no active
bot that checks things, it is best to check that jumbo_excluded_sources
are correct also when jumbo is disabled.

Bug: 713137
Change-Id: I85bb92f283be240a704ce3ec0d5765933ba52016
Reviewed-on: https://chromium-review.googlesource.com/563683
Commit-Queue: bratell at Opera <bratell@opera.com>
Reviewed-by: Dirk Pranke <dpranke@chromium.org>
Cr-Commit-Position: refs/heads/master@{#485913}
Rename ToElement<>(ListedElement) to ToHTMLObjectElementFromListedElement
Having two sets of templates named ToElement caused compilation failures
when both templates were visible to the compiler at the same time.
Since one of the templates doesn't benefit from being a template
this patch renames it and makes it an ordinary function.

R=fs@opera.com, tkent@chromium.org

Bug: 738389
Change-Id: Ia6247ad0f794cc4094f3f73cd7492ad5d94407c2
Reviewed-on: https://chromium-review.googlesource.com/567141
Reviewed-by: Kent Tamura <tkent@chromium.org>
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: bratell at Opera <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#485904}
Avoid race at shutdown between browser process' IO thread and GPU thread
- When the GPU thread is *in-process* it runs inside the browser process.
- GpuChildThread is a ChildThreadImpl and a IPC::Listener.
- When GpuChildThread sees an error (or shutdown) of its IPC channel,
  it quits its message loop (= stops the thread).

The browser process' IOThread calls InProcessGpuThread::StopSoon()
while the in-process GPU thread destructs itself.

When InProcessGpuThread::StopSoon asks for task_runner() the in-process
GPU thread has - sometimes - already destructed itself and its
MessageQueue. The IOThread then sees task_runner() == null and crashes:

[FATAL:ref_counted.h(484)] Assert failed: ptr_ != nullptr.
0 base::debug::StackTrace::StackTrace()
1 base::debug::StackTrace::StackTrace()
2 logging::LogMessage::~LogMessage()
3 base::Thread::StopSoon()
4 base::Thread::Stop()
5 content::InProcessGpuThread::~InProcessGpuThread()
6 content::InProcessGpuThread::~InProcessGpuThread()
7 content::GpuProcessHost::~GpuProcessHost()
8 content::GpuProcessHost::~GpuProcessHost()
9 content::BrowserChildProcessHostImpl::TerminateAll()
10 content::BrowserProcessSubThread::IOThreadPreCleanUp()
11 content::BrowserProcessSubThread::CleanUp()
12 base::Thread::ThreadMain()
13 base::(anonymous namespace)::ThreadFunc()

If a thread runs in the browser process, only Thread::Stop should
stop its message loop. Otherwise, QuitWhenIdle could race Thread::Stop.


Review-Url: https://codereview.chromium.org/2973723003
Cr-Commit-Position: refs/heads/master@{#485895}
Avoid "using namespaces" when they might introduce colliding symbols.
SVGNames and HTMLNames share some symbols, like hrefAttr. When some
of the tests are compiled together in jumbo, having both
using namespace SVGNames and using namespace HTMLNames caused compilation


Change-Id: Id943efc79ac54a5b69b6095f622746f4e0fb0532
Reviewed-on: https://chromium-review.googlesource.com/567140
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: bratell at Opera <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#485652}
Use ::testing in tests to not mix with blink::testing
There are two namespaces testing, one in ::testing and one in
::blink::testing. If you are inside ::blink and the code knows about
both of them, it will use ::blink::testing first.

This causes issues with jumbo builds where more code is visible.


Change-Id: Ia879a40b1626ac6929fc74a0f31509614e6b7051
Reviewed-on: https://chromium-review.googlesource.com/567142
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: bratell at Opera <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#485650}
Rename one of two EXPECT_RECT_EQ.
Use the name EXPECT_RECT_APPROX_EQ for comparison of approximately
equal rects so that it doesn't collide with the other EXPECT_RECT_EQ
in jumbo builds.


Change-Id: I16815d32b06915db00f6a945883c7628cf343990
Reviewed-on: https://chromium-review.googlesource.com/567088
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: bratell at Opera <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#485648}
Make svg/W3C-SVG-1.1 animation tests "static"
These tests are animated, but has from a testing standpoint never gone
beyond sampling the frame at t=0. This is however partly by "accident"
because t=0 is just after 'load', while the frame dumped will have a
value of 't' greater than 0. To ensure t=0 is sampled, pause the

This commit was generated by a script (explaining the imperfect


Change-Id: I60bdd2d0fa30b09318b18d2eda39583821107199
Reviewed-on: https://chromium-review.googlesource.com/565723
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#485618}
Change code to make jumbo exceptions unnecessary in core/html
In jumbo several compilation units are merged so you have to
have more unique names in each one, and don't #undef macros
needed by other compilation units.


Review-Url: https://codereview.chromium.org/2971683003
Cr-Commit-Position: refs/heads/master@{#485585}
Use the same sqlite header configuration in all of webdatabase
Some of third_party/WebKit/Source/webdatabase uses sqlite withq
internals exposed and some uses it with internals not exposed. That
mismatch causes issues in jumbo builds since it compiles several files
together and need headers to say the same thing.

This changes webdatabase so that it all compile with the


Bug: 740542
Change-Id: I0b5c66fde7d191afd7a7143ef32c9c6f1b21b9e2
Reviewed-on: https://chromium-review.googlesource.com/565502
Reviewed-by: Michael Nordman <michaeln@chromium.org>
Commit-Queue: bratell at Opera <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#485558}
Add missing includes to media_router_file_dialog.cc
Both Profile and Browser are used in code.


Review-Url: https://codereview.chromium.org/2966033002
Cr-Commit-Position: refs/heads/master@{#485557}
Only compile the PNG encoder once.
The PNG fuzzer included all of PNGImageDecoder.cpp and effectively
compiled it a second time. Since the fuzzer already depends on the
png encoder it will just be linked together anyway.

This double compilation caused jumbo errors because symbols appeared

Change-Id: I0ef1502ba90247e34c33055056bdeb808e0dbb89
Reviewed-on: https://chromium-review.googlesource.com/565411
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: bratell at Opera <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#485555}
Merge Android manifests when assembling apk
Merge all resource dependency manifests using the manifest merger from the
Android SDK, providing the functionality described in

Removing the nontrivial manifest guard in the android_aar_prebuilt() template
will be done in a follow-up change, as well as removing pre-merged manifest
tags, such as "com.google.android.gms.version" meta-data.

Bug: 643967
Change-Id: Ifdf9f3f76f5c80f1a2326dcd47045d032556936f
Reviewed-on: https://chromium-review.googlesource.com/558296
Reviewed-by: Bo Liu <boliu@chromium.org>
Reviewed-by: Andrew Grieve <agrieve@chromium.org>
Commit-Queue: Ingemar Ådahl <ingemara@opera.com>
Cr-Commit-Position: refs/heads/master@{#485303}
Avoid global using namespace statements in modules/sensor
global using namespace statements cause issues with jumbo builds so this
patch moves and removes two such occurances in modules/sensor.

An alternative is to import explicit symbols rather than the full


Change-Id: Iafc85a856b02b381dae6244b2fc3acedc37e30db
Reviewed-on: https://chromium-review.googlesource.com/565296
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: bratell at Opera <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#485277}
Renamed a local class Function in a test to not collide with WTF.
There is a Function<> template in WTF/Functional.h which is shadowed
or collides with any local definitions of Function. This is not always
a problem, but it caused problems in Jumbo builds so let us rename
it to something harmless.

Change-Id: Ib594b2673a1dce6b4647445d3377b1e1099849da
Reviewed-on: https://chromium-review.googlesource.com/563667
Commit-Queue: bratell at Opera <bratell@opera.com>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#485273}
Add include guards to some generated files in core/css.
A couple of files in core/css were missing include guards which broke
jumbo builds.


Change-Id: I1d50e8b62f4926c054d51b48ab4f4edf5df5b76d
Reviewed-on: https://chromium-review.googlesource.com/565291
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: bratell at Opera <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#485272}
Jumbo for blink/core generated files as well (saving 8 CPU minutes)
The target that compiles generated files does not use the same
template as other code in blink core so it didn't automatically become
jumbo enabled. Since it's a non-negliable part of the build time (~1%)
this patch enables jumbo for this target as well.


Review-Url: https://codereview.chromium.org/2973603003
Cr-Commit-Position: refs/heads/master@{#485267}
Add jumbo support for Blink/core generated files
Core generated files does not use the same template as most blink core
code so it needs to be explicitly turned on (note jumbo is still by
default disabled so normal builds are not yet affected).

This saves about 8 CPU minutes for me.

Bug: 713137
Change-Id: I73ad558021b245c8742672cd3903e27dfdf48ab5
Reviewed-on: https://chromium-review.googlesource.com/563682
Reviewed-by: Philip Rogers <pdr@chromium.org>
Commit-Queue: bratell at Opera <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#485232}
Deduplicate CopyBytes in modules/crypto
The two identical functions CopyBytes collided in a jumbo build so
this is primarily to avoid having to exclude one of the files from the
jumbo building.


Review-Url: https://codereview.chromium.org/2972023002
Cr-Commit-Position: refs/heads/master@{#485231}
Mojo: Be more explicit with namespace 'testing'
There are two namespaces named testing used in Blink unit tests, one
from gtest and one internal helper namespace. If both are visible then
the gtest testing namespace won't be used unless prepended with ::, as
is already done in large parts of the code.

This is more important for jumbo builds where the visibility of code


Change-Id: Iaed685c8750fbffbaac384aabc4e2a8f54bcf5c0
Reviewed-on: https://chromium-review.googlesource.com/563619
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Commit-Queue: bratell at Opera <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#485226}
Some documentation for the jumbo feature.

Review-Url: https://codereview.chromium.org/2968963002
Cr-Commit-Position: refs/heads/master@{#485222}
Adjust svg/animations/animate-linear-discrete-additive*.svg
In these tests we want to sample animation values at a certain point in
time. We are however sampling the animations at the next frame that is
painted - at which point the timeline may have advanced, and hence we
sample at t+<framedelay> (or thereabout) instead. Currently this works
"fine" because the first animation frame follows special scheduling
rules, making sure the timeline won't advance within this time window.
Rather than relying on this, just pause the timeline instead.


Change-Id: I2314b435861050fd0163670928318563bd09f271
Reviewed-on: https://chromium-review.googlesource.com/563624
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Reviewed-by: Philip Rogers <pdr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#485166}
Be explicit about namespace testing to not mix it with blink::testing
There are two namespaces named testing used in Blink unit tests, one
from gtest and one internal helper namespace. If both are visible then
the gtest testing namespace won't be used unless prepended with ::, as
is already done in large parts of the code.


Review-Url: https://codereview.chromium.org/2967013002
Cr-Commit-Position: refs/heads/master@{#484966}
Use unique variable names in gperf generated code
By default gperf generates code with the types and variables
stringpool_t and stringpool. If jumbo combines more than one gperf
generated file those collides.

This patch changes the variable names to something more unique.


Review-Url: https://codereview.chromium.org/2972193002
Cr-Commit-Position: refs/heads/master@{#484961}
Avoid PermissionDescriptor name collision.
Fix to allow us to skip a permissions exclusion for jumbo. Locally rename
one of them to MojoPermissionDescriptor.

Review-Url: https://codereview.chromium.org/2965333002
Cr-Commit-Position: refs/heads/master@{#484953}
Drop a "using namespace WTF" in V8CSSStyleDeclarationCustom.cpp
global "using namespace WTF" causes compiler warnings in jumbo builds
and in general extend the global namespace a lot which increases the
risk of symbol conflicts.

This patch changes a "using namespace WTF" to an explicit
Review-Url: https://codereview.chromium.org/2975603002
Cr-Commit-Position: refs/heads/master@{#484938}
Changing XPathGrammer.y to not use global using blink
When using "using namespace Foo" at global level you will
introduce a lot of symbols into the global scope which will make
it harder for jumbo (unity builds/merged files) to compile without
symbol collisions.

Also, global using namespace statements will, with the current
implementation of jumbo not compile because of a compiler warning.

This patch changes to more explicit namespaces.


Review-Url: https://codereview.chromium.org/2974653002
Cr-Commit-Position: refs/heads/master@{#484928}
Make ElementFactory.cpp.tmpl generate unique names
ElementFactory is used for both SVG and HTML and some names it
exported were the same so in a jumbo build they would collide. By
making the name unique we don't have to exclude the generated files
from jumbo building.


Review-Url: https://codereview.chromium.org/2965343002
Cr-Commit-Position: refs/heads/master@{#484911}
remove the OS() macro
Replace OS(FOO) macro calls with defined(OS_FOO) and remove the OS macro.

This is mostly a mechanical change:

	for file in `git grep -w "OS($p)" | sed -e "s/:.*//" | uniq`
		sed -i -e "s/OS($p)/defined(OS_$p)/g" $file

Followed by some semi-automatic build/build_config.h inclusion
and clang format.


Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: I69e567334665c331b46e04be86a60aeca4a3e9c4
Reviewed-on: https://chromium-review.googlesource.com/561010
Commit-Queue: Mostyn Bramley-Moore <mostynb@opera.com>
Reviewed-by: Kent Tamura <tkent@chromium.org>
Cr-Commit-Position: refs/heads/master@{#484853}
Handle re-entrant AttachLayoutTree for the same node.
Lazy whitespace re-attachment introduced tracking of the last seen in-
flow box in AttachContext. We have three places where we may end up
calling AttachLayoutTree from AttachLayoutTree for the same element[1]
causing re-entrancy issues for AttachContext. The AttachContext would
keep a pointer to the LayoutObject created by the outer AttachLayoutTree
while that may have been deleted by the inner AttachLayoutTree.

Here we store the passed-in AttachContext on a SyncReattachContext stack
and pass it, with the previous in-flow restored, when re-entering

[1] This typically happens when we find out that a resource won't load
while attaching the layout object and we immediately decide to render
fallback content.

Bug: 738596
Change-Id: I978f77fbaa481a713b21ece92aabac39d37af450
Reviewed-on: https://chromium-review.googlesource.com/560836
Reviewed-by: meade_UTC10 <meade@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#484847}
Add command line flag to override suppression.xml path
Let the suppression script optionally write to a configuration file set
on the command line, rather than the default.

//build_overrides/build.gni can set a 'lint_suppressions_file' variable,
allowing different products to override the lint suppression
configuration. Updating this overriding suppression configuration can
otherwise be cumbersome.

Bug: 737897
Change-Id: I1551d7e6951f212e42ee79ffac568e9a5208aec9
Reviewed-on: https://chromium-review.googlesource.com/561137
Reviewed-by: Peter Wen <wnwen@chromium.org>
Reviewed-by: Andrew Grieve <agrieve@chromium.org>
Commit-Queue: Ingemar Ådahl <ingemara@opera.com>
Cr-Commit-Position: refs/heads/master@{#484621}
Use aggregated bindings for jumbo as well as for Windows.
If the builder requests a jumbo build, use aggregated bindings since
that is more or less the same thing.


Review-Url: https://codereview.chromium.org/2971713002
Cr-Commit-Position: refs/heads/master@{#484298}
Use cssvalue::CounterValue instead of blink::CSSCounterValue
A cleanup patch used the wrong namespace for CSSCounterValue. It still
works but it was not right.


Review-Url: https://codereview.chromium.org/2967163003
Cr-Commit-Position: refs/heads/master@{#484276}
Set Python shebang in build to /usr/bin/env python
A common solution for developers using Linux distributions were
/usr/bin/python is linked to /usr/bin/python3 is to put a python ->
python2 symlink earlier in the PATH when working with python2-only
projects. This doesn't work when shebangs bypasses any environment

The change was generated by executing:
  sed -i 's|#!/usr/bin/python|#!/usr/bin/env python|' \
    $(grep -rl '#!/usr/bin/python' build)

Change-Id: I2de77532fd31a0348ec58f4d9af4b7172dc1b9ed
Reviewed-on: https://chromium-review.googlesource.com/559347
Reviewed-by: John Budorick <jbudorick@chromium.org>
Commit-Queue: Ingemar Ådahl <ingemara@opera.com>
Cr-Commit-Position: refs/heads/master@{#484266}
Support C and Objective-C in jumbo base scripts.
Up until now only C++ files were merged. With this Objective-C
will also be merged and if there are any C files (there are only
a few spread out) then those will also be handled.


Review-Url: https://codereview.chromium.org/2972533002
Cr-Commit-Position: refs/heads/master@{#484230}
Escape '$' when generating lint suppression regexp
Java class names (for inner classes) may contain '$', which is a EOL
pattern marker in Java regexps. To ensure proper regexps are generated,
escape the marker to allow the regexp to match the entire path.

Bug: 737882
Change-Id: I935d06c197453b674bb0e493d0887e271fdd9610
Reviewed-on: https://chromium-review.googlesource.com/554750
Commit-Queue: Ingemar Ådahl <ingemara@opera.com>
Reviewed-by: Andrew Grieve <agrieve@chromium.org>
Cr-Commit-Position: refs/heads/master@{#484228}
Drop unused member loader_ in testing file SimRequest.h
This caused compilation errors (through a compiler warning) in
jumbo builds. I speculate that if the compiler (clang) sees both
an object creation and the full declaration it will complain about
members that are never accessed.


Review-Url: https://codereview.chromium.org/2969203002
Cr-Commit-Position: refs/heads/master@{#484224}
Be explicit about namespace testing to not mix it with blink::testing
There are two namespaces named testing used in Blink unit tests, one
from gtest and one internal helper namespace. If both are visible then
the gtest testing namespace won't be used unless prepended with ::, as
is already done in large parts of the code.


Review-Url: https://codereview.chromium.org/2970833002
Cr-Commit-Position: refs/heads/master@{#484087}
Scripts for unity/jumbo (default disabled) compilation.
To speed up compilation times, jumbo allows files to be compiled
together. This is a well known method ("unity builds") to both
compile faster and create a poor man's "full program optimization".
For Chromium we are only interested in the compile times.

This patch includes the basic scripts that do the source file merging
and changes Blink Core to use those scripts. If the gn configuration
includes: use_jumbo_build = true then Blink Core will use jumbo
compile. Otherwise it will compile as usual.

The expected speedup from using Jumbo on Blink Core (and nothing else)
is about 17% of the content_shell+blink_tests compilation CPU
time. This is about half an hour for people building with an ordinary
computer, but less both in percentage and minutes if using some kind
of build accelerator like goma.

More information in


Review-Url: https://codereview.chromium.org/2963733003
Cr-Commit-Position: refs/heads/master@{#483986}
(reland) base::LaunchUnitTestsSerially should not be overridable by cmdline
(reland) base::LaunchUnitTestsSerially should ignore the --test-launcher-jobs
command line switch, and never use parallel jobs.  To achieve this, change
callers of base::TestLauncher to pass the requested number of parallel test
jobs, instead of the default number of parallel test jobs.

And while we're at it, let's remove TestLauncherDelegate's
AdjustDefaultParallelJobs method, which no longer has any users.


Change-Id: I4085fb21c1dce467527210407e3913ff3b5e3bc6
Reviewed-on: https://chromium-review.googlesource.com/549342
Commit-Queue: Mostyn Bramley-Moore <mostynb@opera.com>
Reviewed-by: Henrik Kjellander <kjellander@chromium.org>
Reviewed-by: Alok Priyadarshi <alokp@chromium.org>
Reviewed-by: Paweł Hajdan Jr. <phajdan.jr@chromium.org>
Reviewed-by: Alex Clarke <alexclarke@chromium.org>
Cr-Commit-Position: refs/heads/master@{#483909}
add a bunch of missing header guards
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng;master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I2175e7c672332c9046e8cc5d60f246a62f62478b
Reviewed-on: https://chromium-review.googlesource.com/558409
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Mostyn Bramley-Moore <mostynb@opera.com>
Cr-Commit-Position: refs/heads/master@{#483907}
remove a couple of vim modelines
We don't appear to use vim modelines in the codebase, and moreover
these conflict with our style guide.

Change-Id: Iac4a1c5dc7ac1b4b51b8862c2d943ffe0d038a7b
Reviewed-on: https://chromium-review.googlesource.com/558407
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Mostyn Bramley-Moore <mostynb@opera.com>
Cr-Commit-Position: refs/heads/master@{#483875}
Turn MediaLog usage from plain wrong into questionable
ReadConcatentatedBoxes() was handing out BoxReader instances that
referred to MediaLog objects that had gone out of scope.


Review-Url: https://codereview.chromium.org/2966493005
Cr-Commit-Position: refs/heads/master@{#483840}
Implement lazy (re-)attachment of whitespace.
The existing implementation of re-attachment of whitespace nodes had
performance issues because it tried to re-attach whitepace nodes as
early as possible, leading to multiple re-attachments of the same node
and multiple sibling-walks past the same out-of-flow elements.

Instead, this CL stores the last seen text node in a new
WhitespaceAttacher object and delays the re-attachment of that text
node until we know its need for a LayoutObject for the current layout
tree rebuild. In particular, we don't re-attach the whitespace node
when previous siblings are/become display:none or out-of-flow.

Contrary to what last_text_node did, the WhitespaceAttacher persist
the last seen text node in the flat tree order and across
display:contents and slot/content element which fixes various
correctness issues in addition to performance issues.

In addition to the last visited text node, we also store the last
seen display:contents element and only walk the display:contents
subtree when needed to find its first in-flow whitespace descendant.


Change-Id: Id397986c49a4bc75e831da1ff8b679f2043873c3
Reviewed-on: https://chromium-review.googlesource.com/517940
Commit-Queue: Rune Lillesveen <rune@opera.com>
Reviewed-by: Hayato Ito <hayato@chromium.org>
Reviewed-by: meade_UTC10 <meade@chromium.org>
Cr-Commit-Position: refs/heads/master@{#483683}
Allow outdirs when !enable_extensions and !enable_print_preview
This lets us generate outdirs for builds where enable_extensions
and enable_print_preview are false. This is a configuration that
is used by Opera's TV SDK.

This can be seen as a fixup to https://codereview.chromium.org/2904443004/ .


TEST=gn gen --args='enable_extensions=false enable_print_preview=false' out/GnTest

Review-Url: https://codereview.chromium.org/2958243002
Cr-Commit-Position: refs/heads/master@{#483654}
Include less from LayoutTheme.h
Change-Id: I034264c0fceec2155ef823717092d2cd36a2887b
Reviewed-on: https://chromium-review.googlesource.com/553140
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Kent Tamura <tkent@chromium.org>
Cr-Commit-Position: refs/heads/master@{#483338}
Don't include ComputedStyle.h where not needed.
Also removed unnecessary inclusions of core/dom/NodeComputedStyle.h

Because of this change, 13 more compilation units no longer include ComputedStyle.h

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng;master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I2a647d891c7e0957e7ee0f96ebc6e2face6e0c14
Reviewed-on: https://chromium-review.googlesource.com/553259
Reviewed-by: Rune Lillesveen <rune@opera.com>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#483324}
Roll src/third_party/ffmpeg/ 06ac9ea36..88c555e9e (2 commits)

$ git log 06ac9ea36..88c555e9e --date=short --no-merges --format='%ad %ae %s'
2017-06-28 mostynb add ffmpeg_use_atomics_fallback gn arg
2017-06-06 jrummell Remove unused configs for linux-noasm/arm64

Created with:
  roll-dep src/third_party/ffmpeg

Change-Id: I33825f010c5a13026540e5c1454977961e9ec1b0
Reviewed-on: https://chromium-review.googlesource.com/553379
Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
Commit-Queue: Mostyn Bramley-Moore <mostynb@opera.com>
Cr-Commit-Position: refs/heads/master@{#483211}
Include less from ComputedStyle.h (and ComputedStyleBase.h and SVGComputedStyle.h).
Change-Id: I42edad3643a1a9c76bb5281d5771045678304533
Reviewed-on: https://chromium-review.googlesource.com/553258
Reviewed-by: Rune Lillesveen <rune@opera.com>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#483315}
Don't include StyleResolverState.h where not needed.
It involves ComputedStyle.h, which is heavy.

Change-Id: I345d1c0fd69dfb68c0e96b5af0f932e1d67405f1
Reviewed-on: https://chromium-review.googlesource.com/553260
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Reviewed-by: Rune Lillesveen <rune@opera.com>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#483310}
Include less from Length.h
Moved parts of Length::Blend() into the .cpp files, since it requires a heavy

Change-Id: I527d8cfb119e7475f00d2664ae4788e80cf4b479
Reviewed-on: https://chromium-review.googlesource.com/553299
Reviewed-by: Philip Rogers <pdr@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#483301}
Separate initial style and viewport/ICB style.
We store the initial containing block/viewport style on the Document
node. This style includes properties propagated from body/html like
writing-mode and overflow. It also sets things like z-index to a non-
auto value to establish a stacking context.

The problem was that this ComputedStyle was used for inheriting values
down to the root element as well, which is incorrect. The root element
should inherit initial values.

Instead, split StyleForDocument into InitialStyleForElement and a
StyleForViewport which applies viewport specific properties on top of
the initial values. Then use InitialStyleForElement as the style to
inherit from for the root element.

A bunch of writing-mode tests are modified to apply writing-mode on the
html element instead of body. The code change aligns with the spec and
how Gecko behaves by not propagating the writing-mode on body to the
html element. The intention of the modified tests was to have the effect
of setting the same writing-mode on the html element.

Bug: 732349,541529,590818,590835,731022
Change-Id: I4ff9c076c54483245db931ede6a2293ef5279cd2
Reviewed-on: https://chromium-review.googlesource.com/548379
Commit-Queue: Rune Lillesveen <rune@opera.com>
Reviewed-by: meade_UTC10 <meade@chromium.org>
Reviewed-by: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#482950}
Simplify OfflineAudioDestinationNode::DoOfflineRendering().
No need to track is-suspended state.


Review-Url: https://codereview.chromium.org/2959693002
Cr-Commit-Position: refs/heads/master@{#482417}
Retire audiosource-premature-gc.html test expectation.
Not needed following r482301.


Review-Url: https://codereview.chromium.org/2960733002
Cr-Commit-Position: refs/heads/master@{#482395}
Repost offline rendering task if GC prevents.

Review-Url: https://codereview.chromium.org/2959663002
Cr-Commit-Position: refs/heads/master@{#482301}
Move rounding up to 1.0f of border widths to the painting stage.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: Id6226e1df033e8ee72ffa32cde4c0d12fc3cbf36
Reviewed-on: https://chromium-review.googlesource.com/525536
Commit-Queue: Karl Anders Øygard <karlo@opera.com>
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Cr-Commit-Position: refs/heads/master@{#482233}
base::LaunchUnitTestsSerially should not be overridable
base::LaunchUnitTestsSerially should ignore the --test-launcher-jobs
command line switch, and never use parallel jobs.


Change-Id: I7e455a805b898f12e7adc91a41feb9627e008964
Reviewed-on: https://chromium-review.googlesource.com/543344
Commit-Queue: Mostyn Bramley-Moore <mostynb@opera.com>
Reviewed-by: Paweł Hajdan Jr. <phajdan.jr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#481990}
Store previous in-flow layout object in AttachContext.
This is split out of [1]. In order to avoid backtracking past out-of-
flow, display:none, and display:contents nodes of attached siblings
for whitespace re-attachment, we keep track of the last attached in-
flow box for an AttachLayoutTree().

The AttachContent is made non-const to pass on previous in-flow past
slot, content, and display:contents ancestors.

This CL does not have behavioral changes on its own.

[1] https://chromium-review.googlesource.com/c/517940/


Change-Id: I7bf5faaf3e9fe3d1b4f62c22076be6ad31790cfe
Reviewed-on: https://chromium-review.googlesource.com/543037
Reviewed-by: nainar <nainar@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#481853}
Hold global GC heap lock while making audio thread access.
For auxillary threads that rarely need to gain access to another
thread's GC heap, we have to ensure that this happens while the
heap-owning thread isn't concurrently GCing the heap. Otherwise there
is the possibility that heap objects might be relocated or mutated
while the auxillary thread tries to access.

A CrossThreadPersistent<T> (CTP) ensures reference liveness across
threads, but isn't sufficient to handle the wanted exclusive access
after a non-attached thread has deref'ed the persistent. So, for
this to happen, keep the global CTP lock while accessing a heap
object during offline audio rendering -- it specifically accessing
heap objects while a GC runs. As all GCs hold the lock on the global
CTP region while they run, this ensures exclusion.

It is clearly desirable to have all heap access be under the control
of the heap-owning thread, and threaded code should try hard to avoid
accessing another thread's heap objects. The CTP global lock is the
mechanism to use when that isn't practically feasible -- feel free to
add a "TODO(foo): avoid using" next to any instances that you end up

As regards audio thread cross-thread usage, the code needs auditing to
check if there are other places where setting up this CTP lock is


Review-Url: https://codereview.chromium.org/2951903003
Cr-Commit-Position: refs/heads/master@{#481809}
Update style for body when viewport defining element changes.
Whether the body box has scrolling overflow or not depends on the
computed overflow of the html element.

The HasOverflowClip flag, along with creating and removing a paint
layer on LayoutBlock is updated as part of SetStyle. However, if the
html element is recalculated, its overflow changing causing the
viewport defining element to change, but body did not need a recalc,
the overflow clip flag and paint layer is not updated for body.

This CL forces a SetStyle on the body LayoutObject to trigger the
necessary update after recalc when when the viewport defining element

This fixes scrollingElement.html in wpt/cssom-view.

Bug: 665927
Change-Id: I146c3e976edef28074bde6531fe4c6ec65ecb090
Reviewed-on: https://chromium-review.googlesource.com/544958
Commit-Queue: Rune Lillesveen <rune@opera.com>
Reviewed-by: Dave Tapuska <dtapuska@chromium.org>
Reviewed-by: Rick Byers <rbyers@chromium.org>
Cr-Commit-Position: refs/heads/master@{#481682}
Don't include ComputedStyle.h from Node.h
This caused it to be included in about 3400 compilation units. Removing this
dependency reduces the number to about 1000.

Compiling ComputedStyle.h takes almost 6 seconds here (which is worth an
investigation on its own).

Some changes elsewhere were required because of this, because they
inadvertently depended on things included via ComputedStyle.h . Keeping
Blob & co merely forward-declared in IDBValueWrapping.h required some
extra work.

The dependency was introduced here:

https: //codereview.chromium.org/2821193003
Change-Id: I5323c12821ae7e5408f6f5f1fee17222a0acf511
Reviewed-on: https://chromium-review.googlesource.com/543155
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: Rune Lillesveen <rune@opera.com>
Reviewed-by: nainar <nainar@chromium.org>
Reviewed-by: Joshua Bell <jsbell@chromium.org>
Cr-Commit-Position: refs/heads/master@{#481675}
No need to update layout for scrollingElement in compositing.
The style and layout is guaranteed to be clean at this point.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I28d877f2cafa9fe49e5ce922cf9b95d2e3fa8b2c
Reviewed-on: https://chromium-review.googlesource.com/540795
Reviewed-by: Chris harrelson <chrishtr@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#481440}
Element::ClientQuads() needs to take transforms into account.
In LayoutGeometryMap, when there's a non-uniform step (e.g. when inside
multicol), we fall back on doing it the slow way, i.e. we involve
LayoutObject::MapLocalToAncestor(). The mode flags initially passed from
ClientQuads() will just be echoed here, so we need to make sure that
kUseTransforms is specified.


Change-Id: I2a6fe83fb1332a19a581203d6c44c6924da3f027
Reviewed-on: https://chromium-review.googlesource.com/541339
Reviewed-by: Chris harrelson <chrishtr@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#481039}
[LayoutNG] Place floats correctly in non-physical writing modes.
Use logical offsets as much as we can, and have legacy layout convert
it for us when storing physical offsets in FloatingObject. Use
SetLogicalLeftForFloat() and SetLogicalTopForFloat() in
LayoutBlockFlow for this. They actually take inline and block offsets.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: Iffd4aa759cb520f03a7642f15c1e40279e48c2b9
Reviewed-on: https://chromium-review.googlesource.com/541363
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#480995}
Update FlagExpectations for enable-slimming-paint-v2
Based on results from https://chromium-review.googlesource.com/c/539399/3

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I461903e9bc16ea85abf8f7cb80c7a6b468a37c51
Reviewed-on: https://chromium-review.googlesource.com/541298
Reviewed-by: Chris harrelson <chrishtr@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#480830}
Update HasOverflowClip for body after style recalc.
The HasOverflowClip flag on LayoutBlock is updated as part of SetStyle,
but for body, the flag may need to change as a result of changing the
overflow property on the root element.

This CL always updates the flag for body after a style recalc. It's
only strictly necessary to do this if the root element is recalculated
and changes overflow between visible and a non-visible overflow, and at
the same time, the body element does not need a style recalc. Those
checks would complicate the code with little gain, so left to be done

This fixes scrollingElement.html and HTMLBody-ScrollArea_quirksmode.html
in wpt/cssom-view. The latter had a bug that it didn't clear the
"scroll" values set to check if overflowY could be set, which caused a
subsequent test to incorrectly fail in both Blink and Gecko.


Change-Id: I72ea8c51f2ec52320aaacd7373bc1a6e8a80dbed
Reviewed-on: https://chromium-review.googlesource.com/540596
Reviewed-by: Dave Tapuska <dtapuska@chromium.org>
Reviewed-by: Rick Byers <rbyers@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#480824}
Null check PrimaryFont().
No known way to reproduce, but this null check fixes a crasher reported
to the Opera crash servers for the desktop version of Opera. There was
already a null check for PrimaryFont() on the first line style in the
same method. This fix has been shipped and confirmed to fix the issue
for Opera.

Only seeing crashes for Windows on our crash server, so it might be a
Windows-only issue.


Change-Id: Ifca144023a319e4b900da12c62900819ba09f777
Reviewed-on: https://chromium-review.googlesource.com/538758
Reviewed-by: Dominik Röttsches <drott@chromium.org>
Commit-Queue: Rune Lillesveen <rune@opera.com>
Cr-Commit-Position: refs/heads/master@{#480406}
If min/max widths are already dirty during layout, don't recalculate.
Min/max widths are recalculated right before layout if they are dirty, but only
on those objects that actually need it, even if they are marked dirty. If the
object doesn't need min/max widths to figure out its own size, and no ancestor
needs this information either, the flag should just be left on indefinitely.
It's a waste of time to recalalculate the min/max widths for such objects, and
just leaving them dirty instead will also help the marking machinery cut off
earlier, since it will walk the containing block chain until it finds something
that's already marked.

If we get to layout and the flag is still set, it has to mean that nobody cares
about the min/max widths. This is a speculative fix for bug 732703, that
restores to the behavior we had prior to
https://chromium-review.googlesource.com/c/527640/ .


Change-Id: I146dd8e2d41712aece91fdb199a2254f1a24e43f
Reviewed-on: https://chromium-review.googlesource.com/538658
Reviewed-by: Emil A Eklund <eae@chromium.org>
Reviewed-by: Stefan Zager <szager@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#480774}
Need to dirty min/max widths on certain children, regardless of entry-point.
It doesn't matter whether it's during layout or not that we decide to
recalculate the min/max widths. If the min/max widths of a child is known to be
affected by changes in the containing block, we need to recalculate them
regardless of that.

This got broken by https://chromium-review.googlesource.com/527640 . It used to
work prior to that change, because then, dirty bits on the child of the
shrink-to-fit container were accidentally left behind from a previous layout
pass, so that min/max widths got properly recalculated the next time its parent
got marked dirty.


Change-Id: I011e2101d3913ac44284a6d18c16260a42ee7eee
Reviewed-on: https://chromium-review.googlesource.com/538694
Reviewed-by: Emil A Eklund <eae@chromium.org>
Reviewed-by: Stefan Zager <szager@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#480591}
add missing import for enable_extensions

Change-Id: I2c4b30ac5c93372952f7f3901929afc57bef6572
Reviewed-on: https://chromium-review.googlesource.com/537372
Reviewed-by: Mostyn Bramley-Moore <mostynb@opera.com>
Reviewed-by: Brett Wilson <brettw@chromium.org>
Commit-Queue: Mostyn Bramley-Moore <mostynb@opera.com>
Cr-Commit-Position: refs/heads/master@{#479784}
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}
Update LEGEND implementation to better match the spec.
Only rendered legends [1] should establish a new block formatting context and
shrink to fit.

[1] https://html.spec.whatwg.org/multipage/rendering.html#rendered-legend


Change-Id: I0aeddbd6d4b345bbe626be8ac2efd1fea501372e
Reviewed-on: https://chromium-review.googlesource.com/535595
Reviewed-by: Stefan Zager <szager@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Cr-Commit-Position: refs/heads/master@{#480791}
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}
Floor widths in LayoutTable::BorderBefore() and BorderAfter().
LayoutTable::BorderBefore() and LayoutTable::BorderAfter() incorrectly
did not floor widths.  Borders in tables are not yet sub pixel, so all
border widths should be integers.


Change-Id: I7ca1a93b4a749c112100634a984ebe825c1570a8
Reviewed-on: https://chromium-review.googlesource.com/520385
Reviewed-by: David Grogan <dgrogan@chromium.org>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Commit-Queue: Karl Anders Øygard <karlo@opera.com>
Cr-Commit-Position: refs/heads/master@{#480402}
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 FloatingObj