[Cocoa] Add UI delegate callback when window.close() is called
https://bugs.webkit.org/show_bug.cgi?id=137008
<rdar://problem/17801001>

Reviewed by Anders Carlsson.

Source/WebKit2:

Implement support infrastructure to notify the UI client when window.close() is called.

* UIProcess/API/Cocoa/WKUIDelegatePrivate.h: Added method declaration for -_webViewClose:.
* UIProcess/Cocoa/UIDelegate.h: Added override declaration for API::UIClient::close().
* UIProcess/Cocoa/UIDelegate.mm:
(WebKit::UIDelegate::setDelegate): Wire up delegate method to Objective-C selector, -[WKUIDelegatePrivate _webViewClose:].
(WebKit::UIDelegate::UIClient::close): Added; turns around and calls -[WKUIDelegatePrivate _webViewClose:] (if applicable).

Tools:

Add a test to ensure that -[WKUIDelegatePrivate _webViewClose:] is called on window.close()
for window opened via JavaScript (i.e. window.open()).

* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/WebKit2/open-and-close-window.html: Added.
* TestWebKitAPI/Tests/WebKit2Cocoa/OpenAndCloseWindow.mm: Added.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@173851 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Implement 'vhea', 'vmtx', and 'kern' tables in SVG -> OTF converter
https://bugs.webkit.org/show_bug.cgi?id=136971

Reviewed by Darin Adler.

This patch fills in the tables related to vertical metrics and kerning. The vertical metrics tables are
fairly straightforward. On the other hand, the 'kern' table has subtables which can be in a variety
of formats; however, according to Microsoft, Windows only allows one particular format, which doesn't
allow for ranges of glyphs to be described and therefore might lead to a large 'kern' table size. In
the interest of platform agnosticism I have implemented this particular format, and have not actually
witnessed any extremely large 'kern' tables in any of the fonts that I have looked at.

I also added basic support for the horiz-origin-x and horiz-origin-y SVG properties, though support
might not be perfect based on my testing.

Regarding testing, after this patch, almost all of our SVG fonts tests pass (barring tiny rebaselining;
the platform font system calculates slightly different advances than we did. These differences are tiny
and expected from such a dramatic shift in text handling engines.) There are around two dozen failing
tests left that look like they are actually indiciative of code problems.

* svg/SVGFontElement.cpp:
(WebCore::SVGFontElement::ensureGlyphCache): Refactor to accept new signature of
SVG*KernElement::build*KerningPair().
* svg/SVGHKernElement.cpp:
(WebCore::SVGHKernElement::buildHorizontalKerningPair): Refactor to allow for intermediate data to be
returned, which the SVG -> OTF font converter can use.
* svg/SVGHKernElement.h: New signature for buildHorizontalKerningPair().
* svg/SVGToOTFFontConversion.cpp:
(WebCore::SVGToOTFFontConverter::GlyphData::GlyphData): Save the glyph's vertical advance along with
the glyph's horizontal advance.
(WebCore::SVGToOTFFontConverter::KerningData::KerningData): This data represents a record in one of
the two 'kern' subtables, and as such needs to be sorted.
(WebCore::SVGToOTFFontConverter::KerningData::operator<): Sort comparator.
(WebCore::SVGToOTFFontConverter::appendHEADTable): Save the unitsPerEm locally to save a conditional.
(WebCore::SVGToOTFFontConverter::appendHHEATable): Ditto.
(WebCore::SVGToOTFFontConverter::appendHMTXTable): Ditto. Also use the horizontal advance as opposed to
the vertical advance.
(WebCore::SVGToOTFFontConverter::appendOS2Table): Save the unitsPerEm locally to save a conditional.
Also if the average advance isn't found in the font, use the missing glyph's advance. If there is no
missing glyph, bail and use the unitsPerEm.
(WebCore::SVGToOTFFontConverter::appendVORGTable): If the default vertical origin isn't found in the
font, use the missing glyphs's vertical origin. If there is no missing glyph, bail and use 0.
(WebCore::SVGToOTFFontConverter::appendVHEATable): Parallel of 'hhea' table, except for vertical info.
(WebCore::SVGToOTFFontConverter::appendVMTXTable): Parallel of 'hmtx' table, except for vertical info.
(WebCore::SVGToOTFFontConverter::appendKerningHelperFields): Computes and appends 4 fields that font
parsers need in order to do a binary search on the kern records.
(WebCore::SVGToOTFFontConverter::addCodepointRanges): For each codepoint in the ranges, look up its
representative glyph and append it to a set.
(WebCore::SVGToOTFFontConverter::addCodepoints): For each codepoint in the range, look up its
representative glyph and append it to a set.
(WebCore::SVGToOTFFontConverter::addGlyphNames): For each glyph name, look up its representative glyph
and append it to a set.
(WebCore::SVGToOTFFontConverter::computeKerningData): Call SVG*KernElement::build*KerningPair() and
iterate through all the data it returned, building up records into a Vector.
(WebCore::SVGToOTFFontConverter::appendKERNTable): Go through the vector that computeKerningData()
returned and actually write out the two subtables. One is for horizontal kerning and the other is for
vertical kerning.
(WebCore::CFFBuilder::CFFBuilder): Use the position of the glyph origin to perform the initial moveto
command.
(WebCore::transcodeGlyphPaths): Get the glyph's origin and pass it to the CFFBuilder.
(WebCore::SVGToOTFFontConverter::appendGlyphData): Templated overloading so that the missing glyph
gets a null SVGGlyphElement pointer but the rest of the glyphs get a non-null one.
(WebCore::SVGToOTFFontConverter::processGlyphElement): Called on both SVGGlyphElements and
SVGMissingGlyphElements, this pulls out information from the element and computs its path information.
(WebCore::SVGToOTFFontConverter::SVGToOTFFontConverter): Use the new templated version of
processGlyphElement so we can get the same glyph parsing behavior on SVGMissingGlyphElements. In
addition, populate two maps for the kerning table creation function to use.
(WebCore::SVGToOTFFontConverter::convertSVGToOTFFont): Append new tables.
* svg/SVGVKernElement.cpp:
(WebCore::SVGVKernElement::buildVerticalKerningPair): Refactor to allow for intermediate data to be
returned, which the SVG -> OTF font converter can use.
* svg/SVGVKernElement.h: New signature for buildVerticalKerningPair().

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@173852 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Add the baseline implementation of :nth-child(An+B of selector-list)
https://bugs.webkit.org/show_bug.cgi?id=136975

