Fix parsing of external scripts/stylesheets when using setHtml(const QString &html).
authorhausmann@webkit.org <hausmann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 Apr 2008 14:21:50 +0000 (14:21 +0000)
committerhausmann@webkit.org <hausmann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 Apr 2008 14:21:50 +0000 (14:21 +0000)
We used to pass the html string to the frameloader in utf-16, which also meant that the default
encoding of external scripts/stylesheets became utf-16. That doesn't make sense, so assume utf-8
by default. This is now also documented.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@32432 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKit/qt/Api/qwebframe.cpp
WebKit/qt/Api/qwebview.cpp
WebKit/qt/ChangeLog

index 1904480..af9fa09 100644 (file)
@@ -408,13 +408,19 @@ void QWebFrame::load(const QNetworkRequest &req,
 /*!
   Sets the content of this frame to \a html. \a baseUrl is optional and used to resolve relative
   URLs in the document.
+
+  When using this method WebKit assumes that external resources such as JavaScript programs or style
+  sheets are encoded in UTF-8 unless otherwise specified. For example, the encoding of an external
+  script can be specified through the charset attribute of the HTML script tag. It is also possible
+  for the encoding to be specified by web server.
 */
 void QWebFrame::setHtml(const QString &html, const QUrl &baseUrl)
 {
     KURL kurl(baseUrl);
     WebCore::ResourceRequest request(kurl);
-    WTF::RefPtr<WebCore::SharedBuffer> data = WebCore::SharedBuffer::create(reinterpret_cast<const uchar *>(html.unicode()), html.length() * 2);
-    WebCore::SubstituteData substituteData(data, WebCore::String("text/html"), WebCore::String("utf-16"), kurl);
+    const QByteArray utf8 = html.toUtf8();
+    WTF::RefPtr<WebCore::SharedBuffer> data = WebCore::SharedBuffer::create(utf8.constData(), utf8.length());
+    WebCore::SubstituteData substituteData(data, WebCore::String("text/html"), WebCore::String("utf-8"), kurl);
     d->frame->loader()->load(request, substituteData);
 }
 
index 5634efc..e978e4d 100644 (file)
@@ -173,6 +173,11 @@ void QWebView::load(const QNetworkRequest &request,
     Sets the content of the web view to the specified \a html.
 
     External objects referenced in the HTML document are located relative to \a baseUrl.
+
+    When using this method WebKit assumes that external resources such as JavaScript programs or style
+    sheets are encoded in UTF-8 unless otherwise specified. For example, the encoding of an external
+    script can be specified through the charset attribute of the HTML script tag. It is also possible
+    for the encoding to be specified by web server.
 */
 void QWebView::setHtml(const QString &html, const QUrl &baseUrl)
 {
index bf4ed91..a9bf0ab 100644 (file)
@@ -1,3 +1,17 @@
+2008-04-23  Simon Hausmann  <hausmann@webkit.org>
+
+        Reviewed by Holger.
+
+        Fix parsing of external scripts/stylesheets when using setHtml(const QString &html).
+
+        We used to pass the html string to the frameloader in utf-16, which also meant that the default
+        encoding of external scripts/stylesheets became utf-16. That doesn't make sense, so assume utf-8
+        by default. This is now also documented.
+
+        * Api/qwebframe.cpp:
+        (QWebFrame::setHtml):
+        * Api/qwebview.cpp:
+
 2008-04-23  Benjamin Meyer  <bmeyer@trolltech.com>
 
         Reviewed by Simon.