Changeset 186392 in webkit


Ignore:
Timestamp:
Jul 6, 2015, 6:16:24 PM (10 years ago)
Author:
Simon Fraser
Message:

Revert use of SVG <mask> elements for -webkit-mask-image (r176798, r177494)
https://bugs.webkit.org/show_bug.cgi?id=146653

Reviewed by Dean Jackson.

Fixes rdar://problem/21435233.

r177494 caused a number of regressions (bugs 141857, 146509, 146561), added new layering violations, and
was not being maintained, so revert it.

This patch reverts r176798.

  • CMakeLists.txt:
  • WebCore.vcxproj/WebCore.vcxproj:
  • WebCore.vcxproj/WebCore.vcxproj.filters:
  • WebCore.xcodeproj/project.pbxproj:
  • css/CSSValue.cpp:

(WebCore::CSSValue::cssText): Deleted.
(WebCore::CSSValue::destroy): Deleted.

  • css/CSSValue.h:

(WebCore::CSSValue::isWebKitCSSResourceValue): Deleted.

  • css/StyleBuilderConverter.h:

(WebCore::maskImageValueFromIterator): Deleted.

  • css/StyleResolver.cpp:

(WebCore::StyleResolver::State::clear): Deleted.

  • css/StyleResolver.h:

(WebCore::StyleResolver::State::maskImagesWithPendingSVGDocuments): Deleted.

  • css/WebKitCSSResourceValue.cpp: Removed.
  • css/WebKitCSSResourceValue.h: Removed.
  • loader/cache/CachedResourceLoader.cpp:

(WebCore::CachedResourceLoader::addCachedResource): Deleted.

  • loader/cache/CachedResourceLoader.h:
  • loader/cache/CachedSVGDocument.cpp:

(WebCore::CachedSVGDocument::finishLoading):
(WebCore::CachedSVGDocument::CachedSVGDocument): Deleted.

  • loader/cache/CachedSVGDocument.h:
  • loader/cache/CachedSVGDocumentReference.cpp:

(WebCore::CachedSVGDocumentReference::CachedSVGDocumentReference):
(WebCore::CachedSVGDocumentReference::~CachedSVGDocumentReference):
(WebCore::CachedSVGDocumentReference::load):

  • loader/cache/CachedSVGDocumentReference.h:
  • page/FrameView.cpp:

(WebCore::FrameView::containsSVGDocument): Deleted.

  • page/FrameView.h:
  • page/Page.cpp:

(WebCore::Page::createPageFromBuffer): Deleted.

  • page/Page.h:
  • platform/ScrollView.h:

(WebCore::ScrollView::containsSVGDocument): Deleted.

  • platform/graphics/MaskImageOperation.cpp: Removed.
  • platform/graphics/MaskImageOperation.h: Removed.
  • rendering/RenderLayer.cpp:

(WebCore::RenderLayer::RenderLayer): Deleted.

  • rendering/RenderLayer.h:
  • rendering/RenderLayerFilterInfo.cpp:
  • rendering/RenderLayerFilterInfo.h:
  • rendering/RenderLayerMaskImageInfo.h: Removed.
  • rendering/style/FillLayer.cpp:

(WebCore::FillLayer::operator==):
(WebCore::FillLayer::cullEmptyLayers):
(WebCore::layerImagesIdentical):
(WebCore::FillLayer::FillLayer): Deleted.
(WebCore::FillLayer::operator=): Deleted.
(WebCore::FillLayer::hasNonEmptyMaskImage): Deleted.
(WebCore::FillLayer::imagesAreLoaded): Deleted.

  • rendering/style/FillLayer.h:

(WebCore::FillLayer::maskImage): Deleted.
(WebCore::FillLayer::imageOrMaskImage): Deleted.
(WebCore::FillLayer::setMaskImage): Deleted.
(WebCore::FillLayer::clearMaskImage): Deleted.
(WebCore::FillLayer::hasMaskImage): Deleted.

  • rendering/svg/RenderSVGResourceMasker.cpp:

