1. 11 Nov, 2013 33 commits
    • timothy_horton@apple.com's avatar
      Remote Layer Tree: Implement Page Overlays · d808c0da
      timothy_horton@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=124165
      <rdar://problem/15199056>
      
      Reviewed by Anders Carlsson.
      
      Implement page overlays, very similar to how they work in TiledCoreAnimationDrawingArea,
      but manipulating the PlatformCALayer tree instead of the CALayer tree directly.
      
      * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
      * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
      (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded):
      (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved):
      (WebKit::RemoteLayerTreeContext::flushLayers):
      Add a list of out-of-tree GraphicsLayers which are flushed in addition
      to the page's GraphicsLayer tree, and functions to manipulate this list.
      
      * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
      Make RemoteLayerTreeDrawingArea a GraphicsLayerClient, so we can get callbacks
      from the GraphicsLayers that drive our page overlays.
      Override the relevant page overlay functions.
      Add storage for the root layer, view size, and a map of PageOverlay->GraphicsLayer.
      
      * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
      (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer):
      Store the root GraphicsLayer for later use.
      
      (WebKit::RemoteLayerTreeDrawingArea::updateGeometry):
      Update the size of the page overlays when the DrawingArea's geometry changes.
      
      (WebKit::RemoteLayerTreeDrawingArea::updatePreferences):
      Update the page overlay settings when necessary.
      
      (WebKit::RemoteLayerTreeDrawingArea::didInstallPageOverlay):
      Create a GraphicsLayer for our page overlay, set it up, and parent it.
      Inform the RemoteLayerTreeContext that it will need to flush this GraphicsLayer,
      since it's not a part of the page's GraphicsLayer tree.
      
      (WebKit::RemoteLayerTreeDrawingArea::didUninstallPageOverlay):
      Tear down our page overlay's GraphicsLayer.
      
      (WebKit::RemoteLayerTreeDrawingArea::setPageOverlayNeedsDisplay):
      (WebKit::RemoteLayerTreeDrawingArea::setPageOverlayOpacity):
      (WebKit::RemoteLayerTreeDrawingArea::paintContents):
      (WebKit::RemoteLayerTreeDrawingArea::deviceScaleFactor):
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159079 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      d808c0da
    • andersca@apple.com's avatar
      Add a FrameLoadState object and begin moving loading related members from WebFrameProxy · 016f6b4c
      andersca@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=124163
      
      Reviewed by Beth Dakin.
      
      * UIProcess/API/C/WKFrame.cpp:
      (WKFrameGetFrameLoadState):
      * UIProcess/FrameLoadState.cpp: Added.
      (WebKit::FrameLoadState::FrameLoadState):
      (WebKit::FrameLoadState::~FrameLoadState):
      * UIProcess/FrameLoadState.h: Added.
      * UIProcess/WebFrameProxy.cpp:
      (WebKit::WebFrameProxy::WebFrameProxy):
      (WebKit::WebFrameProxy::didStartProvisionalLoad):
      (WebKit::WebFrameProxy::didReceiveServerRedirectForProvisionalLoad):
      (WebKit::WebFrameProxy::didFailProvisionalLoad):
      (WebKit::WebFrameProxy::didCommitLoad):
      (WebKit::WebFrameProxy::didFinishLoad):
      (WebKit::WebFrameProxy::didFailLoad):
      (WebKit::WebFrameProxy::didSameDocumentNavigation):
      (WebKit::WebFrameProxy::setUnreachableURL):
      * UIProcess/WebFrameProxy.h:
      (WebKit::WebFrameProxy::frameLoadState):
      (WebKit::WebFrameProxy::loadState):
      (WebKit::WebFrameProxy::url):
      (WebKit::WebFrameProxy::provisionalURL):
      (WebKit::WebFrameProxy::unreachableURL):
      * UIProcess/WebPageProxy.cpp:
      (WebKit::WebPageProxy::WebPageProxy):
      (WebKit::WebPageProxy::activeURL):
      * UIProcess/WebPageProxy.h:
      (WebKit::WebPageProxy::loadStateAtProcessExit):
      * WebKit2.xcodeproj/project.pbxproj:
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159077 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      016f6b4c
    • commit-queue@webkit.org's avatar
      [Mac] Characters too close together in complex Arabic text · 52659d14
      commit-queue@webkit.org authored
      https://bugs.webkit.org/show_bug.cgi?id=124057
      
      Patch by Myles C. Maxfield <mmaxfield@apple.com> on 2013-11-11
      Reviewed by Darin Adler.
      
      Source/WebCore:
      
      We weren't updating our total width variable with run's initial
      advance information, leading to widths that were too narrow.
      
      In addition, while initial advances for runs that aren't the first
      run are accounted for by baking in the initial advances into the
      previous character's advance, the initial advance for the first run
      has to be accounted for in ComplexTextController::offsetForPosition.
      
      Test: fast/text/complex-grapheme-cluster-with-initial-advance.html
      Test: fast/text/selection-in-initial-advance-region.html
      
      * platform/graphics/mac/ComplexTextController.cpp:
      (WebCore::ComplexTextController::adjustGlyphsAndAdvances): Update
      total width variable
      (WebCore::ComplexTextController::offsetOfPosition): Account for
      the first run's initial advance.
      
      LayoutTests:
      
      complex-grapheme-cluster-with-initial-advance adds a span around a word in some
      complex Arabic text, and expects that the word spacing is the same as without the
      span.
      
      selection-in-initial-advance-region simulates a mouse drag across a complex text run
      with an initial advance. This makes sure that ComplexTextController::offsetForPosition
      doesn't crash when there is an initial advance.
      
      * fast/text/complex-grapheme-cluster-with-initial-advance-expected.html: Added.
      * fast/text/complex-grapheme-cluster-with-initial-advance.html: Added.
      * fast/text/selection-in-initial-advance-region-expected.txt: added
      * fast/text/selection-in-initial-advance-region.html: added
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159076 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      52659d14
    • commit-queue@webkit.org's avatar
      Remove #include from test input of the *Messages.in processing scripts. · fb17ee13
      commit-queue@webkit.org authored
      https://bugs.webkit.org/show_bug.cgi?id=123563
      
      Patch by Gergo Balogh <geryxyz@inf.u-szeged.hu> on 2013-11-11
      Reviewed by Darin Adler.
      
      * Scripts/webkit2/messages_unittest.py:
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159075 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      fb17ee13
    • fpizlo@apple.com's avatar
      Remove ConstantFoldingPhase's weirdo compile-time optimization · f0dac3b6
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=124169
      
      Reviewed by Mark Hahnenberg.
              
      It turns out that this compile-time optimization doesn't optimize compile times
      anymore. Kill it with fire.
      
      * dfg/DFGConstantFoldingPhase.cpp:
      (JSC::DFG::ConstantFoldingPhase::foldConstants):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159074 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      f0dac3b6
    • alex.christensen@flexsim.com's avatar
      Unreviewed build fix for Win64. · dcee015c
      alex.christensen@flexsim.com authored
      * WebKit.vcxproj/WebKitExportGenerator/WebKitExports.def.in:
      Fixed 64-bit linker symbols.
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159073 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      dcee015c
    • beidson@apple.com's avatar
      Make IDBBackingStoreTransaction be RefCounted · ce8b1f89
      beidson@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=124168
      
      Reviewed by Tim Horton.
      
      This is necessarily to safely add a fully asynchronous interface into the IDB mechanism.
      
      * Modules/indexeddb/IDBBackingStoreInterface.h:
      * Modules/indexeddb/IDBBackingStoreTransactionInterface.h:
      * Modules/indexeddb/IDBTransactionBackend.h:
      
      * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
      (WebCore::IDBBackingStoreLevelDB::createBackingStoreTransaction):
      * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
      * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.h:
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159072 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      ce8b1f89
    • antti@apple.com's avatar
      End of line whitespace should collapse with white-space:pre-wrap;... · aae30d1b
      antti@apple.com authored
      End of line whitespace should collapse with white-space:pre-wrap; overflow-wrap:break-word in all cases
      https://bugs.webkit.org/show_bug.cgi?id=124158
      
      Source/WebCore: 
      
      Reviewed by Dave Hyatt.
              
      If a word just fits the line but the following space overflows we fail to collapse whitespaces 
      at the end of the line. This happens because with break-word we end up taking word breaking
      code path that does not have pre-wrap whitespace handling.
              
      This patch makes the behavior consistent and also matches Firefox.
      
      Test: fast/text/break-word-pre-wrap.html
      
      * rendering/RenderBlockLineLayout.cpp:
      (WebCore::BreakingContext::handleText):
              
          Don't take the word break code path if we are pre-wrap and the current character is space.
          Instead proceed to break the line normally as this is a valid break position.
      
      LayoutTests: 
      
      Reviewed by Dave Hyatt.
              
      Added a specific test and updates the test results of some complex tests that demonstrate the same issue.
      
      * fast/text/break-word-pre-wrap-expected.html: Added.
      * fast/text/break-word-pre-wrap.html: Added.
      * platform/mac/fast/forms/basic-textareas-expected.png:
      * platform/mac/fast/forms/basic-textareas-expected.txt:
      * platform/mac/fast/forms/basic-textareas-quirks-expected.png:
      * platform/mac/fast/forms/basic-textareas-quirks-expected.txt:
      * platform/mac-mountainlion/fast/forms/basic-textareas-expected.txt:
      * platform/mac-mountainlion/fast/forms/basic-textareas-quirks-expected.txt:
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159071 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      aae30d1b
    • betravis@adobe.com's avatar
      Web Inspector: [CSS Shapes] Highlight shape-outside when its element is... · 3422dd42
      betravis@adobe.com authored
      Web Inspector: [CSS Shapes] Highlight shape-outside when its element is selected in the Web Inspector
      https://bugs.webkit.org/show_bug.cgi?id=124071
      
      Reviewed by Timothy Hatcher.
      
      Source/WebCore:
      
      Adding code to pass computed shape information (path and bounds) to the Inspector overlay
      canvas, and the code to display it. The code creates a path based on ShapeInfo's computed
      shape. The shape highlight draws whenever an element is highlighted, via selection in
      the Inspector elements view.
      
      Test: inspector-protocol/model/highlight-shape-outside.html
      
      * inspector/InspectorOverlay.cpp:
      (WebCore::localPointToRoot): Convert a local point to be relative to the root view.
      (WebCore::appendPathCommandAndPoints): Helper for building a single segment's worth
      of the overall path.
      (WebCore::appendPathSegment): Build a single segment's worth of the overall path.
      (WebCore::buildObjectForShapeOutside): Build an object to pass to the Inspector overlay
      that represents the shape.
      (WebCore::buildObjectForElementInfo): Call buildObjectForShapeOutside and pass the
      resulting object along.
      * inspector/InspectorOverlayPage.js:
      (pathCommand): Draw a single path command.
      (drawPath): Draw the overall path.
      (_drawShapeHighlight): Draw the highlight for the given shapeInfo.
      (drawNodeHighlight): Call _drawShapeHighlight.
      * rendering/shapes/PolygonShape.h:
      (WebCore::PolygonShape::polygon): Expose the underlying vertex information for a
      PolygonShape.
      * rendering/shapes/RasterShape.h:
      * rendering/shapes/RectangleShape.h:
      (WebCore::RectangleShape::logicalRx): Expose the logical radii for a shape.
      (WebCore::RectangleShape::logicalRy): Ditto.
      * rendering/shapes/Shape.h:
      * rendering/shapes/ShapeInfo.h:
      (WebCore::ShapeInfo::computedShapePhysicalBoundingBox): The physical bounds of a
      shape in renderer coordinates.
      (WebCore::ShapeInfo::shapeToRendererPoint): Convert shape coordinates to renderer
      coordinates.
      (WebCore::ShapeInfo::shapeToRendererSize): Ditto.
      (WebCore::ShapeInfo::ShapeInfo):
      
      LayoutTests:
      
      Test that the information passed to the Inspector overlay properly corresponds to the
      underlying shape. Retrieving the shape highlight information involves a series of
      steps and has been abstracted into shape-info-helper.js, which supplies
      Inspector.shapeOutsideInfo inside an Inspector test, and the ShapeInfoHelper.runShapesTest
      method to begin a test.
      
      * inspector-protocol/model/highlight-shape-outside-expected.txt: Added.
      * inspector-protocol/model/highlight-shape-outside.html: Added.
      * inspector-protocol/resources/shape-info-helper.js: Added.
      (window.ShapeInfoHelper): Exposes ShapeInfoHelper.runShapesTest.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159070 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      3422dd42
    • fpizlo@apple.com's avatar
      Make bytecode dumping use the right opcode names for inc/dec. · 9bca4b84
      fpizlo@apple.com authored
      Rubber stamped by Mark Hahnenberg.
      
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::dumpBytecode):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159069 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      9bca4b84
    • ap@apple.com's avatar
      Support WebCrypto KeyPair interface · b4086485
      ap@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=124161
      
      Reviewed by Geoffrey Garen.
      
      No new tests yet, will be tested once generateKey is implemented for any RSA algorithms.
      
      * CMakeLists.txt:
      * DerivedSources.make:
      * GNUmakefile.list.am:
      * WebCore.xcodeproj/project.pbxproj:
      Added new files.
      
      * bindings/js/JSDOMPromise.h: Support returning a key pair via a promise.
      
      * bindings/js/JSCryptoKeyPairCustom.cpp: Added.
      (WebCore::JSCryptoKeyPair::visitChildren):
      * crypto/CryptoKey.idl:
      CryptoKey wrapper is reachable through KeyPair, but it doesn't have (or need)
      a back pointer.
      
      * crypto/CryptoKeyPair.cpp: Added.
      (WebCore::CryptoKeyPair::CryptoKeyPair):
      (WebCore::CryptoKeyPair::~CryptoKeyPair):
      * crypto/CryptoKeyPair.h: Added.
      (WebCore::CryptoKeyPair::create):
      (WebCore::CryptoKeyPair::publicKey):
      (WebCore::CryptoKeyPair::privateKey):
      * crypto/CryptoKeyPair.idl: Added.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159068 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      b4086485
    • samuel_white@apple.com's avatar
      AX: support helpText() in DumpRenderTree · 44f0520a
      samuel_white@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=40194
      
      Reviewed by Chris Fleizach.
      
      Tools:
      
      Implemented stubbed helpText methods so we can move aria-help.html back to LayoutTests/accessibility.
      
      * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
      (AccessibilityUIElement::helpText):
      
      LayoutTests:
      
      Moving layout test back to its original location. Shouldn't be platform specific.
      
      * accessibility/aria-help.html: Renamed from LayoutTests/platform/mac/accessibility/aria-help.html.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159067 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      44f0520a
    • m.pakula@samsung.com's avatar
      Unreviewed EFL gardening · 07e0004c
      m.pakula@samsung.com authored
      Update test expectations after r158188.
      
      * platform/efl/css2.1/t0804-c5507-padn-r-00-c-ag-expected.png:
      * platform/efl/css2.1/t0804-c5507-padn-r-00-c-ag-expected.txt:
      * platform/efl/css2.1/t0804-c5509-padn-l-00-b-ag-expected.png:
      * platform/efl/css2.1/t0804-c5509-padn-l-00-b-ag-expected.txt:
      * platform/efl/css2.1/t0804-c5510-padn-00-b-ag-expected.txt:
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159066 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      07e0004c
    • commit-queue@webkit.org's avatar
      Fix build after r158967 · fafed391
      commit-queue@webkit.org authored
      https://bugs.webkit.org/show_bug.cgi?id=124160
      
      Patch by Nick Diego Yamane <nick.yamane@openbossa.org> on 2013-11-11
      Reviewed by Anders Carlsson.
      
      After r158967, gcc debug builds with "-Werror=type-limits" enabled
      fail. This patch fixes it.
      
      * rendering/shapes/RasterShape.h:
      (WebCore::RasterShapeIntervals::intervalsAt):
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159065 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      fafed391
    • fpizlo@apple.com's avatar
      DFG Int52 boxing code may clobber the source without telling anyone · 644e77b7
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=124137
      
      Source/JavaScriptCore: 
      
      Reviewed by Mark Hahnenberg.
      
      * dfg/DFGSpeculativeJIT64.cpp:
      (JSC::DFG::SpeculativeJIT::boxInt52): This is called in places where source is expected to be unchanged. We never call this expecting super-amazing codegen. So, preserve the source's value the dumb way (by recovering it mathematically).
      * jit/AssemblyHelpers.h: Document the invariant for boxInt52.
      * jsc.cpp:
      (GlobalObject::finishCreation): It's been super annoying that sometimes we say noInline() and sometimes we say neverInlineFunction(). The LayoutTests harnesses ensure that we have something called noInline(), but it's great to also ensure that the shell has it.
      
      LayoutTests: 
      
      Reviewed by Mark Hahnenberg.
              
      Write the test as a JSRegress test because we currently need a couple
      recompiles to get the bug. JSRegress tests are meant to be longer-running
      stress tests and they are usually run with different compilation thresholds, so
      that ensures that we will actually hit the relevant code path.
      
      * js/regress/int52-spill-expected.txt: Added.
      * js/regress/int52-spill.html: Added.
      * js/regress/script-tests/int52-spill.js: Added.
      (bar):
      (foo):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159064 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      644e77b7
    • oliver@apple.com's avatar
      ExtJS breaks with modern Array.prototype.values API due to use of with() · 5abfea03
      oliver@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=123440
      
      Reviewed by Beth Dakin.
      
      Source/JavaScriptCore:
      
      As with our attempt to make Arguments use the Array prototype, ExtJS has
      a weird dependency on not adding new APIs to core types.  In this case
      Array.prototype.values.  The fix is to remove it, and push for ES6 to drop
      the API.
      
      * runtime/ArrayPrototype.cpp:
      
      LayoutTests:
      
      Update tests for removal of Array.prototype.values, and add test to ensure that
      it's gone.
      
      * js/Object-getOwnPropertyNames-expected.txt:
      * js/array-iterators-expected.txt:
      * js/basic-for-of-expected.txt:
      * js/script-tests/Object-getOwnPropertyNames.js:
      * js/script-tests/array-iterators.js:
      * js/script-tests/basic-for-of.js:
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159063 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      5abfea03
    • oliver@apple.com's avatar
      Fix layout test · e171705f
      oliver@apple.com authored
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159062 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      e171705f
    • zandobersek@gmail.com's avatar
      Remove the OperationsNotDeletable attribute from most of the WebIDL interfaces · d5961560
      zandobersek@gmail.com authored
      https://bugs.webkit.org/show_bug.cgi?id=124151
      
      Reviewed by Geoffrey Garen.
      
      The OperationsNotDeletable attribute currently doesn't have any effect, but will soon enforce
      non-configurability of operations on the interface that uses the attribute. Non-configurability
      of operations is the default behavior at the moment, but will be changed to follow the WebIDL
      specification which requires that the operations are configurable (i.e. -- in JSC terms -- deletable).
      IE and Firefox already exhibit this behavior in the majority of cases, while Chrome and Opera don't.
      
      The attribute remains in use on the Location interface to mimic the Unforgeable attribute which
      also makes operations of an interface non-configurable. Unforgeable attribute will be used instead
      when support for it will be added to the JSC bindings generator.
      
      * Modules/battery/BatteryManager.idl:
      * Modules/encryptedmedia/MediaKeySession.idl:
      * Modules/encryptedmedia/MediaKeys.idl:
      * Modules/gamepad/GamepadList.idl:
      * Modules/geolocation/Geolocation.idl:
      * Modules/indexeddb/IDBCursor.idl:
      * Modules/indexeddb/IDBDatabase.idl:
      * Modules/indexeddb/IDBFactory.idl:
      * Modules/indexeddb/IDBIndex.idl:
      * Modules/indexeddb/IDBKeyRange.idl:
      * Modules/indexeddb/IDBObjectStore.idl:
      * Modules/indexeddb/IDBTransaction.idl:
      * Modules/indexeddb/IDBVersionChangeEvent.idl:
      * Modules/mediacontrols/MediaControlsHost.idl:
      * Modules/mediasource/MediaSource.idl:
      * Modules/mediasource/SourceBuffer.idl:
      * Modules/mediasource/SourceBufferList.idl:
      * Modules/mediastream/MediaStream.idl:
      * Modules/mediastream/MediaStreamTrack.idl:
      * Modules/mediastream/RTCDTMFSender.idl:
      * Modules/mediastream/RTCDataChannel.idl:
      * Modules/mediastream/RTCPeerConnection.idl:
      * Modules/mediastream/RTCStatsReport.idl:
      * Modules/mediastream/RTCStatsResponse.idl:
      * Modules/networkinfo/NetworkInfoConnection.idl:
      * Modules/notifications/Notification.idl:
      * Modules/notifications/NotificationCenter.idl:
      * Modules/proximity/DeviceProximityEvent.idl:
      * Modules/quota/StorageInfo.idl:
      * Modules/quota/StorageQuota.idl:
      * Modules/speech/SpeechGrammarList.idl:
      * Modules/speech/SpeechRecognition.idl:
      * Modules/speech/SpeechRecognitionResult.idl:
      * Modules/speech/SpeechRecognitionResultList.idl:
      * Modules/speech/SpeechSynthesis.idl:
      * Modules/webaudio/AnalyserNode.idl:
      * Modules/webaudio/AudioBuffer.idl:
      * Modules/webaudio/AudioBufferSourceNode.idl:
      * Modules/webaudio/AudioContext.idl:
      * Modules/webaudio/AudioListener.idl:
      * Modules/webaudio/AudioNode.idl:
      * Modules/webaudio/AudioParam.idl:
      * Modules/webaudio/BiquadFilterNode.idl:
      * Modules/webaudio/OscillatorNode.idl:
      * Modules/webaudio/PannerNode.idl:
      * Modules/webdatabase/Database.idl:
      * Modules/webdatabase/DatabaseSync.idl:
      * Modules/webdatabase/SQLResultSetRowList.idl:
      * Modules/webdatabase/SQLTransaction.idl:
      * Modules/webdatabase/SQLTransactionSync.idl:
      * Modules/websockets/WebSocket.idl:
      * crypto/CryptoKey.idl:
      * crypto/SubtleCrypto.idl:
      * css/CSSHostRule.idl:
      * css/CSSMediaRule.idl:
      * css/CSSPrimitiveValue.idl:
      * css/CSSRuleList.idl:
      * css/CSSStyleDeclaration.idl:
      * css/CSSStyleSheet.idl:
      * css/CSSSupportsRule.idl:
      * css/CSSValueList.idl:
      * css/DOMWindowCSS.idl:
      * css/FontLoader.idl:
      * css/MediaList.idl:
      * css/MediaQueryList.idl:
      * css/MediaQueryListListener.idl:
      * css/StyleMedia.idl:
      * css/StyleSheet.idl:
      * css/StyleSheetList.idl:
      * css/WebKitCSSFilterValue.idl:
      * css/WebKitCSSKeyframesRule.idl:
      * css/WebKitCSSMatrix.idl:
      * css/WebKitCSSTransformValue.idl:
      * dom/CharacterData.idl:
      * dom/ChildNode.idl:
      * dom/ClientRectList.idl:
      * dom/Clipboard.idl:
      * dom/CompositionEvent.idl:
      * dom/CustomEvent.idl:
      * dom/DOMCoreException.idl:
      * dom/DOMImplementation.idl:
      * dom/DOMNamedFlowCollection.idl:
      * dom/DOMStringList.idl:
      * dom/DOMStringMap.idl:
      * dom/DataTransferItem.idl:
      * dom/DataTransferItemList.idl:
      * dom/DeviceMotionEvent.idl:
      * dom/DeviceOrientationEvent.idl:
      * dom/Document.idl:
      * dom/DocumentFragment.idl:
      * dom/DocumentType.idl:
      * dom/Element.idl:
      * dom/Event.idl:
      * dom/EventException.idl:
      * dom/EventListener.idl:
      * dom/EventTarget.idl:
      * dom/HashChangeEvent.idl:
      * dom/KeyboardEvent.idl:
      * dom/MessageEvent.idl:
      * dom/MessagePort.idl:
      * dom/MouseEvent.idl:
      * dom/MutationEvent.idl:
      * dom/MutationObserver.idl:
      * dom/NamedNodeMap.idl:
      * dom/Node.idl:
      * dom/NodeFilter.idl:
      * dom/NodeIterator.idl:
      * dom/NodeList.idl:
      * dom/Range.idl:
      * dom/RangeException.idl:
      * dom/ShadowRoot.idl:
      * dom/Text.idl:
      * dom/TextEvent.idl:
      * dom/TouchEvent.idl:
      * dom/TouchList.idl:
      * dom/TreeWalker.idl:
      * dom/UIEvent.idl:
      * dom/WebKitNamedFlow.idl:
      * dom/WheelEvent.idl:
      * fileapi/Blob.idl:
      * fileapi/FileException.idl:
      * fileapi/FileList.idl:
      * fileapi/FileReader.idl:
      * fileapi/FileReaderSync.idl:
      * html/DOMFormData.idl:
      * html/DOMSettableTokenList.idl:
      * html/DOMTokenList.idl:
      * html/DOMURL.idl:
      * html/HTMLAllCollection.idl:
      * html/HTMLAnchorElement.idl:
      * html/HTMLButtonElement.idl:
      * html/HTMLCanvasElement.idl:
      * html/HTMLCollection.idl:
      * html/HTMLDocument.idl:
      * html/HTMLElement.idl:
      * html/HTMLEmbedElement.idl:
      * html/HTMLFieldSetElement.idl:
      * html/HTMLFormControlsCollection.idl:
      * html/HTMLFormElement.idl:
      * html/HTMLFrameElement.idl:
      * html/HTMLIFrameElement.idl:
      * html/HTMLInputElement.idl:
      * html/HTMLKeygenElement.idl:
      * html/HTMLMarqueeElement.idl:
      * html/HTMLMediaElement.idl:
      * html/HTMLObjectElement.idl:
      * html/HTMLOptionsCollection.idl:
      * html/HTMLOutputElement.idl:
      * html/HTMLSelectElement.idl:
      * html/HTMLTableElement.idl:
      * html/HTMLTableRowElement.idl:
      * html/HTMLTableSectionElement.idl:
      * html/HTMLTextAreaElement.idl:
      * html/HTMLVideoElement.idl:
      * html/MediaController.idl:
      * html/RadioNodeList.idl:
      * html/TimeRanges.idl:
      * html/canvas/CanvasGradient.idl:
      * html/canvas/CanvasRenderingContext2D.idl:
      * html/canvas/DOMPath.idl:
      * html/canvas/EXTDrawBuffers.idl:
      * html/canvas/OESVertexArrayObject.idl:
      * html/canvas/WebGLDebugShaders.idl:
      * html/canvas/WebGLLoseContext.idl:
      * html/canvas/WebGLRenderingContext.idl:
      * html/track/AudioTrackList.idl:
      * html/track/TextTrack.idl:
      * html/track/TextTrackCue.idl:
      * html/track/TextTrackCueList.idl:
      * html/track/TextTrackList.idl:
      * html/track/TextTrackRegionList.idl:
      * html/track/VideoTrackList.idl:
      * loader/appcache/DOMApplicationCache.idl:
      * page/Console.idl:
      * page/Crypto.idl:
      * page/DOMSecurityPolicy.idl:
      * page/DOMSelection.idl:
      * page/DOMWindow.idl:
      * page/EventSource.idl:
      * page/History.idl:
      * page/Navigator.idl:
      * page/Performance.idl:
      * page/PerformanceEntryList.idl:
      * page/SpeechInputResultList.idl:
      * page/WindowBase64.idl:
      * page/WindowTimers.idl:
      * plugins/DOMMimeTypeArray.idl:
      * plugins/DOMPlugin.idl:
      * plugins/DOMPluginArray.idl:
      * storage/Storage.idl:
      * storage/StorageEvent.idl:
      * svg/SVGAngle.idl:
      * svg/SVGAnimationElement.idl:
      * svg/SVGColor.idl:
      * svg/SVGCursorElement.idl:
      * svg/SVGDocument.idl:
      * svg/SVGElement.idl:
      * svg/SVGElementInstanceList.idl:
      * svg/SVGException.idl:
      * svg/SVGFEDropShadowElement.idl:
      * svg/SVGFEGaussianBlurElement.idl:
      * svg/SVGFEMorphologyElement.idl:
      * svg/SVGFilterElement.idl:
      * svg/SVGGraphicsElement.idl:
      * svg/SVGLength.idl:
      * svg/SVGLengthList.idl:
      * svg/SVGMarkerElement.idl:
      * svg/SVGMaskElement.idl:
      * svg/SVGMatrix.idl:
      * svg/SVGNumberList.idl:
      * svg/SVGPaint.idl:
      * svg/SVGPathElement.idl:
      * svg/SVGPathSegList.idl:
      * svg/SVGPatternElement.idl:
      * svg/SVGPoint.idl:
      * svg/SVGPointList.idl:
      * svg/SVGSVGElement.idl:
      * svg/SVGStringList.idl:
      * svg/SVGTests.idl:
      * svg/SVGTextContentElement.idl:
      * svg/SVGTransform.idl:
      * svg/SVGTransformList.idl:
      * workers/DedicatedWorkerGlobalScope.idl:
      * workers/Worker.idl:
      * workers/WorkerGlobalScope.idl:
      * workers/WorkerLocation.idl:
      * xml/DOMParser.idl:
      * xml/XMLHttpRequest.idl:
      * xml/XMLHttpRequestException.idl:
      * xml/XMLHttpRequestUpload.idl:
      * xml/XMLSerializer.idl:
      * xml/XPathEvaluator.idl:
      * xml/XPathException.idl:
      * xml/XPathExpression.idl:
      * xml/XPathNSResolver.idl:
      * xml/XPathResult.idl:
      * xml/XSLTProcessor.idl:
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159061 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      d5961560
    • simon.fraser@apple.com's avatar
      Add a testcase for a tiled layer inside an iframe · 82217e00
      simon.fraser@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=124159
      
      Reviewed by Tim Horton.
      
      Add a test for a tiled compositing layer inside an iframe.
      
      * compositing/tiling/resources/tiled-layer-tall.html: Added.
      * compositing/tiling/tiled-in-iframe.html: Added.
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159060 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      82217e00
    • andersca@apple.com's avatar
      Remove block based APIs from the WebKit2 C API · 57910a8c
      andersca@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=124157
      
      Reviewed by Sam Weinig.
      
      Source/WebKit2:
      
      Remove most of the block based C APIs from WebKit2. We want to discourage people from using
      them since any C API "objects" captured by blocks won't be implicitly retained which
      can lead to dangling pointer bugs.
      
      * UIProcess/API/C/WKDatabaseManager.cpp:
      * UIProcess/API/C/WKDatabaseManager.h:
      * UIProcess/API/C/WKFrame.cpp:
      * UIProcess/API/C/WKFrame.h:
      * UIProcess/API/C/WKPage.cpp:
      * UIProcess/API/C/WKPage.h:
      * UIProcess/API/C/WKPagePrivate.h:
      
      Tools:
      
      Update for WK2 changes.
      
      * MiniBrowser/mac/WK2BrowserWindowController.m:
      (dumpSource):
      (-[WK2BrowserWindowController dumpSourceToConsole:]):
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159059 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      57910a8c
    • commit-queue@webkit.org's avatar
      [CSS Regions] Selection focusNode set to the "region" block, instead of the "source" block · 5ce6c901
      commit-queue@webkit.org authored
      https://bugs.webkit.org/show_bug.cgi?id=120769
      
      Patch by Javier Fernandez <jfernandez@igalia.com> on 2013-11-11
      Reviewed by David Hyatt.
      
      Source/WebCore:
      
      When a point hits a Region block, current positionForPoint algorithm determines its
      position in the DOM and returns either the start or end offset for such block, since
      Region blocks have no children in the DOM.
      
      It's necessary to map the point into Flow Thread coordinates in order to determine
      the DOM position of the specific element rendered by the Region.
      
      Top margin, padding and border points should be mapped to the beginning of the Region
      block, while bottom points are mapped to the block end. The Left coordinate its just
      adjusted to fit in the Flow Thread boundaries, since its not affected by the Flow
      direction.
      
      Besides, when inspecting the Flow Thread blocks looking for the last candidate box,
      the Region originally associated to the point might be taken into account. Only the
      blocks/boxes rendered by the Region are potential candidates.
      
      Tests: fast/regions/selection/position-for-point-1-vert-lr.html
             fast/regions/selection/position-for-point-1-vert-rl.html
             fast/regions/selection/position-for-point-1.html
             fast/regions/selection/position-for-point-vert-lr.html
             fast/regions/selection/position-for-point-vert-rl.html
             fast/regions/selection/position-for-point.html
      
      * rendering/RenderBlock.cpp:
      (WebCore::isChildHitTestCandidate):
      (WebCore::RenderBlock::positionForPoint):
      * rendering/RenderBlockFlow.cpp:
      (WebCore::RenderBlockFlow::positionForPoint): Added.
      It just redirects the call to the associated RenderNamedFlowFragment instance.
      * rendering/RenderBlockFlow.h:
      * rendering/RenderRegion.cpp:
      (WebCore::RenderRegion::mapRegionPointIntoFlowThreadCoordinates): Added.
      It performs the coordinates mapping.
      (WebCore::RenderRegion::positionForPoint): Added.
      It determines the corresponding LayoutPoint in the FlowThread the Region
      is associated to, forwarding the call to the RenderBlock class using the
      FlowThread's first child block and such new point.
      * rendering/RenderRegion.h:
      
      LayoutTests:
      
      * fast/regions/resources/helper.js:
      (selectContentFromIdToPos):
      (selectContentFromIdToPosVert):
      (.document.onmouseup):
      (onMouseUpLogSelectionAndFocus):
      * fast/regions/selection/position-for-point-1-expected.txt: Added.
      * fast/regions/selection/position-for-point-1-vert-lr-expected.txt: Added.
      * fast/regions/selection/position-for-point-1-vert-lr.html: Added.
      * fast/regions/selection/position-for-point-1-vert-rl-expected.txt: Added.
      * fast/regions/selection/position-for-point-1-vert-rl.html: Added.
      * fast/regions/selection/position-for-point-1.html: Added.
      * fast/regions/selection/position-for-point-expected.txt: Added.
      * fast/regions/selection/position-for-point-vert-lr-expected.txt: Added.
      * fast/regions/selection/position-for-point-vert-lr.html: Added.
      * fast/regions/selection/position-for-point-vert-rl-expected.txt: Added.
      * fast/regions/selection/position-for-point-vert-rl.html: Added.
      * fast/regions/selection/position-for-point.html: Added.
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159057 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      5ce6c901
    • rgabor@webkit.org's avatar
      Fix CPU(ARM_TRADITIONAL) build after r159039. · ebfd2507
      rgabor@webkit.org authored
      https://bugs.webkit.org/show_bug.cgi?id=124149
      
      Reviewed by Geoffrey Garen.
      
      * assembler/ARMAssembler.h:
      (JSC::ARMAssembler::firstRegister):
      (JSC::ARMAssembler::lastRegister):
      (JSC::ARMAssembler::firstFPRegister):
      (JSC::ARMAssembler::lastFPRegister):
      * assembler/MacroAssemblerARM.h:
      * jit/FPRInfo.h:
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159055 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      ebfd2507
    • mitz@apple.com's avatar
      [Mac] .exp files are not source code · aecd5cbc
      mitz@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=124154
      
      Reviewed by Andy Estes.
      
      ../WebKit: 
      
      * WebKit.xcodeproj/project.pbxproj: Removed WebKit.iOS.exp from the Compile Sources build
      phase.
      
      ../WebKit/mac: 
      
      * Configurations/WebKit.xcconfig: Removed WebKit.iOS.exp from
      EXCLUDED_SOURCE_FILE_NAMES_macosx.
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159054 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      aecd5cbc
    • commit-queue@webkit.org's avatar
      [curl] Remove unused includes. · 1bd595cc
      commit-queue@webkit.org authored
      https://bugs.webkit.org/show_bug.cgi?id=120415
      
      Patch by Gergo Balogh <geryxyz@inf.u-szeged.hu> on 2013-11-11
      Reviewed by Csaba Osztrogonác.
      
      Original patch by 2013-08-28  Tamas Czene  <tczene@inf.u-szeged.hu>
      
      * platform/network/curl/ProxyServerCurl.cpp:
      * platform/network/curl/ResourceHandleCurl.cpp:
      * platform/network/curl/ResourceHandleManager.cpp:
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159053 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      1bd595cc
    • commit-queue@webkit.org's avatar
      The feeder queue will not feed patches older than one week. · 2ebb31dd
      commit-queue@webkit.org authored
      https://bugs.webkit.org/show_bug.cgi?id=107152
      
      Patch by Tamas Gergely <gertom@inf.u-szeged.hu> on 2013-11-11
      Reviewed by Csaba Osztrogonác.
      
      The feeder queue will not feed patches older than one week.
      Unit test added to this scenario.
      
      * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
      (BugzillaQueries._parse_attachment_ids_request_query):
        Handle date parameter.
      (BugzillaQueries):
      (BugzillaQueries._fetch_attachment_ids_request_query):
        Propagate date.
      (BugzillaQueries.fetch_attachment_ids_from_review_queue):
        Propagate date.
      * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
      (MockBugzillaQueries.fetch_attachment_ids_from_review_queue):
        Handle date.
      * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
      (test_request_page_parsing):
        Unit test added.
      * Scripts/webkitpy/tool/bot/feeders.py:
      (EWSFeeder.feed):
        Query patch ids with date parameter (now - 1 week).
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159052 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      2ebb31dd
    • commit-queue@webkit.org's avatar
      Do not shut down ImageDiff server after every diff during the tests. · 07ccacf6
      commit-queue@webkit.org authored
      https://bugs.webkit.org/show_bug.cgi?id=124140
      
      Patch by Tamas Gergely <gertom@inf.u-szeged.hu> on 2013-11-11
      Reviewed by Csaba Osztrogonác.
      
      There was a FIXME: There is no need to shut down the ImageDiff
      server after every diff. Shutdown is removed from that point.
      
      * Scripts/webkitpy/port/image_diff.py:
      (ImageDiffer._read):
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159051 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      07ccacf6
    • ossy@webkit.org's avatar
      URTBF after r159027 to make Apple Windows build happy. · f3a65dd3
      ossy@webkit.org authored
      * platform/graphics/cg/ImageSourceCG.cpp:
      (WebCore::sharedBufferGetBytesAtPosition):
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159050 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      f3a65dd3
    • akling@apple.com's avatar
      Kill InlineFlowBox::rendererLineBoxes(). · 5e087b0b
      akling@apple.com authored
      <https://webkit.org/b/124141>
      
      We only ever used this to access the RenderLineBoxList for non-root
      boxes, and those always have a RenderInline renderer.
      
      Tighten things up by losing the virtual rendererLineBoxes() and
      calling RenderInline::lineBoxes() directly.
      
      Reviewed by Antti Koivisto.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159049 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      5e087b0b
    • akling@apple.com's avatar
      Bring the LineFragmentationData back to RootInlineBox. · c42a9a53
      akling@apple.com authored
      <https://webkit.org/b/124136>
      
      Now that we have the simple line layout path, almost all the root
      line boxes end up with some kind of fragmentation data, so we might
      as well put the members back on RootInlineBox and avoid the extra
      allocation (and indirection.)
      
      1.74 MB progression on HTML5 spec at <http://whatwg.org/c>
      
      Reviewed by Antti Koivisto.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159044 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      c42a9a53
    • carlosgc@webkit.org's avatar
      [GTK] Crash when printing via javascript in WebKit2 · 0d0a26d9
      carlosgc@webkit.org authored
      https://bugs.webkit.org/show_bug.cgi?id=124043
      
      Reviewed by Martin Robinson.
      
      It happens because the print operation when started by the
      WebProcess due to a DOM operation is supposed to be synchronous
      and our print operation is always asynchronous. This is currently
      handled only in the UI process because other ports print
      synchronously in the WebProcess. In the GTK+ port we need to
      notify the WebProcess that the print operation should run
      synchronously when request by a DOM operation. Together with the
      print settings and page setup we now send a print mode that can be
      sync or async. When printing in sync mode we run a nested main loop
      for the print operation, making sure that print sources have a
      higher priority.
      
      * Shared/PrintInfo.cpp:
      (WebKit::PrintInfo::encode): Encode the print mode.
      (WebKit::PrintInfo::decode): Decode the print mode.
      * Shared/PrintInfo.h: Add PrintMode enum.
      * Shared/gtk/PrintInfoGtk.cpp:
      (WebKit::PrintInfo::PrintInfo): Initialize print mode.
      * UIProcess/API/gtk/WebKitPrintOperation.cpp:
      (drawPagesForPrintingCompleted): Do not call endPrinting() when
      printing synchronously because WebPageProxy already calls it right
      after sending the message to the WebProcess.
      (webkitPrintOperationPrintPagesForFrame): Create the PrintInfo
      struct with a print mode.
      (webkitPrintOperationSetPrintMode): Helper private function to set
      the print mode of the print operation.
      * UIProcess/API/gtk/WebKitPrintOperationPrivate.h:
      * UIProcess/API/gtk/WebKitWebView.cpp:
      (webkitWebViewPrintFrame): Set sync print mode when printing due
      to a UIClient request.
      * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
      (WebKit::PrintPagesData::PrintPagesData): Create a main loop when
      printing synchronously.
      (WebKit::WebPrintOperationGtk::WebPrintOperationGtk): Initialize
      print mode.
      (WebKit::WebPrintOperationGtk::printPagesIdleDone): Finish the
      nested main loop when printing synchronously.
      (WebKit::WebPrintOperationGtk::print): Run a nested main loop when
      printing synchronously.
      * WebProcess/WebPage/gtk/WebPrintOperationGtk.h:
      (WebKit::WebPrintOperationGtk::printMode): Return the print mode.
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159042 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      0d0a26d9
    • carlosgc@webkit.org's avatar
      [GTK] [WebKit2] Crash when printing to a file via javascript · 9aba61f6
      carlosgc@webkit.org authored
      https://bugs.webkit.org/show_bug.cgi?id=122801
      
      Reviewed by Martin Robinson.
      
      This crash is caused by a GTK+ bug, but we can work around it by
      ensuring the print dialog is always shown with a valid
      GtkPrintSettings object.
      
      * UIProcess/API/gtk/WebKitPrintOperation.cpp:
      (webkitPrintOperationRunDialog):
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159041 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      9aba61f6
    • commit-queue@webkit.org's avatar
      [EFL] Layout tests with css1 box properties need to be rebaselined. · 4eb08fdc
      commit-queue@webkit.org authored
      https://bugs.webkit.org/show_bug.cgi?id=124135
      
      Patch by Sun-woo Nam <sunny.nam@samsung.com> on 2013-11-10
      Reviewed by Gyuyoung Kim.
      
      EFL css1 rebaseline after r101343 for EFL gardening.
      
      * platform/efl/css1/box_properties/margin_right-expected.txt:
      * platform/efl/css1/box_properties/padding-expected.txt:
      * platform/efl/css1/box_properties/padding_left-expected.txt:
      * platform/efl/css1/box_properties/padding_right-expected.txt:
      * platform/efl/css1/box_properties/padding_top-expected.txt:
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159040 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      4eb08fdc
    • fpizlo@apple.com's avatar
      Switch FTL GetById/PutById IC's over to using AnyRegCC · d2ceb399
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=124094
      
      Source/JavaScriptCore: 
      
      Reviewed by Sam Weinig.
              
      This closes the loop on inline caches (IC's) in the FTL. The goal is to have IC's
      in LLVM-generated code that are just as efficient (if not more so) than what a
      custom JIT could do. As in zero sources of overhead. Not a single extra instruction
      or even register allocation pathology. We accomplish this by having two thingies in
      LLVM. First is the llvm.experimental.patchpoint intrinsic, which is sort of an
      inline machine code snippet that we can fill in with whatever we want and then
      modify subsequently. But you have only two choices of how to pass values to a
      patchpoint: (1) via the calling convention or (2) via the stackmap. Neither are good
      for operands to an IC (like the base pointer for a GetById, for example). (1) is bad
      because it results in things being pinned to certain registers a priori; a custom
      JIT (like the DFG) will not pin IC operands to any registers a priori but will allow
      the register allocator to do whatever it wants. (2) is bad because the operands may
      be spilled or may be represented in other crazy ways. You generally want an IC to
      have its operands in registers. Also, patchpoints only return values using the
      calling convention, which is unfortunate since it pins the return value to a
      register a priori. This is where the second thingy comes in: the AnyRegCC. This is
      a special calling convention only for use with patchpoints. It means that arguments
      passed "by CC" in the patchpoint can be placed in any register, and the register
      that gets used is reported as part of the stackmap. It also means that the return
      value (if there is one) can be placed in any register, and the stackmap will tell
      you which one it was. Thus, patchpoints combined with AnyRegCC mean that you not
      only get the kind of self-modifying code that you want for IC's, but you also get
      all of the register allocation goodness that a custom JIT would have given you.
      Except that you're getting it from LLVM and not a custom JIT. Awesome.
              
      Even though all of the fun stuff is on the LLVM side, this patch was harder than
      you'd expect.
              
      First the obvious bits:
              
      - IC patchpoints now use AnyRegCC instead of the C CC. (CC = calling convention.)
              
      - FTL::fixFunctionBasedOnStackMaps() now correctly figures out which registers the
        IC is supposed to use instead of assuming C CC argument registers.
              
      And then all of the stuff that broke and that this patch fixes:
              
      - IC sizing based on generating a dummy IC (what FTLInlineCacheSize did) is totally
        bad on x86-64, where various register permutations lead to bizarre header bytes
        and eclectic SIB encodings. I changed that to have magic constants, for now.
              
      - Slow path calls didn't preserve the CC return register.
              
      - Repatch's scratch register allocation would get totally confused if the operand
        registers weren't one of the DFG-style "temp" registers. And by "totally confused"
        I mean that it would crash.
              
      - We assumed that r10 is callee-saved. It's not. That one dude's PPT about x86-64
        cdecl that I found on the intertubes was not a trustworthy source of information,
        apparently.
              
      - Call repatching didn't know that the FTL does its IC slow calls via specially
        generated thunks. This was particularly fun to fix: basically, now when we relink
        an IC call in the FTL, we use the old call target to find the SlowPathCallKey,
        which tells us everything we need to know to generate (or look up) a new thunk for
        the new function we want to call.
              
      * assembler/MacroAssemblerCodeRef.h:
      (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
      (JSC::MacroAssemblerCodePtr::isEmptyValue):
      (JSC::MacroAssemblerCodePtr::isDeletedValue):
      (JSC::MacroAssemblerCodePtr::hash):
      (JSC::MacroAssemblerCodePtr::emptyValue):
      (JSC::MacroAssemblerCodePtr::deletedValue):
      (JSC::MacroAssemblerCodePtrHash::hash):
      (JSC::MacroAssemblerCodePtrHash::equal):
      * assembler/MacroAssemblerX86Common.h:
      * assembler/RepatchBuffer.h:
      (JSC::RepatchBuffer::RepatchBuffer):
      (JSC::RepatchBuffer::codeBlock):
      * ftl/FTLAbbreviations.h:
      (JSC::FTL::setInstructionCallingConvention):
      * ftl/FTLCompile.cpp:
      (JSC::FTL::fixFunctionBasedOnStackMaps):
      * ftl/FTLInlineCacheSize.cpp:
      (JSC::FTL::sizeOfGetById):
      (JSC::FTL::sizeOfPutById):
      * ftl/FTLJITFinalizer.cpp:
      (JSC::FTL::JITFinalizer::finalizeFunction):
      * ftl/FTLLocation.cpp:
      (JSC::FTL::Location::forStackmaps):
      * ftl/FTLLocation.h:
      * ftl/FTLLowerDFGToLLVM.cpp:
      (JSC::FTL::LowerDFGToLLVM::compileGetById):
      (JSC::FTL::LowerDFGToLLVM::compilePutById):
      * ftl/FTLOSRExitCompiler.cpp:
      (JSC::FTL::compileStub):
      * ftl/FTLSlowPathCall.cpp:
      * ftl/FTLSlowPathCallKey.h:
      (JSC::FTL::SlowPathCallKey::withCallTarget):
      * ftl/FTLStackMaps.cpp:
      (JSC::FTL::StackMaps::Location::directGPR):
      (JSC::FTL::StackMaps::Location::restoreInto):
      * ftl/FTLStackMaps.h:
      * ftl/FTLThunks.h:
      (JSC::FTL::generateIfNecessary):
      (JSC::FTL::keyForThunk):
      (JSC::FTL::Thunks::keyForSlowPathCallThunk):
      * jit/FPRInfo.h:
      (JSC::FPRInfo::toIndex):
      * jit/GPRInfo.h:
      (JSC::GPRInfo::toIndex):
      (JSC::GPRInfo::debugName):
      * jit/RegisterSet.cpp:
      (JSC::RegisterSet::calleeSaveRegisters):
      * jit/RegisterSet.h:
      (JSC::RegisterSet::filter):
      * jit/Repatch.cpp:
      (JSC::readCallTarget):
      (JSC::repatchCall):
      (JSC::repatchByIdSelfAccess):
      (JSC::tryCacheGetByID):
      (JSC::tryCachePutByID):
      (JSC::tryBuildPutByIdList):
      (JSC::resetGetByID):
      (JSC::resetPutByID):
      * jit/ScratchRegisterAllocator.h:
      (JSC::ScratchRegisterAllocator::lock):
      
      Source/WTF: 
      
      Reviewed by Sam Weinig.
              
      I needed to add another set operation, namely filter(), which is an in-place set
      intersection.
      
      * wtf/BitVector.cpp:
      (WTF::BitVector::filterSlow):
      * wtf/BitVector.h:
      (WTF::BitVector::filter):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159039 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      d2ceb399
  2. 10 Nov, 2013 7 commits