Changeset 242302 in webkit


Ignore:
Timestamp:
Mar 1, 2019 6:27:21 PM (5 years ago)
Author:
achristensen@apple.com
Message:

Add setters on WKWebsiteDataStore for sourceApplicationBundleIdentifier and sourceApplicationSecondaryIdentifier
https://bugs.webkit.org/show_bug.cgi?id=195229
<rdar://problem/48520362>

Reviewed by Chris Dumez.

Source/WebKit:

Just like _setBoundInterfaceIdentifier, we need a way to set these properties after instantiation of a WKWebsiteDataStore,
but we need to make sure we don't set it after the parameters have been copied to the NetworkProcess.

Functionality verified by manual testing. See radar.
Added an API test that verifies the setter restrictions work as expected.

  • UIProcess/API/Cocoa/WKWebsiteDataStore.mm:

(-[WKWebsiteDataStore _sourceApplicationBundleIdentifier]):
(-[WKWebsiteDataStore _setSourceApplicationBundleIdentifier:]):
(-[WKWebsiteDataStore _sourceApplicationSecondaryIdentifier]):
(-[WKWebsiteDataStore _setSourceApplicationSecondaryIdentifier:]):

  • UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
  • UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:

(WebKit::toPKPaymentRequest):

  • UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:

(WebKit::WebsiteDataStore::parameters):

  • UIProcess/WebsiteData/WebsiteDataStore.cpp:

(WebKit::WebsiteDataStore::WebsiteDataStore):
(WebKit::WebsiteDataStore::setSourceApplicationSecondaryIdentifier):
(WebKit::WebsiteDataStore::setSourceApplicationBundleIdentifier):

  • UIProcess/WebsiteData/WebsiteDataStore.h:

(WebKit::WebsiteDataStore::sourceApplicationBundleIdentifier):
(WebKit::WebsiteDataStore::sourceApplicationSecondaryIdentifier):

Tools:

  • TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:

(TEST):

