Changeset 165789 in webkit


Ignore:
Timestamp:
Mar 17, 2014, 6:52:15 PM (11 years ago)
Author:
andersca@apple.com
Message:

Update the bundle parameters dictionary and send out KVO notifications
https://bugs.webkit.org/show_bug.cgi?id=130379
<rdar://problem/16213914>

Reviewed by Dan Bernstein.

  • UIProcess/API/Cocoa/WKProcessPool.mm:

(-[WKProcessPool _setObject:forBundleParameter:]):

  • WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.h:
  • WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.mm:

(-[WKWebProcessBundleParameters setParameter:forKey:]):

  • WebProcess/InjectedBundle/InjectedBundle.h:
  • WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:

(WebKit::InjectedBundle::setBundleParameter):

  • WebProcess/WebProcess.cpp:

(WebKit::WebProcess::setInjectedBundleParameter):

  • WebProcess/WebProcess.h:
  • WebProcess/WebProcess.messages.in:
Location:
trunk/Source/WebKit2
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r165777 r165789  
     12014-03-17  Anders Carlsson  <andersca@apple.com>
     2
     3        Update the bundle parameters dictionary and send out KVO notifications
     4        https://bugs.webkit.org/show_bug.cgi?id=130379
     5        <rdar://problem/16213914>
     6
     7        Reviewed by Dan Bernstein.
     8
     9        * UIProcess/API/Cocoa/WKProcessPool.mm:
     10        (-[WKProcessPool _setObject:forBundleParameter:]):
     11        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.h:
     12        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.mm:
     13        (-[WKWebProcessBundleParameters setParameter:forKey:]):
     14        * WebProcess/InjectedBundle/InjectedBundle.h:
     15        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
     16        (WebKit::InjectedBundle::setBundleParameter):
     17        * WebProcess/WebProcess.cpp:
     18        (WebKit::WebProcess::setInjectedBundleParameter):
     19        * WebProcess/WebProcess.h:
     20        * WebProcess/WebProcess.messages.in:
     21
    1222014-03-17  Tim Horton  <timothy_horton@apple.com>
    223
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm

    r165660 r165789  
    3737#import "WebContext.h"
    3838#import "WebCookieManagerProxy.h"
     39#import "WebProcessMessages.h"
    3940#import <WebCore/CertificateInfo.h>
    4041#import <wtf/RetainPtr.h>
     
    5051    NSHTTPCookieAcceptPolicyExclusivelyFromMainDocumentDomain = 3,
    5152};
     53#endif
     54
     55#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED == 1080
     56@interface NSKeyedArchiver (WKDetails)
     57- (void)setRequiresSecureCoding:(BOOL)b;
     58@end
    5259#endif
    5360
     
    150157- (void)_setObject:(id <NSCopying, NSSecureCoding>)object forBundleParameter:(NSString *)parameter
    151158{
    152     [_context->ensureBundleParameters() setObject:adoptNS([(NSObject *)object copy]).get() forKey:parameter];
     159    auto copy = adoptNS([(NSObject *)object copy]);
     160
     161    auto data = adoptNS([[NSMutableData alloc] init]);
     162    auto keyedArchiver = adoptNS([[NSKeyedArchiver alloc] initForWritingWithMutableData:data.get()]);
     163    [keyedArchiver setRequiresSecureCoding:YES];
     164
     165    @try {
     166        [keyedArchiver encodeObject:copy.get() forKey:@"parameter"];
     167        [keyedArchiver finishEncoding];
     168    } @catch (NSException *exception) {
     169        LOG_ERROR("Failed to encode bundle parameter: %@", exception);
     170    }
     171
     172    [_context->ensureBundleParameters() setObject:copy.get() forKey:parameter];
     173    _context->sendToAllProcesses(Messages::WebProcess::SetInjectedBundleParameter(parameter, IPC::DataReference(static_cast<const uint8_t*>([data bytes]), [data length])));
    153174}
    154175
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.h

    r165766 r165789  
    3232- (instancetype)initWithDictionary:(NSDictionary *)dictionary;
    3333
     34- (void)setParameter:(id)parameter forKey:(NSString *)key;
     35
    3436@end
    3537
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.mm

    r165762 r165789  
    5050}
    5151
     52- (void)setParameter:(id)parameter forKey:(NSString *)key
     53{
     54    [self willChangeValueForKey:key];
     55    [_parameters setValue:parameter forKey:key];
     56    [self didChangeValueForKey:key];
     57}
     58
    5259@end
    5360
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h

    r165762 r165789  
    5959class ArgumentDecoder;
    6060class Connection;
     61class DataReference;
    6162}
    6263
     
    8990    bool load(API::Object* initializationUserData);
    9091    void setSandboxExtension(PassRefPtr<SandboxExtension> sandboxExtension) { m_sandboxExtension = sandboxExtension; }
     92
     93    void setBundleParameter(const String& key, const IPC::DataReference&);
    9194
    9295    // API
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm

    r165762 r165789  
    144144#endif
    145145
     146void InjectedBundle::setBundleParameter(const String& key, const IPC::DataReference& value)
     147{
     148#if WK_API_ENABLED
     149    auto bundleParameterData = adoptNS([[NSData alloc] initWithBytesNoCopy:const_cast<void*>(static_cast<const void*>(value.data())) length:value.size() freeWhenDone:NO]);
     150
     151    auto unarchiver = adoptNS([[NSKeyedUnarchiver alloc] initForReadingWithData:bundleParameterData.get()]);
     152    [unarchiver setRequiresSecureCoding:YES];
     153
     154    id parameter = nil;
     155    @try {
     156        parameter = [unarchiver decodeObjectForKey:@"parameter"];
     157    } @catch (NSException *exception) {
     158        LOG_ERROR("Failed to decode bundle parameter: %@", exception);
     159    }
     160
     161    [m_bundleParameters setParameter:parameter forKey:key];
     162#endif
     163}
     164
     165
    146166void InjectedBundle::platformInitialize(const WebProcessCreationParameters& parameters)
    147167{
  • trunk/Source/WebKit2/WebProcess/WebProcess.cpp

    r165755 r165789  
    949949}
    950950
     951void WebProcess::setInjectedBundleParameter(const String& key, const IPC::DataReference& value)
     952{
     953    InjectedBundle* injectedBundle = WebProcess::shared().injectedBundle();
     954    if (!injectedBundle)
     955        return;
     956
     957    injectedBundle->setBundleParameter(key, value);
     958}
     959
    951960bool WebProcess::usesNetworkProcess() const
    952961{
  • trunk/Source/WebKit2/WebProcess/WebProcess.h

    r165619 r165789  
    244244
    245245    void postInjectedBundleMessage(const IPC::DataReference& messageData);
     246    void setInjectedBundleParameter(const String& key, const IPC::DataReference&);
    246247
    247248    // ChildProcess
  • trunk/Source/WebKit2/WebProcess/WebProcess.messages.in

    r165619 r165789  
    7474    SetJavaScriptGarbageCollectorTimerEnabled(bool enable)
    7575
     76    SetInjectedBundleParameter(String parameter, IPC::DataReference value);
    7677    PostInjectedBundleMessage(IPC::DataReference messageData);
    7778
Note: See TracChangeset for help on using the changeset viewer.