WebKit Bugzilla
Attachment 361128 Details for
Bug 194245
: Move some macOS/iOS scrolling code into the scrolling/cocoa directory
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-194245-20190204164448.patch (text/plain), 54.39 KB, created by
Simon Fraser (smfr)
on 2019-02-04 16:44:49 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Simon Fraser (smfr)
Created:
2019-02-04 16:44:49 PST
Size:
54.39 KB
patch
obsolete
>Subversion Revision: 240941 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 4982c8069c39877dd8ed2fe1757fdc3d591c2878..68fec7b0412a18bb3781186c952feb9125dfeb15 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,31 @@ >+2019-02-04 Simon Fraser <simon.fraser@apple.com> >+ >+ Move some macOS/iOS scrolling code into the scrolling/cocoa directory >+ https://bugs.webkit.org/show_bug.cgi?id=194245 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ ScrollingTreeFixedNode and ScrollingTreeStickyNode are used on iOS and macOS, so move them to the cocoa >+ directory. >+ >+ Standardize on the ordering of ENABLE(ASYNC_SCROLLING) && PLATFORM(MAC). >+ >+ Stop building ScrollingThread for iOS (it's never used), and stub out some functions so things build. >+ >+ * SourcesCocoa.txt: >+ * WebCore.xcodeproj/project.pbxproj: >+ * page/scrolling/ScrollingThread.cpp: >+ (WebCore::ScrollingThread::initializeRunLoop): >+ (WebCore::ScrollingThread::wakeUpRunLoop): >+ (WebCore::ScrollingThread::threadRunLoopSourceCallback): >+ * page/scrolling/cocoa/ScrollingTreeFixedNode.h: Renamed from Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.h. >+ * page/scrolling/cocoa/ScrollingTreeFixedNode.mm: Renamed from Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.mm. >+ * page/scrolling/cocoa/ScrollingTreeStickyNode.h: Renamed from Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.h. >+ * page/scrolling/cocoa/ScrollingTreeStickyNode.mm: Renamed from Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.mm. >+ * page/scrolling/mac/ScrollingThreadMac.mm: >+ * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h: >+ * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm: >+ > 2019-02-04 Simon Fraser <simon.fraser@apple.com> > > Async overflow scroll with border-radius renders incorrectly >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 12d218a0d6c0515e27bd7a112d7f11d7f4e78afe..95314b203b0e7b9e48cfdc05fe190fe64147c0f7 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,15 @@ >+2019-02-04 Simon Fraser <simon.fraser@apple.com> >+ >+ Move some macOS/iOS scrolling code into the scrolling/cocoa directory >+ https://bugs.webkit.org/show_bug.cgi?id=194245 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Use PLATFORM(MAC), not !PLATFORM(IOS_FAMILY). >+ >+ * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: >+ * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: >+ > 2019-02-04 Simon Fraser <simon.fraser@apple.com> > > PageOverlayController's layers should be created lazily >diff --git a/Source/WebCore/SourcesCocoa.txt b/Source/WebCore/SourcesCocoa.txt >index 5a00d12a58003ad55a83df13ffc85d8680a67bdc..0722288da1c8935a78f7e192096a7ad8572e8043 100644 >--- a/Source/WebCore/SourcesCocoa.txt >+++ b/Source/WebCore/SourcesCocoa.txt >@@ -146,6 +146,8 @@ page/mac/WheelEventDeltaFilterMac.mm > page/scrolling/ScrollingMomentumCalculator.cpp > > page/scrolling/cocoa/ScrollingStateNode.mm >+page/scrolling/cocoa/ScrollingTreeFixedNode.mm >+page/scrolling/cocoa/ScrollingTreeStickyNode.mm > > page/scrolling/ios/ScrollingCoordinatorIOS.mm > page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm >@@ -155,12 +157,10 @@ page/scrolling/mac/ScrollingCoordinatorMac.mm > page/scrolling/mac/ScrollingMomentumCalculatorMac.mm > page/scrolling/mac/ScrollingStateFrameScrollingNodeMac.mm > page/scrolling/mac/ScrollingThreadMac.mm >-page/scrolling/mac/ScrollingTreeFixedNode.mm > page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm > page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm > page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm > page/scrolling/mac/ScrollingTreeMac.cpp >-page/scrolling/mac/ScrollingTreeStickyNode.mm > > platform/audio/AudioSession.cpp > >diff --git a/Source/WebCore/WebCore.xcodeproj/project.pbxproj b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >index 6d4537415e686a8885bca99d7568f0b242048385..85590f6db27880e892ed5d0a311a1271784a6399 100644 >--- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj >+++ b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >@@ -359,10 +359,11 @@ > 0F8716701C869D83004FF0DE /* LengthPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F87166E1C869D83004FF0DE /* LengthPoint.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 0F8B45721DC3FBA300443C3F /* IntersectionObserverCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F8B45711DC3FBA300443C3F /* IntersectionObserverCallback.h */; }; > 0F8B45761DC41DBA00443C3F /* JSIntersectionObserverCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F8B45741DC41DBA00443C3F /* JSIntersectionObserverCallback.h */; }; >+ 0F94B6472208FE3600157014 /* ScrollingTreeFixedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F94B6422208F70100157014 /* ScrollingTreeFixedNode.h */; settings = {ATTRIBUTES = (Private, ); }; }; >+ 0F94B6492208FE3B00157014 /* ScrollingTreeStickyNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F94B6432208F70200157014 /* ScrollingTreeStickyNode.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 0F9DAA0F1FD1C66A0079C5B2 /* DOMGCOutputConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F9DAA0E1FD1C6640079C5B2 /* DOMGCOutputConstraint.h */; }; > 0FA24D7A162DF91900A3F4C0 /* GraphicsLayerUpdater.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FA24D78162DF91900A3F4C0 /* GraphicsLayerUpdater.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 0FB6252F18DE1B1500A07C05 /* GeometryUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB6252D18DE1B1500A07C05 /* GeometryUtilities.h */; settings = {ATTRIBUTES = (Private, ); }; }; >- 0FB8890A167D2FA10010CDA5 /* ScrollingTreeStickyNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB88908167D2FA10010CDA5 /* ScrollingTreeStickyNode.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 0FB8890F167D30160010CDA5 /* ScrollingStateStickyNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB8890D167D30160010CDA5 /* ScrollingStateStickyNode.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 0FC4E40D187F82E10045882C /* ScrollingCoordinatorIOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FC4E407187F82E10045882C /* ScrollingCoordinatorIOS.h */; }; > 0FC4E410187F82E10045882C /* ScrollingTreeIOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FC4E40A187F82E10045882C /* ScrollingTreeIOS.h */; }; >@@ -2705,7 +2706,6 @@ > 93C09A530B064DB3005ABD4D /* EventHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C09A520B064DB3005ABD4D /* EventHandler.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 93C09C860B0657AA005ABD4D /* ScrollTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C09C850B0657AA005ABD4D /* ScrollTypes.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 93C38BFF164473C700091EB2 /* ScrollingStateFixedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C38BFD164473C700091EB2 /* ScrollingStateFixedNode.h */; settings = {ATTRIBUTES = (Private, ); }; }; >- 93C38C03164473DD00091EB2 /* ScrollingTreeFixedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C38C01164473DD00091EB2 /* ScrollingTreeFixedNode.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 93C442000F813AE100C1A634 /* CollectionType.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C441FF0F813AE100C1A634 /* CollectionType.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 93C4A4151629DF5A00C3EB6E /* ScrollingTreeFrameScrollingNodeMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C4A4131629DF5A00C3EB6E /* ScrollingTreeFrameScrollingNodeMac.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 93C4F6EB1108F9A50099D0DB /* AccessibilityScrollbar.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C4F6E91108F9A50099D0DB /* AccessibilityScrollbar.h */; }; >@@ -5790,6 +5790,10 @@ > 0F8B45731DC41DBA00443C3F /* JSIntersectionObserverCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIntersectionObserverCallback.cpp; sourceTree = "<group>"; }; > 0F8B45741DC41DBA00443C3F /* JSIntersectionObserverCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIntersectionObserverCallback.h; sourceTree = "<group>"; }; > 0F94A3951EF1B10500FBAFFB /* JSDOMQuadCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMQuadCustom.cpp; sourceTree = "<group>"; }; >+ 0F94B6422208F70100157014 /* ScrollingTreeFixedNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ScrollingTreeFixedNode.h; path = page/scrolling/cocoa/ScrollingTreeFixedNode.h; sourceTree = SOURCE_ROOT; }; >+ 0F94B6432208F70200157014 /* ScrollingTreeStickyNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ScrollingTreeStickyNode.h; path = page/scrolling/cocoa/ScrollingTreeStickyNode.h; sourceTree = SOURCE_ROOT; }; >+ 0F94B6442208F70200157014 /* ScrollingTreeFixedNode.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = ScrollingTreeFixedNode.mm; path = page/scrolling/cocoa/ScrollingTreeFixedNode.mm; sourceTree = SOURCE_ROOT; }; >+ 0F94B6452208F70300157014 /* ScrollingTreeStickyNode.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = ScrollingTreeStickyNode.mm; path = page/scrolling/cocoa/ScrollingTreeStickyNode.mm; sourceTree = SOURCE_ROOT; }; > 0F97A657155DA81E00FADD4C /* DisplayRefreshMonitorIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DisplayRefreshMonitorIOS.mm; sourceTree = "<group>"; }; > 0F9DAA0C1FD1C6630079C5B2 /* DOMGCOutputConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DOMGCOutputConstraint.cpp; sourceTree = "<group>"; }; > 0F9DAA0E1FD1C6640079C5B2 /* DOMGCOutputConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMGCOutputConstraint.h; sourceTree = "<group>"; }; >@@ -5799,8 +5803,6 @@ > 0FA88EBC16A8D1BD00F99984 /* ScrollingStateFrameScrollingNodeMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ScrollingStateFrameScrollingNodeMac.mm; sourceTree = "<group>"; }; > 0FB6252C18DE1B1500A07C05 /* GeometryUtilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GeometryUtilities.cpp; sourceTree = "<group>"; }; > 0FB6252D18DE1B1500A07C05 /* GeometryUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeometryUtilities.h; sourceTree = "<group>"; }; >- 0FB88908167D2FA10010CDA5 /* ScrollingTreeStickyNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollingTreeStickyNode.h; sourceTree = "<group>"; }; >- 0FB88909167D2FA10010CDA5 /* ScrollingTreeStickyNode.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ScrollingTreeStickyNode.mm; sourceTree = "<group>"; }; > 0FB8890C167D30160010CDA5 /* ScrollingStateStickyNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollingStateStickyNode.cpp; sourceTree = "<group>"; }; > 0FB8890D167D30160010CDA5 /* ScrollingStateStickyNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollingStateStickyNode.h; sourceTree = "<group>"; }; > 0FC05168219B5EBE0031C39E /* ScrollingTreeOverflowScrollingNodeMac.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = ScrollingTreeOverflowScrollingNodeMac.mm; sourceTree = "<group>"; }; >@@ -10647,8 +10649,6 @@ > 93C09C850B0657AA005ABD4D /* ScrollTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollTypes.h; sourceTree = "<group>"; }; > 93C38BFC164473C700091EB2 /* ScrollingStateFixedNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollingStateFixedNode.cpp; sourceTree = "<group>"; }; > 93C38BFD164473C700091EB2 /* ScrollingStateFixedNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollingStateFixedNode.h; sourceTree = "<group>"; }; >- 93C38C01164473DD00091EB2 /* ScrollingTreeFixedNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollingTreeFixedNode.h; sourceTree = "<group>"; }; >- 93C38C02164473DD00091EB2 /* ScrollingTreeFixedNode.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ScrollingTreeFixedNode.mm; sourceTree = "<group>"; }; > 93C441FF0F813AE100C1A634 /* CollectionType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollectionType.h; sourceTree = "<group>"; }; > 93C4A4131629DF5A00C3EB6E /* ScrollingTreeFrameScrollingNodeMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollingTreeFrameScrollingNodeMac.h; sourceTree = "<group>"; }; > 93C4A4141629DF5A00C3EB6E /* ScrollingTreeFrameScrollingNodeMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ScrollingTreeFrameScrollingNodeMac.mm; sourceTree = "<group>"; }; >@@ -16979,8 +16979,6 @@ > 517DEEE31DE94ADC00B91644 /* ScrollingMomentumCalculatorMac.mm */, > 0FA88EBC16A8D1BD00F99984 /* ScrollingStateFrameScrollingNodeMac.mm */, > 1AF62F2314DAFE910041556C /* ScrollingThreadMac.mm */, >- 93C38C01164473DD00091EB2 /* ScrollingTreeFixedNode.h */, >- 93C38C02164473DD00091EB2 /* ScrollingTreeFixedNode.mm */, > 93C4A4131629DF5A00C3EB6E /* ScrollingTreeFrameScrollingNodeMac.h */, > 93C4A4141629DF5A00C3EB6E /* ScrollingTreeFrameScrollingNodeMac.mm */, > 0FE5806119327A6200DE32EB /* ScrollingTreeMac.cpp */, >@@ -16989,8 +16987,6 @@ > 0FC05168219B5EBE0031C39E /* ScrollingTreeOverflowScrollingNodeMac.mm */, > 0F37F0842202ACB700A89C0B /* ScrollingTreeScrollingNodeDelegateMac.h */, > 0F37F0832202AC8F00A89C0B /* ScrollingTreeScrollingNodeDelegateMac.mm */, >- 0FB88908167D2FA10010CDA5 /* ScrollingTreeStickyNode.h */, >- 0FB88909167D2FA10010CDA5 /* ScrollingTreeStickyNode.mm */, > ); > path = mac; > sourceTree = "<group>"; >@@ -21817,6 +21813,10 @@ > isa = PBXGroup; > children = ( > 93EF7D541954E98F00DFB71D /* ScrollingStateNode.mm */, >+ 0F94B6422208F70100157014 /* ScrollingTreeFixedNode.h */, >+ 0F94B6442208F70200157014 /* ScrollingTreeFixedNode.mm */, >+ 0F94B6432208F70200157014 /* ScrollingTreeStickyNode.h */, >+ 0F94B6452208F70300157014 /* ScrollingTreeStickyNode.mm */, > ); > path = cocoa; > sourceTree = "<group>"; >@@ -30025,7 +30025,6 @@ > 1A85B1E70A1B240500D8C87C /* JSHTMLDirectoryElement.h in Headers */, > 1A85B2B70A1B2AC700D8C87C /* JSHTMLDivElement.h in Headers */, > 1A85B1E90A1B240500D8C87C /* JSHTMLDListElement.h in Headers */, >- 71EADCD822087E720065A45F /* PointerID.h in Headers */, > 1A494E350A12358B00FDAFC1 /* JSHTMLDocument.h in Headers */, > 1A494BFB0A122F4400FDAFC1 /* JSHTMLElement.h in Headers */, > 938E65F109F09840008A48EC /* JSHTMLElementWrapperFactory.h in Headers */, >@@ -31073,6 +31072,7 @@ > 71B5AB2621F1D9F400376E5C /* PointerCaptureController.h in Headers */, > 317D3FF3215599F40034E3B9 /* PointerEvent.h in Headers */, > B2B1F7170D00CAA8004AEA64 /* PointerEventsHitRules.h in Headers */, >+ 71EADCD822087E720065A45F /* PointerID.h in Headers */, > 3FF813A71DBA8640009BF001 /* PointerLockController.h in Headers */, > 84730D921248F0B300D3A9C9 /* PointLightSource.h in Headers */, > 9705997A107D975200A50A7C /* PolicyChecker.h in Headers */, >@@ -31465,7 +31465,7 @@ > 931CBD11161A44E900E4C874 /* ScrollingStateTree.h in Headers */, > 1AF62F2614DAFEA10041556C /* ScrollingThread.h in Headers */, > 1AAADDA414DB409F00AF64B3 /* ScrollingTree.h in Headers */, >- 93C38C03164473DD00091EB2 /* ScrollingTreeFixedNode.h in Headers */, >+ 0F94B6472208FE3600157014 /* ScrollingTreeFixedNode.h in Headers */, > 0FD41E6821F80C0E000C006D /* ScrollingTreeFrameHostingNode.h in Headers */, > 0FEA3E88191B3BD7000F1B55 /* ScrollingTreeFrameScrollingNode.h in Headers */, > 0FC4E411187F82E10045882C /* ScrollingTreeFrameScrollingNodeIOS.h in Headers */, >@@ -31477,7 +31477,7 @@ > 9391A99D1629D70000297330 /* ScrollingTreeScrollingNode.h in Headers */, > A6D5A99D1629D70000297330 /* ScrollingTreeScrollingNodeDelegate.h in Headers */, > 0F37F0852202BF9800A89C0B /* ScrollingTreeScrollingNodeDelegateMac.h in Headers */, >- 0FB8890A167D2FA10010CDA5 /* ScrollingTreeStickyNode.h in Headers */, >+ 0F94B6492208FE3B00157014 /* ScrollingTreeStickyNode.h in Headers */, > 83C5795D1DA5C301006F9C97 /* ScrollIntoViewOptions.h in Headers */, > 7AAFE8D019CB8672000F56D8 /* ScrollLatchingState.h in Headers */, > 83C5795D1DA5C301006F9C86 /* ScrollLogicalPosition.h in Headers */, >diff --git a/Source/WebCore/page/scrolling/ScrollingThread.cpp b/Source/WebCore/page/scrolling/ScrollingThread.cpp >index 246666d2999cca8eadf53662b32e797e155b709c..b147ecfc0d44c7d56f672fa13b4112fb93c314bc 100644 >--- a/Source/WebCore/page/scrolling/ScrollingThread.cpp >+++ b/Source/WebCore/page/scrolling/ScrollingThread.cpp >@@ -104,6 +104,25 @@ void ScrollingThread::dispatchFunctionsFromScrollingThread() > function(); > } > >+#if PLATFORM(IOS_FAMILY) >+NO_RETURN_DUE_TO_ASSERT void ScrollingThread::initializeRunLoop() >+{ >+ ASSERT_NOT_REACHED(); >+} >+ >+void ScrollingThread::wakeUpRunLoop() >+{ >+} >+ >+void ScrollingThread::threadRunLoopSourceCallback(void*) >+{ >+} >+ >+void ScrollingThread::threadRunLoopSourceCallback() >+{ >+} >+#endif // PLATFORM(IOS_FAMILY) >+ > } // namespace WebCore > > #endif // ENABLE(ASYNC_SCROLLING) >diff --git a/Source/WebCore/page/scrolling/cocoa/ScrollingTreeFixedNode.h b/Source/WebCore/page/scrolling/cocoa/ScrollingTreeFixedNode.h >new file mode 100644 >index 0000000000000000000000000000000000000000..940729651922f4ba76bfa43f035be4887dd53a40 >--- /dev/null >+++ b/Source/WebCore/page/scrolling/cocoa/ScrollingTreeFixedNode.h >@@ -0,0 +1,62 @@ >+/* >+ * Copyright (C) 2012 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' >+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS >+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS >+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN >+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) >+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF >+ * THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+#pragma once >+ >+#if ENABLE(ASYNC_SCROLLING) >+ >+#include "ScrollingConstraints.h" >+#include "ScrollingTreeNode.h" >+#include <wtf/RetainPtr.h> >+ >+OBJC_CLASS CALayer; >+ >+namespace WebCore { >+ >+class FixedPositionViewportConstraints; >+ >+class ScrollingTreeFixedNode : public ScrollingTreeNode { >+public: >+ WEBCORE_EXPORT static Ref<ScrollingTreeFixedNode> create(ScrollingTree&, ScrollingNodeID); >+ >+ virtual ~ScrollingTreeFixedNode(); >+ >+private: >+ ScrollingTreeFixedNode(ScrollingTree&, ScrollingNodeID); >+ >+ void commitStateBeforeChildren(const ScrollingStateNode&) override; >+ void updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) override; >+ >+ void dumpProperties(WTF::TextStream&, ScrollingStateTreeAsTextBehavior) const override; >+ >+ FixedPositionViewportConstraints m_constraints; >+ RetainPtr<CALayer> m_layer; >+}; >+ >+} // namespace WebCore >+ >+SPECIALIZE_TYPE_TRAITS_SCROLLING_NODE(ScrollingTreeFixedNode, isFixedNode()) >+ >+#endif // ENABLE(ASYNC_SCROLLING) >diff --git a/Source/WebCore/page/scrolling/cocoa/ScrollingTreeFixedNode.mm b/Source/WebCore/page/scrolling/cocoa/ScrollingTreeFixedNode.mm >new file mode 100644 >index 0000000000000000000000000000000000000000..dc2c891569769d31bab43bf3027e6b8d2b4e2b48 >--- /dev/null >+++ b/Source/WebCore/page/scrolling/cocoa/ScrollingTreeFixedNode.mm >@@ -0,0 +1,122 @@ >+/* >+ * Copyright (C) 2012 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' >+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS >+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS >+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN >+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) >+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF >+ * THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+#import "config.h" >+#import "ScrollingTreeFixedNode.h" >+ >+#if ENABLE(ASYNC_SCROLLING) >+ >+#import "Logging.h" >+#import "ScrollingStateFixedNode.h" >+#import "ScrollingTree.h" >+#import <QuartzCore/CALayer.h> >+#import <wtf/text/TextStream.h> >+ >+namespace WebCore { >+ >+Ref<ScrollingTreeFixedNode> ScrollingTreeFixedNode::create(ScrollingTree& scrollingTree, ScrollingNodeID nodeID) >+{ >+ return adoptRef(*new ScrollingTreeFixedNode(scrollingTree, nodeID)); >+} >+ >+ScrollingTreeFixedNode::ScrollingTreeFixedNode(ScrollingTree& scrollingTree, ScrollingNodeID nodeID) >+ : ScrollingTreeNode(scrollingTree, ScrollingNodeType::Fixed, nodeID) >+{ >+ scrollingTree.fixedOrStickyNodeAdded(); >+} >+ >+ScrollingTreeFixedNode::~ScrollingTreeFixedNode() >+{ >+ scrollingTree().fixedOrStickyNodeRemoved(); >+} >+ >+void ScrollingTreeFixedNode::commitStateBeforeChildren(const ScrollingStateNode& stateNode) >+{ >+ const ScrollingStateFixedNode& fixedStateNode = downcast<ScrollingStateFixedNode>(stateNode); >+ >+ if (fixedStateNode.hasChangedProperty(ScrollingStateNode::Layer)) >+ m_layer = fixedStateNode.layer(); >+ >+ if (stateNode.hasChangedProperty(ScrollingStateFixedNode::ViewportConstraints)) >+ m_constraints = fixedStateNode.viewportConstraints(); >+} >+ >+namespace ScrollingTreeFixedNodeInternal { >+static inline CGPoint operator*(CGPoint& a, const CGSize& b) >+{ >+ return CGPointMake(a.x * b.width, a.y * b.height); >+} >+} >+ >+void ScrollingTreeFixedNode::updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) >+{ >+ using namespace ScrollingTreeFixedNodeInternal; >+ FloatPoint layerPosition = m_constraints.layerPositionForViewportRect(fixedPositionRect); >+ >+ LOG_WITH_STREAM(Scrolling, stream << "ScrollingTreeFixedNode " << scrollingNodeID() << " updateLayersAfterAncestorChange: new viewport " << fixedPositionRect << " viewportRectAtLastLayout " << m_constraints.viewportRectAtLastLayout() << " last layer pos " << m_constraints.layerPositionAtLastLayout() << " new offset from top " << (fixedPositionRect.y() - layerPosition.y())); >+ >+ layerPosition -= cumulativeDelta; >+ >+ CGRect layerBounds = [m_layer bounds]; >+ CGPoint anchorPoint = [m_layer anchorPoint]; >+ CGPoint newPosition = layerPosition - m_constraints.alignmentOffset() + anchorPoint * layerBounds.size; >+ >+ if (isnan(newPosition.x) || isnan(newPosition.y)) { >+ WTFLogAlways("Attempt to call [CALayer setPosition] with NaN: newPosition=(%f, %f) layerPosition=(%f, %f) alignmentOffset=(%f, %f)", >+ newPosition.x, newPosition.y, layerPosition.x(), layerPosition.y(), >+ m_constraints.alignmentOffset().width(), m_constraints.alignmentOffset().height()); >+ ASSERT_NOT_REACHED(); >+ return; >+ } >+ >+ [m_layer setPosition:newPosition]; >+ >+ if (!m_children) >+ return; >+ >+ FloatSize newDelta = layerPosition - m_constraints.layerPositionAtLastLayout() + cumulativeDelta; >+ >+ for (auto& child : *m_children) >+ child->updateLayersAfterAncestorChange(changedNode, fixedPositionRect, newDelta); >+} >+ >+void ScrollingTreeFixedNode::dumpProperties(TextStream& ts, ScrollingStateTreeAsTextBehavior behavior) const >+{ >+ ts << "fixed node"; >+ ScrollingTreeNode::dumpProperties(ts, behavior); >+ ts.dumpProperty("fixed constraints", m_constraints); >+ >+ if (behavior & ScrollingStateTreeAsTextBehaviorIncludeLayerPositions) { >+ FloatRect layerBounds = [m_layer bounds]; >+ FloatPoint anchorPoint = [m_layer anchorPoint]; >+ FloatPoint position = [m_layer position]; >+ FloatPoint layerTopLeft = position - toFloatSize(anchorPoint) * layerBounds.size() + m_constraints.alignmentOffset(); >+ ts.dumpProperty("layer top left", layerTopLeft); >+ } >+} >+ >+} // namespace WebCore >+ >+#endif // ENABLE(ASYNC_SCROLLING) >diff --git a/Source/WebCore/page/scrolling/cocoa/ScrollingTreeStickyNode.h b/Source/WebCore/page/scrolling/cocoa/ScrollingTreeStickyNode.h >new file mode 100644 >index 0000000000000000000000000000000000000000..2def5d2e7c20570031e03816da8a600d783fa6e0 >--- /dev/null >+++ b/Source/WebCore/page/scrolling/cocoa/ScrollingTreeStickyNode.h >@@ -0,0 +1,62 @@ >+/* >+ * Copyright (C) 2012 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' >+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS >+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS >+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN >+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) >+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF >+ * THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+#pragma once >+ >+#if ENABLE(ASYNC_SCROLLING) >+ >+#include "ScrollingConstraints.h" >+#include "ScrollingTreeNode.h" >+#include <wtf/RetainPtr.h> >+ >+OBJC_CLASS CALayer; >+ >+namespace WebCore { >+ >+class StickyPositionViewportConstraints; >+ >+class ScrollingTreeStickyNode : public ScrollingTreeNode { >+public: >+ WEBCORE_EXPORT static Ref<ScrollingTreeStickyNode> create(ScrollingTree&, ScrollingNodeID); >+ >+ virtual ~ScrollingTreeStickyNode(); >+ >+private: >+ ScrollingTreeStickyNode(ScrollingTree&, ScrollingNodeID); >+ >+ void commitStateBeforeChildren(const ScrollingStateNode&) override; >+ void updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) override; >+ >+ void dumpProperties(WTF::TextStream&, ScrollingStateTreeAsTextBehavior) const override; >+ >+ StickyPositionViewportConstraints m_constraints; >+ RetainPtr<CALayer> m_layer; >+}; >+ >+} // namespace WebCore >+ >+SPECIALIZE_TYPE_TRAITS_SCROLLING_NODE(ScrollingTreeStickyNode, isStickyNode()) >+ >+#endif // ENABLE(ASYNC_SCROLLING) >diff --git a/Source/WebCore/page/scrolling/cocoa/ScrollingTreeStickyNode.mm b/Source/WebCore/page/scrolling/cocoa/ScrollingTreeStickyNode.mm >new file mode 100644 >index 0000000000000000000000000000000000000000..937484ac308cdbf63b42f19add023d73b72015d8 >--- /dev/null >+++ b/Source/WebCore/page/scrolling/cocoa/ScrollingTreeStickyNode.mm >@@ -0,0 +1,129 @@ >+/* >+ * Copyright (C) 2012 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' >+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS >+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS >+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN >+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) >+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF >+ * THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+#import "config.h" >+#import "ScrollingTreeStickyNode.h" >+ >+#if ENABLE(ASYNC_SCROLLING) >+ >+#import "Logging.h" >+#import "ScrollingStateStickyNode.h" >+#import "ScrollingTree.h" >+#import "ScrollingTreeFrameScrollingNode.h" >+#import "ScrollingTreeOverflowScrollingNode.h" >+#import <QuartzCore/CALayer.h> >+#import <wtf/text/TextStream.h> >+ >+namespace WebCore { >+ >+Ref<ScrollingTreeStickyNode> ScrollingTreeStickyNode::create(ScrollingTree& scrollingTree, ScrollingNodeID nodeID) >+{ >+ return adoptRef(*new ScrollingTreeStickyNode(scrollingTree, nodeID)); >+} >+ >+ScrollingTreeStickyNode::ScrollingTreeStickyNode(ScrollingTree& scrollingTree, ScrollingNodeID nodeID) >+ : ScrollingTreeNode(scrollingTree, ScrollingNodeType::Sticky, nodeID) >+{ >+ scrollingTree.fixedOrStickyNodeAdded(); >+} >+ >+ScrollingTreeStickyNode::~ScrollingTreeStickyNode() >+{ >+ scrollingTree().fixedOrStickyNodeRemoved(); >+} >+ >+void ScrollingTreeStickyNode::commitStateBeforeChildren(const ScrollingStateNode& stateNode) >+{ >+ const ScrollingStateStickyNode& stickyStateNode = downcast<ScrollingStateStickyNode>(stateNode); >+ >+ if (stickyStateNode.hasChangedProperty(ScrollingStateNode::Layer)) >+ m_layer = stickyStateNode.layer(); >+ >+ if (stateNode.hasChangedProperty(ScrollingStateStickyNode::ViewportConstraints)) >+ m_constraints = stickyStateNode.viewportConstraints(); >+} >+ >+namespace ScrollingTreeStickyNodeInternal { >+static inline CGPoint operator*(CGPoint& a, const CGSize& b) >+{ >+ return CGPointMake(a.x * b.width, a.y * b.height); >+} >+} >+ >+void ScrollingTreeStickyNode::updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) >+{ >+ using namespace ScrollingTreeStickyNodeInternal; >+ bool adjustStickyLayer = false; >+ FloatRect constrainingRect; >+ >+ if (is<ScrollingTreeOverflowScrollingNode>(*parent())) { >+ constrainingRect = FloatRect(downcast<ScrollingTreeOverflowScrollingNode>(*parent()).scrollPosition(), m_constraints.constrainingRectAtLastLayout().size()); >+ adjustStickyLayer = true; >+ } else if (is<ScrollingTreeFrameScrollingNode>(*parent())) { >+ constrainingRect = fixedPositionRect; >+ adjustStickyLayer = true; >+ } >+ >+ LOG_WITH_STREAM(Scrolling, stream << "ScrollingTreeStickyNode " << scrollingNodeID() << " updateLayersAfterAncestorChange: new viewport " << fixedPositionRect << " constrainingRectAtLastLayout " << m_constraints.constrainingRectAtLastLayout() << " last layer pos " << m_constraints.layerPositionAtLastLayout() << " adjustStickyLayer " << adjustStickyLayer); >+ >+ FloatSize deltaForDescendants = cumulativeDelta; >+ >+ if (adjustStickyLayer) { >+ FloatPoint layerPosition = m_constraints.layerPositionForConstrainingRect(constrainingRect); >+ >+ CGRect layerBounds = [m_layer bounds]; >+ CGPoint anchorPoint = [m_layer anchorPoint]; >+ CGPoint newPosition = layerPosition - m_constraints.alignmentOffset() + anchorPoint * layerBounds.size; >+ [m_layer setPosition:newPosition]; >+ >+ deltaForDescendants = layerPosition - m_constraints.layerPositionAtLastLayout() + cumulativeDelta; >+ } >+ >+ if (!m_children) >+ return; >+ >+ for (auto& child : *m_children) >+ child->updateLayersAfterAncestorChange(changedNode, fixedPositionRect, deltaForDescendants); >+} >+ >+void ScrollingTreeStickyNode::dumpProperties(TextStream& ts, ScrollingStateTreeAsTextBehavior behavior) const >+{ >+ ts << "sticky node"; >+ >+ ScrollingTreeNode::dumpProperties(ts, behavior); >+ ts.dumpProperty("sticky constraints", m_constraints); >+ >+ if (behavior & ScrollingStateTreeAsTextBehaviorIncludeLayerPositions) { >+ FloatRect layerBounds = [m_layer bounds]; >+ FloatPoint anchorPoint = [m_layer anchorPoint]; >+ FloatPoint position = [m_layer position]; >+ FloatPoint layerTopLeft = position - toFloatSize(anchorPoint) * layerBounds.size() + m_constraints.alignmentOffset(); >+ ts.dumpProperty("layer top left", layerTopLeft); >+ } >+} >+ >+} // namespace WebCore >+ >+#endif // ENABLE(ASYNC_SCROLLING) >diff --git a/Source/WebCore/page/scrolling/mac/ScrollingThreadMac.mm b/Source/WebCore/page/scrolling/mac/ScrollingThreadMac.mm >index 56b1cdb8b161d090afa898532aa20b61ea9f95b0..6d2cda094105f5644d8c495314bfc471655b1b43 100644 >--- a/Source/WebCore/page/scrolling/mac/ScrollingThreadMac.mm >+++ b/Source/WebCore/page/scrolling/mac/ScrollingThreadMac.mm >@@ -26,7 +26,7 @@ > #include "config.h" > #include "ScrollingThread.h" > >-#if ENABLE(ASYNC_SCROLLING) >+#if ENABLE(ASYNC_SCROLLING) && PLATFORM(MAC) > > #include <mutex> > >@@ -72,4 +72,4 @@ void ScrollingThread::threadRunLoopSourceCallback() > > } // namespace WebCore > >-#endif // ENABLE(ASYNC_SCROLLING) >+#endif // ENABLE(ASYNC_SCROLLING) && PLATFORM(MAC) >diff --git a/Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.h b/Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.h >deleted file mode 100644 >index 940729651922f4ba76bfa43f035be4887dd53a40..0000000000000000000000000000000000000000 >--- a/Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.h >+++ /dev/null >@@ -1,62 +0,0 @@ >-/* >- * Copyright (C) 2012 Apple Inc. All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' >- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS >- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS >- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN >- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) >- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF >- * THE POSSIBILITY OF SUCH DAMAGE. >- */ >- >-#pragma once >- >-#if ENABLE(ASYNC_SCROLLING) >- >-#include "ScrollingConstraints.h" >-#include "ScrollingTreeNode.h" >-#include <wtf/RetainPtr.h> >- >-OBJC_CLASS CALayer; >- >-namespace WebCore { >- >-class FixedPositionViewportConstraints; >- >-class ScrollingTreeFixedNode : public ScrollingTreeNode { >-public: >- WEBCORE_EXPORT static Ref<ScrollingTreeFixedNode> create(ScrollingTree&, ScrollingNodeID); >- >- virtual ~ScrollingTreeFixedNode(); >- >-private: >- ScrollingTreeFixedNode(ScrollingTree&, ScrollingNodeID); >- >- void commitStateBeforeChildren(const ScrollingStateNode&) override; >- void updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) override; >- >- void dumpProperties(WTF::TextStream&, ScrollingStateTreeAsTextBehavior) const override; >- >- FixedPositionViewportConstraints m_constraints; >- RetainPtr<CALayer> m_layer; >-}; >- >-} // namespace WebCore >- >-SPECIALIZE_TYPE_TRAITS_SCROLLING_NODE(ScrollingTreeFixedNode, isFixedNode()) >- >-#endif // ENABLE(ASYNC_SCROLLING) >diff --git a/Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.mm b/Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.mm >deleted file mode 100644 >index dc2c891569769d31bab43bf3027e6b8d2b4e2b48..0000000000000000000000000000000000000000 >--- a/Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.mm >+++ /dev/null >@@ -1,122 +0,0 @@ >-/* >- * Copyright (C) 2012 Apple Inc. All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' >- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS >- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS >- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN >- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) >- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF >- * THE POSSIBILITY OF SUCH DAMAGE. >- */ >- >-#import "config.h" >-#import "ScrollingTreeFixedNode.h" >- >-#if ENABLE(ASYNC_SCROLLING) >- >-#import "Logging.h" >-#import "ScrollingStateFixedNode.h" >-#import "ScrollingTree.h" >-#import <QuartzCore/CALayer.h> >-#import <wtf/text/TextStream.h> >- >-namespace WebCore { >- >-Ref<ScrollingTreeFixedNode> ScrollingTreeFixedNode::create(ScrollingTree& scrollingTree, ScrollingNodeID nodeID) >-{ >- return adoptRef(*new ScrollingTreeFixedNode(scrollingTree, nodeID)); >-} >- >-ScrollingTreeFixedNode::ScrollingTreeFixedNode(ScrollingTree& scrollingTree, ScrollingNodeID nodeID) >- : ScrollingTreeNode(scrollingTree, ScrollingNodeType::Fixed, nodeID) >-{ >- scrollingTree.fixedOrStickyNodeAdded(); >-} >- >-ScrollingTreeFixedNode::~ScrollingTreeFixedNode() >-{ >- scrollingTree().fixedOrStickyNodeRemoved(); >-} >- >-void ScrollingTreeFixedNode::commitStateBeforeChildren(const ScrollingStateNode& stateNode) >-{ >- const ScrollingStateFixedNode& fixedStateNode = downcast<ScrollingStateFixedNode>(stateNode); >- >- if (fixedStateNode.hasChangedProperty(ScrollingStateNode::Layer)) >- m_layer = fixedStateNode.layer(); >- >- if (stateNode.hasChangedProperty(ScrollingStateFixedNode::ViewportConstraints)) >- m_constraints = fixedStateNode.viewportConstraints(); >-} >- >-namespace ScrollingTreeFixedNodeInternal { >-static inline CGPoint operator*(CGPoint& a, const CGSize& b) >-{ >- return CGPointMake(a.x * b.width, a.y * b.height); >-} >-} >- >-void ScrollingTreeFixedNode::updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) >-{ >- using namespace ScrollingTreeFixedNodeInternal; >- FloatPoint layerPosition = m_constraints.layerPositionForViewportRect(fixedPositionRect); >- >- LOG_WITH_STREAM(Scrolling, stream << "ScrollingTreeFixedNode " << scrollingNodeID() << " updateLayersAfterAncestorChange: new viewport " << fixedPositionRect << " viewportRectAtLastLayout " << m_constraints.viewportRectAtLastLayout() << " last layer pos " << m_constraints.layerPositionAtLastLayout() << " new offset from top " << (fixedPositionRect.y() - layerPosition.y())); >- >- layerPosition -= cumulativeDelta; >- >- CGRect layerBounds = [m_layer bounds]; >- CGPoint anchorPoint = [m_layer anchorPoint]; >- CGPoint newPosition = layerPosition - m_constraints.alignmentOffset() + anchorPoint * layerBounds.size; >- >- if (isnan(newPosition.x) || isnan(newPosition.y)) { >- WTFLogAlways("Attempt to call [CALayer setPosition] with NaN: newPosition=(%f, %f) layerPosition=(%f, %f) alignmentOffset=(%f, %f)", >- newPosition.x, newPosition.y, layerPosition.x(), layerPosition.y(), >- m_constraints.alignmentOffset().width(), m_constraints.alignmentOffset().height()); >- ASSERT_NOT_REACHED(); >- return; >- } >- >- [m_layer setPosition:newPosition]; >- >- if (!m_children) >- return; >- >- FloatSize newDelta = layerPosition - m_constraints.layerPositionAtLastLayout() + cumulativeDelta; >- >- for (auto& child : *m_children) >- child->updateLayersAfterAncestorChange(changedNode, fixedPositionRect, newDelta); >-} >- >-void ScrollingTreeFixedNode::dumpProperties(TextStream& ts, ScrollingStateTreeAsTextBehavior behavior) const >-{ >- ts << "fixed node"; >- ScrollingTreeNode::dumpProperties(ts, behavior); >- ts.dumpProperty("fixed constraints", m_constraints); >- >- if (behavior & ScrollingStateTreeAsTextBehaviorIncludeLayerPositions) { >- FloatRect layerBounds = [m_layer bounds]; >- FloatPoint anchorPoint = [m_layer anchorPoint]; >- FloatPoint position = [m_layer position]; >- FloatPoint layerTopLeft = position - toFloatSize(anchorPoint) * layerBounds.size() + m_constraints.alignmentOffset(); >- ts.dumpProperty("layer top left", layerTopLeft); >- } >-} >- >-} // namespace WebCore >- >-#endif // ENABLE(ASYNC_SCROLLING) >diff --git a/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h b/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h >index d1442cd0c73441dc92f3b84adc884b152b81c384..c4d83fbd39bfda1e1879c438151a12fea0e4f0bc 100644 >--- a/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h >+++ b/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h >@@ -27,7 +27,7 @@ > > #include "ScrollingTreeScrollingNodeDelegate.h" > >-#if PLATFORM(MAC) && ENABLE(ASYNC_SCROLLING) >+#if ENABLE(ASYNC_SCROLLING) && PLATFORM(MAC) > > #include "ScrollController.h" > >diff --git a/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm b/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm >index 6823131ea12ae0d5b929270cda0bb55f6f633df7..fd666fd7fa48d4ffb8cba942e2ce39d5807d1bd7 100644 >--- a/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm >+++ b/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm >@@ -26,7 +26,7 @@ > #import "config.h" > #import "ScrollingTreeScrollingNodeDelegateMac.h" > >-#if PLATFORM(MAC) && ENABLE(ASYNC_SCROLLING) >+#if ENABLE(ASYNC_SCROLLING) && PLATFORM(MAC) > > #import "Logging.h" > #import "ScrollingTree.h" >diff --git a/Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.h b/Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.h >deleted file mode 100644 >index 2def5d2e7c20570031e03816da8a600d783fa6e0..0000000000000000000000000000000000000000 >--- a/Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.h >+++ /dev/null >@@ -1,62 +0,0 @@ >-/* >- * Copyright (C) 2012 Apple Inc. All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' >- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS >- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS >- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN >- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) >- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF >- * THE POSSIBILITY OF SUCH DAMAGE. >- */ >- >-#pragma once >- >-#if ENABLE(ASYNC_SCROLLING) >- >-#include "ScrollingConstraints.h" >-#include "ScrollingTreeNode.h" >-#include <wtf/RetainPtr.h> >- >-OBJC_CLASS CALayer; >- >-namespace WebCore { >- >-class StickyPositionViewportConstraints; >- >-class ScrollingTreeStickyNode : public ScrollingTreeNode { >-public: >- WEBCORE_EXPORT static Ref<ScrollingTreeStickyNode> create(ScrollingTree&, ScrollingNodeID); >- >- virtual ~ScrollingTreeStickyNode(); >- >-private: >- ScrollingTreeStickyNode(ScrollingTree&, ScrollingNodeID); >- >- void commitStateBeforeChildren(const ScrollingStateNode&) override; >- void updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) override; >- >- void dumpProperties(WTF::TextStream&, ScrollingStateTreeAsTextBehavior) const override; >- >- StickyPositionViewportConstraints m_constraints; >- RetainPtr<CALayer> m_layer; >-}; >- >-} // namespace WebCore >- >-SPECIALIZE_TYPE_TRAITS_SCROLLING_NODE(ScrollingTreeStickyNode, isStickyNode()) >- >-#endif // ENABLE(ASYNC_SCROLLING) >diff --git a/Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.mm b/Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.mm >deleted file mode 100644 >index 937484ac308cdbf63b42f19add023d73b72015d8..0000000000000000000000000000000000000000 >--- a/Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.mm >+++ /dev/null >@@ -1,129 +0,0 @@ >-/* >- * Copyright (C) 2012 Apple Inc. All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' >- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS >- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS >- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN >- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) >- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF >- * THE POSSIBILITY OF SUCH DAMAGE. >- */ >- >-#import "config.h" >-#import "ScrollingTreeStickyNode.h" >- >-#if ENABLE(ASYNC_SCROLLING) >- >-#import "Logging.h" >-#import "ScrollingStateStickyNode.h" >-#import "ScrollingTree.h" >-#import "ScrollingTreeFrameScrollingNode.h" >-#import "ScrollingTreeOverflowScrollingNode.h" >-#import <QuartzCore/CALayer.h> >-#import <wtf/text/TextStream.h> >- >-namespace WebCore { >- >-Ref<ScrollingTreeStickyNode> ScrollingTreeStickyNode::create(ScrollingTree& scrollingTree, ScrollingNodeID nodeID) >-{ >- return adoptRef(*new ScrollingTreeStickyNode(scrollingTree, nodeID)); >-} >- >-ScrollingTreeStickyNode::ScrollingTreeStickyNode(ScrollingTree& scrollingTree, ScrollingNodeID nodeID) >- : ScrollingTreeNode(scrollingTree, ScrollingNodeType::Sticky, nodeID) >-{ >- scrollingTree.fixedOrStickyNodeAdded(); >-} >- >-ScrollingTreeStickyNode::~ScrollingTreeStickyNode() >-{ >- scrollingTree().fixedOrStickyNodeRemoved(); >-} >- >-void ScrollingTreeStickyNode::commitStateBeforeChildren(const ScrollingStateNode& stateNode) >-{ >- const ScrollingStateStickyNode& stickyStateNode = downcast<ScrollingStateStickyNode>(stateNode); >- >- if (stickyStateNode.hasChangedProperty(ScrollingStateNode::Layer)) >- m_layer = stickyStateNode.layer(); >- >- if (stateNode.hasChangedProperty(ScrollingStateStickyNode::ViewportConstraints)) >- m_constraints = stickyStateNode.viewportConstraints(); >-} >- >-namespace ScrollingTreeStickyNodeInternal { >-static inline CGPoint operator*(CGPoint& a, const CGSize& b) >-{ >- return CGPointMake(a.x * b.width, a.y * b.height); >-} >-} >- >-void ScrollingTreeStickyNode::updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) >-{ >- using namespace ScrollingTreeStickyNodeInternal; >- bool adjustStickyLayer = false; >- FloatRect constrainingRect; >- >- if (is<ScrollingTreeOverflowScrollingNode>(*parent())) { >- constrainingRect = FloatRect(downcast<ScrollingTreeOverflowScrollingNode>(*parent()).scrollPosition(), m_constraints.constrainingRectAtLastLayout().size()); >- adjustStickyLayer = true; >- } else if (is<ScrollingTreeFrameScrollingNode>(*parent())) { >- constrainingRect = fixedPositionRect; >- adjustStickyLayer = true; >- } >- >- LOG_WITH_STREAM(Scrolling, stream << "ScrollingTreeStickyNode " << scrollingNodeID() << " updateLayersAfterAncestorChange: new viewport " << fixedPositionRect << " constrainingRectAtLastLayout " << m_constraints.constrainingRectAtLastLayout() << " last layer pos " << m_constraints.layerPositionAtLastLayout() << " adjustStickyLayer " << adjustStickyLayer); >- >- FloatSize deltaForDescendants = cumulativeDelta; >- >- if (adjustStickyLayer) { >- FloatPoint layerPosition = m_constraints.layerPositionForConstrainingRect(constrainingRect); >- >- CGRect layerBounds = [m_layer bounds]; >- CGPoint anchorPoint = [m_layer anchorPoint]; >- CGPoint newPosition = layerPosition - m_constraints.alignmentOffset() + anchorPoint * layerBounds.size; >- [m_layer setPosition:newPosition]; >- >- deltaForDescendants = layerPosition - m_constraints.layerPositionAtLastLayout() + cumulativeDelta; >- } >- >- if (!m_children) >- return; >- >- for (auto& child : *m_children) >- child->updateLayersAfterAncestorChange(changedNode, fixedPositionRect, deltaForDescendants); >-} >- >-void ScrollingTreeStickyNode::dumpProperties(TextStream& ts, ScrollingStateTreeAsTextBehavior behavior) const >-{ >- ts << "sticky node"; >- >- ScrollingTreeNode::dumpProperties(ts, behavior); >- ts.dumpProperty("sticky constraints", m_constraints); >- >- if (behavior & ScrollingStateTreeAsTextBehaviorIncludeLayerPositions) { >- FloatRect layerBounds = [m_layer bounds]; >- FloatPoint anchorPoint = [m_layer anchorPoint]; >- FloatPoint position = [m_layer position]; >- FloatPoint layerTopLeft = position - toFloatSize(anchorPoint) * layerBounds.size() + m_constraints.alignmentOffset(); >- ts.dumpProperty("layer top left", layerTopLeft); >- } >-} >- >-} // namespace WebCore >- >-#endif // ENABLE(ASYNC_SCROLLING) >diff --git a/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h b/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h >index 9411ed26212ae1850e22774f31936b073ed7f95a..74661fd3de23b2c065f1f207c02b940ecc1270d2 100644 >--- a/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h >+++ b/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h >@@ -25,7 +25,7 @@ > > #pragma once > >-#if !PLATFORM(IOS_FAMILY) >+#if PLATFORM(MAC) > > #include "CallbackID.h" > #include "DrawingArea.h" >@@ -186,5 +186,4 @@ private: > > SPECIALIZE_TYPE_TRAITS_DRAWING_AREA(TiledCoreAnimationDrawingArea, DrawingAreaTypeTiledCoreAnimation) > >-#endif // !PLATFORM(IOS_FAMILY) >- >+#endif // PLATFORM(MAC) >diff --git a/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm b/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm >index b5916074ce2221334d63a9b850065518d28363ee..324d063162332b8d4f66621679b05271129478c2 100644 >--- a/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm >+++ b/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm >@@ -26,7 +26,7 @@ > #import "config.h" > #import "TiledCoreAnimationDrawingArea.h" > >-#if !PLATFORM(IOS_FAMILY) >+#if PLATFORM(MAC) > > #import "ColorSpaceData.h" > #import "DrawingAreaProxyMessages.h" >@@ -999,4 +999,4 @@ void TiledCoreAnimationDrawingArea::layerFlushThrottlingTimerFired() > > } // namespace WebKit > >-#endif // !PLATFORM(IOS_FAMILY) >+#endif // PLATFORM(MAC)
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 194245
:
361118
|
361123
| 361128