[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

andersca at apple.com andersca at apple.com
Wed Dec 22 11:14:35 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit b431a3352d175f9f2a8e58cb0f3648b035230f4a
Author: andersca at apple.com <andersca at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Jul 15 21:37:48 2010 +0000

    Start loading plug-in streams
    https://bugs.webkit.org/show_bug.cgi?id=42407
    
    Reviewed by Sam Weinig.
    
    WebCore:
    
    Export some ResourceRequestBase getters.
    
    * WebCore.exp.in:
    
    WebKit2:
    
    * WebProcess/Plugins/DummyPlugin.cpp:
    (WebKit::DummyPlugin::streamDidReceiveResponse):
    * WebProcess/Plugins/DummyPlugin.h:
    Add empty stub.
    
    * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
    (WebKit::NetscapePlugin::streamDidReceiveResponse):
    * WebProcess/Plugins/Netscape/NetscapePlugin.h:
    Add empty stub.
    
    * WebProcess/Plugins/Plugin.h:
    Add streamDidReceiveResponse pure virtual member function.
    
    * WebProcess/Plugins/PluginView.cpp:
    Make PluginView::Stream a NetscapePlugInStreamLoaderClient.
    
    (WebKit::PluginView::Stream::start):
    Create a plug-in loader and start loading.
    
    (WebKit::PluginView::Stream::didReceiveResponse):
    Get the necessary data out of the resource response and call streamDidReceiveResponse.
    
    (WebKit::PluginView::Stream::didReceiveData):
    (WebKit::PluginView::Stream::didFail):
    (WebKit::PluginView::Stream::didFinishLoading):
    Add empty stubs.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@63462 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 114b3a2..daaecba 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,14 @@
+2010-07-15  Anders Carlsson  <andersca at apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Start loading plug-in streams
+        https://bugs.webkit.org/show_bug.cgi?id=42407
+
+        Export some ResourceRequestBase getters.
+
+        * WebCore.exp.in:
+
 2010-07-15  Kenneth Russell  <kbr at google.com>
 
         Reviewed by Nate Chapin.
diff --git a/WebCore/WebCore.exp.in b/WebCore/WebCore.exp.in
index 9929a8c..c9eb488 100644
--- a/WebCore/WebCore.exp.in
+++ b/WebCore/WebCore.exp.in
@@ -891,10 +891,15 @@ __ZNK7WebCore19ResourceRequestBase7isEmptyEv
 __ZNK7WebCore19SelectionController17isInPasswordFieldEv
 __ZNK7WebCore19SelectionController18isFocusedAndActiveEv
 __ZNK7WebCore20ResourceResponseBase14httpStatusCodeEv
+__ZNK7WebCore20ResourceResponseBase14httpStatusTextEv
+__ZNK7WebCore20ResourceResponseBase15httpHeaderFieldEPKc
 __ZNK7WebCore20ResourceResponseBase16httpHeaderFieldsEv
+__ZNK7WebCore20ResourceResponseBase16lastModifiedDateEv
 __ZNK7WebCore20ResourceResponseBase16textEncodingNameEv
 __ZNK7WebCore20ResourceResponseBase17suggestedFilenameEv
+__ZNK7WebCore20ResourceResponseBase21expectedContentLengthEv
 __ZNK7WebCore20ResourceResponseBase3urlEv
+__ZNK7WebCore20ResourceResponseBase6isHTTPEv
 __ZNK7WebCore20ResourceResponseBase8mimeTypeEv
 __ZNK7WebCore21UserContentURLPattern7matchesERKNS_4KURLE
 __ZNK7WebCore23FrameLoaderStateMachine15firstLayoutDoneEv
diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index 756f420..b613a00 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,3 +1,37 @@
+2010-07-15  Anders Carlsson  <andersca at apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Start loading plug-in streams
+        https://bugs.webkit.org/show_bug.cgi?id=42407
+
+        * WebProcess/Plugins/DummyPlugin.cpp:
+        (WebKit::DummyPlugin::streamDidReceiveResponse):
+        * WebProcess/Plugins/DummyPlugin.h:
+        Add empty stub.
+
+        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
+        (WebKit::NetscapePlugin::streamDidReceiveResponse):
+        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
+        Add empty stub.
+
+        * WebProcess/Plugins/Plugin.h:
+        Add streamDidReceiveResponse pure virtual member function.
+
+        * WebProcess/Plugins/PluginView.cpp:
+        Make PluginView::Stream a NetscapePlugInStreamLoaderClient.
+
+        (WebKit::PluginView::Stream::start):
+        Create a plug-in loader and start loading.
+
+        (WebKit::PluginView::Stream::didReceiveResponse):
+        Get the necessary data out of the resource response and call streamDidReceiveResponse.
+
+        (WebKit::PluginView::Stream::didReceiveData):
+        (WebKit::PluginView::Stream::didFail):
+        (WebKit::PluginView::Stream::didFinishLoading):
+        Add empty stubs.
+
 2010-07-15  Sam Weinig  <sam at webkit.org>
 
         Reviewed by Anders Carlsson.
diff --git a/WebKit2/WebProcess/Plugins/DummyPlugin.cpp b/WebKit2/WebProcess/Plugins/DummyPlugin.cpp
index e80dba2..5392e1a 100644
--- a/WebKit2/WebProcess/Plugins/DummyPlugin.cpp
+++ b/WebKit2/WebProcess/Plugins/DummyPlugin.cpp
@@ -78,4 +78,9 @@ void DummyPlugin::didEvaluateJavaScript(uint64_t requestID, const WebCore::Strin
 {
 }
 
+void DummyPlugin::streamDidReceiveResponse(uint64_t streamID, const WebCore::KURL& responseURL, uint32_t streamLength, 
+                                           uint32_t lastModifiedTime, const WebCore::String& mimeType, const WebCore::String& headers)
+{
+}
+
 } // namespace WebKit
diff --git a/WebKit2/WebProcess/Plugins/DummyPlugin.h b/WebKit2/WebProcess/Plugins/DummyPlugin.h
index 2cea9d9..ecd027a 100644
--- a/WebKit2/WebProcess/Plugins/DummyPlugin.h
+++ b/WebKit2/WebProcess/Plugins/DummyPlugin.h
@@ -49,6 +49,8 @@ private:
     virtual void frameDidFinishLoading(uint64_t requestID);
     virtual void frameDidFail(uint64_t requestID, bool wasCancelled);
     virtual void didEvaluateJavaScript(uint64_t requestID, const WebCore::String& requestURLString, const WebCore::String& result);
+    virtual void streamDidReceiveResponse(uint64_t streamID, const WebCore::KURL& responseURL, uint32_t streamLength, 
+                                          uint32_t lastModifiedTime, const WebCore::String& mimeType, const WebCore::String& headers);
     virtual PluginController* controller();
 };
 