(WebCore::RenderSVGResourceMasker::applyResource):
(WebCore::RenderSVGResourceMasker::applySVGMask): Deleted.
(WebCore::RenderSVGResourceMasker::drawMaskForRenderer): Deleted.

  • rendering/svg/RenderSVGResourceMasker.h:
  • svg/SVGMaskElement.cpp:

(WebCore::SVGMaskElement::createElementRenderer):
(WebCore::SVGMaskElement::addClientRenderLayer): Deleted.
(WebCore::SVGMaskElement::removeClientRenderLayer): Deleted.

  • svg/SVGMaskElement.h:
  • svg/SVGUseElement.cpp:

(WebCore::SVGUseElement::updateExternalDocument):

  • svg/graphics/SVGImage.cpp:

(WebCore::SVGImage::dataChanged):

Location:
trunk/Source/WebCore
Files:
5 deleted
33 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/CMakeLists.txt

    r186263 r186392  
    13541354    css/WebKitCSSMatrix.cpp
    13551355    css/WebKitCSSRegionRule.cpp
    1356     css/WebKitCSSResourceValue.cpp
    13571356    css/WebKitCSSTransformValue.cpp
    13581357    css/WebKitCSSViewportRule.cpp
     
    21642163    platform/graphics/IntSize.cpp
    21652164    platform/graphics/LayoutRect.cpp
    2166     platform/graphics/MaskImageOperation.cpp
    21672165    platform/graphics/MediaPlayer.cpp
    21682166    platform/graphics/NamedImageGeneratedImage.cpp
     
    23742372    rendering/RenderLayerCompositor.cpp
    23752373    rendering/RenderLayerFilterInfo.cpp
    2376     rendering/RenderLayerMaskImageInfo.cpp
    23772374    rendering/RenderLayerModelObject.cpp
    23782375    rendering/RenderLineBoxList.cpp
  • trunk/Source/WebCore/ChangeLog

    r186391 r186392  
     12015-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
    1892015-07-06  Simon Fraser  <simon.fraser@apple.com>
    290
  • trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj

    r186201 r186392  
    863863      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    864864    </ClCompile>
    865     <ClCompile Include="..\css\WebKitCSSResourceValue.cpp" />
    866865    <ClCompile Include="..\DerivedSources.cpp">
    867866      <DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4819;%(DisableSpecificWarnings)</DisableSpecificWarnings>
     
    75847583      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Production|x64'">true</ExcludedFromBuild>
    75857584    </ClCompile>
    7586     <ClCompile Include="..\platform\graphics\MaskImageOperation.cpp" />
    75877585    <ClCompile Include="..\platform\graphics\opengl\Extensions3DOpenGLCommon.cpp" />
    75887586    <ClCompile Include="..\platform\graphics\opengl\Extensions3DOpenGLES.cpp" />
     
    81038101      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Production|x64'">true</ExcludedFromBuild>
    81048102    </ClCompile>
    8105     <ClCompile Include="..\rendering\RenderLayerMaskImageInfo.cpp" />
    81068103    <ClCompile Include="..\rendering\style\StyleCachedImageSet.cpp">
    81078104      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugSuffix|Win32'">true</ExcludedFromBuild>
     
    1925319250    <ClInclude Include="..\accessibility\AccessibilityNodeObject.h" />
    1925419251    <ClInclude Include="..\css\CSSImageSetValue.h" />
    19255     <ClInclude Include="..\css\WebKitCSSResourceValue.h" />
    1925619252    <ClInclude Include="..\ForwardingHeaders\bindings\ScriptFunctionCall.h" />
    1925719253    <ClInclude Include="..\ForwardingHeaders\bindings\ScriptObject.h" />
     
    1981419810    <ClInclude Include="..\platform\graphics\gstreamer\VideoTrackPrivateGStreamer.h" />
    1981519811    <ClInclude Include="..\platform\graphics\gstreamer\WebKitWebSourceGStreamer.h" />
    19816     <ClInclude Include="..\platform\graphics\MaskImageOperation.h" />
    1981719812    <ClInclude Include="..\platform\graphics\MediaPlayerPrivate.h" />
    1981819813    <ClInclude Include="..\platform\graphics\opengl\Extensions3DOpenGLCommon.h" />
     
    1994819943    <ClInclude Include="..\platform\win\WebCoreInstanceHandle.h" />
    1994919944    <ClInclude Include="..\rendering\HitTestLocation.h" />
    19950     <ClInclude Include="..\rendering\RenderLayerMaskImageInfo.h" />
    1995119945    <ClInclude Include="..\rendering\style\StyleCachedImageSet.h" />
    1995219946    <ClInclude Include="..\WebCorePrefix.h" />
  • trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters

    r186201 r186392  
    71067106      <Filter>editing</Filter>
    71077107    </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>
    71177108    <ClCompile Include="$(ConfigurationBuildDir)\obj$(PlatformArchitecture)\WebCore\DerivedSources\JSEXTsRGB.cpp">
    71187109      <Filter>DerivedSources</Filter>
     
    1454314534    <ClInclude Include="..\platform\graphics\avfoundation\MediaTimeAVFoundation.h">
    1454414535      <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>
    1455414536    </ClInclude>
    1455514537    <ClInclude Include="$(ConfigurationBuildDir)\obj$(PlatformArchitecture)\$(ProjectName)\DerivedSources\JSEXTsRGB.h">
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r186391 r186392  
    23232323                6C4C96DE1AD4483500365A50 /* JSReadableStreamController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6C4C96DA1AD4483500365A50 /* JSReadableStreamController.cpp */; };
    23242324                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, ); }; };
    23272325                6C638895A96CCEE50C8C946C /* CachedResourceRequestInitiators.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C638893A96CCEE50C8C946C /* CachedResourceRequestInitiators.h */; settings = {ATTRIBUTES = (Private, ); }; };
    23282326                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 */; };
    23322327                6CDDE8D01770BB220016E072 /* RegionOversetState.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C70A81417707C49009A446E /* RegionOversetState.h */; settings = {ATTRIBUTES = (Private, ); }; };
    23332328                6E0E569B183BFFE600E0E8D5 /* FloatRoundedRect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6E0E5699183BFFE600E0E8D5 /* FloatRoundedRect.cpp */; };
     
    96039598                6C4C96DA1AD4483500365A50 /* JSReadableStreamController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSReadableStreamController.cpp; sourceTree = "<group>"; };
    96049599                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>"; };
    96079600                6C638893A96CCEE50C8C946C /* CachedResourceRequestInitiators.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CachedResourceRequestInitiators.h; sourceTree = "<group>"; };
    96089601                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>"; };
    96119602                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>"; };
    96139603                6E0E5699183BFFE600E0E8D5 /* FloatRoundedRect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FloatRoundedRect.cpp; sourceTree = "<group>"; };
    96149604                6E0E569A183BFFE600E0E8D5 /* FloatRoundedRect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FloatRoundedRect.h; sourceTree = "<group>"; };
     
    2099520985                                141DC04D164834B900371E5A /* LayoutRect.h */,
    2099620986                                141DC04E164834B900371E5A /* LayoutSize.h */,
    20997                                 6C568CAE19DAFEA000430CA2 /* MaskImageOperation.cpp */,
    20998                                 6C568CAF19DAFEA000430CA2 /* MaskImageOperation.h */,
    2099920987                                07E3DFD01A9E786500764CA8 /* MediaPlaybackTarget.h */,
    2100020988                                079216531AA560AA00A3C049 /* MediaPlaybackTargetClient.h */,
     
    2287822866                                50D10D971545F5760096D288 /* RenderLayerFilterInfo.cpp */,
    2287922867                                50D10D981545F5760096D288 /* RenderLayerFilterInfo.h */,
    22880                                 6CBFE4A319EBF2D400CA2F9D /* RenderLayerMaskImageInfo.h */,
    2288122868                                3C244FE5A375AC633F88BE6F /* RenderLayerModelObject.cpp */,
    2288222869                                3C244FE4A375AC633F88BE6F /* RenderLayerModelObject.h */,
  • trunk/Source/WebCore/css/CSSValue.cpp

    r185731 r186392  
    5858#include "SVGPaint.h"
    5959#include "WebKitCSSFilterValue.h"
    60 #include "WebKitCSSResourceValue.h"
    6160#include "WebKitCSSTransformValue.h"
    6261
     
    330329        return downcast<CSSAnimationTriggerScrollValue>(*this).customCSSText();
    331330#endif
    332     case WebKitCSSResourceClass:
    333         return downcast<WebKitCSSResourceValue>(*this).customCSSText();
    334331    case CSSContentDistributionClass:
    335332        return downcast<CSSContentDistributionValue>(*this).customCSSText();
     
    454451        return;
    455452#endif
    456     case WebKitCSSResourceClass:
    457         delete downcast<WebKitCSSResourceValue>(this);
    458         return;
    459453    case CSSContentDistributionClass:
    460454        delete downcast<CSSContentDistributionValue>(this);
  • trunk/Source/WebCore/css/CSSValue.h

    r186391 r186392  
    107107    bool isSVGPaint() const { return m_classType == SVGPaintClass; }
    108108    bool isUnicodeRangeValue() const { return m_classType == UnicodeRangeClass; }
    109     bool isWebKitCSSResourceValue() const { return m_classType == WebKitCSSResourceClass; }
    110109
    111110#if ENABLE(CSS_ANIMATIONS_LEVEL_2)
     
    189188        GridLineNamesClass,
    190189#endif
    191         WebKitCSSResourceClass
    192 
    193190        // Do not append non-list class types here.
    194191    };
  • trunk/Source/WebCore/css/StyleBuilderConverter.h

    r186391 r186392  
    5050#include "StyleScrollSnapPoints.h"
    5151#include "TransformFunctions.h"
    52 #include "WebKitCSSResourceValue.h"
    5352#include <wtf/Optional.h>
    5453
     
    10051004}
    10061005
    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 
    10151006inline RefPtr<FontFeatureSettings> StyleBuilderConverter::convertFontFeatureSettings(StyleResolver&, CSSValue& value)
    10161007{
  • trunk/Source/WebCore/css/StyleResolver.cpp

    r186391 r186392  
    134134#include "WebKitCSSFilterValue.h"
    135135#include "WebKitCSSRegionRule.h"
    136 #include "WebKitCSSResourceValue.h"
    137136#include "WebKitCSSTransformValue.h"
    138137#include "WebKitFontFamilyNames.h"
     
    240239    m_pendingImageProperties.clear();
    241240    m_filtersWithPendingSVGDocuments.clear();
    242     m_maskImagesWithPendingSVGDocuments.clear();
    243241    m_cssToLengthConversionData = CSSToLengthConversionData();
    244242}
  • trunk/Source/WebCore/css/StyleResolver.h

    r186391 r186392  
    2929#include "InspectorCSSOMWrappers.h"
    3030#include "LinkHash.h"
    31 #include "MaskImageOperation.h"
    3231#include "MediaQueryExp.h"
    3332#include "RenderStyle.h"
     
    382381
    383382        Vector<RefPtr<ReferenceFilterOperation>>& filtersWithPendingSVGDocuments() { return m_filtersWithPendingSVGDocuments; }
    384         Vector<RefPtr<MaskImageOperation>>& maskImagesWithPendingSVGDocuments() { return m_maskImagesWithPendingSVGDocuments; }
    385383
    386384        void setFontDirty(bool isDirty) { m_fontDirty = isDirty; }
     
    429427
    430428        Vector<RefPtr<ReferenceFilterOperation>> m_filtersWithPendingSVGDocuments;
    431         Vector<RefPtr<MaskImageOperation>> m_maskImagesWithPendingSVGDocuments;
    432429
    433430        bool m_fontDirty;
  • trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp

    r186390 r186392  
    884884}
    885885
    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 
    894886void CachedResourceLoader::loadDone(CachedResource* resource, bool shouldPerformPostLoadActions)
    895887{
  • trunk/Source/WebCore/loader/cache/CachedResourceLoader.h

    r182266 r186392  
    116116
    117117    void removeCachedResource(CachedResource&);
    118     void addCachedResource(CachedResource&);
    119118
    120119    void loadDone(CachedResource*, bool shouldPerformPostLoadActions = true);
  • trunk/Source/WebCore/loader/cache/CachedSVGDocument.cpp

    r176798 r186392  
    2424#include "CachedSVGDocument.h"
    2525
    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"
    3326#include "SharedBuffer.h"
    3427
     
    3831    : CachedResource(request, SVGDocumentResource, sessionID)
    3932    , m_decoder(TextResourceDecoder::create("application/xml"))
    40     , m_shouldCreateFrameForDocument(true)
    41     , m_canReuseResource(true)
    4233{
    4334    setAccept("image/svg+xml");
     
    6152{
    6253    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()));
    7457    }
    7558    CachedResource::finishLoading(data);
  • trunk/Source/WebCore/loader/cache/CachedSVGDocument.h

    r176798 r186392  
    3737
    3838    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; };
    4239
    4340private:
     
    4946    RefPtr<SVGDocument> m_document;
    5047    RefPtr<TextResourceDecoder> m_decoder;
    51     std::unique_ptr<Page> m_page;
    52     bool m_shouldCreateFrameForDocument;
    53     bool m_canReuseResource;
    5448};
    5549
  • trunk/Source/WebCore/loader/cache/CachedSVGDocumentReference.cpp

    r186390 r186392  
    3535namespace WebCore {
    3636
    37 CachedSVGDocumentReference::CachedSVGDocumentReference(const String& url, CachedSVGDocumentClient* additionalDocumentClient, bool canReuseResource)
     37CachedSVGDocumentReference::CachedSVGDocumentReference(const String& url)
    3838    : m_url(url)
    3939    , m_document(0)
    4040    , m_loadRequested(false)
    41     , m_additionalDocumentClient(additionalDocumentClient)
    42     , m_canReuseResource(canReuseResource)
    4341{
    4442}
     
    4644CachedSVGDocumentReference::~CachedSVGDocumentReference()
    4745{
    48     if (m_document) {
     46    if (m_document)
    4947        m_document->removeClient(this);
    50        
    51         if (m_additionalDocumentClient)
    52             m_document->removeClient(m_additionalDocumentClient);
    53     }
    5448}
    5549
     
    6256    request.setInitiator(cachedResourceRequestInitiators().css);
    6357    m_document = loader.requestSVGDocument(request);
    64     if (m_document) {
    65         m_document->setCanReuse(m_canReuseResource);
     58    if (m_document)
    6659        m_document->addClient(this);
    67        
    68         if (m_additionalDocumentClient)
    69             m_document->addClient(m_additionalDocumentClient);
    70     }
    7160
    7261    m_loadRequested = true;
  • trunk/Source/WebCore/loader/cache/CachedSVGDocumentReference.h

    r186390 r186392  
    3939class CachedSVGDocumentReference : public CachedSVGDocumentClient {
    4040public:
    41     CachedSVGDocumentReference(const String& url, CachedSVGDocumentClient* additionalDocumentClient = nullptr, bool canReuseResource = true);
     41    CachedSVGDocumentReference(const String&);
    4242
    4343    virtual ~CachedSVGDocumentReference();
     
    5252    CachedResourceHandle<CachedSVGDocument> m_document;
    5353    bool m_loadRequested;
    54     CachedSVGDocumentClient* m_additionalDocumentClient;
    55     bool m_canReuseResource;
    5654};
    5755
  • trunk/Source/WebCore/page/FrameView.cpp

    r186391 r186392  
    45094509}
    45104510
    4511 bool FrameView::containsSVGDocument() const
    4512 {
    4513     if (frame().document())
    4514         return frame().document()->isSVGDocument();
    4515    
    4516     return false;
    4517 }
    4518 
    45194511void FrameView::notifyWidgetsInAllFrames(WidgetNotification notification)
    45204512{
  • trunk/Source/WebCore/page/FrameView.h

    r186391 r186392  
    562562    virtual bool isVerticalDocument() const override;
    563563    virtual bool isFlippedDocument() const override;
    564     virtual bool containsSVGDocument() const override;
    565564
    566565private:
  • trunk/Source/WebCore/page/Page.cpp

    r186279 r186392  
    3232#include "ContextMenuController.h"
    3333#include "DatabaseProvider.h"
    34 #include "DocumentLoader.h"
    3534#include "DocumentMarkerController.h"
    3635#include "DocumentStyleSheetCollection.h"
     
    284283}
    285284
    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 document
    307     loader.activeDocumentLoader()->writer().addData(buffer->data(), buffer->size());
    308     loader.activeDocumentLoader()->writer().end();
    309    
    310     return newPage;
    311 }
    312 
    313285void Page::clearPreviousItemFromAllPages(HistoryItem* item)
    314286{
  • trunk/Source/WebCore/page/Page.h

    r186005 r186392  
    118118
    119119typedef uint64_t LinkHash;
    120 class SharedBuffer;
    121120
    122121enum FindDirection { FindDirectionForward, FindDirectionBackward };
     
    136135
    137136    WEBCORE_EXPORT uint64_t renderTreeSize() const;
    138    
    139     static std::unique_ptr<Page> createPageFromBuffer(PageConfiguration&, const SharedBuffer*, const String& mimeType, bool canHaveScrollbars, bool transparent);
    140137
    141138    void setNeedsRecalcStyleInAllFrames();
  • trunk/Source/WebCore/platform/ScrollView.h

    r186391 r186392  
    409409    virtual bool isVerticalDocument() const { return true; }
    410410    virtual bool isFlippedDocument() const { return false; }
    411     virtual bool containsSVGDocument() const { return false; }
    412411
    413412    // Called to update the scrollbars to accurately reflect the state of the view.
  • trunk/Source/WebCore/rendering/RenderLayer.cpp

    r186391 r186392  
    9090#include "RenderLayerCompositor.h"
    9191#include "RenderLayerFilterInfo.h"
    92 #include "RenderLayerMaskImageInfo.h"
    9392#include "RenderMarquee.h"
    9493#include "RenderMultiColumnFlowThread.h"
     
    304303#endif
    305304    , m_hasFilterInfo(false)
    306     , m_hasMaskImageInfo(false)
    307305#if ENABLE(CSS_COMPOSITING)
    308306    , m_blendMode(BlendModeNormal)
  • trunk/Source/WebCore/rendering/RenderLayer.h

    r186391 r186392  
    10621062
    10631063    bool m_hasFilterInfo : 1;
    1064     unsigned m_hasMaskImageInfo : 1;
    10651064
    10661065#if ENABLE(CSS_COMPOSITING)
     
    11391138
    11401139    class FilterInfo;
    1141     class MaskImageInfo;
    11421140};
    11431141
  • trunk/Source/WebCore/rendering/RenderLayerFilterInfo.cpp

    r183234 r186392  
    3333
    3434#include "CachedSVGDocument.h"
     35#include "CachedSVGDocumentReference.h"
    3536#include "FilterEffectRenderer.h"
    3637#include "RenderSVGResourceFilter.h"
  • trunk/Source/WebCore/rendering/RenderLayerFilterInfo.h

    r183234 r186392  
    3838namespace WebCore {
    3939
     40class CachedSVGDocument;
    4041class Element;
    4142
  • trunk/Source/WebCore/rendering/style/FillLayer.cpp

    r181710 r186392  
    2929
    3030    RefPtr<StyleImage> image;
    31     RefPtr<MaskImageOperation> maskImageOperation;
    3231
    3332    Length x;
     
    7574FillLayer::FillLayer(const FillLayer& o)
    7675    : m_next(o.m_next ? std::make_unique<FillLayer>(*o.m_next) : nullptr)
    77     , m_maskImageOperation(o.m_maskImageOperation)
    7876    , m_image(o.m_image)
    7977    , m_xPosition(o.m_xPosition)
     
    118116
    119117    m_image = o.m_image;
    120     m_maskImageOperation = o.m_maskImageOperation;
    121118    m_xPosition = o.m_xPosition;
    122119    m_yPosition = o.m_yPosition;
     
    156153    // We do not check the "isSet" booleans for each property, since those are only used during initial construction
    157154    // 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
    160156        && m_backgroundXOrigin == o.m_backgroundXOrigin && m_backgroundYOrigin == o.m_backgroundYOrigin
    161157        && m_attachment == o.m_attachment && m_clip == o.m_clip && m_composite == o.m_composite
     
    292288{
    293289    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()) {
    295291            layer->m_next = nullptr;
    296292            break;
    297293        }
    298294    }
    299 }
    300 
    301 bool FillLayer::hasNonEmptyMaskImage() const
    302 {
    303     if (hasMaskImage() && !maskImage()->isCSSValueNone())
    304         return true;
    305    
    306     return (next() ? next()->hasNonEmptyMaskImage() : false);
    307295}
    308296
     
    352340        if (layer->m_image && !layer->m_image->isLoaded())
    353341            return false;
    354        
    355         if (layer->hasMaskImage() && !layer->maskImage()->isMaskLoaded())
    356             return false;
    357342    }
    358343    return true;
     
    396381{
    397382    // We just care about pointer equivalency.
    398     return layer1.hasMaskImage() == layer2.hasMaskImage() && layer1.image() == layer2.image();
     383    return layer1.image() == layer2.image();
    399384}
    400385
  • trunk/Source/WebCore/rendering/style/FillLayer.h

    r186391 r186392  
    2828#include "GraphicsTypes.h"
    2929#include "LengthSize.h"
    30 #include "MaskImageOperation.h"
    3130#include "RenderStyleConstants.h"
    3231#include "StyleImage.h"
     
    6968    ~FillLayer();
    7069
    71     const RefPtr<MaskImageOperation>& maskImage() const { return m_maskImageOperation; }
    7270    StyleImage* image() const { return m_image.get(); }
    73     StyleImage* imageOrMaskImage() const { return hasMaskImage() ? maskImage()->image() : image(); }
    7471    const Length& xPosition() const { return m_xPosition; }
    7572    const Length& yPosition() const { return m_yPosition; }
     
    105102    bool isMaskSourceTypeSet() const { return m_maskSourceTypeSet; }
    106103
    107     void setMaskImage(PassRefPtr<MaskImageOperation> maskImage) { m_maskImageOperation = maskImage; }
    108104    void setImage(PassRefPtr<StyleImage> image) { m_image = image; m_imageSet = true; }
    109105    void setXPosition(Length length) { m_xPosition = WTF::move(length); m_xPosSet = true; }
     
    123119    void setMaskSourceType(EMaskSourceType m) { m_maskSourceType = m; m_maskSourceTypeSet = true; }
    124120
    125     void clearMaskImage() { m_maskImageOperation = nullptr; }
    126121    void clearImage() { m_image = nullptr; m_imageSet = false; }
     122
    127123    void clearXPosition() { m_xPosSet = false; m_backgroundOriginSet = false; }
    128124    void clearYPosition() { m_yPosSet = false; m_backgroundOriginSet = false; }
     
    149145    bool imagesAreLoaded() const;
    150146    bool hasImage() const;
    151     bool hasMaskImage() const { return maskImage().get(); }
    152     bool hasNonEmptyMaskImage() const;
    153147    bool hasFixedImage() const;
    154148    bool hasOpaqueImage(const RenderElement&) const;
     
    183177    std::unique_ptr<FillLayer> m_next;
    184178
    185     RefPtr<MaskImageOperation> m_maskImageOperation;
    186179    RefPtr<StyleImage> m_image;
    187180
  • trunk/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp

    r186299 r186392  
    2626#include "Image.h"
    2727#include "IntRect.h"
    28 #include "RenderBoxModelObject.h"
    2928#include "SVGRenderingContext.h"
    3029
     
    5554}
    5655
    57 bool RenderSVGResourceMasker::applySVGMask(RenderElement& renderer, GraphicsContext*& context, bool applyClip)
     56bool RenderSVGResourceMasker::applyResource(RenderElement& renderer, const RenderStyle&, GraphicsContext*& context, unsigned short resourceMode)
    5857{
    5958    ASSERT(context);
     59    ASSERT_UNUSED(resourceMode, resourceMode == ApplyToDefaultMode);
    6060
    6161    bool missingMaskerData = !m_masker.contains(&renderer);
     
    8181        return false;
    8282
    83     if (applyClip)
    84         SVGRenderingContext::clipToImageBuffer(context, absoluteTransform, repaintRect, maskerData->maskImage, missingMaskerData);
    85 
     83    SVGRenderingContext::clipToImageBuffer(context, absoluteTransform, repaintRect, maskerData->maskImage, missingMaskerData);
    8684    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);
    9385}
    9486
     
    133125}
    134126
    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 
    163127void RenderSVGResourceMasker::calculateMaskContentRepaintRect()
    164128{
  • trunk/Source/WebCore/rendering/svg/RenderSVGResourceMasker.h

    r177259 r186392  
    4646    virtual void removeClientFromCache(RenderElement&, bool markForInvalidation = true) override;
    4747    virtual bool applyResource(RenderElement&, const RenderStyle&, GraphicsContext*&, unsigned short resourceMode) override;
    48     bool applySVGMask(RenderElement& renderer, GraphicsContext*&, bool applyClip);
    4948    virtual FloatRect resourceBoundingBox(const RenderObject&) override;
    5049
     
    5352
    5453    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);
    5854
    5955private:
  • trunk/Source/WebCore/svg/SVGMaskElement.cpp

    r183160 r186392  
    160160RenderPtr<RenderElement> SVGMaskElement::createElementRenderer(Ref<RenderStyle>&& style, const RenderTreePosition&)
    161161{
    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));
    189163}
    190164
  • trunk/Source/WebCore/svg/SVGMaskElement.h

    r185503 r186392  
    3131
    3232namespace WebCore {
    33    
    34 class RenderLayer;
    3533
    3634class SVGMaskElement final : public SVGElement,
     
    3937public:
    4038    static Ref<SVGMaskElement> create(const QualifiedName&, Document&);
    41 
    42     void addClientRenderLayer(RenderLayer*);
    43     void removeClientRenderLayer(RenderLayer*);
    4439
    4540private:
     
    5348    virtual void svgAttributeChanged(const QualifiedName&) override;
    5449    virtual void childrenChanged(const ChildChange&) override;
    55 
    56     HashSet<RenderLayer*> m_clientLayers;
    5750
    5851    virtual RenderPtr<RenderElement> createElementRenderer(Ref<RenderStyle>&&, const RenderTreePosition&) override;
  • trunk/Source/WebCore/svg/SVGUseElement.cpp

    r186388 r186392  
    550550        request.setInitiator(this);
    551551        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)
    555553            m_externalDocument->addClient(this);
    556         }
    557554    }
    558555
  • trunk/Source/WebCore/svg/graphics/SVGImage.cpp

    r185766 r186392  
    354354        pageConfiguration.loaderClientForMainFrame = m_loaderClient.get();
    355355
    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 
    359356        // FIXME: If this SVG ends up loading itself, we might leak the world.
    360357        // The Cache code does not know about CachedImages holding Frames and
     
    363360        // SVGImage objects, but we're safe now, because SVGImage can only be
    364361        // 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();
    366381
    367382        // Set the intrinsic size before a container size is available.
Note: See TracChangeset for help on using the changeset viewer.