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; #if ENABLE(DEVICE_ORIENTATION) static DeviceMotionClient* dummyDeviceMotionClient = new EmptyDeviceMotionClient; pageClients.deviceMotionClient = dummyDeviceMotionClient; static DeviceOrientationClient* dummyDeviceOrientationClient = new EmptyDeviceOrientationClient; pageClients.deviceOrientationClient = dummyDeviceOrientationClient; #endif // FIXME: If this SVG ends up loading itself, we might leak the world. // The comment said that the Cache code does not know about CachedImages // holding Frames and won't know to break the cycle. But m_page.set(new Page(pageClients)); m_page->settings()->setMediaEnabled(false); m_page->settings()->setJavaScriptEnabled(false); m_page->settings()->setPluginsEnabled(false); RefPtr<Frame> frame = Frame::create(m_page.get(), 0, dummyFrameLoaderClient); frame->setView(FrameView::create(frame.get())); frame->init(); ResourceRequest fakeRequest(KURL(ParsedURLString, "")); FrameLoader* loader = frame->loader(); loader->setForcedSandboxFlags(SandboxAll); loader->load(fakeRequest, false); // Make sure the DocumentLoader is created loader->policyChecker()->cancelCheck(); // cancel any policy checks loader->commitProvisionalLoad(); loader->writer()->setMIMEType("image/svg+xml"); loader->writer()->begin(KURL()); // create the empty document loader->writer()->addData(data()->data(), data()->size()); loader->writer()->end(); frame->view()->setTransparent(true); // SVG Images are transparent. } return m_page; }
void FrameLoaderClientHaiku::committedLoad(WebCore::DocumentLoader* loader, const char* data, int length) { if (!m_frame) return; FrameLoader* frameLoader = loader->frameLoader(); frameLoader->writer()->setEncoding(m_response.textEncodingName(), false); frameLoader->addData(data, length); }
void FrameLoaderClientEfl::dispatchDidFailLoading(DocumentLoader* loader, unsigned long identifier, const ResourceError&) { if (m_firstData) { FrameLoader* fl = loader->frameLoader(); fl->writer()->setEncoding(m_response.textEncodingName(), false); m_firstData = false; } }
void FrameLoaderClientEfl::finishedLoading(DocumentLoader* loader) { if (!m_pluginView) { if (m_firstData) { FrameLoader* fl = loader->frameLoader(); fl->writer()->setEncoding(m_response.textEncodingName(), false); m_firstData = false; } } else { m_pluginView->didFinishLoading(); m_pluginView = 0; m_hasSentResponseToPlugin = false; } }
void FrameLoaderClientWx::dispatchDidFailLoading(DocumentLoader* loader, unsigned long, const ResourceError&) { if (m_firstData) { FrameLoader* fl = loader->frameLoader(); fl->writer()->setEncoding(m_response.textEncodingName(), false); m_firstData = false; } if (m_webView) { wxWebViewLoadEvent wkEvent(m_webView); wkEvent.SetState(wxWEBVIEW_LOAD_FAILED); wkEvent.SetURL(m_frame->loader()->documentLoader()->request().url().string()); m_webView->GetEventHandler()->ProcessEvent(wkEvent); } }
void FrameLoaderClientEfl::committedLoad(DocumentLoader* loader, const char* data, int length) { if (!m_pluginView) { if (!m_frame) return; FrameLoader* fl = loader->frameLoader(); if (m_firstData) { fl->writer()->setEncoding(m_response.textEncodingName(), false); m_firstData = false; } fl->addData(data, length); } // We re-check here as the plugin can have been created if (m_pluginView) { if (!m_hasSentResponseToPlugin) { m_pluginView->didReceiveResponse(loader->response()); m_hasSentResponseToPlugin = true; } m_pluginView->didReceiveData(data, length); } }
void FrameLoaderClientWx::committedLoad(WebCore::DocumentLoader* loader, const char* data, int length) { if (!m_webFrame) return; if (!m_pluginView) { FrameLoader* fl = loader->frameLoader(); fl->writer()->setEncoding(m_response.textEncodingName(), false); fl->addData(data, length); } // We re-check here as the plugin can have been created if (m_pluginView) { if (!m_hasSentResponseToPlugin) { m_pluginView->didReceiveResponse(loader->response()); // didReceiveResponse sets up a new stream to the plug-in. on a full-page plug-in, a failure in // setting up this stream can cause the main document load to be cancelled, setting m_pluginView // to null if (!m_pluginView) return; m_hasSentResponseToPlugin = true; } m_pluginView->didReceiveData(data, length); } }