<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[214061] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/214061">214061</a></dd>
<dt>Author</dt> <dd>achristensen@apple.com</dd>
<dt>Date</dt> <dd>2017-03-16 12:06:43 -0700 (Thu, 16 Mar 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>Clean up WKContentExtension API
https://bugs.webkit.org/show_bug.cgi?id=169772

Reviewed by Geoffrey Garen.

Source/WebKit2:

Based on feedback I have decided to do the following:
1. Rename lookup to lookUp because look and up are two words.
2. Change the parameter of removeContentExtension to a WKContentExtension* to match addContentExtension.
3. Add an identifier property accessor to WKContentExtension.
4. Change the order of the new error types.  This wasn't exactly based on any feedback, but they look more organized now.

* UIProcess/API/Cocoa/WKContentExtension.h:
* UIProcess/API/Cocoa/WKContentExtension.mm:
(-[WKContentExtension identifier]):
* UIProcess/API/Cocoa/WKContentExtensionStore.h:
* UIProcess/API/Cocoa/WKContentExtensionStore.mm:
(toWKErrorCode):
(-[WKContentExtensionStore lookUpContentExtensionForIdentifier:completionHandler:]):
(-[WKContentExtensionStore lookupContentExtensionForIdentifier:completionHandler:]): Deleted.
* UIProcess/API/Cocoa/WKError.h:
* UIProcess/API/Cocoa/WKError.mm:
(localizedDescriptionForErrorCode):
* UIProcess/API/Cocoa/WKUserContentController.h:
* UIProcess/API/Cocoa/WKUserContentController.mm:
(-[WKUserContentController removeContentExtension:]):
* UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm:
(toUserContentExtensionStoreError):
(-[_WKUserContentExtensionStore lookupContentExtensionForIdentifier:completionHandler:]):

Tools:

* TestWebKitAPI/Tests/WebKit2Cocoa/WKUserContentExtensionStore.mm:
(TEST_F):
(-[ContentExtensionDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKContentExtensionh">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKContentExtension.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKContentExtensionmm">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKContentExtension.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKContentExtensionStoreh">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKContentExtensionStore.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKContentExtensionStoremm">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKContentExtensionStore.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKErrorh">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKError.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKErrormm">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKError.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKUserContentControllerh">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUserContentController.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKUserContentControllermm">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUserContentController.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoa_WKUserContentExtensionStoremm">trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebKit2CocoaWKUserContentExtensionStoremm">trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKUserContentExtensionStore.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (214060 => 214061)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2017-03-16 18:58:37 UTC (rev 214060)
+++ trunk/Source/WebKit2/ChangeLog        2017-03-16 19:06:43 UTC (rev 214061)
</span><span class="lines">@@ -1,3 +1,34 @@
</span><ins>+2017-03-16  Alex Christensen  &lt;achristensen@webkit.org&gt;
+
+        Clean up WKContentExtension API
+        https://bugs.webkit.org/show_bug.cgi?id=169772
+
+        Reviewed by Geoffrey Garen.
+
+        Based on feedback I have decided to do the following:
+        1. Rename lookup to lookUp because look and up are two words.
+        2. Change the parameter of removeContentExtension to a WKContentExtension* to match addContentExtension.
+        3. Add an identifier property accessor to WKContentExtension.
+        4. Change the order of the new error types.  This wasn't exactly based on any feedback, but they look more organized now.
+
+        * UIProcess/API/Cocoa/WKContentExtension.h:
+        * UIProcess/API/Cocoa/WKContentExtension.mm:
+        (-[WKContentExtension identifier]):
+        * UIProcess/API/Cocoa/WKContentExtensionStore.h:
+        * UIProcess/API/Cocoa/WKContentExtensionStore.mm:
+        (toWKErrorCode):
+        (-[WKContentExtensionStore lookUpContentExtensionForIdentifier:completionHandler:]):
+        (-[WKContentExtensionStore lookupContentExtensionForIdentifier:completionHandler:]): Deleted.
+        * UIProcess/API/Cocoa/WKError.h:
+        * UIProcess/API/Cocoa/WKError.mm:
+        (localizedDescriptionForErrorCode):
+        * UIProcess/API/Cocoa/WKUserContentController.h:
+        * UIProcess/API/Cocoa/WKUserContentController.mm:
+        (-[WKUserContentController removeContentExtension:]):
+        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm:
+        (toUserContentExtensionStoreError):
+        (-[_WKUserContentExtensionStore lookupContentExtensionForIdentifier:completionHandler:]):
+
</ins><span class="cx"> 2017-03-16  Tomas Popela  &lt;tpopela@redhat.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Fix uninitialized public members in Webkit2/UIProcess/API/gtk
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKContentExtensionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKContentExtension.h (214060 => 214061)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKContentExtension.h        2017-03-16 18:58:37 UTC (rev 214060)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKContentExtension.h        2017-03-16 19:06:43 UTC (rev 214061)
</span><span class="lines">@@ -30,6 +30,9 @@
</span><span class="cx"> WK_CLASS_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA))
</span><span class="cx"> @interface WKContentExtension : NSObject
</span><span class="cx"> 
</span><ins>+/*! @abstract A copy of the identifier of the content extension. */
+@property (nonatomic, readonly, copy) NSString *identifier;
+
</ins><span class="cx"> @end
</span><span class="cx"> 
</span><span class="cx"> #endif // WK_API_ENABLED
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKContentExtensionmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKContentExtension.mm (214060 => 214061)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKContentExtension.mm        2017-03-16 18:58:37 UTC (rev 214060)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKContentExtension.mm        2017-03-16 19:06:43 UTC (rev 214061)
</span><span class="lines">@@ -46,6 +46,11 @@
</span><span class="cx">     return *_contentExtension;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+- (NSString *)identifier
+{
+    return _contentExtension-&gt;name();
+}
+
</ins><span class="cx"> @end
</span><span class="cx"> 
</span><span class="cx"> #endif // WK_API_ENABLED
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKContentExtensionStoreh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKContentExtensionStore.h (214060 => 214061)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKContentExtensionStore.h        2017-03-16 18:58:37 UTC (rev 214060)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKContentExtensionStore.h        2017-03-16 19:06:43 UTC (rev 214061)
</span><span class="lines">@@ -36,7 +36,7 @@
</span><span class="cx"> + (instancetype)storeWithURL:(NSURL *)url;
</span><span class="cx"> 
</span><span class="cx"> - (void)compileContentExtensionForIdentifier:(NSString *)identifier encodedContentExtension:(NSString *) encodedContentExtension completionHandler:(void (^)(WKContentExtension *, NSError *))completionHandler;
</span><del>-- (void)lookupContentExtensionForIdentifier:(NSString *)identifier completionHandler:(void (^)(WKContentExtension *, NSError *))completionHandler;
</del><ins>+- (void)lookUpContentExtensionForIdentifier:(NSString *)identifier completionHandler:(void (^)(WKContentExtension *, NSError *))completionHandler;
</ins><span class="cx"> - (void)removeContentExtensionForIdentifier:(NSString *)identifier completionHandler:(void (^)(NSError *))completionHandler;
</span><span class="cx"> 
</span><span class="cx"> @end
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKContentExtensionStoremm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKContentExtensionStore.mm (214060 => 214061)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKContentExtensionStore.mm        2017-03-16 18:58:37 UTC (rev 214060)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKContentExtensionStore.mm        2017-03-16 19:06:43 UTC (rev 214061)
</span><span class="lines">@@ -37,7 +37,7 @@
</span><span class="cx">     ASSERT(error.category() == API::contentExtensionStoreErrorCategory());
</span><span class="cx">     switch (static_cast&lt;API::ContentExtensionStore::Error&gt;(error.value())) {
</span><span class="cx">     case API::ContentExtensionStore::Error::LookupFailed:
</span><del>-        return WKErrorContentExtensionStoreLookupFailed;
</del><ins>+        return WKErrorContentExtensionStoreLookUpFailed;
</ins><span class="cx">     case API::ContentExtensionStore::Error::VersionMismatch:
</span><span class="cx">         return WKErrorContentExtensionStoreVersionMismatch;
</span><span class="cx">     case API::ContentExtensionStore::Error::CompileFailed:
</span><span class="lines">@@ -101,7 +101,7 @@
</span><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-- (void)lookupContentExtensionForIdentifier:(NSString *)identifier completionHandler:(void (^)(WKContentExtension *, NSError *))completionHandler
</del><ins>+- (void)lookUpContentExtensionForIdentifier:(NSString *)identifier completionHandler:(void (^)(WKContentExtension *, NSError *))completionHandler
</ins><span class="cx"> {
</span><span class="cx">     auto handler = adoptNS([completionHandler copy]);
</span><span class="cx"> 
</span><span class="lines">@@ -111,7 +111,7 @@
</span><span class="cx"> 
</span><span class="cx">             auto userInfo = @{NSHelpAnchorErrorKey: [NSString stringWithFormat:@&quot;Extension lookup failed: %s&quot;, error.message().c_str()]};
</span><span class="cx">             auto wkError = toWKErrorCode(error);
</span><del>-            ASSERT(wkError == WKErrorContentExtensionStoreLookupFailed || wkError == WKErrorContentExtensionStoreVersionMismatch);
</del><ins>+            ASSERT(wkError == WKErrorContentExtensionStoreLookUpFailed || wkError == WKErrorContentExtensionStoreVersionMismatch);
</ins><span class="cx">             rawHandler(nil, [NSError errorWithDomain:WKErrorDomain code:wkError userInfo:userInfo]);
</span><span class="cx">             return;
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKErrorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKError.h (214060 => 214061)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKError.h        2017-03-16 18:58:37 UTC (rev 214060)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKError.h        2017-03-16 19:06:43 UTC (rev 214061)
</span><span class="lines">@@ -41,10 +41,10 @@
</span><span class="cx">  @constant WKErrorWebViewInvalidated                   Indicates that the WKWebView was invalidated.
</span><span class="cx">  @constant WKErrorJavaScriptExceptionOccurred          Indicates that a JavaScript exception occurred.
</span><span class="cx">  @constant WKErrorJavaScriptResultTypeIsUnsupported    Indicates that the result of JavaScript execution could not be returned.
</span><del>- @constant WKErrorContentExtensionStoreLookupFailed    Indicates that looking up a WKUserContentExtension failed.
- @constant WKErrorContentExtensionStoreVersionMismatch Indicates that the WKUserContentExtension version did not match the latest.
</del><span class="cx">  @constant WKErrorContentExtensionStoreCompileFailed   Indicates that compiling a WKUserContentExtension failed.
</span><ins>+ @constant WKErrorContentExtensionStoreLookUpFailed    Indicates that looking up a WKUserContentExtension failed.
</ins><span class="cx">  @constant WKErrorContentExtensionStoreRemoveFailed    Indicates that removing a WKUserContentExtension failed.
</span><ins>+ @constant WKErrorContentExtensionStoreVersionMismatch Indicates that the WKUserContentExtension version did not match the latest.
</ins><span class="cx">  */
</span><span class="cx"> typedef NS_ENUM(NSInteger, WKErrorCode) {
</span><span class="cx">     WKErrorUnknown = 1,
</span><span class="lines">@@ -52,10 +52,10 @@
</span><span class="cx">     WKErrorWebViewInvalidated,
</span><span class="cx">     WKErrorJavaScriptExceptionOccurred,
</span><span class="cx">     WKErrorJavaScriptResultTypeIsUnsupported WK_API_AVAILABLE(macosx(10.11), ios(9.0)),
</span><del>-    WKErrorContentExtensionStoreLookupFailed WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)),
-    WKErrorContentExtensionStoreVersionMismatch WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)),
</del><span class="cx">     WKErrorContentExtensionStoreCompileFailed WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)),
</span><ins>+    WKErrorContentExtensionStoreLookUpFailed WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)),
</ins><span class="cx">     WKErrorContentExtensionStoreRemoveFailed WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)),
</span><ins>+    WKErrorContentExtensionStoreVersionMismatch WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)),
</ins><span class="cx"> } WK_API_AVAILABLE(macosx(10.10), ios(8.0));
</span><span class="cx"> 
</span><span class="cx"> NS_ASSUME_NONNULL_END
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKErrormm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKError.mm (214060 => 214061)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKError.mm        2017-03-16 18:58:37 UTC (rev 214060)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKError.mm        2017-03-16 19:06:43 UTC (rev 214061)
</span><span class="lines">@@ -58,7 +58,7 @@
</span><span class="cx">     case WKErrorJavaScriptResultTypeIsUnsupported:
</span><span class="cx">         return WEB_UI_STRING(&quot;JavaScript execution returned a result of an unsupported type&quot;, &quot;WKErrorJavaScriptResultTypeIsUnsupported description&quot;);
</span><span class="cx"> 
</span><del>-    case WKErrorContentExtensionStoreLookupFailed:
</del><ins>+    case WKErrorContentExtensionStoreLookUpFailed:
</ins><span class="cx">         return WEB_UI_STRING(&quot;Looking up a WKUserContentExtension failed&quot;, &quot;WKErrorContentExtensionStoreLookupFailed description&quot;);
</span><span class="cx"> 
</span><span class="cx">     case WKErrorContentExtensionStoreVersionMismatch:
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKUserContentControllerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUserContentController.h (214060 => 214061)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUserContentController.h        2017-03-16 18:58:37 UTC (rev 214060)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUserContentController.h        2017-03-16 19:06:43 UTC (rev 214061)
</span><span class="lines">@@ -79,7 +79,7 @@
</span><span class="cx"> /*! @abstract Removes a user content extension.
</span><span class="cx">  @param name The identifier of the user content extension to remove.
</span><span class="cx">  */
</span><del>-- (void)removeContentExtension:(NSString *)identifier WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
</del><ins>+- (void)removeContentExtension:(WKContentExtension *)contentExtension WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
</ins><span class="cx"> 
</span><span class="cx"> /*! @abstract Removes all associated user content extensions.
</span><span class="cx">  */
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKUserContentControllermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUserContentController.mm (214060 => 214061)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUserContentController.mm        2017-03-16 18:58:37 UTC (rev 214060)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUserContentController.mm        2017-03-16 19:06:43 UTC (rev 214061)
</span><span class="lines">@@ -99,10 +99,10 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-- (void)removeContentExtension:(NSString *)identifier
</del><ins>+- (void)removeContentExtension:(WKContentExtension *)contentExtension
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(CONTENT_EXTENSIONS)
</span><del>-    _userContentControllerProxy-&gt;removeContentExtension(identifier);
</del><ins>+    _userContentControllerProxy-&gt;removeContentExtension(contentExtension-&gt;_contentExtension-&gt;name());
</ins><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoa_WKUserContentExtensionStoremm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm (214060 => 214061)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm        2017-03-16 18:58:37 UTC (rev 214060)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm        2017-03-16 19:06:43 UTC (rev 214061)
</span><span class="lines">@@ -45,7 +45,7 @@
</span><span class="cx"> 
</span><span class="cx">     ASSERT(error.domain == WKErrorDomain);
</span><span class="cx">     switch (error.code) {
</span><del>-    case WKErrorContentExtensionStoreLookupFailed:
</del><ins>+    case WKErrorContentExtensionStoreLookUpFailed:
</ins><span class="cx">         return [NSError errorWithDomain:_WKUserContentExtensionsDomain code:_WKUserContentExtensionStoreErrorLookupFailed userInfo:error.userInfo];
</span><span class="cx">     case WKErrorContentExtensionStoreVersionMismatch:
</span><span class="cx">         return [NSError errorWithDomain:_WKUserContentExtensionsDomain code:_WKUserContentExtensionStoreErrorVersionMismatch userInfo:error.userInfo];
</span><span class="lines">@@ -80,7 +80,7 @@
</span><span class="cx"> 
</span><span class="cx"> - (void)lookupContentExtensionForIdentifier:(NSString *)identifier completionHandler:(void (^)(_WKUserContentFilter *, NSError *))completionHandler
</span><span class="cx"> {
</span><del>-    [_contentExtensionStore lookupContentExtensionForIdentifier:identifier completionHandler:^(WKContentExtension *contentExtension, NSError *error) {
</del><ins>+    [_contentExtensionStore lookUpContentExtensionForIdentifier:identifier completionHandler:^(WKContentExtension *contentExtension, NSError *error) {
</ins><span class="cx">         _WKUserContentFilter *contentFilter = contentExtension ? [[[_WKUserContentFilter alloc] _initWithWKContentExtension:contentExtension] autorelease] : nil;
</span><span class="cx">         completionHandler(contentFilter, toUserContentExtensionStoreError(error));
</span><span class="cx">     }];
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (214060 => 214061)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2017-03-16 18:58:37 UTC (rev 214060)
+++ trunk/Tools/ChangeLog        2017-03-16 19:06:43 UTC (rev 214061)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2017-03-16  Alex Christensen  &lt;achristensen@webkit.org&gt;
+
+        Clean up WKContentExtension API
+        https://bugs.webkit.org/show_bug.cgi?id=169772
+
+        Reviewed by Geoffrey Garen.
+
+        * TestWebKitAPI/Tests/WebKit2Cocoa/WKUserContentExtensionStore.mm:
+        (TEST_F):
+        (-[ContentExtensionDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
+
</ins><span class="cx"> 2017-03-16  Jonathan Bedard  &lt;jbedard@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         webktpy: Fix device regular expression for parsing simctl output
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebKit2CocoaWKUserContentExtensionStoremm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKUserContentExtensionStore.mm (214060 => 214061)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKUserContentExtensionStore.mm        2017-03-16 18:58:37 UTC (rev 214060)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKUserContentExtensionStore.mm        2017-03-16 19:06:43 UTC (rev 214061)
</span><span class="lines">@@ -30,6 +30,7 @@
</span><span class="cx"> 
</span><span class="cx"> #import &quot;PlatformUtilities.h&quot;
</span><span class="cx"> #import &quot;Test.h&quot;
</span><ins>+#import &lt;WebKit/WKContentExtension.h&gt;
</ins><span class="cx"> #import &lt;WebKit/WKContentExtensionStorePrivate.h&gt;
</span><span class="cx"> #import &lt;wtf/RetainPtr.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -92,8 +93,9 @@
</span><span class="cx">     TestWebKitAPI::Util::run(&amp;doneCompiling);
</span><span class="cx"> 
</span><span class="cx">     __block bool doneLookingUp = false;
</span><del>-    [[WKContentExtensionStore defaultStore] lookupContentExtensionForIdentifier:@&quot;TestExtension&quot; completionHandler:^(WKContentExtension *filter, NSError *error) {
-    
</del><ins>+    [[WKContentExtensionStore defaultStore] lookUpContentExtensionForIdentifier:@&quot;TestExtension&quot; completionHandler:^(WKContentExtension *filter, NSError *error) {
+
+        EXPECT_STREQ(filter.identifier.UTF8String, &quot;TestExtension&quot;);
</ins><span class="cx">         EXPECT_NOT_NULL(filter);
</span><span class="cx">         EXPECT_NULL(error);
</span><span class="cx"> 
</span><span class="lines">@@ -105,12 +107,12 @@
</span><span class="cx"> TEST_F(WKContentExtensionStoreTest, NonExistingIdentifierLookup)
</span><span class="cx"> {
</span><span class="cx">     __block bool doneLookingUp = false;
</span><del>-    [[WKContentExtensionStore defaultStore] lookupContentExtensionForIdentifier:@&quot;DoesNotExist&quot; completionHandler:^(WKContentExtension *filter, NSError *error) {
</del><ins>+    [[WKContentExtensionStore defaultStore] lookUpContentExtensionForIdentifier:@&quot;DoesNotExist&quot; completionHandler:^(WKContentExtension *filter, NSError *error) {
</ins><span class="cx">     
</span><span class="cx">         EXPECT_NULL(filter);
</span><span class="cx">         EXPECT_NOT_NULL(error);
</span><span class="cx">         checkDomain(error);
</span><del>-        EXPECT_EQ(error.code, WKErrorContentExtensionStoreLookupFailed);
</del><ins>+        EXPECT_EQ(error.code, WKErrorContentExtensionStoreLookUpFailed);
</ins><span class="cx">         EXPECT_STREQ(&quot;Extension lookup failed: Unspecified error during lookup.&quot;, [[error helpAnchor] UTF8String]);
</span><span class="cx">         
</span><span class="cx">         doneLookingUp = true;
</span><span class="lines">@@ -134,7 +136,7 @@
</span><span class="cx">     [[WKContentExtensionStore defaultStore] _invalidateContentExtensionVersionForIdentifier:@&quot;TestExtension&quot;];
</span><span class="cx">     
</span><span class="cx">     __block bool doneLookingUp = false;
</span><del>-    [[WKContentExtensionStore defaultStore] lookupContentExtensionForIdentifier:@&quot;TestExtension&quot; completionHandler:^(WKContentExtension *filter, NSError *error)
</del><ins>+    [[WKContentExtensionStore defaultStore] lookUpContentExtensionForIdentifier:@&quot;TestExtension&quot; completionHandler:^(WKContentExtension *filter, NSError *error)
</ins><span class="cx">     {
</span><span class="cx">         
</span><span class="cx">         EXPECT_NULL(filter);
</span><span class="lines">@@ -255,4 +257,81 @@
</span><span class="cx">     TestWebKitAPI::Util::run(&amp;done);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static size_t alertCount { 0 };
+static bool receivedAlert { false };
+
+@interface ContentExtensionDelegate : NSObject &lt;WKUIDelegate&gt;
+@end
+
+@implementation ContentExtensionDelegate
+
+- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler
+{
+    switch (alertCount++) {
+    case 0:
+        // FIXME: The first content blocker should be enabled here.
+        // ContentExtensionsBackend::addContentExtension isn't being called in the WebProcess
+        // until after the first main resource starts loading, so we need to send a message to the
+        // WebProcess before loading if we have installed content blockers.
+        // See rdar://problem/27788755
+        EXPECT_STREQ(&quot;content blockers disabled&quot;, message.UTF8String);
+        break;
+    case 1:
+        // Default behavior.
+        EXPECT_STREQ(&quot;content blockers enabled&quot;, message.UTF8String);
+        break;
+    case 2:
+        // After having removed the content extension.
+        EXPECT_STREQ(&quot;content blockers disabled&quot;, message.UTF8String);
+        break;
+    default:
+        EXPECT_TRUE(false);
+    }
+    receivedAlert = true;
+    completionHandler();
+}
+
+@end
+
+TEST_F(WKContentExtensionStoreTest, AddRemove)
+{
+    [[WKContentExtensionStore defaultStore] _removeAllContentExtensions];
+
+    __block bool doneCompiling = false;
+    NSString* contentBlocker = @&quot;[{\&quot;action\&quot;:{\&quot;type\&quot;:\&quot;css-display-none\&quot;,\&quot;selector\&quot;:\&quot;.hidden\&quot;},\&quot;trigger\&quot;:{\&quot;url-filter\&quot;:\&quot;.*\&quot;}}]&quot;;
+    __block RetainPtr&lt;WKContentExtension&gt; extension;
+    [[WKContentExtensionStore defaultStore] compileContentExtensionForIdentifier:@&quot;TestAddRemove&quot; encodedContentExtension:contentBlocker completionHandler:^(WKContentExtension *compiledExtension, NSError *error) {
+        EXPECT_TRUE(error == nil);
+        extension = compiledExtension;
+        doneCompiling = true;
+    }];
+    TestWebKitAPI::Util::run(&amp;doneCompiling);
+    EXPECT_NOT_NULL(extension);
+
+    auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+    [[configuration userContentController] addContentExtension:extension.get()];
+
+    auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
+
+    auto delegate = adoptNS([[ContentExtensionDelegate alloc] init]);
+    [webView setUIDelegate:delegate.get()];
+
+    NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@&quot;contentBlockerCheck&quot; withExtension:@&quot;html&quot; subdirectory:@&quot;TestWebKitAPI.resources&quot;]];
+    alertCount = 0;
+    receivedAlert = false;
+    [webView loadRequest:request];
+    TestWebKitAPI::Util::run(&amp;receivedAlert);
+
+    receivedAlert = false;
+    [webView reload];
+    TestWebKitAPI::Util::run(&amp;receivedAlert);
+
+    [[configuration userContentController] removeContentExtension:extension.get()];
+
+    receivedAlert = false;
+    [webView reload];
+    TestWebKitAPI::Util::run(&amp;receivedAlert);
+}
+
+
</ins><span class="cx"> #endif
</span></span></pre>
</div>
</div>

</body>
</html>