Changeset 152778 in webkit
- Timestamp:
- Jul 17, 2013 2:39:21 AM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r152775 r152778 1 2013-07-17 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GStreamer] webkitwebsrc: use SubResourceLoader 4 https://bugs.webkit.org/show_bug.cgi?id=73743 5 6 Reviewed by Philippe Normand. 7 8 * GNUmakefile.list.am: Add new files to compilation. 9 * PlatformEfl.cmake: Ditto. 10 * PlatformGTK.cmake: Ditto. 11 * loader/SubresourceLoader.h: Add getOrCreateReadBuffer() when 12 using SOUP. 13 * loader/cache/CachedRawResource.h: 14 * loader/cache/CachedRawResourceClient.h: 15 (WebCore::CachedRawResourceClient::getOrCreateReadBuffer): Added 16 to allow the client to allocate the read buffer. 17 * loader/cache/CachedResource.h: 18 (WebCore::CachedResource::getOrCreateReadBuffer): 19 * loader/soup/CachedRawResourceSoup.cpp: Added. 20 (WebCore::CachedRawResource::getOrCreateReadBuffer): Iterate the 21 clients until one returns a valid read buffer or return NULL to 22 fallback to the default read buffer. 23 * loader/soup/SubresourceLoaderSoup.cpp: Added. 24 (WebCore::SubresourceLoader::getOrCreateReadBuffer): Call 25 CachedResource::getOrCreateReadBuffer(). 26 * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp: 27 (StreamingClient): Make this a CachedRawResourceClient. 28 (_WebKitWebSrcPrivate): Remove frame and resourceHandle and add a 29 cached resource handle. 30 (webKitWebSrcDispose): Clear the player pointer. 31 (webKitWebSrcStop): Remove the client from the cached resource. 32 (webKitWebSrcStart): Use CachedResourceLoader to schedule a 33 CachedRawResource load for the media without buffering the data. 34 (webKitWebSrcNeedDataMainCb): Call CachedResource::setDefersLoading. 35 (webKitWebSrcEnoughDataMainCb): Ditto. 36 (webKitWebSrcSetMediaPlayer): Simply update the player pointer. 37 (StreamingClient::responseReceived): Update to the 38 CachedRawResourceClient API. 39 (StreamingClient::dataReceived): Ditto. 40 (StreamingClient::getOrCreateReadBuffer): Ditto. 41 (StreamingClient::notifyFinished): Ditto. 42 1 43 2013-07-17 Kwang Yul Seo <skyul@company100.net> 2 44 -
trunk/Source/WebCore/GNUmakefile.list.am
r152702 r152778 4132 4132 Source/WebCore/loader/SubstituteData.h \ 4133 4133 Source/WebCore/loader/SubstituteResource.h \ 4134 Source/WebCore/loader/soup/CachedRawResourceSoup.cpp \ 4135 Source/WebCore/loader/soup/SubresourceLoaderSoup.cpp \ 4134 4136 Source/WebCore/loader/TextResourceDecoder.cpp \ 4135 4137 Source/WebCore/loader/TextResourceDecoder.h \ -
trunk/Source/WebCore/PlatformEfl.cmake
r150240 r152778 37 37 38 38 editing/atk/FrameSelectionAtk.cpp 39 40 loader/soup/CachedRawResourceSoup.cpp 41 loader/soup/SubresourceLoaderSoup.cpp 39 42 40 43 page/efl/DragControllerEfl.cpp -
trunk/Source/WebCore/PlatformGTK.cmake
r152094 r152778 42 42 43 43 editing/atk/FrameSelectionAtk.cpp 44 45 loader/soup/CachedRawResourceSoup.cpp 46 loader/soup/SubresourceLoaderSoup.cpp 44 47 45 48 page/gtk/DragControllerGtk.cpp -
trunk/Source/WebCore/loader/SubresourceLoader.h
r151586 r152778 74 74 virtual void releaseResources() OVERRIDE; 75 75 76 #if USE(SOUP) 77 virtual char* getOrCreateReadBuffer(size_t requestedSize, size_t& actualSize) OVERRIDE; 78 #endif 79 76 80 bool checkForHTTPStatusCodeError(); 77 81 -
trunk/Source/WebCore/loader/cache/CachedRawResource.h
r151586 r152778 68 68 void notifyClientsDataWasReceived(const char* data, unsigned length); 69 69 70 #if USE(SOUP) 71 virtual char* getOrCreateReadBuffer(size_t requestedSize, size_t& actualSize); 72 #endif 73 70 74 unsigned long m_identifier; 71 75 -
trunk/Source/WebCore/loader/cache/CachedRawResourceClient.h
r148265 r152778 42 42 virtual void dataReceived(CachedResource*, const char* /* data */, int /* length */) { } 43 43 virtual void redirectReceived(CachedResource*, ResourceRequest&, const ResourceResponse&) { } 44 #if USE(SOUP) 45 virtual char* getOrCreateReadBuffer(CachedResource*, size_t /* requestedSize */, size_t& /* actualSize */) { return 0; } 46 #endif 44 47 }; 45 48 -
trunk/Source/WebCore/loader/cache/CachedResource.h
r152219 r152778 256 256 #endif 257 257 258 #if USE(SOUP) 259 virtual char* getOrCreateReadBuffer(size_t /* requestedSize */, size_t& /* actualSize */) { return 0; } 260 #endif 261 258 262 protected: 259 263 virtual void checkNotify(); -
trunk/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp
r151903 r152778 23 23 #if ENABLE(VIDEO) && USE(GSTREAMER) 24 24 25 #include "Document.h" 26 #include "Frame.h" 27 #include "FrameLoader.h" 25 #include "CachedRawResource.h" 26 #include "CachedRawResourceClient.h" 27 #include "CachedResourceHandle.h" 28 #include "CachedResourceLoader.h" 29 #include "CachedResourceRequest.h" 28 30 #include "GRefPtrGStreamer.h" 29 31 #include "GStreamerVersioning.h" 30 32 #include "MediaPlayer.h" 31 #include "NetworkingContext.h"32 33 #include "NotImplemented.h" 33 #include "ResourceHandleClient.h"34 #include "ResourceHandleInternal.h"35 34 #include "ResourceRequest.h" 36 35 #include "ResourceResponse.h" … … 45 44 using namespace WebCore; 46 45 47 class StreamingClient : public ResourceHandleClient {46 class StreamingClient : public CachedRawResourceClient { 48 47 WTF_MAKE_NONCOPYABLE(StreamingClient); WTF_MAKE_FAST_ALLOCATED; 49 48 public: … … 51 50 virtual ~StreamingClient(); 52 51 53 virtual void willSendRequest(ResourceHandle*, ResourceRequest&, const ResourceResponse&);54 virtual void didReceiveResponse(ResourceHandle*, const ResourceResponse&);55 56 virtual char* getOrCreateReadBuffer(size_t requestedSize, size_t& actualSize);57 58 virtual void didReceiveData(ResourceHandle*, const char*, int, int);59 virtual void didFinishLoading(ResourceHandle*, double /*finishTime*/);60 virtual void didFail(ResourceHandle*, const ResourceError&);61 virtual void wasBlocked(ResourceHandle*);62 virtual void cannotShowURL(ResourceHandle*);63 64 52 private: 53 // CachedResourceClient 54 virtual void responseReceived(CachedResource*, const ResourceResponse&); 55 virtual void dataReceived(CachedResource*, const char*, int); 56 virtual void notifyFinished(CachedResource*); 57 virtual char* getOrCreateReadBuffer(CachedResource*, size_t requestedSize, size_t& actualSize); 58 65 59 WebKitWebSrc* m_src; 66 60 }; … … 72 66 gchar* uri; 73 67 74 RefPtr<WebCore::Frame> frame;75 68 WebCore::MediaPlayer* player; 76 69 77 70 StreamingClient* client; 78 RefPtr<ResourceHandle> resourceHandle;71 CachedResourceHandle<CachedRawResource> resource; 79 72 80 73 guint64 offset; … … 295 288 } 296 289 290 priv->player = 0; 291 297 292 GST_CALL_PARENT(G_OBJECT_CLASS, dispose, (object)); 298 293 } … … 367 362 WebKitWebSrcPrivate* priv = src->priv; 368 363 369 if (priv->resourceHandle) { 370 priv->resourceHandle->cancel(); 371 priv->resourceHandle.release(); 372 } 373 priv->resourceHandle = 0; 374 375 if (priv->frame && !seeking) 376 priv->frame.clear(); 377 378 priv->player = 0; 364 if (priv->resource) { 365 priv->resource->removeClient(priv->client); 366 priv->resource = 0; 367 } 368 369 if (priv->client) { 370 delete priv->client; 371 priv->client = 0; 372 } 379 373 380 374 if (priv->buffer) { … … 438 432 return false; 439 433 } 440 434 435 ASSERT(priv->player); 436 441 437 KURL url = KURL(KURL(), priv->uri); 442 438 443 439 ResourceRequest request(url); 444 440 request.setAllowCookies(true); 445 446 NetworkingContext* context = 0; 447 FrameLoader* loader = priv->frame ? priv->frame->loader() : 0; 448 if (loader) { 449 loader->addExtraFieldsToSubresourceRequest(request); 450 context = loader->networkingContext(); 451 } 452 453 if (priv->player) 454 request.setHTTPReferrer(priv->player->referrer()); 441 request.setHTTPReferrer(priv->player->referrer()); 455 442 456 443 // Let Apple web servers know we want to access their nice movie trailers. … … 473 460 request.setHTTPHeaderField("transferMode.dlna", "Streaming"); 474 461 475 priv->resourceHandle = ResourceHandle::create(context, request, priv->client, false, false); 476 if (!priv->resourceHandle) { 477 GST_ERROR_OBJECT(src, "Failed to create ResourceHandle"); 462 if (CachedResourceLoader* loader = priv->player->cachedResourceLoader()) { 463 CachedResourceRequest cacheRequest(request, ResourceLoaderOptions(SendCallbacks, DoNotSniffContent, DoNotBufferData, DoNotAllowStoredCredentials, DoNotAskClientForCrossOriginCredentials, DoSecurityCheck, UseDefaultOriginRestrictionsForType)); 464 priv->resource = loader->requestRawResource(cacheRequest); 465 if (priv->resource) { 466 priv->client = new StreamingClient(src); 467 priv->resource->addClient(priv->client); 468 } 469 } 470 471 if (!priv->resource) { 472 GST_ERROR_OBJECT(src, "Failed to schedule resource load"); 478 473 return false; 479 474 } … … 677 672 WebKitWebSrcPrivate* priv = src->priv; 678 673 679 priv->resource Handle->setDefersLoading(false);674 priv->resource->setDefersLoading(false); 680 675 681 676 GST_OBJECT_LOCK(src); … … 707 702 WebKitWebSrcPrivate* priv = src->priv; 708 703 709 priv->resource Handle->setDefersLoading(true);704 priv->resource->setDefersLoading(true); 710 705 711 706 GST_OBJECT_LOCK(src); … … 770 765 void webKitWebSrcSetMediaPlayer(WebKitWebSrc* src, WebCore::MediaPlayer* player) 771 766 { 772 WebKitWebSrcPrivate* priv = src->priv; 773 WebCore::Frame* frame = 0; 774 775 WebCore::Document* document = player->mediaPlayerClient()->mediaPlayerOwningDocument(); 776 if (document) 777 frame = document->frame(); 778 779 priv->frame = frame; 780 priv->player = player; 767 ASSERT(player); 768 src->priv->player = player; 781 769 } 782 770 … … 791 779 } 792 780 793 void StreamingClient::willSendRequest(ResourceHandle*, ResourceRequest&, const ResourceResponse&) 794 { 795 } 796 797 void StreamingClient::didReceiveResponse(ResourceHandle*, const ResourceResponse& response) 781 void StreamingClient::responseReceived(CachedResource* resource, const ResourceResponse& response) 798 782 { 799 783 WebKitWebSrcPrivate* priv = m_src->priv; … … 884 868 } 885 869 886 void StreamingClient::d idReceiveData(ResourceHandle* handle, const char* data, int length, int)870 void StreamingClient::dataReceived(CachedResource* resource, const char* data, int length) 887 871 { 888 872 WebKitWebSrcPrivate* priv = m_src->priv; … … 897 881 #endif 898 882 899 if (priv->seekID || handle != priv->resourceHandle) {883 if (priv->seekID || resource != priv->resource) { 900 884 GST_DEBUG_OBJECT(m_src, "Seek in progress, ignoring data"); 901 885 priv->buffer.clear(); … … 931 915 } 932 916 933 char* StreamingClient::getOrCreateReadBuffer( size_t requestedSize, size_t& actualSize)917 char* StreamingClient::getOrCreateReadBuffer(CachedResource*, size_t requestedSize, size_t& actualSize) 934 918 { 935 919 WebKitWebSrcPrivate* priv = m_src->priv; … … 949 933 } 950 934 951 void StreamingClient:: didFinishLoading(ResourceHandle*, double)935 void StreamingClient::notifyFinished(CachedResource* resource) 952 936 { 953 937 WebKitWebSrcPrivate* priv = m_src->priv; 938 939 if (resource->loadFailedOrCanceled()) { 940 if (!resource->wasCanceled()) { 941 const ResourceError& error = resource->resourceError(); 942 GST_ERROR_OBJECT(m_src, "Have failure: %s", error.localizedDescription().utf8().data()); 943 GST_ELEMENT_ERROR(m_src, RESOURCE, FAILED, ("%s", error.localizedDescription().utf8().data()), (0)); 944 } 945 gst_app_src_end_of_stream(m_src->priv->appsrc); 946 return; 947 } 954 948 955 949 GST_DEBUG_OBJECT(m_src, "Have EOS"); … … 959 953 } 960 954 961 void StreamingClient::didFail(ResourceHandle*, const ResourceError& error)962 {963 GST_ERROR_OBJECT(m_src, "Have failure: %s", error.localizedDescription().utf8().data());964 GST_ELEMENT_ERROR(m_src, RESOURCE, FAILED, ("%s", error.localizedDescription().utf8().data()), (0));965 gst_app_src_end_of_stream(m_src->priv->appsrc);966 }967 968 void StreamingClient::wasBlocked(ResourceHandle*)969 {970 GST_ERROR_OBJECT(m_src, "Request was blocked");971 GST_ELEMENT_ERROR(m_src, RESOURCE, OPEN_READ, ("Access to \"%s\" was blocked", m_src->priv->uri), (0));972 }973 974 void StreamingClient::cannotShowURL(ResourceHandle*)975 {976 GST_ERROR_OBJECT(m_src, "Cannot show URL");977 GST_ELEMENT_ERROR(m_src, RESOURCE, OPEN_READ, ("Can't show \"%s\"", m_src->priv->uri), (0));978 }979 980 955 #endif // USE(GSTREAMER) 981 956
Note: See TracChangeset
for help on using the changeset viewer.