Title: [152778] trunk/Source/WebCore
Revision
152778
Author
[email protected]
Date
2013-07-17 02:39:21 -0700 (Wed, 17 Jul 2013)

Log Message

[GStreamer] webkitwebsrc: use SubResourceLoader
https://bugs.webkit.org/show_bug.cgi?id=73743

Reviewed by Philippe Normand.

* GNUmakefile.list.am: Add new files to compilation.
* PlatformEfl.cmake: Ditto.
* PlatformGTK.cmake: Ditto.
* loader/SubresourceLoader.h: Add getOrCreateReadBuffer() when
using SOUP.
* loader/cache/CachedRawResource.h:
* loader/cache/CachedRawResourceClient.h:
(WebCore::CachedRawResourceClient::getOrCreateReadBuffer): Added
to allow the client to allocate the read buffer.
* loader/cache/CachedResource.h:
(WebCore::CachedResource::getOrCreateReadBuffer):
* loader/soup/CachedRawResourceSoup.cpp: Added.
(WebCore::CachedRawResource::getOrCreateReadBuffer): Iterate the
clients until one returns a valid read buffer or return NULL to
fallback to the default read buffer.
* loader/soup/SubresourceLoaderSoup.cpp: Added.
(WebCore::SubresourceLoader::getOrCreateReadBuffer): Call
CachedResource::getOrCreateReadBuffer().
* platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
(StreamingClient): Make this a CachedRawResourceClient.
(_WebKitWebSrcPrivate): Remove frame and resourceHandle and add a
cached resource handle.
(webKitWebSrcDispose): Clear the player pointer.
(webKitWebSrcStop): Remove the client from the cached resource.
(webKitWebSrcStart): Use CachedResourceLoader to schedule a
CachedRawResource load for the media without buffering the data.
(webKitWebSrcNeedDataMainCb): Call CachedResource::setDefersLoading.
(webKitWebSrcEnoughDataMainCb): Ditto.
(webKitWebSrcSetMediaPlayer): Simply update the player pointer.
(StreamingClient::responseReceived): Update to the
CachedRawResourceClient API.
(StreamingClient::dataReceived): Ditto.
(StreamingClient::getOrCreateReadBuffer): Ditto.
(StreamingClient::notifyFinished): Ditto.

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (152777 => 152778)


--- trunk/Source/WebCore/ChangeLog	2013-07-17 09:16:53 UTC (rev 152777)
+++ trunk/Source/WebCore/ChangeLog	2013-07-17 09:39:21 UTC (rev 152778)
@@ -1,3 +1,45 @@
+2013-07-17  Carlos Garcia Campos  <[email protected]>
+
+        [GStreamer] webkitwebsrc: use SubResourceLoader
+        https://bugs.webkit.org/show_bug.cgi?id=73743
+
+        Reviewed by Philippe Normand.
+
+        * GNUmakefile.list.am: Add new files to compilation.
+        * PlatformEfl.cmake: Ditto.
+        * PlatformGTK.cmake: Ditto.
+        * loader/SubresourceLoader.h: Add getOrCreateReadBuffer() when
+        using SOUP.
+        * loader/cache/CachedRawResource.h:
+        * loader/cache/CachedRawResourceClient.h:
+        (WebCore::CachedRawResourceClient::getOrCreateReadBuffer): Added
+        to allow the client to allocate the read buffer.
+        * loader/cache/CachedResource.h:
+        (WebCore::CachedResource::getOrCreateReadBuffer):
+        * loader/soup/CachedRawResourceSoup.cpp: Added.
+        (WebCore::CachedRawResource::getOrCreateReadBuffer): Iterate the
+        clients until one returns a valid read buffer or return NULL to
+        fallback to the default read buffer.
+        * loader/soup/SubresourceLoaderSoup.cpp: Added.
+        (WebCore::SubresourceLoader::getOrCreateReadBuffer): Call
+        CachedResource::getOrCreateReadBuffer().
+        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
+        (StreamingClient): Make this a CachedRawResourceClient.
+        (_WebKitWebSrcPrivate): Remove frame and resourceHandle and add a
+        cached resource handle.
+        (webKitWebSrcDispose): Clear the player pointer.
+        (webKitWebSrcStop): Remove the client from the cached resource.
+        (webKitWebSrcStart): Use CachedResourceLoader to schedule a
+        CachedRawResource load for the media without buffering the data.
+        (webKitWebSrcNeedDataMainCb): Call CachedResource::setDefersLoading.
+        (webKitWebSrcEnoughDataMainCb): Ditto.
+        (webKitWebSrcSetMediaPlayer): Simply update the player pointer.
+        (StreamingClient::responseReceived): Update to the
+        CachedRawResourceClient API.
+        (StreamingClient::dataReceived): Ditto.
+        (StreamingClient::getOrCreateReadBuffer): Ditto.
+        (StreamingClient::notifyFinished): Ditto.
+
 2013-07-17  Kwang Yul Seo  <[email protected]>
 
         Remove unused member variable m_domURL from WorkerGlobalScope

