<!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>[181212] 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/181212">181212</a></dd>
<dt>Author</dt> <dd>darin@apple.com</dd>
<dt>Date</dt> <dd>2015-03-07 13:51:33 -0800 (Sat, 07 Mar 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Do a bit of EventNames tidying
https://bugs.webkit.org/show_bug.cgi?id=142438

Reviewed by Anders Carlsson.

* dom/EventNames.h: Sorted the event names into a single list instead of
the rudimentary attempts at organizing the list that simply made it hard
to see what is and is not in the list. Removed two unused event names.
I'm sure there are more. Reorganized the EventName class, now a struct,
into a more conventional &quot;public first&quot; order. Got the function bodies
out of the struct so we can see more clearly what is in the struct.
Made more things const.
(WebCore::EventNames::touchEventNames): Changed the return value to a
std::array of reference wrappers rather than a vector of atomic strings.
This should eliminate unnecessary memory allocation and reference count churn.

* dom/EventNames.cpp: Changed initialization based on the above.

* dom/EventTarget.cpp:
(WebCore::EventTarget::getEventListeners): Use NeverDestroyed instead of
DEPRECATED_DEFINE_LOCAL and also just tightened up the function a bit.

* dom/Node.cpp:
(WebCore::Node::didMoveToNewDocument): Streamlined this function with
modern for loops, auto, and also tried to make what it does a bit clearer,
by making loops that are just based on numbers of event listeners look a
bit less like code that actually iterates a vector of listeners. Also used
the type unsigned instead of size_t.

* platform/ThreadGlobalData.h: Updated since it's a struct instead of class now.
(Why is this file in platform!?)</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoredomEventNamescpp">trunk/Source/WebCore/dom/EventNames.cpp</a></li>
<li><a href="#trunkSourceWebCoredomEventNamesh">trunk/Source/WebCore/dom/EventNames.h</a></li>
<li><a href="#trunkSourceWebCoredomEventTargetcpp">trunk/Source/WebCore/dom/EventTarget.cpp</a></li>
<li><a href="#trunkSourceWebCoredomNodecpp">trunk/Source/WebCore/dom/Node.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformThreadGlobalDatah">trunk/Source/WebCore/platform/ThreadGlobalData.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (181211 => 181212)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-03-07 19:14:49 UTC (rev 181211)
+++ trunk/Source/WebCore/ChangeLog        2015-03-07 21:51:33 UTC (rev 181212)
</span><span class="lines">@@ -1,3 +1,37 @@
</span><ins>+2015-03-07  Darin Adler  &lt;darin@apple.com&gt;
+
+        Do a bit of EventNames tidying
+        https://bugs.webkit.org/show_bug.cgi?id=142438
+
+        Reviewed by Anders Carlsson.
+
+        * dom/EventNames.h: Sorted the event names into a single list instead of
+        the rudimentary attempts at organizing the list that simply made it hard
+        to see what is and is not in the list. Removed two unused event names.
+        I'm sure there are more. Reorganized the EventName class, now a struct,
+        into a more conventional &quot;public first&quot; order. Got the function bodies
+        out of the struct so we can see more clearly what is in the struct.
+        Made more things const.
+        (WebCore::EventNames::touchEventNames): Changed the return value to a
+        std::array of reference wrappers rather than a vector of atomic strings.
+        This should eliminate unnecessary memory allocation and reference count churn.
+
+        * dom/EventNames.cpp: Changed initialization based on the above.
+
+        * dom/EventTarget.cpp:
+        (WebCore::EventTarget::getEventListeners): Use NeverDestroyed instead of
+        DEPRECATED_DEFINE_LOCAL and also just tightened up the function a bit.
+
+        * dom/Node.cpp:
+        (WebCore::Node::didMoveToNewDocument): Streamlined this function with
+        modern for loops, auto, and also tried to make what it does a bit clearer,
+        by making loops that are just based on numbers of event listeners look a
+        bit less like code that actually iterates a vector of listeners. Also used
+        the type unsigned instead of size_t.
+
+        * platform/ThreadGlobalData.h: Updated since it's a struct instead of class now.
+        (Why is this file in platform!?)
+
</ins><span class="cx"> 2015-03-07  Brent Fulgham  &lt;bfulgham@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Win] Increase TestWebKitAPI Test Coverage
</span></span></pre></div>
<a id="trunkSourceWebCoredomEventNamescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/EventNames.cpp (181211 => 181212)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/EventNames.cpp        2015-03-07 19:14:49 UTC (rev 181211)
+++ trunk/Source/WebCore/dom/EventNames.cpp        2015-03-07 21:51:33 UTC (rev 181212)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2005 Apple Inc.
</del><ins>+ * Copyright (C) 2005, 2015 Apple Inc.
</ins><span class="cx">  *
</span><span class="cx">  * This library is free software; you can redistribute it and/or
</span><span class="cx">  * modify it under the terms of the GNU Library General Public
</span><span class="lines">@@ -24,11 +24,10 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> #define INITIALIZE_EVENT_NAME(name) \
</span><del>-    , name##Event(#name, AtomicString::ConstructFromLiteral)
</del><ins>+    name##Event(#name, AtomicString::ConstructFromLiteral),
</ins><span class="cx"> 
</span><span class="cx"> EventNames::EventNames()
</span><del>-    : dummy(0)
-    DOM_EVENT_NAMES_FOR_EACH(INITIALIZE_EVENT_NAME)
</del><ins>+    : DOM_EVENT_NAMES_FOR_EACH(INITIALIZE_EVENT_NAME) dummy(0)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoredomEventNamesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/EventNames.h (181211 => 181212)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/EventNames.h        2015-03-07 19:14:49 UTC (rev 181211)
+++ trunk/Source/WebCore/dom/EventNames.h        2015-03-07 21:51:33 UTC (rev 181212)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2005, 2007 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2005, 2007, 2015 Apple Inc. All rights reserved.
</ins><span class="cx">  * Copyright (C) 2006 Jon Shier (jshier@iastate.edu)
</span><span class="cx">  *
</span><span class="cx">  * This library is free software; you can redistribute it and/or
</span><span class="lines">@@ -23,13 +23,36 @@
</span><span class="cx"> #define EventNames_h
</span><span class="cx"> 
</span><span class="cx"> #include &quot;ThreadGlobalData.h&quot;
</span><ins>+#include &lt;array&gt;
+#include &lt;functional&gt;
</ins><span class="cx"> #include &lt;wtf/text/AtomicString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> #define DOM_EVENT_NAMES_FOR_EACH(macro) \
</span><del>-    \
</del><ins>+    macro(DOMActivate) \
+    macro(DOMCharacterDataModified) \
+    macro(DOMContentLoaded) \
+    macro(DOMFocusIn) \
+    macro(DOMFocusOut) \
+    macro(DOMNodeInserted) \
+    macro(DOMNodeInsertedIntoDocument) \
+    macro(DOMNodeRemoved) \
+    macro(DOMNodeRemovedFromDocument) \
+    macro(DOMSubtreeModified) \
</ins><span class="cx">     macro(abort) \
</span><ins>+    macro(active) \
+    macro(addsourcebuffer) \
+    macro(addstream) \
+    macro(addtrack) \
+    macro(animationend) \
+    macro(animationiteration) \
+    macro(animationstart) \
+    macro(audioend) \
+    macro(audioprocess) \
+    macro(audiostart) \
+    macro(autocomplete) \
+    macro(autocompleteerror) \
</ins><span class="cx">     macro(beforecopy) \
</span><span class="cx">     macro(beforecut) \
</span><span class="cx">     macro(beforeload) \
</span><span class="lines">@@ -37,7 +60,10 @@
</span><span class="cx">     macro(beforeunload) \
</span><span class="cx">     macro(blocked) \
</span><span class="cx">     macro(blur) \
</span><ins>+    macro(boundary) \
</ins><span class="cx">     macro(cached) \
</span><ins>+    macro(canplay) \
+    macro(canplaythrough) \
</ins><span class="cx">     macro(change) \
</span><span class="cx">     macro(chargingchange) \
</span><span class="cx">     macro(chargingtimechange) \
</span><span class="lines">@@ -49,14 +75,16 @@
</span><span class="cx">     macro(compositionstart) \
</span><span class="cx">     macro(compositionupdate) \
</span><span class="cx">     macro(connect) \
</span><ins>+    macro(connecting) \
</ins><span class="cx">     macro(contextmenu) \
</span><span class="cx">     macro(copy) \
</span><ins>+    macro(cuechange) \
</ins><span class="cx">     macro(cut) \
</span><ins>+    macro(datachannel) \
</ins><span class="cx">     macro(dblclick) \
</span><span class="cx">     macro(devicemotion) \
</span><span class="cx">     macro(deviceorientation) \
</span><span class="cx">     macro(dischargingtimechange) \
</span><del>-    macro(display) \
</del><span class="cx">     macro(downloading) \
</span><span class="cx">     macro(drag) \
</span><span class="cx">     macro(dragend) \
</span><span class="lines">@@ -65,16 +93,30 @@
</span><span class="cx">     macro(dragover) \
</span><span class="cx">     macro(dragstart) \
</span><span class="cx">     macro(drop) \
</span><ins>+    macro(durationchange) \
+    macro(emptied) \
+    macro(end) \
+    macro(ended) \
+    macro(enter) \
</ins><span class="cx">     macro(error) \
</span><ins>+    macro(exit) \
</ins><span class="cx">     macro(focus) \
</span><span class="cx">     macro(focusin) \
</span><span class="cx">     macro(focusout) \
</span><del>-    macro(gesturetap) \
-    macro(gesturetapdown) \
-    macro(gesturescrollstart) \
</del><ins>+    macro(gamepadconnected) \
+    macro(gamepaddisconnected) \
+    macro(gesturechange) \
+    macro(gestureend) \
</ins><span class="cx">     macro(gesturescrollend) \
</span><ins>+    macro(gesturescrollstart) \
</ins><span class="cx">     macro(gesturescrollupdate) \
</span><ins>+    macro(gesturestart) \
+    macro(gesturetap) \
+    macro(gesturetapdown) \
</ins><span class="cx">     macro(hashchange) \
</span><ins>+    macro(icecandidate) \
+    macro(iceconnectionstatechange) \
+    macro(inactive) \
</ins><span class="cx">     macro(input) \
</span><span class="cx">     macro(invalid) \
</span><span class="cx">     macro(keydown) \
</span><span class="lines">@@ -82,9 +124,13 @@
</span><span class="cx">     macro(keyup) \
</span><span class="cx">     macro(levelchange) \
</span><span class="cx">     macro(load) \
</span><ins>+    macro(loadeddata) \
+    macro(loadedmetadata) \
+    macro(loadend) \
</ins><span class="cx">     macro(loading) \
</span><span class="cx">     macro(loadingdone) \
</span><span class="cx">     macro(loadstart) \
</span><ins>+    macro(mark) \
</ins><span class="cx">     macro(message) \
</span><span class="cx">     macro(mousedown) \
</span><span class="cx">     macro(mouseenter) \
</span><span class="lines">@@ -94,263 +140,180 @@
</span><span class="cx">     macro(mouseover) \
</span><span class="cx">     macro(mouseup) \
</span><span class="cx">     macro(mousewheel) \
</span><ins>+    macro(mute) \
+    macro(negotiationneeded) \
+    macro(nomatch) \
</ins><span class="cx">     macro(noupdate) \
</span><span class="cx">     macro(obsolete) \
</span><span class="cx">     macro(offline) \
</span><span class="cx">     macro(online) \
</span><span class="cx">     macro(open) \
</span><ins>+    macro(orientationchange) \
+    macro(overconstrained) \
</ins><span class="cx">     macro(overflowchanged) \
</span><span class="cx">     macro(pagehide) \
</span><span class="cx">     macro(pageshow) \
</span><span class="cx">     macro(paste) \
</span><ins>+    macro(pause) \
+    macro(play) \
+    macro(playing) \
+    macro(pointerlockchange) \
+    macro(pointerlockerror) \
</ins><span class="cx">     macro(popstate) \
</span><ins>+    macro(progress) \
+    macro(ratechange) \
</ins><span class="cx">     macro(readystatechange) \
</span><ins>+    macro(removesourcebuffer) \
+    macro(removestream) \
+    macro(removetrack) \
</ins><span class="cx">     macro(reset) \
</span><span class="cx">     macro(resize) \
</span><ins>+    macro(result) \
+    macro(resume) \
</ins><span class="cx">     macro(scroll) \
</span><span class="cx">     macro(search) \
</span><ins>+    macro(securitypolicyviolation) \
+    macro(seeked) \
+    macro(seeking) \
</ins><span class="cx">     macro(select) \
</span><del>-    macro(selectstart) \
</del><span class="cx">     macro(selectionchange) \
</span><ins>+    macro(selectstart) \
+    macro(show) \
+    macro(signalingstatechange) \
+    macro(soundend) \
+    macro(soundstart) \
+    macro(sourceclose) \
+    macro(sourceended) \
+    macro(sourceopen) \
+    macro(speechend) \
+    macro(speechstart) \
+    macro(stalled) \
+    macro(start) \
+    macro(started) \
</ins><span class="cx">     macro(storage) \
</span><span class="cx">     macro(submit) \
</span><ins>+    macro(success) \
+    macro(suspend) \
</ins><span class="cx">     macro(textInput) \
</span><ins>+    macro(timeout) \
+    macro(timeupdate) \
+    macro(tonechange) \
+    macro(touchcancel) \
+    macro(touchend) \
+    macro(touchmove) \
+    macro(touchstart) \
+    macro(transitionend) \
</ins><span class="cx">     macro(unload) \
</span><ins>+    macro(unmute) \
+    macro(update) \
+    macro(updateend) \
</ins><span class="cx">     macro(updateready) \
</span><ins>+    macro(updatestart) \
</ins><span class="cx">     macro(upgradeneeded) \
</span><span class="cx">     macro(versionchange) \
</span><span class="cx">     macro(visibilitychange) \
</span><del>-    /* ENABLE(WILL_REVEAL_EDGE_EVENT) */ \
-    macro(webkitwillrevealbottom) \
-    macro(webkitwillrevealleft) \
-    macro(webkitwillrevealright) \
-    macro(webkitwillrevealtop) \
-    /* End of ENABLE(WILL_REVEAL_EDGE_EVENT) */ \
-    macro(wheel) \
-    macro(write) \
-    macro(writeend) \
-    macro(writestart) \
-    macro(zoom) \
-    \
-    macro(DOMActivate) \
-    macro(DOMFocusIn) \
-    macro(DOMFocusOut) \
-    macro(DOMCharacterDataModified) \
-    macro(DOMNodeInserted) \
-    macro(DOMNodeInsertedIntoDocument) \
-    macro(DOMNodeRemoved) \
-    macro(DOMNodeRemovedFromDocument) \
-    macro(DOMSubtreeModified) \
-    macro(DOMContentLoaded) \
-    \
-    macro(webkitBeforeTextInserted) \
-    macro(webkitEditableContentChanged) \
-    \
-    macro(canplay) \
-    macro(canplaythrough) \
-    macro(durationchange) \
-    macro(emptied) \
-    macro(ended) \
-    macro(loadeddata) \
-    macro(loadedmetadata) \
-    macro(pause) \
-    macro(play) \
-    macro(playing) \
-    macro(ratechange) \
-    macro(seeked) \
-    macro(seeking) \
-    macro(timeupdate) \
</del><span class="cx">     macro(volumechange) \
</span><span class="cx">     macro(waiting) \
</span><del>-    \
-    macro(active) \
-    macro(inactive) \
-    macro(addtrack) \
-    macro(cuechange) \
-    macro(enter) \
-    macro(exit) \
-    \
</del><ins>+    macro(webglcontextcreationerror) \
+    macro(webglcontextlost) \
+    macro(webglcontextrestored) \
+    macro(webkitAnimationEnd) \
+    macro(webkitAnimationIteration) \
+    macro(webkitAnimationStart) \
+    macro(webkitBeforeTextInserted) \
+    macro(webkitEditableContentChanged) \
+    macro(webkitTransitionEnd) \
</ins><span class="cx">     macro(webkitbeginfullscreen) \
</span><ins>+    macro(webkitcurrentplaybacktargetiswirelesschanged) \
+    macro(webkitdeviceproximity) \
</ins><span class="cx">     macro(webkitendfullscreen) \
</span><del>-    \
-    macro(addsourcebuffer) \
-    macro(removesourcebuffer) \
-    macro(sourceopen) \
-    macro(sourceended) \
-    macro(sourceclose) \
-    macro(update) \
-    macro(updateend) \
-    macro(updatestart) \
-    macro(webkitaddsourcebuffer) \
-    macro(webkitremovesourcebuffer) \
-    macro(webkitsourceopen) \
-    macro(webkitsourceended) \
-    macro(webkitsourceclose) \
-    \
</del><ins>+    macro(webkitfullscreenchange) \
+    macro(webkitfullscreenerror) \
</ins><span class="cx">     macro(webkitkeyadded) \
</span><span class="cx">     macro(webkitkeyerror) \
</span><span class="cx">     macro(webkitkeymessage) \
</span><span class="cx">     macro(webkitneedkey) \
</span><del>-    \
-    macro(progress) \
-    macro(stalled) \
-    macro(suspend) \
-    \
-    macro(webkitAnimationEnd) \
-    macro(webkitAnimationStart) \
-    macro(webkitAnimationIteration) \
-    macro(animationend) \
-    macro(animationstart) \
-    macro(animationiteration) \
-    \
-    macro(webkitTransitionEnd) \
-    macro(transitionend) \
-    \
-    macro(orientationchange) \
-    \
-    macro(timeout) \
-    \
-    macro(touchstart) \
-    macro(touchmove) \
-    macro(touchend) \
-    macro(touchcancel) \
-    \
-    macro(success) \
-    \
-    macro(loadend) \
-    \
-    macro(webkitfullscreenchange) \
-    macro(webkitfullscreenerror) \
-    \
-    macro(webkitspeechchange) \
-    \
-    macro(audiostart) \
-    macro(soundstart) \
-    macro(speechstart) \
-    macro(speechend) \
-    macro(soundend) \
-    macro(audioend) \
-    macro(result) \
-    macro(nomatch) \
-    macro(start) \
-    macro(end) \
-    macro(mark) \
-    macro(boundary) \
-    macro(resume) \
-    \
-    macro(webglcontextlost) \
-    macro(webglcontextrestored) \
-    macro(webglcontextcreationerror) \
-    \
-    macro(audioprocess) \
-    \
-    macro(connecting) \
-    macro(addstream) \
-    macro(removestream) \
-    macro(signalingstatechange) \
-    macro(removetrack) \
-    macro(overconstrained) \
-    macro(mute) \
-    macro(unmute) \
-    macro(started) \
-    macro(iceconnectionstatechange) \
-    macro(icecandidate) \
-    macro(negotiationneeded) \
-    macro(datachannel) \
-    macro(tonechange) \
-    \
-    macro(show) \
-    \
-    macro(pointerlockchange) \
-    macro(pointerlockerror) \
-    \
-    macro(webkitregionoversetchange) \
-    \
</del><span class="cx">     macro(webkitnetworkinfochange) \
</span><del>-    \
-    macro(webkitresourcetimingbufferfull) \
-    \
-    macro(webkitdeviceproximity) \
-    \
-    macro(securitypolicyviolation) \
-    \
-    /* ENABLE(WIRELESS_PLAYBACK_TARGET) */ \
-    macro(webkitcurrentplaybacktargetiswirelesschanged) \
</del><span class="cx">     macro(webkitplaybacktargetavailabilitychanged) \
</span><del>-    /* End of ENABLE(WIRELESS_PLAYBACK_TARGET) */ \
-    \
-    /* ENABLE(IOS_GESTURE_EVENTS) */ \
-    macro(gesturestart) \
-    macro(gesturechange) \
-    macro(gestureend) \
-    /* End of ENABLE(IOS_GESTURE_EVENTS) */ \
-    \
-    /* ENABLE(GAMEPAD) */ \
-    macro(gamepadconnected) \
-    macro(gamepaddisconnected) \
-    /* End of ENABLE(GAMEPAD) */ \
-    \
-    /* ENABLE(REQUEST_AUTOCOMPLETE) */ \
-    macro(autocomplete) \
-    macro(autocompleteerror) \
-    /* End of ENABLE(REQUEST_AUTOCOMPLETE) */ \
-    \
-    /* PLATFORM(IOS) */ \
</del><span class="cx">     macro(webkitpresentationmodechanged) \
</span><del>-    /* End of ENABLE(WIRELESS_PLAYBACK_TARGET) */ \
-
</del><ins>+    macro(webkitregionoversetchange) \
+    macro(webkitremovesourcebuffer) \
+    macro(webkitresourcetimingbufferfull) \
+    macro(webkitsourceclose) \
+    macro(webkitsourceended) \
+    macro(webkitsourceopen) \
+    macro(webkitspeechchange) \
+    macro(webkitwillrevealbottom) \
+    macro(webkitwillrevealleft) \
+    macro(webkitwillrevealright) \
+    macro(webkitwillrevealtop) \
+    macro(wheel) \
+    macro(write) \
+    macro(writeend) \
+    macro(writestart) \
+    macro(zoom) \
</ins><span class="cx"> // end of DOM_EVENT_NAMES_FOR_EACH
</span><span class="cx"> 
</span><del>-class EventNames {
</del><ins>+struct EventNames {
</ins><span class="cx">     WTF_MAKE_NONCOPYABLE(EventNames); WTF_MAKE_FAST_ALLOCATED;
</span><del>-    int dummy; // Needed to make initialization macro work.
-    // Private to prevent accidental call to EventNames() instead of eventNames()
-    EventNames();
-    friend class ThreadGlobalData;
</del><span class="cx"> 
</span><span class="cx"> public:
</span><del>-    #define DOM_EVENT_NAMES_DECLARE(name) AtomicString name##Event;
</del><ins>+#define DOM_EVENT_NAMES_DECLARE(name) const AtomicString name##Event;
</ins><span class="cx">     DOM_EVENT_NAMES_FOR_EACH(DOM_EVENT_NAMES_DECLARE)
</span><del>-    #undef DOM_EVENT_NAMES_DECLARE
</del><ins>+#undef DOM_EVENT_NAMES_DECLARE
</ins><span class="cx"> 
</span><del>-    inline bool isGestureEventType(const AtomicString&amp; eventType) const
-    {
-        return eventType == gesturestartEvent || eventType == gesturechangeEvent || eventType == gestureendEvent;
-    }
</del><ins>+    // FIXME: Inelegant to call these both event names and event types.
+    // We should choose one term and stick to it.
+    bool isGestureEventType(const AtomicString&amp; eventType) const;
+    bool isTouchEventType(const AtomicString&amp; eventType) const;
+#if ENABLE(GAMEPAD)
+    bool isGamepadEventType(const AtomicString&amp; eventType) const;
+#endif
</ins><span class="cx"> 
</span><del>-    inline bool isTouchEventType(const AtomicString&amp; eventType) const
-    {
-        return eventType == touchstartEvent
-            || eventType == touchmoveEvent
-            || eventType == touchendEvent
-            || eventType == touchcancelEvent;
-    }
</del><ins>+    std::array&lt;std::reference_wrapper&lt;const AtomicString&gt;, 4&gt; touchEventNames() const;
</ins><span class="cx"> 
</span><del>-    Vector&lt;AtomicString&gt; touchEventNames() const
-    {
-        Vector&lt;AtomicString&gt; names;
-        names.reserveCapacity(4);
-        names.append(touchstartEvent);
-        names.append(touchmoveEvent);
-        names.append(touchendEvent);
-        names.append(touchcancelEvent);
-        return names;
-    }
</del><ins>+private:
+    EventNames(); // Private to prevent accidental call to EventNames() instead of eventNames().
+    friend class ThreadGlobalData; // Allow ThreadGlobalData to create the per-thread EventNames object.
</ins><span class="cx"> 
</span><del>-#if ENABLE(GAMEPAD)
-    inline bool isGamepadEventType(const AtomicString&amp; eventType) const
-    {
-        return eventType == gamepadconnectedEvent
-            || eventType == gamepaddisconnectedEvent;
-    }
-#endif
</del><ins>+    int dummy; // Needed to make initialization macro work.
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-inline EventNames&amp; eventNames()
</del><ins>+const EventNames&amp; eventNames();
+
+inline const EventNames&amp; eventNames()
</ins><span class="cx"> {
</span><span class="cx">     return threadGlobalData().eventNames();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline bool EventNames::isGestureEventType(const AtomicString&amp; eventType) const
+{
+    return eventType == gesturestartEvent || eventType == gesturechangeEvent || eventType == gestureendEvent;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline bool EventNames::isTouchEventType(const AtomicString&amp; eventType) const
+{
+    return eventType == touchstartEvent
+        || eventType == touchmoveEvent
+        || eventType == touchendEvent
+        || eventType == touchcancelEvent;
+}
+
+inline std::array&lt;std::reference_wrapper&lt;const AtomicString&gt;, 4&gt; EventNames::touchEventNames() const
+{
+    return { { touchstartEvent, touchmoveEvent, touchendEvent, touchcancelEvent } };
+}
+
+#if ENABLE(GAMEPAD)
+
+inline bool EventNames::isGamepadEventType(const AtomicString&amp; eventType) const
+{
+    return eventType == gamepadconnectedEvent
+        || eventType == gamepaddisconnectedEvent;
+}
+
</ins><span class="cx"> #endif
</span><ins>+
+}
+
+#endif
</ins></span></pre></div>
<a id="trunkSourceWebCoredomEventTargetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/EventTarget.cpp (181211 => 181212)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/EventTarget.cpp        2015-03-07 19:14:49 UTC (rev 181211)
+++ trunk/Source/WebCore/dom/EventTarget.cpp        2015-03-07 21:51:33 UTC (rev 181212)
</span><span class="lines">@@ -38,6 +38,7 @@
</span><span class="cx"> #include &quot;WebKitAnimationEvent.h&quot;
</span><span class="cx"> #include &quot;WebKitTransitionEvent.h&quot;
</span><span class="cx"> #include &lt;wtf/MainThread.h&gt;
</span><ins>+#include &lt;wtf/NeverDestroyed.h&gt;
</ins><span class="cx"> #include &lt;wtf/Ref.h&gt;
</span><span class="cx"> #include &lt;wtf/StdLibExtras.h&gt;
</span><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><span class="lines">@@ -263,17 +264,10 @@
</span><span class="cx"> 
</span><span class="cx"> const EventListenerVector&amp; EventTarget::getEventListeners(const AtomicString&amp; eventType)
</span><span class="cx"> {
</span><del>-    DEPRECATED_DEFINE_STATIC_LOCAL(EventListenerVector, emptyVector, ());
-
-    EventTargetData* d = eventTargetData();
-    if (!d)
-        return emptyVector;
-
-    EventListenerVector* listenerVector = d-&gt;eventListenerMap.find(eventType);
-    if (!listenerVector)
-        return emptyVector;
-
-    return *listenerVector;
</del><ins>+    auto* data = eventTargetData();
+    auto* listenerVector = data ? data-&gt;eventListenerMap.find(eventType) : nullptr;
+    static NeverDestroyed&lt;EventListenerVector&gt; emptyVector;
+    return listenerVector ? *listenerVector : emptyVector.get();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void EventTarget::removeAllEventListeners()
</span></span></pre></div>
<a id="trunkSourceWebCoredomNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Node.cpp (181211 => 181212)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Node.cpp        2015-03-07 19:14:49 UTC (rev 181211)
+++ trunk/Source/WebCore/dom/Node.cpp        2015-03-07 21:51:33 UTC (rev 181212)
</span><span class="lines">@@ -1700,47 +1700,40 @@
</span><span class="cx"> {
</span><span class="cx">     TreeScopeAdopter::ensureDidMoveToNewDocumentWasCalled(oldDocument);
</span><span class="cx"> 
</span><del>-    if (const EventTargetData* eventTargetData = this-&gt;eventTargetData()) {
-        const EventListenerMap&amp; listenerMap = eventTargetData-&gt;eventListenerMap;
-        if (!listenerMap.isEmpty()) {
-            Vector&lt;AtomicString&gt; types = listenerMap.eventTypes();
-            for (unsigned i = 0; i &lt; types.size(); ++i)
-                document().addListenerTypeIfNeeded(types[i]);
</del><ins>+    if (auto* eventTargetData = this-&gt;eventTargetData()) {
+        if (!eventTargetData-&gt;eventListenerMap.isEmpty()) {
+            for (auto&amp; type : eventTargetData-&gt;eventListenerMap.eventTypes())
+                document().addListenerTypeIfNeeded(type);
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (AXObjectCache::accessibilityEnabled() &amp;&amp; oldDocument)
-        if (AXObjectCache* cache = oldDocument-&gt;existingAXObjectCache())
</del><ins>+    if (AXObjectCache::accessibilityEnabled() &amp;&amp; oldDocument) {
+        if (auto* cache = oldDocument-&gt;existingAXObjectCache())
</ins><span class="cx">             cache-&gt;remove(this);
</span><del>-
-    const EventListenerVector&amp; mousewheelListeners = getEventListeners(eventNames().mousewheelEvent);
-    for (size_t i = 0; i &lt; mousewheelListeners.size(); ++i) {
-        oldDocument-&gt;didRemoveWheelEventHandler();
-        document().didAddWheelEventHandler();
</del><span class="cx">     }
</span><span class="cx"> 
</span><del>-    const EventListenerVector&amp; wheelListeners = getEventListeners(eventNames().wheelEvent);
-    for (size_t i = 0; i &lt; wheelListeners.size(); ++i) {
</del><ins>+    unsigned numWheelEventHandlers = getEventListeners(eventNames().mousewheelEvent).size()
+        + getEventListeners(eventNames().wheelEvent).size();
+    for (unsigned i = 0; i &lt; numWheelEventHandlers; ++i) {
</ins><span class="cx">         oldDocument-&gt;didRemoveWheelEventHandler();
</span><span class="cx">         document().didAddWheelEventHandler();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    Vector&lt;AtomicString&gt; touchEventNames = eventNames().touchEventNames();
-    for (size_t i = 0; i &lt; touchEventNames.size(); ++i) {
-        const EventListenerVector&amp; listeners = getEventListeners(touchEventNames[i]);
-        for (size_t j = 0; j &lt; listeners.size(); ++j) {
-            oldDocument-&gt;didRemoveTouchEventHandler(this);
-            document().didAddTouchEventHandler(this);
-        }
</del><ins>+    unsigned numTouchEventHandlers = 0;
+    for (auto&amp; name : eventNames().touchEventNames())
+        numTouchEventHandlers += getEventListeners(name).size();
+    for (unsigned i = 0; i &lt; numTouchEventHandlers; ++i) {
+        oldDocument-&gt;didRemoveTouchEventHandler(this);
+        document().didAddTouchEventHandler(this);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (Vector&lt;std::unique_ptr&lt;MutationObserverRegistration&gt;&gt;* registry = mutationObserverRegistry()) {
-        for (const auto&amp; registration : *registry)
</del><ins>+    if (auto* registry = mutationObserverRegistry()) {
+        for (auto&amp; registration : *registry)
</ins><span class="cx">             document().addMutationObserverTypes(registration-&gt;mutationTypes());
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (HashSet&lt;MutationObserverRegistration*&gt;* transientRegistry = transientMutationObserverRegistry()) {
-        for (const auto&amp; registration : *transientRegistry)
</del><ins>+    if (auto* transientRegistry = transientMutationObserverRegistry()) {
+        for (auto&amp; registration : *transientRegistry)
</ins><span class="cx">             document().addMutationObserverTypes(registration-&gt;mutationTypes());
</span><span class="cx">     }
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformThreadGlobalDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ThreadGlobalData.h (181211 => 181212)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ThreadGlobalData.h        2015-03-07 19:14:49 UTC (rev 181211)
+++ trunk/Source/WebCore/platform/ThreadGlobalData.h        2015-03-07 21:51:33 UTC (rev 181212)
</span><span class="lines">@@ -39,10 +39,10 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-    class EventNames;
</del><span class="cx">     class ThreadTimers;
</span><span class="cx"> 
</span><span class="cx">     struct CachedResourceRequestInitiators;
</span><ins>+    struct EventNames;
</ins><span class="cx">     struct ICUConverterWrapper;
</span><span class="cx">     struct TECConverterWrapper;
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>