<!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>[162380] trunk/Source/WebCore</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/162380">162380</a></dd>
<dt>Author</dt> <dd>andersca@apple.com</dd>
<dt>Date</dt> <dd>2014-01-20 15:21:44 -0800 (Mon, 20 Jan 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>Give each page a UserContentController
https://bugs.webkit.org/show_bug.cgi?id=127315
Reviewed by Andreas Kling.
Add a UserContentController object to PageGroup and have the page group set it on any
pages that are added to the page group.
This is another step towards moving handling of user content away from PageGroup and make it
possible for each page to have different user content.
* page/Page.cpp:
(WebCore::Page::~Page):
(WebCore::Page::setUserContentController):
* page/Page.h:
(WebCore::Page::userContentController):
* page/PageGroup.cpp:
(WebCore::PageGroup::PageGroup):
(WebCore::PageGroup::addPage):
(WebCore::PageGroup::removePage):
* page/PageGroup.h:
* page/UserContentController.cpp:
(WebCore::UserContentController::addPage):
(WebCore::UserContentController::removePage):
* page/UserContentController.h:</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</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="#trunkSourceWebCorepagePageGroupcpp">trunk/Source/WebCore/page/PageGroup.cpp</a></li>
<li><a href="#trunkSourceWebCorepagePageGrouph">trunk/Source/WebCore/page/PageGroup.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>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (162379 => 162380)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-01-20 22:41:25 UTC (rev 162379)
+++ trunk/Source/WebCore/ChangeLog        2014-01-20 23:21:44 UTC (rev 162380)
</span><span class="lines">@@ -1,3 +1,31 @@
</span><ins>+2014-01-20 Anders Carlsson <andersca@apple.com>
+
+ Give each page a UserContentController
+ https://bugs.webkit.org/show_bug.cgi?id=127315
+
+ Reviewed by Andreas Kling.
+
+ Add a UserContentController object to PageGroup and have the page group set it on any
+ pages that are added to the page group.
+
+ This is another step towards moving handling of user content away from PageGroup and make it
+ possible for each page to have different user content.
+
+ * page/Page.cpp:
+ (WebCore::Page::~Page):
+ (WebCore::Page::setUserContentController):
+ * page/Page.h:
+ (WebCore::Page::userContentController):
+ * page/PageGroup.cpp:
+ (WebCore::PageGroup::PageGroup):
+ (WebCore::PageGroup::addPage):
+ (WebCore::PageGroup::removePage):
+ * page/PageGroup.h:
+ * page/UserContentController.cpp:
+ (WebCore::UserContentController::addPage):
+ (WebCore::UserContentController::removePage):
+ * page/UserContentController.h:
+
</ins><span class="cx"> 2014-01-20 Jeremy Jones <jeremyj@apple.com>
</span><span class="cx">
</span><span class="cx"> Add AVKit fullscreen video interface.
</span></span></pre></div>
<a id="trunkSourceWebCorepagePagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Page.cpp (162379 => 162380)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Page.cpp        2014-01-20 22:41:25 UTC (rev 162379)
+++ trunk/Source/WebCore/page/Page.cpp        2014-01-20 23:21:44 UTC (rev 162380)
</span><span class="lines">@@ -82,6 +82,7 @@
</span><span class="cx"> #include "StyleResolver.h"
</span><span class="cx"> #include "SubframeLoader.h"
</span><span class="cx"> #include "TextResourceDecoder.h"
</span><ins>+#include "UserContentController.h"
</ins><span class="cx"> #include "VisitedLinkState.h"
</span><span class="cx"> #include "VoidCallback.h"
</span><span class="cx"> #include "Widget.h"
</span><span class="lines">@@ -240,6 +241,9 @@
</span><span class="cx"> #ifndef NDEBUG
</span><span class="cx"> pageCounter.decrement();
</span><span class="cx"> #endif
</span><ins>+
+ if (m_userContentController)
+ m_userContentController->removePage(*this);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> uint64_t Page::renderTreeSize() const
</span><span class="lines">@@ -1577,6 +1581,17 @@
</span><span class="cx"> return m_framesHandlingBeforeUnloadEvent;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void Page::setUserContentController(UserContentController* userContentController)
+{
+ if (m_userContentController)
+ m_userContentController->removePage(*this);
+
+ m_userContentController = userContentController;
+
+ if (m_userContentController)
+ m_userContentController->addPage(*this);
+}
+
</ins><span class="cx"> Page::PageClients::PageClients()
</span><span class="cx"> : alternativeTextClient(nullptr)
</span><span class="cx"> , chromeClient(nullptr)
</span></span></pre></div>
<a id="trunkSourceWebCorepagePageh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Page.h (162379 => 162380)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Page.h        2014-01-20 22:41:25 UTC (rev 162379)
+++ trunk/Source/WebCore/page/Page.h        2014-01-20 23:21:44 UTC (rev 162380)
</span><span class="lines">@@ -101,6 +101,7 @@
</span><span class="cx"> class ScrollingCoordinator;
</span><span class="cx"> class Settings;
</span><span class="cx"> class StorageNamespace;
</span><ins>+class UserContentController;
</ins><span class="cx"> class ValidationMessageClient;
</span><span class="cx">
</span><span class="cx"> typedef uint64_t LinkHash;
</span><span class="lines">@@ -418,6 +419,9 @@
</span><span class="cx"> void setLastSpatialNavigationCandidateCount(unsigned count) { m_lastSpatialNavigationCandidatesCount = count; }
</span><span class="cx"> unsigned lastSpatialNavigationCandidateCount() const { return m_lastSpatialNavigationCandidatesCount; }
</span><span class="cx">
</span><ins>+ void setUserContentController(UserContentController*);
+ UserContentController* userContentController() { return m_userContentController.get(); }
+
</ins><span class="cx"> private:
</span><span class="cx"> void initGroup();
</span><span class="cx">
</span><span class="lines">@@ -556,6 +560,8 @@
</span><span class="cx">
</span><span class="cx"> unsigned m_lastSpatialNavigationCandidatesCount;
</span><span class="cx"> unsigned m_framesHandlingBeforeUnloadEvent;
</span><ins>+
+ RefPtr<UserContentController> m_userContentController;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> inline PageGroup& Page::group()
</span></span></pre></div>
<a id="trunkSourceWebCorepagePageGroupcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/PageGroup.cpp (162379 => 162380)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/PageGroup.cpp        2014-01-20 22:41:25 UTC (rev 162379)
+++ trunk/Source/WebCore/page/PageGroup.cpp        2014-01-20 23:21:44 UTC (rev 162380)
</span><span class="lines">@@ -38,6 +38,7 @@
</span><span class="cx"> #include "SecurityOrigin.h"
</span><span class="cx"> #include "Settings.h"
</span><span class="cx"> #include "StorageNamespace.h"
</span><ins>+#include "UserContentController.h"
</ins><span class="cx"> #include <wtf/StdLibExtras.h>
</span><span class="cx">
</span><span class="cx"> #if ENABLE(VIDEO_TRACK)
</span><span class="lines">@@ -64,6 +65,7 @@
</span><span class="cx"> : m_name(name)
</span><span class="cx"> , m_visitedLinksPopulated(false)
</span><span class="cx"> , m_identifier(getUniqueIdentifier())
</span><ins>+ , m_userContentController(UserContentController::create())
</ins><span class="cx"> , m_groupSettings(std::make_unique<GroupSettings>())
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="lines">@@ -169,12 +171,16 @@
</span><span class="cx"> {
</span><span class="cx"> ASSERT(!m_pages.contains(&page));
</span><span class="cx"> m_pages.add(&page);
</span><ins>+
+ page.setUserContentController(m_userContentController.get());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void PageGroup::removePage(Page& page)
</span><span class="cx"> {
</span><span class="cx"> ASSERT(m_pages.contains(&page));
</span><span class="cx"> m_pages.remove(&page);
</span><ins>+
+ page.setUserContentController(nullptr);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool PageGroup::isLinkVisited(LinkHash visitedLinkHash)
</span></span></pre></div>
<a id="trunkSourceWebCorepagePageGrouph"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/PageGroup.h (162379 => 162380)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/PageGroup.h        2014-01-20 22:41:25 UTC (rev 162379)
+++ trunk/Source/WebCore/page/PageGroup.h        2014-01-20 23:21:44 UTC (rev 162380)
</span><span class="lines">@@ -42,6 +42,7 @@
</span><span class="cx"> class Page;
</span><span class="cx"> class SecurityOrigin;
</span><span class="cx"> class StorageNamespace;
</span><ins>+ class UserContentController;
</ins><span class="cx">
</span><span class="cx"> #if ENABLE(VIDEO_TRACK)
</span><span class="cx"> class CaptionPreferencesChangedListener;
</span><span class="lines">@@ -123,6 +124,7 @@
</span><span class="cx"> RefPtr<StorageNamespace> m_localStorage;
</span><span class="cx"> HashMap<RefPtr<SecurityOrigin>, RefPtr<StorageNamespace>> m_transientLocalStorageMap;
</span><span class="cx">
</span><ins>+ RefPtr<UserContentController> m_userContentController;
</ins><span class="cx"> std::unique_ptr<UserScriptMap> m_userScripts;
</span><span class="cx"> std::unique_ptr<UserStyleSheetMap> m_userStyleSheets;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorepageUserContentControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/UserContentController.cpp (162379 => 162380)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/UserContentController.cpp        2014-01-20 22:41:25 UTC (rev 162379)
+++ trunk/Source/WebCore/page/UserContentController.cpp        2014-01-20 23:21:44 UTC (rev 162380)
</span><span class="lines">@@ -26,6 +26,9 @@
</span><span class="cx"> #include "config.h"
</span><span class="cx"> #include "UserContentController.h"
</span><span class="cx">
</span><ins>+#include "DOMWrapperWorld.h"
+#include "UserScript.h"
+
</ins><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> RefPtr<UserContentController> UserContentController::create()
</span><span class="lines">@@ -41,4 +44,16 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void UserContentController::addPage(Page& page)
+{
+ ASSERT(!m_pages.contains(&page));
+ m_pages.add(&page);
+}
+
+void UserContentController::removePage(Page& page)
+{
+ ASSERT(m_pages.contains(&page));
+ m_pages.remove(&page);
+}
+
</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 (162379 => 162380)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/UserContentController.h        2014-01-20 22:41:25 UTC (rev 162379)
+++ trunk/Source/WebCore/page/UserContentController.h        2014-01-20 23:21:44 UTC (rev 162380)
</span><span class="lines">@@ -26,18 +26,31 @@
</span><span class="cx"> #ifndef UserContentController_h
</span><span class="cx"> #define UserContentController_h
</span><span class="cx">
</span><ins>+#include <wtf/HashMap.h>
+#include <wtf/HashSet.h>
</ins><span class="cx"> #include <wtf/RefCounted.h>
</span><span class="cx"> #include <wtf/RefPtr.h>
</span><ins>+#include <wtf/Vector.h>
</ins><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><ins>+class DOMWrapperWorld;
+class Page;
+class URL;
+class UserScript;
+
</ins><span class="cx"> class UserContentController : public RefCounted<UserContentController> {
</span><span class="cx"> public:
</span><span class="cx"> static RefPtr<UserContentController> create();
</span><span class="cx"> ~UserContentController();
</span><span class="cx">
</span><ins>+ void addPage(Page&);
+ void removePage(Page&);
+
</ins><span class="cx"> private:
</span><span class="cx"> UserContentController();
</span><ins>+
+ HashSet<Page*> m_pages;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span></span></pre>
</div>
</div>
</body>
</html>