PassRefPtr<V8LazyEventListener> createAttributeEventListener(Node* node, const QualifiedName& name, const AtomicString& value) { ASSERT(node); if (value.isNull()) return nullptr; // FIXME: Very strange: we initialize zero-based number with '1'. TextPosition position(OrdinalNumber::fromZeroBasedInt(1), OrdinalNumber::first()); String sourceURL; v8::Isolate* isolate; if (Frame* frame = node->document().frame()) { isolate = toIsolate(frame); ScriptController& scriptController = frame->script(); if (!scriptController.canExecuteScripts(AboutToExecuteScript)) return nullptr; position = scriptController.eventHandlerPosition(); sourceURL = node->document().url().string(); } else { isolate = v8::Isolate::GetCurrent(); } return V8LazyEventListener::create(name.localName(), eventParameterName(node->isSVGElement()), value, sourceURL, position, node, isolate); }
void SVGElement::parseAttribute(const QualifiedName& name, const AtomicString& oldValue, const AtomicString& value) { if (SVGAnimatedPropertyBase* property = propertyFromAttribute(name)) { SVGParsingError parseError = property->setBaseValueAsString(value); reportAttributeParsingError(parseError, name, value); return; } if (name == HTMLNames::classAttr) { // SVG animation has currently requires special storage of values so we set // the className here. svgAttributeChanged actually causes the resulting // style updates (instead of Element::parseAttribute). We don't // tell Element about the change to avoid parsing the class list twice SVGParsingError parseError = m_className->setBaseValueAsString(value); reportAttributeParsingError(parseError, name, value); } else if (name == tabindexAttr) { Element::parseAttribute(name, oldValue, value); } else { // standard events const AtomicString& eventName = HTMLElement::eventNameForAttributeName(name); if (!eventName.isNull()) setAttributeEventListener(eventName, createAttributeEventListener(this, name, value, eventParameterName())); else Element::parseAttribute(name, oldValue, value); } }
void SVGSMILElement::parseAttribute(const QualifiedName& name, const AtomicString& oldValue, const AtomicString& value) { if (name == SVGNames::beginAttr) { if (!m_conditions.isEmpty()) { clearConditions(); parseBeginOrEnd(fastGetAttribute(SVGNames::endAttr), End); } parseBeginOrEnd(value.getString(), Begin); if (inDocument()) connectSyncBaseConditions(); } else if (name == SVGNames::endAttr) { if (!m_conditions.isEmpty()) { clearConditions(); parseBeginOrEnd(fastGetAttribute(SVGNames::beginAttr), Begin); } parseBeginOrEnd(value.getString(), End); if (inDocument()) connectSyncBaseConditions(); } else if (name == SVGNames::onbeginAttr) { setAttributeEventListener(EventTypeNames::beginEvent, createAttributeEventListener(this, name, value, eventParameterName())); } else if (name == SVGNames::onendAttr) { setAttributeEventListener(EventTypeNames::endEvent, createAttributeEventListener(this, name, value, eventParameterName())); } else if (name == SVGNames::onrepeatAttr) { setAttributeEventListener(EventTypeNames::repeatEvent, createAttributeEventListener(this, name, value, eventParameterName())); } else { SVGElement::parseAttribute(name, oldValue, value); } }
void HTMLElement::parseAttribute(const QualifiedName& name, const AtomicString& value) { if (name == tabindexAttr || name == tabstopAttr) return Element::parseAttribute(name, value); if (name == dirAttr) { dirAttributeChanged(value); } else { const AtomicString& eventName = eventNameForAttributeName(name); if (!eventName.isNull()) setAttributeEventListener(eventName, createAttributeEventListener(this, name, value, eventParameterName())); } }
void SVGScriptElement::parseAttribute(const QualifiedName& name, const AtomicString& value) { if (name == HTMLNames::onerrorAttr) setAttributeEventListener(EventTypeNames::error, createAttributeEventListener(this, name, value, eventParameterName())); else SVGElement::parseAttribute(name, value); }
void HTMLBodyElement::parseAttribute(const QualifiedName& name, const AtomicString& value) { if (name == vlinkAttr || name == alinkAttr || name == linkAttr) { if (value.isNull()) { if (name == linkAttr) document().textLinkColors().resetLinkColor(); else if (name == vlinkAttr) document().textLinkColors().resetVisitedLinkColor(); else document().textLinkColors().resetActiveLinkColor(); } else { RGBA32 color; if (BisonCSSParser::parseColor(color, value, !document().inQuirksMode())) { if (name == linkAttr) document().textLinkColors().setLinkColor(color); else if (name == vlinkAttr) document().textLinkColors().setVisitedLinkColor(color); else document().textLinkColors().setActiveLinkColor(color); } } setNeedsStyleRecalc(SubtreeStyleChange); } else if (name == onloadAttr) document().setWindowAttributeEventListener(EventTypeNames::load, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else if (name == onbeforeunloadAttr) document().setWindowAttributeEventListener(EventTypeNames::beforeunload, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else if (name == onunloadAttr) document().setWindowAttributeEventListener(EventTypeNames::unload, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else if (name == onpagehideAttr) document().setWindowAttributeEventListener(EventTypeNames::pagehide, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else if (name == onpageshowAttr) document().setWindowAttributeEventListener(EventTypeNames::pageshow, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else if (name == onpopstateAttr) document().setWindowAttributeEventListener(EventTypeNames::popstate, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else if (name == onblurAttr) document().setWindowAttributeEventListener(EventTypeNames::blur, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else if (name == onerrorAttr) document().setWindowAttributeEventListener(EventTypeNames::error, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else if (name == onfocusAttr) document().setWindowAttributeEventListener(EventTypeNames::focus, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else if (RuntimeEnabledFeatures::orientationEventEnabled() && name == onorientationchangeAttr) document().setWindowAttributeEventListener(EventTypeNames::orientationchange, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else if (name == onhashchangeAttr) document().setWindowAttributeEventListener(EventTypeNames::hashchange, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else if (name == onmessageAttr) document().setWindowAttributeEventListener(EventTypeNames::message, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else if (name == onresizeAttr) document().setWindowAttributeEventListener(EventTypeNames::resize, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else if (name == onscrollAttr) document().setWindowAttributeEventListener(EventTypeNames::scroll, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else if (name == onselectionchangeAttr) document().setAttributeEventListener(EventTypeNames::selectionchange, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else if (name == onstorageAttr) document().setWindowAttributeEventListener(EventTypeNames::storage, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else if (name == ononlineAttr) document().setWindowAttributeEventListener(EventTypeNames::online, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else if (name == onofflineAttr) document().setWindowAttributeEventListener(EventTypeNames::offline, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else if (name == onlanguagechangeAttr) document().setWindowAttributeEventListener(EventTypeNames::languagechange, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else HTMLElement::parseAttribute(name, value); }
void SVGSVGElement::parseAttribute(const QualifiedName& name, const AtomicString& value) { if (!nearestViewportElement()) { bool setListener = true; // Only handle events if we're the outermost <svg> element if (name == HTMLNames::onunloadAttr) document().setWindowAttributeEventListener(EventTypeNames::unload, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else if (name == HTMLNames::onresizeAttr) document().setWindowAttributeEventListener(EventTypeNames::resize, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else if (name == HTMLNames::onscrollAttr) document().setWindowAttributeEventListener(EventTypeNames::scroll, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else if (name == SVGNames::onzoomAttr) document().setWindowAttributeEventListener(EventTypeNames::zoom, createAttributeEventListener(document().frame(), name, value, eventParameterName())); else setListener = false; if (setListener) return; } if (name == HTMLNames::onabortAttr) { document().setWindowAttributeEventListener(EventTypeNames::abort, createAttributeEventListener(document().frame(), name, value, eventParameterName())); } else if (name == HTMLNames::onerrorAttr) { document().setWindowAttributeEventListener(EventTypeNames::error, createAttributeEventListener(document().frame(), name, value, eventParameterName())); } else if (SVGZoomAndPan::parseAttribute(name, value)) { } else { SVGElement::parseAttribute(name, value); } }
void HTMLElement::parseAttribute(const QualifiedName& name, const AtomicString& oldValue, const AtomicString& value) { if (name == tabindexAttr || name == XMLNames::langAttr) return Element::parseAttribute(name, oldValue, value); if (name == dirAttr) { dirAttributeChanged(value); } else if (name == langAttr) { pseudoStateChanged(CSSSelector::PseudoLang); } else { const AtomicString& eventName = eventNameForAttributeName(name); if (!eventName.isNull()) setAttributeEventListener(eventName, createAttributeEventListener(this, name, value, eventParameterName())); } }