Title: [201457] trunk
Revision
201457
Author
[email protected]
Date
2016-05-27 11:50:24 -0700 (Fri, 27 May 2016)

Log Message

Expose content extension failure error codes in SPI
https://bugs.webkit.org/show_bug.cgi?id=158095
rdar://problem/26475651

Reviewed by Anders Carlsson.

Source/WebKit2:

* UIProcess/API/APIUserContentExtensionStore.cpp:
(API::UserContentExtensionStore::synchronousRemoveAllContentExtensions):
(API::UserContentExtensionStore::invalidateContentExtensionVersion):
Added for testing.
(API::userContentExtensionStoreErrorCategory):
* UIProcess/API/APIUserContentExtensionStore.h:
* UIProcess/API/Cocoa/_WKUserContentExtensionStore.h:
Added the new enum, _WKUserContentExtensionStoreErrorCode.
* UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm:
(-[_WKUserContentExtensionStore compileContentExtensionForIdentifier:encodedContentExtension:completionHandler:]):
Sometimes the error code returned by UserContentExtensionStore::compileContentExtension has the error code from compileRuleList.
When this happens, we want to get the message from the internal compiler error, but we want the NSError's code to always be CompileFailed.
(-[_WKUserContentExtensionStore lookupContentExtensionForIdentifier:completionHandler:]):
(-[_WKUserContentExtensionStore removeContentExtensionForIdentifier:completionHandler:]):
(-[_WKUserContentExtensionStore _removeAllContentExtensions]):
(-[_WKUserContentExtensionStore _invalidateContentExtensionVersionForIdentifier:]):
* UIProcess/API/Cocoa/_WKUserContentExtensionStorePrivate.h:
Added new invalidator for testing.

Tools:

* TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:
(checkDomain):
(TEST_F):
Add tests that use the new enum.

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (201456 => 201457)


--- trunk/Source/WebKit2/ChangeLog	2016-05-27 18:36:30 UTC (rev 201456)
+++ trunk/Source/WebKit2/ChangeLog	2016-05-27 18:50:24 UTC (rev 201457)
@@ -1,3 +1,30 @@
+2016-05-27  Alex Christensen  <[email protected]>
+
+        Expose content extension failure error codes in SPI
+        https://bugs.webkit.org/show_bug.cgi?id=158095
+        rdar://problem/26475651
+
+        Reviewed by Anders Carlsson.
+
+        * UIProcess/API/APIUserContentExtensionStore.cpp:
+        (API::UserContentExtensionStore::synchronousRemoveAllContentExtensions):
+        (API::UserContentExtensionStore::invalidateContentExtensionVersion):
+        Added for testing.
+        (API::userContentExtensionStoreErrorCategory):
+        * UIProcess/API/APIUserContentExtensionStore.h:
+        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.h:
+        Added the new enum, _WKUserContentExtensionStoreErrorCode.
+        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm:
+        (-[_WKUserContentExtensionStore compileContentExtensionForIdentifier:encodedContentExtension:completionHandler:]):
+        Sometimes the error code returned by UserContentExtensionStore::compileContentExtension has the error code from compileRuleList.
+        When this happens, we want to get the message from the internal compiler error, but we want the NSError's code to always be CompileFailed.
+        (-[_WKUserContentExtensionStore lookupContentExtensionForIdentifier:completionHandler:]):
+        (-[_WKUserContentExtensionStore removeContentExtensionForIdentifier:completionHandler:]):
+        (-[_WKUserContentExtensionStore _removeAllContentExtensions]):
+        (-[_WKUserContentExtensionStore _invalidateContentExtensionVersionForIdentifier:]):
+        * UIProcess/API/Cocoa/_WKUserContentExtensionStorePrivate.h:
+        Added new invalidator for testing.
+
 2016-05-27  Zalan Bujtas  <[email protected]>
 
         Regression(r200972): Webcore::Range::collectSelectionsRects() asserts in startContainer() while selecting text.

Modified: trunk/Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp (201456 => 201457)


--- trunk/Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp	2016-05-27 18:36:30 UTC (rev 201456)
+++ trunk/Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp	2016-05-27 18:50:24 UTC (rev 201457)
@@ -391,6 +391,17 @@
         WebCore::deleteFile(path);
 }
 