diff --git a/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp b/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp
index b68ce17..439fe38 100644
--- a/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp
+++ b/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp
@@ -325,6 +325,12 @@ void NetscapePlugin::didEvaluateJavaScript(uint64_t requestID, const String& req
         pluginStream->sendJavaScriptStream(requestURLString, result);
 }
 
+void NetscapePlugin::streamDidReceiveResponse(uint64_t streamID, const KURL& responseURL, uint32_t streamLength, 
+                                              uint32_t lastModifiedTime, const String& mimeType, const String& headers)
+{
+    // FIXME: Implement.
+}
+
 PluginController* NetscapePlugin::controller()
 {
     return m_pluginController;
diff --git a/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h b/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h
index fd4a270..e54fdd5 100644
--- a/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h
+++ b/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h
@@ -86,6 +86,8 @@ private:
     virtual void frameDidFinishLoading(uint64_t requestID);
     virtual void frameDidFail(uint64_t requestID, bool wasCancelled);
     virtual void didEvaluateJavaScript(uint64_t requestID, const WebCore::String& requestURLString, const WebCore::String& result);
+    virtual void streamDidReceiveResponse(uint64_t streamID, const WebCore::KURL& responseURL, uint32_t streamLength, 
+                                          uint32_t lastModifiedTime, const WebCore::String& mimeType, const WebCore::String& headers);
 
     virtual PluginController* controller();
 
diff --git a/WebKit2/WebProcess/Plugins/Plugin.h b/WebKit2/WebProcess/Plugins/Plugin.h
index 1eaa37c..bb3e27f 100644
--- a/WebKit2/WebProcess/Plugins/Plugin.h
+++ b/WebKit2/WebProcess/Plugins/Plugin.h
@@ -73,6 +73,10 @@ public:
     // back the result. If evaluating the script failed, result will be null.
     virtual void didEvaluateJavaScript(uint64_t requestID, const WebCore::String& requestURLString, const WebCore::String& result) = 0;
 
+    // Tells the plug-in that a stream has received its HTTP response.
+    virtual void streamDidReceiveResponse(uint64_t streamID, const WebCore::KURL& responseURL, uint32_t streamLength, 
+                                          uint32_t lastModifiedTime, const WebCore::String& mimeType, const WebCore::String& headers) = 0;
+
     // Returns the plug-in controller for this plug-in.
     // FIXME: We could just have the controller be a member variable of Plugin.
     virtual PluginController* controller() = 0;
diff --git a/WebKit2/WebProcess/Plugins/PluginView.cpp b/WebKit2/WebProcess/Plugins/PluginView.cpp
index ca1a47b..0ff2c89 100644
--- a/WebKit2/WebProcess/Plugins/PluginView.cpp
+++ b/WebKit2/WebProcess/Plugins/PluginView.cpp
@@ -26,12 +26,14 @@
 #include "PluginView.h"
 
 #include "Plugin.h"
+#include <WebCore/DocumentLoader.h>
 #include <WebCore/FrameLoadRequest.h>
 #include <WebCore/FrameLoaderClient.h>
 #include <WebCore/FrameView.h>
 #include <WebCore/GraphicsContext.h>
 #include <WebCore/HTMLPlugInElement.h>
 #include <WebCore/HostWindow.h>
+#include <WebCore/NetscapePlugInStreamLoader.h>
 #include <WebCore/RenderLayer.h>
 #include <WebCore/ScrollView.h>
 
@@ -64,7 +66,7 @@ private:
     bool m_allowPopups;
 };
 
