[HtmlUnit] SVN: [15488] trunk/htmlunit/src

rbri--- via HtmlUnit-develop <[email protected]> Thu, 19 Jul 2018 18:26:19 +0000
Newsgroups gmane.comp.java.htmlunit.devel
Message-ID <[email protected]>
Revision: 15488
          http://sourceforge.net/p/htmlunit/code/15488
Author:   rbri
Date:     2018-07-19 18:26:06 +0000 (Thu, 19 Jul 2018)
Log Message:
-----------
next step in our endless encoding fight - fix area and image

Modified Paths:
--------------
    trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlArea.java
    trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlImage.java
    trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/PrimitiveWebServer.java
    trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebClient7Test.java

Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlArea.java
===================================================================
--- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlArea.java	2018-07-18 19:32:57 UTC (rev 15487)
+++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlArea.java	2018-07-19 18:26:06 UTC (rev 15488)
@@ -91,6 +91,7 @@
                         "Not a valid url: " + getHrefAttribute());
             }
             final WebRequest request = new WebRequest(url);
+            request.setCharset(page.getCharset());
             request.setAdditionalHeader(HttpHeader.REFERER, page.getUrl().toExternalForm());
             final WebWindow webWindow = enclosingPage.getEnclosingWindow();
             webClient.getPage(

Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlImage.java
===================================================================
--- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlImage.java	2018-07-18 19:32:57 UTC (rev 15487)
+++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlImage.java	2018-07-19 18:26:06 UTC (rev 15488)
@@ -463,6 +463,7 @@
                 final URL url = page.getFullyQualifiedUrl(src);
                 final String accept = webclient.getBrowserVersion().getImgAcceptHeader();
                 final WebRequest request = new WebRequest(url, accept);
+                request.setCharset(page.getCharset());
                 request.setAdditionalHeader(HttpHeader.REFERER, page.getUrl().toExternalForm());
                 imageWebResponse_ = webclient.loadWebResponse(request);
             }

Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/PrimitiveWebServer.java
===================================================================
--- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/PrimitiveWebServer.java	2018-07-18 19:32:57 UTC (rev 15487)
+++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/PrimitiveWebServer.java	2018-07-19 18:26:06 UTC (rev 15488)
@@ -103,17 +103,18 @@
                         }
                         else {
                             requests_.add(requestString);
-                            try (OutputStream out = socket.getOutputStream()) {
-                                if (first || otherResponse_ == null) {
-                                    response = firstResponse_;
-                                }
-                                else {
-                                    response = otherResponse_;
-                                }
-                                first = false;
-                                out.write(response.getBytes(charset_));
+                            if (first || otherResponse_ == null) {
+                                response = firstResponse_;
                             }
+                            else {
+                                response = otherResponse_;
+                            }
+                            first = false;
                         }
+
+                        try (OutputStream out = socket.getOutputStream()) {
+                            out.write(response.getBytes(charset_));
+                        }
                     }
                 }
                 catch (final SocketException e) {

Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebClient7Test.java
===================================================================
--- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebClient7Test.java	2018-07-18 19:32:57 UTC (rev 15487)
+++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebClient7Test.java	2018-07-19 18:26:06 UTC (rev 15488)
@@ -14,6 +14,7 @@
  */
 package com.gargoylesoftware.htmlunit;
 
+import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.FF60;
 import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.IE;
 
 import java.net.URL;
@@ -26,6 +27,7 @@
 import org.openqa.selenium.WebDriver;
 
 import com.gargoylesoftware.htmlunit.BrowserRunner.Alerts;
+import com.gargoylesoftware.htmlunit.BrowserRunner.BuggyWebDriver;
 import com.gargoylesoftware.htmlunit.BrowserRunner.NotYetImplemented;
 
 /**
@@ -221,6 +223,98 @@
      * @throws Exception if the test fails
      */
     @Test
+    @Alerts(DEFAULT = "/area.html?k%C3%B6nig",
+            IE = "/area.html?k\u00c3\u00b6nig")
+    @BuggyWebDriver(FF60)
+    @NotYetImplemented(IE)
+    public void areaUrlEncodingUTF8Header() throws Exception {
+        areaUrlEncoding(true, "UTF-8");
+    }
+
+    /**
+     * @throws Exception if the test fails
+     */
+    @Test
+    @Alerts(DEFAULT = "/area.html?k%C3%B6nig",
+            IE = "/area.html?k\u00c3\u00b6nig")
+    @BuggyWebDriver(FF60)
+    @NotYetImplemented(IE)
+    public void areaUrlEncodingUTF8Meta() throws Exception {
+        areaUrlEncoding(false, "UTF-8");
+    }
+
+    /**
+     * @throws Exception if the test fails
+     */
+    @Test
+    @Alerts(DEFAULT = "/area.html?k%F6nig",
+            IE = "/area.html?k\u00f6nig")
+    @BuggyWebDriver(FF60)
+    @NotYetImplemented(IE)
+    public void areaUrlEncodingISO8859_1Header() throws Exception {
+        areaUrlEncoding(true, "ISO-8859-1");
+    }
+
+    /**
+     * @throws Exception if the test fails
+     */
+    @Test
+    @Alerts(DEFAULT = "/area.html?k%F6nig",
+            IE = "/area.html?k\u00f6nig")
+    @BuggyWebDriver(FF60)
+    @NotYetImplemented(IE)
+    public void areaUrlEncodingISO8859_1Meta() throws Exception {
+        areaUrlEncoding(false, "ISO-8859-1");
+    }
+
+    /**
+     * @throws Exception if the test fails
+     */
+    @Test
+    @Alerts(DEFAULT = "/test.gif?k%C3%B6nig",
+            IE = "/test.gif?k\u00c3\u00b6nig")
+    @NotYetImplemented(IE)
+    public void imageUrlEncodingUTF8Header() throws Exception {
+        imageUrlEncoding(true, "UTF-8");
+    }
+
+    /**
+     * @throws Exception if the test fails
+     */
+    @Test
+    @Alerts(DEFAULT = "/test.gif?k%C3%B6nig",
+            IE = "/test.gif?k\u00c3\u00b6nig")
+    @NotYetImplemented(IE)
+    public void imageUrlEncodingUTF8Meta() throws Exception {
+        imageUrlEncoding(false, "UTF-8");
+    }
+
+    /**
+     * @throws Exception if the test fails
+     */
+    @Test
+    @Alerts(DEFAULT = "/test.gif?k%F6nig",
+            IE = "/test.gif?k\u00f6nig")
+    @NotYetImplemented(IE)
+    public void imageUrlEncodingISO8859_1Header() throws Exception {
+        imageUrlEncoding(true, "ISO_8859_1");
+    }
+
+    /**
+     * @throws Exception if the test fails
+     */
+    @Test
+    @Alerts(DEFAULT = "/test.gif?k%F6nig",
+            IE = "/test.gif?k\u00f6nig")
+    @NotYetImplemented(IE)
+    public void imageUrlEncodingISO8859_1Meta() throws Exception {
+        imageUrlEncoding(false, "ISO_8859_1");
+    }
+
+    /**
+     * @throws Exception if the test fails
+     */
+    @Test
     @Alerts(DEFAULT = "/test.css?k%C3%B6nig",
             IE = "/test.css?k\u00c3\u00b6nig")
     @NotYetImplemented(IE)
@@ -301,6 +395,26 @@
                 true);
     }
 
