Setting any of the <object> element plugin controlling attributes does not have any...
[WebKit-https.git] / Source / WebCore / html / HTMLObjectElement.cpp
index 67129a3..cbd458b 100644 (file)
@@ -107,28 +107,37 @@ void HTMLObjectElement::collectStyleForPresentationAttribute(const QualifiedName
 
 void HTMLObjectElement::parseAttribute(const QualifiedName& name, const AtomicString& value)
 {
 
 void HTMLObjectElement::parseAttribute(const QualifiedName& name, const AtomicString& value)
 {
+    bool invalidateRenderer = false;
+
     if (name == formAttr)
         formAttributeChanged();
     else if (name == typeAttr) {
         m_serviceType = value.string().left(value.find(';')).lower();
     if (name == formAttr)
         formAttributeChanged();
     else if (name == typeAttr) {
         m_serviceType = value.string().left(value.find(';')).lower();
+        invalidateRenderer = !fastHasAttribute(classidAttr);
         setNeedsWidgetUpdate(true);
     } else if (name == dataAttr) {
         m_url = stripLeadingAndTrailingHTMLSpaces(value);
         setNeedsWidgetUpdate(true);
     } else if (name == dataAttr) {
         m_url = stripLeadingAndTrailingHTMLSpaces(value);
-        setNeedsWidgetUpdate(true);
         document().updateStyleIfNeeded();
         document().updateStyleIfNeeded();
-        if (renderer()) {
-            if (isImageType()) {
-                if (!m_imageLoader)
-                    m_imageLoader = std::make_unique<HTMLImageLoader>(*this);
-                m_imageLoader->updateFromElementIgnoringPreviousError();
-            }
+        if (isImageType() && renderer()) {
+            if (!m_imageLoader)
+                m_imageLoader = std::make_unique<HTMLImageLoader>(*this);
+            m_imageLoader->updateFromElementIgnoringPreviousError();
         }
         }
-    } else if (name == classidAttr)
+        invalidateRenderer = !fastHasAttribute(classidAttr);
+        setNeedsWidgetUpdate(true);
+    } else if (name == classidAttr) {
+        invalidateRenderer = true;
         setNeedsWidgetUpdate(true);
         setNeedsWidgetUpdate(true);
-    else if (name == onbeforeloadAttr)
+    else if (name == onbeforeloadAttr)
         setAttributeEventListener(eventNames().beforeloadEvent, name, value);
     else
         HTMLPlugInImageElement::parseAttribute(name, value);
         setAttributeEventListener(eventNames().beforeloadEvent, name, value);
     else
         HTMLPlugInImageElement::parseAttribute(name, value);
+
+    if (!invalidateRenderer || !inDocument() || !renderer())
+        return;
+
+    clearUseFallbackContent();
+    setNeedsStyleRecalc(ReconstructRenderTree);
 }
 
 static void mapDataParamToSrc(Vector<String>* paramNames, Vector<String>* paramValues)
 }
 
 static void mapDataParamToSrc(Vector<String>* paramNames, Vector<String>* paramValues)