<!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>[206450] trunk</title>
</head>
<body>

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

<h3>Log Message</h3>
<pre>PlatformEvent::m_modifiers should be an OptionSet
https://bugs.webkit.org/show_bug.cgi?id=162326

Reviewed by Daniel Bates.

Source/WebCore:

* page/EventHandler.cpp:
(WebCore::EventHandler::handleAccessKey):
* page/EventHandler.h:
* page/mac/EventHandlerMac.mm:
(WebCore::EventHandler::accessKeyModifiers):
* platform/PlatformEvent.h:
(WebCore::PlatformEvent::shiftKey):
(WebCore::PlatformEvent::ctrlKey):
(WebCore::PlatformEvent::altKey):
(WebCore::PlatformEvent::metaKey):
(WebCore::PlatformEvent::modifiers):
(WebCore::PlatformEvent::PlatformEvent):
* platform/PlatformKeyboardEvent.h:
(WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
* platform/mac/PlatformEventFactoryMac.mm:
(WebCore::modifiersForEvent):
(WebCore::typeForEvent):
* replay/SerializationMethods.cpp:
(JSC::EncodingTraits&lt;PlatformKeyboardEvent&gt;::encodeValue):
(JSC::EncodingTraits&lt;PlatformKeyboardEvent&gt;::decodeValue):
* replay/WebInputs.json:

Source/WebKit2:

* Shared/WebEventConversion.cpp:
(WebKit::WebKit2PlatformMouseEvent::WebKit2PlatformMouseEvent):
(WebKit::WebKit2PlatformWheelEvent::WebKit2PlatformWheelEvent):
(WebKit::WebKit2PlatformKeyboardEvent::WebKit2PlatformKeyboardEvent):
(WebKit::WebKit2PlatformGestureEvent::WebKit2PlatformGestureEvent):

Source/WTF:

* wtf/OptionSet.h:
(WTF::OptionSet::operator!=):
(WTF::OptionSet::operator-):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFwtfOptionSeth">trunk/Source/WTF/wtf/OptionSet.h</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorepageEventHandlercpp">trunk/Source/WebCore/page/EventHandler.cpp</a></li>
<li><a href="#trunkSourceWebCorepageEventHandlerh">trunk/Source/WebCore/page/EventHandler.h</a></li>
<li><a href="#trunkSourceWebCorepageeflEventHandlerEflcpp">trunk/Source/WebCore/page/efl/EventHandlerEfl.cpp</a></li>
<li><a href="#trunkSourceWebCorepagegtkEventHandlerGtkcpp">trunk/Source/WebCore/page/gtk/EventHandlerGtk.cpp</a></li>
<li><a href="#trunkSourceWebCorepageiosEventHandlerIOSmm">trunk/Source/WebCore/page/ios/EventHandlerIOS.mm</a></li>
<li><a href="#trunkSourceWebCorepagemacEventHandlerMacmm">trunk/Source/WebCore/page/mac/EventHandlerMac.mm</a></li>
<li><a href="#trunkSourceWebCorepagewinEventHandlerWincpp">trunk/Source/WebCore/page/win/EventHandlerWin.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformPlatformEventh">trunk/Source/WebCore/platform/PlatformEvent.h</a></li>
<li><a href="#trunkSourceWebCoreplatformPlatformKeyboardEventh">trunk/Source/WebCore/platform/PlatformKeyboardEvent.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgtkPlatformKeyboardEventGtkcpp">trunk/Source/WebCore/platform/gtk/PlatformKeyboardEventGtk.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgtkPlatformMouseEventGtkcpp">trunk/Source/WebCore/platform/gtk/PlatformMouseEventGtk.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgtkPlatformWheelEventGtkcpp">trunk/Source/WebCore/platform/gtk/PlatformWheelEventGtk.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformiosPlatformEventFactoryIOSmm">trunk/Source/WebCore/platform/ios/PlatformEventFactoryIOS.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformmacPlatformEventFactoryMacmm">trunk/Source/WebCore/platform/mac/PlatformEventFactoryMac.mm</a></li>
<li><a href="#trunkSourceWebCorereplaySerializationMethodscpp">trunk/Source/WebCore/replay/SerializationMethods.cpp</a></li>
<li><a href="#trunkSourceWebCorereplayWebInputsjson">trunk/Source/WebCore/replay/WebInputs.json</a></li>
<li><a href="#trunkSourceWebKitwinAccessibleBasecpp">trunk/Source/WebKit/win/AccessibleBase.cpp</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2SharedWebEventConversioncpp">trunk/Source/WebKit2/Shared/WebEventConversion.cpp</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWTFOptionSetcpp">trunk/Tools/TestWebKitAPI/Tests/WTF/OptionSet.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WTF/ChangeLog        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2016-09-20  Anders Carlsson  &lt;andersca@apple.com&gt;
+
+        PlatformEvent::m_modifiers should be an OptionSet
+        https://bugs.webkit.org/show_bug.cgi?id=162326
+
+        Reviewed by Daniel Bates.
+
+        * wtf/OptionSet.h:
+        (WTF::OptionSet::operator!=):
+        (WTF::OptionSet::operator-):
+
</ins><span class="cx"> 2016-09-27  Jer Noble  &lt;jer.noble@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Remove deprecated ENCRYPTED_MEDIA implementation.
</span></span></pre></div>
<a id="trunkSourceWTFwtfOptionSeth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/OptionSet.h (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/OptionSet.h        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WTF/wtf/OptionSet.h        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -23,8 +23,7 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-#ifndef OptionSet_h
-#define OptionSet_h
</del><ins>+#pragma once
</ins><span class="cx"> 
</span><span class="cx"> #include &lt;initializer_list&gt;
</span><span class="cx"> #include &lt;iterator&gt;
</span><span class="lines">@@ -67,7 +66,7 @@
</span><span class="cx">     };
</span><span class="cx">     using iterator = Iterator&lt;StorageType&gt;;
</span><span class="cx"> 
</span><del>-    static OptionSet fromRaw(StorageType storageType)
</del><ins>+    static constexpr OptionSet fromRaw(StorageType storageType)
</ins><span class="cx">     {
</span><span class="cx">         return OptionSet(static_cast&lt;T&gt;(storageType), FromRawValue);
</span><span class="cx">     }
</span><span class="lines">@@ -109,6 +108,16 @@
</span><span class="cx">         return m_storage &amp; optionSet.m_storage;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    constexpr friend bool operator==(OptionSet lhs, OptionSet rhs)
+    {
+        return lhs.m_storage == rhs.m_storage;
+    }
+
+    constexpr friend bool operator!=(OptionSet lhs, OptionSet rhs)
+    {
+        return lhs.m_storage != rhs.m_storage;
+    }
+
</ins><span class="cx">     friend OptionSet&amp; operator|=(OptionSet&amp; lhs, OptionSet rhs)
</span><span class="cx">     {
</span><span class="cx">         lhs.m_storage |= rhs.m_storage;
</span><span class="lines">@@ -116,6 +125,11 @@
</span><span class="cx">         return lhs;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    constexpr friend OptionSet operator-(OptionSet lhs, OptionSet rhs)
+    {
+        return OptionSet::fromRaw(lhs.m_storage &amp; ~rhs.m_storage);
+    }
+
</ins><span class="cx"> private:
</span><span class="cx">     enum InitializationTag { FromRawValue };
</span><span class="cx">     constexpr OptionSet(T t, InitializationTag)
</span><span class="lines">@@ -128,5 +142,3 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> using WTF::OptionSet;
</span><del>-
-#endif // OptionSet_h
</del></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WebCore/ChangeLog        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -1,3 +1,32 @@
</span><ins>+2016-09-20  Anders Carlsson  &lt;andersca@apple.com&gt;
+
+        PlatformEvent::m_modifiers should be an OptionSet
+        https://bugs.webkit.org/show_bug.cgi?id=162326
+
+        Reviewed by Daniel Bates.
+
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::handleAccessKey):
+        * page/EventHandler.h:
+        * page/mac/EventHandlerMac.mm:
+        (WebCore::EventHandler::accessKeyModifiers):
+        * platform/PlatformEvent.h:
+        (WebCore::PlatformEvent::shiftKey):
+        (WebCore::PlatformEvent::ctrlKey):
+        (WebCore::PlatformEvent::altKey):
+        (WebCore::PlatformEvent::metaKey):
+        (WebCore::PlatformEvent::modifiers):
+        (WebCore::PlatformEvent::PlatformEvent):
+        * platform/PlatformKeyboardEvent.h:
+        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
+        * platform/mac/PlatformEventFactoryMac.mm:
+        (WebCore::modifiersForEvent):
+        (WebCore::typeForEvent):
+        * replay/SerializationMethods.cpp:
+        (JSC::EncodingTraits&lt;PlatformKeyboardEvent&gt;::encodeValue):
+        (JSC::EncodingTraits&lt;PlatformKeyboardEvent&gt;::decodeValue):
+        * replay/WebInputs.json:
+
</ins><span class="cx"> 2016-09-27  Gustavo Noronha Silva  &lt;gustavo.noronha@collabora.co.uk&gt;
</span><span class="cx"> 
</span><span class="cx">         [GTK] Handle Wayland &amp; X11 correctly for GST_GL
</span></span></pre></div>
<a id="trunkSourceWebCorepageEventHandlercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/EventHandler.cpp (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/EventHandler.cpp        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WebCore/page/EventHandler.cpp        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -2971,8 +2971,9 @@
</span><span class="cx">     // IE matches lower and upper case access keys regardless of Shift key state - but if both upper and
</span><span class="cx">     // lower case variants are present in a document, the correct element is matched based on Shift key state.
</span><span class="cx">     // Firefox only matches an access key if Shift is not pressed, and does that case-insensitively.
</span><del>-    ASSERT(!(accessKeyModifiers() &amp; PlatformEvent::ShiftKey));
-    if ((event.modifiers() &amp; ~PlatformEvent::ShiftKey) != accessKeyModifiers())
</del><ins>+    ASSERT(!accessKeyModifiers().contains(PlatformEvent::Modifier::ShiftKey));
+
+    if ((event.modifiers() - PlatformEvent::Modifier::ShiftKey) != accessKeyModifiers())
</ins><span class="cx">         return false;
</span><span class="cx">     Element* element = m_frame.document()-&gt;getElementByAccessKey(event.unmodifiedText());
</span><span class="cx">     if (!element)
</span></span></pre></div>
<a id="trunkSourceWebCorepageEventHandlerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/EventHandler.h (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/EventHandler.h        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WebCore/page/EventHandler.h        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -244,7 +244,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool needsKeyboardEventDisambiguationQuirks() const;
</span><span class="cx"> 
</span><del>-    static unsigned accessKeyModifiers();
</del><ins>+    static OptionSet&lt;PlatformEvent::Modifier&gt; accessKeyModifiers();
</ins><span class="cx">     WEBCORE_EXPORT bool handleAccessKey(const PlatformKeyboardEvent&amp;);
</span><span class="cx">     WEBCORE_EXPORT bool keyEvent(const PlatformKeyboardEvent&amp;);
</span><span class="cx">     void defaultKeyboardEventHandler(KeyboardEvent&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCorepageeflEventHandlerEflcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/efl/EventHandlerEfl.cpp (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/efl/EventHandlerEfl.cpp        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WebCore/page/efl/EventHandlerEfl.cpp        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -120,8 +120,8 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-unsigned EventHandler::accessKeyModifiers()
</del><ins>+OptionSet&lt;PlatformEvent::Modifier&gt; EventHandler::accessKeyModifiers()
</ins><span class="cx"> {
</span><del>-    return PlatformEvent::AltKey;
</del><ins>+    return PlatformEvent::Modifier::AltKey;
</ins><span class="cx"> }
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorepagegtkEventHandlerGtkcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/gtk/EventHandlerGtk.cpp (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/gtk/EventHandlerGtk.cpp        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WebCore/page/gtk/EventHandlerGtk.cpp        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -120,9 +120,9 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-unsigned EventHandler::accessKeyModifiers()
</del><ins>+OptionSet&lt;PlatformEvent::Modifier&gt; EventHandler::accessKeyModifiers()
</ins><span class="cx"> {
</span><del>-    return PlatformEvent::AltKey;
</del><ins>+    return PlatformEvent::Modifier::AltKey;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // GTK+ must scroll horizontally if the mouse pointer is on top of the
</span></span></pre></div>
<a id="trunkSourceWebCorepageiosEventHandlerIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/ios/EventHandlerIOS.mm (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/ios/EventHandlerIOS.mm        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WebCore/page/ios/EventHandlerIOS.mm        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -537,15 +537,15 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-unsigned EventHandler::accessKeyModifiers()
</del><ins>+OptionSet&lt;PlatformEvent::Modifier&gt; EventHandler::accessKeyModifiers()
</ins><span class="cx"> {
</span><span class="cx">     // Control+Option key combinations are usually unused on Mac OS X, but not when VoiceOver is enabled.
</span><span class="cx">     // So, we use Control in this case, even though it conflicts with Emacs-style key bindings.
</span><span class="cx">     // See &lt;https://bugs.webkit.org/show_bug.cgi?id=21107&gt; for more detail.
</span><span class="cx">     if (AXObjectCache::accessibilityEnhancedUserInterfaceEnabled())
</span><del>-        return PlatformKeyboardEvent::CtrlKey;
</del><ins>+        return PlatformEvent::Modifier::CtrlKey;
</ins><span class="cx"> 
</span><del>-    return PlatformKeyboardEvent::CtrlKey | PlatformKeyboardEvent::AltKey;
</del><ins>+    return { PlatformEvent::Modifier::CtrlKey, PlatformEvent::Modifier::AltKey };
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> PlatformMouseEvent EventHandler::currentPlatformMouseEvent() const
</span></span></pre></div>
<a id="trunkSourceWebCorepagemacEventHandlerMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/mac/EventHandlerMac.mm (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/mac/EventHandlerMac.mm        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WebCore/page/mac/EventHandlerMac.mm        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -783,15 +783,15 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-unsigned EventHandler::accessKeyModifiers()
</del><ins>+OptionSet&lt;PlatformEvent::Modifier&gt; EventHandler::accessKeyModifiers()
</ins><span class="cx"> {
</span><span class="cx">     // Control+Option key combinations are usually unused on Mac OS X, but not when VoiceOver is enabled.
</span><span class="cx">     // So, we use Control in this case, even though it conflicts with Emacs-style key bindings.
</span><span class="cx">     // See &lt;https://bugs.webkit.org/show_bug.cgi?id=21107&gt; for more detail.
</span><span class="cx">     if (AXObjectCache::accessibilityEnhancedUserInterfaceEnabled())
</span><del>-        return PlatformEvent::CtrlKey;
</del><ins>+        return PlatformEvent::Modifier::CtrlKey;
</ins><span class="cx"> 
</span><del>-    return PlatformEvent::CtrlKey | PlatformEvent::AltKey;
</del><ins>+    return { PlatformEvent::Modifier::CtrlKey, PlatformEvent::Modifier::AltKey };
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static ScrollableArea* scrollableAreaForBox(RenderBox&amp; box)
</span></span></pre></div>
<a id="trunkSourceWebCorepagewinEventHandlerWincpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/win/EventHandlerWin.cpp (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/win/EventHandlerWin.cpp        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WebCore/page/win/EventHandlerWin.cpp        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -112,9 +112,9 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-unsigned EventHandler::accessKeyModifiers()
</del><ins>+OptionSet&lt;PlatformEvent::Modifier&gt; EventHandler::accessKeyModifiers()
</ins><span class="cx"> {
</span><del>-    return PlatformEvent::AltKey;
</del><ins>+    return PlatformEvent::Modifier::AltKey;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformPlatformEventh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/PlatformEvent.h (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/PlatformEvent.h        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WebCore/platform/PlatformEvent.h        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -23,9 +23,10 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-#ifndef PlatformEvent_h
-#define PlatformEvent_h
</del><ins>+#pragma once
</ins><span class="cx"> 
</span><ins>+#include &lt;wtf/OptionSet.h&gt;
+
</ins><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> class PlatformEvent {
</span><span class="lines">@@ -68,7 +69,7 @@
</span><span class="cx"> #endif
</span><span class="cx">     };
</span><span class="cx"> 
</span><del>-    enum Modifiers : uint8_t {
</del><ins>+    enum class Modifier {
</ins><span class="cx">         AltKey      = 1 &lt;&lt; 0,
</span><span class="cx">         CtrlKey     = 1 &lt;&lt; 1,
</span><span class="cx">         MetaKey     = 1 &lt;&lt; 2,
</span><span class="lines">@@ -77,12 +78,12 @@
</span><span class="cx"> 
</span><span class="cx">     Type type() const { return static_cast&lt;Type&gt;(m_type); }
</span><span class="cx"> 
</span><del>-    bool shiftKey() const { return m_modifiers &amp; ShiftKey; }
-    bool ctrlKey() const { return m_modifiers &amp; CtrlKey; }
-    bool altKey() const { return m_modifiers &amp; AltKey; }
-    bool metaKey() const { return m_modifiers &amp; MetaKey; }
</del><ins>+    bool shiftKey() const { return m_modifiers.contains(Modifier::ShiftKey); }
+    bool ctrlKey() const { return m_modifiers.contains(Modifier::CtrlKey); }
+    bool altKey() const { return m_modifiers.contains(Modifier::AltKey); }
+    bool metaKey() const { return m_modifiers.contains(Modifier::MetaKey); }
</ins><span class="cx"> 
</span><del>-    unsigned modifiers() const { return m_modifiers; }
</del><ins>+    OptionSet&lt;Modifier&gt; modifiers() const { return m_modifiers; }
</ins><span class="cx"> 
</span><span class="cx">     double timestamp() const { return m_timestamp; }
</span><span class="cx"> 
</span><span class="lines">@@ -89,7 +90,6 @@
</span><span class="cx"> protected:
</span><span class="cx">     PlatformEvent()
</span><span class="cx">         : m_type(NoType)
</span><del>-        , m_modifiers(0)
</del><span class="cx">         , m_timestamp(0)
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="lines">@@ -96,12 +96,11 @@
</span><span class="cx"> 
</span><span class="cx">     explicit PlatformEvent(Type type)
</span><span class="cx">         : m_type(type)
</span><del>-        , m_modifiers(0)
</del><span class="cx">         , m_timestamp(0)
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    PlatformEvent(Type type, Modifiers modifiers, double timestamp)
</del><ins>+    PlatformEvent(Type type, OptionSet&lt;Modifier&gt; modifiers, double timestamp)
</ins><span class="cx">         : m_type(type)
</span><span class="cx">         , m_modifiers(modifiers)
</span><span class="cx">         , m_timestamp(timestamp)
</span><span class="lines">@@ -110,17 +109,16 @@
</span><span class="cx"> 
</span><span class="cx">     PlatformEvent(Type type, bool shiftKey, bool ctrlKey, bool altKey, bool metaKey, double timestamp)
</span><span class="cx">         : m_type(type)
</span><del>-        , m_modifiers(0)
</del><span class="cx">         , m_timestamp(timestamp)
</span><span class="cx">     {
</span><span class="cx">         if (shiftKey)
</span><del>-            m_modifiers |= ShiftKey;
</del><ins>+            m_modifiers |= Modifier::ShiftKey;
</ins><span class="cx">         if (ctrlKey)
</span><del>-            m_modifiers |= CtrlKey;
</del><ins>+            m_modifiers |= Modifier::CtrlKey;
</ins><span class="cx">         if (altKey)
</span><del>-            m_modifiers |= AltKey;
</del><ins>+            m_modifiers |= Modifier::AltKey;
</ins><span class="cx">         if (metaKey)
</span><del>-            m_modifiers |= MetaKey;
</del><ins>+            m_modifiers |= Modifier::MetaKey;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // Explicit protected destructor so that people don't accidentally
</span><span class="lines">@@ -130,10 +128,8 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     unsigned m_type;
</span><del>-    unsigned m_modifiers;
</del><ins>+    OptionSet&lt;Modifier&gt; m_modifiers;
</ins><span class="cx">     double m_timestamp;
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span><del>-
-#endif // PlatformEvent_h
</del></span></pre></div>
<a id="trunkSourceWebCoreplatformPlatformKeyboardEventh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/PlatformKeyboardEvent.h (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/PlatformKeyboardEvent.h        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WebCore/platform/PlatformKeyboardEvent.h        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -24,8 +24,7 @@
</span><span class="cx">  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-#ifndef PlatformKeyboardEvent_h
-#define PlatformKeyboardEvent_h
</del><ins>+#pragma once
</ins><span class="cx"> 
</span><span class="cx"> #include &quot;KeypressCommand.h&quot;
</span><span class="cx"> #include &quot;PlatformEvent.h&quot;
</span><span class="lines">@@ -73,7 +72,7 @@
</span><span class="cx">         {
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        PlatformKeyboardEvent(Type type, const String&amp; text, const String&amp; unmodifiedText, const String&amp; keyIdentifier, int windowsVirtualKeyCode, int nativeVirtualKeyCode, int macCharCode, bool isAutoRepeat, bool isKeypad, bool isSystemKey, Modifiers modifiers, double timestamp)
</del><ins>+        PlatformKeyboardEvent(Type type, const String&amp; text, const String&amp; unmodifiedText, const String&amp; keyIdentifier, int windowsVirtualKeyCode, int nativeVirtualKeyCode, int macCharCode, bool isAutoRepeat, bool isKeypad, bool isSystemKey, OptionSet&lt;Modifier&gt; modifiers, double timestamp)
</ins><span class="cx">             : PlatformEvent(type, modifiers, timestamp)
</span><span class="cx">             , m_text(text)
</span><span class="cx">             , m_unmodifiedText(unmodifiedText)
</span><span class="lines">@@ -192,5 +191,3 @@
</span><span class="cx">     };
</span><span class="cx">     
</span><span class="cx"> } // namespace WebCore
</span><del>-
-#endif // PlatformKeyboardEvent_h
</del></span></pre></div>
<a id="trunkSourceWebCoreplatformgtkPlatformKeyboardEventGtkcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/gtk/PlatformKeyboardEventGtk.cpp (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/gtk/PlatformKeyboardEventGtk.cpp        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WebCore/platform/gtk/PlatformKeyboardEventGtk.cpp        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -555,18 +555,18 @@
</span><span class="cx">     return event-&gt;type == GDK_KEY_RELEASE ? PlatformEvent::KeyUp : PlatformEvent::KeyDown;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static PlatformEvent::Modifiers modifiersForGdkKeyEvent(GdkEventKey* event)
</del><ins>+static OptionSet&lt;PlatformEvent::Modifier&gt; modifiersForGdkKeyEvent(GdkEventKey* event)
</ins><span class="cx"> {
</span><del>-    unsigned int modifiers = 0;
</del><ins>+    OptionSet&lt;PlatformEvent::Modifier&gt; modifiers;
</ins><span class="cx">     if (event-&gt;state &amp; GDK_SHIFT_MASK || event-&gt;keyval == GDK_3270_BackTab)
</span><del>-        modifiers |= PlatformEvent::ShiftKey;
</del><ins>+        modifiers |= PlatformEvent::Modifier::ShiftKey;
</ins><span class="cx">     if (event-&gt;state &amp; GDK_CONTROL_MASK)
</span><del>-        modifiers |= PlatformEvent::CtrlKey;
</del><ins>+        modifiers |= PlatformEvent::Modifier::CtrlKey;
</ins><span class="cx">     if (event-&gt;state &amp; GDK_MOD1_MASK)
</span><del>-        modifiers |= PlatformEvent::AltKey;
</del><ins>+        modifiers |= PlatformEvent::Modifier::AltKey;
</ins><span class="cx">     if (event-&gt;state &amp; GDK_META_MASK)
</span><del>-        modifiers |= PlatformEvent::MetaKey;
-    return static_cast&lt;PlatformEvent::Modifiers&gt;(modifiers);
</del><ins>+        modifiers |= PlatformEvent::Modifier::MetaKey;
+    return modifiers;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // Keep this in sync with the other platform event constructors
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgtkPlatformMouseEventGtkcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/gtk/PlatformMouseEventGtk.cpp (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/gtk/PlatformMouseEventGtk.cpp        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WebCore/platform/gtk/PlatformMouseEventGtk.cpp        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -42,15 +42,14 @@
</span><span class="cx">     m_position = IntPoint((int)event-&gt;x, (int)event-&gt;y);
</span><span class="cx">     m_globalPosition = IntPoint((int)event-&gt;x_root, (int)event-&gt;y_root);
</span><span class="cx"> 
</span><del>-    m_modifiers = 0;
</del><span class="cx">     if (event-&gt;state &amp; GDK_SHIFT_MASK)
</span><del>-        m_modifiers |= ShiftKey;
</del><ins>+        m_modifiers |= PlatformEvent::Modifier::ShiftKey;
</ins><span class="cx">     if (event-&gt;state &amp; GDK_CONTROL_MASK)
</span><del>-        m_modifiers |= CtrlKey;
</del><ins>+        m_modifiers |= PlatformEvent::Modifier::CtrlKey;
</ins><span class="cx">     if (event-&gt;state &amp; GDK_MOD1_MASK)
</span><del>-        m_modifiers |= AltKey;
</del><ins>+        m_modifiers |= PlatformEvent::Modifier::AltKey;
</ins><span class="cx">     if (event-&gt;state &amp; GDK_META_MASK)
</span><del>-        m_modifiers |= MetaKey;
</del><ins>+        m_modifiers |= PlatformEvent::Modifier::MetaKey;
</ins><span class="cx"> 
</span><span class="cx">     switch (event-&gt;type) {
</span><span class="cx">     case GDK_BUTTON_PRESS:
</span><span class="lines">@@ -87,15 +86,14 @@
</span><span class="cx">     m_position = IntPoint((int)motion-&gt;x, (int)motion-&gt;y);
</span><span class="cx">     m_globalPosition = IntPoint((int)motion-&gt;x_root, (int)motion-&gt;y_root);
</span><span class="cx"> 
</span><del>-    m_modifiers = 0;
</del><span class="cx">     if (motion-&gt;state &amp; GDK_SHIFT_MASK)
</span><del>-        m_modifiers |= ShiftKey;
</del><ins>+        m_modifiers |= PlatformEvent::Modifier::ShiftKey;
</ins><span class="cx">     if (motion-&gt;state &amp; GDK_CONTROL_MASK)
</span><del>-        m_modifiers |= CtrlKey;
</del><ins>+        m_modifiers |= PlatformEvent::Modifier::CtrlKey;
</ins><span class="cx">     if (motion-&gt;state &amp; GDK_MOD1_MASK)
</span><del>-        m_modifiers |= AltKey;
</del><ins>+        m_modifiers |= PlatformEvent::Modifier::AltKey;
</ins><span class="cx">     if (motion-&gt;state &amp; GDK_META_MASK)
</span><del>-        m_modifiers |= MetaKey;
</del><ins>+        m_modifiers |= PlatformEvent::Modifier::MetaKey;
</ins><span class="cx"> 
</span><span class="cx">     switch (motion-&gt;type) {
</span><span class="cx">     case GDK_MOTION_NOTIFY:
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgtkPlatformWheelEventGtkcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/gtk/PlatformWheelEventGtk.cpp (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/gtk/PlatformWheelEventGtk.cpp        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WebCore/platform/gtk/PlatformWheelEventGtk.cpp        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -43,15 +43,14 @@
</span><span class="cx">     m_type = PlatformEvent::Wheel;
</span><span class="cx">     m_timestamp = currentTime();
</span><span class="cx"> 
</span><del>-    m_modifiers = 0;
</del><span class="cx">     if (event-&gt;state &amp; GDK_SHIFT_MASK)
</span><del>-        m_modifiers |= ShiftKey;
</del><ins>+        m_modifiers |= Modifier::ShiftKey;
</ins><span class="cx">     if (event-&gt;state &amp; GDK_CONTROL_MASK)
</span><del>-        m_modifiers |= CtrlKey;
</del><ins>+        m_modifiers |= Modifier::CtrlKey;
</ins><span class="cx">     if (event-&gt;state &amp; GDK_MOD1_MASK)
</span><del>-        m_modifiers |= AltKey;
</del><ins>+        m_modifiers |= Modifier::AltKey;
</ins><span class="cx">     if (event-&gt;state &amp; GDK_META_MASK)
</span><del>-        m_modifiers |= MetaKey;
</del><ins>+        m_modifiers |= Modifier::MetaKey;
</ins><span class="cx"> 
</span><span class="cx">     m_deltaX = 0;
</span><span class="cx">     m_deltaY = 0;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosPlatformEventFactoryIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/PlatformEventFactoryIOS.mm (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/PlatformEventFactoryIOS.mm        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WebCore/platform/ios/PlatformEventFactoryIOS.mm        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -35,18 +35,18 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-static unsigned modifiersForEvent(WebEvent *event)
</del><ins>+static OptionSet&lt;PlatformEvent::Modifier&gt; modifiersForEvent(WebEvent *event)
</ins><span class="cx"> {
</span><del>-    unsigned modifiers = 0;
</del><ins>+    OptionSet&lt;PlatformEvent::Modifier&gt; modifiers;
</ins><span class="cx"> 
</span><span class="cx">     if (event.modifierFlags &amp; WebEventFlagMaskShift)
</span><del>-        modifiers |= PlatformEvent::ShiftKey;
</del><ins>+        modifiers |= PlatformEvent::Modifier::ShiftKey;
</ins><span class="cx">     if (event.modifierFlags &amp; WebEventFlagMaskControl)
</span><del>-        modifiers |= PlatformEvent::CtrlKey;
</del><ins>+        modifiers |= PlatformEvent::Modifier::CtrlKey;
</ins><span class="cx">     if (event.modifierFlags &amp; WebEventFlagMaskAlternate)
</span><del>-        modifiers |= PlatformEvent::AltKey;
</del><ins>+        modifiers |= PlatformEvent::Modifier::AltKey;
</ins><span class="cx">     if (event.modifierFlags &amp; WebEventFlagMaskCommand)
</span><del>-        modifiers |= PlatformEvent::MetaKey;
</del><ins>+        modifiers |= PlatformEvent::Modifier::MetaKey;
</ins><span class="cx"> 
</span><span class="cx">     return modifiers;
</span><span class="cx"> }
</span><span class="lines">@@ -82,7 +82,6 @@
</span><span class="cx">     PlatformMouseEventBuilder(WebEvent *event)
</span><span class="cx">     {
</span><span class="cx">         m_type = mouseEventType(event);
</span><del>-        m_modifiers = 0;
</del><span class="cx">         m_timestamp = currentTime();
</span><span class="cx"> 
</span><span class="cx">         m_position = pointForEvent(event);
</span><span class="lines">@@ -104,7 +103,6 @@
</span><span class="cx">         ASSERT(event.type == WebEventScrollWheel);
</span><span class="cx"> 
</span><span class="cx">         m_type = PlatformEvent::Wheel;
</span><del>-        m_modifiers = 0;
</del><span class="cx">         m_timestamp = currentTime();
</span><span class="cx"> 
</span><span class="cx">         m_position = pointForEvent(event);
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmacPlatformEventFactoryMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mac/PlatformEventFactoryMac.mm (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mac/PlatformEventFactoryMac.mm        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WebCore/platform/mac/PlatformEventFactoryMac.mm        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -426,21 +426,21 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static inline PlatformEvent::Modifiers modifiersForEvent(NSEvent *event)
</del><ins>+static inline OptionSet&lt;PlatformEvent::Modifier&gt; modifiersForEvent(NSEvent *event)
</ins><span class="cx"> {
</span><span class="cx"> #pragma clang diagnostic push
</span><span class="cx"> #pragma clang diagnostic ignored &quot;-Wdeprecated-declarations&quot;
</span><del>-    unsigned modifiers = 0;
-    if ([event modifierFlags] &amp; NSShiftKeyMask)
-        modifiers |= PlatformEvent::ShiftKey;
-    if ([event modifierFlags] &amp; NSControlKeyMask)
-        modifiers |= PlatformEvent::CtrlKey;
-    if ([event modifierFlags] &amp; NSAlternateKeyMask)
-        modifiers |= PlatformEvent::AltKey;
-    if ([event modifierFlags] &amp; NSCommandKeyMask)
-        modifiers |= PlatformEvent::MetaKey;
</del><ins>+    OptionSet&lt;PlatformEvent::Modifier&gt; modifiers;
+    if (event.modifierFlags &amp; NSShiftKeyMask)
+        modifiers |= PlatformEvent::Modifier::ShiftKey;
+    if (event.modifierFlags &amp; NSControlKeyMask)
+        modifiers |= PlatformEvent::Modifier::CtrlKey;
+    if (event.modifierFlags &amp; NSAlternateKeyMask)
+        modifiers |= PlatformEvent::Modifier::AltKey;
+    if (event.modifierFlags &amp; NSCommandKeyMask)
+        modifiers |= PlatformEvent::Modifier::MetaKey;
</ins><span class="cx"> #pragma clang diagnostic pop
</span><del>-    return (PlatformEvent::Modifiers)modifiers;
</del><ins>+    return modifiers;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static int typeForEvent(NSEvent *event)
</span><span class="lines">@@ -451,7 +451,7 @@
</span><span class="cx">     if (mouseButtonForEvent(event) == RightButton)
</span><span class="cx">         return static_cast&lt;int&gt;(NSMenuTypeContextMenu);
</span><span class="cx"> 
</span><del>-    if (mouseButtonForEvent(event) == LeftButton &amp;&amp; (modifiersForEvent(event) &amp; PlatformEvent::CtrlKey))
</del><ins>+    if (mouseButtonForEvent(event) == LeftButton &amp;&amp; modifiersForEvent(event).contains(PlatformEvent::Modifier::CtrlKey))
</ins><span class="cx">         return static_cast&lt;int&gt;(NSMenuTypeContextMenu);
</span><span class="cx"> 
</span><span class="cx">     return static_cast&lt;int&gt;(NSMenuTypeNone);
</span></span></pre></div>
<a id="trunkSourceWebCorereplaySerializationMethodscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/replay/SerializationMethods.cpp (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/replay/SerializationMethods.cpp        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WebCore/replay/SerializationMethods.cpp        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -253,7 +253,7 @@
</span><span class="cx"> 
</span><span class="cx">     ENCODE_TYPE_WITH_KEY(encodedValue, double, timestamp, input.timestamp());
</span><span class="cx">     ENCODE_TYPE_WITH_KEY(encodedValue, PlatformEvent::Type, type, input.type());
</span><del>-    ENCODE_TYPE_WITH_KEY(encodedValue, PlatformEvent::Modifiers, modifiers, static_cast&lt;PlatformEvent::Modifiers&gt;(input.modifiers()));
</del><ins>+    ENCODE_TYPE_WITH_KEY(encodedValue, PlatformEvent::Modifier, modifiers, input.modifiers());
</ins><span class="cx">     ENCODE_TYPE_WITH_KEY(encodedValue, String, text, input.text());
</span><span class="cx">     ENCODE_TYPE_WITH_KEY(encodedValue, String, unmodifiedText, input.unmodifiedText());
</span><span class="cx">     ENCODE_TYPE_WITH_KEY(encodedValue, String, keyIdentifier, input.keyIdentifier());
</span><span class="lines">@@ -274,7 +274,7 @@
</span><span class="cx"> {
</span><span class="cx">     DECODE_TYPE_WITH_KEY(encodedValue, double, timestamp);
</span><span class="cx">     DECODE_TYPE_WITH_KEY(encodedValue, PlatformEvent::Type, type);
</span><del>-    DECODE_TYPE_WITH_KEY(encodedValue, PlatformEvent::Modifiers, modifiers);
</del><ins>+    DECODE_TYPE_WITH_KEY(encodedValue, PlatformEvent::Modifier, modifiers);
</ins><span class="cx">     DECODE_TYPE_WITH_KEY(encodedValue, String, text);
</span><span class="cx">     DECODE_TYPE_WITH_KEY(encodedValue, String, unmodifiedText);
</span><span class="cx">     DECODE_TYPE_WITH_KEY(encodedValue, String, keyIdentifier);
</span></span></pre></div>
<a id="trunkSourceWebCorereplayWebInputsjson"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/replay/WebInputs.json (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/replay/WebInputs.json        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WebCore/replay/WebInputs.json        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -13,9 +13,9 @@
</span><span class="cx">                 &quot;header&quot;: &quot;replay/MemoizedDOMResult.h&quot;
</span><span class="cx">             },
</span><span class="cx">             {
</span><del>-                &quot;name&quot;: &quot;Modifiers&quot;, &quot;mode&quot;: &quot;SCALAR&quot;, &quot;storage&quot;: &quot;uint8_t&quot;,
</del><ins>+                &quot;name&quot;: &quot;Modifier&quot;, &quot;mode&quot;: &quot;SCALAR&quot;,
</ins><span class="cx">                 &quot;enclosing_class&quot;: &quot;PlatformEvent&quot;,
</span><del>-                &quot;flags&quot;: [&quot;ENUM&quot;],
</del><ins>+                &quot;flags&quot;: [&quot;OPTION_SET&quot;],
</ins><span class="cx">                 &quot;values&quot;: [&quot;AltKey&quot;, &quot;CtrlKey&quot;, &quot;MetaKey&quot;, &quot;ShiftKey&quot;],
</span><span class="cx">                 &quot;header&quot;: &quot;platform/PlatformEvent.h&quot;
</span><span class="cx">             },
</span></span></pre></div>
<a id="trunkSourceWebKitwinAccessibleBasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/AccessibleBase.cpp (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/AccessibleBase.cpp        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WebKit/win/AccessibleBase.cpp        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -597,17 +597,17 @@
</span><span class="cx">     static String accessKeyModifiers;
</span><span class="cx">     if (accessKeyModifiers.isNull()) {
</span><span class="cx">         StringBuilder accessKeyModifiersBuilder;
</span><del>-        unsigned modifiers = EventHandler::accessKeyModifiers();
</del><ins>+        auto modifiers = EventHandler::accessKeyModifiers();
</ins><span class="cx">         // Follow the same order as Mozilla MSAA implementation:
</span><span class="cx">         // Ctrl+Alt+Shift+Meta+key. MSDN states that keyboard shortcut strings
</span><span class="cx">         // should not be localized and defines the separator as &quot;+&quot;.
</span><del>-        if (modifiers &amp; PlatformEvent::CtrlKey)
</del><ins>+        if (modifiers.contains(PlatformEvent::Modifier::CtrlKey))
</ins><span class="cx">             accessKeyModifiersBuilder.appendLiteral(&quot;Ctrl+&quot;);
</span><del>-        if (modifiers &amp; PlatformEvent::AltKey)
</del><ins>+        if (modifiers.contains(PlatformEvent::Modifier::AltKey))
</ins><span class="cx">             accessKeyModifiersBuilder.appendLiteral(&quot;Alt+&quot;);
</span><del>-        if (modifiers &amp; PlatformEvent::ShiftKey)
</del><ins>+        if (modifiers.contains(PlatformEvent::Modifier::ShiftKey))
</ins><span class="cx">             accessKeyModifiersBuilder.appendLiteral(&quot;Shift+&quot;);
</span><del>-        if (modifiers &amp; PlatformEvent::MetaKey)
</del><ins>+        if (modifiers.contains(PlatformEvent::Modifier::MetaKey))
</ins><span class="cx">             accessKeyModifiersBuilder.appendLiteral(&quot;Win+&quot;);
</span><span class="cx">         accessKeyModifiers = accessKeyModifiersBuilder.toString();
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WebKit2/ChangeLog        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2016-09-20  Anders Carlsson  &lt;andersca@apple.com&gt;
+
+        PlatformEvent::m_modifiers should be an OptionSet
+        https://bugs.webkit.org/show_bug.cgi?id=162326
+
+        Reviewed by Daniel Bates.
+
+        * Shared/WebEventConversion.cpp:
+        (WebKit::WebKit2PlatformMouseEvent::WebKit2PlatformMouseEvent):
+        (WebKit::WebKit2PlatformWheelEvent::WebKit2PlatformWheelEvent):
+        (WebKit::WebKit2PlatformKeyboardEvent::WebKit2PlatformKeyboardEvent):
+        (WebKit::WebKit2PlatformGestureEvent::WebKit2PlatformGestureEvent):
+
</ins><span class="cx"> 2016-09-27  Dan Bernstein  &lt;mitz@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [iOS] REGRESSION (r182126): Selection highlight and handles aren’t visible with WKSelectionGranularityCharacter
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedWebEventConversioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/WebEventConversion.cpp (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/WebEventConversion.cpp        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Source/WebKit2/Shared/WebEventConversion.cpp        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -68,15 +68,14 @@
</span><span class="cx">             ASSERT_NOT_REACHED();
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        m_modifiers = 0;
</del><span class="cx">         if (webEvent.shiftKey())
</span><del>-            m_modifiers |= ShiftKey;
</del><ins>+            m_modifiers |= Modifier::ShiftKey;
</ins><span class="cx">         if (webEvent.controlKey())
</span><del>-            m_modifiers |= CtrlKey;
</del><ins>+            m_modifiers |= Modifier::CtrlKey;
</ins><span class="cx">         if (webEvent.altKey())
</span><del>-            m_modifiers |= AltKey;
</del><ins>+            m_modifiers |= Modifier::AltKey;
</ins><span class="cx">         if (webEvent.metaKey())
</span><del>-            m_modifiers |= MetaKey;
</del><ins>+            m_modifiers |= Modifier::MetaKey;
</ins><span class="cx"> 
</span><span class="cx">         m_timestamp = webEvent.timestamp();
</span><span class="cx"> 
</span><span class="lines">@@ -105,16 +104,6 @@
</span><span class="cx">         m_eventNumber = webEvent.eventNumber();
</span><span class="cx">         m_menuTypeForEvent = webEvent.menuTypeForEvent();
</span><span class="cx"> #endif
</span><del>-
-        m_modifierFlags = 0;
-        if (webEvent.shiftKey())
-            m_modifierFlags |= WebEvent::ShiftKey;
-        if (webEvent.controlKey())
-            m_modifierFlags |= WebEvent::ControlKey;
-        if (webEvent.altKey())
-            m_modifierFlags |= WebEvent::AltKey;
-        if (webEvent.metaKey())
-            m_modifierFlags |= WebEvent::MetaKey;
</del><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -130,15 +119,14 @@
</span><span class="cx">         // PlatformEvent
</span><span class="cx">         m_type = PlatformEvent::Wheel;
</span><span class="cx"> 
</span><del>-        m_modifiers = 0;
</del><span class="cx">         if (webEvent.shiftKey())
</span><del>-            m_modifiers |= ShiftKey;
</del><ins>+            m_modifiers |= Modifier::ShiftKey;
</ins><span class="cx">         if (webEvent.controlKey())
</span><del>-            m_modifiers |= CtrlKey;
</del><ins>+            m_modifiers |= Modifier::CtrlKey;
</ins><span class="cx">         if (webEvent.altKey())
</span><del>-            m_modifiers |= AltKey;
</del><ins>+            m_modifiers |= Modifier::AltKey;
</ins><span class="cx">         if (webEvent.metaKey())
</span><del>-            m_modifiers |= MetaKey;
</del><ins>+            m_modifiers |= Modifier::MetaKey;
</ins><span class="cx"> 
</span><span class="cx">         m_timestamp = webEvent.timestamp();
</span><span class="cx"> 
</span><span class="lines">@@ -189,15 +177,14 @@
</span><span class="cx">             ASSERT_NOT_REACHED();
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        m_modifiers = 0;
</del><span class="cx">         if (webEvent.shiftKey())
</span><del>-            m_modifiers |= ShiftKey;
</del><ins>+            m_modifiers |= Modifier::ShiftKey;
</ins><span class="cx">         if (webEvent.controlKey())
</span><del>-            m_modifiers |= CtrlKey;
</del><ins>+            m_modifiers |= Modifier::CtrlKey;
</ins><span class="cx">         if (webEvent.altKey())
</span><del>-            m_modifiers |= AltKey;
</del><ins>+            m_modifiers |= Modifier::AltKey;
</ins><span class="cx">         if (webEvent.metaKey())
</span><del>-            m_modifiers |= MetaKey;
</del><ins>+            m_modifiers |= Modifier::MetaKey;
</ins><span class="cx"> 
</span><span class="cx">         m_timestamp = webEvent.timestamp();
</span><span class="cx"> 
</span><span class="lines">@@ -325,15 +312,14 @@
</span><span class="cx">             ASSERT_NOT_REACHED();
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        m_modifiers = 0;
</del><span class="cx">         if (webEvent.shiftKey())
</span><del>-            m_modifiers |= ShiftKey;
</del><ins>+            m_modifiers |= Modifier::ShiftKey;
</ins><span class="cx">         if (webEvent.controlKey())
</span><del>-            m_modifiers |= CtrlKey;
</del><ins>+            m_modifiers |= Modifier::CtrlKey;
</ins><span class="cx">         if (webEvent.altKey())
</span><del>-            m_modifiers |= AltKey;
</del><ins>+            m_modifiers |= Modifier::AltKey;
</ins><span class="cx">         if (webEvent.metaKey())
</span><del>-            m_modifiers |= MetaKey;
</del><ins>+            m_modifiers |= Modifier::MetaKey;
</ins><span class="cx"> 
</span><span class="cx">         m_timestamp = webEvent.timestamp();
</span><span class="cx"> 
</span><span class="lines">@@ -383,15 +369,14 @@
</span><span class="cx">             ASSERT_NOT_REACHED();
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        m_modifiers = 0;
</del><span class="cx">         if (webEvent.shiftKey())
</span><del>-            m_modifiers |= ShiftKey;
</del><ins>+            m_modifiers |= Modifier::ShiftKey;
</ins><span class="cx">         if (webEvent.controlKey())
</span><del>-            m_modifiers |= CtrlKey;
</del><ins>+            m_modifiers |= Modifier::CtrlKey;
</ins><span class="cx">         if (webEvent.altKey())
</span><del>-            m_modifiers |= AltKey;
</del><ins>+            m_modifiers |= Modifier::AltKey;
</ins><span class="cx">         if (webEvent.metaKey())
</span><del>-            m_modifiers |= MetaKey;
</del><ins>+            m_modifiers |= Modifier::MetaKey;
</ins><span class="cx"> 
</span><span class="cx">         m_timestamp = webEvent.timestamp();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWTFOptionSetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WTF/OptionSet.cpp (206449 => 206450)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WTF/OptionSet.cpp        2016-09-27 18:31:32 UTC (rev 206449)
+++ trunk/Tools/TestWebKitAPI/Tests/WTF/OptionSet.cpp        2016-09-27 19:08:34 UTC (rev 206450)
</span><span class="lines">@@ -60,6 +60,32 @@
</span><span class="cx">     EXPECT_FALSE(set.contains(ExampleFlags::E));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+TEST(WTF_OptionSet, Equal)
+{
+    OptionSet&lt;ExampleFlags&gt; set { ExampleFlags::A, ExampleFlags::B };
+    
+    EXPECT_TRUE(set == { ExampleFlags::A, ExampleFlags::B });
+    EXPECT_TRUE(set == { ExampleFlags::B, ExampleFlags::A });
+    EXPECT_FALSE(set == ExampleFlags::B);
+}
+
+TEST(WTF_OptionSet, NotEqual)
+{
+    OptionSet&lt;ExampleFlags&gt; set = ExampleFlags::A;
+    
+    EXPECT_TRUE(set != ExampleFlags::A);
+    EXPECT_TRUE(set != ExampleFlags::B);
+}
+
+TEST(WTF_OptionSet, Minus)
+{
+    OptionSet&lt;ExampleFlags&gt; set { ExampleFlags::A, ExampleFlags:B, ExampleFlags::C };
+    
+    EXPECT_TRUE((set - ExampleFlags::A) == { ExampleFlags::B, ExampleFlags::C });
+    EXPECT_TRUE((set - ExampleFlags::D) == { ExampleFlags::A, ExampleFlags::B, ExampleFlags::C });
+    EXPECT_TRUE((set - set).isEmpty());
+}
+
</ins><span class="cx"> TEST(WTF_OptionSet, ContainsTwoFlags)
</span><span class="cx"> {
</span><span class="cx">     OptionSet&lt;ExampleFlags&gt; set { ExampleFlags::A, ExampleFlags::B };
</span></span></pre>
</div>
</div>

</body>
</html>