+    private void areaUrlEncoding(final boolean header, final String charset) throws Exception {
+        urlEncoding(header, charset,
+                null,
+                "  <img id='myImg' usemap='#dot' width='100' height='100'"
+                        + " src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAA"
+                        + "HElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=='>\n"
+                + "  <map name='dot'>\n"
+                + "    <area id='myLink' shape='rect' coords='0,0,42,42' href='area.html?k\u00F6nig'/>\n"
+                + "  <map>\n",
+                true);
+    }
+
+    private void imageUrlEncoding(final boolean header, final String charset) throws Exception {
+        urlEncoding(header, charset,
+                null,
+                "  <img id='myImg' src='test.gif?k\u00F6nig'>"
+                + "  <button id='myLink' onClick='document.getElementById(\"myImg\").width'></button>",
+                true);
+    }
+
     private void linkUrlEncoding(final boolean header, final String charset) throws Exception {
         urlEncoding(header, charset,
                 "  <link rel='stylesheet' type='text/css' href='test.css?k\u00F6nig'>",
@@ -418,11 +532,8 @@
     }
 
 //    HtmlApplet.java
-//    HtmlArea.java
 //    HtmlEmbed.java
 //    HtmlForm.java
-//    HtmlImage.java
 //    HtmlImageInput.java
 //    HtmlObject.java
-
 }


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot