WebKit.git
4 years agoStructure::previousID() races with Structure::allocateRareData()
fpizlo@apple.com [Thu, 2 Jun 2016 04:26:32 +0000 (04:26 +0000)]
Structure::previousID() races with Structure::allocateRareData()
https://bugs.webkit.org/show_bug.cgi?id=158280

Reviewed by Mark Lam.

The problem is that previousID() would test hasRareData() and then either load the
previous Structure from the rare data, or load it directly. allocateRareData() would set
the hasRareData() bit separately from moving the Structure pointer into the rare data. So
we'd have a race that would cause previousID() to sometimes return the rarae data instead
of the previous Structure.

The fix is to get rid of the hasRareData bit. We can use the structureID of the
previousOrRareData cell to determine if it's the previousID or the RareData. This fixes the
race and it's probably not any slower.

* runtime/Structure.cpp:
(JSC::Structure::Structure):
(JSC::Structure::allocateRareData):
* runtime/Structure.h:

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

4 years agoRunaway WebContent process CPU & memory @ foxnews.com
msaboff@apple.com [Thu, 2 Jun 2016 04:07:14 +0000 (04:07 +0000)]
Runaway WebContent process CPU & memory @ foxnews.com
https://bugs.webkit.org/show_bug.cgi?id=158290

Reviewed by Mark Lam.

Clear the thrown value at the end of the catch block so that the stack scanner won't
find the value during GC.

Added a new stress test.

* bytecompiler/NodesCodegen.cpp:
(JSC::TryNode::emitBytecode):
* tests/stress/recursive-try-catch.js: Added.
(logError):
(tryCallingBadFunction):
(recurse):
(test):

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

4 years agoAudit RenderObject casts and fix problems and style issues found
darin@apple.com [Thu, 2 Jun 2016 04:01:35 +0000 (04:01 +0000)]
Audit RenderObject casts and fix problems and style issues found
https://bugs.webkit.org/show_bug.cgi?id=158221

Reviewed by Chris Dumez.

Source/WebCore:

* bindings/objc/DOM.mm:
(-[DOMElement image]): Use auto to get more specific types in code getting
the renderer for an element instead of dumbing down the type to RenderObject.

* dom/Element.cpp:
(WebCore::Element::scrollByUnits): Call renderer only once. The comment in
Node advises we should do this since it has a branch in it.
(WebCore::Element::absoluteEventBounds): Call renderer only once. Also use
auto for a rect type to clarify that we are not changing the type of the
rect returned by the fucntion.
(WebCore::Element::webkitGetRegionFlowRanges): Call renderer only once.

* editing/CompositeEditCommand.cpp:
(WebCore::CompositeEditCommand::addBlockPlaceholderIfNeeded): Use auto
to get a mroe specific renderer type.

* editing/SimplifyMarkupCommand.cpp:
(WebCore::SimplifyMarkupCommand::doApply): Call renderer only once.

* editing/cocoa/HTMLConverter.mm:
(HTMLConverter::_addAttachmentForElement): Add an obviously missing
null check for something that is null checked elsewhere.
(fileWrapperForURL): Ditto.
(fileWrapperForElement): Changed argument type to HTMLImageElement& since
the call site already checks the type of the object. Use HTMLImageElement::src
instead of repeating the code here. Check the type of the renderer instead of
assuming it's a RenderImage.
(WebCore::editingAttributedStringFromRange): Pass a reference, not a pointer.

* html/HTMLAnchorElement.cpp:
(WebCore::appendServerMapMousePosition): Take a reference to an event rather
than a "known to be non-null" pointer. Call renderer only once. Round the
floating point values rather than truncating them.
(WebCore::HTMLAnchorElement::handleClick): Pass a reference.

* html/HTMLAttachmentElement.cpp:
(WebCore::HTMLAttachmentElement::setFile): Removed the now-unneeded cast since
the renderer function returns a pointer of a more specific type now.
(WebCore::HTMLAttachmentElement::parseAttribute): Ditto.
(WebCore::HTMLAttachmentElement::attachmentTitle): Use auto& to avoid a bit of
reference count churn.

* html/HTMLAttachmentElement.h: Override renderer to return a more specific type.
This follows the pattern that ContainerNode::renderer uses.

* html/HTMLButtonElement.h: Ditto.

* html/HTMLCanvasElement.cpp: Gave the constants at the top of the file more
normal names. Removed unneeded "static" from them. Moved the
defaultInterpolationQuality constant here from the header because it doesn't
need to be there.
(WebCore::HTMLCanvasElement::HTMLCanvasElement): Updated for name changes.
(WebCore::HTMLCanvasElement::createElementRenderer): Removed unneeded code to
set m_rendererIsCanvas to record renderer type; we can just check the type.
(WebCore::HTMLCanvasElement::setHeight): Updated for name changes.
(WebCore::HTMLCanvasElement::setWidth): Ditto.
(WebCore::HTMLCanvasElement::reset): Check the type of the renderer directly
instead of calling m_rendererIsCanvas. This helped make it clear we were
do extra unneeded checks since a renderer can't both be a RenderCanvas and
not be a RenderBox.
(WebCore::HTMLCanvasElement::createImageBuffer): Updated for name changes.

* html/HTMLCanvasElement.h: Moved DefaultInterpolationQuality into the cpp file.
Use nullptr instead of 0. Removed m_rendererIsCanvas.

* html/HTMLFieldSetElement.cpp:
(WebCore::HTMLFieldSetElement::HTMLFieldSetElement): Initialize m_documentVersion
in the class definition.
(WebCore::HTMLFieldSetElement::~HTMLFieldSetElement): Use m_hasDisabledAttribute.
(WebCore::updateFromControlElementsAncestorDisabledStateUnder): Fixed typo.
(WebCore::HTMLFieldSetElement::disabledAttributeChanged): Fixed mistake in this
function that would cause the number of disabled fieldset elements to be too high
if the disabled attribute's value was changed from one value to another. Use a
boolean to track the old value; can't think of a solution that works without that.
(WebCore::HTMLFieldSetElement::childrenChanged): Fixed typo.
(WebCore::HTMLFieldSetElement::didMoveToNewDocument): Use m_hasDisabledAttribute.
(WebCore::HTMLFieldSetElement::updateAssociatedElements): Changed name to make it
clearer what this function does. Tweaked a bit without changing behavior.
(WebCore::HTMLFieldSetElement::associatedElements): Updated for name change.
(WebCore::HTMLFieldSetElement::length): Changed to call associatedElements instead of
repeating that it does.

* html/HTMLFieldSetElement.h: Override renderer to return a more specific type.
Also updated for other changes mentioned above.

* html/HTMLFrameElement.cpp:
(WebCore::HTMLFrameElement::HTMLFrameElement): Initialize booleans in the class
definition rather than doing it here.
(WebCore::HTMLFrameElement::parseAttribute): Call renderer only once.

* html/HTMLFrameElement.h: Override renderer to return a more specific type.
Also initialize some booleans in the class definition.

* html/HTMLIFrameElement.h: Override renderer to return a more specific type.

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::updateRenderer): Added. Helper for a common idiom.
(WebCore::HTMLMediaElement::didAttachRenderers): Use auto to get a more specific
type for the renderer.
(WebCore::HTMLMediaElement::willDetachRenderers): Call renderer only once.
(WebCore::HTMLMediaElement::didRecalcStyle): Use updateRenderer to call renderer
only once.
(WebCore::HTMLMediaElement::loadResource): Ditto.
(WebCore::HTMLMediaElement::waitForSourceChange): Ditto.
(WebCore::HTMLMediaElement::noneSupported): Ditto.
(WebCore::HTMLMediaElement::setReadyState): Ditto.
(WebCore::HTMLMediaElement::progressEventTimerFired): Ditto.
(WebCore::HTMLMediaElement::selectNextSourceChild): Renamed goto label to use a style
that fits WebKit coding style. Call renderer only once in MediaQuery code.
(WebCore::HTMLMediaElement::mediaPlayerRepaint): Call renderer only once.
(WebCore::HTMLMediaElement::mediaPlayerSizeChanged): Use updateRenderer to call
renderer only once.
(WebCore::HTMLMediaElement::mediaPlayerRenderingCanBeAccelerated): Call renderer
only once.
(WebCore::HTMLMediaElement::mediaPlayerGraphicsDeviceAdapter): Call page only once.
(WebCore::HTMLMediaElement::mediaEngineWasUpdated): Use updateRenderer to call
renderer only once.
(WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged): Ditto.
(WebCore::HTMLMediaElement::updatePlayState): Ditto.
(WebCore::HTMLMediaElement::stopWithoutDestroyingMediaPlayer): Ditto.
(WebCore::HTMLMediaElement::resume): Ditto.
(WebCore::HTMLMediaElement::mediaPlayerContentBoxRect): Call renderer only once.
(WebCore::mediaElementIsAllowedToAutoplay): Use auto to get a more specific type.

* html/HTMLMediaElement.h: Removed conditionals around forward declarations.
Tweaked formatting a bit. Added the updateRender function. Override renderer to
return a more specific type.

* html/HTMLSelectElement.cpp:
(WebCore::HTMLSelectElement::optionElementChildrenChanged): Don't use the renderer
just to get to the document for the AXObjectCache.
(WebCore::HTMLSelectElement::setLength): Use auto for the list items vector.
(WebCore::HTMLSelectElement::nextValidIndex): Ditto.
(WebCore::HTMLSelectElement::firstSelectableListIndex): Ditto.
(WebCore::HTMLSelectElement::nextSelectableListIndexPageAway): Ditto. Also add a
null check for the renderer.
(WebCore::HTMLSelectElement::updateListBoxSelection): Split an assertion with &&
in it into two separate assertions. Use auto for the list items vector and use
a reference for the list items.
(WebCore::HTMLSelectElement::listBoxOnChange): Use auto for the list items vector
and use a reference for the list items.
(WebCore::HTMLSelectElement::setRecalcListItems): Don't use the renderer
just to get to the document for the AXObjectCache.
(WebCore::HTMLSelectElement::selectOption): Use auto for the list items vector.
(WebCore::HTMLSelectElement::optionToListIndex): Ditto.
(WebCore::HTMLSelectElement::listToOptionIndex): Ditto.
(WebCore::HTMLSelectElement::searchOptionsForValue): Ditto.
(WebCore::HTMLSelectElement::restoreFormControlState): Ditto.
(WebCore::HTMLSelectElement::platformHandleKeydownEvent): Call renderer only once.
(WebCore::HTMLSelectElement::menuListDefaultEventHandler): Split an assertion with
&& in it into two separate assertions. Use auto for the list items vector. Call
renderer only once.
(WebCore::HTMLSelectElement::updateSelectedState): Use a reference for the list
item.
(WebCore::HTMLSelectElement::listBoxDefaultEventHandler): Use auto for the list
items vvector. Call renderer less often; could not quite get it down to once.
(WebCore::HTMLSelectElement::defaultEventHandler): Call renderer only once.
(WebCore::HTMLSelectElement::lastSelectedListIndex): Use auto for the list items
vector and use a reference for the list items.
(WebCore::HTMLSelectElement::optionAtIndex): Use a reference for the list item.
(WebCore::HTMLSelectElement::accessKeySetSelectedIndex): Use auto for the list
items vector and use a reference for the list items.
(WebCore::HTMLSelectElement::length): Use auto for the list items vector.

* html/HTMLTextAreaElement.h: Override renderer to return a more specific type.

* html/HTMLVideoElement.cpp:
(WebCore::HTMLVideoElement::didAttachRenderers): Call renderer only once and
don't downcast it. There was no obvious type check because the renderer has a
guaranteed type, but this is now clearer because it's the renderer function
that returns a more specific type.
(WebCore::HTMLVideoElement::parseAttribute): Ditto.
(WebCore::HTMLVideoElement::setDisplayMode): Ditto.

* html/HTMLVideoElement.h: Override renderer to return a more specific type.
* html/HTMLWBRElement.h: Ditto.

* html/MediaElementSession.cpp:
(WebCore::MediaElementSession::canControlControlsManager): Removed
unneeded typecast in code that null checks a renderer.
(WebCore::isMainContent): Remove now-unneeded downcast of a renderer
obtained from an HTMLMediaElement. Fixed awkward formatting by splitting
an if statement into two.
(WebCore::isElementLargeEnoughForMainContent): Remove now unneeded downcast
of a renderer obtained from an HTMLMediaElement.

* html/TextFieldInputType.cpp:
(WebCore::TextFieldInputType::forwardEvent): Call renderer only once.
Also use auto more in the code rather than writing out types.

* html/shadow/SliderThumbElement.cpp:
(WebCore::SliderThumbElement::setPositionFromPoint): Used the renderBox
function more consistently for all the renderers used here; before,
some had null checks and others did not.

* html/shadow/TextControlInnerElements.cpp:
(WebCore::SearchFieldResultsButtonElement::defaultEventHandler): Use auto
a bit more.

* page/EventHandler.cpp:
(WebCore::enclosingScrollableArea): Removed a redundant null check and
stopped using the name "element" for a local variable that was not
always an element.

* page/PrintContext.cpp:
(WebCore::enclosingBoxModelObject): Rewrote loop to be simpler and tighter.
Also marked this inline since it's used only one place.
(WebCore::PrintContext::pageNumberForElement): Use auto for the return
value rather than writing out the type.

* page/SpatialNavigation.cpp:
(WebCore::isScrollableNode): Tighten the code and use auto a bit.

* platform/ios/WebVideoFullscreenControllerAVKit.mm: Add an include of
RenderVideo.h since this gets at the renderer for a video.

* rendering/RenderAttachment.h:
(WebCore::HTMLAttachmentElement::renderer): Added. Function is here because
it can only be called by code that includes this header. This matches the
pattern of RenderElement.h and ContainerNode::renderer.

* rendering/RenderFrame.cpp: Added now-needed include.

* rendering/RenderFrame.h:
(WebCore::HTMLFrameElement::renderer): Added. Same logic as above.

* rendering/RenderLayerFilterInfo.cpp:
(WebCore::RenderLayer::FilterInfo::updateReferenceFilterClients): Use auto
a bit and call rendeer only once.

* rendering/RenderMedia.h:
(WebCore::HTMLMediaElement::renderer): Added. Same logic as above.
* rendering/RenderTextControlMultiLine.h:
(WebCore::HTMLTextAreaElement::renderer): Ditto.

* rendering/RenderVideo.cpp:
(WebCore::placeholder): Renamed. Tightened up argument type to match what
is passed at all the call sites. Use auto instead of RenderObject.
(WebCore::RenderVideo::offsetLeft): Use auto and the renamed function above.
(WebCore::RenderVideo::offsetTop): Ditto.
(WebCore::RenderVideo::offsetWidth): Ditto.
(WebCore::RenderVideo::offsetHeight): Ditto.

* rendering/RenderVideo.h:
(WebCore::HTMLVideoElement::renderer): Added. Same logic as above.

* svg/SVGGElement.cpp:
(WebCore::SVGGElement::createElementRenderer): Fixed typo.

* svg/SVGGraphicsElement.cpp:
(WebCore::SVGGraphicsElement::createElementRenderer): Removed
non-helpful oblique comment.
* svg/SVGPathElement.cpp:
(WebCore::SVGPathElement::createElementRenderer): Ditto.

Source/WebKit/mac:

* Misc/WebNSPasteboardExtras.mm:
(imageFromElement): Use auto and tighten the logic a bit.
(-[NSPasteboard _web_declareAndWriteDragImageForElement:URL:title:archive:source:]):
Use auto and added a comment about this not using imageFromElement.

* Plugins/WebBaseNetscapePluginView.mm:
(-[WebBaseNetscapePluginView _windowClipRect]): Consistently cast to
RenderEmbeddedObject, which is the class used for renderers for plug-ins.
(-[WebBaseNetscapePluginView inFlatteningPaint]): Ditto.
(-[WebBaseNetscapePluginView invalidatePluginContentRect:]): Ditto.
(-[WebBaseNetscapePluginView actualVisibleRectInWindow]): Ditto.

* WebCoreSupport/WebFrameLoaderClient.mm:
(WebFrameLoaderClient::createPlugin): Changed code so it does a null check
rather than assuming the renderer is non-null.
(WebFrameLoaderClient::createJavaAppletWidget): Ditto.

Source/WebKit2:

* Shared/WebRenderObject.cpp:
(WebKit::WebRenderObject::WebRenderObject): Tightened up the code that
builds the tree of objects; fewer local variables.

* WebProcess/Plugins/PluginView.cpp:
(WebKit::PluginView::invalidateRect): Cast to RenderEmbeddedObject since
that is the class used for plug-ins.
(WebKit::PluginView::pluginProcessCrashed): Ditto.
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::createPlugin): Ditto.
(WebKit::WebPage::plugInIsPrimarySize): Check the renderer for null here.
Did not change this to RenderEmbeddedObject, though, because I wasn't
absolute certain this is only called with that type of renderer.

* WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::rangeForWebSelectionAtPosition): Tweaked.

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

4 years agoModernize lambda usage for all callers of RunLoop::dispatch() (take 2).
beidson@apple.com [Thu, 2 Jun 2016 03:38:39 +0000 (03:38 +0000)]
Modernize lambda usage for all callers of RunLoop::dispatch() (take 2).
https://bugs.webkit.org/show_bug.cgi?id=158277

Reviewed by Chris Dumez.

* NetworkProcess/cache/NetworkCache.cpp:
(WebKit::NetworkCache::Cache::deleteDumpFile):

* Platform/IPC/Connection.cpp:
(IPC::Connection::addWorkQueueMessageReceiver):
(IPC::Connection::removeWorkQueueMessageReceiver):
(IPC::Connection::invalidate):
(IPC::Connection::sendMessage):
(IPC::Connection::processIncomingMessage):
(IPC::Connection::postConnectionDidCloseOnConnectionWorkQueue):

* UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
(WebKit::LocalStorageDatabaseTracker::LocalStorageDatabaseTracker):

* UIProcess/Storage/StorageManager.cpp:
(WebKit::StorageManager::createSessionStorageNamespace):
(WebKit::StorageManager::destroySessionStorageNamespace):
(WebKit::StorageManager::setAllowedSessionStorageNamespaceConnection):
(WebKit::StorageManager::cloneSessionStorageNamespace):
(WebKit::StorageManager::processDidCloseConnection):

* UIProcess/WebResourceLoadStatisticsStore.cpp:
(WebKit::WebResourceLoadStatisticsStore::readDataFromDiskIfNeeded):

* UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::fetchData):
(WebKit::WebsiteDataStore::removeData):

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

4 years ago[JSC] Some setters for components of Date do not timeClip() their result
benjamin@webkit.org [Thu, 2 Jun 2016 03:34:31 +0000 (03:34 +0000)]
[JSC] Some setters for components of Date do not timeClip() their result
https://bugs.webkit.org/show_bug.cgi?id=158278
Source/JavaScriptCore:

rdar://problem/25131426

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

Many of the setters where not doing timeClip() on the computed UTC
time since Epoch.

See http://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.setdate
and the following sections for the definition.

* runtime/DatePrototype.cpp:
(JSC::setNewValueFromTimeArgs):
(JSC::setNewValueFromDateArgs):

Source/WTF:

Unreviewed.

Patch by Benjamin Poulain <bpoulain@apple.com> on 2016-06-01

* wtf/DateMath.cpp:
(WTF::equivalentYearForDST): Deleted.
The assertion is bogus.
As the comments above explains, the function is completely wrong for years
outside [1900-2100].
The tests passing large values for years are failing (year <= maxYear).
The weird NaN test is a mystery. The old changelog does not explain it.

LayoutTests:

rdar://problem/25131426

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

New test coverage for large values.

Note that some of those tests are still failing with this patch.

The reason is our code handling month and years is unable to deal
with values outside int32.
Changing that is a bit more complicated due to the number of users
of DateMath. I leave that for the future.

* js/date-timeClip-large-values-expected.txt: Added.
* js/date-timeClip-large-values.html: Added.
* js/script-tests/date-timeClip-large-values.js: Added.

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

4 years agoLayoutTest accessibility/ios-simulator/attributed-string-for-range.html failing on...
cfleizach@apple.com [Thu, 2 Jun 2016 03:19:54 +0000 (03:19 +0000)]
LayoutTest accessibility/ios-simulator/attributed-string-for-range.html failing on ios-simulator debug
https://bugs.webkit.org/show_bug.cgi?id=158279

Reviewed by Alexey Proskuryakov.

Just use the same description for debug and release. We're not getting any benefit from having two.

* accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(-[WebAccessibilityObjectWrapper description]):

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

4 years agocanOptimizeStringObjectAccess should use ObjectPropertyConditions rather than structu...
keith_miller@apple.com [Thu, 2 Jun 2016 03:18:16 +0000 (03:18 +0000)]
canOptimizeStringObjectAccess should use ObjectPropertyConditions rather than structure watchpoints
https://bugs.webkit.org/show_bug.cgi?id=158291

Reviewed by Benjamin Poulain.

The old StringObject primitive access code used structure watchpoints. This meant that
if you set a watchpoint on String.prototype prior to tiering up to the DFG then added
a new property to String.prototype then we would never use StringObject optimizations.
This made property caching in the LLInt bad because it meant we would watchpoint
String.prototype very early in the program, which hurt date-format-xpab.js since that
benchmark relies on the StringObject optimizations.

This patch also extends ObjectPropertyConditionSet to be able to handle a slotBase
equivalence condition. Since that makes the code for generating the DFG watchpoints
significantly cleaner.

* bytecode/ObjectPropertyCondition.cpp:
(JSC::ObjectPropertyCondition::structureEnsuresValidityAssumingImpurePropertyWatchpoint):
* bytecode/ObjectPropertyConditionSet.cpp:
(JSC::ObjectPropertyConditionSet::hasOneSlotBaseCondition):
(JSC::ObjectPropertyConditionSet::slotBaseCondition):
(JSC::generateConditionsForPrototypeEquivalenceConcurrently):
* bytecode/ObjectPropertyConditionSet.h:
* dfg/DFGGraph.cpp:
(JSC::DFG::Graph::isStringPrototypeMethodSane):
(JSC::DFG::Graph::canOptimizeStringObjectAccess):
* dfg/DFGGraph.h:

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

4 years ago[iOS] Regression(r200972): Crash under WebKit::WebPage::selectTextWithGranularityAtPo...
cdumez@apple.com [Thu, 2 Jun 2016 01:09:55 +0000 (01:09 +0000)]
[iOS] Regression(r200972): Crash under WebKit::WebPage::selectTextWithGranularityAtPoint()
https://bugs.webkit.org/show_bug.cgi?id=158284
<rdar://problem/26573954>

Reviewed by Ryosuke Niwa.

range can be null but r200972 started dereferencing it without null
check. This patch adds a null check for range and uses the pre-r200972
code path if range is null.

* WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::selectTextWithGranularityAtPoint):

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

