bool SVGImage::dataChanged(bool allDataReceived) { // Don't do anything if is an empty image. if (!data()->size()) return true; if (allDataReceived) { static FrameLoaderClient* dummyFrameLoaderClient = new EmptyFrameLoaderClient; Page::PageClients pageClients; m_chromeClient = adoptPtr(new SVGImageChromeClient(this)); pageClients.chromeClient = m_chromeClient.get(); #if ENABLE(CONTEXT_MENUS) static ContextMenuClient* dummyContextMenuClient = new EmptyContextMenuClient; pageClients.contextMenuClient = dummyContextMenuClient; #endif static EditorClient* dummyEditorClient = new EmptyEditorClient; pageClients.editorClient = dummyEditorClient; #if ENABLE(DRAG_SUPPORT) static DragClient* dummyDragClient = new EmptyDragClient; pageClients.dragClient = dummyDragClient; #endif static InspectorClient* dummyInspectorClient = new EmptyInspectorClient; pageClients.inspectorClient = dummyInspectorClient; // FIXME: If this SVG ends up loading itself, we might leak the world. // The Cache code does not know about CachedImages holding Frames and // won't know to break the cycle. // 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()->setMediaEnabled(false); m_page->settings()->setScriptEnabled(false); m_page->settings()->setPluginsEnabled(false); RefPtr<Frame> frame = Frame::create(m_page.get(), 0, dummyFrameLoaderClient); frame->setView(FrameView::create(frame.get())); frame->init(); FrameLoader* loader = frame->loader(); loader->forceSandboxFlags(SandboxAll); 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. ASSERT(loader->activeDocumentLoader()); // DocumentLoader should have been created by frame->init(). loader->activeDocumentLoader()->writer()->setMIMEType("image/svg+xml"); loader->activeDocumentLoader()->writer()->begin(KURL()); // create the empty document loader->activeDocumentLoader()->writer()->addData(data()->data(), data()->size()); loader->activeDocumentLoader()->writer()->end(); } return m_page; }
bool SVGImage::dataChanged(bool allDataReceived) { // Don't do anything if is an empty image. if (!data()->size()) return true; if (allDataReceived) { static FrameLoaderClient* dummyFrameLoaderClient = new EmptyFrameLoaderClient; Page::PageClients pageClients; fillWithEmptyClients(pageClients); m_chromeClient = adoptPtr(new SVGImageChromeClient(this)); pageClients.chromeClient = m_chromeClient.get(); // FIXME: If this SVG ends up loading itself, we might leak the world. // The Cache code does not know about ImageResources holding Frames and // won't know to break the cycle. // 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().setMediaEnabled(false); m_page->settings().setScriptEnabled(false); m_page->settings().setPluginsEnabled(false); m_page->settings().setAcceleratedCompositingEnabled(false); RefPtr<Frame> frame = Frame::create(m_page.get(), 0, dummyFrameLoaderClient); frame->setView(FrameView::create(frame.get())); frame->init(); FrameLoader* loader = frame->loader(); loader->forceSandboxFlags(SandboxAll); frame->view()->setScrollbarsSuppressed(true); 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. ASSERT(loader->activeDocumentLoader()); // DocumentLoader should have been created by frame->init(). DocumentWriter* writer = loader->activeDocumentLoader()->beginWriting("image/svg+xml", "UTF-8"); writer->addData(data()->data(), data()->size()); loader->activeDocumentLoader()->endWriting(writer); // Set the intrinsic size before a container size is available. m_intrinsicSize = containerSize(); } return m_page; }