Title: [165789] trunk/Source/WebKit2
Revision
165789
Author
[email protected]
Date
2014-03-17 18:52:15 -0700 (Mon, 17 Mar 2014)

Log 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:

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (165788 => 165789)


--- trunk/Source/WebKit2/ChangeLog	2014-03-18 01:44:17 UTC (rev 165788)
+++ trunk/Source/WebKit2/ChangeLog	2014-03-18 01:52:15 UTC (rev 165789)
@@ -1,3 +1,24 @@
+2014-03-17  Anders Carlsson  <[email protected]>
+
+        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:
+
 2014-03-17  Tim Horton  <[email protected]>
 
         Address some style nits.

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm (165788 => 165789)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm	2014-03-18 01:44:17 UTC (rev 165788)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm	2014-03-18 01:52:15 UTC (rev 165789)
@@ -36,6 +36,7 @@
 #import "WebCertificateInfo.h"
 #import "WebContext.h"
 #import "WebCookieManagerProxy.h"
+#import "WebProcessMessages.h"
 #import <WebCore/CertificateInfo.h>
 #import <wtf/RetainPtr.h>
 
@@ -51,6 +52,12 @@
 };
 #endif
 
+#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED == 1080
+@interface NSKeyedArchiver (WKDetails)
+- (void)setRequiresSecureCoding:(BOOL)b;
+@end
+#endif
+
 @implementation WKProcessPool
 
 - (instancetype)init
@@ -149,7 +156,21 @@
 
 - (void)_setObject:(id <NSCopying, NSSecureCoding>)object forBundleParameter:(NSString *)parameter
 {
-    [_context->ensureBundleParameters() setObject:adoptNS([(NSObject *)object copy]).get() forKey:parameter];
+    auto copy = adoptNS([(NSObject *)object copy]);
+
+    auto data = "" alloc] init]);
+    auto keyedArchiver = adoptNS([[NSKeyedArchiver alloc] initForWritingWithMutableData:data.get()]);
+    [keyedArchiver setRequiresSecureCoding:YES];
+
+    @try {
+        [keyedArchiver encodeObject:copy.get() forKey:@"parameter"];
+        [keyedArchiver finishEncoding];
+    } @catch (NSException *exception) {
+        LOG_ERROR("Failed to encode bundle parameter: %@", exception);
+    }
+
+    [_context->ensureBundleParameters() setObject:copy.get() forKey:parameter];
+    _context->sendToAllProcesses(Messages::WebProcess::SetInjectedBundleParameter(parameter, IPC::DataReference(static_cast<const uint8_t*>([data bytes]), [data length])));
 }
 
 @end

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.h (165788 => 165789)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.h	2014-03-18 01:44:17 UTC (rev 165788)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.h	2014-03-18 01:52:15 UTC (rev 165789)
@@ -31,6 +31,8 @@
 
 - (instancetype)initWithDictionary:(NSDictionary *)dictionary;
 
+- (void)setParameter:(id)parameter forKey:(NSString *)key;
+
 @end
 
 #endif

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.mm (165788 => 165789)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.mm	2014-03-18 01:44:17 UTC (rev 165788)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.mm	2014-03-18 01:52:15 UTC (rev 165789)
@@ -49,6 +49,13 @@
     return [_parameters valueForKey:key];
 }
 
