Log Message
[WK2] Add SPI for injected bundle to manually set permissions https://bugs.webkit.org/show_bug.cgi?id=95127 <rdar://problem/12182635>
Reviewed by Jessie Berlin. This is work toward providing Mac support for web notifications in DRT and WTR (77969). Add support functions to WebKit2 which maintain the map of permissions to origins for web notifications. For WebKit1 the map is managed by DumpRenderTree. * WebProcess/InjectedBundle/InjectedBundle.h: Add TestRunner SPI. * WebProcess/InjectedBundle/InjectedBundle.cpp: (WebKit::InjectedBundle::setWebNotificationPermission): (WebKit::InjectedBundle::removeAllWebNotificationPermissions): * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h: Expose as WK API. Also, rearrange the ordering of the functions so that it reflects the same order found in InjectedBundle.h. * WebProcess/InjectedBundle/API/c/WKBundle.cpp: * WebProcess/Notifications/NotificationPermissionRequestManager.cpp: (WebKit::NotificationPermissionRequestManager::setPermissionLevelForTesting): Manually set the permission level for an origin. (WebKit::NotificationPermissionRequestManager::removeAllPermissionsForTesting): * WebProcess/Notifications/NotificationPermissionRequestManager.h: (NotificationPermissionRequestManager): * WebProcess/Notifications/WebNotificationManager.cpp: (WebKit::WebNotificationManager::removeAllPermissionsForTesting): Clear the permission map. * WebProcess/Notifications/WebNotificationManager.h: Promote didUpdateNotificationDecision message as public function, so that NotificationPermissionRequestManager can update the permission map.
Modified Paths
- trunk/Source/WebKit2/ChangeLog
- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp
- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePrivate.h
- trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp
- trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h
- trunk/Source/WebKit2/WebProcess/Notifications/NotificationPermissionRequestManager.cpp
- trunk/Source/WebKit2/WebProcess/Notifications/NotificationPermissionRequestManager.h
- trunk/Source/WebKit2/WebProcess/Notifications/WebNotificationManager.cpp
- trunk/Source/WebKit2/WebProcess/Notifications/WebNotificationManager.h
Diff
Modified: trunk/Source/WebKit2/ChangeLog (126898 => 126899)
--- trunk/Source/WebKit2/ChangeLog 2012-08-28 18:09:21 UTC (rev 126898)
+++ trunk/Source/WebKit2/ChangeLog 2012-08-28 18:11:53 UTC (rev 126899)
@@ -1,3 +1,36 @@
+2012-08-28 Jon Lee <[email protected]>
+
+ [WK2] Add SPI for injected bundle to manually set permissions
+ https://bugs.webkit.org/show_bug.cgi?id=95127
+ <rdar://problem/12182635>
+
+ Reviewed by Jessie Berlin.
+
+ This is work toward providing Mac support for web notifications in DRT and WTR (77969).
+
+ Add support functions to WebKit2 which maintain the map of permissions to origins for web notifications.
+ For WebKit1 the map is managed by DumpRenderTree.
+
+ * WebProcess/InjectedBundle/InjectedBundle.h: Add TestRunner SPI.
+ * WebProcess/InjectedBundle/InjectedBundle.cpp:
+ (WebKit::InjectedBundle::setWebNotificationPermission):
+ (WebKit::InjectedBundle::removeAllWebNotificationPermissions):
+
+ * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h: Expose as WK API. Also, rearrange the ordering of the
+ functions so that it reflects the same order found in InjectedBundle.h.
+ * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
+
+ * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
+ (WebKit::NotificationPermissionRequestManager::setPermissionLevelForTesting): Manually set the permission
+ level for an origin.
+ (WebKit::NotificationPermissionRequestManager::removeAllPermissionsForTesting):
+ * WebProcess/Notifications/NotificationPermissionRequestManager.h:
+ (NotificationPermissionRequestManager):
+ * WebProcess/Notifications/WebNotificationManager.cpp:
+ (WebKit::WebNotificationManager::removeAllPermissionsForTesting): Clear the permission map.
+ * WebProcess/Notifications/WebNotificationManager.h: Promote didUpdateNotificationDecision message as public
+ function, so that NotificationPermissionRequestManager can update the permission map.
+
2012-08-28 Christophe Dumez <[email protected]>
[EFL] WebKit EFL updates view on HTTP 204 response
Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp (126898 => 126899)
--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp 2012-08-28 18:09:21 UTC (rev 126898)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp 2012-08-28 18:11:53 UTC (rev 126899)
@@ -260,3 +260,13 @@
{
toImpl(bundleRef)->setUserStyleSheetLocation(toImpl(pageGroupRef), toImpl(location)->string());
}
+
+void WKBundleSetWebNotificationPermission(WKBundleRef bundleRef, WKBundlePageRef pageRef, WKStringRef originStringRef, bool allowed)
+{
+ toImpl(bundleRef)->setWebNotificationPermission(toImpl(pageRef), toImpl(originStringRef)->string(), allowed);
+}
+
+void WKBundleRemoveAllWebNotificationPermissions(WKBundleRef bundleRef, WKBundlePageRef pageRef)
+{
+ toImpl(bundleRef)->removeAllWebNotificationPermissions(toImpl(pageRef));
+}
Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePrivate.h (126898 => 126899)
--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePrivate.h 2012-08-28 18:09:21 UTC (rev 126898)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePrivate.h 2012-08-28 18:11:53 UTC (rev 126899)
@@ -36,13 +36,6 @@
extern "C" {
#endif
-WK_EXPORT void WKBundleSetShouldTrackVisitedLinks(WKBundleRef bundle, bool shouldTrackVisitedLinks);
-WK_EXPORT void WKBundleRemoveAllVisitedLinks(WKBundleRef bundle);
-WK_EXPORT void WKBundleActivateMacFontAscentHack(WKBundleRef bundle);
-WK_EXPORT void WKBundleGarbageCollectJavaScriptObjects(WKBundleRef bundle);
-WK_EXPORT void WKBundleGarbageCollectJavaScriptObjectsOnAlternateThreadForDebugging(WKBundleRef bundle, bool waitUntilDone);
-WK_EXPORT size_t WKBundleGetJavaScriptObjectsCount(WKBundleRef bundle);
-
enum WKUserScriptInjectionTime {
kWKInjectAtDocumentStart,
kWKInjectAtDocumentEnd
@@ -55,17 +48,13 @@
};
typedef enum WKUserContentInjectedFrames WKUserContentInjectedFrames;
-WK_EXPORT void WKBundleAddUserScript(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, WKBundleScriptWorldRef scriptWorld, WKStringRef source, WKURLRef url, WKArrayRef whitelist, WKArrayRef blacklist, WKUserScriptInjectionTime injectionTime, WKUserContentInjectedFrames injectedFrames);
-WK_EXPORT void WKBundleAddUserStyleSheet(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, WKBundleScriptWorldRef scriptWorld, WKStringRef source, WKURLRef url, WKArrayRef whitelist, WKArrayRef blacklist, WKUserContentInjectedFrames injectedFrames);
-WK_EXPORT void WKBundleRemoveUserScript(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, WKBundleScriptWorldRef scriptWorld, WKURLRef url);
-WK_EXPORT void WKBundleRemoveUserStyleSheet(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, WKBundleScriptWorldRef scriptWorld, WKURLRef url);
-WK_EXPORT void WKBundleRemoveUserScripts(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, WKBundleScriptWorldRef scriptWorld);
-WK_EXPORT void WKBundleRemoveUserStyleSheets(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, WKBundleScriptWorldRef scriptWorld);
-WK_EXPORT void WKBundleRemoveAllUserContent(WKBundleRef bundle, WKBundlePageGroupRef pageGroup);
-
+// TestRunner only SPI
+WK_EXPORT void WKBundleSetShouldTrackVisitedLinks(WKBundleRef bundle, bool shouldTrackVisitedLinks);
+WK_EXPORT void WKBundleSetAlwaysAcceptCookies(WKBundleRef bundle, bool);
+WK_EXPORT void WKBundleRemoveAllVisitedLinks(WKBundleRef bundle);
+WK_EXPORT void WKBundleActivateMacFontAscentHack(WKBundleRef bundle);
// Will make WebProcess ignore this preference until a preferences change notification, only for WebKitTestRunner use.
WK_EXPORT void WKBundleOverrideBoolPreferenceForTestRunner(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, WKStringRef preference, bool enabled);
-
WK_EXPORT void WKBundleSetAllowUniversalAccessFromFileURLs(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, bool enabled);
WK_EXPORT void WKBundleSetAllowFileAccessFromFileURLs(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, bool enabled);
WK_EXPORT void WKBundleSetFrameFlatteningEnabled(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, bool enabled);
@@ -74,25 +63,43 @@
WK_EXPORT void WKBundleSetJavaScriptCanAccessClipboard(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, bool enabled);
WK_EXPORT void WKBundleSetPrivateBrowsingEnabled(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, bool enabled);
WK_EXPORT void WKBundleSetPopupBlockingEnabled(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, bool enabled);
-WK_EXPORT void WKBundleSetUserStyleSheetLocation(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, WKStringRef location);
+WK_EXPORT void WKBundleSwitchNetworkLoaderToNewTestingSession(WKBundleRef bundle);
WK_EXPORT void WKBundleSetAuthorAndUserStylesEnabled(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, bool enabled);
-WK_EXPORT void WKBundleClearAllDatabases(WKBundleRef bundle);
-WK_EXPORT void WKBundleSetDatabaseQuota(WKBundleRef bundle, uint64_t);
-WK_EXPORT void WKBundleClearApplicationCache(WKBundleRef bundle);
-WK_EXPORT void WKBundleSetAppCacheMaximumSize(WKBundleRef bundle, uint64_t size);
+WK_EXPORT void WKBundleAddOriginAccessWhitelistEntry(WKBundleRef bundle, WKStringRef, WKStringRef, WKStringRef, bool);
+WK_EXPORT void WKBundleRemoveOriginAccessWhitelistEntry(WKBundleRef bundle, WKStringRef, WKStringRef, WKStringRef, bool);
+WK_EXPORT void WKBundleResetOriginAccessWhitelists(WKBundleRef bundle);
WK_EXPORT int WKBundleNumberOfPages(WKBundleRef bundle, WKBundleFrameRef frameRef, double pageWidthInPixels, double pageHeightInPixels);
WK_EXPORT int WKBundlePageNumberForElementById(WKBundleRef bundle, WKBundleFrameRef frameRef, WKStringRef idRef, double pageWidthInPixels, double pageHeightInPixels);
WK_EXPORT WKStringRef WKBundlePageSizeAndMarginsInPixels(WKBundleRef bundle, WKBundleFrameRef frameRef, int, int, int, int, int, int, int);
WK_EXPORT bool WKBundleIsPageBoxVisible(WKBundleRef bundle, WKBundleFrameRef frameRef, int);
-WK_EXPORT void WKBundleAddOriginAccessWhitelistEntry(WKBundleRef bundle, WKStringRef, WKStringRef, WKStringRef, bool);
-WK_EXPORT void WKBundleRemoveOriginAccessWhitelistEntry(WKBundleRef bundle, WKStringRef, WKStringRef, WKStringRef, bool);
-WK_EXPORT void WKBundleResetOriginAccessWhitelists(WKBundleRef bundle);
-WK_EXPORT void WKBundleSetAlwaysAcceptCookies(WKBundleRef bundle, bool);
+WK_EXPORT void WKBundleSetUserStyleSheetLocation(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, WKStringRef location);
+WK_EXPORT void WKBundleSetWebNotificationPermission(WKBundleRef bundle, WKBundlePageRef page, WKStringRef originStringRef, bool allowed);
+WK_EXPORT void WKBundleRemoveAllWebNotificationPermissions(WKBundleRef bundle, WKBundlePageRef page);
+// UserContent API
+WK_EXPORT void WKBundleAddUserScript(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, WKBundleScriptWorldRef scriptWorld, WKStringRef source, WKURLRef url, WKArrayRef whitelist, WKArrayRef blacklist, WKUserScriptInjectionTime injectionTime, WKUserContentInjectedFrames injectedFrames);
+WK_EXPORT void WKBundleAddUserStyleSheet(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, WKBundleScriptWorldRef scriptWorld, WKStringRef source, WKURLRef url, WKArrayRef whitelist, WKArrayRef blacklist, WKUserContentInjectedFrames injectedFrames);
+WK_EXPORT void WKBundleRemoveUserScript(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, WKBundleScriptWorldRef scriptWorld, WKURLRef url);
+WK_EXPORT void WKBundleRemoveUserStyleSheet(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, WKBundleScriptWorldRef scriptWorld, WKURLRef url);
+WK_EXPORT void WKBundleRemoveUserScripts(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, WKBundleScriptWorldRef scriptWorld);
+WK_EXPORT void WKBundleRemoveUserStyleSheets(WKBundleRef bundle, WKBundlePageGroupRef pageGroup, WKBundleScriptWorldRef scriptWorld);
+WK_EXPORT void WKBundleRemoveAllUserContent(WKBundleRef bundle, WKBundlePageGroupRef pageGroup);
+
+// Local storage API
+WK_EXPORT void WKBundleClearAllDatabases(WKBundleRef bundle);
+WK_EXPORT void WKBundleSetDatabaseQuota(WKBundleRef bundle, uint64_t);
+
+// Application Cache API
+WK_EXPORT void WKBundleClearApplicationCache(WKBundleRef bundle);
+WK_EXPORT void WKBundleSetAppCacheMaximumSize(WKBundleRef bundle, uint64_t size);
+
+// Garbage collection API
+WK_EXPORT void WKBundleGarbageCollectJavaScriptObjects(WKBundleRef bundle);
+WK_EXPORT void WKBundleGarbageCollectJavaScriptObjectsOnAlternateThreadForDebugging(WKBundleRef bundle, bool waitUntilDone);
+WK_EXPORT size_t WKBundleGetJavaScriptObjectsCount(WKBundleRef bundle);
+
WK_EXPORT bool WKBundleIsProcessingUserGesture(WKBundleRef bundle);
-WK_EXPORT void WKBundleSwitchNetworkLoaderToNewTestingSession(WKBundleRef bundle);
-
WK_EXPORT void WKBundleSetPageVisibilityState(WKBundleRef bundle, WKBundlePageRef page, int state, bool isInitialState);
#ifdef __cplusplus
Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp (126898 => 126899)
--- trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp 2012-08-28 18:09:21 UTC (rev 126898)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp 2012-08-28 18:11:53 UTC (rev 126899)
@@ -32,6 +32,7 @@
#include "InjectedBundleScriptWorld.h"
#include "InjectedBundleUserMessageCoders.h"
#include "LayerTreeHost.h"
+#include "NotificationPermissionRequestManager.h"
#include "WKAPICast.h"
#include "WKBundleAPICast.h"
#include "WebApplicationCacheManager.h"
@@ -534,4 +535,24 @@
(*iter)->settings()->setUserStyleSheetLocation(KURL(KURL(), location));
}
+void InjectedBundle::setWebNotificationPermission(WebPage* page, const String& originString, bool allowed)
+{
+#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
+ page->notificationPermissionRequestManager()->setPermissionLevelForTesting(originString, allowed ? NotificationClient::PermissionAllowed : NotificationClient::PermissionDenied);
+#else
+ UNUSED_PARAM(page);
+ UNUSED_PARAM(originString);
+ UNUSED_PARAM(allowed);
+#endif
+}
+
+void InjectedBundle::removeAllWebNotificationPermissions(WebPage* page)
+{
+#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
+ page->notificationPermissionRequestManager()->removeAllPermissionsForTesting();
+#else
+ UNUSED_PARAM(page);
+#endif
+}
+
} // namespace WebKit
Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h (126898 => 126899)
--- trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h 2012-08-28 18:09:21 UTC (rev 126898)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h 2012-08-28 18:11:53 UTC (rev 126899)
@@ -124,6 +124,8 @@
String pageSizeAndMarginsInPixels(WebFrame*, int, int, int, int, int, int, int);
bool isPageBoxVisible(WebFrame*, int);
void setUserStyleSheetLocation(WebPageGroupProxy*, const String&);
+ void setWebNotificationPermission(WebPage*, const String& originString, bool allowed);
+ void removeAllWebNotificationPermissions(WebPage*);
// UserContent API
void addUserScript(WebPageGroupProxy*, InjectedBundleScriptWorld*, const String& source, const String& url, ImmutableArray* whitelist, ImmutableArray* blacklist, WebCore::UserScriptInjectionTime, WebCore::UserContentInjectedFrames);
Modified: trunk/Source/WebKit2/WebProcess/Notifications/NotificationPermissionRequestManager.cpp (126898 => 126899)
--- trunk/Source/WebKit2/WebProcess/Notifications/NotificationPermissionRequestManager.cpp 2012-08-28 18:09:21 UTC (rev 126898)
+++ trunk/Source/WebKit2/WebProcess/Notifications/NotificationPermissionRequestManager.cpp 2012-08-28 18:11:53 UTC (rev 126899)
@@ -128,6 +128,23 @@
#endif
}
+void NotificationPermissionRequestManager::setPermissionLevelForTesting(const String& originString, WebCore::NotificationClient::Permission permission)
+{
+#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
+ WebProcess::shared().notificationManager().didUpdateNotificationDecision(originString, permission);
+#else
+ UNUSED_PARAM(originString);
+ UNUSED_PARAM(permission);
+#endif
+}
+
+void NotificationPermissionRequestManager::removeAllPermissionsForTesting()
+{
+#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
+ WebProcess::shared().notificationManager().removeAllPermissionsForTesting();
+#endif
+}
+
void NotificationPermissionRequestManager::didReceiveNotificationPermissionDecision(uint64_t requestID, bool allowed)
{
#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
Modified: trunk/Source/WebKit2/WebProcess/Notifications/NotificationPermissionRequestManager.h (126898 => 126899)
--- trunk/Source/WebKit2/WebProcess/Notifications/NotificationPermissionRequestManager.h 2012-08-28 18:09:21 UTC (rev 126898)
+++ trunk/Source/WebKit2/WebProcess/Notifications/NotificationPermissionRequestManager.h 2012-08-28 18:11:53 UTC (rev 126899)
@@ -32,6 +32,7 @@
#include <wtf/HashMap.h>
#include <wtf/RefCounted.h>
#include <wtf/RefPtr.h>
+#include <wtf/text/WTFString.h>
namespace WebCore {
class Notification;
@@ -55,8 +56,11 @@
#endif
void cancelRequest(WebCore::SecurityOrigin*);
- // Synchronous call to retrieve permission level for given security origin
WebCore::NotificationClient::Permission permissionLevel(WebCore::SecurityOrigin*);
+
+ // For testing purposes only.
+ void setPermissionLevelForTesting(const String& originString, WebCore::NotificationClient::Permission);
+ void removeAllPermissionsForTesting();
void didReceiveNotificationPermissionDecision(uint64_t notificationID, bool allowed);
Modified: trunk/Source/WebKit2/WebProcess/Notifications/WebNotificationManager.cpp (126898 => 126899)
--- trunk/Source/WebKit2/WebProcess/Notifications/WebNotificationManager.cpp 2012-08-28 18:09:21 UTC (rev 126898)
+++ trunk/Source/WebKit2/WebProcess/Notifications/WebNotificationManager.cpp 2012-08-28 18:11:53 UTC (rev 126899)
@@ -105,6 +105,13 @@
return NotificationClient::PermissionNotAllowed;
}
+void WebNotificationManager::removeAllPermissionsForTesting()
+{
+#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
+ m_permissionsMap.clear();
+#endif
+}
+
bool WebNotificationManager::show(Notification* notification, WebPage* page)
{
#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
Modified: trunk/Source/WebKit2/WebProcess/Notifications/WebNotificationManager.h (126898 => 126899)
--- trunk/Source/WebKit2/WebProcess/Notifications/WebNotificationManager.h 2012-08-28 18:09:21 UTC (rev 126898)
+++ trunk/Source/WebKit2/WebProcess/Notifications/WebNotificationManager.h 2012-08-28 18:11:53 UTC (rev 126899)
@@ -68,6 +68,11 @@
// Looks in local cache for permission. If not found, returns DefaultDenied.
WebCore::NotificationClient::Permission policyForOrigin(WebCore::SecurityOrigin*) const;
+ void didUpdateNotificationDecision(const String& originString, bool allowed);
+
+ // For testing purposes only.
+ void removeAllPermissionsForTesting();
+
private:
// Implemented in generated WebNotificationManagerMessageReceiver.cpp
void didReceiveWebNotificationManagerMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
@@ -75,7 +80,6 @@
void didShowNotification(uint64_t notificationID);
void didClickNotification(uint64_t notificationID);
void didCloseNotifications(const Vector<uint64_t>& notificationIDs);
- void didUpdateNotificationDecision(const String& originString, bool allowed);
void didRemoveNotificationDecisions(const Vector<String>& originStrings);
#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
_______________________________________________ webkit-changes mailing list [email protected] http://lists.webkit.org/mailman/listinfo/webkit-changes
