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

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { 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 #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#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>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/187620">187620</a></dd>
<dt>Author</dt> <dd>andersca@apple.com</dd>
<dt>Date</dt> <dd>2015-07-30 16:38:23 -0700 (Thu, 30 Jul 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Assertion failure when a plug-in loads a resource that redirects somewhere
https://bugs.webkit.org/show_bug.cgi?id=147469

Reviewed by Alexey Proskuryakov.

Source/WebCore:

Test: http/tests/plugins/get-url-redirect.html

<a href="http://trac.webkit.org/projects/webkit/changeset/186597">r186597</a> moved the call to addPlugInStreamLoader to willSendRequest. This is wrong since
willSendRequest can be invoked more than once.

Fix this by making the initialization phase of NetscapePlugInStreamLoader be more like
SubresourceLoader where we only call addPlugInStreamLoader once we've successfully initialized
the loader, and only call removePlugInStreamLoader if we've called addPlugInStreamLoader.

Also change addPlugInStreamLoader and removePlugInStreamLoader to take references.

* loader/DocumentLoader.cpp:
(WebCore::DocumentLoader::addPlugInStreamLoader):
(WebCore::DocumentLoader::removePlugInStreamLoader):
* loader/DocumentLoader.h:
* loader/NetscapePlugInStreamLoader.cpp:
(WebCore::NetscapePlugInStreamLoader::create):
(WebCore::NetscapePlugInStreamLoader::init):
(WebCore::NetscapePlugInStreamLoader::didFinishLoading):
(WebCore::NetscapePlugInStreamLoader::didFail):
(WebCore::NetscapePlugInStreamLoader::didCancel):
(WebCore::NetscapePlugInStreamLoader::notifyDone):
* loader/NetscapePlugInStreamLoader.h:
* loader/ResourceLoader.cpp:
(WebCore::ResourceLoader::willSendRequest): Deleted.
* loader/ResourceLoader.h:
(WebCore::ResourceLoader::isPlugInStreamLoader): Deleted.
* loader/SubframeLoader.cpp:
(WebCore::SubframeLoader::requestObject):

LayoutTests:

Add a test.

* http/tests/plugins/get-url-redirect-expected.txt: Added.
* http/tests/plugins/get-url-redirect.html: Added.
* http/tests/plugins/resources/redirection-response.php: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreloaderDocumentLoadercpp">trunk/Source/WebCore/loader/DocumentLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderDocumentLoaderh">trunk/Source/WebCore/loader/DocumentLoader.h</a></li>
<li><a href="#trunkSourceWebCoreloaderNetscapePlugInStreamLoadercpp">trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderNetscapePlugInStreamLoaderh">trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.h</a></li>
<li><a href="#trunkSourceWebCoreloaderResourceLoadercpp">trunk/Source/WebCore/loader/ResourceLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderResourceLoaderh">trunk/Source/WebCore/loader/ResourceLoader.h</a></li>
<li><a href="#trunkSourceWebCoreloaderSubframeLoadercpp">trunk/Source/WebCore/loader/SubframeLoader.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestshttptestspluginsgeturlredirectexpectedtxt">trunk/LayoutTests/http/tests/plugins/get-url-redirect-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestspluginsgeturlredirecthtml">trunk/LayoutTests/http/tests/plugins/get-url-redirect.html</a></li>
<li><a href="#trunkLayoutTestshttptestspluginsresourcesredirectionresponsephp">trunk/LayoutTests/http/tests/plugins/resources/redirection-response.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (187619 => 187620)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-07-30 23:25:43 UTC (rev 187619)
+++ trunk/LayoutTests/ChangeLog        2015-07-30 23:38:23 UTC (rev 187620)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2015-07-30  Anders Carlsson  &lt;andersca@apple.com&gt;
+
+        Assertion failure when a plug-in loads a resource that redirects somewhere
+        https://bugs.webkit.org/show_bug.cgi?id=147469
+
+        Reviewed by Alexey Proskuryakov.
+
+        Add a test.
+
+        * http/tests/plugins/get-url-redirect-expected.txt: Added.
+        * http/tests/plugins/get-url-redirect.html: Added.
+        * http/tests/plugins/resources/redirection-response.php: Added.
+
</ins><span class="cx"> 2015-07-29  Matt Rajca  &lt;mrajca@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Media Session: test Play/Pause media control events delivered to non-Content media sessions
</span></span></pre></div>
<a id="trunkLayoutTestshttptestspluginsgeturlredirectexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/plugins/get-url-redirect-expected.txt (0 => 187620)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/plugins/get-url-redirect-expected.txt                                (rev 0)
+++ trunk/LayoutTests/http/tests/plugins/get-url-redirect-expected.txt        2015-07-30 23:38:23 UTC (rev 187620)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+This tests that NPN_GetURLNotify does not ASSERT in debug builds. 
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestspluginsgeturlredirecthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/plugins/get-url-redirect.html (0 => 187620)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/plugins/get-url-redirect.html                                (rev 0)
+++ trunk/LayoutTests/http/tests/plugins/get-url-redirect.html        2015-07-30 23:38:23 UTC (rev 187620)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+&lt;html&gt;
+&lt;body&gt;
+This tests that NPN_GetURLNotify does not ASSERT in debug builds.
+&lt;embed name=&quot;plg&quot; type=&quot;application/x-webkit-test-netscape&quot;&gt;&lt;/embed&gt;
+&lt;script&gt;
+    function notify()
+    {
+        if (window.testRunner)
+            testRunner.notifyDone();
+    }
+    if (window.testRunner) {
+        testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+    }
+
+    plg.getURLNotify(&quot;resources/redirection-response.php?status=301&amp;target=load-me-1.txt&quot;, null, &quot;notify&quot;);
+&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestspluginsresourcesredirectionresponsephp"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/plugins/resources/redirection-response.php (0 => 187620)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/plugins/resources/redirection-response.php                                (rev 0)
+++ trunk/LayoutTests/http/tests/plugins/resources/redirection-response.php        2015-07-30 23:38:23 UTC (rev 187620)
</span><span class="lines">@@ -0,0 +1,31 @@
</span><ins>+&lt;?php
+$status_code = $_GET['status'];
+
+$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\') . &quot;/&quot; . $_GET['target'];
+
+$host = $_SERVER['HTTP_HOST'];
+if (isset($_GET['host']))
+    $host = $_GET['host'];
+
+switch ($status_code) {
+    case 301:
+        header(&quot;HTTP/1.1 301 Moved Permanently&quot;);
+        header(&quot;Location: http://&quot; . $host . $uri);
+        break;
+    case 302:
+        header(&quot;HTTP/1.1 302 Found&quot;);
+        header(&quot;Location: http://&quot; . $host . $uri);
+        break;
+    case 303:
+        header(&quot;HTTP/1.1 303 See Other&quot;);
+        header(&quot;Location: http://&quot; . $host . $uri);
+        break;
+    case 307:
+        header(&quot;HTTP/1.1 307 Temporary Redirect&quot;);
+        header(&quot;Location: http://&quot; . $host . $uri);
+        break;
+    default:
+        header(&quot;HTTP/1.1 500 Internal Server Error&quot;);
+        echo &quot;Unexpected status code ($status_code) received.&quot;;
+}
+?&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (187619 => 187620)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-07-30 23:25:43 UTC (rev 187619)
+++ trunk/Source/WebCore/ChangeLog        2015-07-30 23:38:23 UTC (rev 187620)
</span><span class="lines">@@ -1,3 +1,40 @@
</span><ins>+2015-07-30  Anders Carlsson  &lt;andersca@apple.com&gt;
+
+        Assertion failure when a plug-in loads a resource that redirects somewhere
+        https://bugs.webkit.org/show_bug.cgi?id=147469
+
+        Reviewed by Alexey Proskuryakov.
+
+        Test: http/tests/plugins/get-url-redirect.html
+
+        r186597 moved the call to addPlugInStreamLoader to willSendRequest. This is wrong since
+        willSendRequest can be invoked more than once.
+        
+        Fix this by making the initialization phase of NetscapePlugInStreamLoader be more like
+        SubresourceLoader where we only call addPlugInStreamLoader once we've successfully initialized
+        the loader, and only call removePlugInStreamLoader if we've called addPlugInStreamLoader.
+
+        Also change addPlugInStreamLoader and removePlugInStreamLoader to take references.
+
+        * loader/DocumentLoader.cpp:
+        (WebCore::DocumentLoader::addPlugInStreamLoader):
+        (WebCore::DocumentLoader::removePlugInStreamLoader):
+        * loader/DocumentLoader.h:
+        * loader/NetscapePlugInStreamLoader.cpp:
+        (WebCore::NetscapePlugInStreamLoader::create):
+        (WebCore::NetscapePlugInStreamLoader::init):
+        (WebCore::NetscapePlugInStreamLoader::didFinishLoading):
+        (WebCore::NetscapePlugInStreamLoader::didFail):
+        (WebCore::NetscapePlugInStreamLoader::didCancel):
+        (WebCore::NetscapePlugInStreamLoader::notifyDone):
+        * loader/NetscapePlugInStreamLoader.h:
+        * loader/ResourceLoader.cpp:
+        (WebCore::ResourceLoader::willSendRequest): Deleted.
+        * loader/ResourceLoader.h:
+        (WebCore::ResourceLoader::isPlugInStreamLoader): Deleted.
+        * loader/SubframeLoader.cpp:
+        (WebCore::SubframeLoader::requestObject):
+
</ins><span class="cx"> 2015-07-30  Jer Noble  &lt;jer.noble@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [iOS] Pressing 'done' in fullscreen video sometimes does nothing; stuck in fullscreen
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderDocumentLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/DocumentLoader.cpp (187619 => 187620)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/DocumentLoader.cpp        2015-07-30 23:25:43 UTC (rev 187619)
+++ trunk/Source/WebCore/loader/DocumentLoader.cpp        2015-07-30 23:38:23 UTC (rev 187620)
</span><span class="lines">@@ -1352,20 +1352,20 @@
</span><span class="cx">         frame-&gt;loader().checkLoadComplete();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DocumentLoader::addPlugInStreamLoader(ResourceLoader* loader)
</del><ins>+void DocumentLoader::addPlugInStreamLoader(ResourceLoader&amp; loader)
</ins><span class="cx"> {
</span><del>-    ASSERT(loader-&gt;identifier());
-    ASSERT(!m_plugInStreamLoaders.contains(loader-&gt;identifier()));
</del><ins>+    ASSERT(loader.identifier());
+    ASSERT(!m_plugInStreamLoaders.contains(loader.identifier()));
</ins><span class="cx"> 
</span><del>-    m_plugInStreamLoaders.add(loader-&gt;identifier(), loader);
</del><ins>+    m_plugInStreamLoaders.add(loader.identifier(), &amp;loader);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DocumentLoader::removePlugInStreamLoader(ResourceLoader* loader)
</del><ins>+void DocumentLoader::removePlugInStreamLoader(ResourceLoader&amp; loader)
</ins><span class="cx"> {
</span><del>-    ASSERT(loader-&gt;identifier());
-    ASSERT(loader == m_plugInStreamLoaders.get(loader-&gt;identifier()));
</del><ins>+    ASSERT(loader.identifier());
+    ASSERT(&amp;loader == m_plugInStreamLoaders.get(loader.identifier()));
</ins><span class="cx"> 
</span><del>-    m_plugInStreamLoaders.remove(loader-&gt;identifier());
</del><ins>+    m_plugInStreamLoaders.remove(loader.identifier());
</ins><span class="cx">     checkLoadComplete();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderDocumentLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/DocumentLoader.h (187619 => 187620)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/DocumentLoader.h        2015-07-30 23:25:43 UTC (rev 187619)
+++ trunk/Source/WebCore/loader/DocumentLoader.h        2015-07-30 23:38:23 UTC (rev 187620)
</span><span class="lines">@@ -228,8 +228,8 @@
</span><span class="cx"> 
</span><span class="cx">         void addSubresourceLoader(ResourceLoader*);
</span><span class="cx">         void removeSubresourceLoader(ResourceLoader*);
</span><del>-        WEBCORE_EXPORT void addPlugInStreamLoader(ResourceLoader*);
-        WEBCORE_EXPORT void removePlugInStreamLoader(ResourceLoader*);
</del><ins>+        void addPlugInStreamLoader(ResourceLoader&amp;);
+        void removePlugInStreamLoader(ResourceLoader&amp;);
</ins><span class="cx"> 
</span><span class="cx">         void subresourceLoaderFinishedLoadingOnePart(ResourceLoader*);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderNetscapePlugInStreamLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.cpp (187619 => 187620)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.cpp        2015-07-30 23:25:43 UTC (rev 187619)
+++ trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.cpp        2015-07-30 23:38:23 UTC (rev 187620)
</span><span class="lines">@@ -60,6 +60,7 @@
</span><span class="cx">     RefPtr&lt;NetscapePlugInStreamLoader&gt; loader(adoptRef(new NetscapePlugInStreamLoader(frame, client)));
</span><span class="cx">     if (!loader-&gt;init(request))
</span><span class="cx">         return nullptr;
</span><ins>+
</ins><span class="cx">     return loader.release();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -74,6 +75,19 @@
</span><span class="cx">     ResourceLoader::releaseResources();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool NetscapePlugInStreamLoader::init(const ResourceRequest&amp; request)
+{
+    if (!ResourceLoader::init(request))
+        return false;
+
+    ASSERT(!reachedTerminalState());
+
+    m_documentLoader-&gt;addPlugInStreamLoader(*this);
+    m_isInitialized = true;
+
+    return true;
+}
+
</ins><span class="cx"> void NetscapePlugInStreamLoader::didReceiveResponse(const ResourceResponse&amp; response)
</span><span class="cx"> {
</span><span class="cx">     Ref&lt;NetscapePlugInStreamLoader&gt; protect(*this);
</span><span class="lines">@@ -124,7 +138,8 @@
</span><span class="cx"> {
</span><span class="cx">     Ref&lt;NetscapePlugInStreamLoader&gt; protect(*this);
</span><span class="cx"> 
</span><del>-    m_documentLoader-&gt;removePlugInStreamLoader(this);
</del><ins>+    notifyDone();
+
</ins><span class="cx">     m_client-&gt;didFinishLoading(this);
</span><span class="cx">     ResourceLoader::didFinishLoading(finishTime);
</span><span class="cx"> }
</span><span class="lines">@@ -133,7 +148,8 @@
</span><span class="cx"> {
</span><span class="cx">     Ref&lt;NetscapePlugInStreamLoader&gt; protect(*this);
</span><span class="cx"> 
</span><del>-    m_documentLoader-&gt;removePlugInStreamLoader(this);
</del><ins>+    notifyDone();
+
</ins><span class="cx">     m_client-&gt;didFail(this, error);
</span><span class="cx">     ResourceLoader::didFail(error);
</span><span class="cx"> }
</span><span class="lines">@@ -145,10 +161,16 @@
</span><span class="cx"> 
</span><span class="cx"> void NetscapePlugInStreamLoader::didCancel(const ResourceError&amp;)
</span><span class="cx"> {
</span><del>-    // We need to remove the stream loader after the call to didFail, since didFail can 
-    // spawn a new run loop and if the loader has been removed it won't be deferred when
-    // the document loader is asked to defer loading.
-    m_documentLoader-&gt;removePlugInStreamLoader(this);
</del><ins>+    notifyDone();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void NetscapePlugInStreamLoader::notifyDone()
+{
+    if (!m_isInitialized)
+        return;
+
+    m_documentLoader-&gt;removePlugInStreamLoader(*this);
</ins><span class="cx"> }
</span><ins>+
+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCoreloaderNetscapePlugInStreamLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.h (187619 => 187620)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.h        2015-07-30 23:25:43 UTC (rev 187619)
+++ trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.h        2015-07-30 23:38:23 UTC (rev 187620)
</span><span class="lines">@@ -56,6 +56,8 @@
</span><span class="cx">     WEBCORE_EXPORT bool isDone() const;
</span><span class="cx"> 
</span><span class="cx"> private:
</span><ins>+    virtual bool init(const ResourceRequest&amp;) override;
+
</ins><span class="cx">     virtual void didReceiveResponse(const ResourceResponse&amp;) override;
</span><span class="cx">     virtual void didReceiveData(const char*, unsigned, long long encodedDataLength, DataPayloadType) override;
</span><span class="cx">     virtual void didReceiveBuffer(PassRefPtr&lt;SharedBuffer&gt;, long long encodedDataLength, DataPayloadType) override;
</span><span class="lines">@@ -63,7 +65,6 @@
</span><span class="cx">     virtual void didFail(const ResourceError&amp;) override;
</span><span class="cx"> 
</span><span class="cx">     virtual void releaseResources() override;
</span><del>-    virtual bool isPlugInStreamLoader() override { return true; }
</del><span class="cx"> 
</span><span class="cx">     NetscapePlugInStreamLoader(Frame*, NetscapePlugInStreamLoaderClient*);
</span><span class="cx"> 
</span><span class="lines">@@ -72,7 +73,10 @@
</span><span class="cx"> 
</span><span class="cx">     void didReceiveDataOrBuffer(const char*, int, PassRefPtr&lt;SharedBuffer&gt;, long long encodedDataLength, DataPayloadType);
</span><span class="cx"> 
</span><ins>+    void notifyDone();
+
</ins><span class="cx">     NetscapePlugInStreamLoaderClient* m_client;
</span><ins>+    bool m_isInitialized { false };
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderResourceLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ResourceLoader.cpp (187619 => 187620)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ResourceLoader.cpp        2015-07-30 23:25:43 UTC (rev 187619)
+++ trunk/Source/WebCore/loader/ResourceLoader.cpp        2015-07-30 23:38:23 UTC (rev 187620)
</span><span class="lines">@@ -314,9 +314,6 @@
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><del>-    
-    if (isPlugInStreamLoader())
-        documentLoader()-&gt;addPlugInStreamLoader(this);
</del><span class="cx"> 
</span><span class="cx">     if (request.isNull()) {
</span><span class="cx">         didFail(cannotShowURLError());
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderResourceLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ResourceLoader.h (187619 => 187620)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ResourceLoader.h        2015-07-30 23:25:43 UTC (rev 187619)
+++ trunk/Source/WebCore/loader/ResourceLoader.h        2015-07-30 23:38:23 UTC (rev 187620)
</span><span class="lines">@@ -180,7 +180,6 @@
</span><span class="cx">     virtual void didCancel(const ResourceError&amp;) = 0;
</span><span class="cx"> 
</span><span class="cx">     void addDataOrBuffer(const char*, unsigned, SharedBuffer*, DataPayloadType);
</span><del>-    virtual bool isPlugInStreamLoader() { return false; }
</del><span class="cx"> 
</span><span class="cx">     // ResourceHandleClient
</span><span class="cx">     virtual void willSendRequest(ResourceHandle*, ResourceRequest&amp;, const ResourceResponse&amp; redirectResponse) override;
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderSubframeLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/SubframeLoader.cpp (187619 => 187620)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/SubframeLoader.cpp        2015-07-30 23:25:43 UTC (rev 187619)
+++ trunk/Source/WebCore/loader/SubframeLoader.cpp        2015-07-30 23:38:23 UTC (rev 187620)
</span><span class="lines">@@ -212,6 +212,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool SubframeLoader::requestObject(HTMLPlugInImageElement&amp; ownerElement, const String&amp; url, const AtomicString&amp; frameName, const String&amp; mimeType, const Vector&lt;String&gt;&amp; paramNames, const Vector&lt;String&gt;&amp; paramValues)
</span><span class="cx"> {
</span><ins>+    printf(&quot;request oject url %s mime type %s\n&quot;, url.ascii().data(), mimeType.ascii().data());
</ins><span class="cx">     if (url.isEmpty() &amp;&amp; mimeType.isEmpty())
</span><span class="cx">         return false;
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>