4 years agoUse HashMap::ensure() in DocumentOrderedMap::add()
cdumez@apple.com [Thu, 2 Jun 2016 00:23:59 +0000 (00:23 +0000)]
Use HashMap::ensure() in DocumentOrderedMap::add()
https://bugs.webkit.org/show_bug.cgi?id=158283

Reviewed by Ryosuke Niwa.

Use HashMap::ensure() in DocumentOrderedMap::add() to avoid constructing
a MapEntry if the key is already present in the HashMap.

* dom/DocumentOrderedMap.cpp:
(WebCore::DocumentOrderedMap::add):

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

4 years agoUpdate QuartzCoreSPI.h for <rdar://problem/26584828>.
ap@apple.com [Thu, 2 Jun 2016 00:09:58 +0000 (00:09 +0000)]
Update QuartzCoreSPI.h for <rdar://problem/26584828>.

* platform/spi/cocoa/QuartzCoreSPI.h:

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

4 years agoModernize lambda usage for all callers of RunLoop::dispatch().
beidson@apple.com [Wed, 1 Jun 2016 23:38:37 +0000 (23:38 +0000)]
Modernize lambda usage for all callers of RunLoop::dispatch().
https://bugs.webkit.org/show_bug.cgi?id=158265

Reviewed by Chris Dumez.

Source/WebCore:

No new tests (Refactor, no behavior change).

* Modules/indexeddb/shared/InProcessIDBServer.cpp:
(WebCore::InProcessIDBServer::deleteDatabase):
(WebCore::InProcessIDBServer::didDeleteDatabase):
(WebCore::InProcessIDBServer::openDatabase):
(WebCore::InProcessIDBServer::didOpenDatabase):
(WebCore::InProcessIDBServer::didAbortTransaction):
(WebCore::InProcessIDBServer::didCommitTransaction):
(WebCore::InProcessIDBServer::didCreateObjectStore):
(WebCore::InProcessIDBServer::didDeleteObjectStore):
(WebCore::InProcessIDBServer::didClearObjectStore):
(WebCore::InProcessIDBServer::didCreateIndex):
(WebCore::InProcessIDBServer::didDeleteIndex):
(WebCore::InProcessIDBServer::didPutOrAdd):
(WebCore::InProcessIDBServer::didGetRecord):
(WebCore::InProcessIDBServer::didGetCount):
(WebCore::InProcessIDBServer::didDeleteRecord):
(WebCore::InProcessIDBServer::didOpenCursor):
(WebCore::InProcessIDBServer::didIterateCursor):
(WebCore::InProcessIDBServer::abortTransaction):
(WebCore::InProcessIDBServer::commitTransaction):
(WebCore::InProcessIDBServer::didFinishHandlingVersionChangeTransaction):
(WebCore::InProcessIDBServer::createObjectStore):
(WebCore::InProcessIDBServer::deleteObjectStore):
(WebCore::InProcessIDBServer::clearObjectStore):
(WebCore::InProcessIDBServer::createIndex):
(WebCore::InProcessIDBServer::deleteIndex):
(WebCore::InProcessIDBServer::putOrAdd):
(WebCore::InProcessIDBServer::getRecord):
(WebCore::InProcessIDBServer::getCount):
(WebCore::InProcessIDBServer::deleteRecord):
(WebCore::InProcessIDBServer::openCursor):
(WebCore::InProcessIDBServer::iterateCursor):
(WebCore::InProcessIDBServer::establishTransaction):
(WebCore::InProcessIDBServer::fireVersionChangeEvent):
(WebCore::InProcessIDBServer::didStartTransaction):
(WebCore::InProcessIDBServer::didCloseFromServer):
(WebCore::InProcessIDBServer::notifyOpenDBRequestBlocked):
(WebCore::InProcessIDBServer::databaseConnectionClosed):
(WebCore::InProcessIDBServer::abortOpenAndUpgradeNeeded):
(WebCore::InProcessIDBServer::didFireVersionChangeEvent):
(WebCore::InProcessIDBServer::openDBRequestCancelled):
(WebCore::InProcessIDBServer::confirmDidCloseFromServer):
(WebCore::InProcessIDBServer::getAllDatabaseNames):
(WebCore::InProcessIDBServer::didGetAllDatabaseNames):

* Modules/websockets/WebSocket.cpp:
(WebCore::WebSocket::connect):

* bindings/js/SerializedScriptValue.cpp:
(WebCore::SerializedScriptValue::writeBlobsToDiskForIndexedDBSynchronously):

* page/scrolling/ThreadedScrollingTree.cpp:
(WebCore::ThreadedScrollingTree::invalidate):
(WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):
(WebCore::ThreadedScrollingTree::currentSnapPointIndicesDidChange):
(WebCore::ThreadedScrollingTree::handleWheelEventPhase):
(WebCore::ThreadedScrollingTree::setActiveScrollSnapIndices):
(WebCore::ThreadedScrollingTree::deferTestsForReason):
(WebCore::ThreadedScrollingTree::removeTestDeferralForReason):

* platform/graphics/cocoa/FontCacheCoreText.cpp:
(WebCore::FontCache::platformPrecache):

* platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
(WebCore::DisplayRefreshMonitorMac::displayLinkFired):

* platform/network/DataURLDecoder.cpp:
(WebCore::DataURLDecoder::createDecodeTask):
(WebCore::DataURLDecoder::decode):

Source/WebKit2:

* DatabaseProcess/DatabaseProcess.cpp:
(WebKit::DatabaseProcess::fetchWebsiteData):
(WebKit::DatabaseProcess::deleteWebsiteData):
(WebKit::DatabaseProcess::deleteWebsiteDataForOrigins):

* NetworkProcess/NetworkProcess.cpp:
(WebKit::fetchDiskCacheEntries):
(WebKit::NetworkProcess::fetchWebsiteData):

* NetworkProcess/cache/NetworkCacheStorage.cpp:
(WebKit::NetworkCache::Storage::remove):
(WebKit::NetworkCache::retrieveFromMemory):

* Platform/IPC/Connection.cpp:
(IPC::Connection::SyncMessageState::processIncomingMessage):
(IPC::Connection::processIncomingMessage):
(IPC::Connection::connectionDidClose):
(IPC::Connection::enqueueIncomingMessage):
* Platform/IPC/mac/ConnectionMac.mm:
(IPC::Connection::receiveSourceEventHandler):

* Shared/mac/CookieStorageShim.mm:
(-[WKNSURLSessionLocal _getCookieHeadersForTask:completionHandler:]):
* UIProcess/API/APIUserContentExtensionStore.cpp:
(API::UserContentExtensionStore::lookupContentExtension):
(API::UserContentExtensionStore::compileContentExtension):
(API::UserContentExtensionStore::removeContentExtension):

* UIProcess/Launcher/ProcessLauncher.cpp:
(WebKit::ProcessLauncher::ProcessLauncher):
* UIProcess/Launcher/mac/ProcessLauncherMac.mm:
(WebKit::connectToService):

* UIProcess/Storage/StorageManager.cpp:
(WebKit::StorageManager::getSessionStorageOrigins):
(WebKit::StorageManager::deleteSessionStorageOrigins):
(WebKit::StorageManager::deleteSessionStorageEntriesForOrigins):
(WebKit::StorageManager::getLocalStorageOrigins):
(WebKit::StorageManager::getLocalStorageOriginDetails):
(WebKit::StorageManager::deleteLocalStorageEntriesForOrigin):
(WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):
(WebKit::StorageManager::deleteLocalStorageEntriesForOrigins):

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::isWebProcessResponsive):

* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::isResponsive):

* UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::fetchData):

* WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
(WebKit::NetscapePlugin::pluginThreadAsyncCall):

* WebProcess/Plugins/PluginView.cpp:
(WebKit::PluginView::unprotectPluginFromDestruction):

* WebProcess/WebPage/EventDispatcher.cpp:
(WebKit::EventDispatcher::wheelEvent):
(WebKit::EventDispatcher::gestureEvent):
(WebKit::EventDispatcher::touchEvent):

* WebProcess/WebPage/ViewUpdateDispatcher.cpp:
(WebKit::ViewUpdateDispatcher::visibleContentRectUpdate):

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

4 years agoREGRESSION(r201385) ASSERT in WebCore::HTMLMediaElement::updateActiveTextTrackCues...
eric.carlson@apple.com [Wed, 1 Jun 2016 22:49:07 +0000 (22:49 +0000)]
REGRESSION(r201385) ASSERT in WebCore::HTMLMediaElement::updateActiveTextTrackCues + 5688
https://bugs.webkit.org/show_bug.cgi?id=158164
<rdar://problem/26498634>

Reviewed by Jer Noble.

No new tests, this prevents an assert in existing tests.

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::~HTMLMediaElement): Call beginIgnoringTrackDisplayUpdateRequests
  so we avoid doing unnecessary work triggered by destruction.

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

4 years agoUnreviewed, rolling in r201436.
ggaren@apple.com [Wed, 1 Jun 2016 22:22:04 +0000 (22:22 +0000)]
Unreviewed, rolling in r201436.
https://bugs.webkit.org/show_bug.cgi?id=158143

r201562 should haved fixed the Dromaeo DOM core regression.

Restored changeset:

"REGRESSION: JSBench spends a lot of time transitioning
to/from dictionary"
https://bugs.webkit.org/show_bug.cgi?id=158045
http://trac.webkit.org/changeset/201436

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

4 years agoFix iOS build.
dino@apple.com [Wed, 1 Jun 2016 21:43:52 +0000 (21:43 +0000)]
Fix iOS build.

* platform/spi/cg/CoreGraphicsSPI.h: No ColorSync on iOS.

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

4 years agoCrash under eventTargetRespectingTargetRules()
cdumez@apple.com [Wed, 1 Jun 2016 21:43:09 +0000 (21:43 +0000)]
Crash under eventTargetRespectingTargetRules()
https://bugs.webkit.org/show_bug.cgi?id=158273
<rdar://problem/26343998>

Reviewed by Alex Christensen.

The code would call nodeOrHostIfPseudoElement(), which can return null
and then dereference it in eventTargetRespectingTargetRules() without
null check. This patch adds a null check. When the node is null, the
while loop after will do nothing and thus the target will not be used.

No new tests, we do not have a good reproduction case.

* dom/EventPath.cpp:
(WebCore::EventPath::EventPath):

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

4 years agoUnreviewed, rolling out r201551 and r201552.
ryanhaddad@apple.com [Wed, 1 Jun 2016 21:40:16 +0000 (21:40 +0000)]
Unreviewed, rolling out r201551 and r201552.
https://bugs.webkit.org/show_bug.cgi?id=158275

This change caused 3 API tests to crash on ios-simulator
(Requested by ryanhaddad on #webkit).

Reverted changesets:

"Precache primary font in a secondary thread"
https://bugs.webkit.org/show_bug.cgi?id=158243
http://trac.webkit.org/changeset/201551

"Remove accidental fprintf."
http://trac.webkit.org/changeset/201552

Patch by Commit Queue <commit-queue@webkit.org> on 2016-06-01

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

4 years agoAX: iOS: VoiceOver can't access attachments in mail messages
cfleizach@apple.com [Wed, 1 Jun 2016 21:27:04 +0000 (21:27 +0000)]
AX: iOS: VoiceOver can't access attachments in mail messages
https://bugs.webkit.org/show_bug.cgi?id=158198

Reviewed by Joanmarie Diggs.

Source/WebCore:

Replaced elements, like attachemnts, were not being exposed in the attributed string returned to VoiceOver.
Make sure they are exposed with the attachment character, pointing to the actual element.

Test: accessibility/ios-simulator/attributed-string-for-range.html

* accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(AccessibilityUnignoredAncestor):
(-[WebAccessibilityObjectWrapper _stringForRange:attributed:]):

Tools:

* DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
(AccessibilityUIElement::stringForRange):
(AccessibilityUIElement::attributedStringForRange):
(AccessibilityUIElement::attributedStringRangeIsMisspelled):
* WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
(WTR::AccessibilityUIElement::attributedStringForRange):
(WTR::AccessibilityUIElement::attributedStringRangeIsMisspelled):

LayoutTests:

* accessibility/ios-simulator/attributed-string-for-range.html: Added.

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

4 years agosetVideoFullscreenGravity() has no effect on the fullscreen video layer
jer.noble@apple.com [Wed, 1 Jun 2016 20:55:30 +0000 (20:55 +0000)]
setVideoFullscreenGravity() has no effect on the fullscreen video layer
https://bugs.webkit.org/show_bug.cgi?id=158267

Reviewed by Eric Carlson.

When we moved to a 2-AVPlayerLayer solution, we didn't update setVideoFullscreenGravity()
to change the correct layer's videoGravity property.

* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
(WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenGravity):

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

4 years agoUnreviewed, rolling out r201488.
commit-queue@webkit.org [Wed, 1 Jun 2016 20:32:57 +0000 (20:32 +0000)]
Unreviewed, rolling out r201488.
https://bugs.webkit.org/show_bug.cgi?id=158268

Caused 23% regression on JetStream's crypto-md5 (Requested by
rniwa on #webkit).

Reverted changeset:

"[ESNext] Support trailing commas in function param lists"
https://bugs.webkit.org/show_bug.cgi?id=158020
http://trac.webkit.org/changeset/201488

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

4 years agoFix null dereferencing in ResourceTimingInformation::addResourceTiming
commit-queue@webkit.org [Wed, 1 Jun 2016 20:15:23 +0000 (20:15 +0000)]
Fix null dereferencing in ResourceTimingInformation::addResourceTiming
https://bugs.webkit.org/show_bug.cgi?id=158266
rdar://problem/26528466

Patch by Alex Christensen <achristensen@webkit.org> on 2016-06-01
Reviewed by Chris Dumez.

This would crash sometimes in http/tests/security/cross-frame-access-custom.html

* loader/ResourceTimingInformation.cpp:
(WebCore::ResourceTimingInformation::addResourceTiming):
* loader/ResourceTimingInformation.h:
* loader/cache/CachedResourceLoader.cpp:
(WebCore::CachedResourceLoader::requestResource):
(WebCore::CachedResourceLoader::loadDone):
We would dereference a null pointer on the first instruction when calling
Document::parentDocument from ResourceTimingInformation::addResourceTiming,
which means the document was null.  CachedResourceLoader::document even has
a comment saying it can be null, so we should check it before using it.

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

4 years agov3 UI should support marking and unmarking outliers as well as hiding them
rniwa@webkit.org [Wed, 1 Jun 2016 19:55:38 +0000 (19:55 +0000)]
v3 UI should support marking and unmarking outliers as well as hiding them
https://bugs.webkit.org/show_bug.cgi?id=158248

Rubber-stamped by Chris Dumez.

Added the support for marking and unmarking a sequence of points as outliers. Unlike v2, we now support marking
multiple points as outliers in a single click. Also fixed a bug that outliers are never explicitly hidden in v3 UI.

This patch splits ChartStyles.createChartSourceList into two functions: resolveConfiguration and createSourceList
to separate the work of resolving platform and metric IDs to their respective model objects, and creating a source
list used by TimeSeriesChart to fetch measurement sets. createSourceList is called again when filtering options are
changed.

It also adds noCache option to TimeSeriesChart's fetchMeasurementSets, MeasurementSet's fetchBetween and
_fetchPrimaryCluster to update the measurement sets after marking or unmarking points as outliers. In addition, it
fixes a bug that the annotation bars for analysis tasks are not updated in charts page after creating an analysis
task by adding noCache option to ChartPaneBase's fetchAnalysisTasks, AnalysisTask's fetchByPlatformAndMetric and
_fetchSubset.

Finally, this patch splits ChartPane._makeAnchorToOpenPane into _makePopoverActionItem, _makePopoverOpenOnHover and
_setPopoverVisibility for clarity.

* public/v3/components/chart-pane-base.js:
(ChartPaneBase): Added _disableSampling and _showOutliers as instance variables.
(ChartPaneBase.prototype.configure):
(ChartPaneBase.prototype.isSamplingEnabled): Added.
(ChartPaneBase.prototype.setSamplingEnabled): Added. When a filtering option is updated, recreate the source list
so that TimeSeriesChart.setSourceList can re-fetch the measurement set JSONs.
(ChartPaneBase.prototype.isShowingOutliers): Added.
(ChartPaneBase.prototype.setShowOutliers): Added. Ditto for calling _updateSourceList.
(ChartPaneBase.prototype._updateSourceList): Added.
(ChartPaneBase.prototype.fetchAnalysisTasks): Renamed from _fetchAnalysisTasks. Now takes noCache as an argument
instead of platform and metric IDs since they're on instance variables.

* public/v3/components/chart-styles.js:
(ChartStyles.resolveConfiguration): Renamed from createChartSourceList. Just resolves platform and metric IDs.
(ChartStyles.createSourceList): Extracted from createChartSourceList since it needs to be called when a filtering
option is changed as well as when ChartPaneBase.prototype.configure is called.
(ChartStyles.baselineStyle): Now takes filtering options.
(ChartStyles.targetStyle): Ditto.
(ChartStyles.currentStyle): Ditto.

* public/v3/components/interactive-time-series-chart.js:
(InteractiveTimeSeriesChart.prototype.currentPoint): Find the point in _fetchedTimeSeries when
_sampledTimeSeriesData hasn't been computed yet as a fallback (e.g. when the chart hasn't been rendered yet).
(InteractiveTimeSeriesChart.prototype.selectedPoints): Added.
(InteractiveTimeSeriesChart.prototype.firstSelectedPoint): Added.
(InteractiveTimeSeriesChart.prototype.lockedIndicator): Added. Returns the current point if it's locked.

* public/v3/components/time-series-chart.js:
(TimeSeriesChart.prototype.setDomain):
(TimeSeriesChart.prototype.setSourceList): Added. Re-create _fetchedTimeSeries when filtering options have changed.
Don't re-fetch measurement set JSONs here since showing outliers can be done entirely in the front end.
(TimeSeriesChart.prototype.fetchMeasurementSets): Extracted out of setDomain. Now takes noCache as an argument.
ChartPane._markAsOutlier
(TimeSeriesChart.prototype.firstSampledPointBetweenTime): Added.

* public/v3/models/analysis-task.js:
(AnalysisTask.fetchByPlatformAndMetric): Added noCache as an argument.
(AnalysisTask._fetchSubset): Ditto.

* public/v3/models/measurement-adaptor.js:
(MeasurementAdaptor.prototype.isOutlier): Added.
(MeasurementAdaptor.prototype.applyToAnalysisResults): Add markedOutlier as a property on each point.

* public/v3/models/measurement-cluster.js:
(MeasurementCluster.prototype.addToSeries): Fixed the bug that filtering outliers was broken as _markedOutlierIndex
is undefined here. Use MeasurementAdaptor's isOutlier instead.

* public/v3/models/measurement-set.js:
(MeasurementSet.prototype.fetchBetween): Added noCache as an argument. Reset _primaryClusterPromise and _allFetches
when noCache is true since we need to re-fetch the primary cluster as well as all secondary clusters now.
(MeasurementSet.prototype._fetchPrimaryCluster): Added noCache as an argument. Directly invoke the JSON API at
/api/measurement-set to re-generate all clusters' JSON files instead of first fetching the cached version.
(MeasurementSet.prototype._fetchSecondaryCluster):
(MeasurementSet.prototype._didFetchJSON): Removed a bogus assertion since this function is called on secondary
clusters as well as primary clusters.
(MeasurementSet.prototype._addFetchedCluster): Reimplemented this function using an insertion sort. Also remove the
existing entry if the fetch cluster should replace it.

* public/v3/models/time-series.js:
(TimeSeries.prototype.dataBetweenPoints): Removed the dead code to filter out outliers. This is done in addToSeries
of MeasurementCluster instead.

* public/v3/pages/chart-pane.js:
(ChartPane): Renamed pane to popover since it was confusing to have a pane inside a pane class. As such, renamed
_paneOpenedByClick to _lockedPopover.
(ChartPane.prototype.serializeState): Added the code to serialize filtering options in the serialized state URL.
(ChartPane.prototype.updateFromSerializedState): Ditto for parsing.
(ChartPane.prototype._analyzeRange): Extracted out of render(). Also fixed a bug that the charts page don't show
the newly created analysis task by invoking fetchAnalysisTasks with noCache set to true.
(ChartPane.prototype._markAsOutlier): Added.
(ChartPane.prototype._renderActionToolbar): A bunch of changes due to pane -> popover rename. Also added a popover
for filtering options.
(ChartPane.prototype._makePopoverActionItem): Extracted from _makeAnchorToOpenPane.
(ChartPane.prototype._makePopoverOpenOnHover): Ditto.
(ChartPane.prototype._setPopoverVisibility): Ditto.
(ChartPane.prototype._renderFilteringPopover): Added.
(ChartPane.htmlTemplate): Added a popover for specifying filtering options. Also added .popover on each popover.
(ChartPane.cssTemplate): Updated the style to make use of .popover.

* public/v3/pages/charts-page.js:
(ChartsPage.prototype.graphOptionsDidChange): Added. Updates the URL state when a filtering option is modified.

* public/v3/pages/dashboard-page.js:
(DashboardPage.prototype._createChartForCell):

* public/v3/pages/page-router.js:
(PageRouter.prototype._serializeHashQueryValue): Serialize a set of strings as | separated tokens.
(PageRouter.prototype._deserializeHashQueryValue): Rewrote the function as the serialized URL can no longer be
parsed as a JSON as | separated tokens can't be converted into a valid JSON construct with a simple regex.

* unit-tests/measurement-set-tests.js: Added a test case for fetchBetween with noCache=true.

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

4 years agoDictionary property access should be fast
ggaren@apple.com [Wed, 1 Jun 2016 19:32:34 +0000 (19:32 +0000)]
Dictionary property access should be fast
https://bugs.webkit.org/show_bug.cgi?id=158250

Reviewed by Keith Miller.

We have some remnant code that unnecessarily takes a slow path for
dictionaries. This caused the Dromaeo regression in r201436. Let's fix
that.

* jit/Repatch.cpp:
(JSC::tryCacheGetByID): Attempt to flatten a dictionary if necessary, but
not too much. This is our idiom in other places.

(JSC::tryCachePutByID): See tryCacheGetByID.

* llint/LLIntSlowPaths.cpp:
(JSC::LLInt::setupGetByIdPrototypeCache): See tryCacheGetByID.

* runtime/JSObject.cpp:
(JSC::JSObject::fillGetterPropertySlot):
* runtime/JSObject.h:
(JSC::JSObject::fillCustomGetterPropertySlot): The rules for caching a
getter are the same as the rules for caching anything else: We're
allowed to cache even in dictionaries, as long as they're cacheable
dictionaries. Any transition that would change to/from getter/setter
or change other attributes requires a structure transition.

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

4 years agoSVGImage should report its memory cost to JS garbage collector
commit-queue@webkit.org [Wed, 1 Jun 2016 18:50:09 +0000 (18:50 +0000)]
SVGImage should report its memory cost to JS garbage collector
https://bugs.webkit.org/show_bug.cgi?id=158139

