<!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>[208903] 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/208903">208903</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2016-11-18 15:33:05 -0800 (Fri, 18 Nov 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Add runtime flag to enable pointer lock. Enable pointer lock feature for mac.
https://bugs.webkit.org/show_bug.cgi?id=163801

Patch by Jeremy Jones &lt;jeremyj@apple.com&gt; on 2016-11-18
Reviewed by Simon Fraser.

Source/JavaScriptCore:

* Configurations/FeatureDefines.xcconfig:

Source/WebCore:

These tests now pass with DumpRenderTree.
LayoutTests/pointer-lock/lock-already-locked.html
LayoutTests/pointer-lock/lock-element-not-in-dom.html
LayoutTests/pointer-lock/locked-element-iframe-removed-from-dom.html
LayoutTests/pointer-lock/mouse-event-api.html

PointerLockController::requestPointerLock now protects against synchronous callback
to allowPointerLock().

Add pointerLockEnabled setting.

* Configurations/FeatureDefines.xcconfig:
* dom/Document.cpp:
(WebCore::Document::exitPointerLock): Fix existing typo.
(WebCore::Document::pointerLockElement):
* features.json:
* page/EventHandler.cpp:
* page/PointerLockController.cpp:
(WebCore::PointerLockController::requestPointerLock):
(WebCore::PointerLockController::requestPointerUnlock):
* page/Settings.in:

Source/WebKit/mac:

Plumb through PointerLockEnabled setting.

* Configurations/FeatureDefines.xcconfig:
* WebCoreSupport/WebChromeClient.mm:
(WebChromeClient::requestPointerUnlock):
* WebView/WebPreferenceKeysPrivate.h:
* WebView/WebPreferences.mm:
(-[WebPreferences pointerLockEnabled]):
(-[WebPreferences setPointerLockEnabled:]):
* WebView/WebPreferencesPrivate.h:
* WebView/WebView.mm:
(-[WebView _preferencesChanged:]):

Source/WebKit2:

Add SPI to notify client of pointer lock and for client to allow or deny.
Unlock pointer when view is not longer active.

* Configurations/FeatureDefines.xcconfig:
* Shared/WebPreferencesDefinitions.h:
* UIProcess/API/APIUIClient.h:
(API::UIClient::requestPointerLock):
(API::UIClient::didLosePointerLock):
* UIProcess/API/C/WKPage.cpp:
(WKPageSetPageUIClient):
(WKPageDidAllowPointerLock):
(WKPageDidDenyPointerLock):
* UIProcess/API/C/WKPagePrivate.h:
* UIProcess/API/C/WKPageUIClient.h:
* UIProcess/API/C/WKPreferences.cpp:
* UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
* UIProcess/Cocoa/UIDelegate.h:
* UIProcess/Cocoa/UIDelegate.mm:
(WebKit::UIDelegate::setDelegate):
(WebKit::UIDelegate::UIClient::requestPointerLock):
(WebKit::UIDelegate::UIClient::didLosePointerLock):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::dispatchActivityStateChange):
(WebKit::WebPageProxy::resetStateAfterProcessExited):
(WebKit::WebPageProxy::requestPointerLock):
(WebKit::WebPageProxy::didAllowPointerLock):
(WebKit::WebPageProxy::didDenyPointerLock):
(WebKit::WebPageProxy::requestPointerUnlock):
* UIProcess/WebPageProxy.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::updatePreferences):

Source/WTF:

