⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Timeline



Jul 25, 2016:

10:46 PM Changeset in webkit [203713] by Chris Dumez
  • 12 edits in trunk

Second parameter to Range.setStart() / setEnd() should be mandatory
https://bugs.webkit.org/show_bug.cgi?id=160184

Reviewed by Ryosuke Niwa.

LayoutTests/imported/w3c:

Rebaseline W3C test now that more checks are passing.

  • web-platform-tests/dom/interfaces-expected.txt:

Source/WebCore:

Second parameter to Range.setStart() / setEnd() should be mandatory:

Also use "unsigned long" instead of "long" type for the parameter,
as per the specification.

Firefox and Chrome agree with the specification.

No new tests, rebaselined existing test.

  • dom/Range.cpp:

(WebCore::Range::setStart):
(WebCore::Range::setEnd):
(WebCore::Range::checkNodeWOffset):

  • dom/Range.h:
  • dom/Range.idl:
  • dom/RangeBoundaryPoint.h:

(WebCore::RangeBoundaryPoint::set):

LayoutTests:

Update tests to reflect behavior change.

  • editing/deleting/delete-uneditable-style.html:
  • fast/dom/non-numeric-values-numeric-parameters-expected.txt:
  • fast/dom/script-tests/non-numeric-values-numeric-parameters.js:
  • fast/regions/simplified-layout-no-regions.html:
10:27 PM Changeset in webkit [203712] by Chris Dumez
  • 4 edits in trunk

DOMTokenList.prototype.toString should be enumerable
https://bugs.webkit.org/show_bug.cgi?id=160182

Reviewed by Ryosuke Niwa.

LayoutTests/imported/w3c:

Rebaseline W3C test now that one more check is passing.

  • web-platform-tests/dom/interfaces-expected.txt:

Source/WebCore:

DOMTokenList.prototype.toString should be enumerable:

Firefox and Chrome agree with the specification.

No new tests, rebaselined existing test.

  • html/DOMTokenList.idl:
10:27 PM Changeset in webkit [203711] by n_wang@apple.com
  • 7 edits in trunk

AX: Expose autoFillButtonType to accessibility
https://bugs.webkit.org/show_bug.cgi?id=160179

Reviewed by Chris Fleizach.

Source/WebCore:

Added a new attribute on Mac to expose the auto-fill button type.

Changes are covered in modified test.

  • accessibility/AccessibilityObject.cpp:

(WebCore::AccessibilityObject::isValueAutofillAvailable):
(WebCore::AccessibilityObject::valueAutofillButtonType):
(WebCore::AccessibilityObject::isValueAutofilled):

  • accessibility/AccessibilityObject.h:

(WebCore::AccessibilityObject::passwordFieldValue):

  • accessibility/mac/WebAccessibilityObjectWrapperMac.mm:

(-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

LayoutTests:

  • accessibility/auto-fill-types-expected.txt:
  • accessibility/auto-fill-types.html:
8:04 PM Changeset in webkit [203710] by rniwa@webkit.org
  • 2 edits in trunk/Websites/perf.webkit.org

Build fix for Safari 9.

  • public/v3/models/build-request.js:

(BuildRequest.prototype.waitingTime): Don't use "const" in strict mode.

7:45 PM Changeset in webkit [203709] by rniwa@webkit.org
  • 15 edits
    2 adds in trunk/Websites/perf.webkit.org

Perf dashboard should show the list of a pending A/B testing jobs
https://bugs.webkit.org/show_bug.cgi?id=160138

Rubber-stamped by Chris Dumez.

Add a page to show the list of A/B testing build requests per triggerable. Ideally, we would like to
see a queue per builder but that would require changes to database tables and syncing scripts.

Because this page is most useful when the analysis task with which each build request is associated,
JSON API at /api/build-requests/ has been modified to return the analysis task ID for each request.

Also streamlined the page that shows the list of analysis tasks per Chris' feedback by consolidating
"Bisecting" and "Identified" into "Investigated" and moving the toolbar from the upper left corner
inside the heading to right beneath the heading above the table. Also made the category page serialize
the filter an user had typed in so that reloading the page doesn't clear it.

  • public/api/analysis-tasks.php:

(fetch_associated_data_for_tasks): Removed 'category' from the list of columns returned as the notion
of 'category' is only relevant in UI, and it's better computed in the front-end.
(format_task): Ditto.
(determine_category): Deleted.

  • public/api/test-groups.php:

(main):

  • public/include/build-requests-fetcher.php:

(BuildRequestsFetcher::fetch_for_task): Include the analysis task ID in the rows.
(BuildRequestsFetcher::fetch_for_group): Ditto. Ditto.
(BuildRequestsFetcher::fetch_incomplete_requests_for_triggerable): Ditto.
(BuildRequestsFetcher::results_internal): Ditto.

  • public/v3/index.html:
  • public/v3/main.js:

(main): Create a newly introduced BuildRequestQueuePage as a subpage of AnalysisCategoryPage.

  • public/v3/components/ratio-bar-graph.js:

(RatioBarGraph.prototype.update): Fixed a bogus assertion here. ratio can be any number. The coercion
into [-1, 1] is done inside RatioBarGraph's render() function.

  • public/v3/models/analysis-task.js:

(AnalysisTask.prototype.category): Moved the code to compute the analysis task's category from
determine_category in analysis-tasks.php. Also merged "bisecting" and "identified" into "investigated".
(AnalysisTask.categories): Merged "bisecting" and "identified" into "investigated".

  • public/v3/models/build-request.js:

(BuildRequest): Remember the triggerable and the analysis task associated with this request as well as
the time at when this request was created.
(BuildRequest.prototype.analysisTaskId): Added.
(BuildRequest.prototype.statusLabel): Use a shorter label: "Waiting" for "pending" status.
(BuildRequest.prototype.createdAt): Added.
(BuildRequest.prototype.waitingTime): Added. Returns a human readable time duration since the creation
of this build request such as "2 hours 21 minutes" against a reference time.
(BuildRequest.fetchTriggerables): Added.
(BuildRequest.cachedRequestsForTriggerableID): Added. Used when navigating back to

  • public/v3/pages/analysis-category-page.js:

(AnalysisCategoryPage): Construct AnalysisCategoryToolbar and store it in this._categoryToolbar since it
no longer inherits from Toolbar class, which PageWithHeading recognizes and stores.
(AnalysisCategoryPage.prototype.title):
(AnalysisCategoryPage.prototype.serializeState): Added.
(AnalysisCategoryPage.prototype.stateForCategory): Added. Include the filter in the serialization.
(AnalysisCategoryPage.prototype.updateFromSerializedState): Restore the filter from the URL state.
(AnalysisCategoryPage.prototype.filterDidChange): Added. Called by AnalysisCategoryToolbar to update
the URL state in addition to calling render() as done previously via setFilterCallback.
(AnalysisCategoryPage.prototype.render): Always call _categoryToolbar.render() since the hyperlinks for
the category pages now include the filter, which can be updated in each call.
(AnalysisCategoryPage.cssTemplate):

  • public/v3/pages/analysis-category-toolbar.js:

(AnalysisCategoryToolbar): Inherits from ComponentBase instead of Toolbar since AnalysisCategoryToolbar
no longer works with Heading class unlike other subclasses of Toolbar class.
(AnalysisCategoryToolbar.prototype.setCategoryPage): Added.
(AnalysisCategoryToolbar.prototype.setFilterCallback): Deleted.
(AnalysisCategoryToolbar.prototype.setFilter): Added. Used to restore from a serialized URL state.
(AnalysisCategoryToolbar.prototype.render): Don't recreate the input element as it clears the value as
well as the selection of the element. Also use AnalysisCategoryPage's stateForCategory to serialize the
category name and the current filter for each hyperlink.
(AnalysisCategoryToolbar.prototype._filterMayHaveChanged): Now takes an boolean argument specifying
whether the URL state should be updated or not. We update the URL only when a change event is fired to
avoid constantly updating it while an user is still typing.
(AnalysisCategoryToolbar.cssTemplate): Added.
(AnalysisCategoryToolbar.htmlTemplate): Added a button to open the newly added queue page.

  • public/v3/pages/build-request-queue-page.js:

(BuildRequestQueuePage): Added.
(BuildRequestQueuePage.prototype.routeName): Added.
(BuildRequestQueuePage.prototype.pageTitle): Added.
(BuildRequestQueuePage.prototype.open): Added. Fetch open build requests for every triggerables using
the same API as the syncing scripts.
(BuildRequestQueuePage.prototype.render): Added.
(BuildRequestQueuePage.prototype._constructBuildRequestTable): Added. Construct a table for the list of
pending, scheduled or running build requests in the order syncing scripts would see. Note that the list
of build requests returned by /api/build-requests/* can contain completed, canceled, or failed requests
since the JSON returns all build requests associated with each test group if one of the requests of the
group have not finished. This helps syncing scripts picking the right builder for A/B testing when it
had previously been unloaded or crashed in the middle of processing a test group. This characteristics
of the API actually helps us here because we can reliably compute the total number of build requests in
the group. The first half of this function does this counting as well as collapses all but the first
unfinished build requests into a "contraction" row, which just shows the number of build requests that
are remaining in the group.
(BuildRequestQueuePage.cssTemplate): Added.
(BuildRequestQueuePage.htmlTemplate): Added.

  • public/v3/pages/summary-page.js:

(SummaryPage.prototype.open): Use one-day median instead of seven-day median to compute the status.
(SummaryPageConfigurationGroup): Initialize _ratio to NaN. This was causing assertion failures in
RatioBarGraph's update() while measurement sets are being fetched.

  • server-tests/api-build-requests-tests.js: Updated the tests per change in BuildRequest's statusLabel.
  • unit-tests/analysis-task-tests.js: Ditto.
  • unit-tests/test-groups-tests.js: Ditto.
  • unit-tests/build-request-tests.js: Added tests for BuildRequest's waitingTime.
7:40 PM Changeset in webkit [203708] by Alan Bujtas
  • 15 edits in trunk/Source/WebCore

Cleanup RenderTable*::createAnonymous*
https://bugs.webkit.org/show_bug.cgi?id=160175

Reviewed by Simon Fraser.

This patch

  1. tightens the type on createAnonymousBoxWithSameTypeAs, createAnonymousWithParentRendererAndDisplay and

createAnonymousWithParentRenderer from RenderObject to the appropriate type.

  1. changes the return type of create* function from raw pointer to std::unique_ptr<>
  2. decouples createAnonymousBoxWithSameTypeAs and createAnonymousWithParentRenderer.

createAnonymousBoxWithSameTypeAs misleadingly calls createAnonymousWithParentRenderer
while it is never the parent in case of table items.
(std::unique_ptr::release() vs. WTFMove() will be addressed in a separate patch)

No change in functionality.

  • rendering/RenderBlock.cpp:

(WebCore::RenderBlock::createAnonymousBoxWithSameTypeAs):
(WebCore::RenderBlock::createAnonymousWithParentRendererAndDisplay):

  • rendering/RenderBlock.h:

(WebCore::RenderBlock::createAnonymousBlock):

  • rendering/RenderBox.cpp:

(WebCore::RenderBox::layoutOverflowRectForPropagation):

  • rendering/RenderBox.h:

(WebCore::RenderBox::createAnonymousBoxWithSameTypeAs):

  • rendering/RenderElement.cpp:

(WebCore::RenderElement::addChild):

  • rendering/RenderInline.cpp:

(WebCore::RenderInline::splitFlow):

  • rendering/RenderTable.cpp:

(WebCore::RenderTable::addChild):
(WebCore::RenderTable::createTableWithStyle):
(WebCore::RenderTable::createAnonymousWithParentRenderer):

  • rendering/RenderTable.h:

(WebCore::RenderTable::createAnonymousBoxWithSameTypeAs):

  • rendering/RenderTableCell.cpp:

(WebCore::RenderTableCell::createTableCellWithStyle):
(WebCore::RenderTableCell::createAnonymousWithParentRenderer):

  • rendering/RenderTableCell.h:

(WebCore::RenderTableCell::createAnonymousBoxWithSameTypeAs):

  • rendering/RenderTableRow.cpp:

(WebCore::RenderTableRow::addChild):
(WebCore::RenderTableRow::createTableRowWithStyle):
(WebCore::RenderTableRow::createAnonymousWithParentRenderer):

  • rendering/RenderTableRow.h:

(WebCore::RenderTableRow::createAnonymousBoxWithSameTypeAs):

  • rendering/RenderTableSection.cpp:

(WebCore::RenderTableSection::addChild):
(WebCore::RenderTableSection::createTableSectionWithStyle):
(WebCore::RenderTableSection::createAnonymousWithParentRenderer):

  • rendering/RenderTableSection.h:

(WebCore::RenderTableSection::createAnonymousBoxWithSameTypeAs):

7:24 PM Changeset in webkit [203707] by Chris Dumez
  • 3 edits
    2 adds in trunk

Touch properties should be on the prototype
https://bugs.webkit.org/show_bug.cgi?id=160174

Reviewed by Ryosuke Niwa.

Source/WebCore:

Touch properties should be on the prototype:

Chrome agrees with the specification.

Test: platform/ios-simulator/ios/touch/Touch-attributes-prototype.html

  • bindings/scripts/CodeGeneratorJS.pm:

(InterfaceRequiresAttributesOnInstanceForCompatibility): Deleted.

LayoutTests:

Add layout test coverage.

  • platform/ios-simulator/ios/touch/Touch-attributes-prototype-expected.txt: Added.
  • platform/ios-simulator/ios/touch/Touch-attributes-prototype.html: Added.
7:18 PM Changeset in webkit [203706] by commit-queue@webkit.org
  • 2 edits in trunk/Source/WebCore

Set MediaRemote playback state based on MediaSession playback state.
https://bugs.webkit.org/show_bug.cgi?id=160177

Patch by Jeremy Jones <jeremyj@apple.com> on 2016-07-25
Reviewed by Eric Carlson.

Use playback session state to update media remote playback state instead of
unconditionally setting it to playing.

  • platform/audio/mac/MediaSessionManagerMac.mm:

(WebCore::MediaSessionManagerMac::updateNowPlayingInfo):

7:15 PM Changeset in webkit [203705] by Alan Bujtas
  • 9 edits in trunk/Source/WebCore

RenderBox::haveSameDirection is used only by table items.
https://bugs.webkit.org/show_bug.cgi?id=160141

Reviewed by Simon Fraser.

Remove RenderBox::haveSameDirection() since it's used only by RenderTable*
classes. The new stand alone function (with 2 arguments) now checks if both of
the objects are valid.

No change in functionality.

  • rendering/RenderBox.h:

(WebCore::RenderBox::hasSameDirectionAs): Deleted.

  • rendering/RenderTable.cpp:

(WebCore::RenderTable::tableStartBorderAdjoiningCell):
(WebCore::RenderTable::tableEndBorderAdjoiningCell):

  • rendering/RenderTable.h:

(WebCore::haveSameDirection):

  • rendering/RenderTableCell.cpp:

(WebCore::RenderTableCell::hasStartBorderAdjoiningTable):
(WebCore::RenderTableCell::hasEndBorderAdjoiningTable):

  • rendering/RenderTableCell.h:

(WebCore::RenderTableCell::borderAdjoiningTableStart):
(WebCore::RenderTableCell::borderAdjoiningTableEnd):

  • rendering/RenderTableRow.h:

(WebCore::RenderTableRow::borderAdjoiningTableStart):
(WebCore::RenderTableRow::borderAdjoiningTableEnd):

  • rendering/RenderTableSection.cpp:

(WebCore::RenderTableSection::borderAdjoiningStartCell):
(WebCore::RenderTableSection::borderAdjoiningEndCell):
(WebCore::RenderTableSection::firstRowCellAdjoiningTableStart):
(WebCore::RenderTableSection::firstRowCellAdjoiningTableEnd):

  • rendering/RenderTableSection.h:

(WebCore::RenderTableSection::borderAdjoiningTableStart):
(WebCore::RenderTableSection::borderAdjoiningTableEnd):

6:05 PM Changeset in webkit [203704] by benjamin@webkit.org
  • 23 edits
    4 copies in trunk/Source/JavaScriptCore

Unreviewed, rolling out r203703.

It breaks some internal tests

Reverted changeset:

"[JSC] DFG::Node should not have its own allocator"
https://bugs.webkit.org/show_bug.cgi?id=160098
http://trac.webkit.org/changeset/203703

5:27 PM Changeset in webkit [203703] by commit-queue@webkit.org
  • 23 edits
    4 deletes in trunk/Source/JavaScriptCore

[JSC] DFG::Node should not have its own allocator
https://bugs.webkit.org/show_bug.cgi?id=160098

Patch by Benjamin Poulain <bpoulain@apple.com> on 2016-07-25
Reviewed by Geoffrey Garen.

We need some design changes for DFG::Node:
-Accessing the index must be fast. B3 uses indices for sets

and maps, it is a lot faster than hashing pointers.

-We should be able to subclass DFG::Node to specialize it.

  • CMakeLists.txt:
  • JavaScriptCore.xcodeproj/project.pbxproj:
  • dfg/DFGAllocator.h: Removed.

(JSC::DFG::Allocator::Region::size): Deleted.
(JSC::DFG::Allocator::Region::headerSize): Deleted.
(JSC::DFG::Allocator::Region::numberOfThingsPerRegion): Deleted.
(JSC::DFG::Allocator::Region::data): Deleted.
(JSC::DFG::Allocator::Region::isInThisRegion): Deleted.
(JSC::DFG::Allocator::Region::regionFor): Deleted.
(JSC::DFG::Allocator<T>::Allocator): Deleted.
(JSC::DFG::Allocator<T>::~Allocator): Deleted.
(JSC::DFG::Allocator<T>::allocate): Deleted.
(JSC::DFG::Allocator<T>::free): Deleted.
(JSC::DFG::Allocator<T>::freeAll): Deleted.
(JSC::DFG::Allocator<T>::reset): Deleted.
(JSC::DFG::Allocator<T>::indexOf): Deleted.
(JSC::DFG::Allocator<T>::allocatorOf): Deleted.
(JSC::DFG::Allocator<T>::bumpAllocate): Deleted.
(JSC::DFG::Allocator<T>::freeListAllocate): Deleted.
(JSC::DFG::Allocator<T>::allocateSlow): Deleted.
(JSC::DFG::Allocator<T>::freeRegionsStartingAt): Deleted.
(JSC::DFG::Allocator<T>::startBumpingIn): Deleted.

  • dfg/DFGByteCodeParser.cpp:

(JSC::DFG::ByteCodeParser::addToGraph):

  • dfg/DFGCPSRethreadingPhase.cpp:

(JSC::DFG::CPSRethreadingPhase::freeUnnecessaryNodes):
(JSC::DFG::CPSRethreadingPhase::addPhiSilently):

  • dfg/DFGCleanUpPhase.cpp:

(JSC::DFG::CleanUpPhase::run):

  • dfg/DFGConstantFoldingPhase.cpp:

(JSC::DFG::ConstantFoldingPhase::run):

  • dfg/DFGConstantHoistingPhase.cpp:
  • dfg/DFGDCEPhase.cpp:

(JSC::DFG::DCEPhase::fixupBlock):

  • dfg/DFGDriver.cpp:

(JSC::DFG::compileImpl):

  • dfg/DFGGraph.cpp:

(JSC::DFG::Graph::Graph):
(JSC::DFG::Graph::deleteNode):
(JSC::DFG::Graph::killBlockAndItsContents):
(JSC::DFG::Graph::~Graph): Deleted.

  • dfg/DFGGraph.h:

(JSC::DFG::Graph::addNode):

  • dfg/DFGLICMPhase.cpp:

(JSC::DFG::LICMPhase::attemptHoist):

  • dfg/DFGLongLivedState.cpp: Removed.

(JSC::DFG::LongLivedState::LongLivedState): Deleted.
(JSC::DFG::LongLivedState::~LongLivedState): Deleted.
(JSC::DFG::LongLivedState::shrinkToFit): Deleted.

  • dfg/DFGLongLivedState.h: Removed.
  • dfg/DFGNode.cpp:

(JSC::DFG::Node::index): Deleted.

  • dfg/DFGNode.h:

(JSC::DFG::Node::index):

  • dfg/DFGNodeAllocator.h: Removed.

(operator new ): Deleted.

  • dfg/DFGObjectAllocationSinkingPhase.cpp:
  • dfg/DFGPlan.cpp:

(JSC::DFG::Plan::compileInThread):
(JSC::DFG::Plan::compileInThreadImpl):

  • dfg/DFGPlan.h:
  • dfg/DFGSSAConversionPhase.cpp:

(JSC::DFG::SSAConversionPhase::run):

  • dfg/DFGWorklist.cpp:

(JSC::DFG::Worklist::runThread):

  • runtime/VM.cpp:

(JSC::VM::VM): Deleted.

  • runtime/VM.h:
5:21 PM Changeset in webkit [203702] by Chris Dumez
  • 8 edits
    5 adds in trunk

ClientRect properties should be on the prototype
https://bugs.webkit.org/show_bug.cgi?id=160165

Reviewed by Geoffrey Garen.

Source/WebCore:

Move ClientRect properties from the instance to the prototype. This
matches the specification, Firefox and Chrome.

Also add a serializer to ClientRect in order to match the specification:

This avoids breaking content that relies on JSON.stringify() to
serialize ClientRect objects.

Tests: fast/css/ClientRect-attributes-prototype.html

fast/css/ClientRect-serialization.html

  • CMakeLists.txt:
  • WebCore.xcodeproj/project.pbxproj:
  • bindings/js/JSBindingsAllInOne.cpp:
  • bindings/js/JSClientRectCustom.cpp: Added.

(WebCore::JSClientRect::toJSON):

  • bindings/scripts/CodeGeneratorJS.pm:
  • dom/ClientRect.idl:

LayoutTests:

  • fast/css/ClientRect-attributes-prototype-expected.txt: Added.
  • fast/css/ClientRect-attributes-prototype.html: Added.

Add layout test to check that ClientRect's properties are on the
prototype.

  • fast/css/ClientRect-serialization-expected.txt: Added.
  • fast/css/ClientRect-serialization.html: Added.

Add layout test to check that ClientRect has a serializer.

2:53 PM Changeset in webkit [203701] by Chris Dumez
  • 8 edits
    2 adds in trunk

Parameters to DOMImplementation.createDocumentType() should be mandatory and non-nullable
https://bugs.webkit.org/show_bug.cgi?id=160167

Reviewed by Ryosuke Niwa.

LayoutTests/imported/w3c:

Rebaseline a W3C test now that more checks are passing.

  • web-platform-tests/dom/interfaces-expected.txt:

Source/WebCore:

Parameters to DOMImplementation.createDocumentType() should be mandatory
and non-nullable:

Firefox and Chrome both agree with the specification. However, those
parameters were nullable and optional in WebKit.

Test: fast/dom/DOMImplementation/createDocumentType-parameters.html

  • dom/DOMImplementation.idl:

LayoutTests:

  • editing/selection/script-tests/DOMSelection-DocumentType.js:
  • fast/dom/DOMImplementation/createDocumentType-err-expected.txt:
  • fast/dom/DOMImplementation/script-tests/createDocumentType-err.js:

Update existing tests to reflect the behavior change.

  • fast/dom/DOMImplementation/createDocumentType-parameters-expected.txt: Added.
  • fast/dom/DOMImplementation/createDocumentType-parameters.html: Added.

Add layout test coverage. I have verified that this test passes on both
Firefox and Chrome.

2:38 PM Changeset in webkit [203700] by beidson@apple.com
  • 7 edits in trunk/Tools

Modern IDB: Make sure IndexedDB works from file:// url documents by default
https://bugs.webkit.org/show_bug.cgi?id=153783

Reviewed by Alex Christensen.

Previously, to grant IndexedDB access to file:// urls for testing purposes,
we had to call the SPI [WKWebViewConfiguration _setAllowUniversalAccessFromFileURLs:].

As of https://trac.webkit.org/changeset/203695 this is no longer required.

Change the relevant API tests to make sure this continues to be no longer required.

  • TestWebKitAPI/Tests/WebKit2Cocoa/IDBDeleteRecovery.mm:
  • TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBDatabaseProcessKill.mm:
  • TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess.mm:
  • TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBPersistence.mm:
  • TestWebKitAPI/Tests/WebKit2Cocoa/StoreBlobThenDelete.mm:
  • TestWebKitAPI/Tests/WebKit2Cocoa/WebProcessKillIDBCleanup.mm:
2:03 PM Changeset in webkit [203699] by fpizlo@apple.com
  • 7 edits in trunk/Source/JavaScriptCore

AssemblyHelpers should own all of the cell allocation methods
https://bugs.webkit.org/show_bug.cgi?id=160171

Reviewed by Saam Barati.

Prior to this change we had some code in DFGSpeculativeJIT.h and some code in JIT.h that
did cell allocation.

This change moves all of that code into AssemblyHelpers.h.

  • dfg/DFGSpeculativeJIT.h:

(JSC::DFG::SpeculativeJIT::emitAllocateJSCell):
(JSC::DFG::SpeculativeJIT::emitAllocateJSObject):
(JSC::DFG::SpeculativeJIT::emitAllocateJSObjectWithKnownSize):
(JSC::DFG::SpeculativeJIT::emitAllocateVariableSizedJSObject):
(JSC::DFG::SpeculativeJIT::emitAllocateDestructibleObject):

  • jit/AssemblyHelpers.h:

(JSC::AssemblyHelpers::emitAllocate):
(JSC::AssemblyHelpers::emitAllocateJSCell):
(JSC::AssemblyHelpers::emitAllocateJSObject):
(JSC::AssemblyHelpers::emitAllocateJSObjectWithKnownSize):
(JSC::AssemblyHelpers::emitAllocateVariableSized):
(JSC::AssemblyHelpers::emitAllocateVariableSizedJSObject):
(JSC::AssemblyHelpers::emitAllocateDestructibleObject):

  • jit/JIT.h:
  • jit/JITInlines.h:

(JSC::JIT::isOperandConstantChar):
(JSC::JIT::emitValueProfilingSite):
(JSC::JIT::emitAllocateJSObject): Deleted.

  • jit/JITOpcodes.cpp:

(JSC::JIT::emit_op_new_object):
(JSC::JIT::emit_op_create_this):

  • jit/JITOpcodes32_64.cpp:

(JSC::JIT::emit_op_new_object):
(JSC::JIT::emit_op_create_this):

1:51 PM Changeset in webkit [203698] by Wenson Hsieh
  • 6 edits
    2 adds in trunk

Media controls should not be displayed for a video until it starts playing
https://bugs.webkit.org/show_bug.cgi?id=160092
<rdar://problem/26986673>

Reviewed by Beth Dakin.

Source/WebCore:

For videos that have never played back yet, we should not show media controls. To ensure this
behavior, we ensure that the playback behavior restriction is set upon creating the media
element. This restriction is then removed when the media element begins to play.

Added two new WebKit API tests.

  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::HTMLMediaElement):

Tools:

Verify that multiple videos do or don't show the media controller depending on whether videos
are playing. Also tweaks an existing API test (VideoControlsManagerSingleLargeVideo) that was
passing because we were always showing media controls for large videos with audio, even if they
had not played back yet. This change ensures that large videos with audio show media controls
only after they begin to play back, and not by virtue of being large enough for main content.

  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
  • TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:

(TestWebKitAPI::TEST):

  • TestWebKitAPI/Tests/WebKit2Cocoa/large-video-with-audio.html:
  • TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-with-audio-autoplay.html: Added.
  • TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-with-audio.html: Added.
1:40 PM Changeset in webkit [203697] by sbarati@apple.com
  • 8 edits in trunk/Source/JavaScriptCore

MathICs should be able to take and dump stats about code size
https://bugs.webkit.org/show_bug.cgi?id=160148

Reviewed by Filip Pizlo.

This will make testing changes on MathIC going forward much easier.
We will be able to easily see if modifications to MathIC will lead
to us generating smaller code. We now only dump average size when we
regenerate any MathIC. This works out for large tests/pages, but is not
great for testing small programs. We can add more dump points later if
we find that we want to dump stats while running small small programs.

  • bytecode/CodeBlock.cpp:

(JSC::CodeBlock::jitSoon):
(JSC::CodeBlock::dumpMathICStats):

  • bytecode/CodeBlock.h:

(JSC::CodeBlock::isStrictMode):
(JSC::CodeBlock::ecmaMode):

  • dfg/DFGSpeculativeJIT.cpp:

(JSC::DFG::SpeculativeJIT::compileMathIC):

  • ftl/FTLLowerDFGToB3.cpp:

(JSC::FTL::DFG::LowerDFGToB3::compileMathIC):

  • jit/JITArithmetic.cpp:

(JSC::JIT::emitMathICFast):
(JSC::JIT::emitMathICSlow):

  • jit/JITMathIC.h:

(JSC::JITMathIC::finalizeInlineCode):
(JSC::JITMathIC::codeSize):

  • jit/JITOperations.cpp:
1:35 PM Changeset in webkit [203696] by jiewen_tan@apple.com
  • 16 edits
    10 moves
    1 add in trunk

Rename SubtleCrypto to WebKitSubtleCrypto
https://bugs.webkit.org/show_bug.cgi?id=160067
<rdar://problem/27483617>

Reviewed by Brent Fulgham.

Source/WebCore:

Tests: crypto/webkitSubtle/gc-2.html

crypto/webkitSubtle/gc-3.html
crypto/webkitSubtle/gc.html

Rename Class SubtleCrypto to WebKitSubtleCrypto, and Crypto.subtle to Crypto.webkitSubtle in order
to let the new implementation to reuse the name SubtleCrypto. This renaming should match what our
current JSBindings use, and therefore should not introduce any change of behavoir.

  • CMakeLists.txt:

Revise project files for for new file names.

  • DerivedSources.cpp:
  • DerivedSources.make:
  • PlatformEfl.cmake:
  • PlatformGTK.cmake:
  • PlatformMac.cmake:
  • WebCore.xcodeproj/project.pbxproj:

Revise project files for for new file names.

  • bindings/js/JSWebKitSubtleCryptoCustom.cpp: Renamed from Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp.
  • crypto/WebKitSubtleCrypto.cpp: Renamed from Source/WebCore/crypto/SubtleCrypto.cpp.
  • crypto/WebKitSubtleCrypto.h: Renamed from Source/WebCore/crypto/SubtleCrypto.h.
  • crypto/WebKitSubtleCrypto.idl: Renamed from Source/WebCore/crypto/SubtleCrypto.idl.
  • page/Crypto.cpp:

(WebCore::Crypto::webkitSubtle):
(WebCore::Crypto::subtle): Deleted.

  • page/Crypto.h:
  • page/Crypto.idl:

LayoutTests:

Move tests involving crypto.webkitSubtle from crypto/subtle to crypto/webkitSubtle.

  • crypto/webkitSubtle/gc-2-expected.txt: Renamed from LayoutTests/crypto/subtle/gc-2-expected.txt.
  • crypto/webkitSubtle/gc-2.html: Renamed from LayoutTests/crypto/subtle/gc-2.html.
  • crypto/webkitSubtle/gc-3-expected.txt: Renamed from LayoutTests/crypto/subtle/gc-3-expected.txt.
  • crypto/webkitSubtle/gc-3.html: Renamed from LayoutTests/crypto/subtle/gc-3.html.
  • crypto/webkitSubtle/gc-expected.txt: Renamed from LayoutTests/crypto/subtle/gc-expected.txt.
  • crypto/webkitSubtle/gc.html: Renamed from LayoutTests/crypto/subtle/gc.html.
  • platform/efl/TestExpectations:
  • platform/gtk/TestExpectations:
  • platform/ios-simulator-wk1/TestExpectations:
  • platform/win/TestExpectations:
12:57 PM Changeset in webkit [203695] by beidson@apple.com
  • 3 edits
    2 moves
    1 add
    1 delete in trunk

Allow LocalStorage by default for file URLs.
https://bugs.webkit.org/show_bug.cgi?id=160169

Reviewed by Brent Fulgham.

Source/WebCore:

Test: storage/domstorage/localstorage/file-can-access.html

  • page/SecurityOrigin.cpp:

(WebCore::SecurityOrigin::canAccessStorage): Remove the m_universalAccess check for local URLs.

LayoutTests:

  • storage/domstorage/localstorage/blocked-file-access-expected.txt: Removed.
  • storage/domstorage/localstorage/file-can-access-expected.txt: Added.
  • storage/domstorage/localstorage/file-can-access.html: Renamed from LayoutTests/storage/domstorage/localstorage/blocked-file-access.html.
  • storage/domstorage/localstorage/resources/unblocked-example.html: Renamed from LayoutTests/storage/domstorage/localstorage/resources/blocked-example.html.
12:15 PM Changeset in webkit [203694] by n_wang@apple.com
  • 3 edits
    2 adds in trunk

AX: AccessibilityRenderObject is adding duplicated children when CSS first-letter is being used.
https://bugs.webkit.org/show_bug.cgi?id=160155

Reviewed by Chris Fleizach.

Source/WebCore:

We were adding the same text node twice if CSS first-letter selector was being used. Added a
check for the inline continuation so that we only add it once.

Test: accessibility/mac/css-first-letter-children.html

  • accessibility/AccessibilityRenderObject.cpp:

(WebCore::firstChildConsideringContinuation):

LayoutTests:

  • accessibility/mac/css-first-letter-children-expected.txt: Added.
  • accessibility/mac/css-first-letter-children.html: Added.
12:04 PM Changeset in webkit [203693] by sbarati@apple.com
  • 17 edits in trunk/Source/JavaScriptCore

op_mul/ArithMul(Untyped,Untyped) should be an IC
https://bugs.webkit.org/show_bug.cgi?id=160108

Reviewed by Mark Lam.

This patch makes Mul a type based IC in much the same way that we made
Add a type-based IC. I implemented Mul in the same way. I abstracted the
implementation of the Add IC in the various JITs to allow for it to
work over arbitrary IC snippets. This will make adding Div/Sub/Pow in the
future easy. This patch also adds a new boolean argument to the various
snippet generateFastPath() methods to indicate if we should emit result profiling.
I added this because we want this profiling to be emitted for Mul in
the baseline, but not in the DFG. We used to indicate this through passing
in a nullptr for the ArithProfile, but we no longer do that in the upper
JIT tiers. So we are passing an explicit request from the JIT tier about
whether or not it's worth it for the IC to emit profiling.

We now emit much less code for Mul. Here is some data on the average
Mul snippet/IC size:

| JetStream | Unity 3D |

------| -------------

Old | ~280 bytes | ~280 bytes |

------| -------------

New | 210 bytes | 185 bytes |

------------------------------------

  • bytecode/CodeBlock.cpp:

(JSC::CodeBlock::addJITAddIC):
(JSC::CodeBlock::addJITMulIC):
(JSC::CodeBlock::findStubInfo):

  • bytecode/CodeBlock.h:

(JSC::CodeBlock::stubInfoBegin):
(JSC::CodeBlock::stubInfoEnd):

  • dfg/DFGSpeculativeJIT.cpp:

(JSC::DFG::GPRTemporary::adopt):
(JSC::DFG::FPRTemporary::FPRTemporary):
(JSC::DFG::SpeculativeJIT::compileValueAdd):
(JSC::DFG::SpeculativeJIT::compileMathIC):
(JSC::DFG::SpeculativeJIT::compileArithMul):

  • dfg/DFGSpeculativeJIT.h:

(JSC::DFG::SpeculativeJIT::callOperation):
(JSC::DFG::GPRTemporary::GPRTemporary):
(JSC::DFG::GPRTemporary::operator=):
(JSC::DFG::FPRTemporary::~FPRTemporary):
(JSC::DFG::FPRTemporary::fpr):

  • ftl/FTLLowerDFGToB3.cpp:

(JSC::FTL::DFG::LowerDFGToB3::compileToThis):
(JSC::FTL::DFG::LowerDFGToB3::compileValueAdd):
(JSC::FTL::DFG::LowerDFGToB3::compileMathIC):
(JSC::FTL::DFG::LowerDFGToB3::compileArithMul):

  • jit/JIT.h:

(JSC::JIT::getSlowCase):

  • jit/JITAddGenerator.cpp:

(JSC::JITAddGenerator::generateInline):
(JSC::JITAddGenerator::generateFastPath):

  • jit/JITAddGenerator.h:

(JSC::JITAddGenerator::JITAddGenerator):
(JSC::JITAddGenerator::isLeftOperandValidConstant):
(JSC::JITAddGenerator::isRightOperandValidConstant):

  • jit/JITArithmetic.cpp:

(JSC::JIT::emit_op_add):
(JSC::JIT::emitSlow_op_add):
(JSC::JIT::emitMathICFast):
(JSC::JIT::emitMathICSlow):
(JSC::JIT::emit_op_mul):
(JSC::JIT::emitSlow_op_mul):
(JSC::JIT::emit_op_sub):

  • jit/JITInlines.h:

(JSC::JIT::callOperation):

  • jit/JITMathIC.h:

(JSC::JITMathIC::slowPathStartLocation):
(JSC::JITMathIC::slowPathCallLocation):
(JSC::JITMathIC::isLeftOperandValidConstant):
(JSC::JITMathIC::isRightOperandValidConstant):
(JSC::JITMathIC::generateInline):
(JSC::JITMathIC::generateOutOfLine):

  • jit/JITMathICForwards.h:
  • jit/JITMulGenerator.cpp:

(JSC::JITMulGenerator::generateInline):
(JSC::JITMulGenerator::generateFastPath):

  • jit/JITMulGenerator.h:

(JSC::JITMulGenerator::JITMulGenerator):
(JSC::JITMulGenerator::isLeftOperandValidConstant):
(JSC::JITMulGenerator::isRightOperandValidConstant):
(JSC::JITMulGenerator::didEmitFastPath): Deleted.
(JSC::JITMulGenerator::endJumpList): Deleted.
(JSC::JITMulGenerator::slowPathJumpList): Deleted.

  • jit/JITOperations.cpp:
  • jit/JITOperations.h:
11:45 AM Changeset in webkit [203692] by weinig@apple.com
  • 2 edits in trunk/Source/WebKit2

Fix assertion.

  • NetworkProcess/cache/NetworkCacheCodersCocoa.cpp:

(WebKit::NetworkCache::encodeCertificateChain):

11:01 AM Changeset in webkit [203691] by commit-queue@webkit.org
  • 5 edits
    2 adds in trunk/Source/WebKit2

Split platform specific parts of NetworkCacheCoders.cpp into separate files
https://bugs.webkit.org/show_bug.cgi?id=160151

Patch by Sam Weinig <sam@webkit.org> on 2016-07-25
Reviewed by Alex Christensen.

  • NetworkProcess/cache/NetworkCacheCoders.cpp:

(WebKit::NetworkCache::Coder<WebCore::CertificateInfo>::encode): Deleted.
(WebKit::NetworkCache::Coder<WebCore::CertificateInfo>::decode): Deleted.

  • NetworkProcess/cache/NetworkCacheCodersCocoa.cpp: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheCoders.cpp.

(WebKit::NetworkCache::encodeCFData): Moved.
(WebKit::NetworkCache::decodeCFData): Moved.
(WebKit::NetworkCache::encodeSecTrustRef): Moved.
(WebKit::NetworkCache::decodeSecTrustRef): Moved.
(WebKit::NetworkCache::encodeCertificateChain): Moved.
(WebKit::NetworkCache::decodeCertificateChain): Moved.
(WebKit::NetworkCache::Coder<WebCore::CertificateInfo>::encode): Moved.
(WebKit::NetworkCache::Coder<WebCore::CertificateInfo>::decode): Moved.

  • NetworkProcess/cache/NetworkCacheCodersSoup.cpp: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheCoders.cpp.

(WebKit::NetworkCache::Coder<WebCore::CertificateInfo>::encode): Moved.
(WebKit::NetworkCache::Coder<WebCore::CertificateInfo>::decode): Moved.

  • PlatformGTK.cmake:
  • PlatformMac.cmake:
  • WebKit2.xcodeproj/project.pbxproj:

Add new files.

10:49 AM Changeset in webkit [203690] by Wenson Hsieh
  • 7 edits
    3 adds in trunk

Media controls on apple.com don't disappear when movie finishes playing
https://bugs.webkit.org/show_bug.cgi?id=160068
<rdar://problem/26668526>

Reviewed by Darin Adler.

Source/WebCore:

When a video ends, it should cause media controls to hide. While current logic
mostly accounts for this, it does not account for programmatic seeks causing
the video to lose its 'ended' status before querying for whether or not to
show media controls.

Three new API tests: large-video-seek-after-ending.html
large-video-hides-controls-after-seek-to-end.html
large-video-seek-to-beginning-and-play-after-ending.html

  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
(WebCore::HTMLMediaElement::setPlaying):

  • html/MediaElementSession.cpp:

(WebCore::MediaElementSession::canControlControlsManager):

  • html/MediaElementSession.h:

Tools:

Adds new API tests. Please see WebCore ChangeLog for more details.

  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
  • TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:

(-[MediaPlaybackMessageHandler initWithWKWebView:finalMessageString:]):
(-[MediaPlaybackMessageHandler userContentController:didReceiveScriptMessage:]):
(TestWebKitAPI::TEST):
(-[DidPlayMessageHandler initWithWKWebView:]): Deleted.
(-[DidPlayMessageHandler userContentController:didReceiveScriptMessage:]): Deleted.

  • TestWebKitAPI/Tests/WebKit2Cocoa/large-video-hides-controls-after-seek-to-end.html: Added.
  • TestWebKitAPI/Tests/WebKit2Cocoa/large-video-seek-after-ending.html: Added.
  • TestWebKitAPI/Tests/WebKit2Cocoa/large-video-seek-to-beginning-and-play-after-ending.html: Added.
10:21 AM Changeset in webkit [203689] by bshafiei@apple.com
  • 5 edits in branches/safari-602-branch/Source

Versioning.

10:13 AM Changeset in webkit [203688] by commit-queue@webkit.org
  • 9 edits
    2 copies in trunk/Source/WebCore

Introduce a MathMLOperatorElement class
https://bugs.webkit.org/show_bug.cgi?id=160034

Patch by Frederic Wang <fwang@igalia.com> on 2016-07-25
Reviewed by Darin Adler.

No new tests, rendering is unchaned.

  • CMakeLists.txt: Add MathMLOperatorElement to the build file.
  • WebCore.xcodeproj/project.pbxproj: Ditto.
  • mathml/MathMLAllInOne.cpp: Ditto.
  • mathml/MathMLOperatorElement.cpp: New DOM class for <mo> element.

(WebCore::MathMLOperatorElement::MathMLOperatorElement):
(WebCore::MathMLOperatorElement::create):
(WebCore::MathMLOperatorElement::parseAttribute): Handle mo attributes.
(WebCore::MathMLOperatorElement::createElementRenderer): Create RenderMathMLOperator.

  • mathml/MathMLOperatorElement.h: Declare a class deriving from MathMLTextElement.
  • mathml/MathMLTextElement.cpp: Remove all the RenderMathMLOperator parts.

(WebCore::MathMLTextElement::MathMLTextElement): Remove inline keyword so that the class can
be overriden.
(WebCore::MathMLTextElement::parseAttribute): Remove code handled in MathMLOperatorElement.
(WebCore::MathMLTextElement::createElementRenderer): Ditto.

  • mathml/MathMLTextElement.h: Make class and members overridable.
  • mathml/mathtags.in: Map mo to MathMLOperatorElement.
  • rendering/mathml/RenderMathMLOperator.cpp:

(WebCore::RenderMathMLOperator::RenderMathMLOperator): Make the constructor take a
MathMLOperatorElement.

  • rendering/mathml/RenderMathMLOperator.h: Ditto.
9:57 AM Changeset in webkit [203687] by Chris Dumez
  • 4 edits in trunk/Source/WebKit2

[iOS] Make sure we call the ProcessAssertion invalidation handler on the main thread
https://bugs.webkit.org/show_bug.cgi?id=160140
<rdar://problem/27399998>

Reviewed by Darin Adler.

Based on crash traces, it appears BKSProcessAssertion is calling our
invalidation handler on a background thread. This was not anticipated
and therefore, this would lead to thread safety issues and crashes.

We now make sure to call our invalidation handler on the main thread.
We also use a WeakPtr to ensure that the ProcessAssertion is still
alive once on the main thread and before calling the invalidation
handler.

  • UIProcess/ProcessAssertion.cpp:

(WebKit::ProcessAssertion::ProcessAssertion):

  • UIProcess/ProcessAssertion.h:

(WebKit::ProcessAssertion::ProcessAssertion):
(WebKit::ProcessAssertion::createWeakPtr):

  • UIProcess/ios/ProcessAssertionIOS.mm:

(WebKit::ProcessAssertion::ProcessAssertion):
(WebKit::ProcessAssertion::markAsInvalidated):

9:37 AM Changeset in webkit [203686] by Darin Adler
  • 4 edits in trunk/Source

Speed up make process slightly by improving "list of files" idiom
https://bugs.webkit.org/show_bug.cgi?id=160164

Reviewed by Mark Lam.

  • DerivedSources.make: Change rules that build lists of files to only run when

DerivedSources.make has been modified since the last time they were run. Since the
list of files are inside this file, this is safe, and this is faster than always
comparing and regenerating the file containing the list of files each time.

9:30 AM Changeset in webkit [203685] by Philippe Normand
  • 2 edits in trunk/Tools

Unreviewed, fix test-webkitpy after r203674.

  • Scripts/webkitpy/port/linux_get_crash_log_unittest.py:

(GDBCrashLogGeneratorTest.test_generate_crash_log):

9:03 AM Changeset in webkit [203684] by Wenson Hsieh
  • 4 edits
    2 adds in trunk

The web process hangs when computing elements-based snap points for a container with large max scroll offset
https://bugs.webkit.org/show_bug.cgi?id=152605
<rdar://problem/25353661>

Reviewed by Simon Fraser.

Source/WebCore:

Fixes a bug in the computation of axis snap points. The ScrollSnapPoints object, which tracks
snap points along a particular axis, has two flags, hasRepeat and usesElements. For elements-
based snapping, both flags would be turned on, since StyleBuilderConverter::convertScrollSnapPoints
short-circuits for elements-based snapping and does not default usesRepeat to false. To address this,
we make ScrollSnapPoints not repeat(100%) by default.

Test: css3/scroll-snap/scroll-snap-elements-container-larger-than-children.html

  • css/StyleBuilderConverter.h:

(WebCore::StyleBuilderConverter::convertScrollSnapPoints): Deleted.

  • rendering/style/StyleScrollSnapPoints.cpp:

(WebCore::ScrollSnapPoints::ScrollSnapPoints):

LayoutTests:

Adds a scroll snap offset computation test case that would have previously
caused the web process to hang before this patch.

  • css3/scroll-snap/scroll-snap-elements-container-larger-than-children-expected.txt: Added.
  • css3/scroll-snap/scroll-snap-elements-container-larger-than-children.html: Added.
8:02 AM Changeset in webkit [203683] by Carlos Garcia Campos
  • 2 edits in trunk/Source/WebCore

REGRESSION(r200931): Invalid cast in highestAncestorToWrapMarkup()
https://bugs.webkit.org/show_bug.cgi?id=160163

Reviewed by Michael Catanzaro.

Since r200931 the result of enclosingNodeOfType() in highestAncestorToWrapMarkup() is downcasted to Element, but
the result of enclosingNodeOfType() can be a Node that is not an Element, in this case is Text. The cast is not
needed at all since that node is passed to editingIgnoresContent() and selectionFromContentsOfNode() and both
receive a Node not an Element.

  • editing/markup.cpp:

(WebCore::highestAncestorToWrapMarkup): Remove invalid cast.

8:01 AM Changeset in webkit [203682] by Carlos Garcia Campos
  • 2 edits in trunk/Source/WebCore

[Coordinated Graphics] ASSERTION FAILED: m_coordinator->isFlushingLayerChanges() in fast/repaint/animation-after-layer-scroll.html
https://bugs.webkit.org/show_bug.cgi?id=160156

Reviewed by Michael Catanzaro.

So, we fixed an assertion in r203663, but now is hitting the next one. As explained in bug #160142, flush
compositing state can be triggered in tests by RenderLayerCompositor::layerTreeAsText(), without the coordinator
even noticing it, so the assert can be just removed.

  • platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:

(WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly): Remove incorrect assert.

7:33 AM Changeset in webkit [203681] by Alan Bujtas
  • 3 edits in trunk/Source/WebCore

EllipsisBox ctor's isVertical parameter should read isHorizontal.
https://bugs.webkit.org/show_bug.cgi?id=160153

Reviewed by Andreas Kling.

It indicates whether the ellipsis box is horizontal. (both the callsites
and the parent class use isHorizontal)

No change in functionality.

  • rendering/EllipsisBox.cpp:

(WebCore::EllipsisBox::EllipsisBox):

  • rendering/EllipsisBox.h:
5:25 AM MathML/Early_2016_Refactoring edited by fred.wang@free.fr
(diff)
1:57 AM Changeset in webkit [203680] by svillar@igalia.com
  • 21 edits
    1 copy
    2 moves
    5 adds in trunk

[css-grid] Implement repeat(auto-fit)
https://bugs.webkit.org/show_bug.cgi?id=159771

Reviewed by Darin Adler.

Source/WebCore:

The auto-fit keyword works exactly as the already implemented auto-fill except that all
empty tracks collapse (became 0px). Absolutely positioned items do not participate on the
layout of the grid so they are not considered (a grid with only absolutely positioned items
is considered an empty grid).

Whenever a track collapses the gutters on either side do also collapse. When a collapsed
track's gutters collapse, they coincide exactly. If one side of a collapsed track does not
have a gutter then collapsing its gutters results in no gutter on either "side" of the
collapsed track.

In practice this means that is not possible to know the gap between 2 consecutive auto
repeat tracks without examining some others whenever there are collapsed tracks.

Uncommented the auto-fit cases from Mozilla tests. They have to be adapted as the reftest
machinery requires all the content to be rendered in the original 800x600 viewport.

Tests: fast/css-grid-layout/grid-auto-fit-columns.html
fast/css-grid-layout/grid-auto-fit-rows.html
fast/css-grid-layout/mozilla/grid-repeat-auto-fill-fit-005-part-1.html
fast/css-grid-layout/mozilla/grid-repeat-auto-fill-fit-005-part-2.html

  • css/CSSComputedStyleDeclaration.cpp:

(WebCore::valueForGridTrackList): Use the newly added trackSizesForComputedStyle().

  • rendering/RenderGrid.cpp:

(WebCore::RenderGrid::computeTrackBasedLogicalHeight):
(WebCore::RenderGrid::computeTrackSizesForDirection):
(WebCore::RenderGrid::isEmptyAutoRepeatTrack):
(WebCore::RenderGrid::gridGapForDirection): Returns the gap directly from the style.
(WebCore::RenderGrid::guttersSize): Computes the gap between a startLine and an
endLine. This method may need to inspect some other surrounding tracks to compute the gap.
(WebCore::RenderGrid::computeIntrinsicLogicalWidths):
(WebCore::RenderGrid::computeIntrinsicLogicalHeight):
(WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
(WebCore::RenderGrid::gridTrackSize):
(WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
(WebCore::RenderGrid::computeAutoRepeatTracksCount):
(WebCore::RenderGrid::computeEmptyTracksForAutoRepeat): Returns a Vector with the auto
repeat tracks that are going to be collapsed because they're empty.
(WebCore::RenderGrid::placeItemsOnGrid):
(WebCore::RenderGrid::trackSizesForComputedStyle): Used by ComputedStyle logic to print the
size of tracks. Added in order to hide the actual contents of m_columnPositions and
m_rowPositions to the outter world.
(WebCore::RenderGrid::offsetAndBreadthForPositionedChild):
(WebCore::RenderGrid::gridAreaBreadthForChild):
(WebCore::RenderGrid::populateGridPositionsForDirection): Added some extra code to compute
gaps as they cannot be directly added between tracks in case of having collapsed tracks.
(WebCore::RenderGrid::columnAxisOffsetForChild):
(WebCore::RenderGrid::rowAxisOffsetForChild):
(WebCore::RenderGrid::offsetBetweenTracks): Deleted.

  • rendering/RenderGrid.h: Made some API private. Added new required methods/attributes.
  • css/CSSComputedStyleDeclaration.cpp:

(WebCore::valueForGridTrackList):

  • rendering/RenderGrid.cpp:

(WebCore::RenderGrid::computeTrackBasedLogicalHeight):
(WebCore::RenderGrid::computeTrackSizesForDirection):
(WebCore::RenderGrid::hasAutoRepeatEmptyTracks):
(WebCore::RenderGrid::isEmptyAutoRepeatTrack):
(WebCore::RenderGrid::gridGapForDirection):
(WebCore::RenderGrid::guttersSize):
(WebCore::RenderGrid::computeIntrinsicLogicalWidths):
(WebCore::RenderGrid::computeIntrinsicLogicalHeight):
(WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
(WebCore::RenderGrid::gridTrackSize):
(WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
(WebCore::RenderGrid::computeAutoRepeatTracksCount):
(WebCore::RenderGrid::computeEmptyTracksForAutoRepeat):
(WebCore::RenderGrid::placeItemsOnGrid):
(WebCore::RenderGrid::trackSizesForComputedStyle):
(WebCore::RenderGrid::offsetAndBreadthForPositionedChild):
(WebCore::RenderGrid::assumedRowsSizeForOrthogonalChild):
(WebCore::RenderGrid::gridAreaBreadthForChild):
(WebCore::RenderGrid::populateGridPositionsForDirection):
(WebCore::RenderGrid::columnAxisOffsetForChild):
(WebCore::RenderGrid::rowAxisOffsetForChild):
(WebCore::RenderGrid::offsetBetweenTracks): Deleted.

  • rendering/RenderGrid.h:

LayoutTests:

Uncommented the auto-fit cases. Split the Mozilla's 005 test in two because it was not
possible to fit all the content in a viewport without scrollbars.

  • fast/css-grid-layout/grid-auto-fit-columns-expected.txt: Added.
  • fast/css-grid-layout/grid-auto-fit-columns.html: Added.
  • fast/css-grid-layout/grid-auto-fit-rows-expected.txt: Added.
  • fast/css-grid-layout/grid-auto-fit-rows.html: Added.
  • fast/css-grid-layout/grid-element-auto-repeat-get-set-expected.txt:
  • fast/css-grid-layout/grid-element-auto-repeat-get-set.html:
  • fast/css-grid-layout/grid-only-abspos-item-computed-style-crash-expected.txt:
  • fast/css-grid-layout/grid-only-abspos-item-computed-style-crash.html:
  • fast/css-grid-layout/grid-positioned-items-padding-expected.txt:
  • fast/css-grid-layout/grid-positioned-items-padding.html:
  • fast/css-grid-layout/grid-template-columns-rows-computed-style-gaps-content-alignment-expected.txt:
  • fast/css-grid-layout/grid-template-columns-rows-computed-style-gaps-content-alignment.html:
  • fast/css-grid-layout/mozilla/grid-repeat-auto-fill-fit-001-expected.html:
  • fast/css-grid-layout/mozilla/grid-repeat-auto-fill-fit-001.html:
  • fast/css-grid-layout/mozilla/grid-repeat-auto-fill-fit-002-expected.html:
  • fast/css-grid-layout/mozilla/grid-repeat-auto-fill-fit-002.html:
  • fast/css-grid-layout/mozilla/grid-repeat-auto-fill-fit-003-expected.html:
  • fast/css-grid-layout/mozilla/grid-repeat-auto-fill-fit-003.html:
  • fast/css-grid-layout/mozilla/grid-repeat-auto-fill-fit-004-expected.html:
  • fast/css-grid-layout/mozilla/grid-repeat-auto-fill-fit-004.html:
  • fast/css-grid-layout/mozilla/grid-repeat-auto-fill-fit-005-part-1-expected.html: Renamed from LayoutTests/fast/css-grid-layout/mozilla/grid-repeat-auto-fill-fit-005-expected.html.
  • fast/css-grid-layout/mozilla/grid-repeat-auto-fill-fit-005-part-1.html: Copied from LayoutTests/fast/css-grid-layout/mozilla/grid-repeat-auto-fill-fit-005.html.
  • fast/css-grid-layout/mozilla/grid-repeat-auto-fill-fit-005-part-2-expected.html: Added.
  • fast/css-grid-layout/mozilla/grid-repeat-auto-fill-fit-005-part-2.html: Renamed from LayoutTests/fast/css-grid-layout/mozilla/grid-repeat-auto-fill-fit-005.html.
12:21 AM MathML/Early_2016_Refactoring edited by fred.wang@free.fr
(diff)
12:18 AM Changeset in webkit [203679] by fred.wang@free.fr
  • 12 edits in trunk/Source/WebCore

Move parsing of display, displaystyle and mathvariant attributes into MathML element classes
https://bugs.webkit.org/show_bug.cgi?id=159623

Patch by Frederic Wang <fwang@igalia.com> on 2016-07-24
Reviewed by Brent Fulgham.

No new tests, already covered by existing tests.

  • mathml/MathMLElement.cpp:

(WebCore::MathMLElement::parseMathVariantAttribute): Move helper function to parse the
mathvariant attribute.
(WebCore::MathMLElement::getSpecifiedDisplayStyle): Helper function to set the displaystyle
value from the attribute specified on the MathML element.
(WebCore::MathMLElement::getSpecifiedMathVariant): Helper function to set the mathvariant
value from the attribute specified on the MathML element.

  • mathml/MathMLElement.h: Move the enum for mathvariant values and declare new members.

(WebCore::MathMLElement::acceptsDisplayStyleAttribute): Indicate whether the element accepts
displaystyle attribute (false for most of them).
(WebCore::MathMLElement::acceptsMathVariantAttribute): Indicate whether the element accepts
mathvariant attribute (false for most of them).

  • mathml/MathMLInlineContainerElement.cpp:

(WebCore::MathMLInlineContainerElement::acceptsDisplayStyleAttribute): Add mstyle and mtable
to the list of elements accepting the displaystyle attribute.
(WebCore::MathMLInlineContainerElement::acceptsMathVariantAttribute): Add mstyle to the list
of elements accepting the mathvariant attribute.
(WebCore::MathMLInlineContainerElement::parseAttribute): Mark displaystyle and mathvariant
dirty if necessary. Also use the new accepts*Attribute function.

  • mathml/MathMLInlineContainerElement.h: Declare overridden accepts*Attribute members.
  • mathml/MathMLMathElement.cpp:

(WebCore::MathMLMathElement::getSpecifiedDisplayStyle): Override acceptsDisplayStyleAttribute
so that the display attribute is also used to set the default value if the displaystyle
attribute is absent.
(WebCore::MathMLMathElement::parseAttribute): Mark displaystyle and mathvariant dirty if
necessary. We directly MathMLElement::parseAttribute to avoid duplicate work.

  • mathml/MathMLMathElement.h: Add the math tag to the list of elements accepting the

displaystyle and mathvariant attributes. Declare overridden getSpecifiedDisplayStyle.

  • mathml/MathMLTextElement.cpp:

(WebCore::MathMLTextElement::parseAttribute): Mark mathvariant as dirty.

  • mathml/MathMLTextElement.h: Add token elements to the list of elements accepting the

mathvariant attribute.

  • rendering/mathml/MathMLStyle.cpp:

(WebCore::MathMLStyle::updateStyleIfNeeded): Use the new MathMLElement::MathVariant enum.
(WebCore::MathMLStyle::resolveMathMLStyle): We no longer parse the display value to
initialize the default value on the math tag, because this is handled in
getSpecifiedDisplayStyle. In general, we also just call getSpecifiedDisplayStyle and
getSpecifiedMathVariant on the MathML elements instead of parsing the displaystyle and
mathvariant attributes here.
(WebCore::MathMLStyle::parseMathVariant): Deleted. This is moved into MathMLElement.

  • rendering/mathml/MathMLStyle.h: Use the new MathMLElement::MathVariant enum.
  • rendering/mathml/RenderMathMLToken.cpp: Ditto.

(WebCore::mathVariant): Ditto.
(WebCore::RenderMathMLToken::updateMathVariantGlyph): Ditto.

12:10 AM Changeset in webkit [203678] by Carlos Garcia Campos
  • 3 edits in trunk/Source/WebCore

Unreviewed. Remove unneeded header includes from CoordinatedGraphicsLayer.

Not only thjey are not needed, they are a layer violation, CoordinatedGraphicsLayer shouldn't know anything
about Page, Frame and FrameView.

  • platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
  • platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

Jul 24, 2016:

11:34 PM Changeset in webkit [203677] by Philippe Normand
  • 1 edit
    1 add in trunk/Tools

Unreviewed, forgot to commit this file in r203674.

  • Scripts/process-linux-coredump: Added.

(main):

11:33 PM Changeset in webkit [203676] by Carlos Garcia Campos
  • 3 edits in trunk/Source/WebKit2

[GTK][Threaded Compositor] ASSERTION FAILED: !!handle !!m_nativeSurfaceHandle with several layout tests
https://bugs.webkit.org/show_bug.cgi?id=160143

Reviewed by Michael Catanzaro.

We have a message to set the native surface handle and another one for destroying it, the former is a normal
message while the latter is sync. This assertion happens if the web view is realized before the web process is
launched. This is the sequence:

1.- DrawingAreaProxyImpl sends SetNativeSurfaceHandleForCompositing message to the web process, since the
process hasn't been launched yet, the message is queued.
2.- Web process is launched and queued messages are now sent to the web process.
3.- The page is closed right after the web process is launched, and DrawingAreaProxyImpl sends
DestroyNativeSurfaceHandleForCompositing to the web process.
4.- The web process processes incoming messages, and DestroyNativeSurfaceHandleForCompositing is processed before
SetNativeSurfaceHandleForCompositing because it's sync.
5.- The web process processes SetNativeSurfaceHandleForCompositing message.

This is not only producing the assertion, it's also setting a handle for a X window already destroyed in the UI
process, so this could be producing the X errors we have seen in other tests. So, we need to make sure
SetNativeSurfaceHandleForCompositing and DestroyNativeSurfaceHandleForCompositing are handled in order by the
web process. We could make SetNativeSurfaceHandleForCompositing sync as well, but sync messages are just ignored
when sent before the web process has been launched (only normal messages are queued for obvious reasons). The
other option is sending the SetNativeSurfaceHandleForCompositing message with the
IPC::DispatchMessageEvenWhenWaitingForSyncReply flag. In this case the message is queued and dispatched on
process launch, but it's dispatched before other messages also queued without that flag, like
CreateWebPage. Since there's no WebPage the web process doesn't find a valid message receiver for it and
it's discarded. We need to ensure the DrawinArea object has been created before sending the
SetNativeSurfaceHandleForCompositing with the PC::DispatchMessageEvenWhenWaitingForSyncReply flag.

  • UIProcess/DrawingAreaProxyImpl.cpp:

(WebKit::DrawingAreaProxyImpl::didUpdateBackingStoreState): If we have received the first update and there's a
SetNativeSurfaceHandleForCompositing message pending, send it.
(WebKit::DrawingAreaProxyImpl::setNativeSurfaceHandleForCompositing): Do not send the message before the first
update is received.
(WebKit::DrawingAreaProxyImpl::destroyNativeSurfaceHandleForCompositing): If there was a
SetNativeSurfaceHandleForCompositing message pending, just ignore this destroy since the web process never
received the handle.

  • UIProcess/DrawingAreaProxyImpl.h:
11:28 PM Changeset in webkit [203675] by commit-queue@webkit.org
  • 27 edits
    3 copies
    1 delete in trunk

[Fetch API] Request should be created with any HeadersInit data
https://bugs.webkit.org/show_bug.cgi?id=159672

Patch by Youenn Fablet <youenn@apple.com> on 2016-07-24
Reviewed by Sam Weinig.

LayoutTests/imported/w3c:

  • imported/w3c/web-platform-tests/fetch/api/credentials/authentication-basic-expected.txt: Test was previously

failing due to lack of support for HeadersInit data in Request constructor.

  • platform/mac-wk1/imported/w3c/web-platform-tests/fetch/api/credentials/authentication-basic-expected.txt: Removed.
  • web-platform-tests/fetch/api/request/request-headers-expected.txt:
  • web-platform-tests/fetch/api/request/request-headers.html: Adding new test.

Source/JavaScriptCore:

  • Scripts/builtins/builtins_generator.py:

(WK_lcfirst): Synchronized with CodeGenerator.pm version.

Source/WebCore:

Made Request use JSBuiltinConstructor.
This allows initializing newly created Request with a JS built-in function, initializeFetchRequest.
initializeFetchRequest can call @fillFetchHeaders internal built-in to handle any HeadersInit data.
Future effort should be made to migrate more initialization code in initializeFetchRequest.

Made window and worker fetch function as a JS built-in.
This becomes more handy as these new functions can construct the Request object.
They can then call a single private function that takes a Request object as input.
Updated DOMWindowFetch and WorkerGlobalScopeFetch code accordingly.

To enable this, the binding generator is updated to support runtime-enabled JS built-in functions and
private functions atttached to global objects.

Covered by existing and modified tests.
Binding generator test covered by updated binding tests.

  • CMakeLists.txt: Adding DOMWindowFetch.js, FetchRequest.js and WorkerGlobalScopeFetch.js built-in files.
  • DerivedSources.make: Ditto.
  • Modules/fetch/DOMWindowFetch.cpp: Removed overloaded fetch and updated according new signature.

(WebCore::DOMWindowFetch::fetch):

  • Modules/fetch/DOMWindowFetch.h: Ditto.
  • Modules/fetch/DOMWindowFetch.idl: Making fetch a JS built-in and adding a @fetchRequest private function.
  • Modules/fetch/DOMWindowFetch.js: Added.

(fetch):

  • Modules/fetch/FetchHeaders.h:

(WebCore::FetchHeaders::setGuard): Used by FetchRequest when initializing headers.

  • Modules/fetch/FetchRequest.cpp:

(WebCore::buildHeaders): Removed as implemented in JS.
(WebCore::FetchRequest::initializeOptions): Added to handle most of the dictionary initialization.
(WebCore::FetchRequest::initializeWith): Method called from built-in constructor function.
(WebCore::FetchRequest::setBody): Corresponding to @setBody private method.
(WebCore::buildBody): Deleted.

  • Modules/fetch/FetchRequest.h:
  • Modules/fetch/FetchRequest.idl:
  • Modules/fetch/FetchRequest.js: Added.

(initializeFetchRequest): Implements fetch Request(input, init) constructor.

  • Modules/fetch/FetchResponse.cpp:

(WebCore::FetchResponse::fetch): Removed the construction of FetchRequest in fetch method since it is done by JS built-in code.

  • Modules/fetch/FetchResponse.h:
  • Modules/fetch/WorkerGlobalScopeFetch.cpp: Removed overloaded fetch and updated according new signature.

(WebCore::WorkerGlobalScopeFetch::fetch):

  • Modules/fetch/WorkerGlobalScopeFetch.h: Ditto.
  • Modules/fetch/WorkerGlobalScopeFetch.idl: Making fetch a JS built-in and adding a @fetchRequest private function.
  • Modules/fetch/WorkerGlobalScopeFetch.js: Added.

(fetch):

  • bindings/js/WebCoreBuiltinNames.h: Adding fetchRequest, setBody and Request private identifiers.
  • bindings/scripts/CodeGenerator.pm:

(WK_lcfirst): Replacing dOM by dom.

  • bindings/scripts/CodeGeneratorJS.pm:

(GenerateImplementation): Adding support for runtime-enabled built-in methods and private methods.

  • bindings/scripts/test/JS/JSTestGlobalObject.cpp:

(WebCore::JSTestGlobalObject::finishCreation):
(WebCore::jsTestGlobalObjectInstanceFunctionTestPrivateFunction):

  • bindings/scripts/test/ObjC/DOMTestGlobalObject.mm:

(-[DOMTestGlobalObject testJSBuiltinFunction]):

  • bindings/scripts/test/TestGlobalObject.idl: Adding tests for runtime-enabled global built-in methods and private methods.
11:07 PM Changeset in webkit [203674] by Philippe Normand
  • 16 edits in trunk

Improve GDB backtrace generation for GTK/EFL
https://bugs.webkit.org/show_bug.cgi?id=128928

Reviewed by Carlos Garcia Campos.

Source/WebKit2:

Move the Web, Database and Network ProcessIdentifier functions to
the cross-platform WKContext and WKPage implementations.

  • UIProcess/API/C/WKContext.cpp:

(WKContextGetNetworkProcessIdentifier):
(WKContextGetDatabaseProcessIdentifier):

  • UIProcess/API/C/WKContextPrivate.h:
  • UIProcess/API/C/WKPage.cpp:

(WKPageGetProcessIdentifier):

  • UIProcess/API/C/WKPagePrivate.h:
  • UIProcess/API/C/mac/WKContextPrivateMac.h:
  • UIProcess/API/C/mac/WKContextPrivateMac.mm:
  • UIProcess/API/C/mac/WKPagePrivateMac.h:
  • UIProcess/API/C/mac/WKPagePrivateMac.mm:

Tools:

The PID of the crashed process is now correctly supplied to the
crash log reporter. The kernel core_pattern needs to be updated
after this change to something like:

echo "|/home/phil/WebKit/Tools/Scripts/process-linux-coredump /tmp/core-pid_%p.dump" > /proc/sys/kernel/core_pattern

  • Scripts/process-linux-coredump: Added.

(main): Minimal python script reading coredump data on stdin and writing it to a file in /tmp/.

  • Scripts/webkitpy/port/efl.py:

(EflPort._get_crash_log): Supply path of the process-linux-coredump script.

  • Scripts/webkitpy/port/gtk.py:

(GtkPort._get_crash_log): Ditto.

  • Scripts/webkitpy/port/linux_get_crash_log.py:

(GDBCrashLogGenerator.init): New argument for supplying the path of a coredump processor script.
(GDBCrashLogGenerator.generate_crash_log): Update error message, the core_pattern should now be set to pipe coredumps to a script.
(GDBCrashLogGenerator): Deleted.

  • Scripts/webkitpy/port/linux_get_crash_log_unittest.py:

(GDBCrashLogGeneratorTest.test_generate_crash_log): Update test expectations.

  • WebKitTestRunner/TestController.cpp:

(WTR::TestController::networkProcessDidCrash): Supply PID of crash process.
(WTR::TestController::databaseProcessDidCrash): Ditto.
(WTR::TestController::processDidCrash): Ditto.

8:42 PM Changeset in webkit [203673] by Matt Baker
  • 2 edits in trunk/Source/WebInspectorUI

Web Inspector: Filtering is broken in the Overview timeline view
https://bugs.webkit.org/show_bug.cgi?id=160152
<rdar://problem/27517481>

Reviewed by Joseph Pecoraro.

  • UserInterface/Views/SourceCodeTimelineTimelineDataGridNode.js:

(WebInspector.SourceCodeTimelineTimelineDataGridNode.prototype.filterableDataForColumn):
Non-resource nodes should be filtered based on their display name.

6:14 PM Changeset in webkit [203672] by bshafiei@apple.com
  • 3 edits in branches/safari-602-branch/LayoutTests

Merge r203665. rdar://problem/27453479

5:48 PM Changeset in webkit [203671] by weinig@apple.com
  • 3 edits in trunk/Source/WebKit2

Add specialization for encoding/decoding WebCore::CertificateInfos in the Network Cache
<rdar://problem/27409315>
https://bugs.webkit.org/show_bug.cgi?id=160144

Reviewed by Chris Dumez.

  • NetworkProcess/cache/NetworkCacheCoders.cpp:

(WebKit::NetworkCache::encodeCFData):
(WebKit::NetworkCache::decodeCFData):
(WebKit::NetworkCache::encodeSecTrustRef):
(WebKit::NetworkCache::decodeSecTrustRef):
(WebKit::NetworkCache::encodeCertificateChain):
(WebKit::NetworkCache::decodeCertificateChain):
(WebKit::NetworkCache::Coder<WebCore::CertificateInfo>::encode):
(WebKit::NetworkCache::Coder<WebCore::CertificateInfo>::decode):

  • NetworkProcess/cache/NetworkCacheStorage.h:

(WebKit::NetworkCache::Storage::version):
Bump the version and lastStableVersion to account for the format change.

1:33 PM Changeset in webkit [203670] by fpizlo@apple.com
  • 33 edits
    2 adds in trunk

B3 should support multiple entrypoints
https://bugs.webkit.org/show_bug.cgi?id=159391

Reviewed by Saam Barati.
Source/JavaScriptCore:


This teaches B3 how to compile procedures with multiple entrypoints in the best way ever.

Multiple entrypoints are useful. We could use them to reduce the cost of compiling OSR
entrypoints. We could use them to implement better try/catch.

Multiple entrypoints are hard to support. All of the code that assumed that the root block
is the entrypoint would have to be changed. Transformations like moveConstants() would have
to do crazy things if the existence of multiple entrypoints prevented it from finding a
single common dominator.

Therefore, we want to add multiple entrypoints without actually teaching the compiler that
there is such a thing. That's sort of what this change does.

This adds a new opcode to both B3 and Air called EntrySwitch. It's a terminal that takes
one or more successors and no value children. The number of successors must match
Procedure::numEntrypoints(), which could be arbitrarily large. The semantics of EntrySwitch
are:

  • Each of the entrypoints sets a hidden Entry variable to that entrypoint's index and jumps to the procedure's root block.


  • An EntrySwitch is a switch statement over this hidden Entry variable.


The way that we actually implement this is that Air has a very late phase - after all
register and stack layout - that clones all code where the Entry variable is live; i.e all
code in the closure over predecessors of all blocks that do EntrySwitch.

Usually, you would use this by creating an EntrySwitch in the root block, but you don't
have to do that. Just remember that the code before EntrySwitch gets cloned for each
entrypoint. We allow cloning of an arbitrarily large amount of code because restricting it,
and so restricing the placement of EntrySwitches, would be unelegant. It would be hard to
preserve this invariant. For example we wouldn't be able to lower any value before an
EntrySwitch to a control flow diamond.

This patch gives us an easy-to-use way to use B3 to compile code with multiple entrypoints.
Inside the compiler, only code that runs very late in Air has to know about this feature.
We get the best of both worlds!

Also, I finally got rid of the requirement that you explicitly cast BasicBlock* to
FrequentedBlock. I can no longer remember why I thought that was a good idea. Removing it
doesn't cause any problems and it makes code easier to write.

  • CMakeLists.txt:
  • JavaScriptCore.xcodeproj/project.pbxproj:
  • b3/B3BasicBlockUtils.h:

(JSC::B3::updatePredecessorsAfter):
(JSC::B3::clearPredecessors):
(JSC::B3::recomputePredecessors):

  • b3/B3FrequencyClass.h:

(JSC::B3::maxFrequency):

  • b3/B3Generate.h:
  • b3/B3LowerToAir.cpp:

(JSC::B3::Air::LowerToAir::lower):

  • b3/B3MoveConstants.cpp:
  • b3/B3Opcode.cpp:

(WTF::printInternal):

  • b3/B3Opcode.h:
  • b3/B3Procedure.cpp:

(JSC::B3::Procedure::isFastConstant):
(JSC::B3::Procedure::entrypointLabel):
(JSC::B3::Procedure::addDataSection):

  • b3/B3Procedure.h:

(JSC::B3::Procedure::numEntrypoints):
(JSC::B3::Procedure::setNumEntrypoints):
(JSC::B3::Procedure::setLastPhaseName):

  • b3/B3Validate.cpp:
  • b3/B3Value.cpp:

(JSC::B3::Value::effects):
(JSC::B3::Value::typeFor):

  • b3/B3Value.h:
  • b3/air/AirCode.cpp:

(JSC::B3::Air::Code::cCallSpecial):
(JSC::B3::Air::Code::isEntrypoint):
(JSC::B3::Air::Code::resetReachability):
(JSC::B3::Air::Code::dump):

  • b3/air/AirCode.h:

(JSC::B3::Air::Code::setFrameSize):
(JSC::B3::Air::Code::numEntrypoints):
(JSC::B3::Air::Code::entrypoints):
(JSC::B3::Air::Code::entrypoint):
(JSC::B3::Air::Code::setEntrypoints):
(JSC::B3::Air::Code::entrypointLabel):
(JSC::B3::Air::Code::setEntrypointLabels):
(JSC::B3::Air::Code::calleeSaveRegisters):

  • b3/air/AirCustom.h:

(JSC::B3::Air::PatchCustom::isTerminal):
(JSC::B3::Air::PatchCustom::hasNonArgEffects):
(JSC::B3::Air::PatchCustom::hasNonArgNonControlEffects):
(JSC::B3::Air::PatchCustom::generate):
(JSC::B3::Air::CommonCustomBase::hasNonArgEffects):
(JSC::B3::Air::CCallCustom::forEachArg):
(JSC::B3::Air::ColdCCallCustom::forEachArg):
(JSC::B3::Air::ShuffleCustom::forEachArg):
(JSC::B3::Air::EntrySwitchCustom::forEachArg):
(JSC::B3::Air::EntrySwitchCustom::isValidFormStatic):
(JSC::B3::Air::EntrySwitchCustom::isValidForm):
(JSC::B3::Air::EntrySwitchCustom::admitsStack):
(JSC::B3::Air::EntrySwitchCustom::isTerminal):
(JSC::B3::Air::EntrySwitchCustom::hasNonArgNonControlEffects):
(JSC::B3::Air::EntrySwitchCustom::generate):

  • b3/air/AirGenerate.cpp:

(JSC::B3::Air::prepareForGeneration):
(JSC::B3::Air::generate):

  • b3/air/AirLowerEntrySwitch.cpp: Added.

(JSC::B3::Air::lowerEntrySwitch):

  • b3/air/AirLowerEntrySwitch.h: Added.
  • b3/air/AirOpcode.opcodes:
  • b3/air/AirOptimizeBlockOrder.cpp:

(JSC::B3::Air::blocksInOptimizedOrder):

  • b3/air/AirSpecial.cpp:

(JSC::B3::Air::Special::isTerminal):
(JSC::B3::Air::Special::hasNonArgEffects):
(JSC::B3::Air::Special::hasNonArgNonControlEffects):

  • b3/air/AirSpecial.h:
  • b3/air/AirValidate.cpp:
  • b3/air/opcode_generator.rb:
  • b3/testb3.cpp:

Source/WTF:

  • wtf/GraphNodeWorklist.h: Expose some handy functionality.

(WTF::GraphNodeWorklist::pop):
(WTF::GraphNodeWorklist::saw):
(WTF::GraphNodeWorklist::seen):

  • wtf/VectorTraits.h: Fix a bug! Otherwise filling a vector of byte-sized enum classes doesn't work.

Websites/webkit.org:


Update some statements about ControlValue (which doesn't exist anymore) and add a blurb
about EntrySwitch.

  • docs/b3/index.html:
  • docs/b3/intermediate-representation.html:
12:53 PM Changeset in webkit [203669] by n_wang@apple.com
  • 3 edits
    2 adds in trunk

AX: Video Controls: Volume cannot be adjusted using VO.
https://bugs.webkit.org/show_bug.cgi?id=160107

Reviewed by Dean Jackson.

Source/WebCore:

The volume slider in video tag had 0.01 step which caused the screen reader adjusting it slowly.
Changed the step to 0.05 and added the aria-valuetext attribute to the slider, so that the value
is spoken in percentage.

Test: accessibility/mac/video-volume-slider-accessibility.html

  • Modules/mediacontrols/mediaControlsApple.js:

(Controller.prototype.createControls):
(Controller.prototype.handleVolumeSliderInput):
(Controller.prototype.updateVolume):

LayoutTests:

  • accessibility/mac/video-volume-slider-accessibility-expected.txt: Added.
  • accessibility/mac/video-volume-slider-accessibility.html: Added.
11:59 AM Changeset in webkit [203668] by fpizlo@apple.com
  • 3 edits in trunk/Source/JavaScriptCore

Unreviewed, fix broken test. I don't know why I goofed this up without seeing it before landing.

  • b3/air/AirOpcode.opcodes:
  • b3/testb3.cpp:

(JSC::B3::run):

10:47 AM Changeset in webkit [203667] by ddkilzer@apple.com
  • 3 edits
    2 adds in trunk

REGRESSION (r203106): Crash in WebCore::MathMLElement::parseMathMLLength()
<https://webkit.org/b/160111>
<rdar://problem/27506489>

Reviewed by Chris Dumez.

Source/WebCore:

Test: mathml/mpadded-crash.html

  • mathml/MathMLElement.cpp:

(WebCore::skipLeadingAndTrailingWhitespace): Change to take
StringView parameter instead of String to avoid creating a
temporary String that's released on return.

LayoutTests:

  • mathml/mpadded-crash-expected.txt: Added.
  • mathml/mpadded-crash.html: Added.
10:36 AM Changeset in webkit [203666] by fpizlo@apple.com
  • 11 edits in trunk/Source/JavaScriptCore

[B3] Fusing immediates into test instructions should work again
https://bugs.webkit.org/show_bug.cgi?id=160073

Reviewed by Sam Weinig.

When we introduced BitImm, we forgot to change the Branch(BitAnd(value, constant))
fusion. This emits test instructions, so it should use BitImm for the constant. But it
was still using Imm! This meant that isValidForm() always returned false.

This fixes the code path to use BitImm, and turns off our use of BitImm64 on x86 since
it provides no benefit on x86 and has some risk (the code appears to play fast and loose
with the scratch register).

This is not an obvious progression on anything, so I added comprehensive tests to
testb3, which check that we selected the optimal instruction in a variety of situations.
We should add more tests like this!

  • b3/B3BasicBlock.h:

(JSC::B3::BasicBlock::successorBlock):

  • b3/B3LowerToAir.cpp:

(JSC::B3::Air::LowerToAir::createGenericCompare):

  • b3/B3LowerToAir.h:
  • b3/air/AirArg.cpp:

(JSC::B3::Air::Arg::isRepresentableAs):
(JSC::B3::Air::Arg::usesTmp):

  • b3/air/AirArg.h:

(JSC::B3::Air::Arg::isRepresentableAs):
(JSC::B3::Air::Arg::castToType):
(JSC::B3::Air::Arg::asNumber):

  • b3/air/AirCode.h:

(JSC::B3::Air::Code::size):
(JSC::B3::Air::Code::at):

  • b3/air/AirOpcode.opcodes:
  • b3/air/AirValidate.h:
  • b3/air/opcode_generator.rb:
  • b3/testb3.cpp:

(JSC::B3::compile):
(JSC::B3::compileAndRun):
(JSC::B3::lowerToAirForTesting):
(JSC::B3::testSomeEarlyRegister):
(JSC::B3::testBranchBitAndImmFusion):
(JSC::B3::zero):
(JSC::B3::run):

10:25 AM Changeset in webkit [203665] by mmaxfield@apple.com
  • 3 edits in trunk/LayoutTests

Test gardening after r203626.
https://bugs.webkit.org/show_bug.cgi?id=160102
<rdar://problem/27453479>

Unreviewed.

  • platform/ios-simulator/editing/deleting/delete-emoji-expected.txt:
  • platform/mac-yosemite/editing/deleting/delete-emoji-expected.txt:
8:53 AM Changeset in webkit [203664] by Yusuke Suzuki
  • 3 edits in trunk/Source/JavaScriptCore

Unreviewed, update the exponentiation expression error message
https://bugs.webkit.org/show_bug.cgi?id=159969

Follow up patch for r203499.

  • parser/Parser.cpp:

(JSC::Parser<LexerType>::parseBinaryExpression):

  • tests/stress/pow-expects-update-expression-on-lhs.js:

(throw.new.Error):

6:08 AM Changeset in webkit [203663] by commit-queue@webkit.org
  • 3 edits in trunk/Source/WebCore

[Coordinated Graphics] ASSERTION FAILED: !m_flushingLayers in fast/repaint/animation-after-layer-scroll.html
https://bugs.webkit.org/show_bug.cgi?id=160142

Patch by Carlos Garcia Campos <cgarcia@igalia.com> on 2016-07-24
Reviewed by Michael Catanzaro.

This only happens in layout tests, because it happens when RenderLayerCompositor::layerTreeAsText() is
called. The thing is that CoordinatedGraphicsLayer::flushCompositingState() calls notifyFlushRequired() that
checks if the coordinator is flusing layers and if not it calls RenderLayerCompositor::notifyFlushRequired() and
returns early. This normally works because the coodinator is the one starting the layer flush, so that when
RenderLayerCompositor::flushPendingLayerChanges() is called the coordinator is always flusing layers. But
RenderLayerCompositor::layerTreeAsText() calls RenderLayerCompositor::flushPendingLayerChanges() directly, so at
that moment the coordinator is not flusing layers, what causes that
CoordinatedGraphicsLayer::flushCompositingState() ends up calling RenderLayerCompositor::notifyFlushRequired()
that schedules a new flush while flusing layers causing the
assertion. CoordinatedGraphicsLayer::flushCompositingState() is always called from
CompositingCoordinator::flushPendingLayerChanges() or RenderLayerCompositor::flushPendingLayerChanges() so we
never need to call RenderLayerCompositor::notifyFlushRequired() from there.

  • platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:

(WebCore::CoordinatedGraphicsLayer::notifyFlushRequired): This is void now since the return value is not checked anywhere.
(WebCore::CoordinatedGraphicsLayer::flushCompositingState): Remove the call to notifyFlushRequired().

  • platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
6:04 AM Changeset in webkit [203662] by Michael Catanzaro
  • 3 edits in trunk/LayoutTests

[GTK] Layout test security/contentSecurityPolicy/plugins-types-allows-quicktime-plugin-replacement.html timing out
https://bugs.webkit.org/show_bug.cgi?id=160128

Unreviewed, skip the tests.

  • platform/efl/TestExpectations:
  • platform/gtk/TestExpectations:
4:10 AM Changeset in webkit [203661] by Darin Adler
  • 3 edits
    2 deletes in trunk/Source

Adding a new WebCore JavaScript built-in source file does not trigger rebuild of WebCoreJSBuiltins*
https://bugs.webkit.org/show_bug.cgi?id=160115

Reviewed by Youenn Fablet.

Source/JavaScriptCore:

  • make-generated-sources.sh: Removed. Was unused.

Source/WebCore:

  • DerivedSources.make: Added a missing dependency so the rule that builds WebCore_BUILTINS_WRAPPERS

kicks in when the list of WebCore_BUILTINS_SOURCES is modified. Also added another missing dependency
so that changes to the JavaScript built-ins Python scripts will also trigger WebCore_BUILTINS_WRAPPERS.

  • make-generated-sources.sh: Removed. Was unused.
Note: See TracTimeline for information about the timeline view.