Patch by Said Abou-Hallawa <sabouhallawa@apple.com> on 2016-06-01
Reviewed by Geoffrey Garen.

Like what we do in HTMLImageLoader::notifyFinished() by reporting the memory
cost of the BitmapImage, we need to do something similar for the SVGImage. In
SVGImage::dataChange() and when allDataReceived is true, we can calculate
the size of all DOM nodes and their renderers. The size of the encoded data
has to be added as well to the total memory cost. An approximation for the
memory cost has to be used since it is costly to get an accurate number.

* bindings/js/JSDocumentCustom.cpp:
(WebCore::reportMemoryForDocumentIfFrameless): Use Node::approximateMemoryCost()
instead of sizeof(Node). A Node's descendant can override this function and
return a more accurate memory cost.

* dom/Node.h:
(WebCore::Node::approximateMemoryCost): Define this new virtual function in the
Node class. Its default value is sizeof(Node) but any descendant can return a
more accurate number.

* platform/graphics/Image.h:
(WebCore::Image::data): Define a const version of data() so it can be called
the const function SVGImage::reportApproximateMemoryCost().

* svg/SVGGraphicsElement.h: Override approximateMemoryCost() to return
sizeof(SVGGraphicsElement).

* svg/SVGPathElement.cpp:
(WebCore::SVGPathElement::approximateMemoryCost): Override this function to return
the memory cost of the points and the m_path of the renderer.
* svg/SVGPathElement.h:

* svg/SVGPolyElement.cpp:
(WebCore::SVGPolyElement::approximateMemoryCost): Override this function to return
the memory cost of the points and the m_path of the renderer.
* svg/SVGPolyElement.h:

* svg/graphics/SVGImage.cpp:
(WebCore::SVGImage::reportApproximateMemoryCost): Calculate the memory cost of the
nodes in the SVGDocument of an SVGImage. Then report this number to the JS garbage
collector.

(WebCore::SVGImage::dataChanged): After loading all the SVG encoded data and building
its DOM tree and the render tree, report the total memory cost to the JS garbage collector.
* svg/graphics/SVGImage.h:

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

4 years agoUse inline capacity for StylePropertyShorthand Vectors.
akling@apple.com [Wed, 1 Jun 2016 18:14:25 +0000 (18:14 +0000)]
Use inline capacity for StylePropertyShorthand Vectors.
<https://webkit.org/b/158260>

Reviewed by Antti Koivisto.

Vector<StylePropertyShorthand> was a huge source of heap allocations,
just over 0.5% of all fastMalloc() bytes on PLUM. Giving it an inline capacity
of 4 turns all of it into stack allocations.

* css/CSSParser.cpp:
(WebCore::CSSParser::addProperty):
* css/CSSProperty.cpp:
(WebCore::StylePropertyMetadata::shorthandID):
* css/StylePropertyShorthand.cpp:
(WebCore::indexOfShorthandForLonghand):
* css/StylePropertyShorthand.h:
* css/makeprop.pl:
(constructShorthandsVector):

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

4 years agoPOST request on a blob resource should return a "network error" instead of HTTP 500...
commit-queue@webkit.org [Wed, 1 Jun 2016 17:14:09 +0000 (17:14 +0000)]
POST request on a blob resource should return a "network error" instead of HTTP 500 response
https://bugs.webkit.org/show_bug.cgi?id=158022

Patch by Nael Ouedraogo <nael.ouedraogo@crf.canon.fr> on 2016-06-01
Reviewed by Alex Christensen.

LayoutTests/imported/w3c:

Make sure request on blob resource is correct.

* web-platform-tests/fetch/api/basic/scheme-blob-expected.txt:
* web-platform-tests/fetch/api/basic/scheme-blob-worker-expected.txt:
* web-platform-tests/fetch/api/basic/scheme-blob.js: Add new tests with several HTTP methods.

Source/WebCore:

Not allowed HTTP method is notified as failed in BlobResourceHandle as per Fetch
specification (5.2 Basic fetch). This behavior is observable in fetch WPT tests.

The behavior of XHR is slightly changed for asynchronous request on a blob resource with not
allowed or invalid HTTP methods. The onError callback is called instead of throwing an
exception as per XHR specification (https://xhr.spec.whatwg.org/#request-error-steps).

WPT tests expected results have been updated for fetch tests on blob resources which are
now correct.

Test: fast/files/xhr-blob-request.html ensures XHR response to requests on a blob resource is
correct.

* platform/network/BlobResourceHandle.cpp:
(WebCore::BlobResourceHandle::doStart):
* xml/XMLHttpRequest.cpp:
(WebCore::XMLHttpRequest::createRequest):

LayoutTests:

Make sure response to XHR request on blob is correct.

* fast/files/xhr-blob-request-expected.txt: Added.
* fast/files/xhr-blob-request.html: Added.

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

4 years agoRemove allocation of SubresourceLoader::m_requestCountTracker
youenn.fablet@crf.canon.fr [Wed, 1 Jun 2016 16:58:08 +0000 (16:58 +0000)]
Remove allocation of SubresourceLoader::m_requestCountTracker
https://bugs.webkit.org/show_bug.cgi?id=158255

Reviewed by Chris Dumez.

No change of behavior.

Making m_requestCountTracker an Optional in lieu of a unique_ptr.
This requires constructing m_requestCountTracker in place so that constructor and destructor are called only once.

* loader/SubresourceLoader.cpp:
(WebCore::SubresourceLoader::SubresourceLoader):
(WebCore::SubresourceLoader::didReceiveResponse):
(WebCore::SubresourceLoader::notifyDone):
* loader/SubresourceLoader.h:

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

4 years agoClose wptserve response file handles explicitly
youenn.fablet@crf.canon.fr [Wed, 1 Jun 2016 16:22:01 +0000 (16:22 +0000)]
Close wptserve response file handles explicitly
https://bugs.webkit.org/show_bug.cgi?id=158253

Reviewed by Alexey Proskuryakov.

See https://github.com/youennf/wptserve/commit/fc902e97a21b8470dcdaab8c70691aea1fecbc12

* resources/web-platform-tests-modules.json: Updating wptserve module to close response file handles once written.

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

4 years agoUnreviewed GTK+ gardening. Rebaseline several tests after r201397.
jfernandez@igalia.com [Wed, 1 Jun 2016 15:53:29 +0000 (15:53 +0000)]
Unreviewed GTK+ gardening. Rebaseline several tests after r201397.

We correctly render search field's cancel and result button for RTL content.

* fast/forms/search-input-rtl-expected.txt: Added.
* platform/gtk/fast/css/text-overflow-input-expected.txt:
* platform/gtk/fast/forms/placeholder-position-expected.txt:
* platform/gtk/fast/forms/search-rtl-expected.txt:

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

4 years agoVersioning.
bshafiei@apple.com [Wed, 1 Jun 2016 15:39:21 +0000 (15:39 +0000)]
Versioning.

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

4 years agoRemove accidental fprintf.
antti@apple.com [Wed, 1 Jun 2016 15:11:11 +0000 (15:11 +0000)]
Remove accidental fprintf.

* platform/graphics/FontCache.cpp:
(WebCore::FontCache::precache):

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

4 years agoPrecache primary font in a secondary thread
antti@apple.com [Wed, 1 Jun 2016 14:29:30 +0000 (14:29 +0000)]
Precache primary font in a secondary thread
https://bugs.webkit.org/show_bug.cgi?id=158243

Reviewed by Andreas Kling.

We know the font families and descriptions to use on style resolution. The actual fonts are only needed for
layout. There is often time to load and cache fonts asynchronously before they are accessed. This can substantially
reduce font related workload in the main thread.

* css/CSSFontFace.cpp:
(WebCore::CSSFontFace::font):
(WebCore::CSSFontFace::resolveFamilies):
(WebCore::CSSFontFace::hasSVGFontFaceSource):
* css/CSSFontFace.h:
* css/CSSFontFaceSource.cpp:
(WebCore::CSSFontFaceSource::font):
(WebCore::CSSFontFaceSource::url):
(WebCore::CSSFontFaceSource::isSVGFontFaceSource):
* css/CSSFontFaceSource.h:
* css/CSSFontSelector.cpp:
(WebCore::CSSFontSelector::fallbackFontAt):
(WebCore::CSSFontSelector::resolveFamilies):

    Add a function for resolving font families of a cascade to their final values.

* css/CSSFontSelector.h:
* css/CSSSegmentedFontFace.cpp:
(WebCore::CSSSegmentedFontFace::fontRanges):
(WebCore::CSSSegmentedFontFace::resolveFamilies):
* css/CSSSegmentedFontFace.h:
* platform/graphics/FontCache.cpp:
(WebCore::fontPlatformDataCache):
(WebCore::precacheTasksInProgress):
(WebCore::alternateFamilyName):
(WebCore::FontCache::getCachedFontPlatformData):
(WebCore::FontCache::invalidate):
(WebCore::FontCache::precache):

    Precache fonts by trying to load them asyncronously one by one. On success the font is cached into font platform data cache.

(WebCore::FontCache::similarFont):
* platform/graphics/FontCache.h:
* platform/graphics/FontCascade.cpp:
(WebCore::pruneSystemFallbackFonts):
(WebCore::precachePrimaryFamily):

    When initializing a new font cascade resolve any platform fonts to their actual names using FontSelector,
    then precache the primary font for the cascade.

    Web fonts are ignored for now.

(WebCore::retrieveOrAddCachedFonts):
* platform/graphics/FontSelector.h:
(WebCore::FontSelector::~FontSelector):
* platform/graphics/cocoa/FontCacheCoreText.cpp:
(WebCore::FontCache::setFontWhitelist):
(WebCore::fontWithFamily):
(WebCore::autoActivateFont):
(WebCore::createFontPlatformDataThreadSafe):

    Factor thread safe part of createFontPlatformData to a function.

(WebCore::FontCache::createFontPlatformData):

    Do the main thread only hash lookups here then call to createFontPlatformDataThreadSafe.

(WebCore::fallbackDedupSet):
(WebCore::FontCache::systemFallbackForCharacters):
(WebCore::FontCache::platformPrecache):

    Try to initialize font asynchronously in a dispatch queue, call completion handler on success or failure.

(WebCore::FontCache::platformCancelPrecache):

    Cancel ongoing precache operation.

(WebCore::platformFontLookupWithFamily): Deleted.

    This was inlined to the only client, fontWithFamily.

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

4 years agoUnreviewed. Mark GTK+ test /webkit2/WebKitWebInspectorServer/test-open-debugging...
carlosgc@webkit.org [Wed, 1 Jun 2016 11:57:55 +0000 (11:57 +0000)]
Unreviewed. Mark GTK+ test /webkit2/WebKitWebInspectorServer/test-open-debugging-session as slow.

It's timing out in the bots, but it seems to pass when running run-gtk-tests with no timeout. For GLib tests the
timeout is applied per tester program not per test case, so we need to mark the whole test
WebKit2Gtk/TestInspectorServer as slow.

* Scripts/run-gtk-tests:
(TestRunner):
(TestRunner._run_test_glib):

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

4 years agoWebRTC: Add RTCRtpTransceiver interface and RTCPeerConnection.addTransceiver()
adam.bergkvist@ericsson.com [Wed, 1 Jun 2016 10:06:39 +0000 (10:06 +0000)]
WebRTC: Add RTCRtpTransceiver interface and RTCPeerConnection.addTransceiver()
https://bugs.webkit.org/show_bug.cgi?id=158189

Reviewed by Darin Adler.

Source/WebCore:

The RTCRtpTransceiver interface represents a combination of an RTCRtpSender and an
RTCRtpReceiver that share a common mid [1].

RTCPeerConnection.addTransceiver() [2] creates an RTCRtpTransceiver object, either directly
from a MediaStreamTrack [3], or with a specific media type (kind).

This change introduces the RTCRtpTransceiver object, follow-up patches will integrate it
into the offer/answer machinery.

[1] https://w3c.github.io/webrtc-pc/archives/20160513/webrtc.html#rtcrtptransceiver-interface
[2] https://w3c.github.io/webrtc-pc/archives/20160513/webrtc.html#dom-rtcpeerconnection-addtransceiver
[3] http://w3c.github.io/mediacapture-main/archives/20160513/getusermedia.html#mediastreamtrack

Test: fast/mediastream/RTCPeerConnection-addTransceiver.html

* CMakeLists.txt:
* Modules/mediastream/MediaEndpointPeerConnection.cpp:
(WebCore::MediaEndpointPeerConnection::createOfferTask):
(WebCore::MediaEndpointPeerConnection::createReceiver):
An RTCTransceiver always has a receiver (RTCRtpReceiver) with a track (MediaStreamTrack) that
can be rendered. Before that remote track is receiving data from the remote peer, it's muted.
createReceiver() uses MediaEndponit::createMutedRemoteSource() to create a source to represent
future incoming media.
* Modules/mediastream/MediaEndpointPeerConnection.h:
* Modules/mediastream/PeerConnectionBackend.h:
* Modules/mediastream/RTCPeerConnection.cpp:
(WebCore::RTCPeerConnection::addTransceiver):
(WebCore::RTCPeerConnection::completeAddTransceiver):
(WebCore::RTCPeerConnection::addReceiver): Deleted.
We now create the receiver explicitly with createReceiver.
* Modules/mediastream/RTCPeerConnection.h:
* Modules/mediastream/RTCPeerConnection.idl:
* Modules/mediastream/RTCRtpSender.cpp:
(WebCore::RTCRtpSender::create):
(WebCore::RTCRtpSender::RTCRtpSender):
(WebCore::RTCRtpSender::setTrack):
(WebCore::RTCRtpSender::replaceTrack):
* Modules/mediastream/RTCRtpSender.h:
(WebCore::RTCRtpSender::trackId):
(WebCore::RTCRtpSender::trackKind):
(WebCore::RTCRtpSender::setMediaStreamIds):
(WebCore::RTCRtpSender::isStopped):
(WebCore::RTCRtpSender::create): Deleted.
* Modules/mediastream/RTCRtpSenderReceiverBase.h:
(WebCore::RTCRtpSenderReceiverBase::track):
(WebCore::RTCRtpSenderReceiverBase::RTCRtpSenderReceiverBase):
* Modules/mediastream/RTCRtpTransceiver.cpp: Added.
(WebCore::RTCRtpTransceiver::create):
(WebCore::RTCRtpTransceiver::getNextMid):
(WebCore::RTCRtpTransceiver::RTCRtpTransceiver):
(WebCore::RTCRtpTransceiver::directionString):
(WebCore::RTCRtpTransceiver::hasSendingDirection):
(WebCore::RTCRtpTransceiver::enableSendingDirection):
(WebCore::RTCRtpTransceiver::disableSendingDirection):
* Modules/mediastream/RTCRtpTransceiver.h: Added.
(WebCore::RTCRtpTransceiver::~RTCRtpTransceiver):
(WebCore::RTCRtpTransceiver::direction):
(WebCore::RTCRtpTransceiver::setDirection):
(WebCore::RTCRtpTransceiver::provisionalMid):
(WebCore::RTCRtpTransceiver::setProvisionalMid):
(WebCore::RTCRtpTransceiver::mid):
(WebCore::RTCRtpTransceiver::setMid):
(WebCore::RTCRtpTransceiver::sender):
(WebCore::RTCRtpTransceiver::receiver):
(WebCore::RTCRtpTransceiver::stopped):
(WebCore::RTCRtpTransceiver::stop):
* Modules/mediastream/RTCRtpTransceiver.idl: Added.
* WebCore.xcodeproj/project.pbxproj:
* platform/mediastream/MediaEndpoint.h:
Added createMutedRemoteSource() that creates a muted remote source that will become unmuted
when media arrives from the remote peer.
* platform/mediastream/RealtimeMediaSource.cpp:
(WebCore::RealtimeMediaSource::RealtimeMediaSource): Deleted.
* platform/mediastream/RealtimeMediaSource.h:
* platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
(WebCore::MockRealtimeVideoSource::create):
Use Ref instead of RefPtr.
* platform/mock/MockMediaEndpoint.cpp:
(WebCore::MockMediaEndpoint::createMutedRemoteSource):
* platform/mock/MockMediaEndpoint.h:
* platform/mock/MockRealtimeAudioSource.cpp:
(WebCore::MockRealtimeAudioSource::create):
(WebCore::MockRealtimeAudioSource::createMuted):
(WebCore::MockRealtimeAudioSource::MockRealtimeAudioSource):
* platform/mock/MockRealtimeAudioSource.h:
* platform/mock/MockRealtimeVideoSource.cpp:
(WebCore::MockRealtimeVideoSource::create):
(WebCore::MockRealtimeVideoSource::createMuted):
(WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource):
* platform/mock/MockRealtimeVideoSource.h:

LayoutTests:

Added test for RTCPeerConnection.addTransceiver().

* fast/mediastream/RTCPeerConnection-addTransceiver-expected.txt: Added.
* fast/mediastream/RTCPeerConnection-addTransceiver.html: Added.
Test creating several RTCRtpTransceivers with various configurations and inspect the result.
* platform/mac/TestExpectations:
Skip the new test since the Mac port currently doesn't build with WebRTC support.

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

4 years agoUnreviewed. Skip media permission request GTK+ unit tests.
carlosgc@webkit.org [Wed, 1 Jun 2016 09:56:14 +0000 (09:56 +0000)]
Unreviewed. Skip media permission request GTK+ unit tests.

They are timing out in the bots.

* Scripts/run-gtk-tests:
(TestRunner):

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

4 years ago[Win][IndexedDB] Crash when running blob test.
peavo@outlook.com [Wed, 1 Jun 2016 09:10:49 +0000 (09:10 +0000)]
[Win][IndexedDB] Crash when running blob test.
https://bugs.webkit.org/show_bug.cgi?id=158224

Reviewed by Brady Eidson.

Avoid calling WTFMove(x) before calling x->method().

* Modules/indexeddb/IDBTransaction.cpp:
(WebCore::IDBTransaction::putOrAddOnServer):

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

4 years ago[Win] Potential null pointer crash when setting cursor.
peavo@outlook.com [Wed, 1 Jun 2016 08:23:49 +0000 (08:23 +0000)]
[Win] Potential null pointer crash when setting cursor.
https://bugs.webkit.org/show_bug.cgi?id=158225

Reviewed by Alex Christensen.

Check return value of Cursor::platformCursor().

* WebCoreSupport/WebChromeClient.cpp:
(WebChromeClient::setCursor):

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

4 years ago[css-grid] Positioned items can be placed on the implicit grid
rego@igalia.com [Wed, 1 Jun 2016 07:24:21 +0000 (07:24 +0000)]
[css-grid] Positioned items can be placed on the implicit grid
https://bugs.webkit.org/show_bug.cgi?id=158197

Reviewed by Sergio Villar Senin.

Source/WebCore:

The old code wrongly assumed that positioned items couldn't be placed
on the implicit grid. However, the spec doesn't mention anything about this.

The patch fixes this issue, so now positioned items can be actually
placed on the implicit tracks.

Test: fast/css-grid-layout/grid-positioned-items-within-grid-implicit-track.html

* rendering/RenderGrid.cpp:
(WebCore::RenderGrid::offsetAndBreadthForPositionedChild): Use the lines
of the implicit grid instead of the explicit one.

LayoutTests:

Updated the test to follow the expected behavior.

* fast/css-grid-layout/grid-positioned-items-within-grid-implicit-track-expected.txt:
* fast/css-grid-layout/grid-positioned-items-within-grid-implicit-track.html:

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

4 years ago[JSC] Drop "replace" from JSC_COMMON_PRIVATE_IDENTIFIERS_EACH_WELL_KNOWN_SYMBOL_NOT_I...
utatane.tea@gmail.com [Wed, 1 Jun 2016 05:05:25 +0000 (05:05 +0000)]
[JSC] Drop "replace" from JSC_COMMON_PRIVATE_IDENTIFIERS_EACH_WELL_KNOWN_SYMBOL_NOT_IMPLEMENTED_YET
https://bugs.webkit.org/show_bug.cgi?id=158223

Reviewed by Darin Adler.

This list maintains "not implemented yet" well-known symbols.
`Symbol.replace` is already implemented.

* runtime/CommonIdentifiers.h:

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

4 years agoModernize lambda captures in WorkerThreadableWebSocketChannel
cdumez@apple.com [Wed, 1 Jun 2016 04:49:24 +0000 (04:49 +0000)]
Modernize lambda captures in WorkerThreadableWebSocketChannel
https://bugs.webkit.org/show_bug.cgi?id=158246

Reviewed by Brady Eidson.

Modernize lambda captures in WorkerThreadableWebSocketChannel and drop
legacy URLCapture as it is no longer needed / used.

* Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
(WebCore::WorkerThreadableWebSocketChannel::Peer::send):
(WebCore::WorkerThreadableWebSocketChannel::Peer::bufferedAmount):
(WebCore::WorkerThreadableWebSocketChannel::Peer::didConnect):
(WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveMessage):
(WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveBinaryData):
(WebCore::WorkerThreadableWebSocketChannel::Peer::didUpdateBufferedAmount):
(WebCore::WorkerThreadableWebSocketChannel::Peer::didStartClosingHandshake):
(WebCore::WorkerThreadableWebSocketChannel::Peer::didClose):
(WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveMessageError):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::mainThreadInitialize):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::initialize):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::connect):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::bufferedAmount):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::close):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::fail):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::disconnect):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::suspend):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::resume):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::setMethodNotCompleted): Deleted.
(WebCore::WorkerThreadableWebSocketChannel::Bridge::waitForMethodCompletion): Deleted.
* Modules/websockets/WorkerThreadableWebSocketChannel.h:
* platform/URL.h:
(WebCore::operator==): Deleted.

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

4 years agoUnreviewed, roll out r201481, r201523: 0.3% regression in Octane code-load
utatane.tea@gmail.com [Wed, 1 Jun 2016 04:30:57 +0000 (04:30 +0000)]
Unreviewed, roll out r201481, r201523: 0.3% regression in Octane code-load
https://bugs.webkit.org/show_bug.cgi?id=158249

Source/JavaScriptCore:

