Remote Layer Tree: Apply layer changes to LayerTypeCustom layers to the custom layer in the Web process, not to the CALayerHost
https://bugs.webkit.org/show_bug.cgi?id=123818

Reviewed by Anders Carlsson.

Changes to the properties of a PlatformCALayer of type LayerTypeCustom are intended
to affect the custom CALayer; however, we were bundling them up with the transaction
and applying them to the CALayerHost, leading to important properties being lost.

Instead, apply them to the Web-process-side CALayer when building the transaction.

* Shared/mac/RemoteLayerTreePropertyApplier.h: Added.
* Shared/mac/RemoteLayerTreePropertyApplier.mm: Added.
(WebKit::cgColorFromColor):
(WebKit::toCAFilterType):
(WebKit::RemoteLayerTreePropertyApplier::applyPropertiesToLayer):
(WebKit::RemoteLayerTreePropertyApplier::disableActionsForLayer):
Move code to apply LayerProperties to a CALayer from RemoteLayerTreeHost.
Move code to disable actions on a CALayer from RemoteLayerTreeHost.

* UIProcess/mac/RemoteLayerTreeHost.mm:
(WebKit::RemoteLayerTreeHost::commit):
(WebKit::RemoteLayerTreeHost::createLayer):
Use RemoteLayerTreePropertyApplier.
Hand it a map of LayerID->CALayer so that it can look up related layers
for children and mask layers.

* WebKit2.xcodeproj/project.pbxproj:
Add RemoteLayerTreePropertyApplier.{h,mm}

* WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
(PlatformCALayerRemote::recursiveBuildTransaction):
Upon commit, apply changes to LayerTypeCustom layers to the platform layer.
Setting children or maskLayer won't work, since we don't know about other raw CALayers.
This is OK, since nothing uses those properties on custom layers.

* WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.cpp:
(PlatformCALayerRemoteCustom::PlatformCALayerRemoteCustom):
Disable actions on the root custom layer.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158691 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Fix build for architectures with 4 argument registers (broken since r158681).
https://bugs.webkit.org/show_bug.cgi?id=123826

Patch by Julien Brianceau <jbriance@cisco.com> on 2013-11-05
Reviewed by Michael Saboff.

* jit/CCallHelpers.h:
(JSC::CCallHelpers::setupArgumentsWithExecState):
(JSC::CCallHelpers::setupArguments):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158692 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Remove unused RenderWidget::notifyWidget().

Rubber-stamped by Anders Carlsson.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158693 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Fix Mountain Lion Debug bot after r158689

Unreviewed.

It looks like WebGeolocationManagerProxy::stopUpdating() and WebGeolocationManagerProxy::processDidClose()
are racing in some cases, causing the assertion to fail.

That case is handled properly in the last if() branch of WebGeolocationManagerProxy::removeRequester().
This patch remove the overzealous assertion.

* UIProcess/WebGeolocationManagerProxy.cpp:
(WebKit::WebGeolocationManagerProxy::removeRequester):


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158694 268f45cc-cd09-0410-ab3c-d52691b4dbfc
ObjCCallbackFunctionImpl's NSInvocation shouldn't retain its target or arguments
https://bugs.webkit.org/show_bug.cgi?id=123822

Reviewed by Geoffrey Garen.

Using -retainArguments on ObjCCallbackFunctionImpl's NSInvocation leads to memory leaks.
We should handle retaining/releasing the target ourselves, and we should never retain the arguments.

* API/ObjCCallbackFunction.mm:
(JSC::ObjCCallbackFunctionImpl::~ObjCCallbackFunctionImpl):
(JSC::ObjCCallbackFunctionImpl::name):
(objCCallbackFunctionForInvocation):
(objCCallbackFunctionForMethod):
(objCCallbackFunctionForBlock):


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158695 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Add support for decoding NSStrings
https://bugs.webkit.org/show_bug.cgi?id=123829

Reviewed by Andreas Kling.

* Shared/API/Cocoa/WKRemoteObjectCoder.mm:
(encodeObject):
(-[WKRemoteObjectDecoder allowsKeyedCoding]):
Always return YES.

(-[WKRemoteObjectDecoder containsValueForKey:]):
Look up the key in the current dictionary.

(-[WKRemoteObjectDecoder decodeBytesForKey:returnedLength:]):
Try to get the WebData object and return its data + size.

(-[WKRemoteObjectDecoder requiresSecureCoding]):
Return YES.

(checkIfClassIsAllowed):
Check if the class or any of its superclasses are are allowed.

(validateClass):
Call checkIfClassIsAllowed and validate that the class conforms to NSSecureCoding.

(decodeObject):
Get the class name, verify that the class exists and is allowed.
Allocate and initialize an object using initWithCoder:.

