Changeset 202520 in webkit


Ignore:
Timestamp:
Jun 27, 2016 4:56:09 PM (8 years ago)
Author:
jer.noble@apple.com
Message:

REGRESSION?(r202466): http/tests/security/canvas-remote-read-remote-video-redirect.html failing on Sierra
https://bugs.webkit.org/show_bug.cgi?id=159172
<rdar://problem/27030025>

Reviewed by Brent Fulgham.

Add a hasSingleSecurityOrigin property to WebCoreNSURLSession that gets updated each time one of that
sessions' tasks receieves a response or a redirect request. Check that property from the MediaPlayerPrivate.

  • platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:

(WebCore::MediaPlayerPrivateAVFoundationObjC::hasSingleSecurityOrigin):

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

(-[WebCoreNSURLSession updateHasSingleSecurityOrigin:]):
(-[WebCoreNSURLSession dataTaskWithRequest:]):
(-[WebCoreNSURLSession dataTaskWithURL:]):
(-[WebCoreNSURLSessionDataTask resource:receivedResponse:]):
(-[WebCoreNSURLSessionDataTask resource:receivedRedirect:request:]):

Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r202517 r202520  
     12016-06-27  Jer Noble  <jer.noble@apple.com>
     2
     3        REGRESSION?(r202466): http/tests/security/canvas-remote-read-remote-video-redirect.html failing on Sierra
     4        https://bugs.webkit.org/show_bug.cgi?id=159172
     5        <rdar://problem/27030025>
     6
     7        Reviewed by Brent Fulgham.
     8
     9        Add a hasSingleSecurityOrigin property to WebCoreNSURLSession that gets updated each time one of that
     10        sessions' tasks receieves a response or a redirect request. Check that property from the MediaPlayerPrivate.
     11
     12        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
     13        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasSingleSecurityOrigin):
     14        * platform/network/cocoa/WebCoreNSURLSession.h:
     15        * platform/network/cocoa/WebCoreNSURLSession.mm:
     16        (-[WebCoreNSURLSession updateHasSingleSecurityOrigin:]):
     17        (-[WebCoreNSURLSession dataTaskWithRequest:]):
     18        (-[WebCoreNSURLSession dataTaskWithURL:]):
     19        (-[WebCoreNSURLSessionDataTask resource:receivedResponse:]):
     20        (-[WebCoreNSURLSessionDataTask resource:receivedRedirect:request:]):
     21
    1222016-06-27  Benjamin Poulain  <benjamin@webkit.org>
    223
  • trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm

    r202350 r202520  
    22422242    Ref<SecurityOrigin> resolvedOrigin(SecurityOrigin::create(resolvedURL()));
    22432243    Ref<SecurityOrigin> requestedOrigin(SecurityOrigin::createFromString(assetURL()));
    2244     return resolvedOrigin.get().isSameSchemeHostPort(&requestedOrigin.get());
     2244    if (!resolvedOrigin.get().isSameSchemeHostPort(&requestedOrigin.get()))
     2245        return false;
     2246
     2247#if PLATFORM(IOS) || __MAC_OS_X_VERSION_MIN_REQUIRED > 101100
     2248    AVAssetResourceLoader *resourceLoader = m_avAsset.get().resourceLoader;
     2249    if (Settings::isAVFoundationNSURLSessionEnabled() && [resourceLoader respondsToSelector:@selector(URLSession)]) {
     2250        WebCoreNSURLSession *session = (WebCoreNSURLSession *)resourceLoader.URLSession;
     2251        if ([session respondsToSelector:@selector(hasSingleSecurityOrigin)])
     2252            return session.hasSingleSecurityOrigin;
     2253    }
     2254#endif
     2255    return true;
    22452256}
    22462257
  • trunk/Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.h

    r199960 r202520  
    4747class PlatformMediaResourceLoader;
    4848class WebCoreNSURLSessionDataTaskClient;
     49class SecurityOrigin;
    4950}
    5051
     
    6465    HashSet<RetainPtr<WebCoreNSURLSessionDataTask>> _dataTasks;
    6566    BOOL _invalidated;
     67    BOOL _hasSingleSecurityOrigin;
    6668    NSUInteger _nextTaskIdentifier;
    6769    OSObjectPtr<dispatch_queue_t> _internalQueue;
    6870    WebCoreNSURLSessionCORSAccessCheckResults _corsResults;
     71    RefPtr<WebCore::SecurityOrigin> _requestedOrigin;
    6972}
    7073- (id)initWithResourceLoader:(WebCore::PlatformMediaResourceLoader&)loader delegate:(id<NSURLSessionTaskDelegate>)delegate delegateQueue:(NSOperationQueue*)queue;
     
    7477@property (copy) NSString *sessionDescription;
    7578@property (readonly) BOOL didPassCORSAccessChecks;
     79@property (readonly) BOOL hasSingleSecurityOrigin;
    7680- (void)finishTasksAndInvalidate;
    7781- (void)invalidateAndCancel;
  • trunk/Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm

    r202493 r202520  
    3131#import "CachedResourceRequest.h"
    3232#import "PlatformMediaResourceLoader.h"
     33#import "SecurityOrigin.h"
    3334#import "SubresourceLoader.h"
    3435
     
    4546- (void)addDelegateOperation:(void (^)(void))operation;
    4647- (void)task:(WebCoreNSURLSessionDataTask *)task didReceiveCORSAccessCheckResult:(BOOL)result;
     48- (void)updateHasSingleSecurityOrigin:(SecurityOrigin&)origin;
    4749@end
    4850
     
    8486    _queue = inQueue ? inQueue : [NSOperationQueue mainQueue];
    8587    _internalQueue = adoptOSObject(dispatch_queue_create("WebCoreNSURLSession _internalQueue", DISPATCH_QUEUE_SERIAL));
     88    _hasSingleSecurityOrigin = YES;
    8689
    8790    return self;
     
    140143}
    141144
     145- (void)updateHasSingleSecurityOrigin:(SecurityOrigin&)origin
     146{
     147    if (!_requestedOrigin) {
     148        _requestedOrigin = &origin;
     149        return;
     150    }
     151
     152    if (!origin.isSameSchemeHostPort(_requestedOrigin.get()))
     153        _hasSingleSecurityOrigin = false;
     154}
     155
    142156#pragma mark - NSURLSession API
    143157@synthesize sessionDescription=_sessionDescription;
     
    235249        return nil;
    236250
     251    [self updateHasSingleSecurityOrigin:SecurityOrigin::create([request URL])];
     252
    237253    WebCoreNSURLSessionDataTask *task = [[WebCoreNSURLSessionDataTask alloc] initWithSession:self identifier:_nextTaskIdentifier++ request:request];
    238254    _dataTasks.add(task);
     
    244260    if (_invalidated)
    245261        return nil;
     262
     263    [self updateHasSingleSecurityOrigin:SecurityOrigin::create(url)];
    246264
    247265    WebCoreNSURLSessionDataTask *task = [[WebCoreNSURLSessionDataTask alloc] initWithSession:self identifier:_nextTaskIdentifier++ URL:url];
     
    525543    ASSERT(isMainThread());
    526544    [self.session task:self didReceiveCORSAccessCheckResult:resource.didPassAccessControlCheck()];
     545    [self.session updateHasSingleSecurityOrigin:SecurityOrigin::create(response.url())];
    527546    self.countOfBytesExpectedToReceive = response.expectedContentLength();
    528547    [self _setDefersLoading:YES];
     
    609628    if (response.httpStatusCode() != 302 && response.httpStatusCode() != 307)
    610629        self.currentRequest = [NSURLRequest requestWithURL:request.url()];
     630
     631    [self.session updateHasSingleSecurityOrigin:SecurityOrigin::create(request.url())];
    611632}
    612633
Note: See TracChangeset for help on using the changeset viewer.