<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><style type="text/css"><!--
#msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; }
#msg ul, pre { overflow: auto; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<title>[20028] trunk</title>
</head>
<body>
<div id="msg">
<dl>
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/20028">20028</a></dd>
<dt>Author</dt> <dd>rwlbuis</dd>
<dt>Date</dt> <dd>2007-03-07 13:25:16 -0800 (Wed, 07 Mar 2007)</dd>
</dl>
<h3>Log Message</h3>
<pre> Reviewed by Darin.
http://bugs.webkit.org/show_bug.cgi?id=12579
WebKit fails SVG xml:base test
Implement DOM3 properties baseURI and documentURI to fix
the testcase in bug 12579.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsdomxhtmllevel3coredocumentgetdocumenturi01expectedtxt">trunk/LayoutTests/dom/xhtml/level3/core/documentgetdocumenturi01-expected.txt</a></li>
<li><a href="#trunkLayoutTestsdomxhtmllevel3corenodegetbaseuri01expectedtxt">trunk/LayoutTests/dom/xhtml/level3/core/nodegetbaseuri01-expected.txt</a></li>
<li><a href="#trunkLayoutTestsdomxhtmllevel3corenodegetbaseuri02expectedtxt">trunk/LayoutTests/dom/xhtml/level3/core/nodegetbaseuri02-expected.txt</a></li>
<li><a href="#trunkLayoutTestsdomxhtmllevel3corenodegetbaseuri04expectedtxt">trunk/LayoutTests/dom/xhtml/level3/core/nodegetbaseuri04-expected.txt</a></li>
<li><a href="#trunkLayoutTestsdomxhtmllevel3corenodegetbaseuri06expectedtxt">trunk/LayoutTests/dom/xhtml/level3/core/nodegetbaseuri06-expected.txt</a></li>
<li><a href="#trunkLayoutTestssvgW3CSVG11structimage07texpectedchecksum">trunk/LayoutTests/svg/W3C-SVG-1.1/struct-image-07-t-expected.checksum</a></li>
<li><a href="#trunkLayoutTestssvgW3CSVG11structimage07texpectedpng">trunk/LayoutTests/svg/W3C-SVG-1.1/struct-image-07-t-expected.png</a></li>
<li><a href="#trunkWebCorebindingsjskjs_domcpp">trunk/WebCore/bindings/js/kjs_dom.cpp</a></li>
<li><a href="#trunkWebCorebindingsjskjs_domnodeh">trunk/WebCore/bindings/js/kjs_domnode.h</a></li>
<li><a href="#trunkWebCoredomDocumentcpp">trunk/WebCore/dom/Document.cpp</a></li>
<li><a href="#trunkWebCoredomDocumenth">trunk/WebCore/dom/Document.h</a></li>
<li><a href="#trunkWebCoredomDocumentidl">trunk/WebCore/dom/Document.idl</a></li>
<li><a href="#trunkWebCoredomDocumentTypecpp">trunk/WebCore/dom/DocumentType.cpp</a></li>
<li><a href="#trunkWebCoredomDocumentTypeh">trunk/WebCore/dom/DocumentType.h</a></li>
<li><a href="#trunkWebCoredomElementcpp">trunk/WebCore/dom/Element.cpp</a></li>
<li><a href="#trunkWebCoredomElementh">trunk/WebCore/dom/Element.h</a></li>
<li><a href="#trunkWebCoredomNodecpp">trunk/WebCore/dom/Node.cpp</a></li>
<li><a href="#trunkWebCoredomNodeh">trunk/WebCore/dom/Node.h</a></li>
<li><a href="#trunkWebCoreksvg2miscSVGImageLoadercpp">trunk/WebCore/ksvg2/misc/SVGImageLoader.cpp</a></li>
<li><a href="#trunkWebCoreksvg2svgSVGImageElementcpp">trunk/WebCore/ksvg2/svg/SVGImageElement.cpp</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (20027 => 20028)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2007-03-07 19:31:55 UTC (rev 20027)
+++ trunk/LayoutTests/ChangeLog        2007-03-07 21:25:16 UTC (rev 20028)
</span><span class="lines">@@ -1,3 +1,19 @@
</span><ins>+2007-03-07 Rob Buis <buis@kde.org>
+
+ Reviewed by Darin.
+
+ Adjusted tests for:
+ http://bugs.webkit.org/show_bug.cgi?id=12579
+ WebKit fails SVG xml:base test
+
+ * dom/xhtml/level3/core/documentgetdocumenturi01-expected.txt:
+ * dom/xhtml/level3/core/nodegetbaseuri01-expected.txt:
+ * dom/xhtml/level3/core/nodegetbaseuri02-expected.txt:
+ * dom/xhtml/level3/core/nodegetbaseuri04-expected.txt:
+ * dom/xhtml/level3/core/nodegetbaseuri06-expected.txt:
+ * svg/W3C-SVG-1.1/struct-image-07-t-expected.checksum:
+ * svg/W3C-SVG-1.1/struct-image-07-t-expected.png:
+
</ins><span class="cx"> 2007-03-07 Darin Adler <darin@apple.com>
</span><span class="cx">
</span><span class="cx"> Reviewed by Geoff.
</span></span></pre></div>
<a id="trunkLayoutTestsdomxhtmllevel3coredocumentgetdocumenturi01expectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/dom/xhtml/level3/core/documentgetdocumenturi01-expected.txt (20027 => 20028)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/dom/xhtml/level3/core/documentgetdocumenturi01-expected.txt        2007-03-07 19:31:55 UTC (rev 20027)
+++ trunk/LayoutTests/dom/xhtml/level3/core/documentgetdocumenturi01-expected.txt        2007-03-07 21:25:16 UTC (rev 20028)
</span><span class="lines">@@ -1,3 +1,2 @@
</span><span class="cx"> Test        http://www.w3.org/2001/DOM-Test-Suite/level3/core/documentgetdocumenturi01
</span><del>-Status        failure
-Message        documentgetdocumenturi01: assertNotNull failed
</del><ins>+Status        Success
</ins></span></pre></div>
<a id="trunkLayoutTestsdomxhtmllevel3corenodegetbaseuri01expectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/dom/xhtml/level3/core/nodegetbaseuri01-expected.txt (20027 => 20028)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/dom/xhtml/level3/core/nodegetbaseuri01-expected.txt        2007-03-07 19:31:55 UTC (rev 20027)
+++ trunk/LayoutTests/dom/xhtml/level3/core/nodegetbaseuri01-expected.txt        2007-03-07 21:25:16 UTC (rev 20028)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><span class="cx"> Test        http://www.w3.org/2001/DOM-Test-Suite/level3/core/nodegetbaseuri01
</span><span class="cx"> Status        failure
</span><del>-Message        notNull: assertNotNull failed
</del><ins>+Message        notNull: assertEquals failed, actual nodegetbaseuri01, expected barfoo.
</ins><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsdomxhtmllevel3corenodegetbaseuri02expectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/dom/xhtml/level3/core/nodegetbaseuri02-expected.txt (20027 => 20028)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/dom/xhtml/level3/core/nodegetbaseuri02-expected.txt        2007-03-07 19:31:55 UTC (rev 20027)
+++ trunk/LayoutTests/dom/xhtml/level3/core/nodegetbaseuri02-expected.txt        2007-03-07 21:25:16 UTC (rev 20028)
</span><span class="lines">@@ -1,4 +1,3 @@
</span><span class="cx"> Test        http://www.w3.org/2001/DOM-Test-Suite/level3/core/nodegetbaseuri02
</span><del>-Status        error
-Message        TypeError: Undefined value
</del><ins>+Status        Success
</ins><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsdomxhtmllevel3corenodegetbaseuri04expectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/dom/xhtml/level3/core/nodegetbaseuri04-expected.txt (20027 => 20028)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/dom/xhtml/level3/core/nodegetbaseuri04-expected.txt        2007-03-07 19:31:55 UTC (rev 20027)
+++ trunk/LayoutTests/dom/xhtml/level3/core/nodegetbaseuri04-expected.txt        2007-03-07 21:25:16 UTC (rev 20028)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><span class="cx"> Test        http://www.w3.org/2001/DOM-Test-Suite/level3/core/nodegetbaseuri04
</span><span class="cx"> Status        failure
</span><del>-Message        baseURI: assertNotNull failed
</del><ins>+Message        baseURI: assertEquals failed, actual nodegetbaseuri04, expected barfoo.
</ins><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsdomxhtmllevel3corenodegetbaseuri06expectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/dom/xhtml/level3/core/nodegetbaseuri06-expected.txt (20027 => 20028)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/dom/xhtml/level3/core/nodegetbaseuri06-expected.txt        2007-03-07 19:31:55 UTC (rev 20027)
+++ trunk/LayoutTests/dom/xhtml/level3/core/nodegetbaseuri06-expected.txt        2007-03-07 21:25:16 UTC (rev 20028)
</span><span class="lines">@@ -1,4 +1,3 @@
</span><span class="cx"> Test        http://www.w3.org/2001/DOM-Test-Suite/level3/core/nodegetbaseuri06
</span><del>-Status        failure
-Message        nodegetbaseuri06: assertNotNull failed
</del><ins>+Status        Success
</ins><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestssvgW3CSVG11structimage07texpectedchecksum"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/svg/W3C-SVG-1.1/struct-image-07-t-expected.checksum (20027 => 20028)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/W3C-SVG-1.1/struct-image-07-t-expected.checksum        2007-03-07 19:31:55 UTC (rev 20027)
+++ trunk/LayoutTests/svg/W3C-SVG-1.1/struct-image-07-t-expected.checksum        2007-03-07 21:25:16 UTC (rev 20028)
</span><span class="lines">@@ -1 +1 @@
</span><del>-c723a7024015b85fb3ad0c2f2f5aa380
</del><span class="cx">\ No newline at end of file
</span><ins>+25c51ccafb7ed7833b0b8421fc9240d3
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestssvgW3CSVG11structimage07texpectedpng"></a>
<div class="binary"><h4>Modified: trunk/LayoutTests/svg/W3C-SVG-1.1/struct-image-07-t-expected.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<a id="trunkWebCorebindingsjskjs_domcpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/bindings/js/kjs_dom.cpp (20027 => 20028)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/bindings/js/kjs_dom.cpp        2007-03-07 19:31:55 UTC (rev 20027)
+++ trunk/WebCore/bindings/js/kjs_dom.cpp        2007-03-07 21:25:16 UTC (rev 20028)
</span><span class="lines">@@ -187,6 +187,7 @@
</span><span class="cx"> previousSibling DOMNode::PreviousSibling DontDelete|ReadOnly
</span><span class="cx"> nextSibling DOMNode::NextSibling DontDelete|ReadOnly
</span><span class="cx"> attributes DOMNode::Attributes DontDelete|ReadOnly
</span><ins>+ baseURI DOMNode::BaseURI DontDelete|ReadOnly
</ins><span class="cx"> namespaceURI DOMNode::NamespaceURI DontDelete|ReadOnly
</span><span class="cx"> # DOM2
</span><span class="cx"> prefix DOMNode::Prefix DontDelete
</span><span class="lines">@@ -226,6 +227,8 @@
</span><span class="cx"> return toJS(exec,node.nextSibling());
</span><span class="cx"> case Attributes:
</span><span class="cx"> return toJS(exec,node.attributes());
</span><ins>+ case BaseURI:
+ return jsStringOrNull(node.baseURI());
</ins><span class="cx"> case NamespaceURI:
</span><span class="cx"> return jsStringOrNull(node.namespaceURI());
</span><span class="cx"> case Prefix:
</span></span></pre></div>
<a id="trunkWebCorebindingsjskjs_domnodeh"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/bindings/js/kjs_domnode.h (20027 => 20028)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/bindings/js/kjs_domnode.h        2007-03-07 19:31:55 UTC (rev 20027)
+++ trunk/WebCore/bindings/js/kjs_domnode.h        2007-03-07 21:25:16 UTC (rev 20028)
</span><span class="lines">@@ -49,7 +49,7 @@
</span><span class="cx"> virtual UString toString(ExecState*) const;
</span><span class="cx">
</span><span class="cx"> enum { NodeName, NodeValue, NodeType, ParentNode, ParentElement,
</span><del>- ChildNodes, FirstChild, LastChild, PreviousSibling, NextSibling,
</del><ins>+ ChildNodes, FirstChild, LastChild, PreviousSibling, NextSibling, BaseURI,
</ins><span class="cx"> Attributes, NamespaceURI, Prefix, LocalName, OwnerDocument, InsertBefore,
</span><span class="cx"> ReplaceChild, RemoveChild, AppendChild, HasAttributes, HasChildNodes,
</span><span class="cx"> CloneNode, Normalize, IsSupported, Contains, IsSameNode, IsEqualNode, TextContent,
</span></span></pre></div>
<a id="trunkWebCoredomDocumentcpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/dom/Document.cpp (20027 => 20028)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/dom/Document.cpp        2007-03-07 19:31:55 UTC (rev 20027)
+++ trunk/WebCore/dom/Document.cpp        2007-03-07 21:25:16 UTC (rev 20028)
</span><span class="lines">@@ -766,6 +766,21 @@
</span><span class="cx"> m_xmlStandalone = standalone;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+String Document::documentURI() const
+{
+ return m_baseURL;
+}
+
+void Document::setDocumentURI(const String &uri)
+{
+ m_baseURL = uri.deprecatedString();
+}
+
+String Document::baseURI() const
+{
+ return documentURI();
+}
+
</ins><span class="cx"> Element* Document::elementFromPoint(int x, int y) const
</span><span class="cx"> {
</span><span class="cx"> if (!renderer())
</span></span></pre></div>
<a id="trunkWebCoredomDocumenth"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/dom/Document.h (20027 => 20028)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/dom/Document.h        2007-03-07 19:31:55 UTC (rev 20027)
+++ trunk/WebCore/dom/Document.h        2007-03-07 21:25:16 UTC (rev 20028)
</span><span class="lines">@@ -193,6 +193,11 @@
</span><span class="cx"> void setXMLVersion(const String&, ExceptionCode&);
</span><span class="cx"> void setXMLStandalone(bool, ExceptionCode&);
</span><span class="cx">
</span><ins>+ String documentURI() const;
+ void setDocumentURI(const String&);
+
+ virtual String baseURI() const;
+
</ins><span class="cx"> PassRefPtr<Node> adoptNode(PassRefPtr<Node> source, ExceptionCode&);
</span><span class="cx">
</span><span class="cx"> PassRefPtr<NameNodeList> getElementsByName(const String& elementName);
</span></span></pre></div>
<a id="trunkWebCoredomDocumentidl"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/dom/Document.idl (20027 => 20028)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/dom/Document.idl        2007-03-07 19:31:55 UTC (rev 20027)
+++ trunk/WebCore/dom/Document.idl        2007-03-07 21:25:16 UTC (rev 20028)
</span><span class="lines">@@ -72,6 +72,7 @@
</span><span class="cx"> Node adoptNode(in Node source)
</span><span class="cx"> raises (DOMException);
</span><span class="cx">
</span><ins>+ attribute [ConvertNullStringTo=Null, ConvertNullToNullString] DOMString documentURI;
</ins><span class="cx">
</span><span class="cx"> // DOM Level 2 Events (DocumentEvents interface)
</span><span class="cx">
</span></span></pre></div>
<a id="trunkWebCoredomDocumentTypecpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/dom/DocumentType.cpp (20027 => 20028)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/dom/DocumentType.cpp        2007-03-07 19:31:55 UTC (rev 20027)
+++ trunk/WebCore/dom/DocumentType.cpp        2007-03-07 21:25:16 UTC (rev 20028)
</span><span class="lines">@@ -74,6 +74,11 @@
</span><span class="cx"> return result;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+String DocumentType::baseURI() const
+{
+ return String();
+}
+
</ins><span class="cx"> String DocumentType::nodeName() const
</span><span class="cx"> {
</span><span class="cx"> return name();
</span></span></pre></div>
<a id="trunkWebCoredomDocumentTypeh"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/dom/DocumentType.h (20027 => 20028)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/dom/DocumentType.h        2007-03-07 19:31:55 UTC (rev 20027)
+++ trunk/WebCore/dom/DocumentType.h        2007-03-07 21:25:16 UTC (rev 20028)
</span><span class="lines">@@ -48,6 +48,8 @@
</span><span class="cx"> String systemId() const { return m_systemId; }
</span><span class="cx"> String internalSubset() const { return m_subset; }
</span><span class="cx">
</span><ins>+ virtual String baseURI() const;
+
</ins><span class="cx"> // Other methods (not part of DOM)
</span><span class="cx"> DOMImplementation *implementation() const { return m_implementation.get(); }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkWebCoredomElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/dom/Element.cpp (20027 => 20028)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/dom/Element.cpp        2007-03-07 19:31:55 UTC (rev 20027)
+++ trunk/WebCore/dom/Element.cpp        2007-03-07 21:25:16 UTC (rev 20028)
</span><span class="lines">@@ -34,16 +34,19 @@
</span><span class="cx"> #include "Frame.h"
</span><span class="cx"> #include "FrameView.h"
</span><span class="cx"> #include "HTMLNames.h"
</span><ins>+#include "KURL.h"
</ins><span class="cx"> #include "NamedAttrMap.h"
</span><span class="cx"> #include "Page.h"
</span><span class="cx"> #include "RenderBlock.h"
</span><span class="cx"> #include "SelectionController.h"
</span><span class="cx"> #include "TextIterator.h"
</span><span class="cx"> #include "TextStream.h"
</span><ins>+#include "XMLNames.h"
</ins><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> using namespace HTMLNames;
</span><ins>+using namespace XMLNames;
</ins><span class="cx">
</span><span class="cx"> Element::Element(const QualifiedName& qName, Document *doc)
</span><span class="cx"> : ContainerNode(doc)
</span><span class="lines">@@ -464,6 +467,20 @@
</span><span class="cx"> m_tagName.setPrefix(_prefix);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+String Element::baseURI() const
+{
+ KURL xmlbase(getAttribute(baseAttr).deprecatedString());
+
+ if (!xmlbase.protocol().isEmpty())
+ return xmlbase.url();
+
+ Node* parent = parentNode();
+ if (parent)
+ return KURL(parent->baseURI().deprecatedString(), xmlbase.url()).url();
+
+ return xmlbase.url();
+}
+
</ins><span class="cx"> Node* Element::insertAdjacentElement(const String& where, Node* newChild, int& exception)
</span><span class="cx"> {
</span><span class="cx"> if (!newChild) {
</span></span></pre></div>
<a id="trunkWebCoredomElementh"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/dom/Element.h (20027 => 20028)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/dom/Element.h        2007-03-07 19:31:55 UTC (rev 20027)
+++ trunk/WebCore/dom/Element.h        2007-03-07 21:25:16 UTC (rev 20028)
</span><span class="lines">@@ -111,7 +111,9 @@
</span><span class="cx"> virtual const AtomicString& prefix() const { return m_tagName.prefix(); }
</span><span class="cx"> virtual void setPrefix(const AtomicString &_prefix, ExceptionCode&);
</span><span class="cx"> virtual const AtomicString& namespaceURI() const { return m_tagName.namespaceURI(); }
</span><del>-
</del><ins>+
+ virtual String baseURI() const;
+
</ins><span class="cx"> // DOM methods overridden from parent classes
</span><span class="cx"> virtual NodeType nodeType() const;
</span><span class="cx"> virtual PassRefPtr<Node> cloneNode(bool deep);
</span></span></pre></div>
<a id="trunkWebCoredomNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/dom/Node.cpp (20027 => 20028)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/dom/Node.cpp        2007-03-07 19:31:55 UTC (rev 20027)
+++ trunk/WebCore/dom/Node.cpp        2007-03-07 21:25:16 UTC (rev 20028)
</span><span class="lines">@@ -33,11 +33,13 @@
</span><span class="cx"> #include "ExceptionCode.h"
</span><span class="cx"> #include "Frame.h"
</span><span class="cx"> #include "HTMLNames.h"
</span><ins>+#include "KURL.h"
</ins><span class="cx"> #include "Logging.h"
</span><span class="cx"> #include "NamedAttrMap.h"
</span><span class="cx"> #include "RenderObject.h"
</span><span class="cx"> #include "Text.h"
</span><span class="cx"> #include "TextStream.h"
</span><ins>+#include "XMLNames.h"
</ins><span class="cx"> #include "htmlediting.h"
</span><span class="cx"> #include "kjs_binding.h"
</span><span class="cx">
</span><span class="lines">@@ -1217,6 +1219,15 @@
</span><span class="cx"> return 0;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+String Node::baseURI() const
+{
+ Node* parent = parentNode();
+ if (parent)
+ return parent->baseURI();
+
+ return String();
+}
+
</ins><span class="cx"> bool Node::isEqualNode(Node *other) const
</span><span class="cx"> {
</span><span class="cx"> if (!other)
</span></span></pre></div>
<a id="trunkWebCoredomNodeh"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/dom/Node.h (20027 => 20028)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/dom/Node.h        2007-03-07 19:31:55 UTC (rev 20027)
+++ trunk/WebCore/dom/Node.h        2007-03-07 21:25:16 UTC (rev 20028)
</span><span class="lines">@@ -101,6 +101,8 @@
</span><span class="cx"> virtual bool hasAttributes() const;
</span><span class="cx"> virtual NamedAttrMap* attributes() const;
</span><span class="cx">
</span><ins>+ virtual String baseURI() const;
+
</ins><span class="cx"> // These should all actually return a node, but this is only important for language bindings,
</span><span class="cx"> // which will already know and hold a ref on the right node to return. Returning bool allows
</span><span class="cx"> // these methods to be more efficient since they don't need to return a ref
</span></span></pre></div>
<a id="trunkWebCoreksvg2miscSVGImageLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/ksvg2/misc/SVGImageLoader.cpp (20027 => 20028)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/ksvg2/misc/SVGImageLoader.cpp        2007-03-07 19:31:55 UTC (rev 20027)
+++ trunk/WebCore/ksvg2/misc/SVGImageLoader.cpp        2007-03-07 21:25:16 UTC (rev 20028)
</span><span class="lines">@@ -50,8 +50,14 @@
</span><span class="cx"> WebCore::Document* doc = imageElement->ownerDocument();
</span><span class="cx">
</span><span class="cx"> CachedImage *newImage = 0;
</span><del>- if (!imageElement->href().isEmpty())
- newImage = doc->docLoader()->requestImage(imageElement->href());
</del><ins>+ if (!imageElement->href().isEmpty()) {
+ DeprecatedString uri = imageElement->baseURI().deprecatedString();;
+ if (!uri.isEmpty())
+ uri = KURL(uri, imageElement->href().deprecatedString()).url();
+ else
+ uri = imageElement->href().deprecatedString();
+ newImage = doc->docLoader()->requestImage(uri);
+ }
</ins><span class="cx">
</span><span class="cx"> CachedImage *oldImage = image();
</span><span class="cx"> if (newImage != oldImage) {
</span></span></pre></div>
<a id="trunkWebCoreksvg2svgSVGImageElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/ksvg2/svg/SVGImageElement.cpp (20027 => 20028)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/ksvg2/svg/SVGImageElement.cpp        2007-03-07 19:31:55 UTC (rev 20027)
+++ trunk/WebCore/ksvg2/svg/SVGImageElement.cpp        2007-03-07 21:25:16 UTC (rev 20028)
</span><span class="lines">@@ -90,7 +90,7 @@
</span><span class="cx"> if (SVGExternalResourcesRequired::parseMappedAttribute(attr))
</span><span class="cx"> return;
</span><span class="cx"> if (SVGURIReference::parseMappedAttribute(attr)) {
</span><del>- if (attr->name().matches(XLinkNames::hrefAttr))
</del><ins>+ if (attr->name().matches(XLinkNames::hrefAttr) && attached())
</ins><span class="cx"> m_imageLoader.updateFromElement();
</span><span class="cx"> return;
</span><span class="cx"> }
</span><span class="lines">@@ -119,6 +119,7 @@
</span><span class="cx"> void SVGImageElement::attach()
</span><span class="cx"> {
</span><span class="cx"> SVGStyledTransformableElement::attach();
</span><ins>+ m_imageLoader.updateFromElement();
</ins><span class="cx"> if (RenderSVGImage* imageObj = static_cast<RenderSVGImage*>(renderer()))
</span><span class="cx"> imageObj->setCachedImage(m_imageLoader.image());
</span><span class="cx"> }
</span></span></pre>
</div>
</div>
</body>
</html>