<!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.
<rdar://problem/5028178>
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.
<rdar://problem/5028178>
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 "disallowed URL", 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 <andersca@apple.com>
+
+ Reviewed by Darin.
+
+ <rdar://problem/5028178>
+ 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 <mitz@webkit.org>
</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>+<html>
+<body>
+<embed name="plg" type="application/x-webkit-test-netscape"></embed>
+<script>
+if (window.layoutTestController) {
+ layoutTestController.dumpAsText();
+ layoutTestController.addDisallowedURL('http://www.apple.com');
+
+ plg.getURL("http://www.apple.com", "callback");
+} else {
+ document.write("Cannot run interactively");
+}
+</script>This tests that we won't crash when a plugin tries to open an URL that the resource load delegate doesn't allow.
+<div>SUCCESS - didn't crash</div>
+</body>
+</html>
</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 <andersca@apple.com>
+
+ Reviewed by Darin.
+
+ <rdar://problem/5028178>
+ 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 <andersca@apple.com>
</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->documentLoader()->addPlugInStreamLoader(_loader);
</span><del>- if (!_loader->load(request))
- _loader->documentLoader()->removePlugInStreamLoader(_loader);
</del><ins>+ _loader->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 <andersca@apple.com>
+
+ Reviewed by Darin.
+
+ Add the notion of a "disallowed URL", 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 <mrowe@apple.com>
</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 @"setUserStyleSheetEnabled";
</span><span class="cx"> if (aSelector == @selector(objCClassNameOf:))
</span><span class="cx"> return @"objCClassName";
</span><ins>+ if (aSelector == @selector(addDisallowedURL:))
+ return @"addDisallowedURL";
+
</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 ("%s\n", [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>