+2007-03-15 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Adele
+
+ <rdar://problem/4429701>
+ Implements a port blocking black list that matches Firefox's
+
+ The layout test attempts to load an image at an invalid domain name on each
+ of the black listed ports. Using dumpResourceLoadCallbacks(), DRT is able
+ to see the error codes for each resource. A successful test shows the blocked
+ error for each image load except for the few that are standard or should
+ succeed due to exemptions.
+
+ * security/block-test-expected.txt: Added.
+ * security/block-test.html: Added.
+
2007-03-14 Justin Garcia <justin.garcia@apple.com>
Reviewed by john
--- /dev/null
+http://nonexistantdomain.com.fake/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake/test.jpg> redirectResponse (null)
+<unknown> - didFinishLoading
+http://nonexistantdomain.com.fake:1/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:1/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake/test.jpg - didFailLoadingWithError: <NSError domain NSURLErrorDomain, code -1003, failing URL "http://nonexistantdomain.com.fake/test.jpg">
+http://nonexistantdomain.com.fake:1/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:1/test.jpg">
+http://nonexistantdomain.com.fake:7/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:7/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:7/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:7/test.jpg">
+http://nonexistantdomain.com.fake:9/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:9/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:9/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:9/test.jpg">
+http://nonexistantdomain.com.fake:11/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:11/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:11/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:11/test.jpg">
+http://nonexistantdomain.com.fake:13/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:13/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:13/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:13/test.jpg">
+http://nonexistantdomain.com.fake:15/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:15/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:15/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:15/test.jpg">
+http://nonexistantdomain.com.fake:17/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:17/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:17/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:17/test.jpg">
+http://nonexistantdomain.com.fake:19/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:19/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:19/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:19/test.jpg">
+http://nonexistantdomain.com.fake:20/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:20/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:20/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:20/test.jpg">
+http://nonexistantdomain.com.fake:21/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:21/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:21/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:21/test.jpg">
+http://nonexistantdomain.com.fake:22/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:22/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:22/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:22/test.jpg">
+http://nonexistantdomain.com.fake:23/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:23/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:23/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:23/test.jpg">
+http://nonexistantdomain.com.fake:25/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:25/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:25/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:25/test.jpg">
+http://nonexistantdomain.com.fake:37/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:37/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:37/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:37/test.jpg">
+http://nonexistantdomain.com.fake:42/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:42/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:42/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:42/test.jpg">
+http://nonexistantdomain.com.fake:43/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:43/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:43/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:43/test.jpg">
+http://nonexistantdomain.com.fake:53/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:53/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:53/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:53/test.jpg">
+http://nonexistantdomain.com.fake:77/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:77/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:77/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:77/test.jpg">
+http://nonexistantdomain.com.fake:79/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:79/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:79/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:79/test.jpg">
+http://nonexistantdomain.com.fake:87/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:87/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:87/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:87/test.jpg">
+http://nonexistantdomain.com.fake:95/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:95/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:95/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:95/test.jpg">
+http://nonexistantdomain.com.fake:101/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:101/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:101/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:101/test.jpg">
+http://nonexistantdomain.com.fake:102/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:102/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:102/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:102/test.jpg">
+http://nonexistantdomain.com.fake:103/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:103/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:103/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:103/test.jpg">
+http://nonexistantdomain.com.fake:104/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:104/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:104/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:104/test.jpg">
+http://nonexistantdomain.com.fake:109/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:109/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:109/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:109/test.jpg">
+http://nonexistantdomain.com.fake:110/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:110/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:110/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:110/test.jpg">
+http://nonexistantdomain.com.fake:111/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:111/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:111/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:111/test.jpg">
+http://nonexistantdomain.com.fake:113/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:113/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:113/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:113/test.jpg">
+http://nonexistantdomain.com.fake:115/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:115/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:115/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:115/test.jpg">
+http://nonexistantdomain.com.fake:117/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:117/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:117/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:117/test.jpg">
+http://nonexistantdomain.com.fake:119/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:119/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:119/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:119/test.jpg">
+http://nonexistantdomain.com.fake:123/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:123/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:123/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:123/test.jpg">
+http://nonexistantdomain.com.fake:135/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:135/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:135/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:135/test.jpg">
+http://nonexistantdomain.com.fake:139/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:139/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:139/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:139/test.jpg">
+http://nonexistantdomain.com.fake:143/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:143/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:143/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:143/test.jpg">
+http://nonexistantdomain.com.fake:179/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:179/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:179/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:179/test.jpg">
+http://nonexistantdomain.com.fake:389/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:389/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:389/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:389/test.jpg">
+http://nonexistantdomain.com.fake:465/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:465/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:465/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:465/test.jpg">
+http://nonexistantdomain.com.fake:512/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:512/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:512/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:512/test.jpg">
+http://nonexistantdomain.com.fake:513/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:513/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:513/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:513/test.jpg">
+http://nonexistantdomain.com.fake:514/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:514/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:514/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:514/test.jpg">
+http://nonexistantdomain.com.fake:515/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:515/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:515/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:515/test.jpg">
+http://nonexistantdomain.com.fake:526/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:526/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:526/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:526/test.jpg">
+http://nonexistantdomain.com.fake:530/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:530/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:530/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:530/test.jpg">
+http://nonexistantdomain.com.fake:531/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:531/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:531/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:531/test.jpg">
+http://nonexistantdomain.com.fake:532/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:532/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:532/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:532/test.jpg">
+http://nonexistantdomain.com.fake:540/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:540/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:540/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:540/test.jpg">
+http://nonexistantdomain.com.fake:556/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:556/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:556/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:556/test.jpg">
+http://nonexistantdomain.com.fake:563/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:563/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:563/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:563/test.jpg">
+http://nonexistantdomain.com.fake:587/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:587/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:587/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:587/test.jpg">
+http://nonexistantdomain.com.fake:601/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:601/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:601/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:601/test.jpg">
+http://nonexistantdomain.com.fake:636/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:636/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:636/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:636/test.jpg">
+http://nonexistantdomain.com.fake:993/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:993/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:993/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:993/test.jpg">
+http://nonexistantdomain.com.fake:995/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:995/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:995/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:995/test.jpg">
+http://nonexistantdomain.com.fake:2049/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:2049/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:2049/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:2049/test.jpg">
+http://nonexistantdomain.com.fake:4045/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:4045/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:4045/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:4045/test.jpg">
+http://nonexistantdomain.com.fake:6000/test.jpg - willSendRequest <NSURLRequest http://nonexistantdomain.com.fake:6000/test.jpg> redirectResponse (null)
+http://nonexistantdomain.com.fake:6000/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://nonexistantdomain.com.fake:6000/test.jpg">
+ftp://nonexistantdomain.com.fake/test.jpg - willSendRequest <NSURLRequest ftp://nonexistantdomain.com.fake/test.jpg> redirectResponse (null)
+ftp://nonexistantdomain.com.fake/test.jpg - didFailLoadingWithError: <NSError domain NSURLErrorDomain, code -1004, failing URL "ftp://nonexistantdomain.com.fake/test.jpg">
+ftp://nonexistantdomain.com.fake:21/test.jpg - willSendRequest <NSURLRequest ftp://nonexistantdomain.com.fake:21/test.jpg> redirectResponse (null)
+ftp://nonexistantdomain.com.fake:21/test.jpg - didFailLoadingWithError: <NSError domain NSURLErrorDomain, code -1004, failing URL "ftp://nonexistantdomain.com.fake:21/test.jpg">
+ftp://nonexistantdomain.com.fake:22/test.jpg - willSendRequest <NSURLRequest ftp://nonexistantdomain.com.fake:22/test.jpg> redirectResponse (null)
+ftp://nonexistantdomain.com.fake:22/test.jpg - didFailLoadingWithError: <NSError domain NSURLErrorDomain, code -1004, failing URL "ftp://nonexistantdomain.com.fake:22/test.jpg">
+This test attempts to change the src of an IMG tag to all black listed ports to confirm that WebKit returns the correct error for them - blocked instead of cannot find. It also tries the FTP ports for exemptions. Due to the nature of this test, the results can only be processed automatically via DumpRenderTree
+
+
--- /dev/null
+<html>
+<script>
+ var blockedPorts = new Array(1, 7, 9, 11, 13, 15, 17, 19, 20,
+ 21, 22, 23, 25, 37, 42, 43, 53, 77, 79, 87, 95, 101, 102,
+ 103, 104, 109, 110, 111, 113, 115, 117, 119, 123, 135, 139,
+ 143, 179, 389, 465, 512, 513, 514, 515, 526, 530, 531, 532,
+ 540, 556, 563, 587, 601, 636, 993, 995, 2049, 4045, 6000, 0);
+
+ var baseURL = "nonexistantdomain.com.fake";
+ var currentPort = 0;
+
+ if (window.layoutTestController) {
+ layoutTestController.waitUntilDone();
+ layoutTestController.dumpResourceLoadCallbacks();
+ }
+
+ function nextTest() {
+ if (!blockedPorts[currentPort]) {
+ ftpTest();
+ return;
+ }
+ var newURL = "http://" + baseURL + ":" + blockedPorts[currentPort] + "/test.jpg";
+ currentPort++;
+ testIMG.src = newURL;
+ }
+
+ function ftpTest() {
+ testIMG.setAttribute("onError", "ftp21Test();");
+ var newURL = "ftp://" + baseURL + "/test.jpg";
+ testIMG.src = newURL;
+ }
+
+ function ftp21Test() {
+ testIMG.setAttribute("onError", "ftp22Test();");
+ var newURL = "ftp://" + baseURL + ":21/test.jpg";
+ testIMG.src = newURL;
+ }
+
+ function ftp22Test() {
+ testIMG.setAttribute("onError", "finishTesting();");
+ var newURL = "ftp://" + baseURL + ":22/test.jpg";
+ testIMG.src = newURL;
+ }
+
+ function finishTesting() {
+ if (window.layoutTestController) {
+ layoutTestController.dumpAsText();
+ setTimeout("layoutTestController.notifyDone()", 0);
+ }
+ }
+</script>
+<body>
+<p>This test attempts to change the src of an IMG tag to all black listed ports to confirm that WebKit returns the
+correct error for them - blocked instead of cannot find. It also tries the FTP ports for exemptions. Due to the
+nature of this test, the results can only be processed automatically via DumpRenderTree
+</p>
+<img id="testIMG" src="http://nonexistantdomain.com.fake/test.jpg" onError="nextTest();"></img>
+</body>
+</html>
+2007-03-15 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Maciej
+
+ <rdar://problem/4429701>
+ Implements a port blocking black list that matches Firefox's
+
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::blockedError): Call through to the client for blockedError
+ * loader/FrameLoader.h:
+
+ * loader/FrameLoaderClient.h: Get the "port blocked" error for the current platform
+
+ * loader/ResourceLoader.cpp:
+ (WebCore::ResourceLoader::wasBlocked): ResourceHandleClient method to pass on the didFail(error)
+ (WebCore::ResourceLoader::blockedError): Following the pattern of "CancelledError()", get the
+ error to fail with for the didFail() call
+ * loader/ResourceLoader.h:
+
+ * platform/graphics/svg/SVGImageEmptyClients.h:
+ (WebCore::SVGEmptyFrameLoaderClient::blockedError): Added stub
+
+ * platform/network/ResourceHandle.cpp:
+ (WebCore::ResourceHandle::create): If the port is blocked, create the handle but schedule it for
+ deferred failure on a timer
+ (WebCore::ResourceHandle::scheduleBlockedFailure): Do the timer scheduling
+ (WebCore::ResourceHandle::fireBlockedFailure): Fire the timer here
+ (WebCore::ResourceHandle::portAllowed): Implements checking of Mozilla's
+ * platform/network/ResourceHandle.h:
+ * platform/network/ResourceHandleClient.h:
+ (WebCore::ResourceHandleClient::wasBlocked): Virtual for clients to get the "blocked" message
+
2007-03-15 Beth Dakin <bdakin@apple.com>
Reviewed by Hyatt.
return m_client->cancelledError(request);
}
+ResourceError FrameLoader::blockedError(const ResourceRequest& request) const
+{
+ return m_client->blockedError(request);
+}
+
ResourceError FrameLoader::fileDoesNotExistError(const ResourceResponse& response) const
{
return m_client->fileDoesNotExistError(response);
ResourceError cancelledError(const ResourceRequest&) const;
ResourceError fileDoesNotExistError(const ResourceResponse&) const;
+ ResourceError blockedError(const ResourceRequest&) const;
bool willUseArchive(ResourceLoader*, const ResourceRequest&, const KURL&) const;
bool isArchiveLoadPending(ResourceLoader*) const;
void cannotShowMIMEType(const ResourceResponse&);
virtual bool shouldGoToHistoryItem(HistoryItem*) const = 0;
virtual ResourceError cancelledError(const ResourceRequest&) = 0;
+ virtual ResourceError blockedError(const ResourceRequest&) = 0;
virtual ResourceError cannotShowURLError(const ResourceRequest&) = 0;
virtual ResourceError interruptForPolicyChangeError(const ResourceRequest&) = 0;
releaseResources();
}
+void ResourceLoader::wasBlocked()
+{
+ didFail(blockedError());
+}
+
void ResourceLoader::didCancel(const ResourceError& error)
{
ASSERT(!m_cancelled);
return frameLoader()->cancelledError(m_request);
}
+ResourceError ResourceLoader::blockedError()
+{
+ return frameLoader()->blockedError(m_request);
+}
+
void ResourceLoader::willSendRequest(ResourceHandle*, ResourceRequest& request, const ResourceResponse& redirectResponse)
{
willSendRequest(request, redirectResponse);
didFail(error);
}
+void ResourceLoader::wasBlocked(ResourceHandle*)
+{
+ wasBlocked();
+}
+
void ResourceLoader::didReceiveAuthenticationChallenge(const AuthenticationChallenge& challenge)
{
// Protect this in this delegate method since the additional processing can do
virtual void cancel(const ResourceError&);
ResourceError cancelledError();
-
+ ResourceError blockedError();
+
virtual void setDefersLoading(bool);
void setIdentifier(unsigned long identifier) { m_identifier = identifier; }
void willStopBufferingData(const char*, int);
virtual void didFinishLoading();
virtual void didFail(const ResourceError&);
+ virtual void wasBlocked();
void didReceiveAuthenticationChallenge(const AuthenticationChallenge&);
void didCancelAuthenticationChallenge(const AuthenticationChallenge&);
virtual void didReceiveData(ResourceHandle*, const char*, int, int lengthReceived);
virtual void didFinishLoading(ResourceHandle*);
virtual void didFail(ResourceHandle*, const ResourceError&);
+ virtual void wasBlocked(ResourceHandle*);
virtual void willStopBufferingData(ResourceHandle*, const char* data, int length) { willStopBufferingData(data, length); }
virtual void didReceiveAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge& challenge) { didReceiveAuthenticationChallenge(challenge); }
virtual void didCancelAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge& challenge) { didCancelAuthenticationChallenge(challenge); }
virtual void finalSetupForReplace(DocumentLoader*) { }
virtual ResourceError cancelledError(const ResourceRequest&) { return ResourceError(); }
+ virtual ResourceError blockedError(const ResourceRequest&) { return ResourceError(); }
virtual ResourceError cannotShowURLError(const ResourceRequest&) { return ResourceError(); }
virtual ResourceError interruptForPolicyChangeError(const ResourceRequest&) { return ResourceError(); }
#include "ResourceHandleInternal.h"
#include "Logging.h"
+#include "ResourceHandleClient.h"
+#include "Timer.h"
+
+#include <wtf/HashSet.h>
namespace WebCore {
PassRefPtr<ResourceHandle> ResourceHandle::create(const ResourceRequest& request, ResourceHandleClient* client, Frame* frame, bool defersLoading, bool mightDownloadFromHandle)
{
- RefPtr<ResourceHandle> newLoader(new ResourceHandle(request, client, defersLoading, mightDownloadFromHandle));
-
- if (newLoader->start(frame))
- return newLoader.release();
+ RefPtr<ResourceHandle> newHandle(new ResourceHandle(request, client, defersLoading, mightDownloadFromHandle));
+
+ if (!portAllowed(request)) {
+ newHandle->scheduleBlockedFailure();
+ return newHandle.release();
+ }
+
+ if (newHandle->start(frame))
+ return newHandle.release();
return 0;
}
+void ResourceHandle::scheduleBlockedFailure()
+{
+ Timer<ResourceHandle>* blockedTimer = new Timer<ResourceHandle>(this, &ResourceHandle::fireBlockedFailure);
+ blockedTimer->startOneShot(0);
+}
+
+void ResourceHandle::fireBlockedFailure(Timer<ResourceHandle>* timer)
+{
+ client()->wasBlocked(this);
+ delete timer;
+}
+
const HTTPHeaderMap& ResourceHandle::requestHeaders() const
{
return d->m_request.httpHeaderFields();
d->m_currentWebChallenge.nullify();
}
+bool ResourceHandle::portAllowed(const ResourceRequest& request)
+{
+ uint16_t port = request.url().port();
+ if (!port)
+ return true;
+
+ // The blocked port list matches the port blocking mozilla implements
+ // See http://www.mozilla.org/projects/netlib/PortBanning.html for more information
+ static uint16_t blockedPortList[] = {
+ 1, // tcpmux
+ 7, // echo
+ 9, // discard
+ 11, // systat
+ 13, // daytime
+ 15, // netstat
+ 17, // qotd
+ 19, // chargen
+ 20, // FTP-data
+ 21, // FTP-control
+ 22, // SSH
+ 23, // telnet
+ 25, // SMTP
+ 37, // time
+ 42, // name
+ 43, // nicname
+ 53, // domain
+ 77, // priv-rjs
+ 79, // finger
+ 87, // ttylink
+ 95, // supdup
+ 101, // hostriame
+ 102, // iso-tsap
+ 103, // gppitnp
+ 104, // acr-nema
+ 109, // POP2
+ 110, // POP3
+ 111, // sunrpc
+ 113, // auth
+ 115, // SFTP
+ 117, // uucp-path
+ 119, // nntp
+ 123, // NTP
+ 135, // loc-srv / epmap
+ 139, // netbios
+ 143, // IMAP2
+ 179, // BGP
+ 389, // LDAP
+ 465, // SMTP+SSL
+ 512, // print / exec
+ 513, // login
+ 514, // shell
+ 515, // printer
+ 526, // tempo
+ 530, // courier
+ 531, // Chat
+ 532, // netnews
+ 540, // UUCP
+ 556, // remotefs
+ 563, // NNTP+SSL
+ 587, // ESMTP
+ 601, // syslog-conn
+ 636, // LDAP+SSL
+ 993, // IMAP+SSL
+ 995, // POP3+SSL
+ 2049, // NFS
+ 4045, // lockd
+ 6000, // X11
+ 0 };
+
+ static HashSet<int>* blockedPortHash = 0;
+ if (!blockedPortHash) {
+ blockedPortHash = new HashSet<int>;
+
+ for (int i = 0; blockedPortList[i]; ++i)
+ blockedPortHash->add(blockedPortList[i]);
+ }
+
+ bool restricted = blockedPortHash->contains(port);
+
+ if (restricted) {
+ // An exception in the mozilla port blocking is they allow 21 and 22 for FTP (and Secure FTP), which we have to do also
+ if ((port == 21 || port == 22) && request.url().url().startsWith("ftp:", false))
+ return true;
+ }
+
+ return !restricted;
+}
+
+
} // namespace WebCore
PassRefPtr<FormData> postData() const;
const ResourceRequest& request() const;
+ void fireBlockedFailure(Timer<ResourceHandle>*);
+
private:
+ static bool portAllowed(const ResourceRequest&);
+
+ void scheduleBlockedFailure();
+
bool start(Frame*);
OwnPtr<ResourceHandleInternal> d;
virtual void didReceiveData(ResourceHandle*, const char*, int, int lengthReceived) { }
virtual void didFinishLoading(ResourceHandle*) { }
virtual void didFail(ResourceHandle*, const ResourceError&) { }
+ virtual void wasBlocked(ResourceHandle*) { }
virtual void willCacheResponse(ResourceHandle*, CacheStoragePolicy&) { }
+2007-03-15 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Maciej
+
+ <rdar://problem/4429701>
+ Implements a port blocking black list that matches Firefox's
+
+ * English.lproj/Localizable.strings: Added localizable string for port blocked error code
+
+ * Misc/WebKitErrors.h:
+ * Misc/WebKitErrors.m:
+ (registerErrors): Add new port blocked error code to WebKitErrorDomain
+
+ * WebCoreSupport/WebFrameLoaderClient.h:
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+ (WebFrameLoaderClient::cancelledError): Fixed coding style
+ (WebFrameLoaderClient::blockedError): Return a ResourceError with the new custom error code
+
2007-03-15 Timothy Hatcher <timothy@apple.com>
Reviewed by John.
#define WebKitErrorDescriptionCannotShowMIMEType UI_STRING("Cannot show content with specified mime type", "WebKitErrorCannotShowMIMEType description")
#define WebKitErrorDescriptionCannotShowURL UI_STRING("Cannot show URL", "WebKitErrorCannotShowURL description")
#define WebKitErrorDescriptionFrameLoadInterruptedByPolicyChange UI_STRING("Frame load interrupted", "WebKitErrorFrameLoadInterruptedByPolicyChange description")
+#define WebKitErrorDescriptionCannotUseRestrictedPort UI_STRING("Not allowed to use restricted network port", "WebKitErrorCannotUseRestrictedPort description")
// Plug-in and java errors
#define WebKitErrorDescriptionCannotFindPlugin UI_STRING("Cannot find plug-in", "WebKitErrorCannotFindPlugin description")
WebKitErrorDescriptionCannotShowMIMEType, [NSNumber numberWithInt: WebKitErrorCannotShowMIMEType],
WebKitErrorDescriptionCannotShowURL, [NSNumber numberWithInt: WebKitErrorCannotShowURL],
WebKitErrorDescriptionFrameLoadInterruptedByPolicyChange, [NSNumber numberWithInt: WebKitErrorFrameLoadInterruptedByPolicyChange],
-
+ WebKitErrorDescriptionCannotUseRestrictedPort, [NSNumber numberWithInt: WebKitErrorCannotUseRestrictedPort],
+
// Plug-in and java errors
WebKitErrorDescriptionCannotFindPlugin, [NSNumber numberWithInt: WebKitErrorCannotFindPlugIn],
WebKitErrorDescriptionCannotLoadPlugin, [NSNumber numberWithInt: WebKitErrorCannotLoadPlugIn],
// FIXME: WebKitErrorPlugInWillHandleLoad is used for the cancel we do to prevent loading plugin content twice. See <rdar://problem/4258008>
#define WebKitErrorPlugInWillHandleLoad 204
+/*!
+ @enum
+ @abstract Policy errors - Pending Public API Review
+ @constant WebKitErrorCannotUseRestrictedPort
+*/
+enum {
+ WebKitErrorCannotUseRestrictedPort = 103,
+};
+
@interface NSError (WebKitExtras)
+ (NSError *)_webKitErrorWithCode:(int)code failingURL:(NSString *)URL;
+ (NSError *)_webKitErrorWithDomain:(NSString *)domain code:(int)code URL:(NSURL *)URL;
virtual bool shouldGoToHistoryItem(WebCore::HistoryItem*) const;
virtual WebCore::ResourceError cancelledError(const WebCore::ResourceRequest&);
+ virtual WebCore::ResourceError blockedError(const WebCore::ResourceRequest&);
virtual WebCore::ResourceError cannotShowURLError(const WebCore::ResourceRequest&);
virtual WebCore::ResourceError interruptForPolicyChangeError(const WebCore::ResourceRequest&);
return [[view _policyDelegateForwarder] webView:view shouldGoToHistoryItem:webItem];
}
-ResourceError WebFrameLoaderClient::cancelledError(const ResourceRequest &request)
+ResourceError WebFrameLoaderClient::cancelledError(const ResourceRequest& request)
{
return [NSError _webKitErrorWithDomain:NSURLErrorDomain code:NSURLErrorCancelled URL:request.url().getNSURL()];
}
+
+ResourceError WebFrameLoaderClient::blockedError(const ResourceRequest& request)
+{
+ return [NSError _webKitErrorWithDomain:WebKitErrorDomain code:WebKitErrorCannotUseRestrictedPort URL:request.url().getNSURL()];
+}
ResourceError WebFrameLoaderClient::cannotShowURLError(const ResourceRequest& request)
{