+- (void)setParameter:(id)parameter forKey:(NSString *)key
+{
+    [self willChangeValueForKey:key];
+    [_parameters setValue:parameter forKey:key];
+    [self didChangeValueForKey:key];
+}
+
 @end
 
 #endif

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h (165788 => 165789)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h	2014-03-18 01:44:17 UTC (rev 165788)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h	2014-03-18 01:52:15 UTC (rev 165789)
@@ -58,6 +58,7 @@
 namespace IPC {
 class ArgumentDecoder;
 class Connection;
+class DataReference;
 }
 
 namespace WebKit {
@@ -89,6 +90,8 @@
     bool load(API::Object* initializationUserData);
     void setSandboxExtension(PassRefPtr<SandboxExtension> sandboxExtension) { m_sandboxExtension = sandboxExtension; }
 
+    void setBundleParameter(const String& key, const IPC::DataReference&);
+
     // API
     void initializeClient(const WKBundleClientBase*);
     void postMessage(const String&, API::Object*);

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm (165788 => 165789)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm	2014-03-18 01:44:17 UTC (rev 165788)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm	2014-03-18 01:52:15 UTC (rev 165789)
@@ -143,6 +143,26 @@
 }
 #endif
 
+void InjectedBundle::setBundleParameter(const String& key, const IPC::DataReference& value)
+{
+#if WK_API_ENABLED
+    auto bundleParameterData = adoptNS([[NSData alloc] initWithBytesNoCopy:const_cast<void*>(static_cast<const void*>(value.data())) length:value.size() freeWhenDone:NO]);
+
+    auto unarchiver = adoptNS([[NSKeyedUnarchiver alloc] initForReadingWithData:bundleParameterData.get()]);
+    [unarchiver setRequiresSecureCoding:YES];
+
+    id parameter = nil;
+    @try {
+        parameter = [unarchiver decodeObjectForKey:@"parameter"];
+    } @catch (NSException *exception) {
+        LOG_ERROR("Failed to decode bundle parameter: %@", exception);
+    }
+
+    [m_bundleParameters setParameter:parameter forKey:key];
+#endif
+}
+
+
 void InjectedBundle::platformInitialize(const WebProcessCreationParameters& parameters)
 {
 #if WK_API_ENABLED

Modified: trunk/Source/WebKit2/WebProcess/WebProcess.cpp (165788 => 165789)


--- trunk/Source/WebKit2/WebProcess/WebProcess.cpp	2014-03-18 01:44:17 UTC (rev 165788)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.cpp	2014-03-18 01:52:15 UTC (rev 165789)
@@ -948,6 +948,15 @@
     injectedBundle->didReceiveMessage(messageName, messageBody.get());
 }
 
+void WebProcess::setInjectedBundleParameter(const String& key, const IPC::DataReference& value)
+{
+    InjectedBundle* injectedBundle = WebProcess::shared().injectedBundle();
+    if (!injectedBundle)
+        return;
+
+    injectedBundle->setBundleParameter(key, value);
+}
+
 bool WebProcess::usesNetworkProcess() const
 {
 #if ENABLE(NETWORK_PROCESS)

Modified: trunk/Source/WebKit2/WebProcess/WebProcess.h (165788 => 165789)


--- trunk/Source/WebKit2/WebProcess/WebProcess.h	2014-03-18 01:44:17 UTC (rev 165788)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.h	2014-03-18 01:52:15 UTC (rev 165789)
@@ -243,6 +243,7 @@
     void setMemoryCacheDisabled(bool);
 
     void postInjectedBundleMessage(const IPC::DataReference& messageData);
+    void setInjectedBundleParameter(const String& key, const IPC::DataReference&);
 
     // ChildProcess
     virtual void initializeProcess(const ChildProcessInitializationParameters&) override;

Modified: trunk/Source/WebKit2/WebProcess/WebProcess.messages.in (165788 => 165789)


--- trunk/Source/WebKit2/WebProcess/WebProcess.messages.in	2014-03-18 01:44:17 UTC (rev 165788)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.messages.in	2014-03-18 01:52:15 UTC (rev 165789)
@@ -73,6 +73,7 @@
     GarbageCollectJavaScriptObjects()
     SetJavaScriptGarbageCollectorTimerEnabled(bool enable)
 
+    SetInjectedBundleParameter(String parameter, IPC::DataReference value);
     PostInjectedBundleMessage(IPC::DataReference messageData);
 
     ReleasePageCache()
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to