(-[WKRemoteObjectDecoder decodeObjectOfClasses:forKey:]):
Set the allowed classes, look up the object in _currentDictionary and call decodeObject.

(-[WKRemoteObjectDecoder allowedClasses]):
Return _allowedClasses.

* Shared/API/Cocoa/WKRemoteObjectRegistry.mm:
(-[WKRemoteObjectRegistry _sendInvocation:interface:]):
Declare interfaceIdentifier as a constant.

(-[WKRemoteObjectRegistry _invokeMessageWithBody:]):
Decode the interface identifier.

* Shared/ImmutableDictionary.h:
(WebKit::ImmutableDictionary::get):
(WebKit::ImmutableDictionary::size):
(WebKit::ImmutableDictionary::map):
Make member functions const.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158696 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Full width semicolon is wrong in vertical text.
https://bugs.webkit.org/show_bug.cgi?id=123814
<rdar://problem/15312541>

Reviewed by Benjamin Poulain.

Source/WebCore: 

The full width semicolon should always be upright.
Adding it to the list of characters that should
ignore rotation.

* platform/graphics/FontGlyphs.cpp:
(WebCore::shouldIgnoreRotation):

LayoutTests: 

Extended the existing test to include the full width
semicolon.

* platform/mac/fast/text/vertical-no-sideways.html:
* platform/mac/platform/mac/fast/text/vertical-no-sideways-expected.txt:
* platform/mac-mountainlion/platform/mac/fast/text/vertical-no-sideways-expected.txt



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158697 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Factor index cache for NodeLists and HTMLCollections to a class
https://bugs.webkit.org/show_bug.cgi?id=123823

Reviewed by Ryosuke Niwa.

Implement index cache class that can used by NodeLists and HTMLCollections that currently
each have implementations of their own.
        
This patch also implements ChildNodeList and LiveNodeList using CollectionIndexCache.
HTMLCollection is will be transitioned later.

* GNUmakefile.list.am:
* WebCore.vcxproj/WebCore.vcxproj:
* WebCore.xcodeproj/project.pbxproj:
* dom/ChildNodeList.cpp:
(WebCore::ChildNodeList::ChildNodeList):
(WebCore::ChildNodeList::length):
(WebCore::ChildNodeList::item):
        
    The client calls to cache to for indexed and size access.

(WebCore::ChildNodeList::collectionFirst):
(WebCore::ChildNodeList::collectionLast):
(WebCore::ChildNodeList::collectionTraverseForward):
(WebCore::ChildNodeList::collectionTraverseBackward):
        
    Cache calls back to these as needed to do the actual traversal.

(WebCore::ChildNodeList::invalidateCache):
* dom/ChildNodeList.h:
* dom/CollectionIndexCache.h: Added.
        
    Templated cache class itself.

(WebCore::::CollectionIndexCache):
(WebCore::::nodeCount):
(WebCore::::nodeBeforeCached):
(WebCore::::nodeAfterCached):
(WebCore::::nodeAt):
(WebCore::::invalidate):
* dom/LiveNodeList.cpp:
(WebCore::firstMatchingElement):
(WebCore::nextMatchingElement):
(WebCore::traverseMatchingElementsForward):
(WebCore::LiveNodeList::collectionFirst):
(WebCore::LiveNodeList::collectionLast):
(WebCore::LiveNodeList::collectionTraverseForward):
(WebCore::LiveNodeList::collectionTraverseBackward):
(WebCore::LiveNodeList::length):
(WebCore::LiveNodeList::item):
(WebCore::LiveNodeList::invalidateCache):
* dom/LiveNodeList.h:
(WebCore::LiveNodeList::LiveNodeList):



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158698 268f45cc-cd09-0410-ab3c-d52691b4dbfc
WKRemoteObjectDecoder should know which interface it's decoding for
https://bugs.webkit.org/show_bug.cgi?id=123833

Reviewed by Andreas Kling.

Move the interface identifier out into the root object body dictionary and make
the encoded invocation a sibling of it. That way we can look up the interface before
creating the decoder.

Also, manage exported objects and interfaces in a separate hash map.

* Shared/API/Cocoa/WKRemoteObjectCoder.h:
* Shared/API/Cocoa/WKRemoteObjectCoder.mm:
(-[WKRemoteObjectDecoder initWithInterface:rootObjectDictionary:WebKit::]):
(decodeInvocation):
(decodeObject):
* Shared/API/Cocoa/WKRemoteObjectRegistry.mm:
(-[WKRemoteObjectRegistry registerExportedObject:interface:]):
(-[WKRemoteObjectRegistry unregisterExportedObject:interface:]):
(-[WKRemoteObjectRegistry _sendInvocation:interface:]):
(-[WKRemoteObjectRegistry _handleMessageWithName:body:]):
(-[WKRemoteObjectRegistry _invokeMessageWithInterfaceIdentifier:encodedInvocation:]):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158699 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Begin work on decoding invocations
https://bugs.webkit.org/show_bug.cgi?id=123838

