From kde-commits Thu May 13 07:33:13 2010 From: Matthias Grimrath Date: Thu, 13 May 2010 07:33:13 +0000 To: kde-commits Subject: KDE/kdelibs/khtml/css Message-Id: <20100513073313.9173AAC8B4 () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=127373570406894 SVN commit 1126176 by grimrath: Remember original values from CSS. Delay expanding to full URLs until needed. It enables the webarchiver plugin to change URLs in CSS by search&replace and it is probably more correct regarding the DOM API. M +4 -2 css_valueimpl.cpp M +1 -1 css_valueimpl.h M +12 -14 cssparser.cpp --- trunk/KDE/kdelibs/khtml/css/css_valueimpl.cpp #1126175:1126176 @@ -25,6 +25,7 @@ #include "css_valueimpl.h" #include "css_ruleimpl.h" #include "css_stylesheetimpl.h" +#include "css/csshelper.h" #include "cssparser.h" #include "cssproperties.h" #include "cssvalues.h" @@ -1370,7 +1371,7 @@ // ----------------------------------------------------------------- -CSSImageValueImpl::CSSImageValueImpl(const DOMString &url, const StyleBaseImpl* style) +CSSImageValueImpl::CSSImageValueImpl(const DOMString &url, StyleBaseImpl* style) : CSSPrimitiveValueImpl(url, CSSPrimitiveValue::CSS_URI) { khtml::DocLoader *docLoader = 0; @@ -1380,7 +1381,8 @@ if (root->isCSSStyleSheet()) docLoader = static_cast(root)->docLoader(); - m_image = docLoader->requestImage(url); + KUrl fullURL( style->baseURL(), khtml::parseURL(url).string() ); + m_image = docLoader->requestImage( fullURL.url() ); if(m_image) m_image->ref(this); } --- trunk/KDE/kdelibs/khtml/css/css_valueimpl.h #1126175:1126176 @@ -351,7 +351,7 @@ class CSSImageValueImpl : public CSSPrimitiveValueImpl, public khtml::CachedObjectClient { public: - CSSImageValueImpl(const DOMString &url, const StyleBaseImpl *style); + CSSImageValueImpl(const DOMString &url, StyleBaseImpl *style); CSSImageValueImpl(); virtual ~CSSImageValueImpl(); --- trunk/KDE/kdelibs/khtml/css/cssparser.cpp #1126175:1126176 @@ -844,11 +844,9 @@ } else if (value->unit == CSSPrimitiveValue::CSS_URI ) { // ### allow string in non strict mode? - DOMString uri = khtml::parseURL( domString( value->string ) ); + DOMString uri = domString( value->string ); if (!uri.isNull()) { - parsedValue = new CSSImageValueImpl( - DOMString(KUrl( styleElement->baseURL(), uri.string()).url()), - styleElement ); + parsedValue = new CSSImageValueImpl( uri, styleElement ); valueList->next(); } } @@ -1537,9 +1535,8 @@ parsedValue = 0; if ( val->unit == CSSPrimitiveValue::CSS_URI ) { // url - DOMString value = khtml::parseURL(domString(val->string)); - parsedValue = new CSSImageValueImpl( - DOMString(KUrl( styleElement->baseURL(), value.string()).url() ), styleElement ); + DOMString value = domString(val->string); + parsedValue = new CSSImageValueImpl( value, styleElement ); #ifdef CSS_DEBUG kDebug( 6080 ) << "content, url=" << value.string() << " base=" << styleElement->baseURL().url( ); #endif @@ -1649,20 +1646,21 @@ CSSValueImpl* CSSParser::parseBackgroundImage(bool& didParse) { - didParse = false; if (valueList->current()->id == CSS_VAL_NONE) { didParse = true; return new CSSImageValueImpl(); - } - if (valueList->current()->unit == CSSPrimitiveValue::CSS_URI) { + } else if (valueList->current()->unit == CSSPrimitiveValue::CSS_URI) { didParse = true; - DOMString uri = khtml::parseURL(domString(valueList->current()->string)); + DOMString uri = domString(valueList->current()->string); if (!uri.isNull()) - return new CSSImageValueImpl(DOMString(KUrl(styleElement->baseURL(), uri.string()).url()), - styleElement); - } + return new CSSImageValueImpl(uri, styleElement); + else return 0; + } else { + didParse = false; + return 0; } +} CSSValueImpl* CSSParser::parseBackgroundPositionXY(BackgroundPosKind& kindOut) {