Modified: trunk/Source/WebCore/GNUmakefile.list.am (152777 => 152778)


--- trunk/Source/WebCore/GNUmakefile.list.am	2013-07-17 09:16:53 UTC (rev 152777)
+++ trunk/Source/WebCore/GNUmakefile.list.am	2013-07-17 09:39:21 UTC (rev 152778)
@@ -4131,6 +4131,8 @@
 	Source/WebCore/loader/SubresourceLoader.h \
 	Source/WebCore/loader/SubstituteData.h \
 	Source/WebCore/loader/SubstituteResource.h \
+	Source/WebCore/loader/soup/CachedRawResourceSoup.cpp \
+	Source/WebCore/loader/soup/SubresourceLoaderSoup.cpp \
 	Source/WebCore/loader/TextResourceDecoder.cpp \
 	Source/WebCore/loader/TextResourceDecoder.h \
 	Source/WebCore/loader/ThreadableLoaderClient.h \

Modified: trunk/Source/WebCore/PlatformEfl.cmake (152777 => 152778)


--- trunk/Source/WebCore/PlatformEfl.cmake	2013-07-17 09:16:53 UTC (rev 152777)
+++ trunk/Source/WebCore/PlatformEfl.cmake	2013-07-17 09:39:21 UTC (rev 152778)
@@ -37,6 +37,9 @@
 
     editing/atk/FrameSelectionAtk.cpp
 
+    loader/soup/CachedRawResourceSoup.cpp
+    loader/soup/SubresourceLoaderSoup.cpp
+
     page/efl/DragControllerEfl.cpp
     page/efl/EventHandlerEfl.cpp
 

Modified: trunk/Source/WebCore/PlatformGTK.cmake (152777 => 152778)


--- trunk/Source/WebCore/PlatformGTK.cmake	2013-07-17 09:16:53 UTC (rev 152777)
+++ trunk/Source/WebCore/PlatformGTK.cmake	2013-07-17 09:39:21 UTC (rev 152778)
@@ -42,6 +42,9 @@
 
     editing/atk/FrameSelectionAtk.cpp
 
+    loader/soup/CachedRawResourceSoup.cpp
+    loader/soup/SubresourceLoaderSoup.cpp
+
     page/gtk/DragControllerGtk.cpp
     page/gtk/EventHandlerGtk.cpp
 

Modified: trunk/Source/WebCore/loader/SubresourceLoader.h (152777 => 152778)


--- trunk/Source/WebCore/loader/SubresourceLoader.h	2013-07-17 09:16:53 UTC (rev 152777)
+++ trunk/Source/WebCore/loader/SubresourceLoader.h	2013-07-17 09:39:21 UTC (rev 152778)
@@ -73,6 +73,10 @@
 #endif
     virtual void releaseResources() OVERRIDE;
 
+#if USE(SOUP)
+    virtual char* getOrCreateReadBuffer(size_t requestedSize, size_t& actualSize) OVERRIDE;
+#endif
+
     bool checkForHTTPStatusCodeError();
 
     void didReceiveDataOrBuffer(const char*, int, PassRefPtr<SharedBuffer>, long long encodedDataLength, DataPayloadType);

