Changeset 196082 in webkit


Ignore:
Timestamp:
Feb 3, 2016 2:57:43 PM (8 years ago)
Author:
jer.noble@apple.com
Message:

[Mac] Wrap a resource and resource loader in a NSURLSession-like object for use by lower level frameworks
https://bugs.webkit.org/show_bug.cgi?id=153669

Reviewed by Alex Christensen.

Source/WebCore:

API Test: WebCore.WebCoreNSURLSession

Add a NSURLSession-like object, which wraps a CachedResourceLoader and CachedRawResource, which we can
hand to lower-level frameworks, so that network loads by those frameworks use WebKit's loader.

  • platform/network/cocoa/WebCoreNSURLSession.h: Added.
  • platform/network/cocoa/WebCoreNSURLSession.mm: Added.

(-[WebCoreNSURLSession initWithResourceLoader:delegate:delegateQueue:]):
(-[WebCoreNSURLSession dealloc]):
(-[WebCoreNSURLSession copyWithZone:]):
(-[WebCoreNSURLSession delegateQueue]):
(-[WebCoreNSURLSession configuration]):
(-[WebCoreNSURLSession loader]):
(-[WebCoreNSURLSession finishTasksAndInvalidate]):
(-[WebCoreNSURLSession invalidateAndCancel]):
(-[WebCoreNSURLSession resetWithCompletionHandler:]):
(-[WebCoreNSURLSession flushWithCompletionHandler:]):
(-[WebCoreNSURLSession getTasksWithCompletionHandler:]):
(-[WebCoreNSURLSession getAllTasksWithCompletionHandler:]):
(-[WebCoreNSURLSession dataTaskWithRequest:]):
(-[WebCoreNSURLSession dataTaskWithURL:]):
(-[WebCoreNSURLSession uploadTaskWithRequest:fromFile:]):
(-[WebCoreNSURLSession uploadTaskWithRequest:fromData:]):
(-[WebCoreNSURLSession uploadTaskWithStreamedRequest:]):
(-[WebCoreNSURLSession downloadTaskWithRequest:]):
(-[WebCoreNSURLSession downloadTaskWithURL:]):
(-[WebCoreNSURLSession downloadTaskWithResumeData:]):
(-[WebCoreNSURLSession streamTaskWithHostName:port:]):
(-[WebCoreNSURLSession streamTaskWithNetService:]):
(-[WebCoreNSURLSession isKindOfClass:]):

Add a C++ class which can act as a CachedRawResourceClient, passing the results back to a WebCoreNSURLSessionDataTask:

(WebCore::WebCoreNSURLSessionDataTaskClient::WebCoreNSURLSessionDataTaskClient):
(WebCore::WebCoreNSURLSessionDataTaskClient::dataSent):
(WebCore::WebCoreNSURLSessionDataTaskClient::responseReceived):
(WebCore::WebCoreNSURLSessionDataTaskClient::dataReceived):
(WebCore::WebCoreNSURLSessionDataTaskClient::redirectReceived):
(WebCore::WebCoreNSURLSessionDataTaskClient::notifyFinished):

Add a NSURLSessionDataTask-like object, which takes a request, then uses it to create and wrap a CachedRawResource.
Becase NSURSessionDataTask is intended to be used off-main-thread, care must be taken to dispatch back to the main-
(or web-) thread before calling CachedRawResource functions.

(-[WebCoreNSURLSessionDataTask initWithSession:identifier:URL:]):
(-[WebCoreNSURLSessionDataTask initWithSession:identifier:request:]):
(-[WebCoreNSURLSessionDataTask copyWithZone:]):
(-[WebCoreNSURLSessionDataTask _restart]):
(-[WebCoreNSURLSessionDataTask _cancel]):
(-[WebCoreNSURLSessionDataTask _finish]):
(-[WebCoreNSURLSessionDataTask _setDefersLoading:]):
(-[WebCoreNSURLSessionDataTask cancel]):
(-[WebCoreNSURLSessionDataTask suspend]):
(-[WebCoreNSURLSessionDataTask resume]):
(-[WebCoreNSURLSessionDataTask _timingData]):
(-[WebCoreNSURLSessionDataTask resource:sentBytes:totalBytesToBeSent:]):
(-[WebCoreNSURLSessionDataTask resource:receivedResponse:]):
(-[WebCoreNSURLSessionDataTask resource:receivedData:length:]):
(-[WebCoreNSURLSessionDataTask resource:receivedRedirect:request:]):
(-[WebCoreNSURLSessionDataTask resourceFinished:]):

  • WebCore.xcodeproj/project.pbxproj: Add new files to project.

