<!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>[197950] trunk/Source</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/197950">197950</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2016-03-10 12:46:57 -0800 (Thu, 10 Mar 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Unreviewed, rolling out <a href="http://trac.webkit.org/projects/webkit/changeset/197943">r197943</a>.
https://bugs.webkit.org/show_bug.cgi?id=155317

This change broke Windows, WinCairo, GTK and EFL builds
(Requested by ryanhaddad on #webkit).

Reverted changeset:

&quot;Add a baseURL parameter to _WKUserStyleSheet&quot;
https://bugs.webkit.org/show_bug.cgi?id=155219
http://trac.webkit.org/changeset/197943</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCoredomExtensionStyleSheetscpp">trunk/Source/WebCore/dom/ExtensionStyleSheets.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLMediaElementcpp">trunk/Source/WebCore/html/HTMLMediaElement.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderEmptyClientscpp">trunk/Source/WebCore/loader/EmptyClients.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderEmptyClientsh">trunk/Source/WebCore/loader/EmptyClients.h</a></li>
<li><a href="#trunkSourceWebCoreloaderFrameLoadercpp">trunk/Source/WebCore/loader/FrameLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderPingLoadercpp">trunk/Source/WebCore/loader/PingLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderResourceLoadercpp">trunk/Source/WebCore/loader/ResourceLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloadercacheCachedResourceLoadercpp">trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp</a></li>
<li><a href="#trunkSourceWebCorepageDOMWindowcpp">trunk/Source/WebCore/page/DOMWindow.cpp</a></li>
<li><a href="#trunkSourceWebCorepageFramecpp">trunk/Source/WebCore/page/Frame.cpp</a></li>
<li><a href="#trunkSourceWebCorepageFrameh">trunk/Source/WebCore/page/Frame.h</a></li>
<li><a href="#trunkSourceWebCorepagePagecpp">trunk/Source/WebCore/page/Page.cpp</a></li>
<li><a href="#trunkSourceWebCorepagePageh">trunk/Source/WebCore/page/Page.h</a></li>
<li><a href="#trunkSourceWebCorepagePageConfigurationh">trunk/Source/WebCore/page/PageConfiguration.h</a></li>
<li><a href="#trunkSourceWebCorepageUserContentControllercpp">trunk/Source/WebCore/page/UserContentController.cpp</a></li>
<li><a href="#trunkSourceWebCorepageUserContentControllerh">trunk/Source/WebCore/page/UserContentController.h</a></li>
<li><a href="#trunkSourceWebCorepageUserMessageHandlerDescriptorh">trunk/Source/WebCore/page/UserMessageHandlerDescriptor.h</a></li>
<li><a href="#trunkSourceWebCorepageUserMessageHandlersNamespacecpp">trunk/Source/WebCore/page/UserMessageHandlersNamespace.cpp</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebViewmm">trunk/Source/WebKit/mac/WebView/WebView.mm</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2Scriptswebkitmessagespy">trunk/Source/WebKit2/Scripts/webkit/messages.py</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIAPIUserScriptcpp">trunk/Source/WebKit2/UIProcess/API/APIUserScript.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIAPIUserScripth">trunk/Source/WebKit2/UIProcess/API/APIUserScript.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIAPIUserStyleSheetcpp">trunk/Source/WebKit2/UIProcess/API/APIUserStyleSheet.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIAPIUserStyleSheeth">trunk/Source/WebKit2/UIProcess/API/APIUserStyleSheet.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoa_WKUserStyleSheeth">trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKUserStyleSheet.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoa_WKUserStyleSheetmm">trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKUserStyleSheet.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessUserContentWebUserContentControllerProxycpp">trunk/Source/WebKit2/UIProcess/UserContent/WebUserContentControllerProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebKit2xcodeprojprojectpbxproj">trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebKit2WebProcessInjectedBundleInjectedBundlecpp">trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessUserContentWebUserContentControllercpp">trunk/Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessUserContentWebUserContentControllerh">trunk/Source/WebKit2/WebProcess/UserContent/WebUserContentController.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessUserContentWebUserContentControllermessagesin">trunk/Source/WebKit2/WebProcess/UserContent/WebUserContentController.messages.in</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPagecpp">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPageGroupProxycpp">trunk/Source/WebKit2/WebProcess/WebPage/WebPageGroupProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPageGroupProxyh">trunk/Source/WebKit2/WebProcess/WebPage/WebPageGroupProxy.h</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceWebCorepageUserContentProvidercpp">trunk/Source/WebCore/page/UserContentProvider.cpp</a></li>
<li><a href="#trunkSourceWebCorepageUserContentProviderh">trunk/Source/WebCore/page/UserContentProvider.h</a></li>
<li><a href="#trunkSourceWebKit2SharedWebUserContentControllerDataTypescpp">trunk/Source/WebKit2/Shared/WebUserContentControllerDataTypes.cpp</a></li>
<li><a href="#trunkSourceWebKit2SharedWebUserContentControllerDataTypesh">trunk/Source/WebKit2/Shared/WebUserContentControllerDataTypes.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/ChangeLog        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2016-03-10  Commit Queue  &lt;commit-queue@webkit.org&gt;
+
+        Unreviewed, rolling out r197943.
+        https://bugs.webkit.org/show_bug.cgi?id=155317
+
+        This change broke Windows, WinCairo, GTK and EFL builds
+        (Requested by ryanhaddad on #webkit).
+
+        Reverted changeset:
+
+        &quot;Add a baseURL parameter to _WKUserStyleSheet&quot;
+        https://bugs.webkit.org/show_bug.cgi?id=155219
+        http://trac.webkit.org/changeset/197943
+
</ins><span class="cx"> 2016-03-10  Daniel Bates  &lt;dabates@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         CSP: Implement support for script and style nonces
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -2740,8 +2740,6 @@
</span><span class="cx">                 7C3B79721908757B00B47A2D /* UserMessageHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C3B79701908757B00B47A2D /* UserMessageHandler.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 7C3E510A18DF8F3500C112F7 /* HTMLConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C3E510818DF8F3500C112F7 /* HTMLConverter.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 7C3E510B18DF8F3500C112F7 /* HTMLConverter.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7C3E510918DF8F3500C112F7 /* HTMLConverter.mm */; };
</span><del>-                7C3F01C11C8E5ABA00ADD962 /* UserContentProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C3F01C01C8E5AB100ADD962 /* UserContentProvider.h */; settings = {ATTRIBUTES = (Private, ); }; };
-                7C3F01C21C8E5AC200ADD962 /* UserContentProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C3F01BF1C8E5AB100ADD962 /* UserContentProvider.cpp */; };
</del><span class="cx">                 7C48A6D0191C9D6500026674 /* WebKitNamespace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C48A6CE191C9D6500026674 /* WebKitNamespace.cpp */; };
</span><span class="cx">                 7C48A6D1191C9D6500026674 /* WebKitNamespace.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C48A6CF191C9D6500026674 /* WebKitNamespace.h */; };
</span><span class="cx">                 7C4902A218B825F8007D9298 /* DOMWheelEventInternal.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 85989DCA0ACC8BBD00A0BC51 /* DOMWheelEventInternal.h */; };
</span><span class="lines">@@ -10384,8 +10382,6 @@
</span><span class="cx">                 7C3B79701908757B00B47A2D /* UserMessageHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserMessageHandler.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 7C3E510818DF8F3500C112F7 /* HTMLConverter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLConverter.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 7C3E510918DF8F3500C112F7 /* HTMLConverter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = HTMLConverter.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                7C3F01BF1C8E5AB100ADD962 /* UserContentProvider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserContentProvider.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
-                7C3F01C01C8E5AB100ADD962 /* UserContentProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserContentProvider.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 7C4189AB1B07C170000FA757 /* GlobalEventHandlers.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = GlobalEventHandlers.idl; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 7C4189AC1B07CBF2000FA757 /* WindowEventHandlers.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = WindowEventHandlers.idl; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 7C48A6CE191C9D6500026674 /* WebKitNamespace.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebKitNamespace.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -18123,8 +18119,6 @@
</span><span class="cx">                                 2D4F96F21A1ECC240098BF88 /* TextIndicator.h */,
</span><span class="cx">                                 1AE79D40188DB61F002239C2 /* UserContentController.cpp */,
</span><span class="cx">                                 1AE79D41188DB61F002239C2 /* UserContentController.h */,
</span><del>-                                7C3F01BF1C8E5AB100ADD962 /* UserContentProvider.cpp */,
-                                7C3F01C01C8E5AB100ADD962 /* UserContentProvider.h */,
</del><span class="cx">                                 003F1FE911E6AB43008258D9 /* UserContentTypes.h */,
</span><span class="cx">                                 BCACF3BA1072921A00C0C8A3 /* UserContentURLPattern.cpp */,
</span><span class="cx">                                 BCACF3BB1072921A00C0C8A3 /* UserContentURLPattern.h */,
</span><span class="lines">@@ -28264,7 +28258,6 @@
</span><span class="cx">                                 088C2F7A12390081003D65CE /* SVGTextLayoutAttributes.h in Headers */,
</span><span class="cx">                                 081093DC1255F0E700ED9D29 /* SVGTextLayoutAttributesBuilder.h in Headers */,
</span><span class="cx">                                 081668DA125603D5006F25DE /* SVGTextLayoutEngine.h in Headers */,
</span><del>-                                7C3F01C11C8E5ABA00ADD962 /* UserContentProvider.h in Headers */,
</del><span class="cx">                                 080E49261255F3BD00EFCA27 /* SVGTextLayoutEngineBaseline.h in Headers */,
</span><span class="cx">                                 080E49281255F3BD00EFCA27 /* SVGTextLayoutEngineSpacing.h in Headers */,
</span><span class="cx">                                 08F0BFC61255C53C00075185 /* SVGTextMetrics.h in Headers */,
</span><span class="lines">@@ -30441,7 +30434,6 @@
</span><span class="cx">                                 511EF2D117F0FDF100E4FA16 /* JSIDBObjectStoreCustom.cpp in Sources */,
</span><span class="cx">                                 511EF2C817F0FD3500E4FA16 /* JSIDBOpenDBRequest.cpp in Sources */,
</span><span class="cx">                                 511EF2C917F0FD3500E4FA16 /* JSIDBRequest.cpp in Sources */,
</span><del>-                                7C3F01C21C8E5AC200ADD962 /* UserContentProvider.cpp in Sources */,
</del><span class="cx">                                 511EF2CA17F0FD3500E4FA16 /* JSIDBTransaction.cpp in Sources */,
</span><span class="cx">                                 511EF2CB17F0FD3500E4FA16 /* JSIDBVersionChangeEvent.cpp in Sources */,
</span><span class="cx">                                 BC6C49F30D7DBA0500FFA558 /* JSImageConstructor.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebCoredomExtensionStyleSheetscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/ExtensionStyleSheets.cpp (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/ExtensionStyleSheets.cpp        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/dom/ExtensionStyleSheets.cpp        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -117,24 +117,6 @@
</span><span class="cx">     if (!owningPage)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    owningPage-&gt;userContentProvider().forEachUserStyleSheet([&amp;](const UserStyleSheet&amp; userStyleSheet) {
-        if (userStyleSheet.injectedFrames() == InjectInTopFrameOnly &amp;&amp; m_document.ownerElement())
-            return;
-
-        if (!UserContentURLPattern::matchesPatterns(m_document.url(), userStyleSheet.whitelist(), userStyleSheet.blacklist()))
-            return;
-
-        RefPtr&lt;CSSStyleSheet&gt; sheet = CSSStyleSheet::createInline(const_cast&lt;Document&amp;&gt;(m_document), userStyleSheet.url());
-        bool isUserStyleSheet = userStyleSheet.level() == UserStyleUserLevel;
-        if (isUserStyleSheet)
-            m_injectedUserStyleSheets.append(sheet);
-        else
-            m_injectedAuthorStyleSheets.append(sheet);
-
-        sheet-&gt;contents().setIsUserStyleSheet(isUserStyleSheet);
-        sheet-&gt;contents().parseString(userStyleSheet.source());
-    });
-    
</del><span class="cx">     if (!owningPage-&gt;captionUserPreferencesStyleSheet().isEmpty()) {
</span><span class="cx">         // Identify our override style sheet with a unique URL - a new scheme and a UUID.
</span><span class="cx">         static NeverDestroyed&lt;URL&gt; captionsStyleSheetURL(ParsedURLString, &quot;user-captions-override:01F6AF12-C3B0-4F70-AF5E-A3E00234DC23&quot;);
</span><span class="lines">@@ -145,6 +127,34 @@
</span><span class="cx">         sheet-&gt;contents().setIsUserStyleSheet(false);
</span><span class="cx">         sheet-&gt;contents().parseString(owningPage-&gt;captionUserPreferencesStyleSheet());
</span><span class="cx">     }
</span><ins>+
+    const auto* userContentController = owningPage-&gt;userContentController();
+    if (!userContentController)
+        return;
+
+    const UserStyleSheetMap* userStyleSheets = userContentController-&gt;userStyleSheets();
+    if (!userStyleSheets)
+        return;
+
+    for (auto&amp; styleSheets : userStyleSheets-&gt;values()) {
+        for (const auto&amp; sheet : *styleSheets) {
+            if (sheet-&gt;injectedFrames() == InjectInTopFrameOnly &amp;&amp; m_document.ownerElement())
+                continue;
+
+            if (!UserContentURLPattern::matchesPatterns(m_document.url(), sheet-&gt;whitelist(), sheet-&gt;blacklist()))
+                continue;
+
+            RefPtr&lt;CSSStyleSheet&gt; groupSheet = CSSStyleSheet::createInline(const_cast&lt;Document&amp;&gt;(m_document), sheet-&gt;url());
+            bool isUserStyleSheet = sheet-&gt;level() == UserStyleUserLevel;
+            if (isUserStyleSheet)
+                m_injectedUserStyleSheets.append(groupSheet);
+            else
+                m_injectedAuthorStyleSheets.append(groupSheet);
+
+            groupSheet-&gt;contents().setIsUserStyleSheet(isUserStyleSheet);
+            groupSheet-&gt;contents().parseString(sheet-&gt;source());
+        }
+    }
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ExtensionStyleSheets::invalidateInjectedStyleSheetCache()
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLMediaElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLMediaElement.cpp        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -1256,7 +1256,7 @@
</span><span class="cx">     ResourceRequest request(url);
</span><span class="cx">     DocumentLoader* documentLoader = frame-&gt;loader().documentLoader();
</span><span class="cx"> 
</span><del>-    if (documentLoader &amp;&amp; page-&gt;userContentProvider().processContentExtensionRulesForLoad(request, ResourceType::Media, *documentLoader) == ContentExtensions::BlockedStatus::Blocked) {
</del><ins>+    if (page-&gt;userContentController() &amp;&amp; documentLoader &amp;&amp; page-&gt;userContentController()-&gt;processContentExtensionRulesForLoad(request, ResourceType::Media, *documentLoader) == ContentExtensions::BlockedStatus::Blocked) {
</ins><span class="cx">         request = { };
</span><span class="cx">         mediaLoadingFailed(MediaPlayer::FormatError);
</span><span class="cx">         return;
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderEmptyClientscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/EmptyClients.cpp (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/EmptyClients.cpp        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/loader/EmptyClients.cpp        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -41,7 +41,6 @@
</span><span class="cx"> #include &quot;StorageArea.h&quot;
</span><span class="cx"> #include &quot;StorageNamespace.h&quot;
</span><span class="cx"> #include &quot;StorageNamespaceProvider.h&quot;
</span><del>-#include &quot;UserContentProvider.h&quot;
</del><span class="cx"> #include &lt;wtf/NeverDestroyed.h&gt;
</span><span class="cx"> 
</span><span class="cx"> #if USE(APPLE_INTERNAL_SDK)
</span><span class="lines">@@ -96,18 +95,7 @@
</span><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class EmptyUserContentProvider final : public UserContentProvider {
-    void forEachUserScript(const std::function&lt;void(DOMWrapperWorld&amp;, const UserScript&amp;)&gt;&amp;) const override { }
-    void forEachUserStyleSheet(const std::function&lt;void(const UserStyleSheet&amp;)&gt;&amp;) const override { }
-#if ENABLE(USER_MESSAGE_HANDLERS)
-    const UserMessageHandlerDescriptorMap&amp; userMessageHandlerDescriptors() const override { static NeverDestroyed&lt;UserMessageHandlerDescriptorMap&gt; map; return map.get(); }
-#endif
-#if ENABLE(CONTENT_EXTENSIONS)
-    ContentExtensions::ContentExtensionsBackend&amp; userContentExtensionBackend() override { static NeverDestroyed&lt;ContentExtensions::ContentExtensionsBackend&gt; backend; return backend.get(); };
-#endif
-};
-
-class EmptyVisitedLinkStore final : public VisitedLinkStore {
</del><ins>+class EmptyVisitedLinkStore : public VisitedLinkStore {
</ins><span class="cx">     bool isLinkVisited(Page&amp;, LinkHash, const URL&amp;, const AtomicString&amp;) override { return false; }
</span><span class="cx">     void addVisitedLink(Page&amp;, LinkHash) override { }
</span><span class="cx"> };
</span><span class="lines">@@ -144,7 +132,6 @@
</span><span class="cx"> 
</span><span class="cx">     pageConfiguration.databaseProvider = adoptRef(new EmptyDatabaseProvider);
</span><span class="cx">     pageConfiguration.storageNamespaceProvider = adoptRef(new EmptyStorageNamespaceProvider);
</span><del>-    pageConfiguration.userContentProvider = adoptRef(new EmptyUserContentProvider);
</del><span class="cx">     pageConfiguration.visitedLinkStore = adoptRef(new EmptyVisitedLinkStore);
</span><span class="cx"> 
</span><span class="cx"> #if USE(APPLE_INTERNAL_SDK)
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderEmptyClientsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/EmptyClients.h (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/EmptyClients.h        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/loader/EmptyClients.h        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -36,6 +36,7 @@
</span><span class="cx"> #include &quot;DiagnosticLoggingClient.h&quot;
</span><span class="cx"> #include &quot;DragClient.h&quot;
</span><span class="cx"> #include &quot;EditorClient.h&quot;
</span><ins>+#include &quot;TextCheckerClient.h&quot;
</ins><span class="cx"> #include &quot;FloatRect.h&quot;
</span><span class="cx"> #include &quot;FocusDirection.h&quot;
</span><span class="cx"> #include &quot;FrameLoaderClient.h&quot;
</span><span class="lines">@@ -43,18 +44,9 @@
</span><span class="cx"> #include &quot;Page.h&quot;
</span><span class="cx"> #include &quot;ProgressTrackerClient.h&quot;
</span><span class="cx"> #include &quot;ResourceError.h&quot;
</span><del>-#include &quot;TextCheckerClient.h&quot;
</del><span class="cx"> #include &quot;VisitedLinkStore.h&quot;
</span><span class="cx"> #include &lt;wtf/text/StringView.h&gt;
</span><span class="cx"> 
</span><del>-#if ENABLE(USER_MESSAGE_HANDLERS)
-#include &quot;UserMessageHandlerDescriptor.h&quot;
-#endif
-
-#if ENABLE(CONTENT_EXTENSIONS)
-#include &quot;CompiledContentExtension.h&quot;
-#endif
-
</del><span class="cx"> /*
</span><span class="cx">  This file holds empty Client stubs for use by WebCore.
</span><span class="cx">  Viewless element needs to create a dummy Page-&gt;Frame-&gt;FrameView tree for use in parsing or executing JavaScript.
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderFrameLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/FrameLoader.cpp (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/FrameLoader.cpp        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/loader/FrameLoader.cpp        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -2730,11 +2730,13 @@
</span><span class="cx"> #if ENABLE(CONTENT_EXTENSIONS)
</span><span class="cx">     if (error.isNull()) {
</span><span class="cx">         if (auto* page = m_frame.page()) {
</span><del>-            if (m_documentLoader &amp;&amp; page-&gt;userContentProvider().processContentExtensionRulesForLoad(newRequest, ResourceType::Raw, *m_documentLoader) == ContentExtensions::BlockedStatus::Blocked) {
-                newRequest = { };
-                error = ResourceError(errorDomainWebKitInternal, 0, initialRequest.url(), emptyString());
-                response = { };
-                data = nullptr;
</del><ins>+            if (auto* controller = page-&gt;userContentController()) {
+                if (m_documentLoader &amp;&amp; controller-&gt;processContentExtensionRulesForLoad(newRequest, ResourceType::Raw, *m_documentLoader) == ContentExtensions::BlockedStatus::Blocked) {
+                    newRequest = { };
+                    error = ResourceError(errorDomainWebKitInternal, 0, initialRequest.url(), emptyString());
+                    response = { };
+                    data = nullptr;
+                }
</ins><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderPingLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/PingLoader.cpp (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/PingLoader.cpp        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/loader/PingLoader.cpp        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -59,8 +59,10 @@
</span><span class="cx"> static ContentExtensions::BlockedStatus processContentExtensionRulesForLoad(const Frame&amp; frame, ResourceRequest&amp; request, ResourceType resourceType)
</span><span class="cx"> {
</span><span class="cx">     if (DocumentLoader* documentLoader = frame.loader().documentLoader()) {
</span><del>-        if (Page* page = frame.page())
-            return page-&gt;userContentProvider().processContentExtensionRulesForLoad(request, resourceType, *documentLoader);
</del><ins>+        if (Page* page = frame.page()) {
+            if (UserContentController* controller = page-&gt;userContentController())
+                return controller-&gt;processContentExtensionRulesForLoad(request, resourceType, *documentLoader);
+        }
</ins><span class="cx">     }
</span><span class="cx">     return ContentExtensions::BlockedStatus::NotBlocked;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderResourceLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ResourceLoader.cpp (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ResourceLoader.cpp        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/loader/ResourceLoader.cpp        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -346,7 +346,8 @@
</span><span class="cx">     if (frameLoader()) {
</span><span class="cx">         Page* page = frameLoader()-&gt;frame().page();
</span><span class="cx">         if (page &amp;&amp; m_documentLoader) {
</span><del>-            if (page-&gt;userContentProvider().processContentExtensionRulesForLoad(request, m_resourceType, *m_documentLoader) == ContentExtensions::BlockedStatus::Blocked)
</del><ins>+            auto* userContentController = page-&gt;userContentController();
+            if (userContentController &amp;&amp; userContentController-&gt;processContentExtensionRulesForLoad(request, m_resourceType, *m_documentLoader) == ContentExtensions::BlockedStatus::Blocked)
</ins><span class="cx">                 request = { };
</span><span class="cx">         }
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCoreloadercacheCachedResourceLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -542,8 +542,8 @@
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CONTENT_EXTENSIONS)
</span><del>-    if (frame() &amp;&amp; frame()-&gt;mainFrame().page() &amp;&amp; m_documentLoader) {
-        if (frame()-&gt;mainFrame().page()-&gt;userContentProvider().processContentExtensionRulesForLoad(request.mutableResourceRequest(), toResourceType(type), *m_documentLoader) == ContentExtensions::BlockedStatus::Blocked) {
</del><ins>+    if (frame() &amp;&amp; frame()-&gt;mainFrame().page() &amp;&amp; frame()-&gt;mainFrame().page()-&gt;userContentController() &amp;&amp; m_documentLoader) {
+        if (frame()-&gt;mainFrame().page()-&gt;userContentController()-&gt;processContentExtensionRulesForLoad(request.mutableResourceRequest(), toResourceType(type), *m_documentLoader) == ContentExtensions::BlockedStatus::Blocked) {
</ins><span class="cx">             if (type == CachedResource::Type::MainResource) {
</span><span class="cx">                 auto resource = createResource(type, request.mutableResourceRequest(), request.charset(), sessionID());
</span><span class="cx">                 ASSERT(resource);
</span></span></pre></div>
<a id="trunkSourceWebCorepageDOMWindowcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/DOMWindow.cpp (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/DOMWindow.cpp        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/page/DOMWindow.cpp        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -761,7 +761,15 @@
</span><span class="cx">     if (!page)
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    for (auto&amp; descriptor : page-&gt;userContentProvider().userMessageHandlerDescriptors().values()) {
</del><ins>+    auto* userContentController = page-&gt;userContentController();
+    if (!userContentController)
+        return false;
+
+    auto* descriptorMap = userContentController-&gt;userMessageHandlerDescriptors();
+    if (!descriptorMap)
+        return false;
+
+    for (auto&amp; descriptor : descriptorMap-&gt;values()) {
</ins><span class="cx">         if (&amp;descriptor-&gt;world() == &amp;world)
</span><span class="cx">             return true;
</span><span class="cx">     }
</span><span class="lines">@@ -2160,10 +2168,11 @@
</span><span class="cx"> #if ENABLE(CONTENT_EXTENSIONS)
</span><span class="cx">     if (firstFrame-&gt;document()
</span><span class="cx">         &amp;&amp; firstFrame-&gt;mainFrame().page()
</span><ins>+        &amp;&amp; firstFrame-&gt;mainFrame().page()-&gt;userContentController()
</ins><span class="cx">         &amp;&amp; firstFrame-&gt;mainFrame().document()
</span><span class="cx">         &amp;&amp; firstFrame-&gt;mainFrame().document()-&gt;loader()) {
</span><del>-        ResourceLoadInfo resourceLoadInfo = { firstFrame-&gt;document()-&gt;completeURL(urlString), firstFrame-&gt;mainFrame().document()-&gt;url(), ResourceType::Popup };
-        Vector&lt;ContentExtensions::Action&gt; actions = firstFrame-&gt;mainFrame().page()-&gt;userContentProvider().actionsForResourceLoad(resourceLoadInfo, *firstFrame-&gt;mainFrame().document()-&gt;loader());
</del><ins>+        ResourceLoadInfo resourceLoadInfo = {firstFrame-&gt;document()-&gt;completeURL(urlString), firstFrame-&gt;mainFrame().document()-&gt;url(), ResourceType::Popup};
+        Vector&lt;ContentExtensions::Action&gt; actions = firstFrame-&gt;mainFrame().page()-&gt;userContentController()-&gt;actionsForResourceLoad(resourceLoadInfo, *firstFrame-&gt;mainFrame().document()-&gt;loader());
</ins><span class="cx">         for (const ContentExtensions::Action&amp; action : actions) {
</span><span class="cx">             if (action.type() == ContentExtensions::ActionType::BlockLoad)
</span><span class="cx">                 return nullptr;
</span></span></pre></div>
<a id="trunkSourceWebCorepageFramecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Frame.cpp (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Frame.cpp        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/page/Frame.cpp        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -689,19 +689,37 @@
</span><span class="cx">     if (loader().stateMachine().creatingInitialEmptyDocument() &amp;&amp; !settings().shouldInjectUserScriptsInInitialEmptyDocument())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    Document* document = this-&gt;document();
-    if (!document)
</del><ins>+    const auto* userContentController = m_page-&gt;userContentController();
+    if (!userContentController)
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    m_page-&gt;userContentProvider().forEachUserScript([&amp;](DOMWrapperWorld&amp; world, const UserScript&amp; script) {
-        if (script.injectedFrames() == InjectInTopFrameOnly &amp;&amp; ownerElement())
-            return;
</del><ins>+    // Walk the hashtable. Inject by world.
+    const UserScriptMap* userScripts = userContentController-&gt;userScripts();
+    if (!userScripts)
+        return;
</ins><span class="cx"> 
</span><del>-        if (script.injectionTime() == injectionTime &amp;&amp; UserContentURLPattern::matchesPatterns(document-&gt;url(), script.whitelist(), script.blacklist()))
-            m_script-&gt;evaluateInWorld(ScriptSourceCode(script.source(), script.url()), world);
-    });
</del><ins>+    for (const auto&amp; worldAndUserScript : *userScripts)
+        injectUserScriptsForWorld(*worldAndUserScript.key, *worldAndUserScript.value, injectionTime);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void Frame::injectUserScriptsForWorld(DOMWrapperWorld&amp; world, const UserScriptVector&amp; userScripts, UserScriptInjectionTime injectionTime)
+{
+    if (userScripts.isEmpty())
+        return;
+
+    Document* doc = document();
+    if (!doc)
+        return;
+
+    for (auto&amp; script : userScripts) {
+        if (script-&gt;injectedFrames() == InjectInTopFrameOnly &amp;&amp; ownerElement())
+            continue;
+
+        if (script-&gt;injectionTime() == injectionTime &amp;&amp; UserContentURLPattern::matchesPatterns(doc-&gt;url(), script-&gt;whitelist(), script-&gt;blacklist()))
+            m_script-&gt;evaluateInWorld(ScriptSourceCode(script-&gt;source(), script-&gt;url()), world);
+    }
+}
+
</ins><span class="cx"> RenderView* Frame::contentRenderer() const
</span><span class="cx"> {
</span><span class="cx">     return document() ? document()-&gt;renderView() : nullptr;
</span></span></pre></div>
<a id="trunkSourceWebCorepageFrameh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Frame.h (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Frame.h        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/page/Frame.h        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -280,6 +280,8 @@
</span><span class="cx">         Frame(Page&amp;, HTMLFrameOwnerElement*, FrameLoaderClient&amp;);
</span><span class="cx"> 
</span><span class="cx">     private:
</span><ins>+        void injectUserScriptsForWorld(DOMWrapperWorld&amp;, const UserScriptVector&amp;, UserScriptInjectionTime);
+
</ins><span class="cx">         HashSet&lt;FrameDestructionObserver*&gt; m_destructionObservers;
</span><span class="cx"> 
</span><span class="cx">         MainFrame&amp; m_mainFrame;
</span></span></pre></div>
<a id="trunkSourceWebCorepagePagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Page.cpp (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Page.cpp        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/page/Page.cpp        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -87,7 +87,7 @@
</span><span class="cx"> #include &quot;StyleResolver.h&quot;
</span><span class="cx"> #include &quot;SubframeLoader.h&quot;
</span><span class="cx"> #include &quot;TextResourceDecoder.h&quot;
</span><del>-#include &quot;UserContentProvider.h&quot;
</del><ins>+#include &quot;UserContentController.h&quot;
</ins><span class="cx"> #include &quot;UserInputBridge.h&quot;
</span><span class="cx"> #include &quot;ViewStateChangeObserver.h&quot;
</span><span class="cx"> #include &quot;VisitedLinkState.h&quot;
</span><span class="lines">@@ -231,7 +231,7 @@
</span><span class="cx">     , m_applicationCacheStorage(pageConfiguration.applicationCacheStorage ? *WTFMove(pageConfiguration.applicationCacheStorage) : ApplicationCacheStorage::singleton())
</span><span class="cx">     , m_databaseProvider(*WTFMove(pageConfiguration.databaseProvider))
</span><span class="cx">     , m_storageNamespaceProvider(*WTFMove(pageConfiguration.storageNamespaceProvider))
</span><del>-    , m_userContentProvider(*WTFMove(pageConfiguration.userContentProvider))
</del><ins>+    , m_userContentController(WTFMove(pageConfiguration.userContentController))
</ins><span class="cx">     , m_visitedLinkStore(*WTFMove(pageConfiguration.visitedLinkStore))
</span><span class="cx">     , m_sessionID(SessionID::defaultSessionID())
</span><span class="cx">     , m_isClosing(false)
</span><span class="lines">@@ -240,7 +240,9 @@
</span><span class="cx"> 
</span><span class="cx">     m_storageNamespaceProvider-&gt;addPage(*this);
</span><span class="cx"> 
</span><del>-    m_userContentProvider-&gt;addPage(*this);
</del><ins>+    if (m_userContentController)
+        m_userContentController-&gt;addPage(*this);
+
</ins><span class="cx">     m_visitedLinkStore-&gt;addPage(*this);
</span><span class="cx"> 
</span><span class="cx">     if (!allPages) {
</span><span class="lines">@@ -296,7 +298,9 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     m_storageNamespaceProvider-&gt;removePage(*this);
</span><del>-    m_userContentProvider-&gt;removePage(*this);
</del><ins>+
+    if (m_userContentController)
+        m_userContentController-&gt;removePage(*this);
</ins><span class="cx">     m_visitedLinkStore-&gt;removePage(*this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1815,17 +1819,16 @@
</span><span class="cx">     return !m_forbidPromptsDepth;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-UserContentProvider&amp; Page::userContentProvider()
</del><ins>+void Page::setUserContentController(UserContentController* userContentController)
</ins><span class="cx"> {
</span><del>-    return m_userContentProvider;
-}
</del><ins>+    if (m_userContentController)
+        m_userContentController-&gt;removePage(*this);
</ins><span class="cx"> 
</span><del>-void Page::setUserContentProvider(Ref&lt;UserContentProvider&gt;&amp;&amp; userContentProvider)
-{
-    m_userContentProvider-&gt;removePage(*this);
-    m_userContentProvider = WTFMove(userContentProvider);
-    m_userContentProvider-&gt;addPage(*this);
</del><ins>+    m_userContentController = userContentController;
</ins><span class="cx"> 
</span><ins>+    if (m_userContentController)
+        m_userContentController-&gt;addPage(*this);
+
</ins><span class="cx">     invalidateInjectedStyleSheetCacheInAllFrames();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepagePageh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Page.h (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Page.h        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/page/Page.h        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -121,7 +121,7 @@
</span><span class="cx"> class Settings;
</span><span class="cx"> class StorageNamespace;
</span><span class="cx"> class StorageNamespaceProvider;
</span><del>-class UserContentProvider;
</del><ins>+class UserContentController;
</ins><span class="cx"> class ValidationMessageClient;
</span><span class="cx"> class ViewStateChangeObserver;
</span><span class="cx"> class VisitedLinkStore;
</span><span class="lines">@@ -450,8 +450,8 @@
</span><span class="cx">     StorageNamespaceProvider&amp; storageNamespaceProvider() { return m_storageNamespaceProvider.get(); }
</span><span class="cx">     void setStorageNamespaceProvider(Ref&lt;StorageNamespaceProvider&gt;&amp;&amp;);
</span><span class="cx"> 
</span><del>-    UserContentProvider&amp; userContentProvider();
-    WEBCORE_EXPORT void setUserContentProvider(Ref&lt;UserContentProvider&gt;&amp;&amp;);
</del><ins>+    UserContentController* userContentController() { return m_userContentController.get(); }
+    WEBCORE_EXPORT void setUserContentController(UserContentController*);
</ins><span class="cx"> 
</span><span class="cx">     VisitedLinkStore&amp; visitedLinkStore();
</span><span class="cx">     WEBCORE_EXPORT void setVisitedLinkStore(Ref&lt;VisitedLinkStore&gt;&amp;&amp;);
</span><span class="lines">@@ -676,7 +676,7 @@
</span><span class="cx">     Ref&lt;ApplicationCacheStorage&gt; m_applicationCacheStorage;
</span><span class="cx">     Ref&lt;DatabaseProvider&gt; m_databaseProvider;
</span><span class="cx">     Ref&lt;StorageNamespaceProvider&gt; m_storageNamespaceProvider;
</span><del>-    Ref&lt;UserContentProvider&gt; m_userContentProvider;
</del><ins>+    RefPtr&lt;UserContentController&gt; m_userContentController;
</ins><span class="cx">     Ref&lt;VisitedLinkStore&gt; m_visitedLinkStore;
</span><span class="cx">     RefPtr&lt;WheelEventTestTrigger&gt; m_testTrigger;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepagePageConfigurationh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/PageConfiguration.h (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/PageConfiguration.h        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/page/PageConfiguration.h        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx"> class PlugInClient;
</span><span class="cx"> class ProgressTrackerClient;
</span><span class="cx"> class StorageNamespaceProvider;
</span><del>-class UserContentProvider;
</del><ins>+class UserContentController;
</ins><span class="cx"> class ValidationMessageClient;
</span><span class="cx"> class VisitedLinkStore;
</span><span class="cx"> 
</span><span class="lines">@@ -84,7 +84,7 @@
</span><span class="cx">     RefPtr&lt;ApplicationCacheStorage&gt; applicationCacheStorage;
</span><span class="cx">     RefPtr&lt;DatabaseProvider&gt; databaseProvider;
</span><span class="cx">     RefPtr&lt;StorageNamespaceProvider&gt; storageNamespaceProvider;
</span><del>-    RefPtr&lt;UserContentProvider&gt; userContentProvider;
</del><ins>+    RefPtr&lt;UserContentController&gt; userContentController;
</ins><span class="cx">     RefPtr&lt;VisitedLinkStore&gt; visitedLinkStore;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepageUserContentControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/UserContentController.cpp (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/UserContentController.cpp        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/page/UserContentController.cpp        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -27,15 +27,24 @@
</span><span class="cx"> #include &quot;UserContentController.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;DOMWrapperWorld.h&quot;
</span><ins>+#include &quot;Document.h&quot;
+#include &quot;DocumentLoader.h&quot;
+#include &quot;ExtensionStyleSheets.h&quot;
+#include &quot;MainFrame.h&quot;
+#include &quot;Page.h&quot;
+#include &quot;ResourceLoadInfo.h&quot;
</ins><span class="cx"> #include &quot;UserScript.h&quot;
</span><span class="cx"> #include &quot;UserStyleSheet.h&quot;
</span><ins>+#include &lt;runtime/JSCellInlines.h&gt;
+#include &lt;runtime/StructureInlines.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(USER_MESSAGE_HANDLERS)
</span><span class="cx"> #include &quot;UserMessageHandlerDescriptor.h&quot;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CONTENT_EXTENSIONS)
</span><del>-#include &quot;CompiledContentExtension.h&quot;
</del><ins>+#include &quot;ContentExtensionCompiler.h&quot;
+#include &quot;ContentExtensionsBackend.h&quot;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -53,35 +62,38 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void UserContentController::forEachUserScript(const std::function&lt;void(DOMWrapperWorld&amp;, const UserScript&amp;)&gt;&amp; functor) const
</del><ins>+void UserContentController::addPage(Page&amp; page)
</ins><span class="cx"> {
</span><del>-    for (const auto&amp; worldAndUserScriptVector : m_userScripts) {
-        auto&amp; world = *worldAndUserScriptVector.key.get();
-        for (const auto&amp; userScript : *worldAndUserScriptVector.value)
-            functor(world, *userScript);
-    }
</del><ins>+    ASSERT(!m_pages.contains(&amp;page));
+    m_pages.add(&amp;page);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void UserContentController::forEachUserStyleSheet(const std::function&lt;void(const UserStyleSheet&amp;)&gt;&amp; functor) const
</del><ins>+void UserContentController::removePage(Page&amp; page)
</ins><span class="cx"> {
</span><del>-    for (auto&amp; styleSheetVector : m_userStyleSheets.values()) {
-        for (const auto&amp; styleSheet : *styleSheetVector)
-            functor(*styleSheet);
-    }
</del><ins>+    ASSERT(m_pages.contains(&amp;page));
+    m_pages.remove(&amp;page);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UserContentController::addUserScript(DOMWrapperWorld&amp; world, std::unique_ptr&lt;UserScript&gt; userScript)
</span><span class="cx"> {
</span><del>-    auto&amp; scriptsInWorld = m_userScripts.ensure(&amp;world, [&amp;] { return std::make_unique&lt;UserScriptVector&gt;(); }).iterator-&gt;value;
</del><ins>+    if (!m_userScripts)
+        m_userScripts = std::make_unique&lt;UserScriptMap&gt;();
+
+    auto&amp; scriptsInWorld = m_userScripts-&gt;add(&amp;world, nullptr).iterator-&gt;value;
+    if (!scriptsInWorld)
+        scriptsInWorld = std::make_unique&lt;UserScriptVector&gt;();
</ins><span class="cx">     scriptsInWorld-&gt;append(WTFMove(userScript));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UserContentController::removeUserScript(DOMWrapperWorld&amp; world, const URL&amp; url)
</span><span class="cx"> {
</span><del>-    auto it = m_userScripts.find(&amp;world);
-    if (it == m_userScripts.end())
</del><ins>+    if (!m_userScripts)
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><ins>+    auto it = m_userScripts-&gt;find(&amp;world);
+    if (it == m_userScripts-&gt;end())
+        return;
+
</ins><span class="cx">     auto scripts = it-&gt;value.get();
</span><span class="cx">     for (int i = scripts-&gt;size() - 1; i &gt;= 0; --i) {
</span><span class="cx">         if (scripts-&gt;at(i)-&gt;url() == url)
</span><span class="lines">@@ -89,17 +101,25 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (scripts-&gt;isEmpty())
</span><del>-        m_userScripts.remove(it);
</del><ins>+        m_userScripts-&gt;remove(it);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UserContentController::removeUserScripts(DOMWrapperWorld&amp; world)
</span><span class="cx"> {
</span><del>-    m_userScripts.remove(&amp;world);
</del><ins>+    if (!m_userScripts)
+        return;
+
+    m_userScripts-&gt;remove(&amp;world);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UserContentController::addUserStyleSheet(DOMWrapperWorld&amp; world, std::unique_ptr&lt;UserStyleSheet&gt; userStyleSheet, UserStyleInjectionTime injectionTime)
</span><span class="cx"> {
</span><del>-    auto&amp; styleSheetsInWorld = m_userStyleSheets.ensure(&amp;world, [&amp;] { return std::make_unique&lt;UserStyleSheetVector&gt;(); }).iterator-&gt;value;
</del><ins>+    if (!m_userStyleSheets)
+        m_userStyleSheets = std::make_unique&lt;UserStyleSheetMap&gt;();
+
+    auto&amp; styleSheetsInWorld = m_userStyleSheets-&gt;add(&amp;world, nullptr).iterator-&gt;value;
+    if (!styleSheetsInWorld)
+        styleSheetsInWorld = std::make_unique&lt;UserStyleSheetVector&gt;();
</ins><span class="cx">     styleSheetsInWorld-&gt;append(WTFMove(userStyleSheet));
</span><span class="cx"> 
</span><span class="cx">     if (injectionTime == InjectInExistingDocuments)
</span><span class="lines">@@ -108,10 +128,13 @@
</span><span class="cx"> 
</span><span class="cx"> void UserContentController::removeUserStyleSheet(DOMWrapperWorld&amp; world, const URL&amp; url)
</span><span class="cx"> {
</span><del>-    auto it = m_userStyleSheets.find(&amp;world);
-    if (it == m_userStyleSheets.end())
</del><ins>+    if (!m_userStyleSheets)
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><ins>+    auto it = m_userStyleSheets-&gt;find(&amp;world);
+    if (it == m_userStyleSheets-&gt;end())
+        return;
+
</ins><span class="cx">     auto&amp; stylesheets = *it-&gt;value;
</span><span class="cx"> 
</span><span class="cx">     bool sheetsChanged = false;
</span><span class="lines">@@ -126,56 +149,114 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     if (stylesheets.isEmpty())
</span><del>-        m_userStyleSheets.remove(it);
</del><ins>+        m_userStyleSheets-&gt;remove(it);
</ins><span class="cx"> 
</span><span class="cx">     invalidateInjectedStyleSheetCacheInAllFramesInAllPages();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UserContentController::removeUserStyleSheets(DOMWrapperWorld&amp; world)
</span><span class="cx"> {
</span><del>-    if (!m_userStyleSheets.remove(&amp;world))
</del><ins>+    if (!m_userStyleSheets)
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><ins>+    if (!m_userStyleSheets-&gt;remove(&amp;world))
+        return;
+
</ins><span class="cx">     invalidateInjectedStyleSheetCacheInAllFramesInAllPages();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(USER_MESSAGE_HANDLERS)
</span><span class="cx"> void UserContentController::addUserMessageHandlerDescriptor(UserMessageHandlerDescriptor&amp; descriptor)
</span><span class="cx"> {
</span><del>-    m_userMessageHandlerDescriptors.add(std::make_pair(descriptor.name(), &amp;descriptor.world()), &amp;descriptor);
</del><ins>+    if (!m_userMessageHandlerDescriptors)
+        m_userMessageHandlerDescriptors = std::make_unique&lt;UserMessageHandlerDescriptorMap&gt;();
+
+    m_userMessageHandlerDescriptors-&gt;add(std::make_pair(descriptor.name(), &amp;descriptor.world()), &amp;descriptor);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UserContentController::removeUserMessageHandlerDescriptor(UserMessageHandlerDescriptor&amp; descriptor)
</span><span class="cx"> {
</span><del>-    m_userMessageHandlerDescriptors.remove(std::make_pair(descriptor.name(), &amp;descriptor.world()));
</del><ins>+    if (!m_userMessageHandlerDescriptors)
+        return;
+
+    m_userMessageHandlerDescriptors-&gt;remove(std::make_pair(descriptor.name(), &amp;descriptor.world()));
</ins><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CONTENT_EXTENSIONS)
</span><span class="cx"> void UserContentController::addUserContentExtension(const String&amp; name, RefPtr&lt;ContentExtensions::CompiledContentExtension&gt; contentExtension)
</span><span class="cx"> {
</span><del>-    m_contentExtensionBackend.addContentExtension(name, contentExtension);
</del><ins>+    if (!m_contentExtensionBackend)
+        m_contentExtensionBackend = std::make_unique&lt;ContentExtensions::ContentExtensionsBackend&gt;();
+    
+    m_contentExtensionBackend-&gt;addContentExtension(name, contentExtension);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UserContentController::removeUserContentExtension(const String&amp; name)
</span><span class="cx"> {
</span><del>-    m_contentExtensionBackend.removeContentExtension(name);
</del><ins>+    if (!m_contentExtensionBackend)
+        return;
+
+    m_contentExtensionBackend-&gt;removeContentExtension(name);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UserContentController::removeAllUserContentExtensions()
</span><span class="cx"> {
</span><del>-    m_contentExtensionBackend.removeAllContentExtensions();
</del><ins>+    if (!m_contentExtensionBackend)
+        return;
+
+    m_contentExtensionBackend-&gt;removeAllContentExtensions();
</ins><span class="cx"> }
</span><ins>+
+static bool contentExtensionsEnabled(const DocumentLoader&amp; documentLoader)
+{
+    if (auto frame = documentLoader.frame()) {
+        if (frame-&gt;isMainFrame())
+            return documentLoader.userContentExtensionsEnabled();
+        if (auto mainDocumentLoader = frame-&gt;mainFrame().loader().documentLoader())
+            return mainDocumentLoader-&gt;userContentExtensionsEnabled();
+    }
+
+    return true;
+}
+    
+ContentExtensions::BlockedStatus UserContentController::processContentExtensionRulesForLoad(ResourceRequest&amp; request, ResourceType resourceType, DocumentLoader&amp; initiatingDocumentLoader)
+{
+    if (!m_contentExtensionBackend)
+        return ContentExtensions::BlockedStatus::NotBlocked;
+
+    if (!contentExtensionsEnabled(initiatingDocumentLoader))
+        return ContentExtensions::BlockedStatus::NotBlocked;
+
+    return m_contentExtensionBackend-&gt;processContentExtensionRulesForLoad(request, resourceType, initiatingDocumentLoader);
+}
+
+Vector&lt;ContentExtensions::Action&gt; UserContentController::actionsForResourceLoad(const ResourceLoadInfo&amp; resourceLoadInfo, DocumentLoader&amp; initiatingDocumentLoader)
+{
+    if (!m_contentExtensionBackend)
+        return Vector&lt;ContentExtensions::Action&gt;();
+    
+    if (!contentExtensionsEnabled(initiatingDocumentLoader))
+        return Vector&lt;ContentExtensions::Action&gt;();
+
+    return m_contentExtensionBackend-&gt;actionsForResourceLoad(resourceLoadInfo);
+}
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> void UserContentController::removeAllUserContent()
</span><span class="cx"> {
</span><del>-    m_userScripts.clear();
</del><ins>+    m_userScripts = nullptr;
</ins><span class="cx"> 
</span><del>-    if (!m_userStyleSheets.isEmpty()) {
-        m_userStyleSheets.clear();
</del><ins>+    if (m_userStyleSheets) {
+        m_userStyleSheets = nullptr;
</ins><span class="cx">         invalidateInjectedStyleSheetCacheInAllFramesInAllPages();
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void UserContentController::invalidateInjectedStyleSheetCacheInAllFramesInAllPages()
+{
+    for (auto&amp; page : m_pages)
+        page-&gt;invalidateInjectedStyleSheetCacheInAllFrames();
+}
+
</ins><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorepageUserContentControllerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/UserContentController.h (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/UserContentController.h        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/page/UserContentController.h        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -26,19 +26,58 @@
</span><span class="cx"> #ifndef UserContentController_h
</span><span class="cx"> #define UserContentController_h
</span><span class="cx"> 
</span><del>-#include &quot;UserContentProvider.h&quot;
</del><ins>+#include &quot;UserScriptTypes.h&quot;
+#include &quot;UserStyleSheetTypes.h&quot;
+#include &lt;wtf/HashSet.h&gt;
+#include &lt;wtf/RefCounted.h&gt;
+#include &lt;wtf/RefPtr.h&gt;
</ins><span class="cx"> 
</span><ins>+#if ENABLE(USER_MESSAGE_HANDLERS)
+#include &quot;UserMessageHandlerDescriptorTypes.h&quot;
+#endif
+
+#if ENABLE(CONTENT_EXTENSIONS)
+#include &quot;ContentExtensionActions.h&quot;
+#endif
+
</ins><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class UserContentController final : public UserContentProvider {
</del><ins>+class DOMWrapperWorld;
+class DocumentLoader;
+class Page;
+class ResourceRequest;
+class StyleSheetContents;
+class URL;
+class UserScript;
+class UserStyleSheet;
+class UserMessageHandlerDescriptor;
+
+enum class ResourceType : uint16_t;
+
+struct ResourceLoadInfo;
+
+namespace ContentExtensions {
+class CompiledContentExtension;
+class ContentExtensionsBackend;
+struct Action;
+}
+
+class UserContentController : public RefCounted&lt;UserContentController&gt; {
</ins><span class="cx"> public:
</span><span class="cx">     WEBCORE_EXPORT static Ref&lt;UserContentController&gt; create();
</span><span class="cx">     WEBCORE_EXPORT ~UserContentController();
</span><span class="cx"> 
</span><ins>+    void addPage(Page&amp;);
+    void removePage(Page&amp;);
+
+    const UserScriptMap* userScripts() const { return m_userScripts.get(); }
+
</ins><span class="cx">     WEBCORE_EXPORT void addUserScript(DOMWrapperWorld&amp;, std::unique_ptr&lt;UserScript&gt;);
</span><span class="cx">     WEBCORE_EXPORT void removeUserScript(DOMWrapperWorld&amp;, const URL&amp;);
</span><span class="cx">     WEBCORE_EXPORT void removeUserScripts(DOMWrapperWorld&amp;);
</span><span class="cx"> 
</span><ins>+    const UserStyleSheetMap* userStyleSheets() const { return m_userStyleSheets.get(); }
+
</ins><span class="cx">     WEBCORE_EXPORT void addUserStyleSheet(DOMWrapperWorld&amp;, std::unique_ptr&lt;UserStyleSheet&gt;, UserStyleInjectionTime);
</span><span class="cx">     WEBCORE_EXPORT void removeUserStyleSheet(DOMWrapperWorld&amp;, const URL&amp;);
</span><span class="cx">     WEBCORE_EXPORT void removeUserStyleSheets(DOMWrapperWorld&amp;);
</span><span class="lines">@@ -46,6 +85,8 @@
</span><span class="cx">     WEBCORE_EXPORT void removeAllUserContent();
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(USER_MESSAGE_HANDLERS)
</span><ins>+    const UserMessageHandlerDescriptorMap* userMessageHandlerDescriptors() const { return m_userMessageHandlerDescriptors.get(); }
+
</ins><span class="cx">     WEBCORE_EXPORT void addUserMessageHandlerDescriptor(UserMessageHandlerDescriptor&amp;);
</span><span class="cx">     WEBCORE_EXPORT void removeUserMessageHandlerDescriptor(UserMessageHandlerDescriptor&amp;);
</span><span class="cx"> #endif
</span><span class="lines">@@ -54,28 +95,25 @@
</span><span class="cx">     WEBCORE_EXPORT void addUserContentExtension(const String&amp; name, RefPtr&lt;ContentExtensions::CompiledContentExtension&gt;);
</span><span class="cx">     WEBCORE_EXPORT void removeUserContentExtension(const String&amp; name);
</span><span class="cx">     WEBCORE_EXPORT void removeAllUserContentExtensions();
</span><ins>+
+    ContentExtensions::BlockedStatus processContentExtensionRulesForLoad(ResourceRequest&amp;, ResourceType, DocumentLoader&amp; initiatingDocumentLoader);
+    Vector&lt;ContentExtensions::Action&gt; actionsForResourceLoad(const ResourceLoadInfo&amp;, DocumentLoader&amp; initiatingDocumentLoader);
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     UserContentController();
</span><span class="cx"> 
</span><del>-    // UserContentProvider
-    void forEachUserScript(const std::function&lt;void(DOMWrapperWorld&amp;, const UserScript&amp;)&gt;&amp;) const override;
-    void forEachUserStyleSheet(const std::function&lt;void(const UserStyleSheet&amp;)&gt;&amp;) const override;
-#if ENABLE(USER_MESSAGE_HANDLERS)
-    const UserMessageHandlerDescriptorMap&amp; userMessageHandlerDescriptors() const override { return m_userMessageHandlerDescriptors; }
-#endif
-#if ENABLE(CONTENT_EXTENSIONS)
-    ContentExtensions::ContentExtensionsBackend&amp; userContentExtensionBackend() override { return m_contentExtensionBackend; }
-#endif
</del><ins>+    void invalidateInjectedStyleSheetCacheInAllFramesInAllPages();
</ins><span class="cx"> 
</span><del>-    UserScriptMap m_userScripts;
-    UserStyleSheetMap m_userStyleSheets;
</del><ins>+    HashSet&lt;Page*&gt; m_pages;
+
+    std::unique_ptr&lt;UserScriptMap&gt; m_userScripts;
+    std::unique_ptr&lt;UserStyleSheetMap&gt; m_userStyleSheets;
</ins><span class="cx"> #if ENABLE(USER_MESSAGE_HANDLERS)
</span><del>-    UserMessageHandlerDescriptorMap m_userMessageHandlerDescriptors;
</del><ins>+    std::unique_ptr&lt;UserMessageHandlerDescriptorMap&gt; m_userMessageHandlerDescriptors;
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(CONTENT_EXTENSIONS)
</span><del>-    ContentExtensions::ContentExtensionsBackend m_contentExtensionBackend;
</del><ins>+    std::unique_ptr&lt;ContentExtensions::ContentExtensionsBackend&gt; m_contentExtensionBackend;
</ins><span class="cx"> #endif
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepageUserContentProvidercpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/page/UserContentProvider.cpp (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/UserContentProvider.cpp        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/page/UserContentProvider.cpp        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -1,100 +0,0 @@
</span><del>-/*
- * Copyright (C) 2016 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.
- */
-
-#include &quot;config.h&quot;
-#include &quot;UserContentProvider.h&quot;
-
-#include &quot;Document.h&quot;
-#include &quot;DocumentLoader.h&quot;
-#include &quot;MainFrame.h&quot;
-#include &quot;Page.h&quot;
-
-#if ENABLE(CONTENT_EXTENSIONS)
-#include &quot;ContentExtensionCompiler.h&quot;
-#include &quot;ContentExtensionsBackend.h&quot;
-#endif
-
-namespace WebCore {
-
-UserContentProvider::UserContentProvider()
-{
-}
-
-UserContentProvider::~UserContentProvider()
-{
-    ASSERT(m_pages.isEmpty());
-}
-
-void UserContentProvider::addPage(Page&amp; page)
-{
-    ASSERT(!m_pages.contains(&amp;page));
-
-    m_pages.add(&amp;page);
-}
-
-void UserContentProvider::removePage(Page&amp; page)
-{
-    ASSERT(m_pages.contains(&amp;page));
-
-    m_pages.remove(&amp;page);
-}
-
-void UserContentProvider::invalidateInjectedStyleSheetCacheInAllFramesInAllPages()
-{
-    for (auto&amp; page : m_pages)
-        page-&gt;invalidateInjectedStyleSheetCacheInAllFrames();
-}
-
-#if ENABLE(CONTENT_EXTENSIONS)
-static bool contentExtensionsEnabled(const DocumentLoader&amp; documentLoader)
-{
-    if (auto frame = documentLoader.frame()) {
-        if (frame-&gt;isMainFrame())
-            return documentLoader.userContentExtensionsEnabled();
-        if (auto mainDocumentLoader = frame-&gt;mainFrame().loader().documentLoader())
-            return mainDocumentLoader-&gt;userContentExtensionsEnabled();
-    }
-
-    return true;
-}
-    
-ContentExtensions::BlockedStatus UserContentProvider::processContentExtensionRulesForLoad(ResourceRequest&amp; request, ResourceType resourceType, DocumentLoader&amp; initiatingDocumentLoader)
-{
-    if (!contentExtensionsEnabled(initiatingDocumentLoader))
-        return ContentExtensions::BlockedStatus::NotBlocked;
-
-    return userContentExtensionBackend().processContentExtensionRulesForLoad(request, resourceType, initiatingDocumentLoader);
-}
-
-Vector&lt;ContentExtensions::Action&gt; UserContentProvider::actionsForResourceLoad(const ResourceLoadInfo&amp; resourceLoadInfo, DocumentLoader&amp; initiatingDocumentLoader)
-{
-    if (!contentExtensionsEnabled(initiatingDocumentLoader))
-        return { };
-
-    return userContentExtensionBackend().actionsForResourceLoad(resourceLoadInfo);
-}
-#endif
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCorepageUserContentProviderh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/page/UserContentProvider.h (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/UserContentProvider.h        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/page/UserContentProvider.h        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -1,97 +0,0 @@
</span><del>-/*
- * Copyright (C) 2016 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.
- */
-
-#ifndef UserContentProvider_h
-#define UserContentProvider_h
-
-#include &quot;UserScriptTypes.h&quot;
-#include &quot;UserStyleSheetTypes.h&quot;
-#include &lt;functional&gt;
-#include &lt;wtf/Forward.h&gt;
-#include &lt;wtf/HashSet.h&gt;
-#include &lt;wtf/RefCounted.h&gt;
-
-#if ENABLE(USER_MESSAGE_HANDLERS)
-#include &quot;UserMessageHandlerDescriptorTypes.h&quot;
-#endif
-
-#if ENABLE(CONTENT_EXTENSIONS)
-#include &quot;ContentExtensionActions.h&quot;
-#include &quot;ContentExtensionsBackend.h&quot;
-#endif
-
-namespace WebCore {
-
-class DocumentLoader;
-class Page;
-class ResourceRequest;
-class URL;
-
-enum class ResourceType : uint16_t;
-
-struct ResourceLoadInfo;
-
-namespace ContentExtensions {
-class ContentExtensionsBackend;
-struct Action;
-}
-
-class UserContentProvider : public RefCounted&lt;UserContentProvider&gt; {
-public:
-    WEBCORE_EXPORT UserContentProvider();
-    WEBCORE_EXPORT virtual ~UserContentProvider();
-
-    virtual void forEachUserScript(const std::function&lt;void(DOMWrapperWorld&amp;, const UserScript&amp;)&gt;&amp;) const = 0;
-    virtual void forEachUserStyleSheet(const std::function&lt;void(const UserStyleSheet&amp;)&gt;&amp;) const = 0;
-
-#if ENABLE(USER_MESSAGE_HANDLERS)
-    virtual const UserMessageHandlerDescriptorMap&amp; userMessageHandlerDescriptors() const = 0;
-#endif
-
-#if ENABLE(CONTENT_EXTENSIONS)
-    virtual ContentExtensions::ContentExtensionsBackend&amp; userContentExtensionBackend() = 0;
-#endif
-
-    void addPage(Page&amp;);
-    void removePage(Page&amp;);
-
-
-#if ENABLE(CONTENT_EXTENSIONS)
-    // FIXME: These don't really belong here. They should probably bundled up in the ContentExtensionsBackend
-    // which should always exist.
-    ContentExtensions::BlockedStatus processContentExtensionRulesForLoad(ResourceRequest&amp;, ResourceType, DocumentLoader&amp; initiatingDocumentLoader);
-    Vector&lt;ContentExtensions::Action&gt; actionsForResourceLoad(const ResourceLoadInfo&amp;, DocumentLoader&amp; initiatingDocumentLoader);
-#endif
-
-protected:
-    WEBCORE_EXPORT void invalidateInjectedStyleSheetCacheInAllFramesInAllPages();
-
-private:
-    HashSet&lt;Page*&gt; m_pages;
-};
-
-} // namespace WebCore
-
-#endif // UserContentProvider_h
</del></span></pre></div>
<a id="trunkSourceWebCorepageUserMessageHandlerDescriptorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/UserMessageHandlerDescriptor.h (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/UserMessageHandlerDescriptor.h        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/page/UserMessageHandlerDescriptor.h        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -54,8 +54,8 @@
</span><span class="cx">     }
</span><span class="cx">     WEBCORE_EXPORT ~UserMessageHandlerDescriptor();
</span><span class="cx"> 
</span><del>-    WEBCORE_EXPORT const AtomicString&amp; name();
-    WEBCORE_EXPORT DOMWrapperWorld&amp; world();
</del><ins>+    const AtomicString&amp; name();
+    DOMWrapperWorld&amp; world();
</ins><span class="cx"> 
</span><span class="cx">     Client* client() const { return m_client; }
</span><span class="cx">     void invalidateClient() { m_client = nullptr; }
</span></span></pre></div>
<a id="trunkSourceWebCorepageUserMessageHandlersNamespacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/UserMessageHandlersNamespace.cpp (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/UserMessageHandlersNamespace.cpp        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebCore/page/UserMessageHandlersNamespace.cpp        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -53,9 +53,15 @@
</span><span class="cx">     if (!page)
</span><span class="cx">         return nullptr;
</span><span class="cx">     
</span><del>-    auto&amp; descriptors = page-&gt;userContentProvider().userMessageHandlerDescriptors();
-    
-    RefPtr&lt;UserMessageHandlerDescriptor&gt; descriptor = descriptors.get(std::make_pair(name, &amp;world));
</del><ins>+    const auto* userContentController = page-&gt;userContentController();
+    if (!userContentController)
+        return nullptr;
+
+    const auto* userMessageHandlerDescriptors = userContentController-&gt;userMessageHandlerDescriptors();
+    if (!userMessageHandlerDescriptors)
+        return nullptr;
+
+    RefPtr&lt;UserMessageHandlerDescriptor&gt; descriptor = userMessageHandlerDescriptors-&gt;get(std::make_pair(name, &amp;world));
</ins><span class="cx">     if (!descriptor)
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><span class="lines">@@ -64,7 +70,7 @@
</span><span class="cx">             return &amp;handler.get();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    auto liveHandlers = descriptors.values();
</del><ins>+    auto liveHandlers = userMessageHandlerDescriptors-&gt;values();
</ins><span class="cx">     m_messageHandlers.removeAllMatching([liveHandlers](const Ref&lt;UserMessageHandler&gt;&amp; handler) {
</span><span class="cx">         for (const auto&amp; liveHandler : liveHandlers) {
</span><span class="cx">             if (liveHandler.get() == &amp;handler-&gt;descriptor())
</span></span></pre></div>
<a id="trunkSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/ChangeLog (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/ChangeLog        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebKit/mac/ChangeLog        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2016-03-10  Commit Queue  &lt;commit-queue@webkit.org&gt;
+
+        Unreviewed, rolling out r197943.
+        https://bugs.webkit.org/show_bug.cgi?id=155317
+
+        This change broke Windows, WinCairo, GTK and EFL builds
+        (Requested by ryanhaddad on #webkit).
+
+        Reverted changeset:
+
+        &quot;Add a baseURL parameter to _WKUserStyleSheet&quot;
+        https://bugs.webkit.org/show_bug.cgi?id=155219
+        http://trac.webkit.org/changeset/197943
+
</ins><span class="cx"> 2016-03-08  Sam Weinig  &lt;sam@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Add a baseURL parameter to _WKUserStyleSheet
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebView.mm (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebView.mm        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebKit/mac/WebView/WebView.mm        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -1004,7 +1004,7 @@
</span><span class="cx">     pageConfiguration.progressTrackerClient = new WebProgressTrackerClient(self);
</span><span class="cx">     pageConfiguration.databaseProvider = &amp;WebDatabaseProvider::singleton();
</span><span class="cx">     pageConfiguration.storageNamespaceProvider = &amp;_private-&gt;group-&gt;storageNamespaceProvider();
</span><del>-    pageConfiguration.userContentProvider = &amp;_private-&gt;group-&gt;userContentController();
</del><ins>+    pageConfiguration.userContentController = &amp;_private-&gt;group-&gt;userContentController();
</ins><span class="cx">     pageConfiguration.visitedLinkStore = &amp;_private-&gt;group-&gt;visitedLinkStore();
</span><span class="cx">     _private-&gt;page = new Page(pageConfiguration);
</span><span class="cx"> 
</span><span class="lines">@@ -1249,7 +1249,7 @@
</span><span class="cx">     pageConfiguration.progressTrackerClient = new WebProgressTrackerClient(self);
</span><span class="cx">     pageConfiguration.databaseProvider = &amp;WebDatabaseProvider::singleton();
</span><span class="cx">     pageConfiguration.storageNamespaceProvider = &amp;_private-&gt;group-&gt;storageNamespaceProvider();
</span><del>-    pageConfiguration.userContentProvider = &amp;_private-&gt;group-&gt;userContentController();
</del><ins>+    pageConfiguration.userContentController = &amp;_private-&gt;group-&gt;userContentController();
</ins><span class="cx">     pageConfiguration.visitedLinkStore = &amp;_private-&gt;group-&gt;visitedLinkStore();
</span><span class="cx"> 
</span><span class="cx">     _private-&gt;page = new Page(pageConfiguration);
</span><span class="lines">@@ -6203,7 +6203,7 @@
</span><span class="cx">     if (!_private-&gt;page)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    _private-&gt;page-&gt;setUserContentProvider(_private-&gt;group-&gt;userContentController());
</del><ins>+    _private-&gt;page-&gt;setUserContentController(&amp;_private-&gt;group-&gt;userContentController());
</ins><span class="cx">     _private-&gt;page-&gt;setVisitedLinkStore(_private-&gt;group-&gt;visitedLinkStore());
</span><span class="cx">     _private-&gt;page-&gt;setGroupName(groupName);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebKit2/ChangeLog        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2016-03-10  Commit Queue  &lt;commit-queue@webkit.org&gt;
+
+        Unreviewed, rolling out r197943.
+        https://bugs.webkit.org/show_bug.cgi?id=155317
+
+        This change broke Windows, WinCairo, GTK and EFL builds
+        (Requested by ryanhaddad on #webkit).
+
+        Reverted changeset:
+
+        &quot;Add a baseURL parameter to _WKUserStyleSheet&quot;
+        https://bugs.webkit.org/show_bug.cgi?id=155219
+        http://trac.webkit.org/changeset/197943
+
</ins><span class="cx"> 2016-03-10  Eric Carlson  &lt;eric.carlson@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [MediaStream] push media stream state to the UI process
</span></span></pre></div>
<a id="trunkSourceWebKit2Scriptswebkitmessagespy"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Scripts/webkit/messages.py (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Scripts/webkit/messages.py        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebKit2/Scripts/webkit/messages.py        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -378,8 +378,6 @@
</span><span class="cx">         'WebKit::WebTouchEvent': ['&quot;WebEvent.h&quot;'],
</span><span class="cx">         'WebKit::WebWheelEvent': ['&quot;WebEvent.h&quot;'],
</span><span class="cx">         'WebKit::WebScriptMessageHandlerHandle': ['&quot;WebScriptMessageHandler.h&quot;'],
</span><del>-        'struct WebKit::WebUserScriptData': ['&quot;WebUserContentControllerDataTypes.h&quot;'],
-        'struct WebKit::WebUserStyleSheetData': ['&quot;WebUserContentControllerDataTypes.h&quot;'],
</del><span class="cx">         'std::chrono::system_clock::time_point': ['&lt;chrono&gt;'],
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedWebUserContentControllerDataTypescpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebKit2/Shared/WebUserContentControllerDataTypes.cpp (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/WebUserContentControllerDataTypes.cpp        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebKit2/Shared/WebUserContentControllerDataTypes.cpp        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -1,69 +0,0 @@
</span><del>-/*
- * Copyright (C) 2016 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.
- */
-
-#include &quot;config.h&quot;
-#include &quot;WebUserContentControllerDataTypes.h&quot;
-
-#include &quot;WebCoreArgumentCoders.h&quot;
-
-namespace WebKit {
-
-void WebUserScriptData::encode(IPC::ArgumentEncoder&amp; encoder) const
-{
-    encoder &lt;&lt; identifier;
-    encoder &lt;&lt; worldIdentifier;
-    encoder &lt;&lt; userScript;
-}
-
-bool WebUserScriptData::decode(IPC::ArgumentDecoder&amp; decoder, WebUserScriptData&amp; data)
-{
-    if (!decoder.decode(data.identifier))
-        return false;
-    if (!decoder.decode(data.worldIdentifier))
-        return false;
-    if (!decoder.decode(data.userScript))
-        return false;
-    return true;
-}
-
-void WebUserStyleSheetData::encode(IPC::ArgumentEncoder&amp; encoder) const
-{
-    encoder &lt;&lt; identifier;
-    encoder &lt;&lt; worldIdentifier;
-    encoder &lt;&lt; userStyleSheet;
-}
-
-bool WebUserStyleSheetData::decode(IPC::ArgumentDecoder&amp; decoder, WebUserStyleSheetData&amp; data)
-{
-    if (!decoder.decode(data.identifier))
-        return false;
-    if (!decoder.decode(data.worldIdentifier))
-        return false;
-    if (!decoder.decode(data.userStyleSheet))
-        return false;
-    return true;
-}
-
-} // namespace WebKit
</del></span></pre></div>
<a id="trunkSourceWebKit2SharedWebUserContentControllerDataTypesh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebKit2/Shared/WebUserContentControllerDataTypes.h (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/WebUserContentControllerDataTypes.h        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebKit2/Shared/WebUserContentControllerDataTypes.h        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -1,59 +0,0 @@
</span><del>-/*
- * Copyright (C) 2016 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.
- */
-
-#ifndef WebUserContentControllerDataTypes_h
-#define WebUserContentControllerDataTypes_h
-
-#include &lt;WebCore/UserScript.h&gt;
-#include &lt;WebCore/UserStyleSheet.h&gt;
-
-namespace IPC {
-class ArgumentDecoder;
-class ArgumentEncoder;
-}
-
-namespace WebKit {
-
-struct WebUserScriptData {
-    void encode(IPC::ArgumentEncoder&amp;) const;
-    static bool decode(IPC::ArgumentDecoder&amp;, WebUserScriptData&amp;);
-
-    uint64_t identifier;
-    uint64_t worldIdentifier;
-    WebCore::UserScript userScript;
-};
-
-struct WebUserStyleSheetData {
-    void encode(IPC::ArgumentEncoder&amp;) const;
-    static bool decode(IPC::ArgumentDecoder&amp;, WebUserStyleSheetData&amp;);
-
-    uint64_t identifier;
-    uint64_t worldIdentifier;
-    WebCore::UserStyleSheet userStyleSheet;
-};
-
-} // namespace WebKit
-
-#endif // WebUserContentControllerDataTypes_h
</del></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIAPIUserScriptcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/APIUserScript.cpp (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/APIUserScript.cpp        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebKit2/UIProcess/API/APIUserScript.cpp        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -39,20 +39,11 @@
</span><span class="cx"> 
</span><span class="cx"> WebCore::URL UserScript::generateUniqueURL()
</span><span class="cx"> {
</span><del>-    static uint64_t identifier;
-
</del><span class="cx">     StringBuilder urlStringBuilder;
</span><span class="cx">     urlStringBuilder.appendLiteral(&quot;user-script:&quot;);
</span><del>-    urlStringBuilder.appendNumber(++identifier);
</del><ins>+    urlStringBuilder.appendNumber(generateIdentifier());
</ins><span class="cx">     return { { }, urlStringBuilder.toString() };
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-UserScript::UserScript(WebCore::UserScript userScript, API::UserContentWorld&amp; world)
-    : m_identifier(generateIdentifier())
-    , m_userScript(userScript)
-    , m_world(world)
-{
-}
</del><span class="cx"> 
</span><del>-
</del><span class="cx"> } // namespace API
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIAPIUserScripth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/APIUserScript.h (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/APIUserScript.h        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebKit2/UIProcess/API/APIUserScript.h        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -41,17 +41,18 @@
</span><span class="cx">         return adoptRef(*new UserScript(WTFMove(userScript), world));
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    UserScript(WebCore::UserScript, API::UserContentWorld&amp;);
</del><ins>+    UserScript(WebCore::UserScript userScript, API::UserContentWorld&amp; world)
+        : m_userScript(userScript)
+        , m_world(world)
+    {
+    }
</ins><span class="cx"> 
</span><del>-    uint64_t identifier() const { return m_identifier; }
-
</del><span class="cx">     const WebCore::UserScript&amp; userScript() const { return m_userScript; }
</span><span class="cx">     
</span><span class="cx">     UserContentWorld&amp; userContentWorld() { return m_world; }
</span><span class="cx">     const UserContentWorld&amp; userContentWorld() const { return m_world; }
</span><span class="cx">     
</span><span class="cx"> private:
</span><del>-    uint64_t m_identifier;
</del><span class="cx">     WebCore::UserScript m_userScript;
</span><span class="cx">     Ref&lt;UserContentWorld&gt; m_world;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIAPIUserStyleSheetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/APIUserStyleSheet.cpp (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/APIUserStyleSheet.cpp        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebKit2/UIProcess/API/APIUserStyleSheet.cpp        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -39,19 +39,11 @@
</span><span class="cx"> 
</span><span class="cx"> WebCore::URL UserStyleSheet::generateUniqueURL()
</span><span class="cx"> {
</span><del>-    static uint64_t identifier;
-
</del><span class="cx">     StringBuilder urlStringBuilder;
</span><span class="cx">     urlStringBuilder.appendLiteral(&quot;user-style-sheet:&quot;);
</span><del>-    urlStringBuilder.appendNumber(++identifier);
</del><ins>+    urlStringBuilder.appendNumber(generateIdentifier());
</ins><span class="cx">     return { { }, urlStringBuilder.toString() };
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-UserStyleSheet::UserStyleSheet(WebCore::UserStyleSheet userStyleSheet, API::UserContentWorld&amp; world)
-    : m_identifier(generateIdentifier())
-    , m_userStyleSheet(userStyleSheet)
-    , m_world(world)
-{
-}
</del><span class="cx"> 
</span><span class="cx"> } // namespace API
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIAPIUserStyleSheeth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/APIUserStyleSheet.h (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/APIUserStyleSheet.h        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebKit2/UIProcess/API/APIUserStyleSheet.h        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -41,17 +41,18 @@
</span><span class="cx">         return adoptRef(*new UserStyleSheet(WTFMove(userStyleSheet), world));
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    UserStyleSheet(WebCore::UserStyleSheet, API::UserContentWorld&amp;);
</del><ins>+    UserStyleSheet(WebCore::UserStyleSheet userStyleSheet, API::UserContentWorld&amp; world)
+        : m_userStyleSheet(userStyleSheet)
+        , m_world(world)
+    {
+    }
</ins><span class="cx"> 
</span><del>-    uint64_t identifier() const { return m_identifier; }
-
</del><span class="cx">     const WebCore::UserStyleSheet&amp; userStyleSheet() const { return m_userStyleSheet; }
</span><span class="cx"> 
</span><span class="cx">     UserContentWorld&amp; userContentWorld() { return m_world; }
</span><span class="cx">     const UserContentWorld&amp; userContentWorld() const { return m_world; }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    uint64_t m_identifier;
</del><span class="cx">     WebCore::UserStyleSheet m_userStyleSheet;
</span><span class="cx">     Ref&lt;UserContentWorld&gt; m_world;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoa_WKUserStyleSheeth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKUserStyleSheet.h (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKUserStyleSheet.h        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKUserStyleSheet.h        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -38,13 +38,11 @@
</span><span class="cx"> 
</span><span class="cx"> @property (nonatomic, readonly, copy) NSString *source;
</span><span class="cx"> 
</span><del>-@property (nonatomic, readonly, copy) NSURL *baseURL;
-
</del><span class="cx"> @property (nonatomic, readonly, getter=isForMainFrameOnly) BOOL forMainFrameOnly;
</span><span class="cx"> 
</span><span class="cx"> - (instancetype)initWithSource:(NSString *)source forMainFrameOnly:(BOOL)forMainFrameOnly;
</span><ins>+
</ins><span class="cx"> - (instancetype)initWithSource:(NSString *)source forMainFrameOnly:(BOOL)forMainFrameOnly legacyWhitelist:(WK_ARRAY(NSString *) *)legacyWhitelist legacyBlacklist:(WK_ARRAY(NSString *) *)legacyBlacklist userContentWorld:(_WKUserContentWorld *)userContentWorld;
</span><del>-- (instancetype)initWithSource:(NSString *)source forMainFrameOnly:(BOOL)forMainFrameOnly legacyWhitelist:(WK_ARRAY(NSString *) *)legacyWhitelist legacyBlacklist:(WK_ARRAY(NSString *) *)legacyBlacklist baseURL:(NSURL *)baseURL userContentWorld:(_WKUserContentWorld *)userContentWorld;
</del><span class="cx"> 
</span><span class="cx"> @end
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoa_WKUserStyleSheetmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKUserStyleSheet.mm (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKUserStyleSheet.mm        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKUserStyleSheet.mm        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -28,7 +28,6 @@
</span><span class="cx"> 
</span><span class="cx"> #import &quot;APIArray.h&quot;
</span><span class="cx"> #import &quot;WKNSArray.h&quot;
</span><del>-#import &quot;WKNSURLExtras.h&quot;
</del><span class="cx"> #import &quot;WebKit2Initialize.h&quot;
</span><span class="cx"> #import &quot;_WKUserContentWorldInternal.h&quot;
</span><span class="cx"> 
</span><span class="lines">@@ -62,29 +61,11 @@
</span><span class="cx">     return self;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-- (instancetype)initWithSource:(NSString *)source forMainFrameOnly:(BOOL)forMainFrameOnly legacyWhitelist:(WK_ARRAY(NSString *) *)legacyWhitelist legacyBlacklist:(WK_ARRAY(NSString *) *)legacyBlacklist baseURL:(NSURL *)baseURL userContentWorld:(_WKUserContentWorld *)userContentWorld
-{
-    if (!(self = [super init]))
-        return nil;
-
-    // FIXME: In the API test, we can use generateUniqueURL below before the API::Object constructor has done this... where should this really be?
-    WebKit::InitializeWebKit2();
-
-    API::Object::constructInWrapper&lt;API::UserStyleSheet&gt;(self, WebCore::UserStyleSheet { WTF::String(source), { { }, WTF::String([baseURL _web_originalDataAsWTFString]) }, API::toStringVector(legacyWhitelist), API::toStringVector(legacyBlacklist), forMainFrameOnly ? WebCore::InjectInTopFrameOnly : WebCore::InjectInAllFrames, WebCore::UserStyleUserLevel }, *userContentWorld-&gt;_userContentWorld);
-
-    return self;
-}
-
</del><span class="cx"> - (NSString *)source
</span><span class="cx"> {
</span><span class="cx">     return _userStyleSheet-&gt;userStyleSheet().source();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-- (NSURL *)baseURL
-{
-    return _userStyleSheet-&gt;userStyleSheet().url();
-}
-
</del><span class="cx"> - (BOOL)isForMainFrameOnly
</span><span class="cx"> {
</span><span class="cx">     return _userStyleSheet-&gt;userStyleSheet().injectedFrames() == WebCore::InjectInTopFrameOnly;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessUserContentWebUserContentControllerProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/UserContent/WebUserContentControllerProxy.cpp (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/UserContent/WebUserContentControllerProxy.cpp        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebKit2/UIProcess/UserContent/WebUserContentControllerProxy.cpp        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -33,7 +33,6 @@
</span><span class="cx"> #include &quot;DataReference.h&quot;
</span><span class="cx"> #include &quot;WebProcessProxy.h&quot;
</span><span class="cx"> #include &quot;WebScriptMessageHandler.h&quot;
</span><del>-#include &quot;WebUserContentControllerDataTypes.h&quot;
</del><span class="cx"> #include &quot;WebUserContentControllerMessages.h&quot;
</span><span class="cx"> #include &quot;WebUserContentControllerProxyMessages.h&quot;
</span><span class="cx"> #include &lt;WebCore/SerializedScriptValue.h&gt;
</span><span class="lines">@@ -81,14 +80,14 @@
</span><span class="cx">         userContentWorlds.append(std::make_pair(world.key-&gt;identifier(), world.key-&gt;name()));
</span><span class="cx">     webProcessProxy.connection()-&gt;send(Messages::WebUserContentController::AddUserContentWorlds(userContentWorlds), m_identifier);
</span><span class="cx"> 
</span><del>-    Vector&lt;WebUserScriptData&gt; userScripts;
</del><ins>+    Vector&lt;std::pair&lt;uint64_t, WebCore::UserScript&gt;&gt; userScripts;
</ins><span class="cx">     for (const auto&amp; userScript : m_userScripts-&gt;elementsOfType&lt;API::UserScript&gt;())
</span><del>-        userScripts.append({ userScript-&gt;identifier(), userScript-&gt;userContentWorld().identifier(), userScript-&gt;userScript() });
</del><ins>+        userScripts.append(std::make_pair(userScript-&gt;userContentWorld().identifier(), userScript-&gt;userScript()));
</ins><span class="cx">     webProcessProxy.connection()-&gt;send(Messages::WebUserContentController::AddUserScripts(userScripts), m_identifier);
</span><span class="cx"> 
</span><del>-    Vector&lt;WebUserStyleSheetData&gt; userStyleSheets;
</del><ins>+    Vector&lt;std::pair&lt;uint64_t, WebCore::UserStyleSheet&gt;&gt; userStyleSheets;
</ins><span class="cx">     for (const auto&amp; userStyleSheet : m_userStyleSheets-&gt;elementsOfType&lt;API::UserStyleSheet&gt;())
</span><del>-        userStyleSheets.append({ userStyleSheet-&gt;identifier(), userStyleSheet-&gt;userContentWorld().identifier(), userStyleSheet-&gt;userStyleSheet() });
</del><ins>+        userStyleSheets.append(std::make_pair(userStyleSheet-&gt;userContentWorld().identifier(), userStyleSheet-&gt;userStyleSheet()));
</ins><span class="cx">     webProcessProxy.connection()-&gt;send(Messages::WebUserContentController::AddUserStyleSheets(userStyleSheets), m_identifier);
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;WebScriptMessageHandlerHandle&gt; messageHandlerHandles;
</span><span class="lines">@@ -169,7 +168,7 @@
</span><span class="cx">     m_userScripts-&gt;elements().append(&amp;userScript);
</span><span class="cx"> 
</span><span class="cx">     for (WebProcessProxy* process : m_processes)
</span><del>-        process-&gt;connection()-&gt;send(Messages::WebUserContentController::AddUserScripts({ { userScript.identifier(), world-&gt;identifier(), userScript.userScript() } }), m_identifier);
</del><ins>+        process-&gt;connection()-&gt;send(Messages::WebUserContentController::AddUserScripts({ std::make_pair(world-&gt;identifier(), userScript.userScript()) }), m_identifier);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebUserContentControllerProxy::removeUserScript(API::UserScript&amp; userScript)
</span><span class="lines">@@ -177,7 +176,7 @@
</span><span class="cx">     Ref&lt;API::UserContentWorld&gt; world = userScript.userContentWorld();
</span><span class="cx"> 
</span><span class="cx">     for (WebProcessProxy* process : m_processes)
</span><del>-        process-&gt;connection()-&gt;send(Messages::WebUserContentController::RemoveUserScript(world-&gt;identifier(), userScript.identifier()), m_identifier);
</del><ins>+        process-&gt;connection()-&gt;send(Messages::WebUserContentController::RemoveUserScript(world-&gt;identifier(), userScript.userScript().url().string()), m_identifier);
</ins><span class="cx"> 
</span><span class="cx">     m_userScripts-&gt;elements().removeAll(&amp;userScript);
</span><span class="cx"> 
</span><span class="lines">@@ -224,7 +223,7 @@
</span><span class="cx">     m_userStyleSheets-&gt;elements().append(&amp;userStyleSheet);
</span><span class="cx"> 
</span><span class="cx">     for (WebProcessProxy* process : m_processes)
</span><del>-        process-&gt;connection()-&gt;send(Messages::WebUserContentController::AddUserStyleSheets({ { userStyleSheet.identifier(), world-&gt;identifier(), userStyleSheet.userStyleSheet() } }), m_identifier);
</del><ins>+        process-&gt;connection()-&gt;send(Messages::WebUserContentController::AddUserStyleSheets({ std::make_pair(world-&gt;identifier(), userStyleSheet.userStyleSheet()) }), m_identifier);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebUserContentControllerProxy::removeUserStyleSheet(API::UserStyleSheet&amp; userStyleSheet)
</span><span class="lines">@@ -232,7 +231,7 @@
</span><span class="cx">     Ref&lt;API::UserContentWorld&gt; world = userStyleSheet.userContentWorld();
</span><span class="cx"> 
</span><span class="cx">     for (WebProcessProxy* process : m_processes)
</span><del>-        process-&gt;connection()-&gt;send(Messages::WebUserContentController::RemoveUserStyleSheet(world-&gt;identifier(), userStyleSheet.identifier()), m_identifier);
</del><ins>+        process-&gt;connection()-&gt;send(Messages::WebUserContentController::RemoveUserStyleSheet(world-&gt;identifier(), userStyleSheet.userStyleSheet().url().string()), m_identifier);
</ins><span class="cx"> 
</span><span class="cx">     m_userStyleSheets-&gt;elements().removeAll(&amp;userStyleSheet);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2WebKit2xcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -1044,8 +1044,6 @@
</span><span class="cx">                 7A791EFA1C7CFCF100C4C52B /* WebResourceLoadStatisticsStoreMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A791EF91C7CFB3700C4C52B /* WebResourceLoadStatisticsStoreMessageReceiver.cpp */; };
</span><span class="cx">                 7A791EFB1C7CFD0100C4C52B /* WebResourceLoadStatisticsStoreMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A791EF81C7CFB1000C4C52B /* WebResourceLoadStatisticsStoreMessages.h */; };
</span><span class="cx">                 7A791EFC1C7D08C500C4C52B /* WebResourceLoadStatisticsStore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A9CD8C01C77984900D9F6C7 /* WebResourceLoadStatisticsStore.cpp */; };
</span><del>-                7C065F2B1C8CD95F00C2D950 /* WebUserContentControllerDataTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C065F291C8CD95F00C2D950 /* WebUserContentControllerDataTypes.cpp */; };
-                7C065F2C1C8CD95F00C2D950 /* WebUserContentControllerDataTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C065F2A1C8CD95F00C2D950 /* WebUserContentControllerDataTypes.h */; };
</del><span class="cx">                 7C135AA8173B0BCA00586AE2 /* WKPluginInformation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C135AA6173B0BCA00586AE2 /* WKPluginInformation.cpp */; };
</span><span class="cx">                 7C135AA9173B0BCA00586AE2 /* WKPluginInformation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C135AA7173B0BCA00586AE2 /* WKPluginInformation.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 7C135AAC173B0CFF00586AE2 /* PluginInformationMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7C135AAA173B0CFF00586AE2 /* PluginInformationMac.mm */; };
</span><span class="lines">@@ -3053,8 +3051,6 @@
</span><span class="cx">                 7A9CD8C01C77984900D9F6C7 /* WebResourceLoadStatisticsStore.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebResourceLoadStatisticsStore.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 7A9CD8C11C77984900D9F6C7 /* WebResourceLoadStatisticsStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebResourceLoadStatisticsStore.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 7A9CD8C21C779AD600D9F6C7 /* WebResourceLoadStatisticsStore.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebResourceLoadStatisticsStore.messages.in; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                7C065F291C8CD95F00C2D950 /* WebUserContentControllerDataTypes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebUserContentControllerDataTypes.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
-                7C065F2A1C8CD95F00C2D950 /* WebUserContentControllerDataTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebUserContentControllerDataTypes.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 7C0BB9A818DCDE890006C086 /* WebContent-iOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = &quot;WebContent-iOS.entitlements&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 7C0BB9A918DCDF5A0006C086 /* Network-iOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = &quot;Network-iOS.entitlements&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 7C135AA6173B0BCA00586AE2 /* WKPluginInformation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKPluginInformation.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -4502,8 +4498,6 @@
</span><span class="cx">                                 8360349D1ACB34D600626549 /* WebSQLiteDatabaseTracker.cpp */,
</span><span class="cx">                                 8360349E1ACB34D600626549 /* WebSQLiteDatabaseTracker.h */,
</span><span class="cx">                                 C0337DD7127A51B6008FF4F4 /* WebTouchEvent.cpp */,
</span><del>-                                7C065F291C8CD95F00C2D950 /* WebUserContentControllerDataTypes.cpp */,
-                                7C065F2A1C8CD95F00C2D950 /* WebUserContentControllerDataTypes.h */,
</del><span class="cx">                                 C0337DD0127A2980008FF4F4 /* WebWheelEvent.cpp */,
</span><span class="cx">                         );
</span><span class="cx">                         path = Shared;
</span><span class="lines">@@ -7994,7 +7988,6 @@
</span><span class="cx">                                 2D28A4971AF965A100F190C9 /* WKViewLayoutStrategy.h in Headers */,
</span><span class="cx">                                 5C1427021C23F84C00D41183 /* Download.h in Headers */,
</span><span class="cx">                                 BFA6179F12F0B99D0033E0CA /* WKViewPrivate.h in Headers */,
</span><del>-                                7C065F2C1C8CD95F00C2D950 /* WebUserContentControllerDataTypes.h in Headers */,
</del><span class="cx">                                 C5E1AFE916B20B75006CC1F2 /* WKWebArchive.h in Headers */,
</span><span class="cx">                                 C5E1AFEB16B20B7E006CC1F2 /* WKWebArchiveResource.h in Headers */,
</span><span class="cx">                                 1AA2E56718D77508003814BD /* WKWebProcessBundleParameters.h in Headers */,
</span><span class="lines">@@ -9151,7 +9144,6 @@
</span><span class="cx">                                 5C1427011C23F84C00D41183 /* Download.cpp in Sources */,
</span><span class="cx">                                 C0337DDD127A521C008FF4F4 /* WebPlatformTouchPoint.cpp in Sources */,
</span><span class="cx">                                 2DA944A21884E4F000ED86DB /* WebPlatformTouchPointIOS.cpp in Sources */,
</span><del>-                                7C065F2B1C8CD95F00C2D950 /* WebUserContentControllerDataTypes.cpp in Sources */,
</del><span class="cx">                                 31D5929E166E060000E6BF02 /* WebPlugInClient.cpp in Sources */,
</span><span class="cx">                                 BC5744EF12638FB3006F0F12 /* WebPopupItem.cpp in Sources */,
</span><span class="cx">                                 D3B9484611FF4B6500032B39 /* WebPopupMenu.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessInjectedBundleInjectedBundlecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -47,7 +47,6 @@
</span><span class="cx"> #include &quot;WebProcess.h&quot;
</span><span class="cx"> #include &quot;WebProcessCreationParameters.h&quot;
</span><span class="cx"> #include &quot;WebProcessPoolMessages.h&quot;
</span><del>-#include &quot;WebUserContentController.h&quot;
</del><span class="cx"> #include &lt;JavaScriptCore/APICast.h&gt;
</span><span class="cx"> #include &lt;JavaScriptCore/Exception.h&gt;
</span><span class="cx"> #include &lt;JavaScriptCore/JSLock.h&gt;
</span><span class="lines">@@ -71,6 +70,7 @@
</span><span class="cx"> #include &lt;WebCore/SecurityPolicy.h&gt;
</span><span class="cx"> #include &lt;WebCore/SessionID.h&gt;
</span><span class="cx"> #include &lt;WebCore/Settings.h&gt;
</span><ins>+#include &lt;WebCore/UserContentController.h&gt;
</ins><span class="cx"> #include &lt;WebCore/UserGestureIndicator.h&gt;
</span><span class="cx"> #include &lt;WebCore/UserScript.h&gt;
</span><span class="cx"> #include &lt;WebCore/UserStyleSheet.h&gt;
</span><span class="lines">@@ -407,39 +407,39 @@
</span><span class="cx"> void InjectedBundle::addUserScript(WebPageGroupProxy* pageGroup, InjectedBundleScriptWorld* scriptWorld, const String&amp; source, const String&amp; url, API::Array* whitelist, API::Array* blacklist, WebCore::UserScriptInjectionTime injectionTime, WebCore::UserContentInjectedFrames injectedFrames)
</span><span class="cx"> {
</span><span class="cx">     // url is not from URL::string(), i.e. it has not already been parsed by URL, so we have to use the relative URL constructor for URL instead of the ParsedURLStringTag version.
</span><del>-    UserScript userScript{ source, URL(URL(), url), whitelist ? whitelist-&gt;toStringVector() : Vector&lt;String&gt;(), blacklist ? blacklist-&gt;toStringVector() : Vector&lt;String&gt;(), injectionTime, injectedFrames };
</del><ins>+    auto userScript = std::make_unique&lt;UserScript&gt;(source, URL(URL(), url), whitelist ? whitelist-&gt;toStringVector() : Vector&lt;String&gt;(), blacklist ? blacklist-&gt;toStringVector() : Vector&lt;String&gt;(), injectionTime, injectedFrames);
</ins><span class="cx"> 
</span><del>-    pageGroup-&gt;userContentController().addUserScript(*scriptWorld, WTFMove(userScript));
</del><ins>+    pageGroup-&gt;userContentController().addUserScript(scriptWorld-&gt;coreWorld(), WTFMove(userScript));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void InjectedBundle::addUserStyleSheet(WebPageGroupProxy* pageGroup, InjectedBundleScriptWorld* scriptWorld, const String&amp; source, const String&amp; url, API::Array* whitelist, API::Array* blacklist, WebCore::UserContentInjectedFrames injectedFrames)
</span><span class="cx"> {
</span><span class="cx">     // url is not from URL::string(), i.e. it has not already been parsed by URL, so we have to use the relative URL constructor for URL instead of the ParsedURLStringTag version.
</span><del>-    UserStyleSheet userStyleSheet{ source, URL(URL(), url), whitelist ? whitelist-&gt;toStringVector() : Vector&lt;String&gt;(), blacklist ? blacklist-&gt;toStringVector() : Vector&lt;String&gt;(), injectedFrames, UserStyleUserLevel };
</del><ins>+    auto userStyleSheet = std::make_unique&lt;UserStyleSheet&gt;(source, URL(URL(), url), whitelist ? whitelist-&gt;toStringVector() : Vector&lt;String&gt;(), blacklist ? blacklist-&gt;toStringVector() : Vector&lt;String&gt;(), injectedFrames, UserStyleUserLevel);
</ins><span class="cx"> 
</span><del>-    pageGroup-&gt;userContentController().addUserStyleSheet(*scriptWorld, WTFMove(userStyleSheet));
</del><ins>+    pageGroup-&gt;userContentController().addUserStyleSheet(scriptWorld-&gt;coreWorld(), WTFMove(userStyleSheet), InjectInExistingDocuments);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void InjectedBundle::removeUserScript(WebPageGroupProxy* pageGroup, InjectedBundleScriptWorld* scriptWorld, const String&amp; url)
</span><span class="cx"> {
</span><span class="cx">     // url is not from URL::string(), i.e. it has not already been parsed by URL, so we have to use the relative URL constructor for URL instead of the ParsedURLStringTag version.
</span><del>-    pageGroup-&gt;userContentController().removeUserScriptWithURL(*scriptWorld, URL(URL(), url));
</del><ins>+    pageGroup-&gt;userContentController().removeUserScript(scriptWorld-&gt;coreWorld(), URL(URL(), url));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void InjectedBundle::removeUserStyleSheet(WebPageGroupProxy* pageGroup, InjectedBundleScriptWorld* scriptWorld, const String&amp; url)
</span><span class="cx"> {
</span><span class="cx">     // url is not from URL::string(), i.e. it has not already been parsed by URL, so we have to use the relative URL constructor for URL instead of the ParsedURLStringTag version.
</span><del>-    pageGroup-&gt;userContentController().removeUserStyleSheetWithURL(*scriptWorld, URL(URL(), url));
</del><ins>+    pageGroup-&gt;userContentController().removeUserStyleSheet(scriptWorld-&gt;coreWorld(), URL(URL(), url));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void InjectedBundle::removeUserScripts(WebPageGroupProxy* pageGroup, InjectedBundleScriptWorld* scriptWorld)
</span><span class="cx"> {
</span><del>-    pageGroup-&gt;userContentController().removeUserScripts(*scriptWorld);
</del><ins>+    pageGroup-&gt;userContentController().removeUserScripts(scriptWorld-&gt;coreWorld());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void InjectedBundle::removeUserStyleSheets(WebPageGroupProxy* pageGroup, InjectedBundleScriptWorld* scriptWorld)
</span><span class="cx"> {
</span><del>-    pageGroup-&gt;userContentController().removeUserStyleSheets(*scriptWorld);
</del><ins>+    pageGroup-&gt;userContentController().removeUserStyleSheets(scriptWorld-&gt;coreWorld());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void InjectedBundle::removeAllUserContent(WebPageGroupProxy* pageGroup)
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessUserContentWebUserContentControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -35,6 +35,7 @@
</span><span class="cx"> #include &quot;WebUserContentControllerMessages.h&quot;
</span><span class="cx"> #include &quot;WebUserContentControllerProxyMessages.h&quot;
</span><span class="cx"> #include &lt;WebCore/DOMWrapperWorld.h&gt;
</span><ins>+#include &lt;WebCore/ScriptController.h&gt;
</ins><span class="cx"> #include &lt;WebCore/SecurityOriginData.h&gt;
</span><span class="cx"> #include &lt;WebCore/SerializedScriptValue.h&gt;
</span><span class="cx"> #include &lt;WebCore/UserStyleSheet.h&gt;
</span><span class="lines">@@ -79,6 +80,7 @@
</span><span class="cx"> 
</span><span class="cx"> WebUserContentController::WebUserContentController(uint64_t identifier)
</span><span class="cx">     : m_identifier(identifier)
</span><ins>+    , m_userContentController(UserContentController::create())
</ins><span class="cx"> {
</span><span class="cx">     WebProcess::singleton().addMessageReceiver(Messages::WebUserContentController::messageReceiverName(), m_identifier, *this);
</span><span class="cx"> }
</span><span class="lines">@@ -92,6 +94,7 @@
</span><span class="cx">     userContentControllers().remove(m_identifier);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+
</ins><span class="cx"> void WebUserContentController::addUserContentWorlds(const Vector&lt;std::pair&lt;uint64_t, String&gt;&gt;&amp; worlds)
</span><span class="cx"> {
</span><span class="cx">     for (auto&amp; world : worlds) {
</span><span class="lines">@@ -121,21 +124,20 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebUserContentController::addUserScripts(const Vector&lt;WebUserScriptData&gt;&amp; userScripts)
</del><ins>+void WebUserContentController::addUserScripts(const Vector&lt;std::pair&lt;uint64_t, WebCore::UserScript&gt;&gt;&amp; userScripts)
</ins><span class="cx"> {
</span><del>-    for (const auto&amp; userScriptData : userScripts) {
-        auto it = worldMap().find(userScriptData.worldIdentifier);
</del><ins>+    for (const auto&amp; userScriptWorldPair : userScripts) {
+        auto it = worldMap().find(userScriptWorldPair.first);
</ins><span class="cx">         if (it == worldMap().end()) {
</span><del>-            WTFLogAlways(&quot;Trying to add a UserScript to a UserContentWorld (id=%&quot; PRIu64 &quot;) that does not exist.&quot;, userScriptData.worldIdentifier);
</del><ins>+            WTFLogAlways(&quot;Trying to add a UserScript to a UserContentWorld (id=%&quot; PRIu64 &quot;) that does not exist.&quot;, userScriptWorldPair.first);
</ins><span class="cx">             continue;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        UserScript script = userScriptData.userScript;
-        addUserScriptInternal(*it-&gt;value.first, userScriptData.identifier, WTFMove(script));
</del><ins>+        m_userContentController-&gt;addUserScript(it-&gt;value.first-&gt;coreWorld(), std::make_unique&lt;WebCore::UserScript&gt;(userScriptWorldPair.second));
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebUserContentController::removeUserScript(uint64_t worldIdentifier, uint64_t userScriptIdentifier)
</del><ins>+void WebUserContentController::removeUserScript(uint64_t worldIdentifier, const String&amp; urlString)
</ins><span class="cx"> {
</span><span class="cx">     auto it = worldMap().find(worldIdentifier);
</span><span class="cx">     if (it == worldMap().end()) {
</span><span class="lines">@@ -143,7 +145,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    removeUserScriptInternal(*it-&gt;value.first, userScriptIdentifier);
</del><ins>+    m_userContentController-&gt;removeUserScript(it-&gt;value.first-&gt;coreWorld(), URL(URL(), urlString));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebUserContentController::removeAllUserScripts(const Vector&lt;uint64_t&gt;&amp; worldIdentifiers)
</span><span class="lines">@@ -155,25 +157,24 @@
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        removeUserScripts(*it-&gt;value.first);
</del><ins>+        m_userContentController-&gt;removeUserScripts(it-&gt;value.first-&gt;coreWorld());
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebUserContentController::addUserStyleSheets(const Vector&lt;WebUserStyleSheetData&gt;&amp; userStyleSheets)
</del><ins>+void WebUserContentController::addUserStyleSheets(const Vector&lt;std::pair&lt;uint64_t, WebCore::UserStyleSheet&gt;&gt;&amp; userStyleSheets)
</ins><span class="cx"> {
</span><del>-    for (const auto&amp; userStyleSheetData : userStyleSheets) {
-        auto it = worldMap().find(userStyleSheetData.worldIdentifier);
</del><ins>+    for (const auto&amp; userStyleSheetWorldPair : userStyleSheets) {
+        auto it = worldMap().find(userStyleSheetWorldPair.first);
</ins><span class="cx">         if (it == worldMap().end()) {
</span><del>-            WTFLogAlways(&quot;Trying to add a UserStyleSheet to a UserContentWorld (id=%&quot; PRIu64 &quot;) that does not exist.&quot;, userStyleSheetData.worldIdentifier);
</del><ins>+            WTFLogAlways(&quot;Trying to add a UserStyleSheet to a UserContentWorld (id=%&quot; PRIu64 &quot;) that does not exist.&quot;, userStyleSheetWorldPair.first);
</ins><span class="cx">             continue;
</span><span class="cx">         }
</span><del>-        
-        UserStyleSheet sheet = userStyleSheetData.userStyleSheet;
-        addUserStyleSheetInternal(*it-&gt;value.first, userStyleSheetData.identifier, WTFMove(sheet));
</del><ins>+
+        m_userContentController-&gt;addUserStyleSheet(it-&gt;value.first-&gt;coreWorld(), std::make_unique&lt;WebCore::UserStyleSheet&gt;(userStyleSheetWorldPair.second), InjectInExistingDocuments);
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebUserContentController::removeUserStyleSheet(uint64_t worldIdentifier, uint64_t userStyleSheetIdentifier)
</del><ins>+void WebUserContentController::removeUserStyleSheet(uint64_t worldIdentifier, const String&amp; urlString)
</ins><span class="cx"> {
</span><span class="cx">     auto it = worldMap().find(worldIdentifier);
</span><span class="cx">     if (it == worldMap().end()) {
</span><span class="lines">@@ -181,7 +182,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    removeUserStyleSheetInternal(*it-&gt;value.first, userStyleSheetIdentifier);
</del><ins>+    m_userContentController-&gt;removeUserStyleSheet(it-&gt;value.first-&gt;coreWorld(), URL(URL(), urlString));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebUserContentController::removeAllUserStyleSheets(const Vector&lt;uint64_t&gt;&amp; worldIdentifiers)
</span><span class="lines">@@ -193,7 +194,7 @@
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        removeUserStyleSheets(*it-&gt;value.first);
</del><ins>+        m_userContentController-&gt;removeUserStyleSheets(it-&gt;value.first-&gt;coreWorld());
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -252,9 +253,7 @@
</span><span class="cx">         RefPtr&lt;WebUserMessageHandlerDescriptorProxy&gt; descriptor = WebUserMessageHandlerDescriptorProxy::create(this, handle.name, handle.identifier);
</span><span class="cx"> 
</span><span class="cx">         m_userMessageHandlerDescriptors.add(descriptor-&gt;identifier(), descriptor);
</span><del>-
-        auto&amp; coreDescriptor = descriptor-&gt;descriptor();
-        m_userMessageHandlerDescriptorsMap.add(std::make_pair(coreDescriptor.name(), &amp;coreDescriptor.world()), &amp;coreDescriptor);
</del><ins>+        m_userContentController-&gt;addUserMessageHandlerDescriptor(descriptor-&gt;descriptor());
</ins><span class="cx">     }
</span><span class="cx"> #else
</span><span class="cx">     UNUSED_PARAM(scriptMessageHandlers);
</span><span class="lines">@@ -266,10 +265,8 @@
</span><span class="cx"> #if ENABLE(USER_MESSAGE_HANDLERS)
</span><span class="cx">     auto it = m_userMessageHandlerDescriptors.find(identifier);
</span><span class="cx">     ASSERT(it != m_userMessageHandlerDescriptors.end());
</span><del>-
-    auto&amp; coreDescriptor = it-&gt;value-&gt;descriptor();
-    m_userMessageHandlerDescriptorsMap.remove(std::make_pair(coreDescriptor.name(), &amp;coreDescriptor.world()));
-
</del><ins>+    
+    m_userContentController-&gt;removeUserMessageHandlerDescriptor(it-&gt;value-&gt;descriptor());
</ins><span class="cx">     m_userMessageHandlerDescriptors.remove(it);
</span><span class="cx"> #else
</span><span class="cx">     UNUSED_PARAM(identifier);
</span><span class="lines">@@ -282,168 +279,19 @@
</span><span class="cx">     for (const auto&amp; userContentExtension : userContentExtensions) {
</span><span class="cx">         WebCompiledContentExtensionData contentExtensionData = userContentExtension.second;
</span><span class="cx">         RefPtr&lt;WebCompiledContentExtension&gt; compiledContentExtension = WebCompiledContentExtension::create(WTFMove(contentExtensionData));
</span><del>-
-        m_contentExtensionBackend.addContentExtension(userContentExtension.first, WTFMove(compiledContentExtension));
</del><ins>+        m_userContentController-&gt;addUserContentExtension(userContentExtension.first, compiledContentExtension);
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebUserContentController::removeUserContentExtension(const String&amp; name)
</span><span class="cx"> {
</span><del>-    m_contentExtensionBackend.removeContentExtension(name);
</del><ins>+    m_userContentController-&gt;removeUserContentExtension(name);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebUserContentController::removeAllUserContentExtensions()
</span><span class="cx"> {
</span><del>-    m_contentExtensionBackend.removeAllContentExtensions();
</del><ins>+    m_userContentController-&gt;removeAllUserContentExtensions();
</ins><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-
-
-void WebUserContentController::addUserScriptInternal(InjectedBundleScriptWorld&amp; world, uint64_t userScriptIdentifier, UserScript&amp;&amp; userScript)
-{
-    auto&amp; scriptsInWorld = m_userScripts.ensure(&amp;world, [] { return Vector&lt;std::pair&lt;uint64_t, WebCore::UserScript&gt;&gt;(); }).iterator-&gt;value;
-    scriptsInWorld.append(std::make_pair(userScriptIdentifier, WTFMove(userScript)));
-}
-
-void WebUserContentController::addUserScript(InjectedBundleScriptWorld&amp; world, UserScript&amp;&amp; userScript)
-{
-    addUserScriptInternal(world, 0, WTFMove(userScript));
-}
-
-void WebUserContentController::removeUserScriptWithURL(InjectedBundleScriptWorld&amp; world, const URL&amp; url)
-{
-    auto it = m_userScripts.find(&amp;world);
-    if (it == m_userScripts.end())
-        return;
-
-    auto&amp; scripts = it-&gt;value;
-    for (int i = scripts.size() - 1; i &gt;= 0; --i) {
-        if (scripts[i].second.url() == url)
-            scripts.remove(i);
-    }
-
-    if (scripts.isEmpty())
-        m_userScripts.remove(it);
-}
-
-void WebUserContentController::removeUserScriptInternal(InjectedBundleScriptWorld&amp; world, uint64_t userScriptIdentifier)
-{
-    auto it = m_userScripts.find(&amp;world);
-    if (it == m_userScripts.end())
-        return;
-
-    auto&amp; scripts = it-&gt;value;
-    for (int i = scripts.size() - 1; i &gt;= 0; --i) {
-        if (scripts[i].first == userScriptIdentifier)
-            scripts.remove(i);
-    }
-
-    if (scripts.isEmpty())
-        m_userScripts.remove(it);
-}
-
-void WebUserContentController::removeUserScripts(InjectedBundleScriptWorld&amp; world)
-{
-    m_userScripts.remove(&amp;world);
-}
-
-void WebUserContentController::addUserStyleSheetInternal(InjectedBundleScriptWorld&amp; world, uint64_t userStyleSheetIdentifier, UserStyleSheet&amp;&amp; userStyleSheet)
-{
-    auto&amp; styleSheetsInWorld = m_userStyleSheets.ensure(&amp;world, [] { return Vector&lt;std::pair&lt;uint64_t, WebCore::UserStyleSheet&gt;&gt;(); }).iterator-&gt;value;
-    styleSheetsInWorld.append(std::make_pair(userStyleSheetIdentifier, WTFMove(userStyleSheet)));
-
-    invalidateInjectedStyleSheetCacheInAllFramesInAllPages();
-}
-
-void WebUserContentController::addUserStyleSheet(InjectedBundleScriptWorld&amp; world, UserStyleSheet&amp;&amp; userStyleSheet)
-{
-    addUserStyleSheetInternal(world, 0, WTFMove(userStyleSheet));
-}
-
-void WebUserContentController::removeUserStyleSheetWithURL(InjectedBundleScriptWorld&amp; world, const URL&amp; url)
-{
-    auto it = m_userStyleSheets.find(&amp;world);
-    if (it == m_userStyleSheets.end())
-        return;
-
-    auto&amp; stylesheets = it-&gt;value;
-
-    bool sheetsChanged = false;
-    for (int i = stylesheets.size() - 1; i &gt;= 0; --i) {
-        if (stylesheets[i].second.url() == url) {
-            stylesheets.remove(i);
-            sheetsChanged = true;
-        }
-    }
-
-    if (!sheetsChanged)
-        return;
-
-    if (stylesheets.isEmpty())
-        m_userStyleSheets.remove(it);
-
-    invalidateInjectedStyleSheetCacheInAllFramesInAllPages();
-}
-
-void WebUserContentController::removeUserStyleSheetInternal(InjectedBundleScriptWorld&amp; world, uint64_t userStyleSheetIdentifier)
-{
-    auto it = m_userStyleSheets.find(&amp;world);
-    if (it == m_userStyleSheets.end())
-        return;
-
-    auto&amp; stylesheets = it-&gt;value;
-
-    bool sheetsChanged = false;
-    for (int i = stylesheets.size() - 1; i &gt;= 0; --i) {
-        if (stylesheets[i].first == userStyleSheetIdentifier) {
-            stylesheets.remove(i);
-            sheetsChanged = true;
-        }
-    }
-
-    if (!sheetsChanged)
-        return;
-
-    if (stylesheets.isEmpty())
-        m_userStyleSheets.remove(it);
-
-    invalidateInjectedStyleSheetCacheInAllFramesInAllPages();
-}
-
-void WebUserContentController::removeUserStyleSheets(InjectedBundleScriptWorld&amp; world)
-{
-    if (!m_userStyleSheets.remove(&amp;world))
-        return;
-
-    invalidateInjectedStyleSheetCacheInAllFramesInAllPages();
-}
-
-void WebUserContentController::removeAllUserContent()
-{
-    m_userScripts.clear();
-
-    if (!m_userStyleSheets.isEmpty()) {
-        m_userStyleSheets.clear();
-        invalidateInjectedStyleSheetCacheInAllFramesInAllPages();
-    }
-}
-
-void WebUserContentController::forEachUserScript(const std::function&lt;void(WebCore::DOMWrapperWorld&amp;, const WebCore::UserScript&amp;)&gt;&amp; functor) const
-{
-    for (const auto&amp; worldAndUserScriptVector : m_userScripts) {
-        auto&amp; world = worldAndUserScriptVector.key-&gt;coreWorld();
-        for (const auto&amp; identifierUserScriptPair : worldAndUserScriptVector.value)
-            functor(world, identifierUserScriptPair.second);
-    }
-}
-
-void WebUserContentController::forEachUserStyleSheet(const std::function&lt;void(const WebCore::UserStyleSheet&amp;)&gt;&amp; functor) const
-{
-    for (auto&amp; styleSheetVector : m_userStyleSheets.values()) {
-        for (const auto&amp; identifierUserStyleSheetPair : styleSheetVector)
-            functor(identifierUserStyleSheetPair.second);
-    }
-}
-
</del><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessUserContentWebUserContentControllerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/UserContent/WebUserContentController.h (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/UserContent/WebUserContentController.h        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebKit2/WebProcess/UserContent/WebUserContentController.h        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -28,64 +28,40 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;MessageReceiver.h&quot;
</span><span class="cx"> #include &quot;WebScriptMessageHandler.h&quot;
</span><del>-#include &quot;WebUserContentControllerDataTypes.h&quot;
-#include &lt;WebCore/UserContentProvider.h&gt;
</del><ins>+#include &lt;WebCore/UserContentController.h&gt;
</ins><span class="cx"> #include &lt;wtf/HashMap.h&gt;
</span><ins>+#include &lt;wtf/RefCounted.h&gt;
</ins><span class="cx"> 
</span><del>-#if ENABLE(CONTENT_EXTENSIONS)
-#include &lt;WebCore/ContentExtensionsBackend.h&gt;
-#endif
-
-namespace WebCore {
-namespace ContentExtensions {
-class CompiledContentExtension;
-}
-}
-
</del><span class="cx"> namespace WebKit {
</span><span class="cx"> 
</span><span class="cx"> class InjectedBundleScriptWorld;
</span><span class="cx"> class WebCompiledContentExtensionData;
</span><span class="cx"> class WebUserMessageHandlerDescriptorProxy;
</span><span class="cx"> 
</span><del>-class WebUserContentController final : public WebCore::UserContentProvider, private IPC::MessageReceiver {
</del><ins>+class WebUserContentController final : public RefCounted&lt;WebUserContentController&gt;, private IPC::MessageReceiver  {
</ins><span class="cx"> public:
</span><span class="cx">     static Ref&lt;WebUserContentController&gt; getOrCreate(uint64_t identifier);
</span><span class="cx">     virtual ~WebUserContentController();
</span><span class="cx"> 
</span><ins>+    WebCore::UserContentController&amp; userContentController() { return m_userContentController; }
+
</ins><span class="cx">     uint64_t identifier() { return m_identifier; } 
</span><span class="cx"> 
</span><del>-    void addUserScript(InjectedBundleScriptWorld&amp;, WebCore::UserScript&amp;&amp;);
-    void removeUserScriptWithURL(InjectedBundleScriptWorld&amp;, const WebCore::URL&amp;);
-    void removeUserScripts(InjectedBundleScriptWorld&amp;);
-    void addUserStyleSheet(InjectedBundleScriptWorld&amp;, WebCore::UserStyleSheet&amp;&amp;);
-    void removeUserStyleSheetWithURL(InjectedBundleScriptWorld&amp;, const WebCore::URL&amp;);
-    void removeUserStyleSheets(InjectedBundleScriptWorld&amp;);
-    void removeAllUserContent();
-
</del><span class="cx"> private:
</span><span class="cx">     explicit WebUserContentController(uint64_t identifier);
</span><span class="cx"> 
</span><del>-    // WebCore::UserContentProvider
-    void forEachUserScript(const std::function&lt;void(WebCore::DOMWrapperWorld&amp;, const WebCore::UserScript&amp;)&gt;&amp;) const override;
-    void forEachUserStyleSheet(const std::function&lt;void(const WebCore::UserStyleSheet&amp;)&gt;&amp;) const override;
-    const WebCore::UserMessageHandlerDescriptorMap&amp; userMessageHandlerDescriptors() const override { return m_userMessageHandlerDescriptorsMap; }
-#if ENABLE(CONTENT_EXTENSIONS)
-    WebCore::ContentExtensions::ContentExtensionsBackend&amp; userContentExtensionBackend() override { return m_contentExtensionBackend; }
-#endif
-
</del><span class="cx">     // IPC::MessageReceiver.
</span><span class="cx">     void didReceiveMessage(IPC::Connection&amp;, IPC::MessageDecoder&amp;) override;
</span><span class="cx"> 
</span><span class="cx">     void addUserContentWorlds(const Vector&lt;std::pair&lt;uint64_t, String&gt;&gt;&amp;);
</span><span class="cx">     void removeUserContentWorlds(const Vector&lt;uint64_t&gt;&amp;);
</span><span class="cx"> 
</span><del>-    void addUserScripts(const Vector&lt;WebUserScriptData&gt;&amp;);
-    void removeUserScript(uint64_t worldIdentifier, uint64_t userScriptIdentifier);
</del><ins>+    void addUserScripts(const Vector&lt;std::pair&lt;uint64_t, WebCore::UserScript&gt;&gt;&amp;);
+    void removeUserScript(uint64_t worldIdentifier, const String&amp; urlString);
</ins><span class="cx">     void removeAllUserScripts(const Vector&lt;uint64_t&gt;&amp;);
</span><span class="cx"> 
</span><del>-    void addUserStyleSheets(const Vector&lt;WebUserStyleSheetData&gt;&amp;);
-    void removeUserStyleSheet(uint64_t worldIdentifier, uint64_t userScriptIdentifier);
</del><ins>+    void addUserStyleSheets(const Vector&lt;std::pair&lt;uint64_t, WebCore::UserStyleSheet&gt;&gt;&amp;);
+    void removeUserStyleSheet(uint64_t worldIdentifier, const String&amp; urlString);
</ins><span class="cx">     void removeAllUserStyleSheets(const Vector&lt;uint64_t&gt;&amp;);
</span><span class="cx"> 
</span><span class="cx">     void addUserScriptMessageHandlers(const Vector&lt;WebScriptMessageHandlerHandle&gt;&amp;);
</span><span class="lines">@@ -97,27 +73,11 @@
</span><span class="cx">     void removeAllUserContentExtensions();
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-
-    void addUserScriptInternal(InjectedBundleScriptWorld&amp;, uint64_t userScriptIdentifier, WebCore::UserScript&amp;&amp;);
-    void removeUserScriptInternal(InjectedBundleScriptWorld&amp;, uint64_t userScriptIdentifier);
-    void addUserStyleSheetInternal(InjectedBundleScriptWorld&amp;, uint64_t userStyleSheetIdentifier, WebCore::UserStyleSheet&amp;&amp;);
-    void removeUserStyleSheetInternal(InjectedBundleScriptWorld&amp;, uint64_t userStyleSheetIdentifier);
-
-
</del><span class="cx">     uint64_t m_identifier;
</span><ins>+    Ref&lt;WebCore::UserContentController&gt; m_userContentController;
+#if ENABLE(USER_MESSAGE_HANDLERS)
</ins><span class="cx">     HashMap&lt;uint64_t, RefPtr&lt;WebUserMessageHandlerDescriptorProxy&gt;&gt; m_userMessageHandlerDescriptors;
</span><del>-
-    typedef HashMap&lt;RefPtr&lt;InjectedBundleScriptWorld&gt;, Vector&lt;std::pair&lt;uint64_t, WebCore::UserScript&gt;&gt;&gt; WorldToUserScriptMap;
-    WorldToUserScriptMap m_userScripts;
-
-    typedef HashMap&lt;RefPtr&lt;InjectedBundleScriptWorld&gt;, Vector&lt;std::pair&lt;uint64_t, WebCore::UserStyleSheet&gt;&gt;&gt; WorldToUserStyleSheetMap;
-    WorldToUserStyleSheetMap m_userStyleSheets;
-
-    WebCore::UserMessageHandlerDescriptorMap m_userMessageHandlerDescriptorsMap;
-#if ENABLE(CONTENT_EXTENSIONS)
-    WebCore::ContentExtensions::ContentExtensionsBackend m_contentExtensionBackend;
</del><span class="cx"> #endif
</span><del>-
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessUserContentWebUserContentControllermessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/UserContent/WebUserContentController.messages.in (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/UserContent/WebUserContentController.messages.in        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebKit2/WebProcess/UserContent/WebUserContentController.messages.in        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -27,12 +27,12 @@
</span><span class="cx">     AddUserContentWorlds(Vector&lt;std::pair&lt;uint64_t, String&gt;&gt; worlds);
</span><span class="cx">     RemoveUserContentWorlds(Vector&lt;uint64_t&gt; worldIdentifiers);
</span><span class="cx"> 
</span><del>-    AddUserScripts(Vector&lt;struct WebKit::WebUserScriptData&gt; userScripts);
-    RemoveUserScript(uint64_t worldIdentifier, uint64_t identifier);
</del><ins>+    AddUserScripts(Vector&lt;std::pair&lt;uint64_t, WebCore::UserScript&gt;&gt; userScripts);
+    RemoveUserScript(uint64_t worldIdentifier, String url);
</ins><span class="cx">     RemoveAllUserScripts(Vector&lt;uint64_t&gt; worldIdentifiers);
</span><span class="cx"> 
</span><del>-    AddUserStyleSheets(Vector&lt;struct WebKit::WebUserStyleSheetData&gt; userStyleSheets);
-    RemoveUserStyleSheet(uint64_t worldIdentifier, uint64_t identifier);
</del><ins>+    AddUserStyleSheets(Vector&lt;std::pair&lt;uint64_t, WebCore::UserStyleSheet&gt;&gt; userStyleSheets);
+    RemoveUserStyleSheet(uint64_t worldIdentifier, String url);
</ins><span class="cx">     RemoveAllUserStyleSheets(Vector&lt;uint64_t&gt; worldIdentifiers);
</span><span class="cx"> 
</span><span class="cx">     AddUserScriptMessageHandlers(Vector&lt;WebKit::WebScriptMessageHandlerHandle&gt; scriptMessageHandlers);
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -39,7 +39,6 @@
</span><span class="cx"> #include &quot;EventDispatcher.h&quot;
</span><span class="cx"> #include &quot;InjectedBundle.h&quot;
</span><span class="cx"> #include &quot;InjectedBundleBackForwardList.h&quot;
</span><del>-#include &quot;InjectedBundleScriptWorld.h&quot;
</del><span class="cx"> #include &quot;Logging.h&quot;
</span><span class="cx"> #include &quot;NetscapePlugin.h&quot;
</span><span class="cx"> #include &quot;NotificationPermissionRequestManager.h&quot;
</span><span class="lines">@@ -397,7 +396,7 @@
</span><span class="cx"> 
</span><span class="cx">     pageConfiguration.databaseProvider = WebDatabaseProvider::getOrCreate(m_pageGroup-&gt;pageGroupID());
</span><span class="cx">     pageConfiguration.storageNamespaceProvider = WebStorageNamespaceProvider::getOrCreate(m_pageGroup-&gt;pageGroupID());
</span><del>-    pageConfiguration.userContentProvider = m_userContentController.ptr();
</del><ins>+    pageConfiguration.userContentController = &amp;m_userContentController-&gt;userContentController();
</ins><span class="cx">     pageConfiguration.visitedLinkStore = VisitedLinkTableController::getOrCreate(parameters.visitedLinkTableID);
</span><span class="cx"> 
</span><span class="cx"> #if USE(APPLE_INTERNAL_SDK)
</span><span class="lines">@@ -5217,21 +5216,21 @@
</span><span class="cx"> 
</span><span class="cx"> void WebPage::addUserScript(const String&amp; source, WebCore::UserContentInjectedFrames injectedFrames, WebCore::UserScriptInjectionTime injectionTime)
</span><span class="cx"> {
</span><del>-    WebCore::UserScript userScript{ source, WebCore::blankURL(), Vector&lt;String&gt;(), Vector&lt;String&gt;(), injectionTime, injectedFrames };
</del><ins>+    WebCore::UserScript userScript(source, WebCore::blankURL(), Vector&lt;String&gt;(), Vector&lt;String&gt;(), injectionTime, injectedFrames);
</ins><span class="cx"> 
</span><del>-    m_userContentController-&gt;addUserScript(*InjectedBundleScriptWorld::normalWorld(), WTFMove(userScript));
</del><ins>+    m_userContentController-&gt;userContentController().addUserScript(mainThreadNormalWorld(), std::make_unique&lt;WebCore::UserScript&gt;(userScript));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebPage::addUserStyleSheet(const String&amp; source, WebCore::UserContentInjectedFrames injectedFrames)
</span><span class="cx"> {
</span><del>-    WebCore::UserStyleSheet userStyleSheet{ source, WebCore::blankURL(), Vector&lt;String&gt;(), Vector&lt;String&gt;(), injectedFrames, UserStyleUserLevel };
</del><ins>+    WebCore::UserStyleSheet userStyleSheet(source, WebCore::blankURL(), Vector&lt;String&gt;(), Vector&lt;String&gt;(), injectedFrames, UserStyleUserLevel);
</ins><span class="cx"> 
</span><del>-    m_userContentController-&gt;addUserStyleSheet(*InjectedBundleScriptWorld::normalWorld(), WTFMove(userStyleSheet));
</del><ins>+    m_userContentController-&gt;userContentController().addUserStyleSheet(mainThreadNormalWorld(), std::make_unique&lt;WebCore::UserStyleSheet&gt;(userStyleSheet), InjectInExistingDocuments);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebPage::removeAllUserContent()
</span><span class="cx"> {
</span><del>-    m_userContentController-&gt;removeAllUserContent();
</del><ins>+    m_userContentController-&gt;userContentController().removeAllUserContent();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebPage::dispatchDidLayout(WebCore::LayoutMilestones milestones)
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPageGroupProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPageGroupProxy.cpp (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPageGroupProxy.cpp        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPageGroupProxy.cpp        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -56,9 +56,9 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-WebUserContentController&amp; WebPageGroupProxy::userContentController()
</del><ins>+WebCore::UserContentController&amp; WebPageGroupProxy::userContentController()
</ins><span class="cx"> {
</span><del>-    return m_userContentController;
</del><ins>+    return m_userContentController-&gt;userContentController();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPageGroupProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPageGroupProxy.h (197949 => 197950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPageGroupProxy.h        2016-03-10 20:09:58 UTC (rev 197949)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPageGroupProxy.h        2016-03-10 20:46:57 UTC (rev 197950)
</span><span class="lines">@@ -32,6 +32,7 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> class PageGroup;
</span><ins>+class UserContentController;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> namespace WebKit {
</span><span class="lines">@@ -49,7 +50,7 @@
</span><span class="cx">     bool isVisibleToHistoryClient() const { return m_data.visibleToHistoryClient; }
</span><span class="cx">     WebCore::PageGroup* corePageGroup() const { return m_pageGroup; }
</span><span class="cx"> 
</span><del>-    WebUserContentController&amp; userContentController();
</del><ins>+    WebCore::UserContentController&amp; userContentController();
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     WebPageGroupProxy(const WebPageGroupData&amp;);
</span></span></pre>
</div>
</div>

</body>
</html>