Modified: trunk/Source/WebCore/loader/cache/CachedRawResource.h (152777 => 152778)


--- trunk/Source/WebCore/loader/cache/CachedRawResource.h	2013-07-17 09:16:53 UTC (rev 152777)
+++ trunk/Source/WebCore/loader/cache/CachedRawResource.h	2013-07-17 09:39:21 UTC (rev 152778)
@@ -67,6 +67,10 @@
     const char* calculateIncrementalDataChunk(ResourceBuffer*, unsigned& incrementalDataLength);
     void notifyClientsDataWasReceived(const char* data, unsigned length);
 
+#if USE(SOUP)
+    virtual char* getOrCreateReadBuffer(size_t requestedSize, size_t& actualSize);
+#endif
+
     unsigned long m_identifier;
 
     struct RedirectPair {

Modified: trunk/Source/WebCore/loader/cache/CachedRawResourceClient.h (152777 => 152778)


--- trunk/Source/WebCore/loader/cache/CachedRawResourceClient.h	2013-07-17 09:16:53 UTC (rev 152777)
+++ trunk/Source/WebCore/loader/cache/CachedRawResourceClient.h	2013-07-17 09:39:21 UTC (rev 152778)
@@ -41,6 +41,9 @@
     virtual void responseReceived(CachedResource*, const ResourceResponse&) { }
     virtual void dataReceived(CachedResource*, const char* /* data */, int /* length */) { }
     virtual void redirectReceived(CachedResource*, ResourceRequest&, const ResourceResponse&) { }
+#if USE(SOUP)
+    virtual char* getOrCreateReadBuffer(CachedResource*, size_t /* requestedSize */, size_t& /* actualSize */) { return 0; }
+#endif
 };
 
 }

Modified: trunk/Source/WebCore/loader/cache/CachedResource.h (152777 => 152778)


--- trunk/Source/WebCore/loader/cache/CachedResource.h	2013-07-17 09:16:53 UTC (rev 152777)
+++ trunk/Source/WebCore/loader/cache/CachedResource.h	2013-07-17 09:39:21 UTC (rev 152778)
@@ -255,6 +255,10 @@
     void tryReplaceEncodedData(PassRefPtr<SharedBuffer>);
 #endif
 
+#if USE(SOUP)
+    virtual char* getOrCreateReadBuffer(size_t /* requestedSize */, size_t& /* actualSize */) { return 0; }
+#endif
+
 protected:
     virtual void checkNotify();
 

Added: trunk/Source/WebCore/loader/soup/CachedRawResourceSoup.cpp (0 => 152778)