* API/JSScriptRef.cpp:
(parseScript):
* CMakeLists.txt:
* DerivedSources.make:
* JavaScriptCore.xcodeproj/project.pbxproj:
* builtins/AsyncFunctionPrototype.js: Removed.
(asyncFunctionResume): Deleted.
* builtins/BuiltinExecutables.cpp:
(JSC::BuiltinExecutables::createExecutable):
* bytecode/BytecodeList.json:
* bytecode/BytecodeUseDef.h:
(JSC::computeUsesForBytecodeOffset): Deleted.
(JSC::computeDefsForBytecodeOffset): Deleted.
* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::finishCreation):
(JSC::CodeBlock::dumpBytecode): Deleted.
* bytecode/UnlinkedCodeBlock.h:
(JSC::UnlinkedCodeBlock::isArrowFunction):
(JSC::UnlinkedCodeBlock::isOrdinaryArrowFunction): Deleted.
(JSC::UnlinkedCodeBlock::isAsyncArrowFunction): Deleted.
* bytecode/UnlinkedFunctionExecutable.cpp:
(JSC::generateUnlinkedFunctionCodeBlock):
(JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
(JSC::UnlinkedFunctionExecutable::fromGlobalCode):
(JSC::UnlinkedFunctionExecutable::unlinkedCodeBlockFor):
* bytecode/UnlinkedFunctionExecutable.h:
* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::BytecodeGenerator):
(JSC::BytecodeGenerator::emitNewArrowFunctionExpression):
(JSC::BytecodeGenerator::emitNewMethodDefinition):
(JSC::BytecodeGenerator::emitLoadArrowFunctionLexicalEnvironment):
(JSC::BytecodeGenerator::emitNewFunctionExpressionCommon): Deleted.
(JSC::BytecodeGenerator::emitNewFunction): Deleted.
* bytecompiler/BytecodeGenerator.h:
(JSC::BytecodeGenerator::makeFunction):
* bytecompiler/NodesCodegen.cpp:
(JSC::FunctionNode::emitBytecode): Deleted.
* inspector/agents/InspectorRuntimeAgent.cpp:
(Inspector::InspectorRuntimeAgent::parse):
* jit/JIT.cpp:
(JSC::JIT::privateCompileMainPass): Deleted.
* jit/JIT.h:
* jit/JITOpcodes.cpp:
(JSC::JIT::emitNewFuncCommon): Deleted.
(JSC::JIT::emit_op_new_async_func): Deleted.
(JSC::JIT::emitNewFuncExprCommon): Deleted.
(JSC::JIT::emit_op_new_async_func_exp): Deleted.
* jit/JITOperations.cpp:
* jit/JITOperations.h:
* jsc.cpp:
(runInteractive):
(printUsageStatement): Deleted.
* llint/LLIntSlowPaths.cpp:
(JSC::LLInt::LLINT_SLOW_PATH_DECL): Deleted.
* llint/LLIntSlowPaths.h:
* llint/LowLevelInterpreter.asm:
* parser/ASTBuilder.h:
(JSC::ASTBuilder::createAsyncFunctionBody): Deleted.
* parser/Keywords.table:
* parser/Parser.cpp:
(JSC::Parser<LexerType>::Parser):
(JSC::Parser<LexerType>::parseInner):
(JSC::Parser<LexerType>::isArrowFunctionParameters):
(JSC::Parser<LexerType>::parseStatementListItem):
(JSC::Parser<LexerType>::parseStatement):
(JSC::Parser<LexerType>::parseFunctionParameters):
(JSC::Parser<LexerType>::parseFunctionInfo):
(JSC::Parser<LexerType>::parseClass):
(JSC::Parser<LexerType>::parseImportClauseItem):
(JSC::Parser<LexerType>::parseImportDeclaration):
(JSC::Parser<LexerType>::parseExportDeclaration):
(JSC::Parser<LexerType>::parseAssignmentExpression):
(JSC::Parser<LexerType>::parseProperty):
(JSC::Parser<LexerType>::parsePropertyMethod):
(JSC::Parser<LexerType>::parsePrimaryExpression):
(JSC::Parser<LexerType>::parseMemberExpression):
(JSC::Parser<LexerType>::parseArrowFunctionExpression):
(JSC::Parser<LexerType>::printUnexpectedTokenText):
(JSC::Parser<LexerType>::parseAsyncFunctionSourceElements): Deleted.
(JSC::Parser<LexerType>::parseVariableDeclarationList): Deleted.
(JSC::Parser<LexerType>::parseDestructuringPattern): Deleted.
(JSC::Parser<LexerType>::parseFunctionDeclarationStatement): Deleted.
(JSC::Parser<LexerType>::parseFormalParameters): Deleted.
(JSC::stringForFunctionMode): Deleted.
(JSC::Parser<LexerType>::parseAsyncFunctionDeclaration): Deleted.
(JSC::Parser<LexerType>::parseExpressionOrLabelStatement): Deleted.
(JSC::Parser<LexerType>::parseAwaitExpression): Deleted.
(JSC::Parser<LexerType>::parseAsyncFunctionExpression): Deleted.
(JSC::Parser<LexerType>::parseUnaryExpression): Deleted.
* parser/Parser.h:
(JSC::Scope::Scope):
(JSC::Parser::ExpressionErrorClassifier::propagateExpressionErrorClass):
(JSC::Parser::closestParentOrdinaryFunctionNonLexicalScope):
(JSC::Parser::pushScope):
(JSC::Parser::popScopeInternal):
(JSC::Parser::matchSpecIdentifier):
(JSC::parse):
(JSC::Scope::setSourceParseMode): Deleted.
(JSC::Scope::isAsyncFunction): Deleted.
(JSC::Scope::isAsyncFunctionBoundary): Deleted.
(JSC::Scope::isModule): Deleted.
(JSC::Scope::setIsFunction): Deleted.
(JSC::Scope::setIsAsyncArrowFunction): Deleted.
(JSC::Scope::setIsAsyncFunction): Deleted.
(JSC::Scope::setIsAsyncFunctionBody): Deleted.
(JSC::Scope::setIsAsyncArrowFunctionBody): Deleted.
(JSC::Parser::ExpressionErrorClassifier::forceClassifyExpressionError): Deleted.
(JSC::Parser::ExpressionErrorClassifier::indicatesPossibleAsyncArrowFunction): Deleted.
(JSC::Parser::forceClassifyExpressionError): Deleted.
(JSC::Parser::declarationTypeToVariableKind): Deleted.
(JSC::Parser::upperScope): Deleted.
(JSC::Parser::isDisallowedIdentifierAwait): Deleted.
(JSC::Parser::disallowedIdentifierAwaitReason): Deleted.
* parser/ParserModes.h:
(JSC::isFunctionParseMode):
(JSC::isModuleParseMode):
(JSC::isProgramParseMode):
(JSC::SourceParseModeSet::SourceParseModeSet): Deleted.
(JSC::SourceParseModeSet::contains): Deleted.
(JSC::SourceParseModeSet::mergeSourceParseModes): Deleted.
(JSC::isAsyncFunctionParseMode): Deleted.
(JSC::isAsyncArrowFunctionParseMode): Deleted.
(JSC::isAsyncFunctionWrapperParseMode): Deleted.
(JSC::isAsyncFunctionBodyParseMode): Deleted.
(JSC::constructAbilityForParseMode): Deleted.
* parser/ParserTokens.h:
* parser/SourceCodeKey.h:
(JSC::SourceCodeKey::SourceCodeKey):
(JSC::SourceCodeKey::operator==):
(JSC::SourceCodeKey::runtimeFlags): Deleted.
* parser/SyntaxChecker.h:
(JSC::SyntaxChecker::createAsyncFunctionBody): Deleted.
* runtime/AsyncFunctionConstructor.cpp: Removed.
(JSC::AsyncFunctionConstructor::AsyncFunctionConstructor): Deleted.
(JSC::AsyncFunctionConstructor::finishCreation): Deleted.
(JSC::callAsyncFunctionConstructor): Deleted.
(JSC::constructAsyncFunctionConstructor): Deleted.
(JSC::AsyncFunctionConstructor::getCallData): Deleted.
(JSC::AsyncFunctionConstructor::getConstructData): Deleted.
* runtime/AsyncFunctionConstructor.h: Removed.
(JSC::AsyncFunctionConstructor::create): Deleted.
(JSC::AsyncFunctionConstructor::createStructure): Deleted.
* runtime/AsyncFunctionPrototype.cpp: Removed.
(JSC::AsyncFunctionPrototype::AsyncFunctionPrototype): Deleted.
(JSC::AsyncFunctionPrototype::finishCreation): Deleted.
* runtime/AsyncFunctionPrototype.h: Removed.
(JSC::AsyncFunctionPrototype::create): Deleted.
(JSC::AsyncFunctionPrototype::createStructure): Deleted.
* runtime/CodeCache.cpp:
(JSC::CodeCache::getGlobalCodeBlock):
(JSC::CodeCache::getProgramCodeBlock):
(JSC::CodeCache::getEvalCodeBlock):
(JSC::CodeCache::getModuleProgramCodeBlock):
(JSC::CodeCache::getFunctionExecutableFromGlobalCode):
* runtime/CodeCache.h:
* runtime/CommonIdentifiers.h:
* runtime/Completion.cpp:
(JSC::checkSyntax):
(JSC::checkModuleSyntax):
* runtime/Completion.h:
* runtime/Executable.cpp:
(JSC::ScriptExecutable::newCodeBlockFor):
(JSC::ProgramExecutable::checkSyntax):
* runtime/Executable.h:
* runtime/FunctionConstructor.cpp:
(JSC::constructFunctionSkippingEvalEnabledCheck):
* runtime/FunctionConstructor.h:
* runtime/JSAsyncFunction.cpp: Removed.
(JSC::JSAsyncFunction::JSAsyncFunction): Deleted.
(JSC::JSAsyncFunction::createImpl): Deleted.
(JSC::JSAsyncFunction::create): Deleted.
(JSC::JSAsyncFunction::createWithInvalidatedReallocationWatchpoint): Deleted.
* runtime/JSAsyncFunction.h: Removed.
(JSC::JSAsyncFunction::allocationSize): Deleted.
(JSC::JSAsyncFunction::createStructure): Deleted.
* runtime/JSFunction.cpp:
(JSC::JSFunction::getOwnPropertySlot):
* runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::createProgramCodeBlock):
(JSC::JSGlobalObject::createEvalCodeBlock):
(JSC::JSGlobalObject::createModuleProgramCodeBlock):
(JSC::JSGlobalObject::init): Deleted.
* runtime/JSGlobalObject.h:
(JSC::JSGlobalObject::asyncFunctionPrototype): Deleted.
(JSC::JSGlobalObject::asyncFunctionStructure): Deleted.
* runtime/ModuleLoaderObject.cpp:
(JSC::moduleLoaderObjectParseModule):
* runtime/RuntimeFlags.h:
(JSC::RuntimeFlags::operator==): Deleted.
(JSC::RuntimeFlags::operator!=): Deleted.
* tests/stress/async-await-basic.js: Removed.
(shouldBe): Deleted.
(shouldBeAsync): Deleted.
(shouldThrow): Deleted.
(shouldThrowAsync): Deleted.
(shouldThrowSyntaxError): Deleted.
(let.AsyncFunction.async): Deleted.
(async.asyncFunctionForProto): Deleted.
(Object.getPrototypeOf.async): Deleted.
(Object.getPrototypeOf.async.method): Deleted.
(async): Deleted.
(async.method): Deleted.
(async.asyncNonConstructorDecl): Deleted.
(shouldThrow.new.async): Deleted.
(shouldThrow.new.async.nonConstructor): Deleted.
(async.asyncDecl): Deleted.
(async.f): Deleted.
(MyError): Deleted.
(async.asyncDeclThrower): Deleted.
(shouldThrowAsync.async): Deleted.
(resolveLater): Deleted.
(rejectLater): Deleted.
(async.resumeAfterNormal): Deleted.
(O.async.resumeAfterNormal): Deleted.
(resumeAfterNormalArrow.async): Deleted.
(async.resumeAfterThrow): Deleted.
(O.async.resumeAfterThrow): Deleted.
(resumeAfterThrowArrow.async): Deleted.
(catch): Deleted.
* tests/stress/async-await-module-reserved-word.js: Removed.
(shouldThrow): Deleted.
(SyntaxError.Canstring_appeared_hereawait.checkModuleSyntaxError.String.raw.await): Deleted.
(checkModuleSyntaxError.String.raw.await): Deleted.
(checkModuleSyntaxError.String.raw.async.await): Deleted.
(SyntaxError.Cannot.declare.named): Deleted.
* tests/stress/async-await-mozilla.js: Removed.
(shouldBe): Deleted.
(shouldBeAsync): Deleted.
(shouldThrow): Deleted.
(shouldThrowAsync): Deleted.
(assert): Deleted.
(shouldThrowSyntaxError): Deleted.
(mozSemantics.async.empty): Deleted.
(mozSemantics.async.simpleReturn): Deleted.
(mozSemantics.async.simpleAwait): Deleted.
(mozSemantics.async.simpleAwaitAsync): Deleted.
(mozSemantics.async.returnOtherAsync): Deleted.
(mozSemantics.async.simpleThrower): Deleted.
(mozSemantics.async.delegatedThrower): Deleted.
(mozSemantics.async.tryCatch): Deleted.
(mozSemantics.async.tryCatchThrow): Deleted.
(mozSemantics.async.wellFinally): Deleted.
(mozSemantics.async.finallyMayFail): Deleted.
(mozSemantics.async.embedded.async.inner): Deleted.
(mozSemantics.async.embedded): Deleted.
(mozSemantics.async.fib): Deleted.
(mozSemantics.async.isOdd.async.isEven): Deleted.
(mozSemantics.async.isOdd): Deleted.
(mozSemantics.hardcoreFib.async.fib2): Deleted.
(mozSemantics.namedAsyncExpr.async.simple): Deleted.
(mozSemantics.async.executionOrder.async.first): Deleted.
(mozSemantics.async.executionOrder.async.second): Deleted.
(mozSemantics.async.executionOrder.async.third): Deleted.
(mozSemantics.async.executionOrder): Deleted.
(mozSemantics.async.miscellaneous): Deleted.
(mozSemantics.thrower): Deleted.
(mozSemantics.async.defaultArgs): Deleted.
(mozSemantics.shouldThrow): Deleted.
(mozSemantics): Deleted.
(mozMethods.X): Deleted.
(mozMethods.X.prototype.async.getValue): Deleted.
(mozMethods.X.prototype.setValue): Deleted.
(mozMethods.X.prototype.async.increment): Deleted.
(mozMethods.X.prototype.async.getBaseClassName): Deleted.
(mozMethods.X.async.getStaticValue): Deleted.
(mozMethods.Y.prototype.async.getBaseClassName): Deleted.
(mozMethods.Y): Deleted.
(mozFunctionNameInferrence.async.test): Deleted.
(mozSyntaxErrors): Deleted.
* tests/stress/async-await-reserved-word.js: Removed.
(assert): Deleted.
(shouldThrowSyntaxError): Deleted.
(AsyncFunction.async): Deleted.
* tests/stress/async_arrow_functions_lexical_arguments_binding.js: Removed.
(shouldBe): Deleted.
(shouldBeAsync): Deleted.
(shouldThrowAsync): Deleted.
(noArgumentsArrow2.async): Deleted.
* tests/stress/async_arrow_functions_lexical_new.target_binding.js: Removed.
(shouldBe): Deleted.
(shouldBeAsync): Deleted.
(shouldThrowAsync): Deleted.
(C1): Deleted.
(C2): Deleted.
(shouldThrowAsync.async): Deleted.
* tests/stress/async_arrow_functions_lexical_super_binding.js: Removed.
(shouldBe): Deleted.
(shouldBeAsync): Deleted.
(BaseClass.prototype.baseClassValue): Deleted.
(BaseClass.prototype.get property): Deleted.
(BaseClass): Deleted.
(ChildClass.prototype.asyncSuperProp): Deleted.
(ChildClass.prototype.asyncSuperProp2): Deleted.
(ChildClass): Deleted.
(ChildClass2): Deleted.
* tests/stress/async_arrow_functions_lexical_this_binding.js: Removed.
(shouldBe): Deleted.
(shouldBeAsync): Deleted.
(d.y): Deleted.

Source/WebKit/mac:

* WebView/WebPreferencesPrivate.h:

Source/WebKit/win:

* Interfaces/IWebPreferencesPrivate.idl:

Source/WebKit2:

* UIProcess/API/C/WKPreferencesRefPrivate.h:
* UIProcess/API/Cocoa/WKPreferencesPrivate.h:

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

4 years agoWeb Inspector: ReportExtraMemoryCost IDL attribute should also be used to generate...
commit-queue@webkit.org [Wed, 1 Jun 2016 00:45:59 +0000 (00:45 +0000)]
Web Inspector: ReportExtraMemoryCost IDL attribute should also be used to generate estimatedSize method
https://bugs.webkit.org/show_bug.cgi?id=158144

Patch by Joseph Pecoraro <pecoraro@apple.com> on 2016-05-31
Reviewed by Darin Adler.

* bindings/scripts/CodeGeneratorJS.pm:
(InstanceNeedsEstimatedSize):
(GenerateHeader):
(GenerateImplementation):
When an interface includes ReportExtraMemoryCost, generate an estimatedSize
method which includes the Base::estimatedSize and the memoryCost().

* bindings/scripts/test/GObject/WebKitDOMInterfaceName.cpp: Added.
(WebKit::kit):
(WebKit::core):
(WebKit::wrapInterfaceName):
(webkit_dom_interface_name_finalize):
(webkit_dom_interface_name_constructor):
(webkit_dom_interface_name_class_init):
(webkit_dom_interface_name_init):
* bindings/scripts/test/GObject/WebKitDOMInterfaceName.h: Added.
* bindings/scripts/test/GObject/WebKitDOMInterfaceNamePrivate.h: Added.
* bindings/scripts/test/JS/JSInterfaceName.cpp: Added.
(WebCore::JSInterfaceNamePrototype::create):
(WebCore::JSInterfaceNamePrototype::createStructure):
(WebCore::JSInterfaceNamePrototype::JSInterfaceNamePrototype):
(WebCore::JSInterfaceNameConstructor::prototypeForStructure):
(WebCore::JSInterfaceNameConstructor::initializeProperties):
(WebCore::JSInterfaceNamePrototype::finishCreation):
(WebCore::JSInterfaceName::JSInterfaceName):
(WebCore::JSInterfaceName::createPrototype):
(WebCore::JSInterfaceName::prototype):
(WebCore::JSInterfaceName::destroy):
(WebCore::jsInterfaceNameConstructor):
(WebCore::setJSInterfaceNameConstructor):
(WebCore::JSInterfaceName::getConstructor):
(WebCore::JSInterfaceName::visitChildren):
(WebCore::JSInterfaceName::estimatedSize):
(WebCore::JSInterfaceNameOwner::isReachableFromOpaqueRoots):
(WebCore::JSInterfaceNameOwner::finalize):
(WebCore::toJSNewlyCreated):
(WebCore::toJS):
(WebCore::JSInterfaceName::toWrapped):
* bindings/scripts/test/JS/JSInterfaceName.h: Added.
(WebCore::JSInterfaceName::create):
(WebCore::JSInterfaceName::createStructure):
(WebCore::JSInterfaceName::finishCreation):
(WebCore::wrapperOwner):
(WebCore::wrapperKey):
(WebCore::toJS):
(WebCore::toJSNewlyCreated):
* bindings/scripts/test/ObjC/DOMInterfaceName.h: Added.
* bindings/scripts/test/ObjC/DOMInterfaceName.mm: Added.
(-[DOMInterfaceName dealloc]):
(core):
(kit):
* bindings/scripts/test/ObjC/DOMInterfaceNameInternal.h: Added.
* bindings/scripts/test/TestReportExtraMemoryCost.idl: Added.
Include a test for the ReportExtraMemoryCost attribute.

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

4 years agoWeb Inspector: Storage DataGrids have a half-pixel transparent/white border below...
nvasilyev@apple.com [Wed, 1 Jun 2016 00:31:13 +0000 (00:31 +0000)]
Web Inspector: Storage DataGrids have a half-pixel transparent/white border below the header
https://bugs.webkit.org/show_bug.cgi?id=156699
<rdar://problem/25778260>

Reviewed by Timothy Hatcher.

Increase the width of the border below the DataGrid's header to match the border in the left sidebar.

* UserInterface/Views/DataGrid.css:
(.data-grid > .header-wrapper):

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

4 years agoFix assertion after r201447
commit-queue@webkit.org [Wed, 1 Jun 2016 00:28:25 +0000 (00:28 +0000)]
Fix assertion after r201447
https://bugs.webkit.org/show_bug.cgi?id=158244

Patch by Alex Christensen <achristensen@webkit.org> on 2016-05-31
Reviewed by Jer Noble.

* loader/cache/CachedResourceLoader.cpp:
(WebCore::CachedResourceLoader::loadResource):
If we are loading media using WebCoreNSURLSession, we could be making a request for a
resource we already have in the memory cache because we are ignoring all caches.

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

4 years agoWeb Inspector: Snapshot List scroll bar occludes border of containing view in top...
nvasilyev@apple.com [Wed, 1 Jun 2016 00:26:57 +0000 (00:26 +0000)]
Web Inspector: Snapshot List scroll bar occludes border of containing view in top-right
https://bugs.webkit.org/show_bug.cgi?id=158219
<rdar://problem/26545018>

Reviewed by Timothy Hatcher.

* UserInterface/Views/TimelineDataGrid.css:
(.data-grid.timeline th): Deleted.
* UserInterface/Views/TimelineRecordingContentView.css:
(.content-view.timeline-recording > .content-browser > .navigation-bar):
Make the border line span across the whole navigation bar, not just its table cells.

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

4 years agoYet another unreviewed build fix; move the closing brace of the namespace declaration...
jer.noble@apple.com [Tue, 31 May 2016 23:28:59 +0000 (23:28 +0000)]
Yet another unreviewed build fix; move the closing brace of the namespace declaration inside
the #if check.

* TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenTopContentInset.mm:

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

4 years agoFurther unreviewed build fix; only run FullscreenTopContentInset test on Mac.
jer.noble@apple.com [Tue, 31 May 2016 23:20:15 +0000 (23:20 +0000)]
Further unreviewed build fix; only run FullscreenTopContentInset test on Mac.

* TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenTopContentInset.mm:

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

4 years agoAdd two optional items to WebViewImplDelegate
bdakin@apple.com [Tue, 31 May 2016 22:52:59 +0000 (22:52 +0000)]
Add two optional items to WebViewImplDelegate
https://bugs.webkit.org/show_bug.cgi?id=158242
-and corresponding-
rdar://problem/26473095

Reviewed by Tim Horton.

* UIProcess/Cocoa/WebViewImpl.h:

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

4 years agoClean up / modernize iOS text autosizing code
cdumez@apple.com [Tue, 31 May 2016 22:51:01 +0000 (22:51 +0000)]
Clean up / modernize iOS text autosizing code
https://bugs.webkit.org/show_bug.cgi?id=158217

Reviewed by Darin Adler.

Clean up / modernize iOS text autosizing code.

I think iOS text autosizing code is too intrusive inside the RenderStyle
class but I have not updated this part of the code yet to limit patch
size. This patch focuses on the TextAutoSizing.* and text autosizing
code in the Document class.

* WebCore.xcodeproj/project.pbxproj:
* dom/Document.cpp:
(WebCore::TextAutoSizingTraits::constructDeletedValue): Deleted.
(WebCore::TextAutoSizingTraits::isDeletedValue): Deleted.
Move TextAutoSizingTraits to the TextAutoSizing header to
promote reuse and make the text autosizing code a little less
intrusive.

(WebCore::Document::addAutoSizingNode):
- Drop local 'key' variable as it is only used once.
- Use std::make_unique<> to construct the TextAutoSizingValue
  as it is no longer ref-counted.

