<!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>[182445] trunk/Tools</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/182445">182445</a></dd>
<dt>Author</dt> <dd>achristensen@apple.com</dd>
<dt>Date</dt> <dd>2015-04-06 16:15:49 -0700 (Mon, 06 Apr 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Use content extensions in MiniBrowser.
https://bugs.webkit.org/show_bug.cgi?id=143446

Patch by Sam Weinig &lt;sam@webkit.org&gt; on 2015-04-06
Reviewed by Alex Christensen.

* MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
* MiniBrowser/mac/AppDelegate.h:
* MiniBrowser/mac/AppDelegate.m:
(-[BrowserAppDelegate init]):
(-[BrowserAppDelegate showExtensionsManager:]):
(-[BrowserAppDelegate userContentContoller]):
* MiniBrowser/mac/ExtensionManagerWindowController.h: Added.
* MiniBrowser/mac/ExtensionManagerWindowController.m: Added.
(-[ExtensionManagerWindowController init]):
(-[ExtensionManagerWindowController windowDidLoad]):
(-[ExtensionManagerWindowController add:]):
(-[ExtensionManagerWindowController remove:]):
* MiniBrowser/mac/ExtensionManagerWindowController.xib: Added.
* MiniBrowser/mac/MainMenu.xib:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsMiniBrowserMiniBrowserxcodeprojprojectpbxproj">trunk/Tools/MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkToolsMiniBrowsermacAppDelegateh">trunk/Tools/MiniBrowser/mac/AppDelegate.h</a></li>
<li><a href="#trunkToolsMiniBrowsermacAppDelegatem">trunk/Tools/MiniBrowser/mac/AppDelegate.m</a></li>
<li><a href="#trunkToolsMiniBrowsermacMainMenuxib">trunk/Tools/MiniBrowser/mac/MainMenu.xib</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkToolsMiniBrowsermacExtensionManagerWindowControllerh">trunk/Tools/MiniBrowser/mac/ExtensionManagerWindowController.h</a></li>
<li><a href="#trunkToolsMiniBrowsermacExtensionManagerWindowControllerm">trunk/Tools/MiniBrowser/mac/ExtensionManagerWindowController.m</a></li>
<li><a href="#trunkToolsMiniBrowsermacExtensionManagerWindowControllerxib">trunk/Tools/MiniBrowser/mac/ExtensionManagerWindowController.xib</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (182444 => 182445)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2015-04-06 22:48:00 UTC (rev 182444)
+++ trunk/Tools/ChangeLog        2015-04-06 23:15:49 UTC (rev 182445)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2015-04-06  Sam Weinig  &lt;sam@webkit.org&gt;
+
+        Use content extensions in MiniBrowser.
+        https://bugs.webkit.org/show_bug.cgi?id=143446
+
+        Reviewed by Alex Christensen.
+
+        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
+        * MiniBrowser/mac/AppDelegate.h:
+        * MiniBrowser/mac/AppDelegate.m:
+        (-[BrowserAppDelegate init]):
+        (-[BrowserAppDelegate showExtensionsManager:]):
+        (-[BrowserAppDelegate userContentContoller]):
+        * MiniBrowser/mac/ExtensionManagerWindowController.h: Added.
+        * MiniBrowser/mac/ExtensionManagerWindowController.m: Added.
+        (-[ExtensionManagerWindowController init]):
+        (-[ExtensionManagerWindowController windowDidLoad]):
+        (-[ExtensionManagerWindowController add:]):
+        (-[ExtensionManagerWindowController remove:]):
+        * MiniBrowser/mac/ExtensionManagerWindowController.xib: Added.
+        * MiniBrowser/mac/MainMenu.xib:
+
</ins><span class="cx"> 2015-04-06  Michael Catanzaro  &lt;mcatanzaro@gnome.org&gt;
</span><span class="cx"> 
</span><span class="cx">         [GTK] install-dependencies should prefer dnf to yum
</span></span></pre></div>
<a id="trunkToolsMiniBrowserMiniBrowserxcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Tools/MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj (182444 => 182445)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj        2015-04-06 22:48:00 UTC (rev 182444)
+++ trunk/Tools/MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj        2015-04-06 23:15:49 UTC (rev 182445)
</span><span class="lines">@@ -16,6 +16,8 @@
</span><span class="cx">                 256AC3DA0F4B6AC300CF3369 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 256AC3D90F4B6AC300CF3369 /* AppDelegate.m */; };
</span><span class="cx">                 2DC37343198B62D300EC33E9 /* SettingsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DC37342198B62D300EC33E9 /* SettingsController.m */; };
</span><span class="cx">                 51E244FA11EFCE07008228D1 /* MBToolbarItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 51E244F911EFCE07008228D1 /* MBToolbarItem.m */; };
</span><ins>+                7CA379421AC381C10079DC37 /* ExtensionManagerWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CA379401AC381C10079DC37 /* ExtensionManagerWindowController.m */; };
+                7CA379431AC381C10079DC37 /* ExtensionManagerWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7CA379411AC381C10079DC37 /* ExtensionManagerWindowController.xib */; };
</ins><span class="cx">                 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
</span><span class="cx">                 BC329487116A92E2008635D0 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = BC329486116A92E2008635D0 /* main.m */; };
</span><span class="cx">                 BC329498116A941B008635D0 /* WK2BrowserWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC329497116A941B008635D0 /* WK2BrowserWindowController.m */; };
</span><span class="lines">@@ -73,6 +75,9 @@
</span><span class="cx">                 2DC37342198B62D300EC33E9 /* SettingsController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SettingsController.m; path = mac/SettingsController.m; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 51E244F811EFCE07008228D1 /* MBToolbarItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MBToolbarItem.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 51E244F911EFCE07008228D1 /* MBToolbarItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MBToolbarItem.m; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                7CA3793F1AC381C10079DC37 /* ExtensionManagerWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExtensionManagerWindowController.h; path = mac/ExtensionManagerWindowController.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                7CA379401AC381C10079DC37 /* ExtensionManagerWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ExtensionManagerWindowController.m; path = mac/ExtensionManagerWindowController.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+                7CA379411AC381C10079DC37 /* ExtensionManagerWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = ExtensionManagerWindowController.xib; path = mac/ExtensionManagerWindowController.xib; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 8D1107320486CEB800E47090 /* MiniBrowser.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MiniBrowser.app; sourceTree = BUILT_PRODUCTS_DIR; };
</span><span class="cx">                 BC329486116A92E2008635D0 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = mac/main.m; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 BC329496116A941B008635D0 /* WK2BrowserWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WK2BrowserWindowController.h; path = mac/WK2BrowserWindowController.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -114,16 +119,18 @@
</span><span class="cx">                                 256AC3D90F4B6AC300CF3369 /* AppDelegate.m */,
</span><span class="cx">                                 0FE6439F161FA8940059E3FF /* BrowserWindowController.h */,
</span><span class="cx">                                 0FE643A0161FA8940059E3FF /* BrowserWindowController.m */,
</span><ins>+                                7CA3793F1AC381C10079DC37 /* ExtensionManagerWindowController.h */,
+                                7CA379401AC381C10079DC37 /* ExtensionManagerWindowController.m */,
</ins><span class="cx">                                 BC72B89A11E57E8A001EB4EA /* Info.plist */,
</span><span class="cx">                                 BC329486116A92E2008635D0 /* main.m */,
</span><span class="cx">                                 51E244F811EFCE07008228D1 /* MBToolbarItem.h */,
</span><span class="cx">                                 51E244F911EFCE07008228D1 /* MBToolbarItem.m */,
</span><ins>+                                2DC37341198B62D300EC33E9 /* SettingsController.h */,
+                                2DC37342198B62D300EC33E9 /* SettingsController.m */,
</ins><span class="cx">                                 0FE643A2161FAC660059E3FF /* WK1BrowserWindowController.h */,
</span><span class="cx">                                 0FE643A3161FAC660059E3FF /* WK1BrowserWindowController.m */,
</span><span class="cx">                                 BC329496116A941B008635D0 /* WK2BrowserWindowController.h */,
</span><span class="cx">                                 BC329497116A941B008635D0 /* WK2BrowserWindowController.m */,
</span><del>-                                2DC37341198B62D300EC33E9 /* SettingsController.h */,
-                                2DC37342198B62D300EC33E9 /* SettingsController.m */,
</del><span class="cx">                         );
</span><span class="cx">                         name = MiniBrowser;
</span><span class="cx">                         sourceTree = &quot;&lt;group&gt;&quot;;
</span><span class="lines">@@ -187,6 +194,7 @@
</span><span class="cx">                         children = (
</span><span class="cx">                                 BC3294A2116A9852008635D0 /* BrowserWindow.xib */,
</span><span class="cx">                                 1DDD58150DA1D0A300B32029 /* MainMenu.xib */,
</span><ins>+                                7CA379411AC381C10079DC37 /* ExtensionManagerWindowController.xib */,
</ins><span class="cx">                         );
</span><span class="cx">                         name = Resources;
</span><span class="cx">                         sourceTree = &quot;&lt;group&gt;&quot;;
</span><span class="lines">@@ -303,6 +311,7 @@
</span><span class="cx">                         buildActionMask = 2147483647;
</span><span class="cx">                         files = (
</span><span class="cx">                                 BC72B89611E57E0F001EB4EA /* BrowserWindow.xib in Resources */,
</span><ins>+                                7CA379431AC381C10079DC37 /* ExtensionManagerWindowController.xib in Resources */,
</ins><span class="cx">                                 BC72B89511E57E07001EB4EA /* MainMenu.xib in Resources */,
</span><span class="cx">                         );
</span><span class="cx">                         runOnlyForDeploymentPostprocessing = 0;
</span><span class="lines">@@ -325,6 +334,7 @@
</span><span class="cx">                                 256AC3DA0F4B6AC300CF3369 /* AppDelegate.m in Sources */,
</span><span class="cx">                                 0FE643A1161FA8940059E3FF /* BrowserWindowController.m in Sources */,
</span><span class="cx">                                 2DC37343198B62D300EC33E9 /* SettingsController.m in Sources */,
</span><ins>+                                7CA379421AC381C10079DC37 /* ExtensionManagerWindowController.m in Sources */,
</ins><span class="cx">                                 BC329487116A92E2008635D0 /* main.m in Sources */,
</span><span class="cx">                                 51E244FA11EFCE07008228D1 /* MBToolbarItem.m in Sources */,
</span><span class="cx">                                 0FE643A4161FAC660059E3FF /* WK1BrowserWindowController.m in Sources */,
</span></span></pre></div>
<a id="trunkToolsMiniBrowsermacAppDelegateh"></a>
<div class="modfile"><h4>Modified: trunk/Tools/MiniBrowser/mac/AppDelegate.h (182444 => 182445)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/MiniBrowser/mac/AppDelegate.h        2015-04-06 22:48:00 UTC (rev 182444)
+++ trunk/Tools/MiniBrowser/mac/AppDelegate.h        2015-04-06 23:15:49 UTC (rev 182445)
</span><span class="lines">@@ -23,8 +23,11 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><ins>+@class ExtensionManagerWindowController;
+
</ins><span class="cx"> @interface BrowserAppDelegate : NSObject &lt;NSApplicationDelegate&gt; {
</span><span class="cx">     NSMutableSet *_browserWindowControllers;
</span><ins>+    ExtensionManagerWindowController *_extensionManagerWindowController;
</ins><span class="cx"> 
</span><span class="cx">     IBOutlet NSMenuItem *_newWebKit1WindowItem;
</span><span class="cx">     IBOutlet NSMenuItem *_newWebKit2WindowItem;
</span><span class="lines">@@ -34,4 +37,6 @@
</span><span class="cx"> 
</span><span class="cx"> - (void)didChangeSettings;
</span><span class="cx"> 
</span><ins>+@property (readonly) WKUserContentController *userContentContoller;
+
</ins><span class="cx"> @end
</span></span></pre></div>
<a id="trunkToolsMiniBrowsermacAppDelegatem"></a>
<div class="modfile"><h4>Modified: trunk/Tools/MiniBrowser/mac/AppDelegate.m (182444 => 182445)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/MiniBrowser/mac/AppDelegate.m        2015-04-06 22:48:00 UTC (rev 182444)
+++ trunk/Tools/MiniBrowser/mac/AppDelegate.m        2015-04-06 23:15:49 UTC (rev 182445)
</span><span class="lines">@@ -25,14 +25,17 @@
</span><span class="cx"> 
</span><span class="cx"> #import &quot;AppDelegate.h&quot;
</span><span class="cx"> 
</span><ins>+#import &quot;ExtensionManagerWindowController.h&quot;
</ins><span class="cx"> #import &quot;SettingsController.h&quot;
</span><span class="cx"> #import &quot;WK1BrowserWindowController.h&quot;
</span><span class="cx"> #import &quot;WK2BrowserWindowController.h&quot;
</span><span class="cx"> #import &lt;WebKit/WKPreferencesPrivate.h&gt;
</span><span class="cx"> #import &lt;WebKit/WKProcessPoolPrivate.h&gt;
</span><ins>+#import &lt;WebKit/WKUserContentControllerPrivate.h&gt;
</ins><span class="cx"> #import &lt;WebKit/WKWebViewConfigurationPrivate.h&gt;
</span><span class="cx"> #import &lt;WebKit/WebKit.h&gt;
</span><span class="cx"> #import &lt;WebKit/_WKProcessPoolConfiguration.h&gt;
</span><ins>+#import &lt;WebKit/_WKUserContentExtensionStore.h&gt;
</ins><span class="cx"> #import &lt;WebKit/_WKWebsiteDataStore.h&gt;
</span><span class="cx"> 
</span><span class="cx"> enum {
</span><span class="lines">@@ -47,6 +50,7 @@
</span><span class="cx">     self = [super init];
</span><span class="cx">     if (self) {
</span><span class="cx">         _browserWindowControllers = [[NSMutableSet alloc] init];
</span><ins>+        _extensionManagerWindowController = [[ExtensionManagerWindowController alloc] init];
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     return self;
</span><span class="lines">@@ -211,4 +215,14 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+- (IBAction)showExtensionsManager:(id)sender
+{
+    [_extensionManagerWindowController showWindow:sender];
+}
+
+- (WKUserContentController *)userContentContoller
+{
+    return defaultConfiguration().userContentController;
+}
+
</ins><span class="cx"> @end
</span></span></pre></div>
<a id="trunkToolsMiniBrowsermacExtensionManagerWindowControllerh"></a>
<div class="addfile"><h4>Added: trunk/Tools/MiniBrowser/mac/ExtensionManagerWindowController.h (0 => 182445)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/MiniBrowser/mac/ExtensionManagerWindowController.h                                (rev 0)
+++ trunk/Tools/MiniBrowser/mac/ExtensionManagerWindowController.h        2015-04-06 23:15:49 UTC (rev 182445)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &lt;Cocoa/Cocoa.h&gt;
+
+@interface ExtensionManagerWindowController : NSWindowController {
+    IBOutlet NSArrayController *arrayController;
+}
+
+@end
</ins></span></pre></div>
<a id="trunkToolsMiniBrowsermacExtensionManagerWindowControllerm"></a>
<div class="addfile"><h4>Added: trunk/Tools/MiniBrowser/mac/ExtensionManagerWindowController.m (0 => 182445)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/MiniBrowser/mac/ExtensionManagerWindowController.m                                (rev 0)
+++ trunk/Tools/MiniBrowser/mac/ExtensionManagerWindowController.m        2015-04-06 23:15:49 UTC (rev 182445)
</span><span class="lines">@@ -0,0 +1,139 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &quot;ExtensionManagerWindowController.h&quot;
+
+#import &quot;AppDelegate.h&quot;
+#import &lt;WebKit/WKUserContentControllerPrivate.h&gt;
+#import &lt;WebKit/_WKUserContentExtensionStore.h&gt;
+
+@implementation ExtensionManagerWindowController
+
+- (instancetype)init
+{
+    self = [self initWithWindowNibName:@&quot;ExtensionManagerWindowController&quot;];
+    if (self) {
+        NSArray* installedContentExtensions = [[NSUserDefaults standardUserDefaults] arrayForKey:@&quot;InstalledContentExtensions&quot;];
+        if (installedContentExtensions) {
+            for (NSString *identifier in installedContentExtensions) {
+                [[_WKUserContentExtensionStore defaultStore] lookupContentExtensionForIdentifier:identifier completionHandler:^(_WKUserContentFilter *extension, NSError *error)
+                {
+                    if (error) {
+                        NSLog(@&quot;Extension store got out of sync with system defaults.&quot;);
+                        return;
+                    }
+
+                    BrowserAppDelegate* appDelegate = (BrowserAppDelegate *)[[NSApplication sharedApplication] delegate];
+                    [appDelegate.userContentContoller _addUserContentFilter:extension];
+                }];
+            }
+                
+        }
+    }
+    return self;
+}
+
+- (void)windowDidLoad
+{
+    [super windowDidLoad];
+
+    NSArray* installedContentExtensions = [[NSUserDefaults standardUserDefaults] arrayForKey:@&quot;InstalledContentExtensions&quot;];
+    if (installedContentExtensions) {
+        for (NSString *extension in installedContentExtensions)
+            [arrayController addObject:extension];
+    }
+}
+
+- (IBAction)add:(id)sender
+{
+    NSOpenPanel *openPanel = [[NSOpenPanel openPanel] retain];
+    openPanel.allowedFileTypes = @[ @&quot;public.json&quot; ];
+    
+    [openPanel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result)
+    {
+        if (result != NSFileHandlingPanelOKButton)
+            return;
+
+        NSURL *url = [openPanel.URLs objectAtIndex:0];
+        NSString *identifier = url.lastPathComponent;
+        NSString *jsonString = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
+
+        [[_WKUserContentExtensionStore defaultStore] compileContentExtensionForIdentifier:identifier encodedContentExtension:jsonString completionHandler:^(_WKUserContentFilter *extension, NSError *error)
+        {
+            
+            if (error) {
+                NSAlert *alert = [NSAlert alertWithError:error];
+                [alert runModal];
+                return;
+            }
+
+            NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+
+            NSArray* installedContentExtensions = [defaults arrayForKey:@&quot;InstalledContentExtensions&quot;];
+            NSMutableArray *mutableInstalledContentExtensions;
+            if (installedContentExtensions)
+                mutableInstalledContentExtensions = [installedContentExtensions mutableCopy];
+            else
+                mutableInstalledContentExtensions = [[NSMutableArray alloc] init];
+
+            [mutableInstalledContentExtensions addObject:identifier];
+            [defaults setObject:mutableInstalledContentExtensions forKey:@&quot;InstalledContentExtensions&quot;];
+
+            [arrayController addObject:identifier];
+
+            BrowserAppDelegate* appDelegate = (BrowserAppDelegate *)[[NSApplication sharedApplication] delegate];
+            [appDelegate.userContentContoller _addUserContentFilter:extension];
+        }];
+    }];
+
+}
+
+- (IBAction)remove:(id)sender
+{
+    NSUInteger index = [arrayController selectionIndex];
+
+    NSString *identifierToRemove = arrayController.arrangedObjects[index];
+
+    [[_WKUserContentExtensionStore defaultStore] removeContentExtensionForIdentifier:identifierToRemove completionHandler:^(NSError *error)
+    {
+        if (error) {
+            NSAlert *alert = [NSAlert alertWithError:error];
+            [alert runModal];
+            return;
+        }
+
+        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+
+        NSMutableArray *installedContentExtensions = [[defaults arrayForKey:@&quot;InstalledContentExtensions&quot;] mutableCopy];
+        [installedContentExtensions removeObject:identifierToRemove];
+        [defaults setObject:installedContentExtensions forKey:@&quot;InstalledContentExtensions&quot;];
+
+        [arrayController removeObjectAtArrangedObjectIndex:index];
+        BrowserAppDelegate* appDelegate = (BrowserAppDelegate *)[[NSApplication sharedApplication] delegate];
+        [appDelegate.userContentContoller _removeUserContentFilter:identifierToRemove];
+    }];
+}
+
+@end
</ins></span></pre></div>
<a id="trunkToolsMiniBrowsermacExtensionManagerWindowControllerxib"></a>
<div class="addfile"><h4>Added: trunk/Tools/MiniBrowser/mac/ExtensionManagerWindowController.xib (0 => 182445)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/MiniBrowser/mac/ExtensionManagerWindowController.xib                                (rev 0)
+++ trunk/Tools/MiniBrowser/mac/ExtensionManagerWindowController.xib        2015-04-06 23:15:49 UTC (rev 182445)
</span><span class="lines">@@ -0,0 +1,147 @@
</span><ins>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;
+&lt;document type=&quot;com.apple.InterfaceBuilder3.Cocoa.XIB&quot; version=&quot;3.0&quot; toolsVersion=&quot;4514&quot; systemVersion=&quot;13F1076&quot; targetRuntime=&quot;MacOSX.Cocoa&quot; propertyAccessControl=&quot;none&quot; useAutolayout=&quot;YES&quot;&gt;
+    &lt;dependencies&gt;
+        &lt;plugIn identifier=&quot;com.apple.InterfaceBuilder.CocoaPlugin&quot; version=&quot;4514&quot;/&gt;
+    &lt;/dependencies&gt;
+    &lt;objects&gt;
+        &lt;customObject id=&quot;-2&quot; userLabel=&quot;File's Owner&quot; customClass=&quot;ExtensionManagerWindowController&quot;&gt;
+            &lt;connections&gt;
+                &lt;outlet property=&quot;arrayController&quot; destination=&quot;xeI-l9-8Xv&quot; id=&quot;O8f-gY-5FH&quot;/&gt;
+                &lt;outlet property=&quot;window&quot; destination=&quot;F0z-JX-Cv5&quot; id=&quot;gIp-Ho-8D9&quot;/&gt;
+            &lt;/connections&gt;
+        &lt;/customObject&gt;
+        &lt;customObject id=&quot;-1&quot; userLabel=&quot;First Responder&quot; customClass=&quot;FirstResponder&quot;/&gt;
+        &lt;customObject id=&quot;-3&quot; userLabel=&quot;Application&quot; customClass=&quot;NSObject&quot;/&gt;
+        &lt;window title=&quot;Extensions Manager&quot; allowsToolTipsWhenApplicationIsInactive=&quot;NO&quot; autorecalculatesKeyViewLoop=&quot;NO&quot; oneShot=&quot;NO&quot; releasedWhenClosed=&quot;NO&quot; animationBehavior=&quot;default&quot; id=&quot;F0z-JX-Cv5&quot;&gt;
+            &lt;windowStyleMask key=&quot;styleMask&quot; titled=&quot;YES&quot; closable=&quot;YES&quot; miniaturizable=&quot;YES&quot; resizable=&quot;YES&quot; unifiedTitleAndToolbar=&quot;YES&quot;/&gt;
+            &lt;windowPositionMask key=&quot;initialPositionMask&quot; leftStrut=&quot;YES&quot; rightStrut=&quot;YES&quot; topStrut=&quot;YES&quot; bottomStrut=&quot;YES&quot;/&gt;
+            &lt;rect key=&quot;contentRect&quot; x=&quot;196&quot; y=&quot;240&quot; width=&quot;480&quot; height=&quot;270&quot;/&gt;
+            &lt;rect key=&quot;screenRect&quot; x=&quot;0.0&quot; y=&quot;0.0&quot; width=&quot;1440&quot; height=&quot;878&quot;/&gt;
+            &lt;view key=&quot;contentView&quot; id=&quot;se5-gp-TjO&quot;&gt;
+                &lt;rect key=&quot;frame&quot; x=&quot;0.0&quot; y=&quot;0.0&quot; width=&quot;480&quot; height=&quot;270&quot;/&gt;
+                &lt;autoresizingMask key=&quot;autoresizingMask&quot;/&gt;
+                &lt;subviews&gt;
+                    &lt;scrollView autohidesScrollers=&quot;YES&quot; horizontalLineScroll=&quot;19&quot; horizontalPageScroll=&quot;10&quot; verticalLineScroll=&quot;19&quot; verticalPageScroll=&quot;10&quot; usesPredominantAxisScrolling=&quot;NO&quot; translatesAutoresizingMaskIntoConstraints=&quot;NO&quot; id=&quot;3Ps-vx-3Rj&quot;&gt;
+                        &lt;rect key=&quot;frame&quot; x=&quot;20&quot; y=&quot;58&quot; width=&quot;440&quot; height=&quot;192&quot;/&gt;
+                        &lt;clipView key=&quot;contentView&quot; id=&quot;228-qF-Rc1&quot;&gt;
+                            &lt;rect key=&quot;frame&quot; x=&quot;1&quot; y=&quot;1&quot; width=&quot;438&quot; height=&quot;190&quot;/&gt;
+                            &lt;autoresizingMask key=&quot;autoresizingMask&quot; widthSizable=&quot;YES&quot; heightSizable=&quot;YES&quot;/&gt;
+                            &lt;subviews&gt;
+                                &lt;tableView verticalHuggingPriority=&quot;750&quot; allowsExpansionToolTips=&quot;YES&quot; columnAutoresizingStyle=&quot;lastColumnOnly&quot; columnReordering=&quot;NO&quot; columnSelection=&quot;YES&quot; columnResizing=&quot;NO&quot; multipleSelection=&quot;NO&quot; autosaveColumns=&quot;NO&quot; rowSizeStyle=&quot;automatic&quot; viewBased=&quot;YES&quot; id=&quot;mmd-0v-4hR&quot;&gt;
+                                    &lt;rect key=&quot;frame&quot; x=&quot;0.0&quot; y=&quot;0.0&quot; width=&quot;438&quot; height=&quot;190&quot;/&gt;
+                                    &lt;autoresizingMask key=&quot;autoresizingMask&quot;/&gt;
+                                    &lt;size key=&quot;intercellSpacing&quot; width=&quot;3&quot; height=&quot;2&quot;/&gt;
+                                    &lt;color key=&quot;backgroundColor&quot; name=&quot;controlBackgroundColor&quot; catalog=&quot;System&quot; colorSpace=&quot;catalog&quot;/&gt;
+                                    &lt;color key=&quot;gridColor&quot; name=&quot;gridColor&quot; catalog=&quot;System&quot; colorSpace=&quot;catalog&quot;/&gt;
+                                    &lt;tableColumns&gt;
+                                        &lt;tableColumn width=&quot;435&quot; minWidth=&quot;40&quot; maxWidth=&quot;1000&quot; id=&quot;6PD-e9-GfD&quot;&gt;
+                                            &lt;tableHeaderCell key=&quot;headerCell&quot; lineBreakMode=&quot;truncatingTail&quot; borderStyle=&quot;border&quot; alignment=&quot;left&quot;&gt;
+                                                &lt;font key=&quot;font&quot; metaFont=&quot;smallSystem&quot;/&gt;
+                                                &lt;color key=&quot;textColor&quot; name=&quot;headerTextColor&quot; catalog=&quot;System&quot; colorSpace=&quot;catalog&quot;/&gt;
+                                                &lt;color key=&quot;backgroundColor&quot; name=&quot;headerColor&quot; catalog=&quot;System&quot; colorSpace=&quot;catalog&quot;/&gt;
+                                            &lt;/tableHeaderCell&gt;
+                                            &lt;textFieldCell key=&quot;dataCell&quot; lineBreakMode=&quot;truncatingTail&quot; selectable=&quot;YES&quot; editable=&quot;YES&quot; alignment=&quot;left&quot; title=&quot;Text Cell&quot; id=&quot;Sq0-um-maR&quot;&gt;
+                                                &lt;font key=&quot;font&quot; metaFont=&quot;system&quot;/&gt;
+                                                &lt;color key=&quot;textColor&quot; name=&quot;controlTextColor&quot; catalog=&quot;System&quot; colorSpace=&quot;catalog&quot;/&gt;
+                                                &lt;color key=&quot;backgroundColor&quot; name=&quot;controlBackgroundColor&quot; catalog=&quot;System&quot; colorSpace=&quot;catalog&quot;/&gt;
+                                            &lt;/textFieldCell&gt;
+                                            &lt;tableColumnResizingMask key=&quot;resizingMask&quot; resizeWithTable=&quot;YES&quot; userResizable=&quot;YES&quot;/&gt;
+                                            &lt;prototypeCellViews&gt;
+                                                &lt;tableCellView id=&quot;R3S-7i-hkn&quot;&gt;
+                                                    &lt;rect key=&quot;frame&quot; x=&quot;1&quot; y=&quot;1&quot; width=&quot;435&quot; height=&quot;17&quot;/&gt;
+                                                    &lt;autoresizingMask key=&quot;autoresizingMask&quot; widthSizable=&quot;YES&quot; heightSizable=&quot;YES&quot;/&gt;
+                                                    &lt;subviews&gt;
+                                                        &lt;textField verticalHuggingPriority=&quot;750&quot; horizontalCompressionResistancePriority=&quot;250&quot; misplaced=&quot;YES&quot; translatesAutoresizingMaskIntoConstraints=&quot;NO&quot; id=&quot;DqA-Ee-O6f&quot;&gt;
+                                                            &lt;rect key=&quot;frame&quot; x=&quot;0.0&quot; y=&quot;0.0&quot; width=&quot;434&quot; height=&quot;17&quot;/&gt;
+                                                            &lt;textFieldCell key=&quot;cell&quot; scrollable=&quot;YES&quot; lineBreakMode=&quot;clipping&quot; sendsActionOnEndEditing=&quot;YES&quot; title=&quot;Table View Cell&quot; id=&quot;syf-BT-XBf&quot;&gt;
+                                                                &lt;font key=&quot;font&quot; metaFont=&quot;system&quot;/&gt;
+                                                                &lt;color key=&quot;textColor&quot; name=&quot;controlTextColor&quot; catalog=&quot;System&quot; colorSpace=&quot;catalog&quot;/&gt;
+                                                                &lt;color key=&quot;backgroundColor&quot; name=&quot;controlColor&quot; catalog=&quot;System&quot; colorSpace=&quot;catalog&quot;/&gt;
+                                                            &lt;/textFieldCell&gt;
+                                                            &lt;connections&gt;
+                                                                &lt;binding destination=&quot;R3S-7i-hkn&quot; name=&quot;value&quot; keyPath=&quot;objectValue&quot; id=&quot;uwA-wN-TwE&quot;/&gt;
+                                                            &lt;/connections&gt;
+                                                        &lt;/textField&gt;
+                                                    &lt;/subviews&gt;
+                                                    &lt;constraints&gt;
+                                                        &lt;constraint firstAttribute=&quot;bottom&quot; secondItem=&quot;DqA-Ee-O6f&quot; secondAttribute=&quot;bottom&quot; id=&quot;Eob-Am-Ity&quot;/&gt;
+                                                        &lt;constraint firstItem=&quot;DqA-Ee-O6f&quot; firstAttribute=&quot;leading&quot; secondItem=&quot;R3S-7i-hkn&quot; secondAttribute=&quot;leading&quot; constant=&quot;2&quot; id=&quot;acg-V8-jUr&quot;/&gt;
+                                                        &lt;constraint firstAttribute=&quot;trailing&quot; secondItem=&quot;DqA-Ee-O6f&quot; secondAttribute=&quot;trailing&quot; constant=&quot;2&quot; id=&quot;gTj-qL-A7r&quot;/&gt;
+                                                        &lt;constraint firstItem=&quot;DqA-Ee-O6f&quot; firstAttribute=&quot;top&quot; secondItem=&quot;R3S-7i-hkn&quot; secondAttribute=&quot;top&quot; id=&quot;lKF-M8-hn7&quot;/&gt;
+                                                    &lt;/constraints&gt;
+                                                    &lt;connections&gt;
+                                                        &lt;outlet property=&quot;textField&quot; destination=&quot;DqA-Ee-O6f&quot; id=&quot;cpI-Wh-atT&quot;/&gt;
+                                                    &lt;/connections&gt;
+                                                &lt;/tableCellView&gt;
+                                            &lt;/prototypeCellViews&gt;
+                                        &lt;/tableColumn&gt;
+                                    &lt;/tableColumns&gt;
+                                    &lt;connections&gt;
+                                        &lt;binding destination=&quot;xeI-l9-8Xv&quot; name=&quot;content&quot; keyPath=&quot;arrangedObjects&quot; id=&quot;paH-6b-cxM&quot;/&gt;
+                                        &lt;binding destination=&quot;xeI-l9-8Xv&quot; name=&quot;selectionIndexes&quot; keyPath=&quot;selectionIndexes&quot; previousBinding=&quot;paH-6b-cxM&quot; id=&quot;NDp-MB-3u8&quot;/&gt;
+                                    &lt;/connections&gt;
+                                &lt;/tableView&gt;
+                            &lt;/subviews&gt;
+                            &lt;color key=&quot;backgroundColor&quot; name=&quot;controlBackgroundColor&quot; catalog=&quot;System&quot; colorSpace=&quot;catalog&quot;/&gt;
+                        &lt;/clipView&gt;
+                        &lt;scroller key=&quot;horizontalScroller&quot; hidden=&quot;YES&quot; verticalHuggingPriority=&quot;750&quot; horizontal=&quot;YES&quot; id=&quot;iTc-lE-Pk6&quot;&gt;
+                            &lt;rect key=&quot;frame&quot; x=&quot;1&quot; y=&quot;119&quot; width=&quot;223&quot; height=&quot;15&quot;/&gt;
+                            &lt;autoresizingMask key=&quot;autoresizingMask&quot;/&gt;
+                        &lt;/scroller&gt;
+                        &lt;scroller key=&quot;verticalScroller&quot; hidden=&quot;YES&quot; verticalHuggingPriority=&quot;750&quot; horizontal=&quot;NO&quot; id=&quot;ak3-QY-AvJ&quot;&gt;
+                            &lt;rect key=&quot;frame&quot; x=&quot;224&quot; y=&quot;17&quot; width=&quot;15&quot; height=&quot;102&quot;/&gt;
+                            &lt;autoresizingMask key=&quot;autoresizingMask&quot;/&gt;
+                        &lt;/scroller&gt;
+                    &lt;/scrollView&gt;
+                    &lt;button verticalHuggingPriority=&quot;750&quot; translatesAutoresizingMaskIntoConstraints=&quot;NO&quot; id=&quot;27H-8l-ZRr&quot;&gt;
+                        &lt;rect key=&quot;frame&quot; x=&quot;20&quot; y=&quot;21&quot; width=&quot;21&quot; height=&quot;21&quot;/&gt;
+                        &lt;constraints&gt;
+                            &lt;constraint firstAttribute=&quot;width&quot; constant=&quot;21&quot; id=&quot;Kv9-Ra-5xj&quot;/&gt;
+                            &lt;constraint firstAttribute=&quot;height&quot; constant=&quot;19&quot; id=&quot;Nmn-14-1ea&quot;/&gt;
+                        &lt;/constraints&gt;
+                        &lt;buttonCell key=&quot;cell&quot; type=&quot;smallSquare&quot; bezelStyle=&quot;smallSquare&quot; image=&quot;NSAddTemplate&quot; imagePosition=&quot;overlaps&quot; alignment=&quot;center&quot; lineBreakMode=&quot;truncatingTail&quot; state=&quot;on&quot; borderStyle=&quot;border&quot; imageScaling=&quot;proportionallyDown&quot; inset=&quot;2&quot; id=&quot;6T3-fu-laO&quot;&gt;
+                            &lt;behavior key=&quot;behavior&quot; pushIn=&quot;YES&quot; lightByBackground=&quot;YES&quot; lightByGray=&quot;YES&quot;/&gt;
+                            &lt;font key=&quot;font&quot; metaFont=&quot;system&quot;/&gt;
+                        &lt;/buttonCell&gt;
+                        &lt;connections&gt;
+                            &lt;action selector=&quot;add:&quot; target=&quot;-2&quot; id=&quot;nIg-iE-xaG&quot;/&gt;
+                        &lt;/connections&gt;
+                    &lt;/button&gt;
+                    &lt;button verticalHuggingPriority=&quot;750&quot; translatesAutoresizingMaskIntoConstraints=&quot;NO&quot; id=&quot;i46-AU-g9W&quot;&gt;
+                        &lt;rect key=&quot;frame&quot; x=&quot;40&quot; y=&quot;21&quot; width=&quot;21&quot; height=&quot;21&quot;/&gt;
+                        &lt;constraints&gt;
+                            &lt;constraint firstAttribute=&quot;width&quot; constant=&quot;21&quot; id=&quot;ECG-hI-EML&quot;/&gt;
+                            &lt;constraint firstAttribute=&quot;height&quot; constant=&quot;19&quot; id=&quot;b3A-2I-fDc&quot;/&gt;
+                        &lt;/constraints&gt;
+                        &lt;buttonCell key=&quot;cell&quot; type=&quot;smallSquare&quot; bezelStyle=&quot;smallSquare&quot; image=&quot;NSRemoveTemplate&quot; imagePosition=&quot;overlaps&quot; alignment=&quot;center&quot; lineBreakMode=&quot;truncatingTail&quot; state=&quot;on&quot; borderStyle=&quot;border&quot; imageScaling=&quot;proportionallyDown&quot; inset=&quot;2&quot; id=&quot;gfs-sY-cBN&quot;&gt;
+                            &lt;behavior key=&quot;behavior&quot; pushIn=&quot;YES&quot; lightByBackground=&quot;YES&quot; lightByGray=&quot;YES&quot;/&gt;
+                            &lt;font key=&quot;font&quot; metaFont=&quot;system&quot;/&gt;
+                        &lt;/buttonCell&gt;
+                        &lt;connections&gt;
+                            &lt;action selector=&quot;remove:&quot; target=&quot;-2&quot; id=&quot;BOW-Fc-AGp&quot;/&gt;
+                            &lt;binding destination=&quot;xeI-l9-8Xv&quot; name=&quot;enabled&quot; keyPath=&quot;canRemove&quot; id=&quot;pp1-d7-6Gd&quot;/&gt;
+                        &lt;/connections&gt;
+                    &lt;/button&gt;
+                &lt;/subviews&gt;
+                &lt;constraints&gt;
+                    &lt;constraint firstAttribute=&quot;bottom&quot; secondItem=&quot;3Ps-vx-3Rj&quot; secondAttribute=&quot;bottom&quot; constant=&quot;58&quot; id=&quot;Nej-YX-BMe&quot;/&gt;
+                    &lt;constraint firstItem=&quot;i46-AU-g9W&quot; firstAttribute=&quot;leading&quot; secondItem=&quot;se5-gp-TjO&quot; secondAttribute=&quot;leading&quot; constant=&quot;40&quot; id=&quot;SQS-4J-NJE&quot;/&gt;
+                    &lt;constraint firstAttribute=&quot;bottom&quot; secondItem=&quot;i46-AU-g9W&quot; secondAttribute=&quot;bottom&quot; constant=&quot;22&quot; id=&quot;Tri-yU-fA4&quot;/&gt;
+                    &lt;constraint firstItem=&quot;27H-8l-ZRr&quot; firstAttribute=&quot;leading&quot; secondItem=&quot;se5-gp-TjO&quot; secondAttribute=&quot;leading&quot; constant=&quot;20&quot; id=&quot;URC-fD-No6&quot;/&gt;
+                    &lt;constraint firstItem=&quot;3Ps-vx-3Rj&quot; firstAttribute=&quot;leading&quot; secondItem=&quot;se5-gp-TjO&quot; secondAttribute=&quot;leading&quot; constant=&quot;20&quot; id=&quot;Udm-Eg-Fmx&quot;/&gt;
+                    &lt;constraint firstAttribute=&quot;bottom&quot; secondItem=&quot;27H-8l-ZRr&quot; secondAttribute=&quot;bottom&quot; constant=&quot;22&quot; id=&quot;gVG-YX-oeX&quot;/&gt;
+                    &lt;constraint firstAttribute=&quot;trailing&quot; secondItem=&quot;3Ps-vx-3Rj&quot; secondAttribute=&quot;trailing&quot; constant=&quot;20&quot; id=&quot;ggD-nm-PDi&quot;/&gt;
+                    &lt;constraint firstItem=&quot;3Ps-vx-3Rj&quot; firstAttribute=&quot;top&quot; secondItem=&quot;se5-gp-TjO&quot; secondAttribute=&quot;top&quot; constant=&quot;20&quot; id=&quot;qiw-wC-igh&quot;/&gt;
+                &lt;/constraints&gt;
+            &lt;/view&gt;
+            &lt;connections&gt;
+                &lt;outlet property=&quot;delegate&quot; destination=&quot;-2&quot; id=&quot;0bl-1N-AYu&quot;/&gt;
+            &lt;/connections&gt;
+        &lt;/window&gt;
+        &lt;arrayController id=&quot;xeI-l9-8Xv&quot;/&gt;
+    &lt;/objects&gt;
+    &lt;resources&gt;
+        &lt;image name=&quot;NSAddTemplate&quot; width=&quot;8&quot; height=&quot;8&quot;/&gt;
+        &lt;image name=&quot;NSRemoveTemplate&quot; width=&quot;8&quot; height=&quot;8&quot;/&gt;
+    &lt;/resources&gt;
+&lt;/document&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkToolsMiniBrowsermacMainMenuxib"></a>
<div class="modfile"><h4>Modified: trunk/Tools/MiniBrowser/mac/MainMenu.xib (182444 => 182445)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/MiniBrowser/mac/MainMenu.xib        2015-04-06 22:48:00 UTC (rev 182444)
+++ trunk/Tools/MiniBrowser/mac/MainMenu.xib        2015-04-06 23:15:49 UTC (rev 182445)
</span><span class="lines">@@ -475,6 +475,13 @@
</span><span class="cx">                                     &lt;action selector=&quot;fetchAndClearWebsiteData:&quot; target=&quot;-1&quot; id=&quot;R06-l2-tP0&quot;/&gt;
</span><span class="cx">                                 &lt;/connections&gt;
</span><span class="cx">                             &lt;/menuItem&gt;
</span><ins>+                            &lt;menuItem isSeparatorItem=&quot;YES&quot; id=&quot;uef-kb-r9n&quot;/&gt;
+                            &lt;menuItem title=&quot;Show Extensions Manager&quot; keyEquivalent=&quot;m&quot; id=&quot;2f0-pH-KRx&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot; option=&quot;YES&quot; command=&quot;YES&quot;/&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;showExtensionsManager:&quot; target=&quot;-1&quot; id=&quot;iyL-17-sLo&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
</ins><span class="cx">                         &lt;/items&gt;
</span><span class="cx">                     &lt;/menu&gt;
</span><span class="cx">                 &lt;/menuItem&gt;
</span></span></pre>
</div>
</div>

</body>
</html>