-class PluginView::Stream : public RefCounted<PluginView::Stream> {
+class PluginView::Stream : public RefCounted<PluginView::Stream>, NetscapePlugInStreamLoaderClient {
 public:
     static PassRefPtr<Stream> create(PluginView* pluginView, uint64_t streamID, const ResourceRequest& request)
     {
@@ -83,16 +85,90 @@ private:
     {
     }
 
+    // NetscapePluginStreamLoaderClient
+    virtual void didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse&);
+    virtual void didReceiveData(NetscapePlugInStreamLoader*, const char*, int);
+    virtual void didFail(NetscapePlugInStreamLoader*, const ResourceError&);
+    virtual void didFinishLoading(NetscapePlugInStreamLoader*);
+
     RefPtr<PluginView> m_pluginView;
     uint64_t m_streamID;
     const ResourceRequest m_request;
+    
+    RefPtr<NetscapePlugInStreamLoader> m_loader;
 };
 
 void PluginView::Stream::start()
 {
-    // FIXME: Implement.
+    ASSERT(!m_loader);
+
+    Frame* frame = m_pluginView->m_pluginElement->document()->frame();
+    ASSERT(frame);
+
+    m_loader = NetscapePlugInStreamLoader::create(frame, this);
+    m_loader->setShouldBufferData(false);
+    
+    m_loader->documentLoader()->addPlugInStreamLoader(m_loader.get());
+    m_loader->load(m_request);
 }
+
+void PluginView::Stream::didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse& response)
+{
+    // Compute the stream related data from the resource response.
+    const KURL& responseURL = response.url();
+    const String& mimeType = response.mimeType();
+    unsigned long long expectedContentLength = response.expectedContentLength();
     
+    String headers;
+    if (response.isHTTP()) {
+        Vector<UChar> stringBuilder;
+        String separator(": ");
+
+        String statusLine = String::format("HTTP %d ", response.httpStatusCode());
+        stringBuilder.append(statusLine.characters(), statusLine.length());
+        stringBuilder.append(response.httpStatusText().characters(), response.httpStatusText().length());
+        stringBuilder.append('\n');
+
+        HTTPHeaderMap::const_iterator end = response.httpHeaderFields().end();
+        for (HTTPHeaderMap::const_iterator it = response.httpHeaderFields().begin(); it != end; ++it) {
+            stringBuilder.append(it->first.characters(), it->first.length());
+            stringBuilder.append(separator.characters(), separator.length());
+            stringBuilder.append(it->second.characters(), it->second.length());
+            stringBuilder.append('\n');
+        }
+
+        headers = String::adopt(stringBuilder);
+
+        // If the content is encoded (most likely compressed), then don't send its length to the plugin,
+        // which is only interested in the decoded length, not yet known at the moment.
+        // <rdar://problem/4470599> tracks a request for -[NSURLResponse expectedContentLength] to incorporate this logic.
+        String contentEncoding = response.httpHeaderField("Content-Encoding");
+        if (!contentEncoding.isNull() && contentEncoding != "identity")
+            expectedContentLength = -1;
+    }
+
+    uint32_t streamLength = 0;
+    if (expectedContentLength > 0)
+        streamLength = expectedContentLength;
+
+    m_pluginView->m_plugin->streamDidReceiveResponse(m_streamID, responseURL, streamLength, response.lastModifiedDate(), mimeType, headers);
+}
+
+void PluginView::Stream::didReceiveData(NetscapePlugInStreamLoader*, const char* bytes, int length)
+{
+    // FIXME: Implement.
+}
+
+void PluginView::Stream::didFail(NetscapePlugInStreamLoader*, const ResourceError& error) 
+{
+    // FIXME: Implement.
+}
+
+void PluginView::Stream::didFinishLoading(NetscapePlugInStreamLoader*)
+{
+    // FIXME: Implement.
+}
+
 PluginView::PluginView(WebCore::HTMLPlugInElement* pluginElement, PassRefPtr<Plugin> plugin, const Plugin::Parameters& parameters)
     : m_pluginElement(pluginElement)
     , m_plugin(plugin)

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list