Tools:

Add an API test for WebCoreNSURLSession, testing that it behaves like a regulare NSURLSession, including
calling appropriate NSURLSessionDelegate callbacks.

Drive-by fix: Add a FeatureDefines.xcconfig to TestWebKitAPI. Without this, the ENABLE macros in WebCore
header files will not match the one used when compiling WebCore, leading to strange crashes and weird
inconsistencies when calling, e.g., inline methods.

  • TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Added.
  • TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
  • TestWebKitAPI/Tests/WebCore/WebCoreNSURLSession.mm: Added.

(-[TestNSURLSessionLoaderDelegate webView:didCommitLoadForFrame:]):
(-[TestNSURLSessionDataDelegate URLSession:task:didCompleteWithError:]):
(-[TestNSURLSessionDataDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
(-[TestNSURLSessionDataDelegate URLSession:dataTask:didReceiveData:]):
(TestWebKitAPI::WebCoreNSURLSessionTest::SetUp):
(TestWebKitAPI::WebCoreNSURLSessionTest::TearDown):
(TestWebKitAPI::TEST_F):

Location:
trunk
Files:
4 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r196080 r196082  
     12016-02-03  Jer Noble  <jer.noble@apple.com>
     2
     3        [Mac] Wrap a resource and resource loader in a NSURLSession-like object for use by lower level frameworks
     4        https://bugs.webkit.org/show_bug.cgi?id=153669
     5
     6        Reviewed by Alex Christensen.
     7
     8        API Test: WebCore.WebCoreNSURLSession
     9
     10        Add a NSURLSession-like object, which wraps a CachedResourceLoader and CachedRawResource, which we can
     11        hand to lower-level frameworks, so that network loads by those frameworks use WebKit's loader.
     12
     13        * platform/network/cocoa/WebCoreNSURLSession.h: Added.
     14        * platform/network/cocoa/WebCoreNSURLSession.mm: Added.
     15        (-[WebCoreNSURLSession initWithResourceLoader:delegate:delegateQueue:]):
     16        (-[WebCoreNSURLSession dealloc]):
     17        (-[WebCoreNSURLSession copyWithZone:]):
     18        (-[WebCoreNSURLSession delegateQueue]):
     19        (-[WebCoreNSURLSession configuration]):
     20        (-[WebCoreNSURLSession loader]):
     21        (-[WebCoreNSURLSession finishTasksAndInvalidate]):
     22        (-[WebCoreNSURLSession invalidateAndCancel]):
     23        (-[WebCoreNSURLSession resetWithCompletionHandler:]):
     24        (-[WebCoreNSURLSession flushWithCompletionHandler:]):
     25        (-[WebCoreNSURLSession getTasksWithCompletionHandler:]):
     26        (-[WebCoreNSURLSession getAllTasksWithCompletionHandler:]):
     27        (-[WebCoreNSURLSession dataTaskWithRequest:]):
     28        (-[WebCoreNSURLSession dataTaskWithURL:]):
     29        (-[WebCoreNSURLSession uploadTaskWithRequest:fromFile:]):
     30        (-[WebCoreNSURLSession uploadTaskWithRequest:fromData:]):
     31        (-[WebCoreNSURLSession uploadTaskWithStreamedRequest:]):
     32        (-[WebCoreNSURLSession downloadTaskWithRequest:]):
     33        (-[WebCoreNSURLSession downloadTaskWithURL:]):
     34        (-[WebCoreNSURLSession downloadTaskWithResumeData:]):
     35        (-[WebCoreNSURLSession streamTaskWithHostName:port:]):
     36        (-[WebCoreNSURLSession streamTaskWithNetService:]):
     37        (-[WebCoreNSURLSession isKindOfClass:]):
     38
     39        Add a C++ class which can act as a CachedRawResourceClient, passing the results back to a WebCoreNSURLSessionDataTask:
     40
     41        (WebCore::WebCoreNSURLSessionDataTaskClient::WebCoreNSURLSessionDataTaskClient):
     42        (WebCore::WebCoreNSURLSessionDataTaskClient::dataSent):
     43        (WebCore::WebCoreNSURLSessionDataTaskClient::responseReceived):
     44        (WebCore::WebCoreNSURLSessionDataTaskClient::dataReceived):
     45        (WebCore::WebCoreNSURLSessionDataTaskClient::redirectReceived):
     46        (WebCore::WebCoreNSURLSessionDataTaskClient::notifyFinished):
     47
     48        Add a NSURLSessionDataTask-like object, which takes a request, then uses it to create and wrap a CachedRawResource.
     49        Becase NSURSessionDataTask is intended to be used off-main-thread, care must be taken to dispatch back to the main-
     50        (or web-) thread before calling CachedRawResource functions.
     51
     52        (-[WebCoreNSURLSessionDataTask initWithSession:identifier:URL:]):
     53        (-[WebCoreNSURLSessionDataTask initWithSession:identifier:request:]):
     54        (-[WebCoreNSURLSessionDataTask copyWithZone:]):
     55        (-[WebCoreNSURLSessionDataTask _restart]):
     56        (-[WebCoreNSURLSessionDataTask _cancel]):
     57        (-[WebCoreNSURLSessionDataTask _finish]):
     58        (-[WebCoreNSURLSessionDataTask _setDefersLoading:]):
     59        (-[WebCoreNSURLSessionDataTask cancel]):
     60        (-[WebCoreNSURLSessionDataTask suspend]):
     61        (-[WebCoreNSURLSessionDataTask resume]):
     62        (-[WebCoreNSURLSessionDataTask _timingData]):
     63        (-[WebCoreNSURLSessionDataTask resource:sentBytes:totalBytesToBeSent:]):
     64        (-[WebCoreNSURLSessionDataTask resource:receivedResponse:]):
     65        (-[WebCoreNSURLSessionDataTask resource:receivedData:length:]):
     66        (-[WebCoreNSURLSessionDataTask resource:receivedRedirect:request:]):
     67        (-[WebCoreNSURLSessionDataTask resourceFinished:]):
     68        * WebCore.xcodeproj/project.pbxproj: Add new files to project.
     69
    1702016-02-03  Darin Adler  <darin@apple.com>
    271
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r196031 r196082  
    59915991                CD1B4A65160786AE00282DF9 /* MediaKeyNeededEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDA98DC216014EEE00FEA3B1 /* MediaKeyNeededEvent.cpp */; };
    59925992                CD1E7347167BC78E009A885D /* TextTrackRepresentation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CD1E7346167BC78E009A885D /* TextTrackRepresentation.cpp */; };
     5993                CD225C0B1C46FBF400140761 /* WebCoreNSURLSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = CD225C091C46FBF400140761 /* WebCoreNSURLSession.mm */; };
     5994                CD225C0C1C46FBF400140761 /* WebCoreNSURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = CD225C0A1C46FBF400140761 /* WebCoreNSURLSession.h */; settings = {ATTRIBUTES = (Private, ); }; };
    59935995                CD27F6E51457685A0078207D /* JSMediaController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CD27F6E2145767580078207D /* JSMediaController.cpp */; };
    59945996                CD27F6E7145770D30078207D /* MediaController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CD27F6E6145770D30078207D /* MediaController.cpp */; };
     
    1388113883                CD19A2671A13E700008D650E /* DiagnosticLoggingClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DiagnosticLoggingClient.h; sourceTree = "<group>"; };
    1388213884                CD1E7346167BC78E009A885D /* TextTrackRepresentation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextTrackRepresentation.cpp; sourceTree = "<group>"; };
     13885                CD225C091C46FBF400140761 /* WebCoreNSURLSession.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebCoreNSURLSession.mm; sourceTree = "<group>"; };
     13886                CD225C0A1C46FBF400140761 /* WebCoreNSURLSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebCoreNSURLSession.h; sourceTree = "<group>"; };
    1388313887                CD27F6E014575C1B0078207D /* MediaController.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = MediaController.idl; sourceTree = "<group>"; };
    1388413888                CD27F6E2145767580078207D /* JSMediaController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaController.cpp; sourceTree = "<group>"; };
     
    1806918073                                7E7DE1FC195CEF260035363B /* ResourceRequestCocoa.mm */,
    1807018074                                A1F78D0B1C25422C00245446 /* ResourceResponseCocoa.mm */,
     18075                                CD225C091C46FBF400140761 /* WebCoreNSURLSession.mm */,
     18076                                CD225C0A1C46FBF400140761 /* WebCoreNSURLSession.h */,
    1807118077                        );
    1807218078                        path = cocoa;
     
    2747527481                                E4295FA412B0614E00D1ACE0 /* ResourceLoadPriority.h in Headers */,
    2747627482                                8A81BF8511DCFD9000DA2B98 /* ResourceLoadTiming.h in Headers */,
     27483                                CD225C0C1C46FBF400140761 /* WebCoreNSURLSession.h in Headers */,
    2747727484                                7EE6846D12D26E3800E79415 /* ResourceRequest.h in Headers */,
    2747827485                                514C767D0CE923A1007EF3CD /* ResourceRequestBase.h in Headers */,
     
    2892228929                                FD31600112B0267600C1A359 /* ChannelSplitterNode.cpp in Sources */,
    2892328930                                6550B69F099DF0270090D781 /* CharacterData.cpp in Sources */,
     28931                                CD225C0B1C46FBF400140761 /* WebCoreNSURLSession.mm in Sources */,
    2892428932                                9326DC0C09DAD5D600AFC847 /* CharsetData.cpp in Sources */,
    2892528933                                F55B3DB11251F12D003EF269 /* CheckboxInputType.cpp in Sources */,
  • trunk/Tools/ChangeLog

    r196065 r196082  
     12016-02-03  Jer Noble  <jer.noble@apple.com>
     2
     3        [Mac] Wrap a resource and resource loader in a NSURLSession-like object for use by lower level frameworks
     4        https://bugs.webkit.org/show_bug.cgi?id=153669
     5
     6        Reviewed by Alex Christensen.
     7
     8        Add an API test for WebCoreNSURLSession, testing that it behaves like a regulare NSURLSession, including
     9        calling appropriate NSURLSessionDelegate callbacks.
     10
     11        Drive-by fix: Add a FeatureDefines.xcconfig to TestWebKitAPI.  Without this, the ENABLE macros in WebCore
     12        header files will not match the one used when compiling WebCore, leading to strange crashes and weird
     13        inconsistencies when calling, e.g., inline methods.
     14
     15        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Added.
     16        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
     17        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
     18        * TestWebKitAPI/Tests/WebCore/WebCoreNSURLSession.mm: Added.
     19        (-[TestNSURLSessionLoaderDelegate webView:didCommitLoadForFrame:]):
     20        (-[TestNSURLSessionDataDelegate URLSession:task:didCompleteWithError:]):
     21        (-[TestNSURLSessionDataDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
     22        (-[TestNSURLSessionDataDelegate URLSession:dataTask:didReceiveData:]):
     23        (TestWebKitAPI::WebCoreNSURLSessionTest::SetUp):
     24        (TestWebKitAPI::WebCoreNSURLSessionTest::TearDown):
     25        (TestWebKitAPI::TEST_F):
     26
    1272016-02-03  Konstantin Tokarev  <annulen@yandex.ru>
    228
  • trunk/Tools/TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig

    r192801 r196082  
    2222// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2323
     24#include "FeatureDefines.xcconfig"
     25
    2426PRODUCT_NAME = TestWebKitAPI;
    2527GCC_ENABLE_OBJC_EXCEPTIONS = YES;
  • trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj

    r195764 r196082  
    317317                CD59F53419E9110D00CF1835 /* file-with-mse.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = CD59F53219E910AA00CF1835 /* file-with-mse.html */; };
    318318                CD59F53519E9110D00CF1835 /* test-mse.mp4 in Copy Resources */ = {isa = PBXBuildFile; fileRef = CD59F53319E910BC00CF1835 /* test-mse.mp4 */; };
     319                CD89D03A1C4EDB2A00040A04 /* WebCoreNSURLSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = CD89D0381C4EDB2A00040A04 /* WebCoreNSURLSession.mm */; };
    319320                CDBFCC451A9FF45300A7B691 /* FullscreenZoomInitialFrame.mm in Sources */ = {isa = PBXBuildFile; fileRef = CDBFCC431A9FF44800A7B691 /* FullscreenZoomInitialFrame.mm */; };
    320321                CDBFCC461A9FF49E00A7B691 /* FullscreenZoomInitialFrame.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = CDBFCC421A9FF44800A7B691 /* FullscreenZoomInitialFrame.html */; };
     
    792793                CD59F53219E910AA00CF1835 /* file-with-mse.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "file-with-mse.html"; sourceTree = "<group>"; };
    793794                CD59F53319E910BC00CF1835 /* test-mse.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = "test-mse.mp4"; sourceTree = "<group>"; };
     795                CD773F711C5057DB0002257C /* FeatureDefines.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = FeatureDefines.xcconfig; sourceTree = "<group>"; };
     796                CD89D0381C4EDB2A00040A04 /* WebCoreNSURLSession.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebCoreNSURLSession.mm; sourceTree = "<group>"; };
    794797                CDBFCC421A9FF44800A7B691 /* FullscreenZoomInitialFrame.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = FullscreenZoomInitialFrame.html; sourceTree = "<group>"; };
    795798                CDBFCC431A9FF44800A7B691 /* FullscreenZoomInitialFrame.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FullscreenZoomInitialFrame.mm; sourceTree = "<group>"; };
     
    984987                        isa = PBXGroup;
    985988                        children = (
     989                                CD89D0371C4EDB1300040A04 /* cocoa */,
    986990                                93A720E518F1A0E800A848E1 /* CalculationValue.cpp */,
    987991                                7CB184C41AA3F2100066EDFD /* ContentExtensions.cpp */,
     
    10931097                                BC90957E12554CF900083756 /* Base.xcconfig */,
    10941098                                BC90957F12554CF900083756 /* DebugRelease.xcconfig */,
     1099                                CD773F711C5057DB0002257C /* FeatureDefines.xcconfig */,
    10951100                                BC575AE2126E88B1006F0F12 /* InjectedBundle.xcconfig */,
    10961101                                BC90958012554CF900083756 /* TestWebKitAPI.xcconfig */,
     
    14641469                        );
    14651470                        path = mac;
     1471                        sourceTree = "<group>";
     1472                };
     1473                CD89D0371C4EDB1300040A04 /* cocoa */ = {
     1474                        isa = PBXGroup;
     1475                        children = (
     1476                                CD89D0381C4EDB2A00040A04 /* WebCoreNSURLSession.mm */,
     1477                        );
     1478                        name = cocoa;
    14661479                        sourceTree = "<group>";
    14671480                };
     
    18451858                                2E7765CF16C4D81100BA2BB1 /* mainMac.mm in Sources */,
    18461859                                41973B5B1AF2286A006C7B36 /* FileSystem.cpp in Sources */,
     1860                                CD89D03A1C4EDB2A00040A04 /* WebCoreNSURLSession.mm in Sources */,
    18471861                                A1C4FB6E1BACCE50003742D0 /* QuickLook.mm in Sources */,
    18481862                                7A5623111AD5AF3E0096B920 /* MenuTypesForMouseEvents.cpp in Sources */,
Note: See TracChangeset for help on using the changeset viewer.