--- trunk/Source/WebCore/loader/soup/CachedRawResourceSoup.cpp	                        (rev 0)
+++ trunk/Source/WebCore/loader/soup/CachedRawResourceSoup.cpp	2013-07-17 09:39:21 UTC (rev 152778)
@@ -0,0 +1,38 @@
+/*
+ *  Copyright (C) 2013 Igalia S.L.
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include "config.h"
+#include "CachedRawResource.h"
+
+#include "CachedRawResourceClient.h"
+#include "CachedResourceClientWalker.h"
+
+namespace WebCore {
+
+char* CachedRawResource::getOrCreateReadBuffer(size_t requestedSize, size_t& actualSize)
+{
+    CachedResourceClientWalker<CachedRawResourceClient> w(m_clients);
+    while (CachedRawResourceClient* c = w.next()) {
+        if (char* bufferPtr = c->getOrCreateReadBuffer(this, requestedSize, actualSize))
+            return bufferPtr;
+    }
+
+    return 0;
+}
+
+} // namespace WebCore

Added: trunk/Source/WebCore/loader/soup/ResourceLoaderSoup.cpp (0 => 152778)


--- trunk/Source/WebCore/loader/soup/ResourceLoaderSoup.cpp	                        (rev 0)
+++ trunk/Source/WebCore/loader/soup/ResourceLoaderSoup.cpp	2013-07-17 09:39:21 UTC (rev 152778)
@@ -0,0 +1,32 @@
+/*
+ *  Copyright (C) 2013 Igalia S.L.
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include "config.h"
+#include "ResourceLoader.h"
+
+namespace WebCore {
+
+char* ResourceLoader::getOrCreateReadBuffer(size_t requestedLength, size_t& actualLength)
+{
+    actualLength = requestedLength;
+    if (!m_readBuffer)
+        m_readBuffer.set(static_cast<char*>(g_malloc(requestedLength)));
+    return m_readBuffer.get();
+}
+
+} // namespace WebCore

Added: trunk/Source/WebCore/loader/soup/SubresourceLoaderSoup.cpp (0 => 152778)


--- trunk/Source/WebCore/loader/soup/SubresourceLoaderSoup.cpp	                        (rev 0)
+++ trunk/Source/WebCore/loader/soup/SubresourceLoaderSoup.cpp	2013-07-17 09:39:21 UTC (rev 152778)
@@ -0,0 +1,31 @@
+/*
+ *  Copyright (C) 2013 Igalia S.L.
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include "config.h"
+#include "SubresourceLoader.h"
+
+#include "CachedResource.h"
+
+namespace WebCore {
+
+char* SubresourceLoader::getOrCreateReadBuffer(size_t requestedLength, size_t& actualLength)
+{
+    return m_resource->getOrCreateReadBuffer(requestedLength, actualLength);
+}
+
+} // namespace WebCore

Modified: trunk/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp (152777 => 152778)


--- trunk/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp	2013-07-17 09:16:53 UTC (rev 152777)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp	2013-07-17 09:39:21 UTC (rev 152778)
@@ -22,16 +22,15 @@
 
 #if ENABLE(VIDEO) && USE(GSTREAMER)
 
-#include "Document.h"
-#include "Frame.h"
-#include "FrameLoader.h"
+#include "CachedRawResource.h"
+#include "CachedRawResourceClient.h"
+#include "CachedResourceHandle.h"
+#include "CachedResourceLoader.h"
+#include "CachedResourceRequest.h"
 #include "GRefPtrGStreamer.h"
 #include "GStreamerVersioning.h"
 #include "MediaPlayer.h"
-#include "NetworkingContext.h"
 #include "NotImplemented.h"
-#include "ResourceHandleClient.h"
-#include "ResourceHandleInternal.h"
 #include "ResourceRequest.h"
 #include "ResourceResponse.h"
 #include <gst/app/gstappsrc.h>
@@ -44,24 +43,19 @@
 
 using namespace WebCore;
 
-class StreamingClient : public ResourceHandleClient {
+class StreamingClient : public CachedRawResourceClient {
     WTF_MAKE_NONCOPYABLE(StreamingClient); WTF_MAKE_FAST_ALLOCATED;
     public:
         StreamingClient(WebKitWebSrc*);
         virtual ~StreamingClient();
 
-        virtual void willSendRequest(ResourceHandle*, ResourceRequest&, const ResourceResponse&);
-        virtual void didReceiveResponse(ResourceHandle*, const ResourceResponse&);
-
-        virtual char* getOrCreateReadBuffer(size_t requestedSize, size_t& actualSize);
-
-        virtual void didReceiveData(ResourceHandle*, const char*, int, int);
-        virtual void didFinishLoading(ResourceHandle*, double /*finishTime*/);
-        virtual void didFail(ResourceHandle*, const ResourceError&);
-        virtual void wasBlocked(ResourceHandle*);
-        virtual void cannotShowURL(ResourceHandle*);
-
     private:
+        // CachedResourceClient
+        virtual void responseReceived(CachedResource*, const ResourceResponse&);
+        virtual void dataReceived(CachedResource*, const char*, int);
+        virtual void notifyFinished(CachedResource*);
+        virtual char* getOrCreateReadBuffer(CachedResource*, size_t requestedSize, size_t& actualSize);
+
         WebKitWebSrc* m_src;
 };
 
@@ -71,11 +65,10 @@
     GstPad* srcpad;
     gchar* uri;
 
-    RefPtr<WebCore::Frame> frame;
     WebCore::MediaPlayer* player;
 
     StreamingClient* client;
-    RefPtr<ResourceHandle> resourceHandle;
+    CachedResourceHandle<CachedRawResource> resource;
 
     guint64 offset;
     guint64 size;