+void UserContentExtensionStore::invalidateContentExtensionVersion(const WTF::String& identifier)
+{
+    auto file = WebCore::openFile(constructedPath(m_storePath, identifier), WebCore::OpenForWrite);
+    if (file == WebCore::invalidPlatformFileHandle)
+        return;
+    ContentExtensionMetaData invalidHeader = {0, 0, 0, 0, 0};
+    auto bytesWritten = WebCore::writeToFile(file, reinterpret_cast<const char*>(&invalidHeader), sizeof(invalidHeader));
+    ASSERT_UNUSED(bytesWritten, bytesWritten == sizeof(invalidHeader));
+    WebCore::closeFile(file);
+}
+    
 const std::error_category& userContentExtensionStoreErrorCategory()
 {
     class UserContentExtensionStoreErrorCategory : public std::error_category {

Modified: trunk/Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.h (201456 => 201457)


--- trunk/Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.h	2016-05-27 18:36:30 UTC (rev 201456)
+++ trunk/Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.h	2016-05-27 18:50:24 UTC (rev 201457)
@@ -66,6 +66,7 @@
 
     // For testing only.
     void synchronousRemoveAllContentExtensions();
+    void invalidateContentExtensionVersion(const WTF::String& identifier);
 
 private:
     WTF::String defaultStorePath();

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKUserContentExtensionStore.h (201456 => 201457)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKUserContentExtensionStore.h	2016-05-27 18:36:30 UTC (rev 201456)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKUserContentExtensionStore.h	2016-05-27 18:50:24 UTC (rev 201457)
@@ -41,4 +41,13 @@
 
 @end
 
+WK_EXTERN NSString * const _WKUserContentExtensionsDomain WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
+
+typedef NS_ENUM(NSInteger, _WKUserContentExtensionStoreErrorCode) {
+    _WKUserContentExtensionStoreErrorLookupFailed = 1,
+    _WKUserContentExtensionStoreErrorVersionMismatch,
+    _WKUserContentExtensionStoreErrorCompileFailed,
+    _WKUserContentExtensionStoreErrorRemoveFailed,
+} WK_ENUM_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
+
 #endif // WK_API_ENABLED

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm (201456 => 201457)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm	2016-05-27 18:36:30 UTC (rev 201456)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm	2016-05-27 18:50:24 UTC (rev 201457)
@@ -32,6 +32,8 @@
 #import "_WKUserContentFilterInternal.h"
 #import <string>
 
+NSString * const _WKUserContentExtensionsDomain = @"_WKUserContentExtensionsDomain";
+
 @implementation _WKUserContentExtensionStore
 
 - (void)dealloc
@@ -65,7 +67,10 @@
             auto rawHandler = (void (^)(_WKUserContentFilter *, NSError *))handler.get();
             
             auto userInfo = @{NSHelpAnchorErrorKey: [NSString stringWithFormat:@"Extension compilation failed: %s", error.message().c_str()]};
-            rawHandler(nil, [NSError errorWithDomain:@"ContentExtensionsDomain" code:error.value() userInfo:userInfo]);
+
+            // error.value() could have a specific compiler error that is not equal to _WKUserContentExtensionStoreErrorCompileFailed.
+            // We want to use error.message, but here we want to only pass on CompileFailed.
+            rawHandler(nil, [NSError errorWithDomain:_WKUserContentExtensionsDomain code:_WKUserContentExtensionStoreErrorCompileFailed userInfo:userInfo]);
             return;
         }
 
@@ -83,7 +88,8 @@
             auto rawHandler = (void (^)(_WKUserContentFilter *, NSError *))handler.get();
 
             auto userInfo = @{NSHelpAnchorErrorKey: [NSString stringWithFormat:@"Extension lookup failed: %s", error.message().c_str()]};
-            rawHandler(nil, [NSError errorWithDomain:@"ContentExtensionsDomain" code:error.value() userInfo:userInfo]);
+            ASSERT(error.value() == _WKUserContentExtensionStoreErrorLookupFailed || error.value() == _WKUserContentExtensionStoreErrorVersionMismatch);
+            rawHandler(nil, [NSError errorWithDomain:_WKUserContentExtensionsDomain code:error.value() userInfo:userInfo]);
             return;
         }
 
@@ -101,7 +107,8 @@
             auto rawHandler = (void (^)(NSError *))handler.get();
 
             auto userInfo = @{NSHelpAnchorErrorKey: [NSString stringWithFormat:@"Extension removal failed: %s", error.message().c_str()]};
-            rawHandler([NSError errorWithDomain:@"ContentExtensionsDomain" code:error.value() userInfo:userInfo]);
+            ASSERT(error.value() == _WKUserContentExtensionStoreErrorRemoveFailed);
+            rawHandler([NSError errorWithDomain:_WKUserContentExtensionsDomain code:_WKUserContentExtensionStoreErrorRemoveFailed userInfo:userInfo]);
             return;
         }
 
@@ -128,6 +135,11 @@
     _userContentExtensionStore->synchronousRemoveAllContentExtensions();
 }
 