Reviewed by Dan Bernstein.

* Shared/API/Cocoa/WKRemoteObjectCoder.mm:
(encodeInvocation):
Declare the type string and selector keys as constants.

(encodeObject):
Make sure to encode the class name for NSInvocations as well.

(decodeInvocation):
Figure out the local and remove method signatures and make sure that they are equal.

* Shared/API/Cocoa/WKRemoteObjectInterface.mm:
(methodArgumentTypeEncodingForSelector):
Helper function that returns the type encoding for a given selector.

(-[WKRemoteObjectInterface _methodSignatureForSelector:]):
Helper function that returns a method signature for the method with the name referred to by selector.

* Shared/API/Cocoa/WKRemoteObjectInterfaceInternal.h: Added.
Add internal header.

* Shared/API/Cocoa/WKRemoteObjectRegistry.mm:
(-[WKRemoteObjectRegistry _invokeMessageWithInterfaceIdentifier:encodedInvocation:]):
Pass the right object to the WKRemoteObjectDecoder initializer and decode the invocation.

* WebKit2.xcodeproj/project.pbxproj:
Add internal header.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158700 268f45cc-cd09-0410-ab3c-d52691b4dbfc
[mac] PDFDocumentImage is too big if PDF has a crop box smaller than the media box
https://bugs.webkit.org/show_bug.cgi?id=123840
<rdar://problem/15308765>

Reviewed by Alexey Proskuryakov.

Test: fast/images/pdf-as-image-crop-box.html

* platform/graphics/cg/PDFDocumentImage.cpp:
(WebCore::PDFDocumentImage::size):
Use the crop box when determining the size of the image.

(WebCore::PDFDocumentImage::computeBoundsForCurrentPage):
* platform/graphics/cg/PDFDocumentImage.h:
* platform/graphics/mac/PDFDocumentImageMac.mm:
(WebCore::PDFDocumentImage::computeBoundsForCurrentPage):
Get rid of m_mediaBox, since we don't need it anymore.

(WebCore::PDFDocumentImage::drawPDFPage):
PDFKit does the translation by the crop box origin for us;
if we do it additionally, we'll be painting the wrong part of the image.
So, don't do the translation here.

* fast/images/pdf-as-image-crop-box-expected.html: Added.
* fast/images/pdf-as-image-crop-box.html: Added.
* fast/images/resources/green-1x1.pdf: Added.
* fast/images/resources/red-green-2x2-cropped-to-1x1.pdf: Added.
Add a test that ensures that PDFDocumentImage respects the PDF's crop box.
red-green-2x2-cropped-to-1x1 has a 2"x2" red square with a 1"x1" green
square centered in it, a media box of 2"x2", and a crop box of 1"x1"
offset by 0.5", 0.5". green-1x1 has a 1"x1" green square. The two images
should render the same if the crop box is being respected correctly.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158701 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Subresource loads should not prevent page throttling
https://bugs.webkit.org/show_bug.cgi?id=123757

Reviewed by Alexey Proskuryakov.

The page-is-loading test for inhibiting process supression is currently
too conservative, preventing supression of pages with infinitely loading
resources (commonly XHRs). Instead, just rely on the FrameLoader being
active (with hysteresis).

* loader/SubresourceLoader.cpp:
(WebCore::SubresourceLoader::init):
(WebCore::SubresourceLoader::checkForHTTPStatusCodeError):
(WebCore::SubresourceLoader::didFinishLoading):
(WebCore::SubresourceLoader::didFail):
(WebCore::SubresourceLoader::willCancel):
* loader/SubresourceLoader.h:
    - remove m_activityAssertion from SubresourceLoader.



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158702 268f45cc-cd09-0410-ab3c-d52691b4dbfc
text-decoration-skip: ink isn't tested with underlines that don't intersect the underlined text
https://bugs.webkit.org/show_bug.cgi?id=123839

Patch by Myles C. Maxfield <mmaxfield@apple.com> on 2013-11-05
Reviewed by Simon Fraser.

text-decoration-skip: ink uses a mask to determine where the underline can be drawn. Right now,
there is not a test that makes sure that the mask always gets applied to the location
where the underline will get drawn.

* fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-non-intersecting-underline-expected.html: Added.
* fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-non-intersecting-underline.html: Added.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158703 268f45cc-cd09-0410-ab3c-d52691b4dbfc
platformCALayerDeviceScaleFactor should be const
https://bugs.webkit.org/show_bug.cgi?id=123842

Reviewed by Simon Fraser.

