<!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>[20694] trunk</title>
</head>
<body>

<div id="msg">
<dl>
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/20694">20694</a></dd>
<dt>Author</dt> <dd>andersca</dd>
<dt>Date</dt> <dd>2007-04-03 17:22:06 -0700 (Tue, 03 Apr 2007)</dd>
</dl>

<h3>Log Message</h3>
<pre>LayoutTests:

        Reviewed by Darin.

        &lt;rdar://problem/5028178&gt;
        Crash occurs at WebCore::FrameLoader::activeDocumentLoader() after loading Froggster widget

        * plugins/get-url-that-the-resource-load-delegate-will-disallow-expected.txt: Added.
        * plugins/get-url-that-the-resource-load-delegate-will-disallow.html: Added.

WebKit:

        Reviewed by Darin.

        &lt;rdar://problem/5028178&gt;
        Crash occurs at WebCore::FrameLoader::activeDocumentLoader() after loading Froggster widget
        
        * Plugins/WebNetscapePluginStream.mm:
        (-[WebNetscapePluginStream start]):
        If load returns no the plugin loader has already been removed by the didFail callback.

WebKitTools:

        Reviewed by Darin.

        Add the notion of a &quot;disallowed URL&quot;, which the resource loader won't allow to be loaded.
        
        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTree.m:
        (dumpRenderTree):
        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
        (+[LayoutTestController webScriptNameForSelector:]):
        (-[LayoutTestController addDisallowedURL:]):
        (runTest):
        * DumpRenderTree/ResourceLoadDelegate.m:
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkWebKitChangeLog">trunk/WebKit/ChangeLog</a></li>
<li><a href="#trunkWebKitPluginsWebNetscapePluginStreammm">trunk/WebKit/Plugins/WebNetscapePluginStream.mm</a></li>
<li><a href="#trunkWebKitToolsChangeLog">trunk/WebKitTools/ChangeLog</a></li>
<li><a href="#trunkWebKitToolsDumpRenderTreeDumpRenderTreeh">trunk/WebKitTools/DumpRenderTree/DumpRenderTree.h</a></li>
<li><a href="#trunkWebKitToolsDumpRenderTreeDumpRenderTreem">trunk/WebKitTools/DumpRenderTree/DumpRenderTree.m</a></li>
<li><a href="#trunkWebKitToolsDumpRenderTreeResourceLoadDelegatem">trunk/WebKitTools/DumpRenderTree/ResourceLoadDelegate.m</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestspluginsgeturlthattheresourceloaddelegatewilldisallowexpectedtxt">trunk/LayoutTests/plugins/get-url-that-the-resource-load-delegate-will-disallow-expected.txt</a></li>
<li><a href="#trunkLayoutTestspluginsgeturlthattheresourceloaddelegatewilldisallowhtml">trunk/LayoutTests/plugins/get-url-that-the-resource-load-delegate-will-disallow.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (20693 => 20694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2007-04-03 23:31:15 UTC (rev 20693)
+++ trunk/LayoutTests/ChangeLog        2007-04-04 00:22:06 UTC (rev 20694)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+2007-04-03  Anders Carlsson  &lt;andersca@apple.com&gt;
+
+        Reviewed by Darin.
+
+        &lt;rdar://problem/5028178&gt;
+        Crash occurs at WebCore::FrameLoader::activeDocumentLoader() after loading Froggster widget
+
+        * plugins/get-url-that-the-resource-load-delegate-will-disallow-expected.txt: Added.
+        * plugins/get-url-that-the-resource-load-delegate-will-disallow.html: Added.
+
</ins><span class="cx"> 2007-04-03  Mitz Pettel  &lt;mitz@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Reviewed by darin
</span></span></pre></div>
<a id="trunkLayoutTestspluginsgeturlthattheresourceloaddelegatewilldisallowexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/plugins/get-url-that-the-resource-load-delegate-will-disallow-expected.txt (0 => 20694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/plugins/get-url-that-the-resource-load-delegate-will-disallow-expected.txt                                (rev 0)
+++ trunk/LayoutTests/plugins/get-url-that-the-resource-load-delegate-will-disallow-expected.txt        2007-04-04 00:22:06 UTC (rev 20694)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+ This tests that we won't crash when a plugin tries to open an URL that the resource load delegate doesn't allow.
+SUCCESS - didn't crash
+
</ins></span></pre></div>
<a id="trunkLayoutTestspluginsgeturlthattheresourceloaddelegatewilldisallowhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/plugins/get-url-that-the-resource-load-delegate-will-disallow.html (0 => 20694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/plugins/get-url-that-the-resource-load-delegate-will-disallow.html                                (rev 0)
+++ trunk/LayoutTests/plugins/get-url-that-the-resource-load-delegate-will-disallow.html        2007-04-04 00:22:06 UTC (rev 20694)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+&lt;html&gt;
+&lt;body&gt;
+&lt;embed name=&quot;plg&quot; type=&quot;application/x-webkit-test-netscape&quot;&gt;&lt;/embed&gt;
+&lt;script&gt;
+if (window.layoutTestController) {
+    layoutTestController.dumpAsText();
+    layoutTestController.addDisallowedURL('http://www.apple.com');
+    
+    plg.getURL(&quot;http://www.apple.com&quot;, &quot;callback&quot;);
+} else {
+    document.write(&quot;Cannot run interactively&quot;);
+}
+&lt;/script&gt;This tests that we won't crash when a plugin tries to open an URL that the resource load delegate doesn't allow.
+&lt;div&gt;SUCCESS - didn't crash&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkWebKitChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/WebKit/ChangeLog (20693 => 20694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKit/ChangeLog        2007-04-03 23:31:15 UTC (rev 20693)
+++ trunk/WebKit/ChangeLog        2007-04-04 00:22:06 UTC (rev 20694)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2007-04-03  Anders Carlsson  &lt;andersca@apple.com&gt;
+
+        Reviewed by Darin.
+
+        &lt;rdar://problem/5028178&gt;
+        Crash occurs at WebCore::FrameLoader::activeDocumentLoader() after loading Froggster widget
+        
+        * Plugins/WebNetscapePluginStream.mm:
+        (-[WebNetscapePluginStream start]):
+        If load returns no the plugin loader has already been removed by the didFail callback.
+
</ins><span class="cx"> 2007-04-02  Anders Carlsson  &lt;andersca@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Reviewed by Geoff.
</span></span></pre></div>
<a id="trunkWebKitPluginsWebNetscapePluginStreammm"></a>
<div class="modfile"><h4>Modified: trunk/WebKit/Plugins/WebNetscapePluginStream.mm (20693 => 20694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKit/Plugins/WebNetscapePluginStream.mm        2007-04-03 23:31:15 UTC (rev 20693)
+++ trunk/WebKit/Plugins/WebNetscapePluginStream.mm        2007-04-04 00:22:06 UTC (rev 20694)
</span><span class="lines">@@ -109,8 +109,7 @@
</span><span class="cx">     ASSERT(request);
</span><span class="cx"> 
</span><span class="cx">     _loader-&gt;documentLoader()-&gt;addPlugInStreamLoader(_loader);
</span><del>-    if (!_loader-&gt;load(request))
-        _loader-&gt;documentLoader()-&gt;removePlugInStreamLoader(_loader);
</del><ins>+    _loader-&gt;load(request);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (void)cancelLoadWithError:(NSError *)error
</span></span></pre></div>
<a id="trunkWebKitToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/WebKitTools/ChangeLog (20693 => 20694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKitTools/ChangeLog        2007-04-03 23:31:15 UTC (rev 20693)
+++ trunk/WebKitTools/ChangeLog        2007-04-04 00:22:06 UTC (rev 20694)
</span><span class="lines">@@ -1,3 +1,19 @@
</span><ins>+2007-04-03  Anders Carlsson  &lt;andersca@apple.com&gt;
+
+        Reviewed by Darin.
+
+        Add the notion of a &quot;disallowed URL&quot;, which the resource loader won't allow to be loaded.
+        
+        * DumpRenderTree/DumpRenderTree.h:
+        * DumpRenderTree/DumpRenderTree.m:
+        (dumpRenderTree):
+        (+[LayoutTestController isSelectorExcludedFromWebScript:]):
+        (+[LayoutTestController webScriptNameForSelector:]):
+        (-[LayoutTestController addDisallowedURL:]):
+        (runTest):
+        * DumpRenderTree/ResourceLoadDelegate.m:
+        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
+
</ins><span class="cx"> 2007-04-03  Mark Rowe  &lt;mrowe@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Reviewed by Antti.
</span></span></pre></div>
<a id="trunkWebKitToolsDumpRenderTreeDumpRenderTreeh"></a>
<div class="modfile"><h4>Modified: trunk/WebKitTools/DumpRenderTree/DumpRenderTree.h (20693 => 20694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKitTools/DumpRenderTree/DumpRenderTree.h        2007-04-03 23:31:15 UTC (rev 20693)
+++ trunk/WebKitTools/DumpRenderTree/DumpRenderTree.h        2007-04-04 00:22:06 UTC (rev 20694)
</span><span class="lines">@@ -34,4 +34,4 @@
</span><span class="cx"> extern DumpRenderTreeDraggingInfo *draggingInfo;
</span><span class="cx"> extern volatile BOOL done;
</span><span class="cx"> extern BOOL shouldDumpResourceLoadCallbacks;
</span><del>-
</del><ins>+extern NSMutableSet *disallowedURLs;
</ins></span></pre></div>
<a id="trunkWebKitToolsDumpRenderTreeDumpRenderTreem"></a>
<div class="modfile"><h4>Modified: trunk/WebKitTools/DumpRenderTree/DumpRenderTree.m (20693 => 20694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKitTools/DumpRenderTree/DumpRenderTree.m        2007-04-03 23:31:15 UTC (rev 20693)
+++ trunk/WebKitTools/DumpRenderTree/DumpRenderTree.m        2007-04-04 00:22:06 UTC (rev 20694)
</span><span class="lines">@@ -103,6 +103,7 @@
</span><span class="cx"> WebFrame *frame = 0;
</span><span class="cx"> BOOL shouldDumpEditingCallbacks;
</span><span class="cx"> BOOL shouldDumpResourceLoadCallbacks;
</span><ins>+NSMutableSet *disallowedURLs = 0;
</ins><span class="cx"> 
</span><span class="cx"> static void runTest(const char *pathOrURL);
</span><span class="cx"> static NSString *md5HashStringForBitmap(CGImageRef bitmap);
</span><span class="lines">@@ -528,6 +529,9 @@
</span><span class="cx">     [navigationController release];
</span><span class="cx">     navigationController = nil;
</span><span class="cx">     
</span><ins>+    [disallowedURLs release];
+    disallowedURLs = nil;
+    
</ins><span class="cx">     if (dumpPixels)
</span><span class="cx">         restoreColorSpace(0);
</span><span class="cx"> }
</span><span class="lines">@@ -1008,7 +1012,8 @@
</span><span class="cx">             || aSelector == @selector(accessStoredWebScriptObject)
</span><span class="cx">             || aSelector == @selector(setUserStyleSheetLocation:)
</span><span class="cx">             || aSelector == @selector(setUserStyleSheetEnabled:)
</span><del>-            || aSelector == @selector(objCClassNameOf:))
</del><ins>+            || aSelector == @selector(objCClassNameOf:)
+            || aSelector == @selector(addDisallowedURL:))
</ins><span class="cx">         return NO;
</span><span class="cx">     return YES;
</span><span class="cx"> }
</span><span class="lines">@@ -1039,6 +1044,9 @@
</span><span class="cx">         return @&quot;setUserStyleSheetEnabled&quot;;
</span><span class="cx">     if (aSelector == @selector(objCClassNameOf:))
</span><span class="cx">         return @&quot;objCClassName&quot;;
</span><ins>+    if (aSelector == @selector(addDisallowedURL:))
+        return @&quot;addDisallowedURL&quot;;
+    
</ins><span class="cx">     return nil;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1083,13 +1091,26 @@
</span><span class="cx">     dumpAsText = YES;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-- (void)setUserStyleSheetLocation:(NSString *)path;
</del><ins>+- (void)addDisallowedURL:(NSString *)urlString
</ins><span class="cx"> {
</span><ins>+    if (!disallowedURLs)
+        disallowedURLs = [[NSMutableSet alloc] init];
+    
+    
+    // Canonicalize the URL
+    NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
+    request = [NSURLProtocol canonicalRequestForRequest:request];
+    
+    [disallowedURLs addObject:[request URL]];
+}
+
+- (void)setUserStyleSheetLocation:(NSString *)path
+{
</ins><span class="cx">     NSURL *url = [NSURL URLWithString:path];
</span><span class="cx">     [[WebPreferences standardPreferences] setUserStyleSheetLocation:url];
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-- (void)setUserStyleSheetEnabled:(BOOL)flag;
</del><ins>+- (void)setUserStyleSheetEnabled:(BOOL)flag
</ins><span class="cx"> {
</span><span class="cx">     [[WebPreferences standardPreferences] setUserStyleSheetEnabled:flag];
</span><span class="cx"> }
</span><span class="lines">@@ -1324,7 +1345,8 @@
</span><span class="cx">     if ([WebHistory optionalSharedHistory])
</span><span class="cx">         [WebHistory setOptionalSharedHistory:nil];
</span><span class="cx">     lastMousePosition = NSMakePoint(0, 0);
</span><del>-
</del><ins>+    [disallowedURLs removeAllObjects];
+    
</ins><span class="cx">     if (currentTest != nil)
</span><span class="cx">         CFRelease(currentTest);
</span><span class="cx">     currentTest = (NSString *)pathOrURLString;
</span></span></pre></div>
<a id="trunkWebKitToolsDumpRenderTreeResourceLoadDelegatem"></a>
<div class="modfile"><h4>Modified: trunk/WebKitTools/DumpRenderTree/ResourceLoadDelegate.m (20693 => 20694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKitTools/DumpRenderTree/ResourceLoadDelegate.m        2007-04-03 23:31:15 UTC (rev 20693)
+++ trunk/WebKitTools/DumpRenderTree/ResourceLoadDelegate.m        2007-04-04 00:22:06 UTC (rev 20694)
</span><span class="lines">@@ -117,6 +117,9 @@
</span><span class="cx">         printf (&quot;%s\n&quot;, [string UTF8String]);
</span><span class="cx">     }    
</span><span class="cx">     
</span><ins>+    if ([disallowedURLs containsObject:[newRequest URL]])
+        return nil;
+    
</ins><span class="cx">     return newRequest;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>