(WebCore::Document::validateAutoSizingNodes):
Iterate over the textAutosizedNodes HashMap only once instead
of twice. TextAutoSizingValue::adjustTextNodeSizes() was updated
to return an enum class so we know from that value if we can
remove the value from the HashSet or not, without having to rely
on TextAutoSizingValue::numNodes(), which I removed in this
patch.

(WebCore::Document::clearAutoSizingNodes):
Updated the TextAutoSizingValue destructor to call reset() so
we don't have to explicitly call reset() on each value before
clearing the textAutosizedNodes HashMap.

* dom/Document.h:
- Move TextAutoSizingTraits to the TextAutosizing header.
- Rename resetAutosizingNodes() to clearAutoSizingNodes() as
  the method now only clears the textAutosizedNodes HashMap
  and reset() is now an implementation detail for
  TextAutoSizingValue.

* rendering/RenderElement.cpp:
(WebCore::RenderElement::resetTextAutosizing):
Call clearAutoSizingNodes() as it was renamed.

* rendering/TextAutoSizing.cpp:
(WebCore::TextAutoSizingKey::TextAutoSizingKey):
- Use value of -1 for std::unique_ptr m_style member for distinguishing
a HashTable deleted value, instead of having an extra m_isDeleted
data member for this purpose.
- Take RenderStyle parameter by reference and drop the null check as the
  call site can never pass nullptr.

(WebCore::TextAutoSizingValue::addTextNode):
- Rename addNode() to addTextNode() for clarity.

(WebCore::TextAutoSizingValue::~TextAutoSizingValue):
Update destructor to call reset() so that the Document does not have to
call it explicitly and can instead just clear the HashMap, which will
destroy the TextAutoSizingValue objects.

(WebCore::TextAutoSizingValue::reset):
Rename text to renderer for clarity.

* rendering/TextAutoSizing.h:
- Make TextAutoSizingValue as fast allocated.
- Update TextAutoSizingValue to no longer be refcounted as ownership is never
  shared. The Document owns those.
- Drop the factory function for TextAutoSizingValue and make the constructor
  public now that the class is no longer refcounted.
- Make reset() method private now that it is called from the destructor and
  the Document is no longer expected to explicitly call it.
- Update adjustTextNodeSizes() to return a StillHasNodes enum class and the
  Document can rely on the determine if it can drop the TextAutoSizingValue
  from its HashMap (and therefore destroy the object).
- Drop numNodes() method as it is no longer needed.

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

4 years agoUnreviewed build fix; only run FullscreetTopContentInset test on platforms
jer.noble@apple.com [Tue, 31 May 2016 22:44:31 +0000 (22:44 +0000)]
Unreviewed build fix; only run FullscreetTopContentInset test on platforms
where WK_API_ENABLED is set.

* TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenTopContentInset.mm:

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

4 years agoUnreviewed, rolling out r201363 and r201456.
commit-queue@webkit.org [Tue, 31 May 2016 22:35:23 +0000 (22:35 +0000)]
Unreviewed, rolling out r201363 and r201456.
https://bugs.webkit.org/show_bug.cgi?id=158240

"40% regression on date-format-xparb" (Requested by
keith_miller on #webkit).

Reverted changesets:

"LLInt should be able to cache prototype loads for values in
GetById"
https://bugs.webkit.org/show_bug.cgi?id=158032
http://trac.webkit.org/changeset/201363

"get_by_id should support caching unset properties in the
LLInt"
https://bugs.webkit.org/show_bug.cgi?id=158136
http://trac.webkit.org/changeset/201456

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

4 years agoUnreviewed, rolling out r201359.
commit-queue@webkit.org [Tue, 31 May 2016 22:10:10 +0000 (22:10 +0000)]
Unreviewed, rolling out r201359.
https://bugs.webkit.org/show_bug.cgi?id=158238

"It was not a speedup on anything" (Requested by saamyjoon on
#webkit).

Reverted changeset:

"We can cache lookups to JSScope::abstractResolve inside
CodeBlock::finishCreation"
https://bugs.webkit.org/show_bug.cgi?id=158036
http://trac.webkit.org/changeset/201359

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

4 years agoREGRESSION (r201405): trailers.apple.com HUD is missing in fullscreen
jer.noble@apple.com [Tue, 31 May 2016 21:59:03 +0000 (21:59 +0000)]
REGRESSION (r201405): trailers.apple.com HUD is missing in fullscreen
https://bugs.webkit.org/show_bug.cgi?id=158156
<rdar://problem/26519589>

Reviewed by Darin Adler.

Source/WebKit2:

Only increase the frame of the webView (to account for top content inset) in one dimension.

* UIProcess/mac/WKFullScreenWindowController.mm:
(-[WKFullScreenWindowController enterFullScreen:]):

Tools:

* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenTopContentInset.html: Added.
* TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenTopContentInset.mm: Added.
(-[FullscreenChangeMessageHandler userContentController:didReceiveScriptMessage:]):
(TestWebKitAPI::TEST):

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

4 years agoREGRESSION(r201040): Repainting of moving overflow:hidden objects is broken.
hyatt@apple.com [Tue, 31 May 2016 21:57:39 +0000 (21:57 +0000)]
REGRESSION(r201040): Repainting of moving overflow:hidden objects is broken.
https://bugs.webkit.org/show_bug.cgi?id=158079

Reviewed by Zalan Bujtas.

Source/WebCore:

Added new test fast/repaint/overflow-hidden-movement.html

Change checkForRepaintDuringLayout() to only be true for self-painting layers
and not for all layers.

* rendering/RenderObject.cpp:
(WebCore::RenderObject::hasSelfPaintingLayer):
(WebCore::RenderObject::checkForRepaintDuringLayout):
* rendering/RenderObject.h:
(WebCore::RenderObject::hasSelfPaintingLayer):

LayoutTests:

* fast/repaint/overflow-hidden-movement-expected.txt: Added.
* fast/repaint/overflow-hidden-movement.html: Added.

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

4 years agoShowRenderTree: Print location information for relative/sticky inlines.
zalan@apple.com [Tue, 31 May 2016 21:56:50 +0000 (21:56 +0000)]
ShowRenderTree: Print location information for relative/sticky inlines.
https://bugs.webkit.org/show_bug.cgi?id=158235

Reviewed by David Hyatt.

* rendering/RenderObject.cpp:
(WebCore::RenderObject::showRenderObject):

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

4 years agoUnreviewed, fix an obvious typo: a missing comma.
fpizlo@apple.com [Tue, 31 May 2016 21:47:05 +0000 (21:47 +0000)]
Unreviewed, fix an obvious typo: a missing comma.

* docs/b3/assembly-intermediate-representation.html:

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

4 years agoUnreviewed build fix; use ASSERT_UNUSED rather than ASSERT to fix release builds.
jer.noble@apple.com [Tue, 31 May 2016 21:44:18 +0000 (21:44 +0000)]
Unreviewed build fix; use ASSERT_UNUSED rather than ASSERT to fix release builds.

* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
(WebCore::MediaPlayerPrivateAVFoundationObjC::removeSession):

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

4 years agoAir needs documentation
fpizlo@apple.com [Tue, 31 May 2016 21:40:18 +0000 (21:40 +0000)]
Air needs documentation
https://bugs.webkit.org/show_bug.cgi?id=153668

Reviewed by Mark Lam, Saam Barati, and Benjamin Poulain.

Write documentation for Air!

* docs/b3/assembly-intermediate-representation.html:

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

4 years ago[EME] Sound continues playing when video's src is changed
jer.noble@apple.com [Tue, 31 May 2016 21:24:19 +0000 (21:24 +0000)]
[EME] Sound continues playing when video's src is changed
https://bugs.webkit.org/show_bug.cgi?id=158233

Reviewed by Eric Carlson.

When CDMSessionAVFoundation began listening for outputObscuredDueToInsufficientExternalProtection
KVO notifications, it retained the AVPlayer owned by MediaPlayerPrivateAVFoundationObjC, which
caused the AVPlayer to outlive its original owner, and to continue playing even after the
MediaPlayerPrivateAVFoundationObjC had been destroyed.

Rather than observe for outputObscuredDueToInsufficientExternalProtection changes in
CDMSessionAVFoundation, add a backreference from the media player to the session, listen for changes
in the player, and have the player notify the session when the value of that property changes.

* platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.h:
(WebCore::CDMSessionAVFoundationObjC::createWeakPtr):
* platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
(WebCore::CDMSessionAVFoundationObjC::CDMSessionAVFoundationObjC):
(-[WebCDMSessionAVFoundationObjCListener initWithParent:player:]): Deleted.
(-[WebCDMSessionAVFoundationObjCListener invalidate]): Deleted.
(-[WebCDMSessionAVFoundationObjCListener observeValueForKeyPath:ofObject:change:context:]): Deleted.
(WebCore::CDMSessionAVFoundationObjC::~CDMSessionAVFoundationObjC): Deleted.
* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
(WebCore::MediaPlayerPrivateAVFoundationObjC::removeSession):
(WebCore::MediaPlayerPrivateAVFoundationObjC::createSession):
(WebCore::MediaPlayerPrivateAVFoundationObjC::outputObscuredDueToInsufficientExternalProtectionChanged):
(WebCore::playerKVOProperties):
(-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):

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

4 years ago[JSC] Recover parser performance regression by async support
utatane.tea@gmail.com [Tue, 31 May 2016 20:57:20 +0000 (20:57 +0000)]
[JSC] Recover parser performance regression by async support
https://bugs.webkit.org/show_bug.cgi?id=158228

Reviewed by Saam Barati.

This patch recovers parser performance regression caused in r201481.

Compared to the version that reverts r201481, still ~1% regression remains.
But compared to ToT, this patch significantly improves the code-load performance.

In Linux x64 JSCOnly port, with GCC 5.3.1.

reverted v.s. patched.
                         reverted                  patched

closure              0.61805+-0.00376    ?     0.62280+-0.00525       ?
jquery               8.03778+-0.02114          8.03453+-0.04646

<geometric>          2.22883+-0.00836    ?     2.23688+-0.00995       ? might be 1.0036x slower

ToT v.s. patched.
                         baseline                  patched

closure              0.65490+-0.00351    ^     0.62473+-0.00363       ^ definitely 1.0483x faster
jquery               8.25373+-0.06256    ^     8.04701+-0.03455       ^ definitely 1.0257x faster

<geometric>          2.32488+-0.00921    ^     2.24210+-0.00592       ^ definitely 1.0369x faster

* bytecode/UnlinkedFunctionExecutable.cpp:
(JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
* bytecode/UnlinkedFunctionExecutable.h:
Extend SourceParseMode.

* parser/Parser.cpp:
(JSC::Parser<LexerType>::parseInner):
(JSC::Parser<LexerType>::isArrowFunctionParameters):
Do not call `matchSpecIdentifier()` as much as we can. This greatly improves the performance.

(JSC::Parser<LexerType>::parseStatementListItem):
(JSC::Parser<LexerType>::parseStatement):
(JSC::Parser<LexerType>::parseFunctionParameters):
(JSC::Parser<LexerType>::parseFunctionInfo):
Do not touch `currentScope()->isGenerator()` even if it is unnecessary in parseFunctionInfo.
And accidental `syntaxChecker => context` changes are fixed.

(JSC::Parser<LexerType>::parseClass):
(JSC::Parser<LexerType>::parseExpressionOrLabelStatement):
(JSC::Parser<LexerType>::parseImportClauseItem):
(JSC::Parser<LexerType>::parseExportDeclaration):
(JSC::Parser<LexerType>::parseAssignmentExpression):
Do not use matchSpecIdentifier() in the hot paths.

(JSC::Parser<LexerType>::parseProperty):
(JSC::Parser<LexerType>::parsePrimaryExpression):
(JSC::Parser<LexerType>::parseMemberExpression):
(JSC::Parser<LexerType>::parseUnaryExpression):
(JSC::Parser<LexerType>::printUnexpectedTokenText): Deleted.
* parser/Parser.h:
(JSC::isIdentifierOrKeyword):
AWAIT shoud be one of the keywords. This AWAIT check is unnecessary.

(JSC::Parser::upperScope):
(JSC::Parser::matchSpecIdentifier):
Touching currentScope() and its member causes significant performance degradation.
We carefully remove the above access in the hot paths.

(JSC::Parser::isDisallowedIdentifierAwait):
* parser/ParserModes.h:
(JSC::SourceParseModeSet::SourceParseModeSet):
(JSC::SourceParseModeSet::contains):
(JSC::SourceParseModeSet::mergeSourceParseModes):
(JSC::isFunctionParseMode):
(JSC::isAsyncFunctionParseMode):
(JSC::isAsyncArrowFunctionParseMode):
(JSC::isAsyncFunctionWrapperParseMode):
(JSC::isAsyncFunctionBodyParseMode):
(JSC::isModuleParseMode):
(JSC::isProgramParseMode):
(JSC::constructAbilityForParseMode):
The parser frequently checks SourceParseMode. And variety of SourceParseMode becomes many.
So using switch onto SourceParseMode degrades the performance. Instead, we use bit tests to guard against
many SourceParseModes. We expect that this will be efficiently compiled into test & jmp.

* parser/ParserTokens.h:
Change AWAIT to one of the keywords, as the same to YIELD / LET.

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

4 years ago[Mac] AirPlay route is sometimes reset when changing video.src
eric.carlson@apple.com [Tue, 31 May 2016 20:47:53 +0000 (20:47 +0000)]
[Mac] AirPlay route is sometimes reset when changing video.src
https://bugs.webkit.org/show_bug.cgi?id=158226
<rdar://problem/24197592>

Reviewed by Jer Noble.

Source/WebCore:

Test: media/airplay-autoplay.html

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::webkitShowPlaybackTargetPicker): Remove the gesture requirement
  if currently processing a user gesture.
(WebCore::HTMLMediaElement::dispatchEvent): Set m_failedToPlayToWirelessTarget to false when
  dispatching webkitcurrentplaybacktargetiswirelesschanged so an element can succeed after failing.

LayoutTests:

* media/airplay-autoplay-expected.txt: Added.
* media/airplay-autoplay.html: Added.

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

4 years agoRegression(r201482): Crash under dispatch_semaphore_wait
cdumez@apple.com [Tue, 31 May 2016 20:32:21 +0000 (20:32 +0000)]
Regression(r201482): Crash under dispatch_semaphore_wait
https://bugs.webkit.org/show_bug.cgi?id=158230
<rdar://problem/26534698>

Reviewed by Eric Carlson.

Stop moving hasSessionSemaphore in the lambda capture since it is used in
dispatch_semaphore_wait() call after the callOnMainThread() call.

No new tests, already covered by tests that are crashing on the bots.

* platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
(-[WebAVStreamDataParserListener streamDataParser:didProvideContentKeyRequestInitializationData:forTrackID:]):

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

4 years agoWeb Inspector: capturing with Allocations timeline causes GC to take 100x longer...
sbarati@apple.com [Tue, 31 May 2016 19:45:10 +0000 (19:45 +0000)]
Web Inspector: capturing with Allocations timeline causes GC to take 100x longer and cause frame drops
https://bugs.webkit.org/show_bug.cgi?id=158054
<rdar://problem/25280762>

Reviewed by Joseph Pecoraro.

HeapSnapshot::sweepCell was taking a long time on
http://bl.ocks.org/syntagmatic/6c149c08fc9cde682635
because it has to do a binary search to find if
an item is or is not in the list. 90% of the binary searches
would not find anything. This resulted in a lot of wasted time.

This patch adds a TinyBloomFilter member variable to HeapSnapshot.
We use this filter to try to bypass doing a binary search when the
filter tells us that a particular JSCell is definitely not in our
list. This is a 2x speedup on the steady state GC of the above
website.

* heap/HeapSnapshot.cpp:
(JSC::HeapSnapshot::appendNode):
(JSC::HeapSnapshot::sweepCell):
(JSC::HeapSnapshot::shrinkToFit):
(JSC::HeapSnapshot::nodeForCell):
* heap/HeapSnapshot.h:

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

4 years ago[iOS] Better deal with WebProcess suspension due to screen locking
cdumez@apple.com [Tue, 31 May 2016 19:35:06 +0000 (19:35 +0000)]
[iOS] Better deal with WebProcess suspension due to screen locking
https://bugs.webkit.org/show_bug.cgi?id=158229
<rdar://problem/17665473>
<rdar://problem/26554699>

Reviewed by Tim Horton.

When locking the screen while MobileSafari is front-most, we would try keep
trying to mark IOSurfaces as volatile until the 30 seconds timeout was
reached. This patch deals more cleanly with this situation by only trying
to mark IOSurfaces as volatile once if the suspension is due to screen
locking. In such case, it is apparently expected that some IOSurfaces cannot
be marked as volatile so it is enough to try once and let ourselves get
suspended.

This patch also reduces the timeout from 30 seconds to ~3 seconds in the
other suspension cases (e.g. homing out of MobileSafari). If we fail to mark
them as purgeable for 3 seconds for a reason or another, it is no use in
retrying, it is simply not going to happen and there is no reason to delay
process suspension any further.

* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::callVolatilityCompletionHandlers):
(WebKit::WebPage::layerVolatilityTimerFired):
(WebKit::WebPage::markLayersVolatileImmediatelyIfPossible):
(WebKit::WebPage::markLayersVolatile):
* WebProcess/WebPage/WebPage.h:
(WebKit::WebPage::markLayersVolatile):
* WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::applicationDidEnterBackground):
(WebKit::WebPage::applicationWillEnterForeground):

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

4 years agoMake createCrossThreadTask() functions return on the stack instead of the heap.
beidson@apple.com [Tue, 31 May 2016 19:33:22 +0000 (19:33 +0000)]
Make createCrossThreadTask() functions return on the stack instead of the heap.
https://bugs.webkit.org/show_bug.cgi?id=158215

Reviewed by Darin Adler.

Source/WebCore:

No new tests (Refactor, no change in behavior).

* Modules/indexeddb/client/IDBConnectionProxy.h:

* Modules/indexeddb/server/IDBServer.cpp:
(WebCore::IDBServer::IDBServer::postDatabaseTask):
(WebCore::IDBServer::IDBServer::postDatabaseTaskReply):
(WebCore::IDBServer::IDBServer::databaseRunLoop):
* Modules/indexeddb/server/IDBServer.h:

* Modules/indexeddb/server/UniqueIDBDatabase.cpp:
(WebCore::IDBServer::UniqueIDBDatabase::postDatabaseTask):
(WebCore::IDBServer::UniqueIDBDatabase::postDatabaseTaskReply):
* Modules/indexeddb/server/UniqueIDBDatabase.h:

* dom/ScriptExecutionContext.h:
(WebCore::ScriptExecutionContext::postCrossThreadTask):

* fileapi/ThreadableBlobRegistry.cpp:
(WebCore::threadableQueue):

Source/WebKit2:

* DatabaseProcess/DatabaseProcess.cpp:
(WebKit::DatabaseProcess::postDatabaseTask):
(WebKit::DatabaseProcess::performNextDatabaseTask):
(WebKit::DatabaseProcess::fetchWebsiteData):
* DatabaseProcess/DatabaseProcess.h:

Source/WTF:

* WTF.xcodeproj/project.pbxproj:

* wtf/CrossThreadCopier.cpp:

* wtf/CrossThreadQueue.h: Added. A lightweight of MessageQueue that deals directly
  in objects instead of in std::unique_ptrs.
(WTF::CrossThreadQueue::isKilled):
(WTF::CrossThreadQueue<DataType>::append):
(WTF::CrossThreadQueue<DataType>::waitForMessage):
(WTF::CrossThreadQueue<DataType>::tryGetMessage):

* wtf/CrossThreadTask.h:
(WTF::createCrossThreadTask):
(WTF::CrossThreadTask::CrossThreadTask): Deleted.

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

4 years agoUnreviewed: add myself to the reviewers list.
jonlee@apple.com [Tue, 31 May 2016 18:49:52 +0000 (18:49 +0000)]
Unreviewed: add myself to the reviewers list.

* Scripts/webkitpy/common/config/contributors.json:

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

4 years agoREGRESSION (r189567): Elements with aspect ratios not handled correctly inside flexbox.
hyatt@apple.com [Tue, 31 May 2016 18:42:17 +0000 (18:42 +0000)]
REGRESSION (r189567): Elements with aspect ratios not handled correctly inside flexbox.
https://bugs.webkit.org/show_bug.cgi?id=158040

Reviewed by Zalan Bujtas.

Source/WebCore:

Added new tests in fast/flexbox.

* rendering/RenderFlexibleBox.cpp:
(WebCore::RenderFlexibleBox::clientLogicalBottomAfterRepositioning):
(WebCore::RenderFlexibleBox::hasOrthogonalFlow):
(WebCore::RenderFlexibleBox::mainAxisContentExtent):
(WebCore::RenderFlexibleBox::computeMainAxisExtentForChild):
(WebCore::RenderFlexibleBox::mainAxisBorderAndPaddingExtentForChild):
(WebCore::RenderFlexibleBox::mainAxisLengthIsDefinite):
(WebCore::RenderFlexibleBox::mainAxisScrollbarExtentForChild):
(WebCore::RenderFlexibleBox::prepareOrderIteratorAndMargins):
(WebCore::RenderFlexibleBox::crossAxisLengthIsDefinite):
(WebCore::RenderFlexibleBox::computeMainSizeFromAspectRatioUsing):
(WebCore::RenderFlexibleBox::adjustChildSizeForAspectRatioCrossAxisMinAndMax):
(WebCore::RenderFlexibleBox::useChildAspectRatio):
(WebCore::RenderFlexibleBox::adjustChildSizeForMinAndMax):
(WebCore::RenderFlexibleBox::resetAutoMarginsAndLogicalTopInCrossAxis):
(WebCore::RenderFlexibleBox::mainAxisOverflowForChild):
(WebCore::RenderFlexibleBox::mainAxisExtentIsDefinite): Deleted.
(WebCore::RenderFlexibleBox::mainAxisLengthIsIndefinite): Deleted.
* rendering/RenderFlexibleBox.h:
(WebCore::RenderFlexibleBox::isFlexibleBoxImpl):

LayoutTests:

* fast/flexbox/aspect-ratio-intrinsic-adjust-expected.html: Added.
* fast/flexbox/aspect-ratio-intrinsic-adjust.html: Added.
* fast/flexbox/resources/subjects_sm.png: Added.

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

4 years agoBuild fix after r201482.
achristensen@apple.com [Tue, 31 May 2016 17:53:20 +0000 (17:53 +0000)]
Build fix after r201482.

* platform/network/curl/CurlDownload.cpp:
(WebCore::CurlDownload::didReceiveHeader):
header used to be capturedHeader, which was a StringCapture, which needed .string() to get the String.
Now it's a WTF::String, so we already have the String.  Hooray for c++14!

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

4 years agoUnreviewed build fix.
svillar@igalia.com [Tue, 31 May 2016 15:35:58 +0000 (15:35 +0000)]
Unreviewed build fix.

* rendering/RenderGrid.cpp:
(WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
(WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):

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

4 years ago[css-grid] Empty grid without explicit tracks shouldn't have any size
svillar@igalia.com [Tue, 31 May 2016 15:17:03 +0000 (15:17 +0000)]
[css-grid] Empty grid without explicit tracks shouldn't have any size
https://bugs.webkit.org/show_bug.cgi?id=155197

Reviewed by Darin Adler.

Source/WebCore:

The internal representation of the grid is a Vector of Vector representing rows and
columns. Because of that it was not possible to have columns without having at least one
row. That forced us to have a 1x1 internal representation of the grid even if it was
actually empty. That works for most of the cases except when the grid is actually empty.

By changing the way we compute the sizes we can overcome that implementation
restriction. This allowed us also to thighten the conditions under we could use the
GridIterator. From now on it won't be possible to use it on empty grids so callers should
enforce that restriction.

A new bool was added to verify that placeItemsOnGrid() has been already called. The previous
code was relying on the fact that there were items in the internal representation, which is
wrong, as there might be no items in the grid.

Test: fast/css-grid-layout/empty-grid.html

* rendering/RenderGrid.cpp:
(WebCore::RenderGrid::GridIterator::GridIterator): Added ASSERTs.
(WebCore::RenderGrid::GridIterator::nextGridItem): Ditto.
(WebCore::RenderGrid::GridIterator::isEmptyAreaEnough): Ditto.
(WebCore::RenderGrid::GridIterator::nextEmptyGridArea): Ditto.
(WebCore::RenderGrid::gridColumnCount): Use the style to resolve the number of columns if
the internal representation is empty.
(WebCore::RenderGrid::gridRowCount):
(WebCore::RenderGrid::guttersSize): Allow to pass 0 as span, this permits using the return
value of gridColumnCount|gridRowCount directly to call this method.
(WebCore::RenderGrid::computeIntrinsicLogicalWidths): Use m_gridIsDirty.
(WebCore::RenderGrid::computeUsedBreadthOfGridTracks): Do not examine the contents of grid
tracks if there are no items in the grid.
(WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions): Ditto.
(WebCore::RenderGrid::placeItemsOnGrid): Set m_gridIsDirty to false.
(WebCore::RenderGrid::populateExplicitGridAndOrderIterator):
(WebCore::RenderGrid::clearGrid):
(WebCore::RenderGrid::populateGridPositionsForDirection):
* rendering/RenderGrid.h: Moved gridColumnCount/gridRowCount to cpp file.

LayoutTests:

Make sure that empty grids (and grids with one empty axis) are properly handled. Do also
verify that removing all the items from a grid also generates an correct empty grid.

* fast/css-grid-layout/empty-grid-expected.txt: Added.
* fast/css-grid-layout/empty-grid.html: Added.

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

4 years ago[GTK] Provide alternative mirror for the ICU tarball.
clopez@igalia.com [Tue, 31 May 2016 10:34:29 +0000 (10:34 +0000)]
[GTK] Provide alternative mirror for the ICU tarball.
https://bugs.webkit.org/show_bug.cgi?id=154530

Unreviewed.

* gtk/jhbuild.modules: After r201449 the GTK+ ARM buildbot is having
a hard time trying to download the ICU tarball from download.icu-project.org
(which redirects to sourceforge and gives problems with something related to
SSL). Provide this alternative mirror to make things working back.

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

4 years agoUnreviewed. Update OptionsGTK.cmake and NEWS for 2.13.1 release.
carlosgc@webkit.org [Tue, 31 May 2016 09:25:04 +0000 (09:25 +0000)]
Unreviewed. Update OptionsGTK.cmake and NEWS for 2.13.1 release.

.:

* Source/cmake/OptionsGTK.cmake: Bump version numbers.

Source/WebKit2:

* gtk/NEWS: Add release notes for 2.13.1.

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

4 years agoUnreviewed. Fix GTK+ clean build after r201504.
carlosgc@webkit.org [Tue, 31 May 2016 07:51:45 +0000 (07:51 +0000)]
Unreviewed. Fix GTK+ clean build after r201504.

* DatabaseProcess/DatabaseProcess.cpp: Add missing include.

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

4 years ago[GTK] Test /webkit2/WebKitWebView/geolocation-permission-requests is failing since...
carlosgc@webkit.org [Tue, 31 May 2016 07:22:40 +0000 (07:22 +0000)]
[GTK] Test /webkit2/WebKitWebView/geolocation-permission-requests is failing since r201423
https://bugs.webkit.org/show_bug.cgi?id=158200

Reviewed by Philippe Normand.

This is because geolocation is no longer allowed for non secure sites, like HTTP. In that case
POSITION_UNAVAILABLE is returned without asking the API layer.

* TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp:
(testWebViewGeolocationPermissionRequests): Keep the HTTP case to check that it indeed returns
POSITION_UNAVAILABLE and use HTTPS URLs to check permission requests are allowed or denied. Also stop using the
document title, and use user script messages that are more reliable instead.

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

4 years agoMove CrossThreadCopier/CrossThreadTask to WTF.
beidson@apple.com [Tue, 31 May 2016 03:35:44 +0000 (03:35 +0000)]
Move CrossThreadCopier/CrossThreadTask to WTF.
https://bugs.webkit.org/show_bug.cgi?id=158207

Reviewed by Alex Christensen.

Source/WebCore:

No new tests (Refactor, no behavior change).

* CMakeLists.txt:
* WebCore.xcodeproj/project.pbxproj:

* Modules/indexeddb/IDBActiveDOMObject.h:
* Modules/indexeddb/IDBValue.cpp:
* Modules/indexeddb/client/IDBConnectionProxy.h:
* Modules/indexeddb/server/IDBServer.cpp:
* Modules/indexeddb/server/IDBServer.h:
* Modules/indexeddb/server/UniqueIDBDatabase.h:
* dom/ScriptExecutionContext.h:
* fileapi/ThreadableBlobRegistry.cpp:

* platform/WebCoreCrossThreadCopier.cpp: Added.
(WTF::WebCore::SessionID>::copy):
(WTF::WebCore::ThreadSafeDataBuffer>::copy):
* platform/WebCoreCrossThreadCopier.h: Added.

* platform/network/cf/ResourceError.h:
(WebCore::ResourceError::isolatedCopy):

* platform/network/cf/ResourceRequest.h:
(WebCore::ResourceRequest::isolatedCopy):

* platform/network/cf/ResourceResponse.h:
(WebCore::ResourceResponse::isolatedCopy):

Source/WebKit2:

* CMakeLists.txt:
* WebKit2.xcodeproj/project.pbxproj:

* DatabaseProcess/DatabaseProcess.cpp:
* DatabaseProcess/DatabaseProcess.h:

* Shared/WebCrossThreadCopier.cpp: Removed.
* Shared/WebCrossThreadCopier.h: Removed.

Source/WTF:

* WTF.xcodeproj/project.pbxproj:
* wtf/CMakeLists.txt:

* wtf/CrossThreadCopier.cpp: Renamed from Source/WebCore/platform/CrossThreadCopier.cpp.
* wtf/CrossThreadCopier.h: Renamed from Source/WebCore/platform/CrossThreadCopier.h.
(WTF::CrossThreadCopierPassThrough::copy):

* wtf/CrossThreadTask.h: Renamed from Source/WebCore/platform/CrossThreadTask.h.
(WTF::CrossThreadTask::CrossThreadTask):
(WTF::CrossThreadTask::performTask):
(WTF::createCrossThreadTask):

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

4 years agoWeb Inspector: Timelines: "-0.000ms" in Self Time
bburg@apple.com [Tue, 31 May 2016 03:25:40 +0000 (03:25 +0000)]
Web Inspector: Timelines: "-0.000ms" in Self Time
https://bugs.webkit.org/show_bug.cgi?id=158162
<rdar://problem/26523350>

Reviewed by Darin Adler.

Values such as -0.0000 and +0.00001 seem to indicate there is
some floating point error accumulating in profile node data.
Since the sampling profiler isn't accurate to that precision,
let's clean up the data so near-zero numbers are simply zero.

* UserInterface/Models/ProfileNode.js:
Round selfTime down to zero if it's less than the
smallest value we would show in the user interface.

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

4 years agoWeb Inspector: Uncaught exception page should pre-populate the bug's URL with the...
bburg@apple.com [Mon, 30 May 2016 20:26:25 +0000 (20:26 +0000)]
Web Inspector: Uncaught exception page should pre-populate the bug's URL with the inspected page URL
https://bugs.webkit.org/show_bug.cgi?id=158055
<rdar://problem/26516693>

Reviewed by Saam Barati.

* UserInterface/Debug/UncaughtExceptionReporter.js:
Include the encoded URL in the query string if it is not empty.

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

4 years agoUnreviewed test gardening.
peavo@outlook.com [Mon, 30 May 2016 19:03:39 +0000 (19:03 +0000)]
Unreviewed test gardening.

After the crash fix in r201500, update the test expectations for
http/tests/websocket/tests/hybi/stop-on-resume-in-error-handler.html.

Patch by Per Arne Vollan <pvollan@apple.com> on 2016-05-30

* platform/win/TestExpectations:

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

4 years agohttp/tests/websocket/tests/hybi/stop-on-resume-in-error-handler.html crashes on Windo...
peavo@outlook.com [Mon, 30 May 2016 18:44:38 +0000 (18:44 +0000)]
http/tests/websocket/tests/hybi/stop-on-resume-in-error-handler.html crashes on Windows almost all the time
https://bugs.webkit.org/show_bug.cgi?id=144057

Patch by Per Arne Vollan <pvollan@apple.com> on 2016-05-30
Reviewed by Brent Fulgham.

Protect SocketStreamHandle object before trying to access it on the main thread, and make sure
CFWriteStreamRef parameter is valid before calling CFWriteStreamCanAcceptBytes.

* platform/network/cf/SocketStreamHandleCFNet.cpp:
(WebCore::SocketStreamHandle::readStreamCallback):
(WebCore::SocketStreamHandle::writeStreamCallback):

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

4 years agoWeb Inspector: Right-clicking in Snapshot's DataGrid throws an exception
mattbaker@apple.com [Mon, 30 May 2016 16:56:24 +0000 (16:56 +0000)]
Web Inspector: Right-clicking in Snapshot's DataGrid throws an exception
https://bugs.webkit.org/show_bug.cgi?id=157934
<rdar://problem/26380910>

Reviewed by Brian Burg.

Check that click event target is actually a cell, as it can be a row
when focusing the table after dismissing a popup menu.

* UserInterface/Views/DataGrid.js:
(WebInspector.DataGridNode.prototype.isEventWithinDisclosureTriangle):

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

4 years ago[CSS Box Alignment] New CSS Value 'normal' for Self Alignment
jfernandez@igalia.com [Mon, 30 May 2016 08:14:31 +0000 (08:14 +0000)]
[CSS Box Alignment] New CSS Value 'normal' for Self Alignment
https://bugs.webkit.org/show_bug.cgi?id=156254

Reviewed by Darin Adler.

Source/WebCore:

The Box Alignment specification defines a new value 'normal' to be used
as default for the different layout models, which will define the
specific behavior for each case. This patch adds a new CSS value in the
parsing logic and adapts the Self Alignment properties to the new
value.

The 'auto' value is no longer valid for the 'align-items' property and
the Computed Value will be always the specified value. Hence, I removed
the StyleResolver logic because is not required now; the specific
behavior of the 'normal' value will be resolved at layout time.

Additionally, this patch updates the layout logic as well, for both
Flexbox and Grid layout models.

Test: css3/parse-alignment-of-root-elements.html

* css/CSSComputedStyleDeclaration.cpp:
(WebCore::resolveLegacyJustifyItems): Added.
(WebCore::resolveJustifyItemsAuto): Added.
(WebCore::resolveJustifySelfAuto): Added.
(WebCore::resolveAlignSelfAuto): Added.
(WebCore::valueForItemPositionWithOverflowAlignment): Using a StyleSelfAlignmentData argument.
(WebCore::ComputedStyleExtractor::propertyValue): Using the new resolving functions.
* css/CSSParser.cpp:
(WebCore::CSSParser::parseItemPositionOverflowPosition): A new value 'normal' is now valid.
* css/CSSPrimitiveValueMappings.h:
(WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Mappings for the new value 'normal'.
(WebCore::CSSPrimitiveValue::operator ItemPosition): Mappings for the new value 'normal'.
* css/CSSPropertyNames.in:
* css/StyleResolver.cpp:
(WebCore::StyleResolver::adjustRenderStyle): We don't need to resolve 'legacy" keyword.
* rendering/RenderBox.cpp:
(WebCore::flexItemHasStretchAlignment):
(WebCore::RenderBox::hasStretchedLogicalWidth):
* rendering/RenderFlexibleBox.cpp:
(WebCore::RenderFlexibleBox::styleDidChange):
(WebCore::RenderFlexibleBox::alignmentForChild):
(WebCore::contentAlignmentNormalBehaviorFlexibleBox):
(WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
(WebCore::RenderFlexibleBox::layoutColumnReverse):
(WebCore::RenderFlexibleBox::alignFlexLines):
(WebCore::RenderFlexibleBox::alignChildren):
* rendering/RenderGrid.cpp:
(WebCore::defaultAlignmentChangedToStretchInRowAxis):
(WebCore::defaultAlignmentChangedFromStretchInRowAxis):
(WebCore::defaultAlignmentChangedFromStretchInColumnAxis):
(WebCore::selfAlignmentChangedToStretchInRowAxis):
(WebCore::selfAlignmentChangedFromStretchInRowAxis):
(WebCore::selfAlignmentChangedFromStretchInColumnAxis):
(WebCore::contentAlignmentNormalBehaviorGrid):
(WebCore::RenderGrid::applyStretchAlignmentToTracksIfNeeded):
(WebCore::RenderGrid::needToStretchChildLogicalHeight):
(WebCore::RenderGrid::applyStretchAlignmentToChildIfNeeded):
(WebCore::RenderGrid::columnAxisPositionForChild):
(WebCore::RenderGrid::rowAxisPositionForChild):
(WebCore::RenderGrid::columnAxisOffsetForChild):
(WebCore::RenderGrid::rowAxisOffsetForChild):
(WebCore::RenderGrid::computeContentPositionAndDistributionOffset):
* rendering/style/RenderStyle.cpp:
(WebCore::resolvedSelfAlignment):
(WebCore::RenderStyle::resolvedAlignItems):
(WebCore::RenderStyle::resolvedAlignSelf):
(WebCore::RenderStyle::resolvedJustifyItems):
(WebCore::RenderStyle::resolvedJustifySelf):
* rendering/style/RenderStyle.h:
* rendering/style/RenderStyleConstants.h:
* rendering/style/StyleRareNonInheritedData.cpp:
(WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData): align-items uses now a different initial function.

LayoutTests:

Changes in the already defined tests for the alignment properties to
consider the new CSS value 'normal', which is the default for align-items
and the value to resolve 'auto' when there is no parent.

Added a new test to verify the Self-Alignment properties work as expected
with root elements.

* css3/flexbox/css-properties-expected.txt:
* css3/flexbox/css-properties.html:
* css3/parse-align-items-expected.txt:
* css3/parse-align-items.html:
* css3/parse-align-self-expected.txt:
* css3/parse-align-self.html:
* css3/parse-alignment-of-root-elements-expected.txt: Added.
* css3/parse-alignment-of-root-elements.html: Added.
* fast/css/getComputedStyle/computed-style-expected.txt:
* fast/css/getComputedStyle/computed-style-without-renderer-expected.txt:
* fast/css/parse-justify-items-expected.txt:
* fast/css/parse-justify-items.html:
* fast/css/parse-justify-self-expected.txt:
* fast/css/parse-justify-self.html:
* fast/css/resources/alignment-parsing-utils.js:
* svg/css/getComputedStyle-basic-expected.txt:
(checkBadValues):
* svg/css/getComputedStyle-basic-expected.txt:

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

4 years agoTransition various Task/Function queues from std::function to NoncopyableFunction.
beidson@apple.com [Mon, 30 May 2016 06:53:36 +0000 (06:53 +0000)]
Transition various Task/Function queues from std::function to NoncopyableFunction.
https://bugs.webkit.org/show_bug.cgi?id=158196

Reviewed by Chris Dumez.

No new tests (Refactor, no behavior change).

* dom/ActiveDOMCallbackMicrotask.cpp:
(WebCore::ActiveDOMCallbackMicrotask::ActiveDOMCallbackMicrotask):
* dom/ActiveDOMCallbackMicrotask.h:

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::layoutSizeChanged):

* page/FrameView.cpp:
(WebCore::FrameView::queuePostLayoutCallback):
(WebCore::FrameView::flushPostLayoutTasksQueue):
* page/FrameView.h:

* platform/GenericTaskQueue.cpp:
(WebCore::TaskDispatcher<Timer>::postTask):
(WebCore::TaskDispatcher<Timer>::dispatchOneTask):
* platform/GenericTaskQueue.h:
(WebCore::TaskDispatcher::postTask):
(WebCore::GenericTaskQueue::enqueueTask):

* style/StyleTreeResolver.cpp:
(WebCore::Style::postResolutionCallbackQueue):
(WebCore::Style::queuePostResolutionCallback):
(WebCore::Style::suspendMemoryCacheClientCalls):
* style/StyleTreeResolver.h:

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

4 years agoMake ScriptExecutionContext::Task work in terms of wtf::NoncopyableFunction instead...
beidson@apple.com [Mon, 30 May 2016 04:30:22 +0000 (04:30 +0000)]
Make ScriptExecutionContext::Task work in terms of wtf::NoncopyableFunction instead of std::function.
https://bugs.webkit.org/show_bug.cgi?id=158187

Reviewed by Chris Dumez.

No new tests (Refactor, no behavior change).

Also make postTask take an rvalue reference.

* bindings/js/JSDOMGlobalObjectTask.cpp:
(WebCore::JSGlobalObjectTask::JSGlobalObjectTask):

* dom/Document.cpp:
(WebCore::Document::postTask):
* dom/Document.h:

* dom/ScriptExecutionContext.h:
(WebCore::ScriptExecutionContext::Task::Task):

* workers/WorkerGlobalScope.cpp:
(WebCore::WorkerGlobalScope::postTask):
* workers/WorkerGlobalScope.h:

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

4 years agoStack overflow crashes with deep or cyclic proxy prototype chains
sbarati@apple.com [Sun, 29 May 2016 19:01:36 +0000 (19:01 +0000)]
Stack overflow crashes with deep or cyclic proxy prototype chains
https://bugs.webkit.org/show_bug.cgi?id=157087

Reviewed by Filip Pizlo and Mark Lam.

Because a Proxy can call back into the JS runtime in arbitrary
ways, we may have effectively cyclic prototype chains and property lookups
by using a Proxy. We may also have arbitrarily long Proxy chains
where we call into a C frame for each link in the Proxy chain.
This means that every Proxy hook must be aware that it can stack overflow.
Before, only certain hooks were aware of this fact. That was a bug,
all hooks must assume they can stack overflow.

Also, because we may have effectively cyclic prototype chains, we
compile ProxyObject.cpp with -fno-optimize-sibling-calls. This prevents
tail call optimization from happening on any of the calls from
ProxyObject.cpp. We do this because we rely on the machine stack
growing for throwing a stack overflow error. It's better for developers
to be able to see a stack overflow error than to have their program
infinite loop because the compiler performed TCO.

This patch also fixes a couple call sites of various methods
where we didn't check for an exception.

* CMakeLists.txt:
* JavaScriptCore.xcodeproj/project.pbxproj:
* interpreter/Interpreter.cpp:
(JSC::sizeOfVarargs):
* runtime/InternalFunction.cpp:
(JSC::InternalFunction::createSubclassStructure):
* runtime/JSArray.h:
(JSC::getLength):
* runtime/ObjectPrototype.cpp:
(JSC::objectProtoFuncToString):
* runtime/ProxyObject.cpp:
(JSC::performProxyGet):
(JSC::ProxyObject::performInternalMethodGetOwnProperty):
(JSC::ProxyObject::performHasProperty):
(JSC::ProxyObject::getOwnPropertySlotCommon):
(JSC::ProxyObject::performPut):
(JSC::performProxyCall):
(JSC::performProxyConstruct):
(JSC::ProxyObject::performDelete):
(JSC::ProxyObject::performPreventExtensions):
(JSC::ProxyObject::performIsExtensible):
(JSC::ProxyObject::performDefineOwnProperty):
(JSC::ProxyObject::performGetOwnPropertyNames):
(JSC::ProxyObject::getOwnPropertyNames):
(JSC::ProxyObject::getPropertyNames):
(JSC::ProxyObject::getOwnNonIndexPropertyNames):
(JSC::ProxyObject::performSetPrototype):
(JSC::ProxyObject::performGetPrototype):
* runtime/ProxyObject.h:
(JSC::ProxyObject::create):
* tests/stress/proxy-stack-overflow-exceptions.js: Added.
(shouldThrowStackOverflow):
(const.emptyFunction):
(makeLongProxyChain):
(shouldThrowStackOverflow.longProxyChain):
(shouldThrowStackOverflow.effecivelyCyclicProxyProtoChain1):
(shouldThrowStackOverflow.effecivelyCyclicProxyProtoChain2):
(shouldThrowStackOverflow.effecivelyCyclicProxyProtoChain3):
(shouldThrowStackOverflow.longProxyChainBind):
(shouldThrowStackOverflow.longProxyChainPropertyAccess):
(shouldThrowStackOverflow.longProxyChainReflectConstruct):
(shouldThrowStackOverflow.longProxyChainReflectSet):
(shouldThrowStackOverflow.longProxyChainReflectOwnKeys):
(shouldThrowStackOverflow.longProxyChainGetPrototypeOf):
(shouldThrowStackOverflow.longProxyChainSetPrototypeOf):
(shouldThrowStackOverflow.longProxyChainGetOwnPropertyDescriptor):
(shouldThrowStackOverflow.longProxyChainDefineProperty):
(shouldThrowStackOverflow.longProxyChainIsExtensible):
(shouldThrowStackOverflow.longProxyChainPreventExtensions):
(shouldThrowStackOverflow.longProxyChainDeleteProperty):
(shouldThrowStackOverflow.longProxyChainWithScope):
(shouldThrowStackOverflow.longProxyChainWithScope2):
(shouldThrowStackOverflow.longProxyChainWithScope3):
(shouldThrowStackOverflow.longProxyChainArrayPrototypePush):
(shouldThrowStackOverflow.longProxyChainWithScope4):
(shouldThrowStackOverflow.longProxyChainCall):
(shouldThrowStackOverflow.longProxyChainConstruct):
(shouldThrowStackOverflow.longProxyChainHas):

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

4 years agoJSGlobalLexicalEnvironment leaks SegmentedVector due to lack of destructor.
akling@apple.com [Sun, 29 May 2016 04:47:41 +0000 (04:47 +0000)]
JSGlobalLexicalEnvironment leaks SegmentedVector due to lack of destructor.
<https://webkit.org/b/158186>

Reviewed by Saam Barati.

Give JSGlobalLexicalEnvironment a destroy() and set up a finalizer for it
like we do with JSGlobalObject. (This is needed because they don't inherit
from JSDestructibleObjects and thus can't use JSCell::needsDestruction to
ask for allocation in destructor space.)

This stops us from leaking all the SegmentedVector backing stores.

* runtime/JSGlobalLexicalEnvironment.cpp:
(JSC::JSGlobalLexicalEnvironment::destroy):
* runtime/JSGlobalLexicalEnvironment.h:
(JSC::JSGlobalLexicalEnvironment::create):

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

4 years agoTemplatize NoncopyableFunction class similarly to std::function
cdumez@apple.com [Sun, 29 May 2016 04:20:06 +0000 (04:20 +0000)]
Templatize NoncopyableFunction class similarly to std::function
https://bugs.webkit.org/show_bug.cgi?id=158185

Reviewed by Darin Adler.

Templatize NoncopyableFunction class similarly to std::function, so
that it can be used as a std::function replacement in more places.

Previously, NoncopyableFunction could only support "void()" lambdas.

Source/WebCore:

* Modules/mediastream/MediaEndpointPeerConnection.cpp:
(WebCore::MediaEndpointPeerConnection::runTask):
* Modules/mediastream/MediaEndpointPeerConnection.h:
* fileapi/AsyncFileStream.cpp:
(WebCore::callOnFileThread):
(WebCore::AsyncFileStream::perform):
(WebCore::AsyncFileStream::getSize):
(WebCore::AsyncFileStream::openForRead):
(WebCore::AsyncFileStream::openForWrite):
(WebCore::AsyncFileStream::write):
* fileapi/AsyncFileStream.h:
* page/scrolling/ScrollingThread.cpp:
(WebCore::ScrollingThread::dispatch):
(WebCore::ScrollingThread::dispatchBarrier):
(WebCore::ScrollingThread::dispatchFunctionsFromScrollingThread):
* page/scrolling/ScrollingThread.h:
* platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
* platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
(WebCore::MediaPlayerPrivateMediaStreamAVFObjC::scheduleDeferredTask):
* platform/mediastream/MediaStreamPrivate.cpp:
(WebCore::MediaStreamPrivate::scheduleDeferredTask):
* platform/mediastream/MediaStreamPrivate.h:
* platform/mediastream/mac/AVMediaCaptureSource.h:
* platform/mediastream/mac/AVMediaCaptureSource.mm:
(WebCore::AVMediaCaptureSource::scheduleDeferredTask):

Source/WebKit:

* Storage/StorageSyncManager.cpp:
(WebCore::StorageSyncManager::dispatch):
* Storage/StorageSyncManager.h:
* Storage/StorageThread.cpp:
(WebCore::StorageThread::dispatch):
(WebCore::StorageThread::terminate):
* Storage/StorageThread.h:

Source/WebKit2:

* NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
(WebKit::NetworkCache::runTaskInQueue):

Source/WTF:

* wtf/FunctionDispatcher.h:
* wtf/MainThread.cpp:
(WTF::functionQueue):
(WTF::dispatchFunctionsFromMainThread):
(WTF::callOnMainThread):
* wtf/MainThread.h:
* wtf/NoncopyableFunction.h:
* wtf/RunLoop.cpp:
(WTF::RunLoop::performWork):
(WTF::RunLoop::dispatch):
* wtf/RunLoop.h:
* wtf/WorkQueue.h:
* wtf/cocoa/WorkQueueCocoa.cpp:
(WTF::WorkQueue::dispatch):
(WTF::WorkQueue::dispatchAfter):
* wtf/efl/DispatchQueueWorkItemEfl.h:
(WorkItem::WorkItem):
(TimerWorkItem::create):
(TimerWorkItem::TimerWorkItem):
* wtf/efl/WorkQueueEfl.cpp:
(WTF::WorkQueue::dispatch):
(WTF::WorkQueue::dispatchAfter):
* wtf/generic/RunLoopGeneric.cpp:
(WTF::RunLoop::TimerBase::ScheduledTask::create):
(WTF::RunLoop::TimerBase::ScheduledTask::ScheduledTask):
(WTF::RunLoop::dispatchAfter):
* wtf/generic/WorkQueueGeneric.cpp:
(WorkQueue::dispatch):
(WorkQueue::dispatchAfter):
* wtf/glib/RunLoopGLib.cpp:
(WTF::DispatchAfterContext::DispatchAfterContext):
(WTF::RunLoop::dispatchAfter):
* wtf/win/WorkItemWin.cpp:
(WTF::WorkItemWin::WorkItemWin):
(WTF::WorkItemWin::create):
(WTF::HandleWorkItem::HandleWorkItem):
(WTF::HandleWorkItem::createByAdoptingHandle):
* wtf/win/WorkItemWin.h:
(WTF::WorkItemWin::function):
* wtf/win/WorkQueueWin.cpp:
(WTF::WorkQueue::dispatch):
(WTF::WorkQueue::dispatchAfter):

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

4 years agoFix the build with newer clang and other custom configuration options
ap@apple.com [Sat, 28 May 2016 23:16:50 +0000 (23:16 +0000)]
Fix the build with newer clang and other custom configuration options
https://bugs.webkit.org/show_bug.cgi?id=158161

Reviewed by Dan Bernstein.

Source/WebCore:

* platform/mac/WebVideoFullscreenInterfaceMac.mm:
(WebCore::WebVideoFullscreenInterfaceMac::rateChanged): Added UNUSED_PARAMs for the
case where this function is unimplemented.
(WebCore::WebVideoFullscreenInterfaceMac::setExternalPlayback): Added a non-additions
version of this function.
* platform/spi/cf/CFNetworkSPI.h: Silence nullability-completeness (and other) warnings.
I doubt that it's practical to get these right for every SDK version at this time. Added
functions for overriding HTTPS certicate behavior that we used to declare in .m files.
* platform/spi/mac/AVFoundationSPI.h: Define AVAssetCache conditionally.

Source/WebKit2:

* NetworkProcess/ios/NetworkProcessIOS.mm: -setAllowsSpecificHTTPSCertificate:forHost:
is now in CFNetworkSPI.h
* NetworkProcess/mac/NetworkProcessMac.mm: Ditto.
* Shared/mac/CookieStorageShimLibrary.cpp:
(WebKit::WebKitCookieStorageShimInitialize): Use more portable std::call_once.

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

4 years agoAdding wptserve logging for 404 file-serving responses
youenn.fablet@crf.canon.fr [Sat, 28 May 2016 19:53:27 +0000 (19:53 +0000)]
Adding wptserve logging for 404 file-serving responses
https://bugs.webkit.org/show_bug.cgi?id=158183

Reviewed by Alexey Proskuryakov.

* resources/web-platform-tests-modules.json: Modifying wptserve module to log 404 FileHandler exceptions.

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

4 years agoAutocorrection makes it hard to type "doesn't" and to type @ in email addresses
rniwa@webkit.org [Sat, 28 May 2016 19:18:48 +0000 (19:18 +0000)]
Autocorrection makes it hard to type "doesn't" and to type @ in email addresses
https://bugs.webkit.org/show_bug.cgi?id=158177
.:

Reviewed by Darin Adler.

Fixed manual tests for autocorrection panels and added a manual test for . Most of changes are fixing up the path to LayoutTests/editing/editing.js.

Also wrap many steps to type in a space or delete a character inside setTimeout since autocorrection happens on a timer
and the fact WebKit2 communicates with NSSpellChecker via IPC makes the behavior even more indeterministic.

* ManualTests/autocorrection/autocorrection-at-mark.html: Added.
* ManualTests/autocorrection/autocorrection-cancelled-by-ESC.html:
* ManualTests/autocorrection/autocorrection-cancelled-by-typing-1.html:
* ManualTests/autocorrection/autocorrection-contraction-2.html: Added.
* ManualTests/autocorrection/autocorrection-contraction.html:
* ManualTests/autocorrection/autocorrection-in-iframe.html:
* ManualTests/autocorrection/close-window-when-correction-is-shown.html:
* ManualTests/autocorrection/continue-typing-to-dismiss-reversion.html:
* ManualTests/autocorrection/delete-to-dismiss-reversion.html:
* ManualTests/autocorrection/delete-to-end-of-word-to-show-reversion.html:
* ManualTests/autocorrection/dismiss-multiple-guesses.html:
* ManualTests/autocorrection/document-for-iframe-test.html: Removed.
* ManualTests/autocorrection/move-to-end-of-word-to-show-reversion.html: Type a space and move care in setTimeout as
the reversion panel wouldn't show up otherwise.
* ManualTests/autocorrection/remove-misspelling-marker-after-appending-letter.html: Delay the typing of a space as well as
deleting letters since autocorrection panel wouldn't show up in time otherwise, and deleting character immediately would
reject the autocorrection instead of accepting it. Also removed the steps to add back the spellchecking marker and extracted
it as a separate test.
* ManualTests/autocorrection/removing-misspelling-marker-after-appending-letter-2.html: Copied. This test continues the full
scenario in the previous test by typing a space and deleting the character, thereby bringing up spellchecking marker.
* ManualTests/autocorrection/resources: Added.
* ManualTests/autocorrection/resources/document-for-iframe-test.html: Moved from ManualTests/autocorrection/.
* ManualTests/autocorrection/select-from-multiple-guesses.html: Added a missing instruction.
* ManualTests/autocorrection/spell-checking-after-reversion.html:
* ManualTests/autocorrection/type-whitespace-to-dismiss-reversion.html: Delay the typing of a space and moving the selection
since the reversion panel wouldn't show up otherwise.
* ManualTests/autocorrection/undo-autocorrection-2.html: Copied. Automated most of steps in the second test case.
* ManualTests/autocorrection/undo-autocorrection.html:

Source/WebCore:

<rdar://problem/20490862>
<rdar://problem/24707954>

Reviewed by Darin Adler.

When the user had typed "doesn'", some unified spellchecker may try to autocorrect it to "doesn't" or "does"
but we should ignore this for a moment until the next character is typed by the user. The code to deal with
this situation which checks the existence of an "ambiguous boundary character" was not robust when the
replacement text was longer than the corrected text.

Fixed this bug by fixing the logic to detect this case. Also added '@' as an ambiguous boundary character
since autocorrecting letters that appear right before '@' would not be useful in many cases.

Tests: ManualTests/autocorrection/autocorrection-at-mark.html
       ManualTests/autocorrection/autocorrection-contraction-2.html

* editing/AlternativeTextController.cpp:
(WebCore::AlternativeTextController::timerFired): Fixed a bug that we can show an empty reversion panel.
* editing/Editor.cpp:
(WebCore::Editor::markAndReplaceFor): When the user had typed "doesn'" and our autocorrection result is
"doesn't", resultEndLocation (the end of "doesn't") is larger than selectionOffset (the end of "doesn'").
When the correction is "does", resultEndLocation (the end of "does") is one less than selectionOffset.
Updated the condition to deal with both of these conditions as well as cases where the correction result
contains more than one letter after '.
* editing/htmlediting.cpp:
(WebCore::isAmbiguousBoundaryCharacter): Moved from the header file since this is not a hot function and
doesn't need to be inlined everywhere. Added '@' as an ambiguous boundary character.
* editing/htmlediting.h:
(WebCore::isAmbiguousBoundaryCharacter): Moved to the cpp file.

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

4 years agotests fail if display sleeps while run-webkit-tests is running
aakash_jain@apple.com [Sat, 28 May 2016 18:27:53 +0000 (18:27 +0000)]
tests fail if display sleeps while run-webkit-tests is running
https://bugs.webkit.org/show_bug.cgi?id=153919

Reviewed by Darin Adler.

* DumpRenderTree/mac/LayoutTestHelper.m:
(addDisplaySleepAssertion): Use PreventUserIdleSystemSleep flag, same as set by caffeinate tool.

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

4 years ago[Next] Trailing commas in function parameters.
gskachkov@gmail.com [Sat, 28 May 2016 18:26:41 +0000 (18:26 +0000)]
[Next] Trailing commas in function parameters.
https://bugs.webkit.org/show_bug.cgi?id=158020

Reviewed by Keith Miller.

ESNext allow to add trailing commas in function parameters and function arguments.
Link to spec - https://jeffmo.github.io/es-trailing-function-commas
Example of using - (function (a, b,) { return a + b; })(1,2,);

* parser/Parser.cpp:
(JSC::Parser<LexerType>::parseFormalParameters):
(JSC::Parser<LexerType>::parseArguments):
* tests/stress/trailing-comma-in-function-paramters.js: Added.

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

4 years ago[JSC] op_new_arrow_func_exp is no longer necessary
utatane.tea@gmail.com [Sat, 28 May 2016 17:47:10 +0000 (17:47 +0000)]
[JSC] op_new_arrow_func_exp is no longer necessary
https://bugs.webkit.org/show_bug.cgi?id=158180

Reviewed by Saam Barati.

This patch removes op_new_arrow_func_exp bytecode since
what op_new_arrow_func_exp is doing is completely the same to op_new_func_exp.

* bytecode/BytecodeList.json:
* bytecode/BytecodeUseDef.h:
(JSC::computeUsesForBytecodeOffset): Deleted.
(JSC::computeDefsForBytecodeOffset): Deleted.
* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::dumpBytecode): Deleted.
* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::emitNewFunctionExpressionCommon):
* dfg/DFGByteCodeParser.cpp:
(JSC::DFG::ByteCodeParser::parseBlock):
* dfg/DFGCapabilities.cpp:
(JSC::DFG::capabilityLevel): Deleted.
* jit/JIT.cpp:
(JSC::JIT::privateCompileMainPass): Deleted.
* jit/JIT.h:
* jit/JITOpcodes.cpp:
(JSC::JIT::emitNewFuncExprCommon):
(JSC::JIT::emit_op_new_arrow_func_exp): Deleted.
* llint/LLIntSlowPaths.cpp:
(JSC::LLInt::LLINT_SLOW_PATH_DECL): Deleted.
* llint/LLIntSlowPaths.h:
* llint/LowLevelInterpreter.asm:

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

4 years agoFileSystem: use OS(WINDOWS) instead of PLATFORM(WIN).
annulen@yandex.ru [Sat, 28 May 2016 17:05:06 +0000 (17:05 +0000)]
FileSystem: use OS(WINDOWS) instead of PLATFORM(WIN).
https://bugs.webkit.org/show_bug.cgi?id=158168

Reviewed by Darin Adler.

No new tests needed.

* platform/FileSystem.cpp:
(WebCore::lastComponentOfPathIgnoringTrailingSlash):
(WebCore::MappedFileData::~MappedFileData):
(WebCore::MappedFileData::MappedFileData):
* platform/FileSystem.h: Removed unused PlatformFilePathSeparator
constant.

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

4 years agoUse COMPILER(MSVC) instead of PLATFORM(WIN) for MSVC-specific workaround
annulen@yandex.ru [Sat, 28 May 2016 16:55:38 +0000 (16:55 +0000)]
Use COMPILER(MSVC) instead of PLATFORM(WIN) for MSVC-specific workaround
https://bugs.webkit.org/show_bug.cgi?id=158169

Reviewed by NOBODY (OOPS!).

No new tests needed.

* platform/PlatformMouseEvent.h:
* platform/win/PlatformMouseEventWin.cpp: Moved operators'
implementations to PlatformMouseEvent.h

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

4 years agoModernize lambda captures in the network disk cache implementation
cdumez@apple.com [Sat, 28 May 2016 16:54:36 +0000 (16:54 +0000)]
Modernize lambda captures in the network disk cache implementation
https://bugs.webkit.org/show_bug.cgi?id=158179

Reviewed by Darin Adler.

Modernize lambda captures in the network disk cache implementation.

* NetworkProcess/cache/NetworkCache.cpp:
(WebKit::NetworkCache::Cache::retrieve):
(WebKit::NetworkCache::Cache::store):
(WebKit::NetworkCache::Cache::traverse):
* NetworkProcess/cache/NetworkCache.h:
* NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
(WebKit::NetworkCache::inputStreamReadReadyCallback):
(WebKit::NetworkCache::outputStreamWriteReadyCallback):
* NetworkProcess/cache/NetworkCacheStatistics.cpp:
(WebKit::NetworkCache::Statistics::initialize):
(WebKit::NetworkCache::Statistics::shrinkIfNeeded):
(WebKit::NetworkCache::Statistics::queryWasEverRequested):
* NetworkProcess/cache/NetworkCacheStatistics.h:
* NetworkProcess/cache/NetworkCacheStorage.cpp:
(WebKit::NetworkCache::Storage::updateFileModificationTime):
(WebKit::NetworkCache::Storage::clear):

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

4 years agoBuild fix for projects that include MainThread.h without including FastMalloc.h.
mitz@apple.com [Sat, 28 May 2016 16:33:00 +0000 (16:33 +0000)]
Build fix for projects that include MainThread.h without including FastMalloc.h.

* wtf/NoncopyableFunction.h: Include FastMalloc.h from here.

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

4 years agocallOnMainThread() should not copy captured lambda variables
cdumez@apple.com [Sat, 28 May 2016 05:51:42 +0000 (05:51 +0000)]
callOnMainThread() should not copy captured lambda variables
https://bugs.webkit.org/show_bug.cgi?id=158166

Reviewed by Brady Eidson.

Source/WebCore:

callOnMainThread() should not copy captured lambda variables. This
function is usually called cross-thread with a lambda and copying
the lambda (and its captured variables) can lead to thread-safety
issues.

This patch updates callOnMainThread() to take a NoncopyableFunction&&
in parameter instead of a std::function. The call sites of
callOnMainThread() have also been updated to use C++14's lambda
capture with initializer.

* Modules/indexeddb/IDBTransaction.cpp:
(WebCore::IDBTransaction::putOrAddOnServer):
* Modules/mediastream/MediaDevicesRequest.cpp:
(WebCore::MediaDevicesRequest::didCompletePermissionCheck):
(WebCore::MediaDevicesRequest::didCompleteTrackSourceInfoRequest):
* Modules/mediastream/MediaEndpointPeerConnection.cpp:
(WebCore::MediaEndpointPeerConnection::runTask):
* Modules/mediastream/MediaEndpointPeerConnection.h:
* Modules/mediastream/UserMediaRequest.cpp:
(WebCore::UserMediaRequest::constraintsValidated):
(WebCore::UserMediaRequest::userMediaAccessGranted):
* Modules/webaudio/AudioContext.cpp:
(WebCore::AudioContext::scheduleNodeDeletion):
(WebCore::AudioContext::isPlayingAudioDidChange):
* dom/Document.cpp:
(WebCore::Document::postTask):
(WebCore::Document::pendingTasksTimerFired): Deleted.
* dom/ScriptElement.cpp:
(WebCore::ScriptElement::requestScript):
* fileapi/AsyncFileStream.cpp:
(WebCore::callOnFileThread):
(WebCore::AsyncFileStream::~AsyncFileStream):
(WebCore::AsyncFileStream::perform):
* fileapi/AsyncFileStream.h:
* fileapi/ThreadableBlobRegistry.cpp:
(WebCore::ThreadableBlobRegistry::registerFileBlobURL):
(WebCore::ThreadableBlobRegistry::registerBlobURL):
(WebCore::ThreadableBlobRegistry::registerBlobURLForSlice):
(WebCore::ThreadableBlobRegistry::blobSize):
(WebCore::ThreadableBlobRegistry::unregisterBlobURL):
(WebCore::ThreadableBlobRegistry::registerBlobURLOptionallyFileBacked): Deleted.
* loader/icon/IconDatabase.cpp:
(WebCore::IconDatabase::dispatchDidImportIconURLForPageURLOnMainThread):
(WebCore::IconDatabase::dispatchDidImportIconDataForPageURLOnMainThread):
* page/ResourceUsageThread.cpp:
(WebCore::ResourceUsageThread::notifyObservers):
(WebCore::ResourceUsageThread::threadBody):
* page/ResourceUsageThread.h:
* page/scrolling/ScrollingThread.cpp:
(WebCore::ScrollingThread::dispatch):
(WebCore::ScrollingThread::dispatchBarrier):
(WebCore::ScrollingThread::dispatchFunctionsFromScrollingThread):
* page/scrolling/ScrollingThread.h:
* page/scrolling/ios/ScrollingTreeIOS.cpp:
(WebCore::ScrollingTreeIOS::invalidate):
(WebCore::ScrollingTreeIOS::scrollingTreeNodeDidScroll):
(WebCore::ScrollingTreeIOS::currentSnapPointIndicesDidChange):
(WebCore::ScrollingTreeIOS::createScrollingTreeNode): Deleted.
* page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
(WebCore::ScrollingTreeFrameScrollingNodeMac::releaseReferencesToScrollerImpsOnTheMainThread):
* platform/MemoryPressureHandler.cpp:
(WebCore::MemoryPressureHandler::releaseMemory):
* platform/audio/ios/MediaSessionManagerIOS.mm:
(-[WebMediaSessionHelper dealloc]):
(-[WebMediaSessionHelper startMonitoringAirPlayRoutes]):
(-[WebMediaSessionHelper stopMonitoringAirPlayRoutes]):
* platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
(WebCore::AudioSourceProviderAVFObjC::prepare):
* platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
(WebCore::MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification):
(WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification):
* platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
(-[WebCDMSessionAVFoundationObjCListener observeValueForKeyPath:ofObject:change:context:]):
* platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
(-[WebAVOutputDeviceMenuControllerHelper observeValueForKeyPath:ofObject:change:context:]):
* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
(WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer):
(-[WebCoreAVFMovieObserver legibleOutput:didOutputAttributedStrings:nativeSampleBuffers:forItemTime:]):
(-[WebCoreAVFMovieObserver outputSequenceWasFlushed:]):
(-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForLoadingOfRequestedResource:]):
(-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForResponseToAuthenticationChallenge:]):
(-[WebCoreAVFLoaderDelegate resourceLoader:didCancelLoadingRequest:]):
* platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
(WebCore::CMTimebaseEffectiveRateChangedCallback):
(WebCore::MediaPlayerPrivateMediaSourceAVFObjC::play):
(WebCore::MediaPlayerPrivateMediaSourceAVFObjC::pause):
* platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
* platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
(WebCore::MediaPlayerPrivateMediaStreamAVFObjC::scheduleDeferredTask):
* platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
(-[WebAVStreamDataParserListener streamDataParser:didParseStreamDataAsAsset:]):
(-[WebAVStreamDataParserListener streamDataParser:didParseStreamDataAsAsset:withDiscontinuity:]):
(-[WebAVStreamDataParserListener streamDataParser:didFailToParseStreamDataWithError:]):
(-[WebAVStreamDataParserListener streamDataParser:didProvideMediaData:forTrackID:mediaType:flags:]):
(-[WebAVStreamDataParserListener streamDataParser:didReachEndOfTrackWithTrackID:mediaType:]):
(-[WebAVStreamDataParserListener streamDataParser:didProvideContentKeyRequestInitializationData:forTrackID:]):
(-[WebAVSampleBufferErrorListener observeValueForKeyPath:ofObject:change:context:]):
(-[WebAVSampleBufferErrorListener layerFailedToDecode:]):
* platform/graphics/cg/GraphicsContextCG.cpp:
(WebCore::patternReleaseCallback):
* platform/graphics/cg/PatternCG.cpp:
(WebCore::patternReleaseCallback):
* platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
(WebCore::MediaPlayerPrivateMediaFoundation::endCreatedMediaSource):
(WebCore::MediaPlayerPrivateMediaFoundation::endGetEvent):
(WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::processInputNotify):
* platform/mediastream/MediaStreamPrivate.cpp:
(WebCore::MediaStreamPrivate::scheduleDeferredTask):
* platform/mediastream/MediaStreamPrivate.h:
* platform/mediastream/mac/AVMediaCaptureSource.h:
* platform/mediastream/mac/AVMediaCaptureSource.mm:
(WebCore::AVMediaCaptureSource::scheduleDeferredTask):
* platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
(WebCore::RealtimeMediaSourceCenterMac::getMediaStreamTrackSources):
* platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:
(WebCore::WebAudioSourceProviderAVFObjC::prepare):
* platform/mock/MockRealtimeMediaSourceCenter.cpp:
(WebCore::MockRealtimeMediaSourceCenter::getMediaStreamTrackSources):
* platform/network/BlobResourceHandle.cpp:
(WebCore::BlobResourceHandle::start):
(WebCore::BlobResourceHandle::notifyFinish):
* platform/network/DataURLDecoder.cpp:
(WebCore::DataURLDecoder::decode):
* platform/network/DataURLDecoder.h:
* platform/network/cocoa/WebCoreNSURLSession.mm:
(-[WebCoreNSURLSession dealloc]):
(-[WebCoreNSURLSessionDataTask cancel]):
(-[WebCoreNSURLSessionDataTask suspend]):
(-[WebCoreNSURLSessionDataTask resume]):
* platform/network/curl/CurlDownload.cpp:
(WebCore::CurlDownload::didReceiveHeader):
(WebCore::CurlDownload::didReceiveData): Deleted.