Location:
trunk
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r242297 r242302  
     12019-03-01  Alex Christensen  <achristensen@webkit.org>
     2
     3        Add setters on WKWebsiteDataStore for sourceApplicationBundleIdentifier and sourceApplicationSecondaryIdentifier
     4        https://bugs.webkit.org/show_bug.cgi?id=195229
     5        <rdar://problem/48520362>
     6
     7        Reviewed by Chris Dumez.
     8
     9        Just like _setBoundInterfaceIdentifier, we need a way to set these properties after instantiation of a WKWebsiteDataStore,
     10        but we need to make sure we don't set it after the parameters have been copied to the NetworkProcess.
     11
     12        Functionality verified by manual testing.  See radar.
     13        Added an API test that verifies the setter restrictions work as expected.
     14
     15        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
     16        (-[WKWebsiteDataStore _sourceApplicationBundleIdentifier]):
     17        (-[WKWebsiteDataStore _setSourceApplicationBundleIdentifier:]):
     18        (-[WKWebsiteDataStore _sourceApplicationSecondaryIdentifier]):
     19        (-[WKWebsiteDataStore _setSourceApplicationSecondaryIdentifier:]):
     20        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
     21        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
     22        (WebKit::toPKPaymentRequest):
     23        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
     24        (WebKit::WebsiteDataStore::parameters):
     25        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
     26        (WebKit::WebsiteDataStore::WebsiteDataStore):
     27        (WebKit::WebsiteDataStore::setSourceApplicationSecondaryIdentifier):
     28        (WebKit::WebsiteDataStore::setSourceApplicationBundleIdentifier):
     29        * UIProcess/WebsiteData/WebsiteDataStore.h:
     30        (WebKit::WebsiteDataStore::sourceApplicationBundleIdentifier):
     31        (WebKit::WebsiteDataStore::sourceApplicationSecondaryIdentifier):
     32
    1332019-03-01  Antoine Quint  <graouts@apple.com>
    234
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm

    r242203 r242302  
    364364}
    365365
     366- (NSString *)_sourceApplicationBundleIdentifier
     367{
     368    return _websiteDataStore->websiteDataStore().sourceApplicationBundleIdentifier();
     369}
     370
     371- (void)_setSourceApplicationBundleIdentifier:(NSString *)identifier
     372{
     373    if (!_websiteDataStore->websiteDataStore().setSourceApplicationBundleIdentifier(identifier))
     374        [NSException raise:NSGenericException format:@"_setSourceApplicationBundleIdentifier cannot be called after networking has begun"];
     375}
     376
     377- (NSString *)_sourceApplicationSecondaryIdentifier
     378{
     379    return _websiteDataStore->websiteDataStore().sourceApplicationSecondaryIdentifier();
     380}
     381
     382- (void)_setSourceApplicationSecondaryIdentifier:(NSString *)identifier
     383{
     384    if (!_websiteDataStore->websiteDataStore().setSourceApplicationSecondaryIdentifier(identifier))
     385        [NSException raise:NSGenericException format:@"_setSourceApplicationSecondaryIdentifier cannot be called after networking has begun"];
     386}
     387
    366388- (NSDictionary *)_proxyConfiguration
    367389{
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h

    r242203 r242302  
    5858@property (nonatomic, setter=_setAllowsCellularAccess:) BOOL _allowsCellularAccess WK_API_AVAILABLE(macosx(10.13.4), ios(11.3));
    5959@property (nonatomic, setter=_setProxyConfiguration:) NSDictionary *_proxyConfiguration WK_API_AVAILABLE(macosx(10.14), ios(12.0));
     60@property (nonatomic, copy, setter=_setSourceApplicationBundleIdentifier:) NSString *_sourceApplicationBundleIdentifier WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
     61@property (nonatomic, copy, setter=_setSourceApplicationSecondaryIdentifier:) NSString *_sourceApplicationSecondaryIdentifier WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
    6062
    6163@property (nonatomic, readonly) NSURL *_indexedDBDatabaseDirectory;
  • trunk/Source/WebKit/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm

    r239427 r242302  
    507507
    508508    // FIXME: Instead of using respondsToSelector, this should use a proper #if version check.
    509     auto& configuration = webPageProxy.websiteDataStore().configuration();
    510 
    511     if (!configuration.sourceApplicationBundleIdentifier().isEmpty() && [result respondsToSelector:@selector(setSourceApplicationBundleIdentifier:)])
    512         [result setSourceApplicationBundleIdentifier:configuration.sourceApplicationBundleIdentifier()];
    513 
    514     if (!configuration.sourceApplicationSecondaryIdentifier().isEmpty() && [result respondsToSelector:@selector(setSourceApplicationSecondaryIdentifier:)])
    515         [result setSourceApplicationSecondaryIdentifier:configuration.sourceApplicationSecondaryIdentifier()];
     509    auto& websiteDataStore = webPageProxy.websiteDataStore();
     510
     511    if (!websiteDataStore.sourceApplicationBundleIdentifier().isEmpty() && [result respondsToSelector:@selector(setSourceApplicationBundleIdentifier:)])
     512        [result setSourceApplicationBundleIdentifier:websiteDataStore.sourceApplicationBundleIdentifier()];
     513
     514    if (!websiteDataStore.sourceApplicationSecondaryIdentifier().isEmpty() && [result respondsToSelector:@selector(setSourceApplicationSecondaryIdentifier:)])
     515        [result setSourceApplicationSecondaryIdentifier:websiteDataStore.sourceApplicationSecondaryIdentifier()];
    516516
    517517#if PLATFORM(IOS_FAMILY)
  • trunk/Source/WebKit/UIProcess/WebProcessPool.cpp

    r242203 r242302  
    491491        parameters.defaultDataStoreParameters.pendingCookies = copyToVector(m_websiteDataStore->websiteDataStore().pendingCookies());
    492492        m_websiteDataStore->websiteDataStore().clearPendingCookies();
     493        parameters.defaultDataStoreParameters.networkSessionParameters.sourceApplicationBundleIdentifier = m_websiteDataStore->websiteDataStore().sourceApplicationBundleIdentifier();
     494        parameters.defaultDataStoreParameters.networkSessionParameters.sourceApplicationSecondaryIdentifier = m_websiteDataStore->websiteDataStore().sourceApplicationSecondaryIdentifier();
     495        m_websiteDataStore->websiteDataStore().finalizeApplicationIdentifiers();
    493496    }
    494497
  • trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm

    r240498 r242302  
    9595        m_allowsCellularAccess,
    9696        m_proxyConfiguration,
    97         m_configuration->sourceApplicationBundleIdentifier(),
    98         m_configuration->sourceApplicationSecondaryIdentifier(),
     97        m_sourceApplicationBundleIdentifier,
     98        m_sourceApplicationSecondaryIdentifier,
    9999        shouldLogCookieInformation,
    100100        Seconds { [defaults integerForKey:WebKitNetworkLoadThrottleLatencyMillisecondsDefaultsKey] / 1000. },
     
    105105        false
    106106    };
     107    finalizeApplicationIdentifiers();
    107108
    108109    auto cookieFile = resolvedCookieStorageFile();
     
    116117
    117118    parameters.uiProcessCookieStorageIdentifier = m_uiProcessCookieStorageIdentifier;
    118     parameters.networkSessionParameters.sourceApplicationBundleIdentifier = m_configuration->sourceApplicationBundleIdentifier();
    119     parameters.networkSessionParameters.sourceApplicationSecondaryIdentifier = m_configuration->sourceApplicationSecondaryIdentifier();
     119    parameters.networkSessionParameters.sourceApplicationBundleIdentifier = m_sourceApplicationBundleIdentifier;
     120    parameters.networkSessionParameters.sourceApplicationSecondaryIdentifier = m_sourceApplicationSecondaryIdentifier;
    120121
    121122    parameters.pendingCookies = copyToVector(m_pendingCookies);
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp

    r242288 r242302  
    9999    , m_deviceIdHashSaltStorage(DeviceIdHashSaltStorage::create(isPersistent() ? m_configuration->deviceIdHashSaltsStorageDirectory() : String()))
    100100    , m_queue(WorkQueue::create("com.apple.WebKit.WebsiteDataStore"))
     101    , m_sourceApplicationBundleIdentifier(m_configuration->sourceApplicationBundleIdentifier())
     102    , m_sourceApplicationSecondaryIdentifier(m_configuration->sourceApplicationSecondaryIdentifier())
    101103#if ENABLE(WEB_AUTHN)
    102104    , m_authenticatorManager(makeUniqueRef<AuthenticatorManager>())
     
    21022104}
    21032105
    2104 }
     2106bool WebsiteDataStore::setSourceApplicationSecondaryIdentifier(String&& identifier)
     2107{
     2108    if (!m_allowedToSetApplicationIdentifiers)
     2109        return false;
     2110    m_sourceApplicationSecondaryIdentifier = WTFMove(identifier);
     2111    return true;
     2112}
     2113
     2114bool WebsiteDataStore::setSourceApplicationBundleIdentifier(String&& identifier)
     2115{
     2116    if (!m_allowedToSetApplicationIdentifiers)
     2117        return false;
     2118    m_sourceApplicationBundleIdentifier = WTFMove(identifier);
     2119    return true;
     2120}
     2121
     2122}
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h

    r242288 r242302  
    201201    void setBoundInterfaceIdentifier(String&& identifier) { m_boundInterfaceIdentifier = WTFMove(identifier); }
    202202    const String& boundInterfaceIdentifier() { return m_boundInterfaceIdentifier; }
     203
     204    const String& sourceApplicationBundleIdentifier() const { return m_sourceApplicationBundleIdentifier; }
     205    bool setSourceApplicationBundleIdentifier(String&&);
     206
     207    const String& sourceApplicationSecondaryIdentifier() const { return m_sourceApplicationSecondaryIdentifier; }
     208    bool setSourceApplicationSecondaryIdentifier(String&&);
     209   
     210    void finalizeApplicationIdentifiers() { m_allowedToSetApplicationIdentifiers = false; }
    203211   
    204212    void setAllowsCellularAccess(AllowsCellularAccess allows) { m_allowsCellularAccess = allows; }
     
    305313    String m_boundInterfaceIdentifier;
    306314    AllowsCellularAccess m_allowsCellularAccess { AllowsCellularAccess::Yes };
     315    String m_sourceApplicationBundleIdentifier;
     316    String m_sourceApplicationSecondaryIdentifier;
     317    bool m_allowedToSetApplicationIdentifiers { true };
    307318
    308319#if HAVE(SEC_KEY_PROXY)
  • trunk/Tools/ChangeLog

    r242294 r242302  
     12019-03-01  Alex Christensen  <achristensen@webkit.org>
     2
     3        Add setters on WKWebsiteDataStore for sourceApplicationBundleIdentifier and sourceApplicationSecondaryIdentifier
     4        https://bugs.webkit.org/show_bug.cgi?id=195229
     5        <rdar://problem/48520362>
     6
     7        Reviewed by Chris Dumez.
     8
     9        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
     10        (TEST):
     11
    1122019-03-01  Simon Fraser  <simon.fraser@apple.com>
    213
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm

    r240025 r242302  
    2929#import "Test.h"
    3030#import "TestNavigationDelegate.h"
     31#import "TestWKWebView.h"
    3132#import <WebKit/WKPreferencesRef.h>
    3233#import <WebKit/WKProcessPoolPrivate.h>
     
    453454}
    454455
     456TEST(WebKit, ApplicationIdentifiers)
     457{
     458    auto websiteDataStoreConfiguration = adoptNS([[_WKWebsiteDataStoreConfiguration alloc] init]);
     459    [websiteDataStoreConfiguration setSourceApplicationBundleIdentifier:@"testidentifier"];
     460
     461    auto webViewConfiguration = adoptNS([[WKWebViewConfiguration alloc] init]);
     462    auto websiteDataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:websiteDataStoreConfiguration.get()] autorelease];
     463    EXPECT_TRUE([websiteDataStore._sourceApplicationBundleIdentifier isEqualToString:@"testidentifier"]);
     464    [websiteDataStore _setSourceApplicationBundleIdentifier:@"otheridentifier"];
     465
     466    [webViewConfiguration setWebsiteDataStore:websiteDataStore];
     467    auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:webViewConfiguration.get()]);
     468    [webView synchronouslyLoadTestPageNamed:@"simple"];
     469   
     470    RetainPtr<NSException> exception;
     471    @try {
     472        [websiteDataStore _setSourceApplicationBundleIdentifier:@"settingShouldFailNow"];
     473    } @catch(NSException *caught) {
     474        exception = caught;
     475    }
     476    EXPECT_TRUE([[exception reason] isEqualToString:@"_setSourceApplicationBundleIdentifier cannot be called after networking has begun"]);
     477    EXPECT_TRUE([websiteDataStore._sourceApplicationBundleIdentifier isEqualToString:@"otheridentifier"]);
     478    EXPECT_TRUE([[websiteDataStoreConfiguration sourceApplicationBundleIdentifier] isEqualToString:@"testidentifier"]);
     479}
     480
    455481#endif
Note: See TracChangeset for help on using the changeset viewer.