@@ -294,6 +287,8 @@
         priv->buffer.clear();
     }
 
+    priv->player = 0;
+
     GST_CALL_PARENT(G_OBJECT_CLASS, dispose, (object));
 }
 
@@ -366,17 +361,16 @@
 {
     WebKitWebSrcPrivate* priv = src->priv;
 
-    if (priv->resourceHandle) {
-        priv->resourceHandle->cancel();
-        priv->resourceHandle.release();
+    if (priv->resource) {
+        priv->resource->removeClient(priv->client);
+        priv->resource = 0;
     }
-    priv->resourceHandle = 0;
 
-    if (priv->frame && !seeking)
-        priv->frame.clear();
+    if (priv->client) {
+        delete priv->client;
+        priv->client = 0;
+    }
 
-    priv->player = 0;
-
     if (priv->buffer) {
 #ifdef GST_API_VERSION_1
         unmapGstBuffer(priv->buffer.get());
@@ -437,22 +431,15 @@
         GST_ERROR_OBJECT(src, "No URI provided");
         return false;
     }
-    
+
+    ASSERT(priv->player);
+
     KURL url = "" priv->uri);
 
     ResourceRequest request(url);
     request.setAllowCookies(true);
+    request.setHTTPReferrer(priv->player->referrer());
 
-    NetworkingContext* context = 0;
-    FrameLoader* loader = priv->frame ? priv->frame->loader() : 0;
-    if (loader) {
-        loader->addExtraFieldsToSubresourceRequest(request);
-        context = loader->networkingContext();
-    }
-
-    if (priv->player)
-        request.setHTTPReferrer(priv->player->referrer());
-
     // Let Apple web servers know we want to access their nice movie trailers.
     if (!g_ascii_strcasecmp("movies.apple.com", url.host().utf8().data())
         || !g_ascii_strcasecmp("trailers.apple.com", url.host().utf8().data()))
@@ -472,9 +459,17 @@
     // Needed to use DLNA streaming servers
     request.setHTTPHeaderField("transferMode.dlna", "Streaming");
 
-    priv->resourceHandle = ResourceHandle::create(context, request, priv->client, false, false);
-    if (!priv->resourceHandle) {
-        GST_ERROR_OBJECT(src, "Failed to create ResourceHandle");
+    if (CachedResourceLoader* loader = priv->player->cachedResourceLoader()) {
+        CachedResourceRequest cacheRequest(request, ResourceLoaderOptions(SendCallbacks, DoNotSniffContent, DoNotBufferData, DoNotAllowStoredCredentials, DoNotAskClientForCrossOriginCredentials, DoSecurityCheck, UseDefaultOriginRestrictionsForType));
+        priv->resource = loader->requestRawResource(cacheRequest);
+        if (priv->resource) {
+            priv->client = new StreamingClient(src);
+            priv->resource->addClient(priv->client);
+        }
+    }
+
+    if (!priv->resource) {
+        GST_ERROR_OBJECT(src, "Failed to schedule resource load");
         return false;
     }
 
@@ -676,7 +671,7 @@
 {
     WebKitWebSrcPrivate* priv = src->priv;
 
-    priv->resourceHandle->setDefersLoading(false);
+    priv->resource->setDefersLoading(false);
 
     GST_OBJECT_LOCK(src);
     priv->paused = FALSE;
@@ -706,7 +701,7 @@
 {
     WebKitWebSrcPrivate* priv = src->priv;
 
-    priv->resourceHandle->setDefersLoading(true);
+    priv->resource->setDefersLoading(true);
 
     GST_OBJECT_LOCK(src);
     priv->paused = TRUE;
@@ -769,15 +764,8 @@
 
 void webKitWebSrcSetMediaPlayer(WebKitWebSrc* src, WebCore::MediaPlayer* player)
 {
-    WebKitWebSrcPrivate* priv = src->priv;
-    WebCore::Frame* frame = 0;
-
-    WebCore::Document* document = player->mediaPlayerClient()->mediaPlayerOwningDocument();
-    if (document)
-        frame = document->frame();
-
-    priv->frame = frame;
-    priv->player = player;
+    ASSERT(player);
+    src->priv->player = player;
 }
 
 StreamingClient::StreamingClient(WebKitWebSrc* src) : m_src(src)
@@ -790,12 +778,8 @@
 
 }
 
-void StreamingClient::willSendRequest(ResourceHandle*, ResourceRequest&, const ResourceResponse&)
+void StreamingClient::responseReceived(CachedResource* resource, const ResourceResponse& response)
 {
-}
-
-void StreamingClient::didReceiveResponse(ResourceHandle*, const ResourceResponse& response)
-{
     WebKitWebSrcPrivate* priv = m_src->priv;
 
     GST_DEBUG_OBJECT(m_src, "Received response: %d", response.httpStatusCode());
@@ -883,7 +867,7 @@
         notifyGstTagsOnPad(GST_ELEMENT(m_src), m_src->priv->srcpad, tags);
 }
 
-void StreamingClient::didReceiveData(ResourceHandle* handle, const char* data, int length, int)
+void StreamingClient::dataReceived(CachedResource* resource, const char* data, int length)
 {
     WebKitWebSrcPrivate* priv = m_src->priv;
 
@@ -896,7 +880,7 @@
         unmapGstBuffer(priv->buffer.get());
 #endif
 
-    if (priv->seekID || handle != priv->resourceHandle) {
+    if (priv->seekID || resource != priv->resource) {
         GST_DEBUG_OBJECT(m_src, "Seek in progress, ignoring data");
         priv->buffer.clear();
         return;
@@ -930,7 +914,7 @@
         GST_ELEMENT_ERROR(m_src, CORE, FAILED, (0), (0));
 }
 
-char* StreamingClient::getOrCreateReadBuffer(size_t requestedSize, size_t& actualSize)
+char* StreamingClient::getOrCreateReadBuffer(CachedResource*, size_t requestedSize, size_t& actualSize)
 {
     WebKitWebSrcPrivate* priv = m_src->priv;
 
@@ -948,34 +932,25 @@
     return getGstBufferDataPointer(buffer);
 }
 
-void StreamingClient::didFinishLoading(ResourceHandle*, double)
+void StreamingClient::notifyFinished(CachedResource* resource)
 {
     WebKitWebSrcPrivate* priv = m_src->priv;
 
+    if (resource->loadFailedOrCanceled()) {
+        if (!resource->wasCanceled()) {
+            const ResourceError& error = resource->resourceError();
+            GST_ERROR_OBJECT(m_src, "Have failure: %s", error.localizedDescription().utf8().data());
+            GST_ELEMENT_ERROR(m_src, RESOURCE, FAILED, ("%s", error.localizedDescription().utf8().data()), (0));
+        }
+        gst_app_src_end_of_stream(m_src->priv->appsrc);
+        return;
+    }
+
     GST_DEBUG_OBJECT(m_src, "Have EOS");
 
     if (!priv->seekID)
         gst_app_src_end_of_stream(m_src->priv->appsrc);
 }
 
-void StreamingClient::didFail(ResourceHandle*, const ResourceError& error)
-{
-    GST_ERROR_OBJECT(m_src, "Have failure: %s", error.localizedDescription().utf8().data());
-    GST_ELEMENT_ERROR(m_src, RESOURCE, FAILED, ("%s", error.localizedDescription().utf8().data()), (0));
-    gst_app_src_end_of_stream(m_src->priv->appsrc);
-}
-
-void StreamingClient::wasBlocked(ResourceHandle*)
-{
-    GST_ERROR_OBJECT(m_src, "Request was blocked");
-    GST_ELEMENT_ERROR(m_src, RESOURCE, OPEN_READ, ("Access to \"%s\" was blocked", m_src->priv->uri), (0));
-}
-
-void StreamingClient::cannotShowURL(ResourceHandle*)
-{
-    GST_ERROR_OBJECT(m_src, "Cannot show URL");
-    GST_ELEMENT_ERROR(m_src, RESOURCE, OPEN_READ, ("Can't show \"%s\"", m_src->priv->uri), (0));
-}
-
 #endif // USE(GSTREAMER)
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to