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 WMLCardElement::handleIntrinsicEventIfNeeded() { WMLPageState* pageState = wmlPageStateForDocument(document()); if (!pageState) return; Frame* frame = document()->frame(); if (!frame) return; FrameLoader* loader = frame->loader(); if (!loader) return; // Calculate the entry method of current card WMLIntrinsicEventType eventType = WMLIntrinsicEventUnknown; switch (loader->policyChecker()->loadType()) { case FrameLoadTypeReload: break; case FrameLoadTypeBack: eventType = WMLIntrinsicEventOnEnterBackward; break; case FrameLoadTypeBackWMLDeckNotAccessible: reportWMLError(document(), WMLErrorDeckNotAccessible); return; default: eventType = WMLIntrinsicEventOnEnterForward; break; } // Figure out target event handler WMLIntrinsicEventHandler* eventHandler = this->eventHandler(); bool hasIntrinsicEvent = false; if (eventType != WMLIntrinsicEventUnknown) { if (eventHandler && eventHandler->hasIntrinsicEvent(eventType)) hasIntrinsicEvent = true; else if (m_template) { eventHandler = m_template->eventHandler(); if (eventHandler && eventHandler->hasIntrinsicEvent(eventType)) hasIntrinsicEvent = true; } } if (hasIntrinsicEvent) eventHandler->triggerIntrinsicEvent(eventType); // Start the timer if it exists in current card if (m_eventTimer && eventType != WMLIntrinsicEventOnEnterBackward) m_eventTimer->start(); /*guoxiaolei 20120827 end>*/ for (Node* node = traverseNextNode(); node != 0; node = node->traverseNextNode()) { if (!node->isElementNode()) continue; if (node->hasTagName(inputTag)) static_cast<WMLInputElement*>(node)->initialize(); else if (node->hasTagName(selectTag)) static_cast<WMLSelectElement*>(node)->selectInitialOptions(); } }
void WMLCardElement::handleIntrinsicEventIfNeeded() { WMLPageState* pageState = wmlPageStateForDocument(document()); if (!pageState) return; Frame* frame = document()->frame(); if (!frame) return; FrameLoader* loader = frame->loader(); if (!loader) return; // Calculate the entry method of current card WMLIntrinsicEventType eventType = WMLIntrinsicEventUnknown; switch (loader->policyChecker()->loadType()) { case FrameLoadTypeReload: break; case FrameLoadTypeBack: eventType = WMLIntrinsicEventOnEnterBackward; break; case FrameLoadTypeBackWMLDeckNotAccessible: reportWMLError(document(), WMLErrorDeckNotAccessible); return; default: eventType = WMLIntrinsicEventOnEnterForward; break; } // Figure out target event handler WMLIntrinsicEventHandler* eventHandler = this->eventHandler(); bool hasIntrinsicEvent = false; if (eventType != WMLIntrinsicEventUnknown) { if (eventHandler && eventHandler->hasIntrinsicEvent(eventType)) hasIntrinsicEvent = true; else if (m_template) { eventHandler = m_template->eventHandler(); if (eventHandler && eventHandler->hasIntrinsicEvent(eventType)) hasIntrinsicEvent = true; } } // SAMSUNG_WML_FIXES+ // http://spe.mobilephone.net/wit/wmlv2/structemp.wml if (hasIntrinsicEvent) { RefPtr<NodeList> children = childNodes(); if (children) { unsigned length = children->length(); for (unsigned i = 0; i < length; ++i) { Node* child = children->item(i); if (!child->isElementNode()) continue; if (child->hasTagName(oneventTag)) { WMLOnEventElement* onEventElement = static_cast<WMLOnEventElement*>(child); if (onEventElement->eventType() == eventType && onEventElement->isNoop()) { hasIntrinsicEvent = false; break; } } } } } // SAMSUNG_WML_FIXES- if (hasIntrinsicEvent) eventHandler->triggerIntrinsicEvent(eventType); // Start the timer if it exists in current card if (m_eventTimer) m_eventTimer->start(); for (Node* node = traverseNextNode(); node != 0; node = node->traverseNextNode()) { if (!node->isElementNode()) continue; if (node->hasTagName(inputTag)) static_cast<WMLInputElement*>(node)->initialize(); else if (node->hasTagName(selectTag)) static_cast<WMLSelectElement*>(node)->selectInitialOptions(); } }