* wtf/FeatureDefines.h: ENABLE_POINTER_LOCK true for Mac.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreConfigurationsFeatureDefinesxcconfig">trunk/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig</a></li>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFwtfFeatureDefinesh">trunk/Source/WTF/wtf/FeatureDefines.h</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreConfigurationsFeatureDefinesxcconfig">trunk/Source/WebCore/Configurations/FeatureDefines.xcconfig</a></li>
<li><a href="#trunkSourceWebCoredomDocumentcpp">trunk/Source/WebCore/dom/Document.cpp</a></li>
<li><a href="#trunkSourceWebCorefeaturesjson">trunk/Source/WebCore/features.json</a></li>
<li><a href="#trunkSourceWebCorepageEventHandlercpp">trunk/Source/WebCore/page/EventHandler.cpp</a></li>
<li><a href="#trunkSourceWebCorepagePointerLockControllercpp">trunk/Source/WebCore/page/PointerLockController.cpp</a></li>
<li><a href="#trunkSourceWebCorepageSettingsin">trunk/Source/WebCore/page/Settings.in</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacConfigurationsFeatureDefinesxcconfig">trunk/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig</a></li>
<li><a href="#trunkSourceWebKitmacWebCoreSupportWebChromeClientmm">trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebPreferenceKeysPrivateh">trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebPreferencesmm">trunk/Source/WebKit/mac/WebView/WebPreferences.mm</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebPreferencesPrivateh">trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebViewmm">trunk/Source/WebKit/mac/WebView/WebView.mm</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2ConfigurationsFeatureDefinesxcconfig">trunk/Source/WebKit2/Configurations/FeatureDefines.xcconfig</a></li>
<li><a href="#trunkSourceWebKit2SharedWebPreferencesDefinitionsh">trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIAPIUIClienth">trunk/Source/WebKit2/UIProcess/API/APIUIClient.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKPagecpp">trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKPagePrivateh">trunk/Source/WebKit2/UIProcess/API/C/WKPagePrivate.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKPageUIClienth">trunk/Source/WebKit2/UIProcess/API/C/WKPageUIClient.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKPreferencescpp">trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKUIDelegatePrivateh">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUIDelegatePrivate.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessCocoaUIDelegateh">trunk/Source/WebKit2/UIProcess/Cocoa/UIDelegate.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessCocoaUIDelegatemm">trunk/Source/WebKit2/UIProcess/Cocoa/UIDelegate.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxycpp">trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxyh">trunk/Source/WebKit2/UIProcess/WebPageProxy.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPagecpp">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp</a></li>
<li><a href="#trunkToolsTestWebKitAPIConfigurationsFeatureDefinesxcconfig">trunk/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/JavaScriptCore/ChangeLog        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -1,3 +1,12 @@
</span><ins>+2016-11-18  Jeremy Jones  &lt;jeremyj@apple.com&gt;
+
+        Add runtime flag to enable pointer lock. Enable pointer lock feature for mac.
+        https://bugs.webkit.org/show_bug.cgi?id=163801
+
+        Reviewed by Simon Fraser.
+
+        * Configurations/FeatureDefines.xcconfig:
+
</ins><span class="cx"> 2016-11-18  Filip Pizlo  &lt;fpizlo@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, fix cloop.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreConfigurationsFeatureDefinesxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -150,7 +150,7 @@
</span><span class="cx"> ENABLE_NOSNIFF = ;
</span><span class="cx"> ENABLE_NOTIFICATIONS[sdk=macosx*] = ENABLE_NOTIFICATIONS;
</span><span class="cx"> ENABLE_PDFKIT_PLUGIN[sdk=macosx*] = ENABLE_PDFKIT_PLUGIN;
</span><del>-ENABLE_POINTER_LOCK = ;
</del><ins>+ENABLE_POINTER_LOCK[sdk=macosx*] = ENABLE_POINTER_LOCK;
</ins><span class="cx"> ENABLE_PROXIMITY_EVENTS = ;
</span><span class="cx"> ENABLE_PUBLIC_SUFFIX_LIST = ENABLE_PUBLIC_SUFFIX_LIST;
</span><span class="cx"> ENABLE_QUOTA = ;
</span></span></pre></div>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WTF/ChangeLog        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -1,3 +1,12 @@
</span><ins>+2016-11-18  Jeremy Jones  &lt;jeremyj@apple.com&gt;
+
+        Add runtime flag to enable pointer lock. Enable pointer lock feature for mac.
+        https://bugs.webkit.org/show_bug.cgi?id=163801
+
+        Reviewed by Simon Fraser.
+
+        * wtf/FeatureDefines.h: ENABLE_POINTER_LOCK true for Mac.
+
</ins><span class="cx"> 2016-11-17  Saam Barati  &lt;sbarati@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Remove async/await compile time flag and enable tests
</span></span></pre></div>
<a id="trunkSourceWTFwtfFeatureDefinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/FeatureDefines.h (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/FeatureDefines.h        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WTF/wtf/FeatureDefines.h        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -630,7 +630,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if !defined(ENABLE_POINTER_LOCK)
</span><del>-#define ENABLE_POINTER_LOCK 0
</del><ins>+#define ENABLE_POINTER_LOCK 1
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if !defined(ENABLE_PROXIMITY_EVENTS)
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebCore/ChangeLog        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -1,3 +1,32 @@
</span><ins>+2016-11-18  Jeremy Jones  &lt;jeremyj@apple.com&gt;
+
+        Add runtime flag to enable pointer lock. Enable pointer lock feature for mac.
+        https://bugs.webkit.org/show_bug.cgi?id=163801
+
+        Reviewed by Simon Fraser.
+
+        These tests now pass with DumpRenderTree.
+        LayoutTests/pointer-lock/lock-already-locked.html
+        LayoutTests/pointer-lock/lock-element-not-in-dom.html
+        LayoutTests/pointer-lock/locked-element-iframe-removed-from-dom.html
+        LayoutTests/pointer-lock/mouse-event-api.html
+
+        PointerLockController::requestPointerLock now protects against synchronous callback
+        to allowPointerLock().
+
+        Add pointerLockEnabled setting.
+
+        * Configurations/FeatureDefines.xcconfig:
+        * dom/Document.cpp:
+        (WebCore::Document::exitPointerLock): Fix existing typo.
+        (WebCore::Document::pointerLockElement):
+        * features.json:
+        * page/EventHandler.cpp:
+        * page/PointerLockController.cpp:
+        (WebCore::PointerLockController::requestPointerLock):
+        (WebCore::PointerLockController::requestPointerUnlock):
+        * page/Settings.in:
+
</ins><span class="cx"> 2016-11-17  Alex Christensen  &lt;achristensen@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Support IDN2008 with UTS #46 instead of IDN2003
</span></span></pre></div>
<a id="trunkSourceWebCoreConfigurationsFeatureDefinesxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Configurations/FeatureDefines.xcconfig (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Configurations/FeatureDefines.xcconfig        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebCore/Configurations/FeatureDefines.xcconfig        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -150,7 +150,7 @@
</span><span class="cx"> ENABLE_NOSNIFF = ;
</span><span class="cx"> ENABLE_NOTIFICATIONS[sdk=macosx*] = ENABLE_NOTIFICATIONS;
</span><span class="cx"> ENABLE_PDFKIT_PLUGIN[sdk=macosx*] = ENABLE_PDFKIT_PLUGIN;
</span><del>-ENABLE_POINTER_LOCK = ;
</del><ins>+ENABLE_POINTER_LOCK[sdk=macosx*] = ENABLE_POINTER_LOCK;
</ins><span class="cx"> ENABLE_PROXIMITY_EVENTS = ;
</span><span class="cx"> ENABLE_PUBLIC_SUFFIX_LIST = ENABLE_PUBLIC_SUFFIX_LIST;
</span><span class="cx"> ENABLE_QUOTA = ;
</span></span></pre></div>
<a id="trunkSourceWebCoredomDocumentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Document.cpp (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Document.cpp        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebCore/dom/Document.cpp        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -6028,7 +6028,7 @@
</span><span class="cx"> 
</span><span class="cx"> void Document::exitPointerLock()
</span><span class="cx"> {
</span><del>-    Page* page = this&gt;page();
</del><ins>+    Page* page = this-&gt;page();
</ins><span class="cx">     if (!page)
</span><span class="cx">         return;
</span><span class="cx">     if (auto* target = page-&gt;pointerLockController().element()) {
</span><span class="lines">@@ -6040,10 +6040,10 @@
</span><span class="cx"> 
</span><span class="cx"> Element* Document::pointerLockElement() const
</span><span class="cx"> {
</span><del>-    Page* page = this&gt;page();
</del><ins>+    Page* page = this-&gt;page();
</ins><span class="cx">     if (!page || page-&gt;pointerLockController().lockPending())
</span><span class="cx">         return nullptr;
</span><del>-    auto* element = page()-&gt;pointerLockController().element();
</del><ins>+    auto* element = page-&gt;pointerLockController().element();
</ins><span class="cx">     if (!element || &amp;element-&gt;document() != this)
</span><span class="cx">         return nullptr;
</span><span class="cx">     return element;
</span></span></pre></div>
<a id="trunkSourceWebCorefeaturesjson"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/features.json (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/features.json        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebCore/features.json        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -297,6 +297,17 @@
</span><span class="cx">         &quot;description&quot;: &quot;An API that can be used to understand the visibility and position of DOM elements relative to a containing element or to the top-level viewport.&quot;
</span><span class="cx">     },
</span><span class="cx">     {
</span><ins>+        &quot;name&quot;: &quot;Pointer Lock&quot;,
+        &quot;status&quot;: {
+            &quot;status&quot;: &quot;In Development&quot;,
+            &quot;enabled-by-default&quot;: false
+        },
+        &quot;url&quot;: &quot;https://www.w3.org/TR/pointerlock/&quot;,
+        &quot;webkit-url&quot;: &quot;https://bugs.webkit.org/show_bug.cgi?id=164652&quot;,
+        &quot;keywords&quot;: [&quot;pointer&quot;, &quot;pointer lock&quot;],
+        &quot;description&quot;: &quot;Provides scripted access to raw mouse movement data while locking the target of mouse events to a single element and removing the cursor from view.&quot;
+    },
+    {
</ins><span class="cx">         &quot;name&quot;: &quot;Preload&quot;,
</span><span class="cx">         &quot;status&quot;: {
</span><span class="cx">             &quot;status&quot;: &quot;In Development&quot;,
</span></span></pre></div>
<a id="trunkSourceWebCorepageEventHandlercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/EventHandler.cpp (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/EventHandler.cpp        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebCore/page/EventHandler.cpp        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -72,7 +72,6 @@
</span><span class="cx"> #include &quot;PlatformKeyboardEvent.h&quot;
</span><span class="cx"> #include &quot;PlatformWheelEvent.h&quot;
</span><span class="cx"> #include &quot;PluginDocument.h&quot;
</span><del>-#include &quot;PointerLockController.h&quot;
</del><span class="cx"> #include &quot;RenderFrameSet.h&quot;
</span><span class="cx"> #include &quot;RenderLayer.h&quot;
</span><span class="cx"> #include &quot;RenderListBox.h&quot;
</span><span class="lines">@@ -120,6 +119,10 @@
</span><span class="cx"> #include &quot;PlatformGestureEventMac.h&quot;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+#if ENABLE(POINTER_LOCK)
+#include &quot;PointerLockController.h&quot;
+#endif
+
</ins><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> using namespace HTMLNames;
</span></span></pre></div>
<a id="trunkSourceWebCorepagePointerLockControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/PointerLockController.cpp (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/PointerLockController.cpp        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebCore/page/PointerLockController.cpp        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -34,6 +34,8 @@
</span><span class="cx"> #include &quot;EventNames.h&quot;
</span><span class="cx"> #include &quot;Page.h&quot;
</span><span class="cx"> #include &quot;PlatformMouseEvent.h&quot;
</span><ins>+#include &quot;ScriptController.h&quot;
+#include &quot;Settings.h&quot;
</ins><span class="cx"> #include &quot;VoidCallback.h&quot;
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -47,11 +49,19 @@
</span><span class="cx"> 
</span><span class="cx"> void PointerLockController::requestPointerLock(Element* target)
</span><span class="cx"> {
</span><ins>+    if (!m_page.settings().pointerLockEnabled())
+        return;
+
</ins><span class="cx">     if (!target || !target-&gt;inDocument() || m_documentOfRemovedElementWhileWaitingForUnlock) {
</span><span class="cx">         enqueueEvent(eventNames().pointerlockerrorEvent, target);
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    if (!ScriptController::processingUserGesture()) {
+        enqueueEvent(eventNames().pointerlockerrorEvent, target);
+        return;
+    }
+
</ins><span class="cx">     if (target-&gt;document().isSandboxed(SandboxPointerLock)) {
</span><span class="cx">         // FIXME: This message should be moved off the console once a solution to https://bugs.webkit.org/show_bug.cgi?id=103274 exists.
</span><span class="cx">         target-&gt;document().addConsoleMessage(MessageSource::Security, MessageLevel::Error, ASCIILiteral(&quot;Blocked pointer lock on an element because the element's frame is sandboxed and the 'allow-pointer-lock' permission is not set.&quot;));
</span><span class="lines">@@ -79,7 +89,13 @@
</span><span class="cx"> 
</span><span class="cx"> void PointerLockController::requestPointerUnlock()
</span><span class="cx"> {
</span><del>-    return m_page.chrome().client().requestPointerUnlock();
</del><ins>+    if (!m_element)
+        return;
+
+    if (!m_page.settings().pointerLockEnabled())
+        return;
+
+    m_page.chrome().client().requestPointerUnlock();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void PointerLockController::elementRemoved(Element* element)
</span></span></pre></div>
<a id="trunkSourceWebCorepageSettingsin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Settings.in (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Settings.in        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebCore/page/Settings.in        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -293,3 +293,4 @@
</span><span class="cx"> asyncImageDecodingEnabled initial=true
</span><span class="cx"> 
</span><span class="cx"> es6ModulesEnabled initial=false
</span><ins>+pointerLockEnabled initial=false
</ins></span></pre></div>
<a id="trunkSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/ChangeLog (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/ChangeLog        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebKit/mac/ChangeLog        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -1,3 +1,23 @@
</span><ins>+2016-11-18  Jeremy Jones  &lt;jeremyj@apple.com&gt;
+
+        Add runtime flag to enable pointer lock. Enable pointer lock feature for mac.
+        https://bugs.webkit.org/show_bug.cgi?id=163801
+
+        Reviewed by Simon Fraser.
+
+        Plumb through PointerLockEnabled setting.
+
+        * Configurations/FeatureDefines.xcconfig:
+        * WebCoreSupport/WebChromeClient.mm:
+        (WebChromeClient::requestPointerUnlock):
+        * WebView/WebPreferenceKeysPrivate.h:
+        * WebView/WebPreferences.mm:
+        (-[WebPreferences pointerLockEnabled]):
+        (-[WebPreferences setPointerLockEnabled:]):
+        * WebView/WebPreferencesPrivate.h:
+        * WebView/WebView.mm:
+        (-[WebView _preferencesChanged:]):
+
</ins><span class="cx"> 2016-11-17  Dan Bernstein  &lt;mitz@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Try to fix some non-macOS builds.
</span></span></pre></div>
<a id="trunkSourceWebKitmacConfigurationsFeatureDefinesxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -150,7 +150,7 @@
</span><span class="cx"> ENABLE_NOSNIFF = ;
</span><span class="cx"> ENABLE_NOTIFICATIONS[sdk=macosx*] = ENABLE_NOTIFICATIONS;
</span><span class="cx"> ENABLE_PDFKIT_PLUGIN[sdk=macosx*] = ENABLE_PDFKIT_PLUGIN;
</span><del>-ENABLE_POINTER_LOCK = ;
</del><ins>+ENABLE_POINTER_LOCK[sdk=macosx*] = ENABLE_POINTER_LOCK;
</ins><span class="cx"> ENABLE_PROXIMITY_EVENTS = ;
</span><span class="cx"> ENABLE_PUBLIC_SUFFIX_LIST = ENABLE_PUBLIC_SUFFIX_LIST;
</span><span class="cx"> ENABLE_QUOTA = ;
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebCoreSupportWebChromeClientmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -77,7 +77,6 @@
</span><span class="cx"> #import &lt;WebCore/NotImplemented.h&gt;
</span><span class="cx"> #import &lt;WebCore/Page.h&gt;
</span><span class="cx"> #import &lt;WebCore/PlatformScreen.h&gt;
</span><del>-#import &lt;WebCore/PointerLockController.h&gt;
</del><span class="cx"> #import &lt;WebCore/ResourceRequest.h&gt;
</span><span class="cx"> #import &lt;WebCore/SerializedCryptoKeyWrap.h&gt;
</span><span class="cx"> #import &lt;WebCore/Widget.h&gt;
</span><span class="lines">@@ -95,6 +94,10 @@
</span><span class="cx"> #import &lt;WebCore/Geolocation.h&gt;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+#if ENABLE(POINTER_LOCK)
+#import &lt;WebCore/PointerLockController.h&gt;
+#endif
+
</ins><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> #import &lt;WebCore/WAKClipView.h&gt;
</span><span class="cx"> #import &lt;WebCore/WAKWindow.h&gt;
</span><span class="lines">@@ -730,8 +733,8 @@
</span><span class="cx"> void WebChromeClient::requestPointerUnlock()
</span><span class="cx"> {
</span><span class="cx"> #if PLATFORM(MAC)
</span><ins>+    CGAssociateMouseAndMouseCursorPosition(true);
</ins><span class="cx">     CGDisplayShowCursor(CGMainDisplayID());
</span><del>-    CGAssociateMouseAndMouseCursorPosition(true);
</del><span class="cx">     if ([m_webView page])
</span><span class="cx">         [m_webView page]-&gt;pointerLockController().didLosePointerLock();
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebPreferenceKeysPrivateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -171,6 +171,7 @@
</span><span class="cx"> #define WebKitCSSGridLayoutEnabledPreferenceKey @&quot;WebKitCSSGridLayoutEnabled&quot;
</span><span class="cx"> #define WebKitVisualViewportEnabledPreferenceKey @&quot;WebKitVisualViewportEnabled&quot;
</span><span class="cx"> #define WebKitModernMediaControlsEnabledPreferenceKey @&quot;WebKitModernMediaControlsEnabled&quot;
</span><ins>+#define WebKitPointerLockEnabledPreferenceKey @&quot;WebKitPointerLockEnabled&quot;
</ins><span class="cx"> 
</span><span class="cx"> #if !TARGET_OS_IPHONE
</span><span class="cx"> // These are private both because callers should be using the cover methods and because the
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebPreferencesmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebPreferences.mm (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebPreferences.mm        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebKit/mac/WebView/WebPreferences.mm        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -2360,6 +2360,16 @@
</span><span class="cx">     [self _setBoolValue:flag forKey:WebKitAllowsPictureInPictureMediaPlaybackPreferenceKey];
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+- (BOOL)pointerLockEnabled
+{
+    return [self _boolValueForKey:WebKitPointerLockEnabledPreferenceKey];
+}
+
+- (void)setPointerLockEnabled:(BOOL)flag
+{
+    [self _setBoolValue:flag forKey:WebKitPointerLockEnabledPreferenceKey];
+}
+
</ins><span class="cx"> - (BOOL)mockScrollbarsEnabled
</span><span class="cx"> {
</span><span class="cx">     return [self _boolValueForKey:WebKitMockScrollbarsEnabledPreferenceKey];
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebPreferencesPrivateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -281,6 +281,9 @@
</span><span class="cx"> - (void)setAllowsPictureInPictureMediaPlayback:(BOOL)flag;
</span><span class="cx"> - (BOOL)allowsPictureInPictureMediaPlayback;
</span><span class="cx"> 
</span><ins>+- (void)setPointerLockEnabled:(BOOL)flag;
+- (BOOL)pointerLockEnabled;
+
</ins><span class="cx"> - (NSString *)pictographFontFamily;
</span><span class="cx"> - (void)setPictographFontFamily:(NSString *)family;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebView.mm (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebView.mm        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebKit/mac/WebView/WebView.mm        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -2643,7 +2643,11 @@
</span><span class="cx">     settings.setJavaScriptCanAccessClipboard([preferences javaScriptCanAccessClipboard]);
</span><span class="cx">     settings.setXSSAuditorEnabled([preferences isXSSAuditorEnabled]);
</span><span class="cx">     settings.setDNSPrefetchingEnabled([preferences isDNSPrefetchingEnabled]);
</span><del>-    
</del><ins>+
+#if ENABLE(POINTER_LOCK)
+    settings.setPointerLockEnabled([preferences pointerLockEnabled]);
+#endif
+
</ins><span class="cx">     settings.setAcceleratedCompositingEnabled([preferences acceleratedCompositingEnabled]);
</span><span class="cx">     settings.setAcceleratedDrawingEnabled([preferences acceleratedDrawingEnabled]);
</span><span class="cx">     settings.setDisplayListDrawingEnabled([preferences displayListDrawingEnabled]);
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebKit2/ChangeLog        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -1,3 +1,42 @@
</span><ins>+2016-11-18  Jeremy Jones  &lt;jeremyj@apple.com&gt;
+
+        Add runtime flag to enable pointer lock. Enable pointer lock feature for mac.
+        https://bugs.webkit.org/show_bug.cgi?id=163801
+
+        Reviewed by Simon Fraser.
+
+        Add SPI to notify client of pointer lock and for client to allow or deny.
+        Unlock pointer when view is not longer active.
+
+        * Configurations/FeatureDefines.xcconfig:
+        * Shared/WebPreferencesDefinitions.h:
+        * UIProcess/API/APIUIClient.h:
+        (API::UIClient::requestPointerLock):
+        (API::UIClient::didLosePointerLock):
+        * UIProcess/API/C/WKPage.cpp:
+        (WKPageSetPageUIClient):
+        (WKPageDidAllowPointerLock):
+        (WKPageDidDenyPointerLock):
+        * UIProcess/API/C/WKPagePrivate.h:
+        * UIProcess/API/C/WKPageUIClient.h:
+        * UIProcess/API/C/WKPreferences.cpp:
+        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
+        * UIProcess/Cocoa/UIDelegate.h:
+        * UIProcess/Cocoa/UIDelegate.mm:
+        (WebKit::UIDelegate::setDelegate):
+        (WebKit::UIDelegate::UIClient::requestPointerLock):
+        (WebKit::UIDelegate::UIClient::didLosePointerLock):
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::dispatchActivityStateChange):
+        (WebKit::WebPageProxy::resetStateAfterProcessExited):
+        (WebKit::WebPageProxy::requestPointerLock):
+        (WebKit::WebPageProxy::didAllowPointerLock):
+        (WebKit::WebPageProxy::didDenyPointerLock):
+        (WebKit::WebPageProxy::requestPointerUnlock):
+        * UIProcess/WebPageProxy.h:
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::updatePreferences):
+
</ins><span class="cx"> 2016-11-17  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Downloads started by context menu actions should also have a web view associated
</span></span></pre></div>
<a id="trunkSourceWebKit2ConfigurationsFeatureDefinesxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Configurations/FeatureDefines.xcconfig (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Configurations/FeatureDefines.xcconfig        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebKit2/Configurations/FeatureDefines.xcconfig        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -150,7 +150,7 @@
</span><span class="cx"> ENABLE_NOSNIFF = ;
</span><span class="cx"> ENABLE_NOTIFICATIONS[sdk=macosx*] = ENABLE_NOTIFICATIONS;
</span><span class="cx"> ENABLE_PDFKIT_PLUGIN[sdk=macosx*] = ENABLE_PDFKIT_PLUGIN;
</span><del>-ENABLE_POINTER_LOCK = ;
</del><ins>+ENABLE_POINTER_LOCK[sdk=macosx*] = ENABLE_POINTER_LOCK;
</ins><span class="cx"> ENABLE_PROXIMITY_EVENTS = ;
</span><span class="cx"> ENABLE_PUBLIC_SUFFIX_LIST = ENABLE_PUBLIC_SUFFIX_LIST;
</span><span class="cx"> ENABLE_QUOTA = ;
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedWebPreferencesDefinitionsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -310,6 +310,7 @@
</span><span class="cx">     macro(InputEventsEnabled, inputEventsEnabled, Bool, bool, DEFAULT_EXPERIMENTAL_FEATURES_ENABLED, &quot;Input Events&quot;, &quot;Enable InputEvents support&quot;) \
</span><span class="cx">     macro(WebGL2Enabled, webGL2Enabled, Bool, bool, DEFAULT_EXPERIMENTAL_FEATURES_ENABLED, &quot;WebGL 2.0&quot;, &quot;WebGL 2 prototype&quot;) \
</span><span class="cx">     macro(ES6ModulesEnabled, es6ModulesEnabled, Bool, bool, DEFAULT_EXPERIMENTAL_FEATURES_ENABLED, &quot;ES6 Modules&quot;, &quot;Enable ES6 Modules support&quot;) \
</span><ins>+    macro(PointerLockEnabled, pointerLockEnabled, Bool, bool, DEFAULT_EXPERIMENTAL_FEATURES_ENABLED, &quot;PointerLock&quot;, &quot;Pointer Lock API support&quot;) \
</ins><span class="cx">     \
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(COCOA)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIAPIUIClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/APIUIClient.h (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/APIUIClient.h        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebKit2/UIProcess/API/APIUIClient.h        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -167,6 +167,11 @@
</span><span class="cx">     virtual NSDictionary *dataDetectionContext() { return nullptr; }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+#if ENABLE(POINTER_LOCK)
+    virtual void requestPointerLock(WebKit::WebPageProxy*) { }
+    virtual void didLosePointerLock(WebKit::WebPageProxy*) { }
+#endif
+
</ins><span class="cx">     virtual void didClickAutoFillButton(WebKit::WebPageProxy&amp;, API::Object*) { }
</span><span class="cx"> 
</span><span class="cx">     virtual void imageOrMediaDocumentSizeChanged(const WebCore::IntSize&amp;) { }
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICWKPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -109,7 +109,7 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> template&lt;&gt; struct ClientTraits&lt;WKPageUIClientBase&gt; {
</span><del>-    typedef std::tuple&lt;WKPageUIClientV0, WKPageUIClientV1, WKPageUIClientV2, WKPageUIClientV3, WKPageUIClientV4, WKPageUIClientV5, WKPageUIClientV6, WKPageUIClientV7&gt; Versions;
</del><ins>+    typedef std::tuple&lt;WKPageUIClientV0, WKPageUIClientV1, WKPageUIClientV2, WKPageUIClientV3, WKPageUIClientV4, WKPageUIClientV5, WKPageUIClientV6, WKPageUIClientV7, WKPageUIClientV8&gt; Versions;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CONTEXT_MENUS)
</span><span class="lines">@@ -2218,6 +2218,23 @@
</span><span class="cx">             m_client.mediaSessionMetadataDidChange(toAPI(&amp;page), toAPI(metadata), m_client.base.clientInfo);
</span><span class="cx">         }
</span><span class="cx"> #endif
</span><ins>+#if ENABLE(POINTER_LOCK)
+        void requestPointerLock(WebPageProxy* page) override
+        {
+            if (!m_client.requestPointerLock)
+                return;
+            
+            m_client.requestPointerLock(toAPI(page), m_client.base.clientInfo);
+        }
+
+        void didLosePointerLock(WebPageProxy* page) override
+        {
+            if (!m_client.requestPointerLock)
+                return;
+
+            m_client.didLosePointerLock(toAPI(page), m_client.base.clientInfo);
+        }
+#endif
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     toImpl(pageRef)-&gt;setUIClient(std::make_unique&lt;UIClient&gt;(wkClient));
</span><span class="lines">@@ -2606,6 +2623,24 @@
</span><span class="cx">     toImpl(page)-&gt;setMuted(muted);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WKPageDidAllowPointerLock(WKPageRef page)
+{
+#if ENABLE(POINTER_LOCK)
+    toImpl(page)-&gt;didAllowPointerLock();
+#else
+    UNUSED_PARAM(page);
+#endif
+}
+
+void WKPageDidDenyPointerLock(WKPageRef page)
+{
+#if ENABLE(POINTER_LOCK)
+    toImpl(page)-&gt;didDenyPointerLock();
+#else
+    UNUSED_PARAM(page);
+#endif
+}
+
</ins><span class="cx"> bool WKPageHasMediaSessionWithActiveMediaElements(WKPageRef page)
</span><span class="cx"> {
</span><span class="cx"> #if ENABLE(MEDIA_SESSION)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICWKPagePrivateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPagePrivate.h (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/C/WKPagePrivate.h        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPagePrivate.h        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -128,6 +128,9 @@
</span><span class="cx"> };
</span><span class="cx"> typedef uint32_t WKMediaMutedState;
</span><span class="cx"> WK_EXPORT void WKPageSetMuted(WKPageRef page, WKMediaMutedState muted);
</span><ins>+    
+WK_EXPORT void WKPageDidAllowPointerLock(WKPageRef page);
+WK_EXPORT void WKPageDidDenyPointerLock(WKPageRef page);
</ins><span class="cx"> 
</span><span class="cx"> enum {
</span><span class="cx">     kWKMediaIsNotPlaying = 0,
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICWKPageUIClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPageUIClient.h (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/C/WKPageUIClient.h        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPageUIClient.h        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -104,6 +104,9 @@
</span><span class="cx"> typedef void (*WKPageMediaSessionMetadataDidChangeCallback)(WKPageRef page, WKMediaSessionMetadataRef metadata, const void* clientInfo);
</span><span class="cx"> typedef void (*WKFullscreenMayReturnToInlineCallback)(WKPageRef page, const void* clientInfo);
</span><span class="cx"> 
</span><ins>+typedef void (*WKRequestPointerLockCallback)(WKPageRef page, const void* clientInfo);
+typedef void (*WKDidLosePointerLockCallback)(WKPageRef page, const void* clientInfo);
+
</ins><span class="cx"> // Deprecated
</span><span class="cx"> typedef WKPageRef (*WKPageCreateNewPageCallback_deprecatedForUseWithV0)(WKPageRef page, WKDictionaryRef features, WKEventModifiers modifiers, WKEventMouseButton mouseButton, const void *clientInfo);
</span><span class="cx"> typedef void      (*WKPageMouseDidMoveOverElementCallback_deprecatedForUseWithV0)(WKPageRef page, WKEventModifiers modifiers, WKTypeRef userData, const void *clientInfo);
</span><span class="lines">@@ -636,6 +639,94 @@
</span><span class="cx">     WKFullscreenMayReturnToInlineCallback                               fullscreenMayReturnToInline;
</span><span class="cx"> } WKPageUIClientV7;
</span><span class="cx"> 
</span><ins>+typedef struct WKPageUIClientV8 {
+    WKPageUIClientBase                                                  base;
+    
+    // Version 0.
+    WKPageCreateNewPageCallback_deprecatedForUseWithV0                  createNewPage_deprecatedForUseWithV0;
+    WKPageUIClientCallback                                              showPage;
+    WKPageUIClientCallback                                              close;
+    WKPageTakeFocusCallback                                             takeFocus;
+    WKPageFocusCallback                                                 focus;
+    WKPageUnfocusCallback                                               unfocus;
+    WKPageRunJavaScriptAlertCallback_deprecatedForUseWithV0             runJavaScriptAlert_deprecatedForUseWithV0;
+    WKPageRunJavaScriptConfirmCallback_deprecatedForUseWithV0           runJavaScriptConfirm_deprecatedForUseWithV0;
+    WKPageRunJavaScriptPromptCallback_deprecatedForUseWithV0            runJavaScriptPrompt_deprecatedForUseWithV0;
+    WKPageSetStatusTextCallback                                         setStatusText;
+    WKPageMouseDidMoveOverElementCallback_deprecatedForUseWithV0        mouseDidMoveOverElement_deprecatedForUseWithV0;
+    WKPageMissingPluginButtonClickedCallback_deprecatedForUseWithV0     missingPluginButtonClicked_deprecatedForUseWithV0;
+    WKPageDidNotHandleKeyEventCallback                                  didNotHandleKeyEvent;
+    WKPageDidNotHandleWheelEventCallback                                didNotHandleWheelEvent;
+    WKPageGetToolbarsAreVisibleCallback                                 toolbarsAreVisible;
+    WKPageSetToolbarsAreVisibleCallback                                 setToolbarsAreVisible;
+    WKPageGetMenuBarIsVisibleCallback                                   menuBarIsVisible;
+    WKPageSetMenuBarIsVisibleCallback                                   setMenuBarIsVisible;
+    WKPageGetStatusBarIsVisibleCallback                                 statusBarIsVisible;
+    WKPageSetStatusBarIsVisibleCallback                                 setStatusBarIsVisible;
+    WKPageGetIsResizableCallback                                        isResizable;
+    WKPageSetIsResizableCallback                                        setIsResizable;
+    WKPageGetWindowFrameCallback                                        getWindowFrame;
+    WKPageSetWindowFrameCallback                                        setWindowFrame;
+    WKPageRunBeforeUnloadConfirmPanelCallback_deprecatedForUseWithV6    runBeforeUnloadConfirmPanel_deprecatedForUseWithV6;
+    WKPageUIClientCallback                                              didDraw;
+    WKPageUIClientCallback                                              pageDidScroll;
+    WKPageExceededDatabaseQuotaCallback                                 exceededDatabaseQuota;
+    WKPageRunOpenPanelCallback                                          runOpenPanel;
+    WKPageDecidePolicyForGeolocationPermissionRequestCallback           decidePolicyForGeolocationPermissionRequest;
+    WKPageHeaderHeightCallback                                          headerHeight;
+    WKPageFooterHeightCallback                                          footerHeight;
+    WKPageDrawHeaderCallback                                            drawHeader;
+    WKPageDrawFooterCallback                                            drawFooter;
+    WKPagePrintFrameCallback                                            printFrame;
+    WKPageUIClientCallback                                              runModal;
+    void*                                                               unused1; // Used to be didCompleteRubberBandForMainFrame
+    WKPageSaveDataToFileInDownloadsFolderCallback                       saveDataToFileInDownloadsFolder;
+    void*                                                               shouldInterruptJavaScript_unavailable;
+    
+    // Version 1.
+    WKPageCreateNewPageCallback_deprecatedForUseWithV1                  createNewPage_deprecatedForUseWithV1;
+    WKPageMouseDidMoveOverElementCallback                               mouseDidMoveOverElement;
+    WKPageDecidePolicyForNotificationPermissionRequestCallback          decidePolicyForNotificationPermissionRequest;
+    WKPageUnavailablePluginButtonClickedCallback_deprecatedForUseWithV1 unavailablePluginButtonClicked_deprecatedForUseWithV1;
+    
+    // Version 2.
+    WKPageShowColorPickerCallback                                       showColorPicker;
+    WKPageHideColorPickerCallback                                       hideColorPicker;
+    WKPageUnavailablePluginButtonClickedCallback                        unavailablePluginButtonClicked;
+    
+    // Version 3.
+    WKPagePinnedStateDidChangeCallback                                  pinnedStateDidChange;
+    
+    // Version 4.
+    void*                                                               unused2; // Used to be didBeginTrackingPotentialLongMousePress.
+    void*                                                               unused3; // Used to be didRecognizeLongMousePress.
+    void*                                                               unused4; // Used to be didCancelTrackingPotentialLongMousePress.
+    WKPageIsPlayingAudioDidChangeCallback                               isPlayingAudioDidChange;
+    
+    // Version 5.
+    WKPageDecidePolicyForUserMediaPermissionRequestCallback             decidePolicyForUserMediaPermissionRequest;
+    WKPageDidClickAutoFillButtonCallback                                didClickAutoFillButton;
+    WKPageRunJavaScriptAlertCallback_deprecatedForUseWithV5             runJavaScriptAlert_deprecatedForUseWithV5;
+    WKPageRunJavaScriptConfirmCallback_deprecatedForUseWithV5           runJavaScriptConfirm_deprecatedForUseWithV5;
+    WKPageRunJavaScriptPromptCallback_deprecatedForUseWithV5            runJavaScriptPrompt_deprecatedForUseWithV5;
+    WKPageMediaSessionMetadataDidChangeCallback                         mediaSessionMetadataDidChange;
+    
+    // Version 6.
+    WKPageCreateNewPageCallback                                         createNewPage;
+    WKPageRunJavaScriptAlertCallback                                    runJavaScriptAlert;
+    WKPageRunJavaScriptConfirmCallback                                  runJavaScriptConfirm;
+    WKPageRunJavaScriptPromptCallback                                   runJavaScriptPrompt;
+    WKCheckUserMediaPermissionCallback                                  checkUserMediaPermissionForOrigin;
+    
+    // Version 7.
+    WKPageRunBeforeUnloadConfirmPanelCallback                           runBeforeUnloadConfirmPanel;
+    WKFullscreenMayReturnToInlineCallback                               fullscreenMayReturnToInline;
+    
+    // Version 8.
+    WKRequestPointerLockCallback                                        requestPointerLock;
+    WKDidLosePointerLockCallback                                        didLosePointerLock;
+} WKPageUIClientV8;
+    
</ins><span class="cx"> #ifdef __cplusplus
</span><span class="cx"> }
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICWKPreferencescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -1590,3 +1590,4 @@
</span><span class="cx"> {
</span><span class="cx">     WebKit::toImpl(preferencesRef)-&gt;setApplePayCapabilityDisclosureAllowed(allowed);
</span><span class="cx"> }
</span><ins>+
</ins></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKUIDelegatePrivateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUIDelegatePrivate.h (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUIDelegatePrivate.h        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUIDelegatePrivate.h        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -55,6 +55,8 @@
</span><span class="cx"> - (void)_webViewFullscreenMayReturnToInline:(WKWebView *)webView;
</span><span class="cx"> - (void)_webViewDidEnterFullscreen:(WKWebView *)webView WK_API_AVAILABLE(macosx(10.11), ios(8.3));
</span><span class="cx"> - (void)_webViewDidExitFullscreen:(WKWebView *)webView WK_API_AVAILABLE(macosx(10.11), ios(8.3));
</span><ins>+- (void)_webViewRequestPointerLock:(WKWebView *)webView WK_API_AVAILABLE(macosx(10.12));
+- (void)_webViewDidLosePointerLock:(WKWebView *)webView WK_API_AVAILABLE(macosx(10.12));
</ins><span class="cx"> 
</span><span class="cx"> - (void)_webView:(WKWebView *)webView imageOrMediaDocumentSizeChanged:(CGSize)size WK_API_AVAILABLE(macosx(10.12), ios(10.0));
</span><span class="cx"> - (NSDictionary *)_dataDetectionContextForWebView:(WKWebView *)webView WK_API_AVAILABLE(macosx(10.12), ios(10.0));
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessCocoaUIDelegateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Cocoa/UIDelegate.h (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Cocoa/UIDelegate.h        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/UIDelegate.h        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -101,6 +101,11 @@
</span><span class="cx"> 
</span><span class="cx">         NSDictionary *dataDetectionContext() override;
</span><span class="cx"> 
</span><ins>+#if ENABLE(POINTER_LOCK)
+        void requestPointerLock(WebKit::WebPageProxy*) override;
+        void didLosePointerLock(WebKit::WebPageProxy*) override;
+#endif
+
</ins><span class="cx">         void imageOrMediaDocumentSizeChanged(const WebCore::IntSize&amp;) override;
</span><span class="cx"> 
</span><span class="cx">         UIDelegate&amp; m_uiDelegate;
</span><span class="lines">@@ -135,7 +140,10 @@
</span><span class="cx"> #endif
</span><span class="cx">         bool dataDetectionContextForWebView : 1;
</span><span class="cx">         bool webViewImageOrMediaDocumentSizeChanged : 1;
</span><del>-
</del><ins>+#if ENABLE(POINTER_LOCK)
+        bool webViewRequestPointerLock : 1;
+        bool webViewDidLosePointerLock : 1;
+#endif
</ins><span class="cx"> #if ENABLE(CONTEXT_MENUS)
</span><span class="cx">         bool webViewContextMenuForElement : 1;
</span><span class="cx">         bool webViewContextMenuForElementUserInfo : 1;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessCocoaUIDelegatemm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Cocoa/UIDelegate.mm (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Cocoa/UIDelegate.mm        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/UIDelegate.mm        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -106,6 +106,10 @@
</span><span class="cx">     m_delegateMethods.dataDetectionContextForWebView = [delegate respondsToSelector:@selector(_dataDetectionContextForWebView:)];
</span><span class="cx">     m_delegateMethods.webViewImageOrMediaDocumentSizeChanged = [delegate respondsToSelector:@selector(_webView:imageOrMediaDocumentSizeChanged:)];
</span><span class="cx"> 
</span><ins>+#if ENABLE(POINTER_LOCK)
+    m_delegateMethods.webViewRequestPointerLock = [delegate respondsToSelector:@selector(_webViewRequestPointerLock:)];
+    m_delegateMethods.webViewDidLosePointerLock = [delegate respondsToSelector:@selector(_webViewDidLosePointerLock:)];
+#endif
</ins><span class="cx"> #if ENABLE(CONTEXT_MENUS)
</span><span class="cx">     m_delegateMethods.webViewContextMenuForElement = [delegate respondsToSelector:@selector(_webView:contextMenu:forElement:)];
</span><span class="cx">     m_delegateMethods.webViewContextMenuForElementUserInfo = [delegate respondsToSelector:@selector(_webView:contextMenu:forElement:userInfo:)];
</span><span class="lines">@@ -457,6 +461,34 @@
</span><span class="cx">     return [static_cast&lt;id &lt;WKUIDelegatePrivate&gt;&gt;(delegate) _dataDetectionContextForWebView:m_uiDelegate.m_webView];
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if ENABLE(POINTER_LOCK)
+
+void UIDelegate::UIClient::requestPointerLock(WebKit::WebPageProxy*)
+{
+    if (!m_uiDelegate.m_delegateMethods.webViewRequestPointerLock)
+        return;
+
+    auto delegate = m_uiDelegate.m_delegate.get();
+    if (!delegate)
+        return;
+
+    [static_cast&lt;id &lt;WKUIDelegatePrivate&gt;&gt;(delegate) _webViewRequestPointerLock:m_uiDelegate.m_webView];
+}
+
+void UIDelegate::UIClient::didLosePointerLock(WebKit::WebPageProxy*)
+{
+    if (!m_uiDelegate.m_delegateMethods.webViewDidLosePointerLock)
+        return;
+
+    auto delegate = m_uiDelegate.m_delegate.get();
+    if (!delegate)
+        return;
+
+    [static_cast&lt;id &lt;WKUIDelegatePrivate&gt;&gt;(delegate) _webViewDidLosePointerLock:m_uiDelegate.m_webView];
+}
+
+#endif
+
</ins><span class="cx"> void UIDelegate::UIClient::imageOrMediaDocumentSizeChanged(const WebCore::IntSize&amp; newSize)
</span><span class="cx"> {
</span><span class="cx">     if (!m_uiDelegate.m_delegateMethods.webViewImageOrMediaDocumentSizeChanged)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -1572,7 +1572,7 @@
</span><span class="cx">         m_process-&gt;responsivenessTimer().stop();
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(POINTER_LOCK)
</span><del>-    if ((changed &amp; ActivityState::IsVisible) &amp;&amp; !isViewVisible())
</del><ins>+    if (((changed &amp; ActivityState::IsVisible) &amp;&amp; !isViewVisible()) || ((changed &amp; ActivityState::WindowIsActive) &amp;&amp; !m_pageClient.isViewWindowActive()))
</ins><span class="cx">         requestPointerUnlock();
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -5493,6 +5493,10 @@
</span><span class="cx">     m_pageClient.dismissContentRelativeChildWindows();
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+#if ENABLE(POINTER_LOCK)
+    requestPointerUnlock();
+#endif
+
</ins><span class="cx">     PageLoadState::Transaction transaction = m_pageLoadState.transaction();
</span><span class="cx">     m_pageLoadState.reset(transaction);
</span><span class="cx"> 
</span><span class="lines">@@ -6710,31 +6714,53 @@
</span><span class="cx"> #if ENABLE(POINTER_LOCK)
</span><span class="cx"> void WebPageProxy::requestPointerLock()
</span><span class="cx"> {
</span><ins>+    ASSERT(!m_isPointerLockPending);
+    ASSERT(!m_isPointerLocked);
+    m_isPointerLockPending = true;
</ins><span class="cx">     if (!isViewVisible()) {
</span><del>-        m_process-&gt;send(Messages::WebPage::DidNotAcquirePointerLock(), m_pageID);
</del><ins>+        didDenyPointerLock();
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><del>-
-    didAllowPointerLock();
</del><ins>+    m_uiClient-&gt;requestPointerLock(this);
</ins><span class="cx"> }
</span><span class="cx">     
</span><span class="cx"> void WebPageProxy::didAllowPointerLock()
</span><span class="cx"> {
</span><ins>+    ASSERT(m_isPointerLockPending &amp;&amp; !m_isPointerLocked);
+    m_isPointerLocked = true;
+    m_isPointerLockPending = false;
+#if PLATFORM(MAC)
</ins><span class="cx">     CGDisplayHideCursor(CGMainDisplayID());
</span><span class="cx">     CGAssociateMouseAndMouseCursorPosition(false);
</span><ins>+#endif
</ins><span class="cx">     m_process-&gt;send(Messages::WebPage::DidAcquirePointerLock(), m_pageID);
</span><span class="cx"> }
</span><span class="cx">     
</span><span class="cx"> void WebPageProxy::didDenyPointerLock()
</span><span class="cx"> {
</span><ins>+    ASSERT(m_isPointerLockPending &amp;&amp; !m_isPointerLocked);
+    m_isPointerLockPending = false;
</ins><span class="cx">     m_process-&gt;send(Messages::WebPage::DidNotAcquirePointerLock(), m_pageID);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebPageProxy::requestPointerUnlock()
</span><span class="cx"> {
</span><del>-    CGDisplayShowCursor(CGMainDisplayID());
-    CGAssociateMouseAndMouseCursorPosition(true);
-    m_process-&gt;send(Messages::WebPage::DidLosePointerLock(), m_pageID);
</del><ins>+    if (m_isPointerLocked) {
+#if PLATFORM(MAC)
+        CGAssociateMouseAndMouseCursorPosition(true);
+        CGDisplayShowCursor(CGMainDisplayID());
+#endif
+        m_uiClient-&gt;didLosePointerLock(this);
+        m_process-&gt;send(Messages::WebPage::DidLosePointerLock(), m_pageID);
+    }
+
+    if (m_isPointerLockPending) {
+        m_uiClient-&gt;didLosePointerLock(this);
+        m_process-&gt;send(Messages::WebPage::DidNotAcquirePointerLock(), m_pageID);
+    }
+
+    m_isPointerLocked = false;
+    m_isPointerLockPending = false;
</ins><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -1945,6 +1945,11 @@
</span><span class="cx">     bool m_forceAlwaysUserScalable { false };
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+#if ENABLE(POINTER_LOCK)
+    bool m_isPointerLockPending { false };
+    bool m_isPointerLocked { false };
+#endif
+
</ins><span class="cx"> #if ENABLE(DOWNLOAD_ATTRIBUTE)
</span><span class="cx">     bool m_syncNavigationActionHasDownloadAttribute { false };
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -151,7 +151,6 @@
</span><span class="cx"> #include &lt;WebCore/PageConfiguration.h&gt;
</span><span class="cx"> #include &lt;WebCore/PlatformKeyboardEvent.h&gt;
</span><span class="cx"> #include &lt;WebCore/PluginDocument.h&gt;
</span><del>-#include &lt;WebCore/PointerLockController.h&gt;
</del><span class="cx"> #include &lt;WebCore/PrintContext.h&gt;
</span><span class="cx"> #include &lt;WebCore/Range.h&gt;
</span><span class="cx"> #include &lt;WebCore/RenderLayer.h&gt;
</span><span class="lines">@@ -199,6 +198,10 @@
</span><span class="cx"> #include &quot;WebVibrationClient.h&quot;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+#if ENABLE(POINTER_LOCK)
+#include &lt;WebCore/PointerLockController.h&gt;
+#endif
+
</ins><span class="cx"> #if ENABLE(PROXIMITY_EVENTS)
</span><span class="cx"> #include &quot;WebDeviceProximityClient.h&quot;
</span><span class="cx"> #endif
</span><span class="lines">@@ -3027,6 +3030,9 @@
</span><span class="cx"> #if ENABLE(ATTACHMENT_ELEMENT)
</span><span class="cx">     settings.setAttachmentElementEnabled(store.getBoolValueForKey(WebPreferencesKey::attachmentElementEnabledKey()));
</span><span class="cx"> #endif
</span><ins>+#if ENABLE(POINTER_LOCK)
+    settings.setPointerLockEnabled(store.getBoolValueForKey(WebPreferencesKey::pointerLockEnabledKey()));
+#endif
</ins><span class="cx">     settings.setAllowsPictureInPictureMediaPlayback(store.getBoolValueForKey(WebPreferencesKey::allowsPictureInPictureMediaPlaybackKey()));
</span><span class="cx">     settings.setMediaControlsScaleWithPageZoom(store.getBoolValueForKey(WebPreferencesKey::mediaControlsScaleWithPageZoomKey()));
</span><span class="cx">     settings.setMockScrollbarsEnabled(store.getBoolValueForKey(WebPreferencesKey::mockScrollbarsEnabledKey()));
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPIConfigurationsFeatureDefinesxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig (208902 => 208903)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig        2016-11-18 22:47:24 UTC (rev 208902)
+++ trunk/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig        2016-11-18 23:33:05 UTC (rev 208903)
</span><span class="lines">@@ -150,7 +150,7 @@
</span><span class="cx"> ENABLE_NOSNIFF = ;
</span><span class="cx"> ENABLE_NOTIFICATIONS[sdk=macosx*] = ENABLE_NOTIFICATIONS;
</span><span class="cx"> ENABLE_PDFKIT_PLUGIN[sdk=macosx*] = ENABLE_PDFKIT_PLUGIN;
</span><del>-ENABLE_POINTER_LOCK = ;
</del><ins>+ENABLE_POINTER_LOCK[sdk=macosx*] = ENABLE_POINTER_LOCK;
</ins><span class="cx"> ENABLE_PROXIMITY_EVENTS = ;
</span><span class="cx"> ENABLE_PUBLIC_SUFFIX_LIST = ENABLE_PUBLIC_SUFFIX_LIST;
</span><span class="cx"> ENABLE_QUOTA = ;
</span></span></pre>
</div>
</div>

</body>
</html>