+- (void)_invalidateContentExtensionVersionForIdentifier:(NSString *)identifier
+{
+    _userContentExtensionStore->invalidateContentExtensionVersion(identifier);
+}
+
 @end
 
 #endif // WK_API_ENABLED

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKUserContentExtensionStorePrivate.h (201456 => 201457)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKUserContentExtensionStorePrivate.h	2016-05-27 18:36:30 UTC (rev 201456)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKUserContentExtensionStorePrivate.h	2016-05-27 18:50:24 UTC (rev 201457)
@@ -31,6 +31,7 @@
 
 // For testing only.
 - (void)_removeAllContentExtensions;
+- (void)_invalidateContentExtensionVersionForIdentifier:(NSString *)identifier;
 
 @end
 

Modified: trunk/Tools/ChangeLog (201456 => 201457)


--- trunk/Tools/ChangeLog	2016-05-27 18:36:30 UTC (rev 201456)
+++ trunk/Tools/ChangeLog	2016-05-27 18:50:24 UTC (rev 201457)
@@ -1,3 +1,16 @@
+2016-05-26  Alex Christensen  <[email protected]>
+
+        Expose content extension failure error codes in SPI
+        https://bugs.webkit.org/show_bug.cgi?id=158095
+        rdar://problem/26475651
+
+        Reviewed by Anders Carlsson.
+
+        * TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:
+        (checkDomain):
+        (TEST_F):
+        Add tests that use the new enum.
+
 2016-05-27  Carlos Garcia Campos  <[email protected]>
 
         New intl-numberformat.js test fails on many Linux platforms

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm (201456 => 201457)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm	2016-05-27 18:36:30 UTC (rev 201456)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm	2016-05-27 18:50:24 UTC (rev 201457)
@@ -58,6 +58,11 @@
 
 static NSString *invalidFilter = @"[";
 
+static void checkDomain(NSError *error)
+{
+    EXPECT_STREQ([[error domain] UTF8String], [_WKUserContentExtensionsDomain UTF8String]);
+}
+
 TEST_F(_WKUserContentExtensionStoreTest, InvalidExtension)
 {
     __block bool doneCompiling = false;
@@ -65,6 +70,8 @@
     
         EXPECT_NULL(filter);
         EXPECT_NOT_NULL(error);
+        checkDomain(error);
+        EXPECT_EQ(error.code, _WKUserContentExtensionStoreErrorCompileFailed);
         EXPECT_STREQ("Extension compilation failed: Failed to parse the JSON String.", [[error helpAnchor] UTF8String]);
 
         doneCompiling = true;
@@ -102,8 +109,40 @@
     
         EXPECT_NULL(filter);
         EXPECT_NOT_NULL(error);
+        checkDomain(error);
+        EXPECT_EQ(error.code, _WKUserContentExtensionStoreErrorLookupFailed);
         EXPECT_STREQ("Extension lookup failed: Unspecified error during lookup.", [[error helpAnchor] UTF8String]);
+        
+        doneLookingUp = true;
+    }];
+    TestWebKitAPI::Util::run(&doneLookingUp);
+}
 
+TEST_F(_WKUserContentExtensionStoreTest, VersionMismatch)
+{
+    __block bool doneCompiling = false;
+    [[_WKUserContentExtensionStore defaultStore] compileContentExtensionForIdentifier:@"TestExtension" encodedContentExtension:basicFilter completionHandler:^(_WKUserContentFilter *filter, NSError *error)
+    {
+        
+        EXPECT_NOT_NULL(filter);
+        EXPECT_NULL(error);
+        
+        doneCompiling = true;
+    }];
+    TestWebKitAPI::Util::run(&doneCompiling);
+
+    [[_WKUserContentExtensionStore defaultStore] _invalidateContentExtensionVersionForIdentifier:@"TestExtension"];
+    
+    __block bool doneLookingUp = false;
+    [[_WKUserContentExtensionStore defaultStore] lookupContentExtensionForIdentifier:@"TestExtension" completionHandler:^(_WKUserContentFilter *filter, NSError *error)
+    {
+        
+        EXPECT_NULL(filter);
+        EXPECT_NOT_NULL(error);
+        checkDomain(error);
+        EXPECT_EQ(error.code, _WKUserContentExtensionStoreErrorVersionMismatch);
+        EXPECT_STREQ("Extension lookup failed: Version of file does not match version of interpreter.", [[error helpAnchor] UTF8String]);
+        
         doneLookingUp = true;
     }];
     TestWebKitAPI::Util::run(&doneLookingUp);
@@ -135,6 +174,8 @@
     __block bool doneRemoving = false;
     [[_WKUserContentExtensionStore defaultStore] removeContentExtensionForIdentifier:@"DoesNotExist" completionHandler:^(NSError *error) {
         EXPECT_NOT_NULL(error);
+        checkDomain(error);
+        EXPECT_EQ(error.code, _WKUserContentExtensionStoreErrorRemoveFailed);
         EXPECT_STREQ("Extension removal failed: Unspecified error during remove.", [[error helpAnchor] UTF8String]);
 
         doneRemoving = true;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to