Changeset 186392 in webkit
- Timestamp:
- Jul 6, 2015, 6:16:24 PM (10 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 deleted
- 33 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/CMakeLists.txt
r186263 r186392 1354 1354 css/WebKitCSSMatrix.cpp 1355 1355 css/WebKitCSSRegionRule.cpp 1356 css/WebKitCSSResourceValue.cpp1357 1356 css/WebKitCSSTransformValue.cpp 1358 1357 css/WebKitCSSViewportRule.cpp … … 2164 2163 platform/graphics/IntSize.cpp 2165 2164 platform/graphics/LayoutRect.cpp 2166 platform/graphics/MaskImageOperation.cpp2167 2165 platform/graphics/MediaPlayer.cpp 2168 2166 platform/graphics/NamedImageGeneratedImage.cpp … … 2374 2372 rendering/RenderLayerCompositor.cpp 2375 2373 rendering/RenderLayerFilterInfo.cpp 2376 rendering/RenderLayerMaskImageInfo.cpp2377 2374 rendering/RenderLayerModelObject.cpp 2378 2375 rendering/RenderLineBoxList.cpp -
trunk/Source/WebCore/ChangeLog
r186391 r186392 1 2015-07-06 Simon Fraser <simon.fraser@apple.com> 2 3 Revert use of SVG <mask> elements for -webkit-mask-image (r176798, r177494) 4 https://bugs.webkit.org/show_bug.cgi?id=146653 5 6 Reviewed by Dean Jackson. 7 8 Fixes rdar://problem/21435233. 9 10 r177494 caused a number of regressions (bugs 141857, 146509, 146561), added new layering violations, and 11 was not being maintained, so revert it. 12 13 This patch reverts r176798. 14 15 * CMakeLists.txt: 16 * WebCore.vcxproj/WebCore.vcxproj: 17 * WebCore.vcxproj/WebCore.vcxproj.filters: 18 * WebCore.xcodeproj/project.pbxproj: 19 * css/CSSValue.cpp: 20 (WebCore::CSSValue::cssText): Deleted. 21 (WebCore::CSSValue::destroy): Deleted. 22 * css/CSSValue.h: 23 (WebCore::CSSValue::isWebKitCSSResourceValue): Deleted. 24 * css/StyleBuilderConverter.h: 25 (WebCore::maskImageValueFromIterator): Deleted. 26 * css/StyleResolver.cpp: 27 (WebCore::StyleResolver::State::clear): Deleted. 28 * css/StyleResolver.h: 29 (WebCore::StyleResolver::State::maskImagesWithPendingSVGDocuments): Deleted. 30 * css/WebKitCSSResourceValue.cpp: Removed. 31 * css/WebKitCSSResourceValue.h: Removed. 32 * loader/cache/CachedResourceLoader.cpp: 33 (WebCore::CachedResourceLoader::addCachedResource): Deleted. 34 * loader/cache/CachedResourceLoader.h: 35 * loader/cache/CachedSVGDocument.cpp: 36 (WebCore::CachedSVGDocument::finishLoading): 37 (WebCore::CachedSVGDocument::CachedSVGDocument): Deleted. 38 * loader/cache/CachedSVGDocument.h: 39 * loader/cache/CachedSVGDocumentReference.cpp: 40 (WebCore::CachedSVGDocumentReference::CachedSVGDocumentReference): 41 (WebCore::CachedSVGDocumentReference::~CachedSVGDocumentReference): 42 (WebCore::CachedSVGDocumentReference::load): 43 * loader/cache/CachedSVGDocumentReference.h: 44 * page/FrameView.cpp: 45 (WebCore::FrameView::containsSVGDocument): Deleted. 46 * page/FrameView.h: 47 * page/Page.cpp: 48 (WebCore::Page::createPageFromBuffer): Deleted. 49 * page/Page.h: 50 * platform/ScrollView.h: 51 (WebCore::ScrollView::containsSVGDocument): Deleted. 52 * platform/graphics/MaskImageOperation.cpp: Removed. 53 * platform/graphics/MaskImageOperation.h: Removed. 54 * rendering/RenderLayer.cpp: 55 (WebCore::RenderLayer::RenderLayer): Deleted. 56 * rendering/RenderLayer.h: 57 * rendering/RenderLayerFilterInfo.cpp: 58 * rendering/RenderLayerFilterInfo.h: 59 * rendering/RenderLayerMaskImageInfo.h: Removed. 60 * rendering/style/FillLayer.cpp: 61 (WebCore::FillLayer::operator==): 62 (WebCore::FillLayer::cullEmptyLayers): 63 (WebCore::layerImagesIdentical): 64 (WebCore::FillLayer::FillLayer): Deleted. 65 (WebCore::FillLayer::operator=): Deleted. 66 (WebCore::FillLayer::hasNonEmptyMaskImage): Deleted. 67 (WebCore::FillLayer::imagesAreLoaded): Deleted. 68 * rendering/style/FillLayer.h: 69 (WebCore::FillLayer::maskImage): Deleted. 70 (WebCore::FillLayer::imageOrMaskImage): Deleted. 71 (WebCore::FillLayer::setMaskImage): Deleted. 72 (WebCore::FillLayer::clearMaskImage): Deleted. 73 (WebCore::FillLayer::hasMaskImage): Deleted. 74 * rendering/svg/RenderSVGResourceMasker.cpp: 75 (WebCore::RenderSVGResourceMasker::applyResource): 76 (WebCore::RenderSVGResourceMasker::applySVGMask): Deleted. 77 (WebCore::RenderSVGResourceMasker::drawMaskForRenderer): Deleted. 78 * rendering/svg/RenderSVGResourceMasker.h: 79 * svg/SVGMaskElement.cpp: 80 (WebCore::SVGMaskElement::createElementRenderer): 81 (WebCore::SVGMaskElement::addClientRenderLayer): Deleted. 82 (WebCore::SVGMaskElement::removeClientRenderLayer): Deleted. 83 * svg/SVGMaskElement.h: 84 * svg/SVGUseElement.cpp: 85 (WebCore::SVGUseElement::updateExternalDocument): 86 * svg/graphics/SVGImage.cpp: 87 (WebCore::SVGImage::dataChanged): 88 1 89 2015-07-06 Simon Fraser <simon.fraser@apple.com> 2 90 -
trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj
r186201 r186392 863 863 <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> 864 864 </ClCompile> 865 <ClCompile Include="..\css\WebKitCSSResourceValue.cpp" />866 865 <ClCompile Include="..\DerivedSources.cpp"> 867 866 <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4819;%(DisableSpecificWarnings)</DisableSpecificWarnings> … … 7584 7583 <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Production|x64'">true</ExcludedFromBuild> 7585 7584 </ClCompile> 7586 <ClCompile Include="..\platform\graphics\MaskImageOperation.cpp" />7587 7585 <ClCompile Include="..\platform\graphics\opengl\Extensions3DOpenGLCommon.cpp" /> 7588 7586 <ClCompile Include="..\platform\graphics\opengl\Extensions3DOpenGLES.cpp" /> … … 8103 8101 <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Production|x64'">true</ExcludedFromBuild> 8104 8102 </ClCompile> 8105 <ClCompile Include="..\rendering\RenderLayerMaskImageInfo.cpp" />8106 8103 <ClCompile Include="..\rendering\style\StyleCachedImageSet.cpp"> 8107 8104 <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugSuffix|Win32'">true</ExcludedFromBuild> … … 19253 19250 <ClInclude Include="..\accessibility\AccessibilityNodeObject.h" /> 19254 19251 <ClInclude Include="..\css\CSSImageSetValue.h" /> 19255 <ClInclude Include="..\css\WebKitCSSResourceValue.h" />19256 19252 <ClInclude Include="..\ForwardingHeaders\bindings\ScriptFunctionCall.h" /> 19257 19253 <ClInclude Include="..\ForwardingHeaders\bindings\ScriptObject.h" /> … … 19814 19810 <ClInclude Include="..\platform\graphics\gstreamer\VideoTrackPrivateGStreamer.h" /> 19815 19811 <ClInclude Include="..\platform\graphics\gstreamer\WebKitWebSourceGStreamer.h" /> 19816 <ClInclude Include="..\platform\graphics\MaskImageOperation.h" />19817 19812 <ClInclude Include="..\platform\graphics\MediaPlayerPrivate.h" /> 19818 19813 <ClInclude Include="..\platform\graphics\opengl\Extensions3DOpenGLCommon.h" /> … … 19948 19943 <ClInclude Include="..\platform\win\WebCoreInstanceHandle.h" /> 19949 19944 <ClInclude Include="..\rendering\HitTestLocation.h" /> 19950 <ClInclude Include="..\rendering\RenderLayerMaskImageInfo.h" />19951 19945 <ClInclude Include="..\rendering\style\StyleCachedImageSet.h" /> 19952 19946 <ClInclude Include="..\WebCorePrefix.h" /> -
trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters
r186201 r186392 7106 7106 <Filter>editing</Filter> 7107 7107 </ClCompile> 7108 <ClCompile Include="..\platform\graphics\MaskImageOperation.cpp">7109 <Filter>platform\graphics</Filter>7110 </ClCompile>7111 <ClCompile Include="..\rendering\RenderLayerMaskImageInfo.cpp">7112 <Filter>rendering</Filter>7113 </ClCompile>7114 <ClCompile Include="..\css\WebKitCSSResourceValue.cpp">7115 <Filter>css</Filter>7116 </ClCompile>7117 7108 <ClCompile Include="$(ConfigurationBuildDir)\obj$(PlatformArchitecture)\WebCore\DerivedSources\JSEXTsRGB.cpp"> 7118 7109 <Filter>DerivedSources</Filter> … … 14543 14534 <ClInclude Include="..\platform\graphics\avfoundation\MediaTimeAVFoundation.h"> 14544 14535 <Filter>platform\graphics\avfoundation</Filter> 14545 </ClInclude>14546 <ClInclude Include="..\platform\graphics\MaskImageOperation.h">14547 <Filter>platform\graphics</Filter>14548 </ClInclude>14549 <ClInclude Include="..\rendering\RenderLayerMaskImageInfo.h">14550 <Filter>rendering</Filter>14551 </ClInclude>14552 <ClInclude Include="..\css\WebKitCSSResourceValue.h">14553 <Filter>css</Filter>14554 14536 </ClInclude> 14555 14537 <ClInclude Include="$(ConfigurationBuildDir)\obj$(PlatformArchitecture)\$(ProjectName)\DerivedSources\JSEXTsRGB.h"> -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r186391 r186392 2323 2323 6C4C96DE1AD4483500365A50 /* JSReadableStreamController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6C4C96DA1AD4483500365A50 /* JSReadableStreamController.cpp */; }; 2324 2324 6C4C96DF1AD4483500365A50 /* JSReadableStreamController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C4C96DB1AD4483500365A50 /* JSReadableStreamController.h */; }; 2325 6C568CB019DAFEA000430CA2 /* MaskImageOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6C568CAE19DAFEA000430CA2 /* MaskImageOperation.cpp */; };2326 6C568CB119DAFEA000430CA2 /* MaskImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C568CAF19DAFEA000430CA2 /* MaskImageOperation.h */; settings = {ATTRIBUTES = (Private, ); }; };2327 2325 6C638895A96CCEE50C8C946C /* CachedResourceRequestInitiators.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C638893A96CCEE50C8C946C /* CachedResourceRequestInitiators.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2328 2326 6C638896A96CCEE50C8C946C /* CachedResourceRequestInitiators.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6C638894A96CCEE50C8C946C /* CachedResourceRequestInitiators.cpp */; }; 2329 6C6CCAB019DC42B90043D5DB /* WebKitCSSResourceValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6C6CCAAE19DC42B90043D5DB /* WebKitCSSResourceValue.cpp */; };2330 6C6CCAB119DC42B90043D5DB /* WebKitCSSResourceValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C6CCAAF19DC42B90043D5DB /* WebKitCSSResourceValue.h */; };2331 6CBFE4A519EBF2D400CA2F9D /* RenderLayerMaskImageInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CBFE4A319EBF2D400CA2F9D /* RenderLayerMaskImageInfo.h */; };2332 2327 6CDDE8D01770BB220016E072 /* RegionOversetState.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C70A81417707C49009A446E /* RegionOversetState.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2333 2328 6E0E569B183BFFE600E0E8D5 /* FloatRoundedRect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6E0E5699183BFFE600E0E8D5 /* FloatRoundedRect.cpp */; }; … … 9603 9598 6C4C96DA1AD4483500365A50 /* JSReadableStreamController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSReadableStreamController.cpp; sourceTree = "<group>"; }; 9604 9599 6C4C96DB1AD4483500365A50 /* JSReadableStreamController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSReadableStreamController.h; sourceTree = "<group>"; }; 9605 6C568CAE19DAFEA000430CA2 /* MaskImageOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MaskImageOperation.cpp; sourceTree = "<group>"; };9606 6C568CAF19DAFEA000430CA2 /* MaskImageOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MaskImageOperation.h; sourceTree = "<group>"; };9607 9600 6C638893A96CCEE50C8C946C /* CachedResourceRequestInitiators.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CachedResourceRequestInitiators.h; sourceTree = "<group>"; }; 9608 9601 6C638894A96CCEE50C8C946C /* CachedResourceRequestInitiators.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CachedResourceRequestInitiators.cpp; sourceTree = "<group>"; }; 9609 6C6CCAAE19DC42B90043D5DB /* WebKitCSSResourceValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebKitCSSResourceValue.cpp; sourceTree = "<group>"; };9610 6C6CCAAF19DC42B90043D5DB /* WebKitCSSResourceValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebKitCSSResourceValue.h; sourceTree = "<group>"; };9611 9602 6C70A81417707C49009A446E /* RegionOversetState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegionOversetState.h; sourceTree = "<group>"; }; 9612 6CBFE4A319EBF2D400CA2F9D /* RenderLayerMaskImageInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderLayerMaskImageInfo.h; sourceTree = "<group>"; };9613 9603 6E0E5699183BFFE600E0E8D5 /* FloatRoundedRect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FloatRoundedRect.cpp; sourceTree = "<group>"; }; 9614 9604 6E0E569A183BFFE600E0E8D5 /* FloatRoundedRect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FloatRoundedRect.h; sourceTree = "<group>"; }; … … 20995 20985 141DC04D164834B900371E5A /* LayoutRect.h */, 20996 20986 141DC04E164834B900371E5A /* LayoutSize.h */, 20997 6C568CAE19DAFEA000430CA2 /* MaskImageOperation.cpp */,20998 6C568CAF19DAFEA000430CA2 /* MaskImageOperation.h */,20999 20987 07E3DFD01A9E786500764CA8 /* MediaPlaybackTarget.h */, 21000 20988 079216531AA560AA00A3C049 /* MediaPlaybackTargetClient.h */, … … 22878 22866 50D10D971545F5760096D288 /* RenderLayerFilterInfo.cpp */, 22879 22867 50D10D981545F5760096D288 /* RenderLayerFilterInfo.h */, 22880 6CBFE4A319EBF2D400CA2F9D /* RenderLayerMaskImageInfo.h */,22881 22868 3C244FE5A375AC633F88BE6F /* RenderLayerModelObject.cpp */, 22882 22869 3C244FE4A375AC633F88BE6F /* RenderLayerModelObject.h */, -
trunk/Source/WebCore/css/CSSValue.cpp
r185731 r186392 58 58 #include "SVGPaint.h" 59 59 #include "WebKitCSSFilterValue.h" 60 #include "WebKitCSSResourceValue.h"61 60 #include "WebKitCSSTransformValue.h" 62 61 … … 330 329 return downcast<CSSAnimationTriggerScrollValue>(*this).customCSSText(); 331 330 #endif 332 case WebKitCSSResourceClass:333 return downcast<WebKitCSSResourceValue>(*this).customCSSText();334 331 case CSSContentDistributionClass: 335 332 return downcast<CSSContentDistributionValue>(*this).customCSSText(); … … 454 451 return; 455 452 #endif 456 case WebKitCSSResourceClass:457 delete downcast<WebKitCSSResourceValue>(this);458 return;459 453 case CSSContentDistributionClass: 460 454 delete downcast<CSSContentDistributionValue>(this); -
trunk/Source/WebCore/css/CSSValue.h
r186391 r186392 107 107 bool isSVGPaint() const { return m_classType == SVGPaintClass; } 108 108 bool isUnicodeRangeValue() const { return m_classType == UnicodeRangeClass; } 109 bool isWebKitCSSResourceValue() const { return m_classType == WebKitCSSResourceClass; }110 109 111 110 #if ENABLE(CSS_ANIMATIONS_LEVEL_2) … … 189 188 GridLineNamesClass, 190 189 #endif 191 WebKitCSSResourceClass192 193 190 // Do not append non-list class types here. 194 191 }; -
trunk/Source/WebCore/css/StyleBuilderConverter.h
r186391 r186392 50 50 #include "StyleScrollSnapPoints.h" 51 51 #include "TransformFunctions.h" 52 #include "WebKitCSSResourceValue.h"53 52 #include <wtf/Optional.h> 54 53 … … 1005 1004 } 1006 1005 1007 static inline WebKitCSSResourceValue* maskImageValueFromIterator(CSSValueList& maskImagesList, CSSValueList::iterator it)1008 {1009 // May also be a CSSInitialValue.1010 if (it == maskImagesList.end() || !is<WebKitCSSResourceValue>(it->get()))1011 return nullptr;1012 return &downcast<WebKitCSSResourceValue>(it->get());1013 }1014 1015 1006 inline RefPtr<FontFeatureSettings> StyleBuilderConverter::convertFontFeatureSettings(StyleResolver&, CSSValue& value) 1016 1007 { -
trunk/Source/WebCore/css/StyleResolver.cpp
r186391 r186392 134 134 #include "WebKitCSSFilterValue.h" 135 135 #include "WebKitCSSRegionRule.h" 136 #include "WebKitCSSResourceValue.h"137 136 #include "WebKitCSSTransformValue.h" 138 137 #include "WebKitFontFamilyNames.h" … … 240 239 m_pendingImageProperties.clear(); 241 240 m_filtersWithPendingSVGDocuments.clear(); 242 m_maskImagesWithPendingSVGDocuments.clear();243 241 m_cssToLengthConversionData = CSSToLengthConversionData(); 244 242 } -
trunk/Source/WebCore/css/StyleResolver.h
r186391 r186392 29 29 #include "InspectorCSSOMWrappers.h" 30 30 #include "LinkHash.h" 31 #include "MaskImageOperation.h"32 31 #include "MediaQueryExp.h" 33 32 #include "RenderStyle.h" … … 382 381 383 382 Vector<RefPtr<ReferenceFilterOperation>>& filtersWithPendingSVGDocuments() { return m_filtersWithPendingSVGDocuments; } 384 Vector<RefPtr<MaskImageOperation>>& maskImagesWithPendingSVGDocuments() { return m_maskImagesWithPendingSVGDocuments; }385 383 386 384 void setFontDirty(bool isDirty) { m_fontDirty = isDirty; } … … 429 427 430 428 Vector<RefPtr<ReferenceFilterOperation>> m_filtersWithPendingSVGDocuments; 431 Vector<RefPtr<MaskImageOperation>> m_maskImagesWithPendingSVGDocuments;432 429 433 430 bool m_fontDirty; -
trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp
r186390 r186392 884 884 } 885 885 886 void CachedResourceLoader::addCachedResource(CachedResource& resource)887 {888 m_documentResources.set(resource.url(), &resource);889 890 if (!MemoryCache::singleton().add(resource))891 resource.setOwningCachedResourceLoader(this);892 }893 894 886 void CachedResourceLoader::loadDone(CachedResource* resource, bool shouldPerformPostLoadActions) 895 887 { -
trunk/Source/WebCore/loader/cache/CachedResourceLoader.h
r182266 r186392 116 116 117 117 void removeCachedResource(CachedResource&); 118 void addCachedResource(CachedResource&);119 118 120 119 void loadDone(CachedResource*, bool shouldPerformPostLoadActions = true); -
trunk/Source/WebCore/loader/cache/CachedSVGDocument.cpp
r176798 r186392 24 24 #include "CachedSVGDocument.h" 25 25 26 #include "DocumentLoader.h"27 #include "EmptyClients.h"28 #include "FrameView.h"29 #include "MainFrame.h"30 #include "Page.h"31 #include "PageConfiguration.h"32 #include "Settings.h"33 26 #include "SharedBuffer.h" 34 27 … … 38 31 : CachedResource(request, SVGDocumentResource, sessionID) 39 32 , m_decoder(TextResourceDecoder::create("application/xml")) 40 , m_shouldCreateFrameForDocument(true)41 , m_canReuseResource(true)42 33 { 43 34 setAccept("image/svg+xml"); … … 61 52 { 62 53 if (data) { 63 // In certain situations (like the scenario when this document belongs to an UseElement) we don't need to create a frame. 64 if (m_shouldCreateFrameForDocument) { 65 PageConfiguration pageConfiguration; 66 fillWithEmptyClients(pageConfiguration); 67 68 m_page = Page::createPageFromBuffer(pageConfiguration, data, "image/svg+xml", false, true); 69 m_document = downcast<SVGDocument>(m_page->mainFrame().document()); 70 } else { 71 m_document = SVGDocument::create(nullptr, response().url()); 72 m_document->setContent(m_decoder->decodeAndFlush(data->data(), data->size())); 73 } 54 // We don't need to create a new frame because the new document belongs to the parent UseElement. 55 m_document = SVGDocument::create(nullptr, response().url()); 56 m_document->setContent(m_decoder->decodeAndFlush(data->data(), data->size())); 74 57 } 75 58 CachedResource::finishLoading(data); -
trunk/Source/WebCore/loader/cache/CachedSVGDocument.h
r176798 r186392 37 37 38 38 SVGDocument* document() const { return m_document.get(); } 39 void setShouldCreateFrameForDocument(bool shouldCreate) { m_shouldCreateFrameForDocument = shouldCreate; }40 virtual bool canReuse(const ResourceRequest&) const override { return m_canReuseResource; }41 void setCanReuse(bool canReuseResource) { m_canReuseResource = canReuseResource; };42 39 43 40 private: … … 49 46 RefPtr<SVGDocument> m_document; 50 47 RefPtr<TextResourceDecoder> m_decoder; 51 std::unique_ptr<Page> m_page;52 bool m_shouldCreateFrameForDocument;53 bool m_canReuseResource;54 48 }; 55 49 -
trunk/Source/WebCore/loader/cache/CachedSVGDocumentReference.cpp
r186390 r186392 35 35 namespace WebCore { 36 36 37 CachedSVGDocumentReference::CachedSVGDocumentReference(const String& url , CachedSVGDocumentClient* additionalDocumentClient, bool canReuseResource)37 CachedSVGDocumentReference::CachedSVGDocumentReference(const String& url) 38 38 : m_url(url) 39 39 , m_document(0) 40 40 , m_loadRequested(false) 41 , m_additionalDocumentClient(additionalDocumentClient)42 , m_canReuseResource(canReuseResource)43 41 { 44 42 } … … 46 44 CachedSVGDocumentReference::~CachedSVGDocumentReference() 47 45 { 48 if (m_document) {46 if (m_document) 49 47 m_document->removeClient(this); 50 51 if (m_additionalDocumentClient)52 m_document->removeClient(m_additionalDocumentClient);53 }54 48 } 55 49 … … 62 56 request.setInitiator(cachedResourceRequestInitiators().css); 63 57 m_document = loader.requestSVGDocument(request); 64 if (m_document) { 65 m_document->setCanReuse(m_canReuseResource); 58 if (m_document) 66 59 m_document->addClient(this); 67 68 if (m_additionalDocumentClient)69 m_document->addClient(m_additionalDocumentClient);70 }71 60 72 61 m_loadRequested = true; -
trunk/Source/WebCore/loader/cache/CachedSVGDocumentReference.h
r186390 r186392 39 39 class CachedSVGDocumentReference : public CachedSVGDocumentClient { 40 40 public: 41 CachedSVGDocumentReference(const String& url, CachedSVGDocumentClient* additionalDocumentClient = nullptr, bool canReuseResource = true);41 CachedSVGDocumentReference(const String&); 42 42 43 43 virtual ~CachedSVGDocumentReference(); … … 52 52 CachedResourceHandle<CachedSVGDocument> m_document; 53 53 bool m_loadRequested; 54 CachedSVGDocumentClient* m_additionalDocumentClient;55 bool m_canReuseResource;56 54 }; 57 55 -
trunk/Source/WebCore/page/FrameView.cpp
r186391 r186392 4509 4509 } 4510 4510 4511 bool FrameView::containsSVGDocument() const4512 {4513 if (frame().document())4514 return frame().document()->isSVGDocument();4515 4516 return false;4517 }4518 4519 4511 void FrameView::notifyWidgetsInAllFrames(WidgetNotification notification) 4520 4512 { -
trunk/Source/WebCore/page/FrameView.h
r186391 r186392 562 562 virtual bool isVerticalDocument() const override; 563 563 virtual bool isFlippedDocument() const override; 564 virtual bool containsSVGDocument() const override;565 564 566 565 private: -
trunk/Source/WebCore/page/Page.cpp
r186279 r186392 32 32 #include "ContextMenuController.h" 33 33 #include "DatabaseProvider.h" 34 #include "DocumentLoader.h"35 34 #include "DocumentMarkerController.h" 36 35 #include "DocumentStyleSheetCollection.h" … … 284 283 } 285 284 286 std::unique_ptr<Page> Page::createPageFromBuffer(PageConfiguration& pageConfiguration, const SharedBuffer* buffer, const String& mimeType, bool canHaveScrollbars, bool transparent)287 {288 ASSERT(buffer);289 290 std::unique_ptr<Page> newPage = std::make_unique<Page>(pageConfiguration);291 newPage->settings().setMediaEnabled(false);292 newPage->settings().setScriptEnabled(false);293 newPage->settings().setPluginsEnabled(false);294 295 Frame& frame = newPage->mainFrame();296 frame.setView(FrameView::create(frame));297 frame.init();298 FrameLoader& loader = frame.loader();299 loader.forceSandboxFlags(SandboxAll);300 301 frame.view()->setCanHaveScrollbars(canHaveScrollbars);302 frame.view()->setTransparent(transparent);303 304 ASSERT(loader.activeDocumentLoader()); // DocumentLoader should have been created by frame->init().305 loader.activeDocumentLoader()->writer().setMIMEType(mimeType);306 loader.activeDocumentLoader()->writer().begin(URL()); // create the empty document307 loader.activeDocumentLoader()->writer().addData(buffer->data(), buffer->size());308 loader.activeDocumentLoader()->writer().end();309 310 return newPage;311 }312 313 285 void Page::clearPreviousItemFromAllPages(HistoryItem* item) 314 286 { -
trunk/Source/WebCore/page/Page.h
r186005 r186392 118 118 119 119 typedef uint64_t LinkHash; 120 class SharedBuffer;121 120 122 121 enum FindDirection { FindDirectionForward, FindDirectionBackward }; … … 136 135 137 136 WEBCORE_EXPORT uint64_t renderTreeSize() const; 138 139 static std::unique_ptr<Page> createPageFromBuffer(PageConfiguration&, const SharedBuffer*, const String& mimeType, bool canHaveScrollbars, bool transparent);140 137 141 138 void setNeedsRecalcStyleInAllFrames(); -
trunk/Source/WebCore/platform/ScrollView.h
r186391 r186392 409 409 virtual bool isVerticalDocument() const { return true; } 410 410 virtual bool isFlippedDocument() const { return false; } 411 virtual bool containsSVGDocument() const { return false; }412 411 413 412 // Called to update the scrollbars to accurately reflect the state of the view. -
trunk/Source/WebCore/rendering/RenderLayer.cpp
r186391 r186392 90 90 #include "RenderLayerCompositor.h" 91 91 #include "RenderLayerFilterInfo.h" 92 #include "RenderLayerMaskImageInfo.h"93 92 #include "RenderMarquee.h" 94 93 #include "RenderMultiColumnFlowThread.h" … … 304 303 #endif 305 304 , m_hasFilterInfo(false) 306 , m_hasMaskImageInfo(false)307 305 #if ENABLE(CSS_COMPOSITING) 308 306 , m_blendMode(BlendModeNormal) -
trunk/Source/WebCore/rendering/RenderLayer.h
r186391 r186392 1062 1062 1063 1063 bool m_hasFilterInfo : 1; 1064 unsigned m_hasMaskImageInfo : 1;1065 1064 1066 1065 #if ENABLE(CSS_COMPOSITING) … … 1139 1138 1140 1139 class FilterInfo; 1141 class MaskImageInfo;1142 1140 }; 1143 1141 -
trunk/Source/WebCore/rendering/RenderLayerFilterInfo.cpp
r183234 r186392 33 33 34 34 #include "CachedSVGDocument.h" 35 #include "CachedSVGDocumentReference.h" 35 36 #include "FilterEffectRenderer.h" 36 37 #include "RenderSVGResourceFilter.h" -
trunk/Source/WebCore/rendering/RenderLayerFilterInfo.h
r183234 r186392 38 38 namespace WebCore { 39 39 40 class CachedSVGDocument; 40 41 class Element; 41 42 -
trunk/Source/WebCore/rendering/style/FillLayer.cpp
r181710 r186392 29 29 30 30 RefPtr<StyleImage> image; 31 RefPtr<MaskImageOperation> maskImageOperation;32 31 33 32 Length x; … … 75 74 FillLayer::FillLayer(const FillLayer& o) 76 75 : m_next(o.m_next ? std::make_unique<FillLayer>(*o.m_next) : nullptr) 77 , m_maskImageOperation(o.m_maskImageOperation)78 76 , m_image(o.m_image) 79 77 , m_xPosition(o.m_xPosition) … … 118 116 119 117 m_image = o.m_image; 120 m_maskImageOperation = o.m_maskImageOperation;121 118 m_xPosition = o.m_xPosition; 122 119 m_yPosition = o.m_yPosition; … … 156 153 // We do not check the "isSet" booleans for each property, since those are only used during initial construction 157 154 // to propagate patterns into layers. All layer comparisons happen after values have all been filled in anyway. 158 return StyleImage::imagesEquivalent(m_image.get(), o.m_image.get()) && m_maskImageOperation == o.m_maskImageOperation 159 && m_xPosition == o.m_xPosition && m_yPosition == o.m_yPosition 155 return StyleImage::imagesEquivalent(m_image.get(), o.m_image.get()) && m_xPosition == o.m_xPosition && m_yPosition == o.m_yPosition 160 156 && m_backgroundXOrigin == o.m_backgroundXOrigin && m_backgroundYOrigin == o.m_backgroundYOrigin 161 157 && m_attachment == o.m_attachment && m_clip == o.m_clip && m_composite == o.m_composite … … 292 288 { 293 289 for (FillLayer* layer = this; layer; layer = layer->m_next.get()) { 294 if (layer->m_next && !layer->m_next->isImageSet() && !layer->m_next->hasMaskImage()) {290 if (layer->m_next && !layer->m_next->isImageSet()) { 295 291 layer->m_next = nullptr; 296 292 break; 297 293 } 298 294 } 299 }300 301 bool FillLayer::hasNonEmptyMaskImage() const302 {303 if (hasMaskImage() && !maskImage()->isCSSValueNone())304 return true;305 306 return (next() ? next()->hasNonEmptyMaskImage() : false);307 295 } 308 296 … … 352 340 if (layer->m_image && !layer->m_image->isLoaded()) 353 341 return false; 354 355 if (layer->hasMaskImage() && !layer->maskImage()->isMaskLoaded())356 return false;357 342 } 358 343 return true; … … 396 381 { 397 382 // We just care about pointer equivalency. 398 return layer1. hasMaskImage() == layer2.hasMaskImage() && layer1.image() == layer2.image();383 return layer1.image() == layer2.image(); 399 384 } 400 385 -
trunk/Source/WebCore/rendering/style/FillLayer.h
r186391 r186392 28 28 #include "GraphicsTypes.h" 29 29 #include "LengthSize.h" 30 #include "MaskImageOperation.h"31 30 #include "RenderStyleConstants.h" 32 31 #include "StyleImage.h" … … 69 68 ~FillLayer(); 70 69 71 const RefPtr<MaskImageOperation>& maskImage() const { return m_maskImageOperation; }72 70 StyleImage* image() const { return m_image.get(); } 73 StyleImage* imageOrMaskImage() const { return hasMaskImage() ? maskImage()->image() : image(); }74 71 const Length& xPosition() const { return m_xPosition; } 75 72 const Length& yPosition() const { return m_yPosition; } … … 105 102 bool isMaskSourceTypeSet() const { return m_maskSourceTypeSet; } 106 103 107 void setMaskImage(PassRefPtr<MaskImageOperation> maskImage) { m_maskImageOperation = maskImage; }108 104 void setImage(PassRefPtr<StyleImage> image) { m_image = image; m_imageSet = true; } 109 105 void setXPosition(Length length) { m_xPosition = WTF::move(length); m_xPosSet = true; } … … 123 119 void setMaskSourceType(EMaskSourceType m) { m_maskSourceType = m; m_maskSourceTypeSet = true; } 124 120 125 void clearMaskImage() { m_maskImageOperation = nullptr; }126 121 void clearImage() { m_image = nullptr; m_imageSet = false; } 122 127 123 void clearXPosition() { m_xPosSet = false; m_backgroundOriginSet = false; } 128 124 void clearYPosition() { m_yPosSet = false; m_backgroundOriginSet = false; } … … 149 145 bool imagesAreLoaded() const; 150 146 bool hasImage() const; 151 bool hasMaskImage() const { return maskImage().get(); }152 bool hasNonEmptyMaskImage() const;153 147 bool hasFixedImage() const; 154 148 bool hasOpaqueImage(const RenderElement&) const; … … 183 177 std::unique_ptr<FillLayer> m_next; 184 178 185 RefPtr<MaskImageOperation> m_maskImageOperation;186 179 RefPtr<StyleImage> m_image; 187 180 -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp
r186299 r186392 26 26 #include "Image.h" 27 27 #include "IntRect.h" 28 #include "RenderBoxModelObject.h"29 28 #include "SVGRenderingContext.h" 30 29 … … 55 54 } 56 55 57 bool RenderSVGResourceMasker::apply SVGMask(RenderElement& renderer, GraphicsContext*& context, bool applyClip)56 bool RenderSVGResourceMasker::applyResource(RenderElement& renderer, const RenderStyle&, GraphicsContext*& context, unsigned short resourceMode) 58 57 { 59 58 ASSERT(context); 59 ASSERT_UNUSED(resourceMode, resourceMode == ApplyToDefaultMode); 60 60 61 61 bool missingMaskerData = !m_masker.contains(&renderer); … … 81 81 return false; 82 82 83 if (applyClip) 84 SVGRenderingContext::clipToImageBuffer(context, absoluteTransform, repaintRect, maskerData->maskImage, missingMaskerData); 85 83 SVGRenderingContext::clipToImageBuffer(context, absoluteTransform, repaintRect, maskerData->maskImage, missingMaskerData); 86 84 return true; 87 }88 89 bool RenderSVGResourceMasker::applyResource(RenderElement& renderer, const RenderStyle&, GraphicsContext*& context, unsigned short resourceMode)90 {91 ASSERT_UNUSED(resourceMode, resourceMode == ApplyToDefaultMode);92 return applySVGMask(renderer, context, true);93 85 } 94 86 … … 133 125 } 134 126 135 void RenderSVGResourceMasker::drawMaskForRenderer(RenderElement& renderer, const BackgroundImageGeometry& geometry, GraphicsContext* context, CompositeOperator compositeOp)136 {137 if (context->paintingDisabled())138 return;139 140 if (!applySVGMask(renderer, context, false))141 return;142 143 MaskerData* maskerData = maskerDataForRenderer(renderer);144 ASSERT(maskerData);145 146 FloatRect oneTileRect;147 FloatSize actualTileSize(geometry.tileSize().width() + geometry.spaceSize().width(), geometry.tileSize().height() + geometry.spaceSize().height());148 oneTileRect.setX(geometry.destRect().x() + fmodf(fmodf(-geometry.relativePhase().width(), actualTileSize.width()) - actualTileSize.width(), actualTileSize.width()));149 oneTileRect.setY(geometry.destRect().y() + fmodf(fmodf(-geometry.relativePhase().height(), actualTileSize.height()) - actualTileSize.height(), actualTileSize.height()));150 oneTileRect.setSize(geometry.tileSize());151 152 FloatSize intrinsicTileSize = maskerData->maskImage->logicalSize();153 FloatSize scale(geometry.tileSize().width() / intrinsicTileSize.width(), geometry.tileSize().height() / intrinsicTileSize.height());154 155 FloatRect visibleSrcRect;156 visibleSrcRect.setX((geometry.destRect().x() - oneTileRect.x()) / scale.width());157 visibleSrcRect.setY((geometry.destRect().y() - oneTileRect.y()) / scale.height());158 visibleSrcRect.setWidth(geometry.destRect().width() / scale.width());159 visibleSrcRect.setHeight(geometry.destRect().height() / scale.height());160 context->drawImageBuffer(maskerData->maskImage.get(), ColorSpaceDeviceRGB, geometry.destRect(), visibleSrcRect, compositeOp);161 }162 163 127 void RenderSVGResourceMasker::calculateMaskContentRepaintRect() 164 128 { -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceMasker.h
r177259 r186392 46 46 virtual void removeClientFromCache(RenderElement&, bool markForInvalidation = true) override; 47 47 virtual bool applyResource(RenderElement&, const RenderStyle&, GraphicsContext*&, unsigned short resourceMode) override; 48 bool applySVGMask(RenderElement& renderer, GraphicsContext*&, bool applyClip);49 48 virtual FloatRect resourceBoundingBox(const RenderObject&) override; 50 49 … … 53 52 54 53 virtual RenderSVGResourceType resourceType() const override { return MaskerResourceType; } 55 56 MaskerData* maskerDataForRenderer(RenderObject& renderer) { return m_masker.get(&renderer); }57 void drawMaskForRenderer(RenderElement& renderer, const BackgroundImageGeometry&, GraphicsContext*, CompositeOperator);58 54 59 55 private: -
trunk/Source/WebCore/svg/SVGMaskElement.cpp
r183160 r186392 160 160 RenderPtr<RenderElement> SVGMaskElement::createElementRenderer(Ref<RenderStyle>&& style, const RenderTreePosition&) 161 161 { 162 RenderPtr<RenderElement> maskRenderer = createRenderer<RenderSVGResourceMasker>(*this, WTF::move(style)); 163 164 // Pass along existing render layer clients. 165 for (auto* clientLayer : m_clientLayers) 166 static_cast<RenderSVGResourceMasker*>(maskRenderer.get())->addClientRenderLayer(clientLayer); 167 168 return maskRenderer; 169 } 170 171 void SVGMaskElement::addClientRenderLayer(RenderLayer* client) 172 { 173 ASSERT(client); 174 m_clientLayers.add(client); 175 176 // Pass it along to the renderer. 177 if (renderer()) 178 static_cast<RenderSVGResourceMasker*>(renderer())->addClientRenderLayer(client); 179 } 180 181 void SVGMaskElement::removeClientRenderLayer(RenderLayer* client) 182 { 183 ASSERT(client); 184 m_clientLayers.remove(client); 185 186 // Pass it along to the renderer. 187 if (renderer()) 188 static_cast<RenderSVGResourceMasker*>(renderer())->removeClientRenderLayer(client); 162 return createRenderer<RenderSVGResourceMasker>(*this, WTF::move(style)); 189 163 } 190 164 -
trunk/Source/WebCore/svg/SVGMaskElement.h
r185503 r186392 31 31 32 32 namespace WebCore { 33 34 class RenderLayer;35 33 36 34 class SVGMaskElement final : public SVGElement, … … 39 37 public: 40 38 static Ref<SVGMaskElement> create(const QualifiedName&, Document&); 41 42 void addClientRenderLayer(RenderLayer*);43 void removeClientRenderLayer(RenderLayer*);44 39 45 40 private: … … 53 48 virtual void svgAttributeChanged(const QualifiedName&) override; 54 49 virtual void childrenChanged(const ChildChange&) override; 55 56 HashSet<RenderLayer*> m_clientLayers;57 50 58 51 virtual RenderPtr<RenderElement> createElementRenderer(Ref<RenderStyle>&&, const RenderTreePosition&) override; -
trunk/Source/WebCore/svg/SVGUseElement.cpp
r186388 r186392 550 550 request.setInitiator(this); 551 551 m_externalDocument = document().cachedResourceLoader().requestSVGDocument(request); 552 if (m_externalDocument) { 553 // FIXME: Is it really OK for us to set this to false for a document that might be shared by another client? 554 m_externalDocument->setShouldCreateFrameForDocument(false); // No frame needed, we just want the elements. 552 if (m_externalDocument) 555 553 m_externalDocument->addClient(this); 556 }557 554 } 558 555 -
trunk/Source/WebCore/svg/graphics/SVGImage.cpp
r185766 r186392 354 354 pageConfiguration.loaderClientForMainFrame = m_loaderClient.get(); 355 355 356 bool canHaveScrollbars = false; // SVG Images will always synthesize a viewBox, if it's not available, and thus never see scrollbars.357 bool transparent = true; // SVG Images are transparent.358 359 356 // FIXME: If this SVG ends up loading itself, we might leak the world. 360 357 // The Cache code does not know about CachedImages holding Frames and … … 363 360 // SVGImage objects, but we're safe now, because SVGImage can only be 364 361 // loaded by a top-level document. 365 m_page = Page::createPageFromBuffer(pageConfiguration, data(), "image/svg+xml", canHaveScrollbars, transparent); 362 m_page = std::make_unique<Page>(pageConfiguration); 363 m_page->settings().setMediaEnabled(false); 364 m_page->settings().setScriptEnabled(false); 365 m_page->settings().setPluginsEnabled(false); 366 367 Frame& frame = m_page->mainFrame(); 368 frame.setView(FrameView::create(frame)); 369 frame.init(); 370 FrameLoader& loader = frame.loader(); 371 loader.forceSandboxFlags(SandboxAll); 372 373 frame.view()->setCanHaveScrollbars(false); // SVG Images will always synthesize a viewBox, if it's not available, and thus never see scrollbars. 374 frame.view()->setTransparent(true); // SVG Images are transparent. 375 376 ASSERT(loader.activeDocumentLoader()); // DocumentLoader should have been created by frame->init(). 377 loader.activeDocumentLoader()->writer().setMIMEType("image/svg+xml"); 378 loader.activeDocumentLoader()->writer().begin(URL()); // create the empty document 379 loader.activeDocumentLoader()->writer().addData(data()->data(), data()->size()); 380 loader.activeDocumentLoader()->writer().end(); 366 381 367 382 // Set the intrinsic size before a container size is available.
Note:
See TracChangeset
for help on using the changeset viewer.