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()