* WebCore.exp.in:
* platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
(WebCore::LayerClient::platformCALayerDeviceScaleFactor):
* platform/graphics/ca/GraphicsLayerCA.cpp:
(WebCore::GraphicsLayerCA::platformCALayerDeviceScaleFactor):
* platform/graphics/ca/GraphicsLayerCA.h:
* platform/graphics/ca/PlatformCALayerClient.h:
* platform/graphics/ca/mac/TileController.h:
* platform/graphics/ca/mac/TileController.mm:
(WebCore::TileController::platformCALayerDeviceScaleFactor):
* platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
(WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerDeviceScaleFactor):
Constify PlatformCALayerClient::platformCALayerDeviceScaleFactor.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158704 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Unreviewed build fix on CMake based ports with GLES.

* CMakeLists.txt:
Added OPENGLES2_LIBRARIES and OPENGLES2_INCLUDE_DIR into the includes and
libraries list.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158705 268f45cc-cd09-0410-ab3c-d52691b4dbfc
FTL should support String character access operations
https://bugs.webkit.org/show_bug.cgi?id=123783

Reviewed by Oliver Hunt.
        
Implements:
        
- string.length
        
- string[index]

* ftl/FTLAbstractHeapRepository.h:
* ftl/FTLCapabilities.cpp:
(JSC::FTL::canCompile):
* ftl/FTLIntrinsicRepository.h:
* ftl/FTLLowerDFGToLLVM.cpp:
(JSC::FTL::LowerDFGToLLVM::compileGetIndexedPropertyStorage):
(JSC::FTL::LowerDFGToLLVM::compileGetArrayLength):
(JSC::FTL::LowerDFGToLLVM::compileGetByVal):



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158706 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Remove old unused code for hypothetical LLVM intrinsics
https://bugs.webkit.org/show_bug.cgi?id=123824

Reviewed by Oliver Hunt.

* ftl/FTLIntrinsicRepository.h:



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158707 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Web Inspector: Moving an element while in the DOMNodeRemoved handler will hide it in the inspector
https://bugs.webkit.org/show_bug.cgi?id=123516

Reviewed by Timothy Hatcher.

Source/WebCore:

InspectorInstrumentation::willRemoveDOMNode was actually calling both willRemoveDOMNodeImpl and
didRemoveDOMNodeImpl, making the DOMAgent unbind the element even if it was still part of the DOM.

Because of that the DOMAgent was sending two events:
1. When the element was about to be removed, just before JS "DOMNodeRemoved" was triggered.
2. When the element was actually removed.

Note that inspector's event #2 will not know about the node, as it just removed it from the
internal hashmap, so it will just use a nodeID == 0 for it.

This patch adds a separate call to InspectorInstrumentation::didRemoveDOMNode, just before the
element is about to be removed. The InspectorInstrumentation::willRemoveDOMNode call is now only used
by the DOMDebugger to trigger the DOM breakpoints in the Web Inspector. That feature is not exposed
in the new Inspector UI, but can be used/tested using the protocol directly.

Tests: inspector-protocol/dom-debugger/node-removed.html
       inspector-protocol/dom/dom-remove-events.html
       inspector-protocol/dom/remove-multiple-nodes.html

* dom/ContainerNode.cpp:
(WebCore::ContainerNode::removeBetween):
* inspector/InspectorInstrumentation.h:
(WebCore::InspectorInstrumentation::willRemoveDOMNode):
(WebCore::InspectorInstrumentation::didRemoveDOMNode):

LayoutTests:

Added tests to check that the DOM.childNodeRemoved inspector-protocol message is dispatched
correctly when DOM nodes are moved while inside the "DOMNodeRemoved" event handler.

* inspector-protocol/dom-debugger/node-removed-expected.txt: Added.
* inspector-protocol/dom-debugger/node-removed.html: Added. Checking that the DOMDebugger agent
is still sending the node-removed events.
* inspector-protocol/dom/dom-remove-events-expected.txt: Added.
* inspector-protocol/dom/dom-remove-events.html: Added. Test with a single DOM remove event.
* inspector-protocol/dom/remove-multiple-nodes-expected.txt: Added.
* inspector-protocol/dom/remove-multiple-nodes.html: Added. Test case when multiple children
are removed at once with parentNode.textContent = "String".


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158708 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Fix the 32-bit build.

* WebCore.exp.in:


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158709 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Add a test to obtain offsetWidth of expanded table cell
https://bugs.webkit.org/show_bug.cgi?id=123843

Reviewed by Tim Horton.

Merge the test from https://chromium.googlesource.com/chromium/blink/+/58a5fac292a5b3f79b00cdc71074fbf8be2ebc2b
so that we'll never introduce the regression they had.

* fast/table/table-cell-offset-width-expected.txt: Added.
* fast/table/table-cell-offset-width.html: Added.


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