Source/WebKit:

callOnMainThread() should not copy captured lambda variables. This
function is usually called cross-thread with a lambda and copying
the lambda (and its captured variables) can lead to thread-safety
issues.

This patch updates callOnMainThread() to take a NoncopyableFunction&&
in parameter instead of a std::function. The call sites of
callOnMainThread() have also been updated to use C++14's lambda
capture with initializer.

* Storage/StorageAreaSync.cpp:
(WebCore::StorageAreaSync::deleteEmptyDatabase):
* Storage/StorageSyncManager.cpp:
(WebCore::StorageSyncManager::dispatch):
* Storage/StorageSyncManager.h:
* Storage/StorageThread.cpp:
(WebCore::StorageThread::dispatch):
(WebCore::StorageThread::terminate):
(WebCore::StorageThread::releaseFastMallocFreeMemoryInAllThreads):
* Storage/StorageThread.h:
* Storage/StorageTracker.cpp:
(WebCore::StorageTracker::syncFileSystemAndTrackerDatabase):
(WebCore::StorageTracker::setOriginDetails):

Source/WebKit/mac:

callOnMainThread() should not copy captured lambda variables. This
function is usually called cross-thread with a lambda and copying
the lambda (and its captured variables) can lead to thread-safety
issues.

This patch updates callOnMainThread() to take a NoncopyableFunction&&
in parameter instead of a std::function. The call sites of
callOnMainThread() have also been updated to use C++14's lambda
capture with initializer.

* Storage/WebDatabaseManagerClient.mm:
(DidModifyOriginData::dispatchToMainThread):
(DidModifyOriginData::DidModifyOriginData): Deleted.
* Storage/WebStorageTrackerClient.mm:
(WebStorageTrackerClient::dispatchDidModifyOrigin):

Source/WTF:

callOnMainThread() should not copy captured lambda variables. This
function is usually called cross-thread with a lambda and copying
the lambda (and its captured variables) can lead to thread-safety
issues.

This patch updates callOnMainThread() to take a NoncopyableFunction&&
in parameter instead of a std::function. The call sites of
callOnMainThread() have also been updated to use C++14's lambda
capture with initializer.

* WTF.xcodeproj/project.pbxproj:

* wtf/FunctionDispatcher.h:
* wtf/NoncopyableFunction.h:
- Moved NoncopyableFunction from FunctionDispatcher.h to
  NoncopyableFunction.h.
- Add a new operator=(nullptr_t) operator to NoncopyableFunction to
  match std::function, as one of the call sites needed it.

* wtf/MainThread.cpp:
(WTF::functionQueue):
(WTF::dispatchFunctionsFromMainThread):
(WTF::callOnMainThread):
* wtf/MainThread.h:

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

4 years ago[JSC] implement async functions proposal
caitp@igalia.com [Sat, 28 May 2016 05:44:10 +0000 (05:44 +0000)]
[JSC] implement async functions proposal
https://bugs.webkit.org/show_bug.cgi?id=156147

Reviewed by Yusuke Suzuki.

Source/JavaScriptCore:

Adds support for `async` functions, proposed in https://tc39.github.io/ecmascript-asyncawait/.

On the front-end side, "await" becomes a contextual keyword when used within an async function,
which triggers parsing an AwaitExpression. "await" becomes an illegal identifier name within
these contexts. The bytecode generated from an "await" expression is identical to that generated
in a "yield" expression in a Generator, as AsyncFunction reuses generator's state machine mechanism.

There are numerous syntactic forms for language features, including a variation on ArrowFunctions,
requiring the keyword `async` to precede ArrowFormalParameters, and similarly, MethodDefinitions,
which are ordinary MethodDefinitions preceded by the keyword `async`.

An async function desugars to the following:

```
async function asyncFn() {
}

becomes:

function asyncFn() {
    let generator = {
        @generatorNext: function(@generator, @generatorState, @generatorValue, @generatorResumeMode) {
          // generator state machine stuff here
        },
        @generatorState: 0,
        @generatorThis: this,
        @generatorFrame: null
    };
    return @asyncFunctionResume(generator, undefined, GeneratorResumeMode::NormalMode);
}
```

`@asyncFunctionResume()` is similar to `@generatorResume`, with the exception that it will wrap the
result of invoking `@generatorNext()` in a Promise, and will avoid allocating an iterator result
object.

If the generator has yielded (an AwaitExpression has occurred), resumption will occur automatically
once the await-expression operand is finished, via Promise chaining.

* API/JSScriptRef.cpp:
(parseScript):
* CMakeLists.txt:
* DerivedSources.make:
* JavaScriptCore.xcodeproj/project.pbxproj:
* builtins/AsyncFunctionPrototype.js: Added.
(asyncFunctionResume):
* builtins/BuiltinExecutables.cpp:
(JSC::BuiltinExecutables::createExecutable):
* bytecode/BytecodeList.json:
* bytecode/BytecodeUseDef.h:
(JSC::computeUsesForBytecodeOffset):
(JSC::computeDefsForBytecodeOffset):
* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::dumpBytecode):
(JSC::CodeBlock::finishCreation):
* bytecode/UnlinkedCodeBlock.h:
(JSC::UnlinkedCodeBlock::isArrowFunction):
(JSC::UnlinkedCodeBlock::isOrdinaryArrowFunction):
(JSC::UnlinkedCodeBlock::isAsyncArrowFunction):
* bytecode/UnlinkedFunctionExecutable.cpp:
(JSC::generateUnlinkedFunctionCodeBlock):
(JSC::UnlinkedFunctionExecutable::fromGlobalCode):
(JSC::UnlinkedFunctionExecutable::unlinkedCodeBlockFor):
* bytecode/UnlinkedFunctionExecutable.h:
* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::BytecodeGenerator):
(JSC::BytecodeGenerator::emitNewFunctionExpressionCommon):
(JSC::BytecodeGenerator::emitNewArrowFunctionExpression):
(JSC::BytecodeGenerator::emitNewMethodDefinition):
(JSC::BytecodeGenerator::emitNewFunction):
(JSC::BytecodeGenerator::emitLoadArrowFunctionLexicalEnvironment):
* bytecompiler/BytecodeGenerator.h:
(JSC::BytecodeGenerator::makeFunction):
* bytecompiler/NodesCodegen.cpp:
(JSC::FunctionNode::emitBytecode):
* inspector/agents/InspectorRuntimeAgent.cpp:
(Inspector::InspectorRuntimeAgent::parse):
* jit/JIT.cpp:
(JSC::JIT::privateCompileMainPass):
* jit/JIT.h:
* jit/JITOpcodes.cpp:
(JSC::JIT::emitNewFuncCommon):
(JSC::JIT::emit_op_new_async_func):
(JSC::JIT::emitNewFuncExprCommon):
(JSC::JIT::emit_op_new_async_func_exp):
* jit/JITOperations.cpp:
* jit/JITOperations.h:
* jsc.cpp:
(runInteractive):
(printUsageStatement):
* llint/LLIntSlowPaths.cpp:
(JSC::LLInt::LLINT_SLOW_PATH_DECL):
* llint/LLIntSlowPaths.h:
* llint/LowLevelInterpreter.asm:
* parser/ASTBuilder.h:
(JSC::ASTBuilder::createAsyncFunctionBody):
* parser/Keywords.table:
* parser/Parser.cpp:
(JSC::Parser<LexerType>::Parser):
(JSC::Parser<LexerType>::parseInner):
(JSC::Parser<LexerType>::isArrowFunctionParameters):
(JSC::Parser<LexerType>::parseAsyncFunctionSourceElements):
(JSC::Parser<LexerType>::parseStatementListItem):
(JSC::Parser<LexerType>::parseVariableDeclarationList):
(JSC::Parser<LexerType>::parseDestructuringPattern):
(JSC::Parser<LexerType>::parseStatement):
(JSC::Parser<LexerType>::parseFunctionDeclarationStatement):
(JSC::Parser<LexerType>::parseFormalParameters):
(JSC::stringForFunctionMode):
(JSC::Parser<LexerType>::parseFunctionParameters):
(JSC::Parser<LexerType>::parseFunctionInfo):
(JSC::Parser<LexerType>::parseAsyncFunctionDeclaration):
(JSC::Parser<LexerType>::parseClass):
(JSC::Parser<LexerType>::parseExpressionOrLabelStatement):
(JSC::Parser<LexerType>::parseImportClauseItem):
(JSC::Parser<LexerType>::parseImportDeclaration):
(JSC::Parser<LexerType>::parseExportDeclaration):
(JSC::Parser<LexerType>::parseAssignmentExpression):
(JSC::Parser<LexerType>::parseAwaitExpression):
(JSC::Parser<LexerType>::parseProperty):
(JSC::Parser<LexerType>::parsePropertyMethod):
(JSC::Parser<LexerType>::parseAsyncFunctionExpression):
(JSC::Parser<LexerType>::parsePrimaryExpression):
(JSC::Parser<LexerType>::parseMemberExpression):
(JSC::Parser<LexerType>::parseArrowFunctionExpression):
(JSC::Parser<LexerType>::parseUnaryExpression):
(JSC::Parser<LexerType>::printUnexpectedTokenText):
* parser/Parser.h:
(JSC::isIdentifierOrKeyword):
(JSC::Scope::Scope):
(JSC::Scope::setSourceParseMode):
(JSC::Scope::isAsyncFunction):
(JSC::Scope::isAsyncFunctionBoundary):
(JSC::Scope::isModule):
(JSC::Scope::setIsFunction):
(JSC::Scope::setIsAsyncArrowFunction):
(JSC::Scope::setIsAsyncFunction):
(JSC::Scope::setIsAsyncFunctionBody):
(JSC::Scope::setIsAsyncArrowFunctionBody):
(JSC::Parser::ExpressionErrorClassifier::forceClassifyExpressionError):
(JSC::Parser::ExpressionErrorClassifier::propagateExpressionErrorClass):
(JSC::Parser::ExpressionErrorClassifier::indicatesPossibleAsyncArrowFunction):
(JSC::Parser::forceClassifyExpressionError):
(JSC::Parser::declarationTypeToVariableKind):
(JSC::Parser::closestParentOrdinaryFunctionNonLexicalScope):
(JSC::Parser::pushScope):
(JSC::Parser::popScopeInternal):
(JSC::Parser::matchSpecIdentifier):
(JSC::Parser::isDisallowedIdentifierAwait):
(JSC::Parser::disallowedIdentifierAwaitReason):
(JSC::parse):
* parser/ParserModes.h:
(JSC::isFunctionParseMode):
(JSC::isAsyncFunctionParseMode):
(JSC::isAsyncArrowFunctionParseMode):
(JSC::isAsyncFunctionWrapperParseMode):
(JSC::isAsyncFunctionBodyParseMode):
(JSC::isModuleParseMode):
(JSC::isProgramParseMode):
(JSC::constructAbilityForParseMode):
* parser/ParserTokens.h:
* parser/SourceCodeKey.h:
(JSC::SourceCodeKey::SourceCodeKey):
(JSC::SourceCodeKey::runtimeFlags):
(JSC::SourceCodeKey::operator==):
* parser/SyntaxChecker.h:
(JSC::SyntaxChecker::createAsyncFunctionBody):
* runtime/AsyncFunctionConstructor.cpp: Added.
(JSC::AsyncFunctionConstructor::AsyncFunctionConstructor):
(JSC::AsyncFunctionConstructor::finishCreation):
(JSC::callAsyncFunctionConstructor):
(JSC::constructAsyncFunctionConstructor):
(JSC::AsyncFunctionConstructor::getCallData):
(JSC::AsyncFunctionConstructor::getConstructData):
* runtime/AsyncFunctionConstructor.h: Added.
(JSC::AsyncFunctionConstructor::create):
(JSC::AsyncFunctionConstructor::createStructure):
* runtime/AsyncFunctionPrototype.cpp: Added.
(JSC::AsyncFunctionPrototype::AsyncFunctionPrototype):
(JSC::AsyncFunctionPrototype::finishCreation):
* runtime/AsyncFunctionPrototype.h: Added.
(JSC::AsyncFunctionPrototype::create):
(JSC::AsyncFunctionPrototype::createStructure):
* runtime/CodeCache.cpp:
(JSC::CodeCache::getGlobalCodeBlock):
(JSC::CodeCache::getProgramCodeBlock):
(JSC::CodeCache::getEvalCodeBlock):
(JSC::CodeCache::getModuleProgramCodeBlock):
(JSC::CodeCache::getFunctionExecutableFromGlobalCode):
* runtime/CodeCache.h:
* runtime/CommonIdentifiers.h:
* runtime/Completion.cpp:
(JSC::checkSyntax):
(JSC::checkModuleSyntax):
* runtime/Completion.h:
* runtime/Executable.cpp:
(JSC::ScriptExecutable::newCodeBlockFor):
(JSC::ProgramExecutable::checkSyntax):
* runtime/Executable.h:
* runtime/FunctionConstructor.cpp:
(JSC::constructFunctionSkippingEvalEnabledCheck):
* runtime/FunctionConstructor.h:
* runtime/JSAsyncFunction.cpp: Added.
(JSC::JSAsyncFunction::JSAsyncFunction):
(JSC::JSAsyncFunction::createImpl):
(JSC::JSAsyncFunction::create):
(JSC::JSAsyncFunction::createWithInvalidatedReallocationWatchpoint):
* runtime/JSAsyncFunction.h: Added.
(JSC::JSAsyncFunction::allocationSize):
(JSC::JSAsyncFunction::createStructure):
* runtime/JSFunction.cpp:
(JSC::JSFunction::getOwnPropertySlot):
* runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::init):
(JSC::JSGlobalObject::createProgramCodeBlock):
(JSC::JSGlobalObject::createEvalCodeBlock):
(JSC::JSGlobalObject::createModuleProgramCodeBlock):
* runtime/JSGlobalObject.h:
(JSC::JSGlobalObject::asyncFunctionPrototype):
(JSC::JSGlobalObject::asyncFunctionStructure):
* runtime/ModuleLoaderObject.cpp:
(JSC::moduleLoaderObjectParseModule):
* runtime/RuntimeFlags.h:
(JSC::RuntimeFlags::operator==):
(JSC::RuntimeFlags::operator!=):
* tests/stress/async-await-basic.js: Added.
(shouldBe):
(shouldBeAsync):
(shouldThrow):
(shouldThrowAsync):
(let.AsyncFunction.async):
(async.asyncFunctionForProto):
(Object.getPrototypeOf.async):
(Object.getPrototypeOf.async.method):
(async):
(async.method):
(async.asyncNonConstructorDecl):
(shouldThrow.new.async):
(shouldThrow.new.async.nonConstructor):
(async.asyncDecl):
(async.f):
(MyError):
(async.asyncDeclThrower):
(shouldThrowAsync.async):
(resolveLater):
(rejectLater):
(async.resumeAfterNormal):
(O.async.resumeAfterNormal):
(resumeAfterNormalArrow.async):
(async.resumeAfterThrow):
(O.async.resumeAfterThrow):
(resumeAfterThrowArrow.async):
(catch):
* tests/stress/async-await-module-reserved-word.js: Added.
(shouldThrow):
(SyntaxError.Canstring_appeared_hereawait.checkModuleSyntaxError.String.raw.await):
(checkModuleSyntaxError.String.raw.await):
(checkModuleSyntaxError.String.raw.async.await):
(SyntaxError.Cannot.declare.named):
* tests/stress/async-await-mozilla.js: Added.
(shouldBe):
(shouldBeAsync):
(shouldThrow):
(shouldThrowAsync):
(assert):
(shouldThrowSyntaxError):
(mozSemantics.async.empty):
(mozSemantics.async.simpleReturn):
(mozSemantics.async.simpleAwait):
(mozSemantics.async.simpleAwaitAsync):
(mozSemantics.async.returnOtherAsync):
(mozSemantics.async.simpleThrower):
(mozSemantics.async.delegatedThrower):
(mozSemantics.async.tryCatch):
(mozSemantics.async.tryCatchThrow):
(mozSemantics.async.wellFinally):
(mozSemantics.async.finallyMayFail):
(mozSemantics.async.embedded.async.inner):
(mozSemantics.async.embedded):
(mozSemantics.async.fib):
(mozSemantics.async.isOdd.async.isEven):
(mozSemantics.async.isOdd):
(mozSemantics.hardcoreFib.async.fib2):
(mozSemantics.namedAsyncExpr.async.simple):
(mozSemantics.async.executionOrder.async.first):
(mozSemantics.async.executionOrder.async.second):
(mozSemantics.async.executionOrder.async.third):
(mozSemantics.async.executionOrder):
(mozSemantics.async.miscellaneous):
(mozSemantics.thrower):
(mozSemantics.async.defaultArgs):
(mozSemantics.shouldThrow):
(mozSemantics):
(mozMethods.X):
(mozMethods.X.prototype.async.getValue):
(mozMethods.X.prototype.setValue):
(mozMethods.X.prototype.async.increment):
(mozMethods.X.prototype.async.getBaseClassName):
(mozMethods.X.async.getStaticValue):
(mozMethods.Y.prototype.async.getBaseClassName):
(mozMethods.Y):
(mozFunctionNameInferrence.async.test):
(mozSyntaxErrors):
* tests/stress/async-await-reserved-word.js: Added.
(assert):
(shouldThrowSyntaxError):
(AsyncFunction.async):
* tests/stress/async_arrow_functions_lexical_arguments_binding.js: Added.
(shouldBe):
(shouldBeAsync):
(shouldThrowAsync):
(noArgumentsArrow2.async):
* tests/stress/async_arrow_functions_lexical_new.target_binding.js: Added.
(shouldBe):
(shouldBeAsync):
(shouldThrowAsync):
(C1):
(C2):
(shouldThrowAsync.async):
* tests/stress/async_arrow_functions_lexical_super_binding.js: Added.
(shouldBe):
(shouldBeAsync):
(BaseClass.prototype.baseClassValue):
(BaseClass):
(ChildClass.prototype.asyncSuperProp):
(ChildClass.prototype.asyncSuperProp2):
(ChildClass):
* tests/stress/async_arrow_functions_lexical_this_binding.js: Added.
(shouldBe):
(shouldBeAsync):
(d.y):

Source/WebKit/mac:

* WebView/WebPreferencesPrivate.h:

Source/WebKit/win:

* Interfaces/IWebPreferencesPrivate.idl:

Source/WebKit2:

* UIProcess/API/C/WKPreferencesRefPrivate.h:
* UIProcess/API/Cocoa/WKPreferencesPrivate.h:

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

4 years agoImprove lambda capture in NetworkCache::Storage::synchronize()
cdumez@apple.com [Sat, 28 May 2016 04:48:49 +0000 (04:48 +0000)]
Improve lambda capture in NetworkCache::Storage::synchronize()
https://bugs.webkit.org/show_bug.cgi?id=158176

Reviewed by Brady Eidson.

Improve lambda capture in NetworkCache::Storage::synchronize(). We can
now capture the std::unique_ptr<> variables directly thanks to:
1. C++14's support for initializer's in lambda captures
2. RunLoop::dispatch() now takes a NoncopyableFunction in instead of
   a std::function, allowing us to capture non-copyable variables.

* NetworkProcess/cache/NetworkCacheStorage.cpp:
(WebKit::NetworkCache::Storage::synchronize):

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

4 years agoUnreviewed, build fix for JSCOnly port.
utatane.tea@gmail.com [Sat, 28 May 2016 04:18:57 +0000 (04:18 +0000)]
Unreviewed, build fix for JSCOnly port.
https://bugs.webkit.org/show_bug.cgi?id=158111

Use NoncopyableFunction instead of std::function<>.

* wtf/generic/RunLoopGeneric.cpp:
(WTF::RunLoop::TimerBase::ScheduledTask::create):
(WTF::RunLoop::TimerBase::ScheduledTask::ScheduledTask):

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

4 years agoREGRESSION (r190574): Swipe snapshots are always black on iPhone 5
timothy_horton@apple.com [Sat, 28 May 2016 01:22:50 +0000 (01:22 +0000)]
REGRESSION (r190574): Swipe snapshots are always black on iPhone 5
https://bugs.webkit.org/show_bug.cgi?id=158171
<rdar://problem/24639709>

Reviewed by Beth Dakin.

* platform/graphics/cocoa/IOSurface.mm:
(optionsForBiplanarSurface):
(optionsFor32BitSurface):
(IOSurface::IOSurface):
(IOSurface::format):
We are supposed to be using bi-planar 422f, not yuvf. They're the same
size, but different formats, and 422f is supported in more places.

Clean up the IOSurface constructor so we don't have a switch inside an if
with random ASSERT_NOT_REACHED, making helper functions to build the
options dictionary for arbitrary-size biplanar and 32-bit single-planar
surfaces.

I don't know how to write a test because IOSurface is not supported
in the simulator.

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