Patch by Benjamin Poulain <bpoulain@apple.com> on 2014-09-22
Reviewed by Darin Adler.

Source/WebCore:

Tests: fast/css/nth-child-of-classname.html
       fast/css/nth-child-of-complex-selector.html
       fast/css/nth-child-of-compound-selector.html
       fast/css/nth-child-of-tagname.html
       fast/selectors/nth-child-of-basics.html
       fast/selectors/nth-child-of-class-style-update.html
       fast/selectors/nth-child-of-complex-selectors.html
       fast/selectors/nth-child-of-selector-list.html

* css/SelectorChecker.cpp:
(WebCore::SelectorChecker::checkOne):
Pretty basic:
-Go over the previous siblings.
-For each sibling, test the selector list. If it matches, increase the count.

* cssjit/SelectorCompiler.cpp:
(WebCore::SelectorCompiler::addPseudoClassType):
Skip any case of the new selector. This will be implemented separately.

LayoutTests:

* fast/css/nth-child-of-classname-expected.html: Added.
* fast/css/nth-child-of-classname.html: Added.
* fast/css/nth-child-of-complex-selector-expected.html: Added.
* fast/css/nth-child-of-complex-selector.html: Added.
* fast/css/nth-child-of-compound-selector-expected.html: Added.
* fast/css/nth-child-of-compound-selector.html: Added.
* fast/css/nth-child-of-tagname-expected.html: Added.
* fast/css/nth-child-of-tagname.html: Added.
Cover basic styling and style sharing.

* fast/selectors/nth-child-of-basics-expected.txt: Added.
* fast/selectors/nth-child-of-basics.html: Added.
* fast/selectors/nth-child-of-complex-selectors-expected.txt: Added.
* fast/selectors/nth-child-of-complex-selectors.html: Added.
* fast/selectors/nth-child-of-selector-list-expected.txt: Added.
* fast/selectors/nth-child-of-selector-list.html: Added.
Cover querySelector and styling of various cases.

* fast/selectors/nth-child-of-class-style-update-expected.txt: Added.
* fast/selectors/nth-child-of-class-style-update.html: Added.
Basic case of style invalidation.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@173853 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Split the test parsing-css-nth-child-of.html in 3
https://bugs.webkit.org/show_bug.cgi?id=137013

Patch by Benjamin Poulain <bpoulain@apple.com> on 2014-09-22
Rubber-stamped by Christophe Dumez.

parsing-css-nth-child-of.html tends to be too slow in debug, causing timeout from time to time.

The speed issues will be fixed once we JIT the selector. Since it will take a while before the JIT is ready,
this patch splits the test in three to avoid timeouts on the bots.

* fast/css/parsing-css-nth-child-of-1-expected.txt: Renamed from LayoutTests/fast/css/parsing-css-nth-child-of-expected.txt.
* fast/css/parsing-css-nth-child-of-1.html: Added.
* fast/css/parsing-css-nth-child-of-2-expected.txt: Added.
* fast/css/parsing-css-nth-child-of-2.html: Renamed from LayoutTests/fast/css/parsing-css-nth-child-of.html.
* fast/css/parsing-css-nth-child-of-3-expected.txt: Added.
* fast/css/parsing-css-nth-child-of-3.html: Added.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@173856 268f45cc-cd09-0410-ab3c-d52691b4dbfc