Index: Source/core/svg/graphics/SVGImage.cpp |
diff --git a/Source/core/svg/graphics/SVGImage.cpp b/Source/core/svg/graphics/SVGImage.cpp |
index baa838bad5aa32912a161c10e01f73acbbe90b56..bfe48cede6524a938a82059bb5937a1c6431d083 100644 |
--- a/Source/core/svg/graphics/SVGImage.cpp |
+++ b/Source/core/svg/graphics/SVGImage.cpp |
@@ -42,6 +42,7 @@ |
#include "core/svg/SVGFEImageElement.h" |
#include "core/svg/SVGImageElement.h" |
#include "core/svg/SVGSVGElement.h" |
+#include "core/svg/animation/SMILTimeContainer.h" |
#include "core/svg/graphics/SVGImageChromeClient.h" |
#include "platform/LengthFunctions.h" |
#include "platform/geometry/IntRect.h" |
@@ -371,6 +372,17 @@ void SVGImage::resetAnimation() |
stopAnimation(); |
} |
+bool SVGImage::hasAnimations() const |
+{ |
+ if (!m_page) |
+ return false; |
+ LocalFrame* frame = m_page->mainFrame(); |
+ SVGSVGElement* rootElement = toSVGDocument(frame->document())->rootElement(); |
+ if (!rootElement) |
+ return false; |
+ return rootElement->timeContainer()->hasAnimations(); |
+} |
+ |
bool SVGImage::dataChanged(bool allDataReceived) |
{ |
TRACE_EVENT0("webkit", "SVGImage::dataChanged"); |
@@ -393,12 +405,12 @@ bool SVGImage::dataChanged(bool allDataReceived) |
// This will become an issue when SVGImage will be able to load other |
// SVGImage objects, but we're safe now, because SVGImage can only be |
// loaded by a top-level document. |
- m_page = adoptPtr(new Page(pageClients)); |
- m_page->settings().setScriptEnabled(false); |
- m_page->settings().setPluginsEnabled(false); |
- m_page->settings().setAcceleratedCompositingEnabled(false); |
+ OwnPtr<Page> page = adoptPtr(new Page(pageClients)); |
+ page->settings().setScriptEnabled(false); |
+ page->settings().setPluginsEnabled(false); |
+ page->settings().setAcceleratedCompositingEnabled(false); |
- RefPtr<LocalFrame> frame = LocalFrame::create(FrameInit::create(&m_page->frameHost(), dummyFrameLoaderClient)); |
+ RefPtr<LocalFrame> frame = LocalFrame::create(FrameInit::create(&page->frameHost(), dummyFrameLoaderClient)); |
frame->setView(FrameView::create(frame.get())); |
frame->init(); |
FrameLoader& loader = frame->loader(); |
@@ -408,6 +420,8 @@ bool SVGImage::dataChanged(bool allDataReceived) |
frame->view()->setCanHaveScrollbars(false); // SVG Images will always synthesize a viewBox, if it's not available, and thus never see scrollbars. |
frame->view()->setTransparent(true); // SVG Images are transparent. |
+ m_page = page.release(); |
+ |
loader.load(FrameLoadRequest(0, blankURL(), SubstituteData(data(), "image/svg+xml", "UTF-8", KURL(), ForceSynchronousLoad))); |
// Set the intrinsic size before a container size is available. |
m_intrinsicSize = containerSize(); |