<!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>[196488] trunk/Source/WebKit2</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/196488">196488</a></dd>
<dt>Author</dt> <dd>bburg@apple.com</dd>
<dt>Date</dt> <dd>2016-02-12 11:28:29 -0800 (Fri, 12 Feb 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Add a WebKit SPI for creating an automation session and advertise the active session via RemoteInspector
https://bugs.webkit.org/show_bug.cgi?id=153934

Reviewed by Dan Bernstein and Joseph Pecoraro.

An automation session is the main place where WebKit support for user agent automation is implemented.
A session encapsulates the state (default timeouts, page identifier mappings), objects (active automation
WebPages) and logic (how to open a window, run JS, send user input, etc.) used to implement automation
commands.

A process pool can only have one session at a time. The session is created by the WebKit client in
response to a request that comes through _WKAutomationDelegate. When a session is set on the process pool,
it is advertised to remote drivers and debuggers as a RemoteControllableTarget. A remote driver can use
the existing RemoteInspector API to connect to the session and send it automation commands.

The session has a delegate so that WebKit clients can perform actions that are outside the scope of WebKit,
such as creating new tabs, enumerating windows, or sending native user inputs.

This patch adds AutomationSession classes at the API and implementation level in WebKit2. The
implementation class contains RemoteInspector support, which cannot be used directly by WebKit clients.
AutomationSessionDelegate classes exist at both the API and implementation level to bridge between
Objective-C delegates and C++ clients. All code related to RemoteInspector and RemoteAutomationTarget
must be guarded by ENABLE(REMOTE_INSPECTOR).

* Shared/API/APIObject.h: Add new API type 'AutomationSession'.
* Shared/Cocoa/APIObject.mm:
(API::Object::newObject): Allocate in the wrapper.
* UIProcess/API/APIAutomationSessionClient.h: Added.
(API::AutomationSessionClient::~AutomationSessionClient):
(API::AutomationSessionClient::didRequestNewWindow): Delegate window creation to the client.
* UIProcess/API/Cocoa/WKProcessPool.mm:
(-[WKProcessPool _setAutomationSession:]): Keep at most one WebAutomationSession at a time.
* UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
* UIProcess/API/Cocoa/_WKAutomationSession.h: Added.
* UIProcess/API/Cocoa/_WKAutomationSession.mm: Added.
(-[_WKAutomationSession init]): Construct the API object in the implementation wrapper.
(-[_WKAutomationSession dealloc]): Clear the client before calling the implementation destructor.

(-[_WKAutomationSession sessionIdentifier]):
(-[_WKAutomationSession setSessionIdentifier:]):
Store the session identifier string in the implementation.

(-[_WKAutomationSession delegate]):
(-[_WKAutomationSession setDelegate:]):
Create an Objective-C adapter for the delegate if not nil and set it as the implementation's client.

(-[_WKAutomationSession _apiObject]):
* UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h: Added.
* UIProcess/API/Cocoa/_WKAutomationSessionInternal.h: Added.
(wrapper):
* UIProcess/Cocoa/AutomationSessionClient.h: Added.
Set up the boilerplate for caching delegate method availability. It will include more methods later.

* UIProcess/Cocoa/AutomationSessionClient.mm: Added. Forward requests to the SPI delegate.
(WebKit::AutomationSessionClient::AutomationSessionClient):
(WebKit::AutomationSessionClient::didRequestNewWindow): Delegate window creation to the client.

* UIProcess/WebAutomationSession.cpp: Added.
(WebKit::WebAutomationSession::WebAutomationSession):
By default, a session should be available and not paired to any particular remote driver.

(WebKit::WebAutomationSession::~WebAutomationSession): Require callers to clear the client first.
(WebKit::WebAutomationSession::setClient):
(WebKit::WebAutomationSession::dispatchMessageFromRemote): Stub this out for now.

(WebKit::WebAutomationSession::connect):
(WebKit::WebAutomationSession::disconnect):
To prevent multiple connection attempts, mark the target as paired when a remote client has connected.

* UIProcess/WebAutomationSession.h: Added.
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::setAutomationSession):
Store the session object and tell it to register itself. Unregistering happens automatically
in RemoteControllableTarget::~RemoteControllableTarget.

* UIProcess/WebProcessPool.h:
* WebKit2.xcodeproj/project.pbxproj: Add files and headers.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2SharedAPIAPIObjecth">trunk/Source/WebKit2/Shared/API/APIObject.h</a></li>
<li><a href="#trunkSourceWebKit2SharedCocoaAPIObjectmm">trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKProcessPoolmm">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKProcessPoolPrivateh">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebProcessPoolcpp">trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebProcessPoolh">trunk/Source/WebKit2/UIProcess/WebProcessPool.h</a></li>
<li><a href="#trunkSourceWebKit2WebKit2xcodeprojprojectpbxproj">trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2UIProcessAPIAPIAutomationSessionClienth">trunk/Source/WebKit2/UIProcess/API/APIAutomationSessionClient.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoa_WKAutomationSessionh">trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSession.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoa_WKAutomationSessionmm">trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSession.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoa_WKAutomationSessionDelegateh">trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoa_WKAutomationSessionInternalh">trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSessionInternal.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessCocoaAutomationSessionClienth">trunk/Source/WebKit2/UIProcess/Cocoa/AutomationSessionClient.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessCocoaAutomationSessionClientmm">trunk/Source/WebKit2/UIProcess/Cocoa/AutomationSessionClient.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebAutomationSessioncpp">trunk/Source/WebKit2/UIProcess/WebAutomationSession.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebAutomationSessionh">trunk/Source/WebKit2/UIProcess/WebAutomationSession.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (196487 => 196488)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-02-12 19:18:01 UTC (rev 196487)
+++ trunk/Source/WebKit2/ChangeLog        2016-02-12 19:28:29 UTC (rev 196488)
</span><span class="lines">@@ -1,3 +1,83 @@
</span><ins>+2016-02-12  Brian Burg  &lt;bburg@apple.com&gt;
+
+        Add a WebKit SPI for creating an automation session and advertise the active session via RemoteInspector
+        https://bugs.webkit.org/show_bug.cgi?id=153934
+
+        Reviewed by Dan Bernstein and Joseph Pecoraro.
+
+        An automation session is the main place where WebKit support for user agent automation is implemented.
+        A session encapsulates the state (default timeouts, page identifier mappings), objects (active automation
+        WebPages) and logic (how to open a window, run JS, send user input, etc.) used to implement automation
+        commands.
+
+        A process pool can only have one session at a time. The session is created by the WebKit client in
+        response to a request that comes through _WKAutomationDelegate. When a session is set on the process pool,
+        it is advertised to remote drivers and debuggers as a RemoteControllableTarget. A remote driver can use
+        the existing RemoteInspector API to connect to the session and send it automation commands.
+
+        The session has a delegate so that WebKit clients can perform actions that are outside the scope of WebKit,
+        such as creating new tabs, enumerating windows, or sending native user inputs.
+
+        This patch adds AutomationSession classes at the API and implementation level in WebKit2. The
+        implementation class contains RemoteInspector support, which cannot be used directly by WebKit clients.
+        AutomationSessionDelegate classes exist at both the API and implementation level to bridge between
+        Objective-C delegates and C++ clients. All code related to RemoteInspector and RemoteAutomationTarget
+        must be guarded by ENABLE(REMOTE_INSPECTOR).
+
+        * Shared/API/APIObject.h: Add new API type 'AutomationSession'.
+        * Shared/Cocoa/APIObject.mm:
+        (API::Object::newObject): Allocate in the wrapper.
+        * UIProcess/API/APIAutomationSessionClient.h: Added.
+        (API::AutomationSessionClient::~AutomationSessionClient):
+        (API::AutomationSessionClient::didRequestNewWindow): Delegate window creation to the client.
+        * UIProcess/API/Cocoa/WKProcessPool.mm:
+        (-[WKProcessPool _setAutomationSession:]): Keep at most one WebAutomationSession at a time.
+        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
+        * UIProcess/API/Cocoa/_WKAutomationSession.h: Added.
+        * UIProcess/API/Cocoa/_WKAutomationSession.mm: Added.
+        (-[_WKAutomationSession init]): Construct the API object in the implementation wrapper.
+        (-[_WKAutomationSession dealloc]): Clear the client before calling the implementation destructor.
+
+        (-[_WKAutomationSession sessionIdentifier]):
+        (-[_WKAutomationSession setSessionIdentifier:]):
+        Store the session identifier string in the implementation.
+
+        (-[_WKAutomationSession delegate]):
+        (-[_WKAutomationSession setDelegate:]):
+        Create an Objective-C adapter for the delegate if not nil and set it as the implementation's client.
+
+        (-[_WKAutomationSession _apiObject]):
+        * UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h: Added.
+        * UIProcess/API/Cocoa/_WKAutomationSessionInternal.h: Added.
+        (wrapper):
+        * UIProcess/Cocoa/AutomationSessionClient.h: Added.
+        Set up the boilerplate for caching delegate method availability. It will include more methods later.
+
+        * UIProcess/Cocoa/AutomationSessionClient.mm: Added. Forward requests to the SPI delegate.
+        (WebKit::AutomationSessionClient::AutomationSessionClient):
+        (WebKit::AutomationSessionClient::didRequestNewWindow): Delegate window creation to the client.
+
+        * UIProcess/WebAutomationSession.cpp: Added.
+        (WebKit::WebAutomationSession::WebAutomationSession):
+        By default, a session should be available and not paired to any particular remote driver.
+
+        (WebKit::WebAutomationSession::~WebAutomationSession): Require callers to clear the client first.
+        (WebKit::WebAutomationSession::setClient):
+        (WebKit::WebAutomationSession::dispatchMessageFromRemote): Stub this out for now.
+
+        (WebKit::WebAutomationSession::connect):
+        (WebKit::WebAutomationSession::disconnect):
+        To prevent multiple connection attempts, mark the target as paired when a remote client has connected.
+
+        * UIProcess/WebAutomationSession.h: Added.
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::WebProcessPool::setAutomationSession):
+        Store the session object and tell it to register itself. Unregistering happens automatically
+        in RemoteControllableTarget::~RemoteControllableTarget.
+
+        * UIProcess/WebProcessPool.h:
+        * WebKit2.xcodeproj/project.pbxproj: Add files and headers.
+
</ins><span class="cx"> 2016-02-12  Anders Carlsson  &lt;andersca@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Get rid of NetscapePluginModule::createPluginMIMETypesPreferences
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedAPIAPIObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/API/APIObject.h (196487 => 196488)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/API/APIObject.h        2016-02-12 19:18:01 UTC (rev 196487)
+++ trunk/Source/WebKit2/Shared/API/APIObject.h        2016-02-12 19:28:29 UTC (rev 196488)
</span><span class="lines">@@ -98,6 +98,7 @@
</span><span class="cx">         
</span><span class="cx">         // UIProcess types
</span><span class="cx">         ApplicationCacheManager,
</span><ins>+        AutomationSession,
</ins><span class="cx">         BackForwardList,
</span><span class="cx">         BackForwardListItem,
</span><span class="cx">         BatteryManager,
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedCocoaAPIObjectmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm (196487 => 196488)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm        2016-02-12 19:18:01 UTC (rev 196487)
+++ trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm        2016-02-12 19:28:29 UTC (rev 196488)
</span><span class="lines">@@ -61,6 +61,7 @@
</span><span class="cx"> #import &quot;WKWebsiteDataRecordInternal.h&quot;
</span><span class="cx"> #import &quot;WKWebsiteDataStoreInternal.h&quot;
</span><span class="cx"> #import &quot;WKWindowFeaturesInternal.h&quot;
</span><ins>+#import &quot;_WKAutomationSessionInternal.h&quot;
</ins><span class="cx"> #import &quot;_WKDownloadInternal.h&quot;
</span><span class="cx"> #import &quot;_WKFrameHandleInternal.h&quot;
</span><span class="cx"> #import &quot;_WKHitTestResultInternal.h&quot;
</span><span class="lines">@@ -99,6 +100,10 @@
</span><span class="cx">         wrapper = NSAllocateObject([WKNSURLAuthenticationChallenge self], size, nullptr);
</span><span class="cx">         break;
</span><span class="cx"> 
</span><ins>+    case Type::AutomationSession:
+        wrapper = [_WKAutomationSession alloc];
+        break;
+
</ins><span class="cx">     case Type::BackForwardList:
</span><span class="cx">         wrapper = [WKBackForwardList alloc];
</span><span class="cx">         break;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIAPIAutomationSessionClienth"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/UIProcess/API/APIAutomationSessionClient.h (0 => 196488)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/APIAutomationSessionClient.h                                (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/APIAutomationSessionClient.h        2016-02-12 19:28:29 UTC (rev 196488)
</span><span class="lines">@@ -0,0 +1,48 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef APIAutomationSessionClient_h
+#define APIAutomationSessionClient_h
+
+#include &lt;wtf/text/WTFString.h&gt;
+
+namespace WebKit {
+class WebAutomationSession;
+class WebProcessPool;
+}
+
+namespace API {
+
+class AutomationSessionClient {
+public:
+    virtual ~AutomationSessionClient() { }
+
+    virtual String sessionIdentifier() const { return String(); }
+    virtual void didRequestNewWindow(WebKit::WebProcessPool*, WebKit::WebAutomationSession*) { }
+};
+
+} // namespace API
+
+#endif // APIAutomationSessionClient_h
</ins><span class="cx">Property changes on: trunk/Source/WebKit2/UIProcess/API/APIAutomationSessionClient.h
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKProcessPoolmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm (196487 => 196488)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm        2016-02-12 19:18:01 UTC (rev 196487)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm        2016-02-12 19:28:29 UTC (rev 196488)
</span><span class="lines">@@ -39,6 +39,7 @@
</span><span class="cx"> #import &quot;WebProcessMessages.h&quot;
</span><span class="cx"> #import &quot;WebProcessPool.h&quot;
</span><span class="cx"> #import &quot;_WKAutomationDelegate.h&quot;
</span><ins>+#import &quot;_WKAutomationSessionInternal.h&quot;
</ins><span class="cx"> #import &quot;_WKDownloadDelegate.h&quot;
</span><span class="cx"> #import &quot;_WKProcessPoolConfigurationInternal.h&quot;
</span><span class="cx"> #import &lt;WebCore/CFNetworkSPI.h&gt;
</span><span class="lines">@@ -54,6 +55,7 @@
</span><span class="cx">     WebKit::WeakObjCPtr&lt;id &lt;_WKAutomationDelegate&gt;&gt; _automationDelegate;
</span><span class="cx">     WebKit::WeakObjCPtr&lt;id &lt;_WKDownloadDelegate&gt;&gt; _downloadDelegate;
</span><span class="cx"> 
</span><ins>+    RetainPtr&lt;_WKAutomationSession&gt; _automationSession;
</ins><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx">     RetainPtr&lt;WKGeolocationProviderIOS&gt; _geolocationProvider;
</span><span class="cx"> #endif // PLATFORM(IOS)
</span><span class="lines">@@ -243,6 +245,12 @@
</span><span class="cx">     _processPool-&gt;updateAutomationCapabilities();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+- (void)_setAutomationSession:(_WKAutomationSession *)automationSession
+{
+    _automationSession = automationSession;
+    _processPool-&gt;setAutomationSession(automationSession ? automationSession-&gt;_session.get() : nullptr);
+}
+
</ins><span class="cx"> @end
</span><span class="cx"> 
</span><span class="cx"> #endif // WK_API_ENABLED
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKProcessPoolPrivateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h (196487 => 196488)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h        2016-02-12 19:18:01 UTC (rev 196487)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h        2016-02-12 19:28:29 UTC (rev 196488)
</span><span class="lines">@@ -27,6 +27,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if WK_API_ENABLED
</span><span class="cx"> 
</span><ins>+@class _WKAutomationSession;
</ins><span class="cx"> @class _WKProcessPoolConfiguration;
</span><span class="cx"> @protocol _WKAutomationDelegate;
</span><span class="cx"> @protocol _WKDownloadDelegate;
</span><span class="lines">@@ -56,6 +57,7 @@
</span><span class="cx"> 
</span><span class="cx"> - (void)_warmInitialProcess WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
</span><span class="cx"> - (void)_automationCapabilitiesDidChange WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
</span><ins>+- (void)_setAutomationSession:(_WKAutomationSession *)automationSession WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
</ins><span class="cx"> 
</span><span class="cx"> @end
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoa_WKAutomationSessionh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSession.h (0 => 196488)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSession.h                                (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSession.h        2016-02-12 19:28:29 UTC (rev 196488)
</span><span class="lines">@@ -0,0 +1,46 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &lt;WebKit/WKFoundation.h&gt;
+
+#if WK_API_ENABLED
+
+#import &lt;Foundation/Foundation.h&gt;
+
+@protocol _WKAutomationSessionDelegate;
+
+NS_ASSUME_NONNULL_BEGIN
+
+WK_CLASS_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA)
+@interface _WKAutomationSession : NSObject
+
+@property (nonatomic, copy) NSString *sessionIdentifier;
+@property (nonatomic, weak) id &lt;_WKAutomationSessionDelegate&gt; delegate;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif // WK_API_ENABLED
</ins><span class="cx">Property changes on: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSession.h
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkSourceWebKit2UIProcessAPICocoa_WKAutomationSessionmm"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSession.mm (0 => 196488)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSession.mm                                (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSession.mm        2016-02-12 19:28:29 UTC (rev 196488)
</span><span class="lines">@@ -0,0 +1,90 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &quot;config.h&quot;
+#import &quot;_WKAutomationSessionInternal.h&quot;
+
+#if WK_API_ENABLED
+
+#import &quot;AutomationSessionClient.h&quot;
+#import &quot;WKAPICast.h&quot;
+#import &quot;WKProcessPool.h&quot;
+#import &quot;WeakObjCPtr.h&quot;
+#import &quot;WebAutomationSession.h&quot;
+#import &quot;_WKAutomationSessionDelegate.h&quot;
+
+@implementation _WKAutomationSession {
+    WebKit::WeakObjCPtr&lt;id &lt;_WKAutomationSessionDelegate&gt;&gt; _delegate;
+}
+
+- (instancetype)init
+{
+    if (!(self = [super init]))
+        return nil;
+
+    API::Object::constructInWrapper&lt;WebKit::WebAutomationSession&gt;(self);
+
+    return self;
+}
+
+- (void)dealloc
+{
+    _session-&gt;setClient(nullptr);
+    _session-&gt;~WebAutomationSession();
+
+    [super dealloc];
+}
+
+- (id &lt;_WKAutomationSessionDelegate&gt;)delegate
+{
+    return _delegate.getAutoreleased();
+}
+
+- (void)setDelegate:(id &lt;_WKAutomationSessionDelegate&gt;)delegate
+{
+    _delegate = delegate;
+    _session-&gt;setClient(delegate ? std::make_unique&lt;WebKit::AutomationSessionClient&gt;(delegate) : nullptr);
+}
+
+- (NSString *)sessionIdentifier
+{
+    return _session-&gt;sessionIdentifier();
+}
+
+- (void)setSessionIdentifier:(NSString *)sessionIdentifier
+{
+    _session-&gt;setSessionIdentifier(sessionIdentifier);
+}
+
+#pragma mark WKObject protocol implementation
+
+- (API::Object&amp;)_apiObject
+{
+    return *_session;
+}
+
+@end
+
+#endif // WK_API_ENABLED
</ins><span class="cx">Property changes on: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSession.mm
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkSourceWebKit2UIProcessAPICocoa_WKAutomationSessionDelegateh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h (0 => 196488)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h                                (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h        2016-02-12 19:28:29 UTC (rev 196488)
</span><span class="lines">@@ -0,0 +1,39 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &lt;WebKit/WKFoundation.h&gt;
+
+#if WK_API_ENABLED
+
+#import &lt;Foundation/Foundation.h&gt;
+
+@class _WKAutomationSession;
+
+@protocol _WKAutomationSessionDelegate &lt;NSObject&gt;
+@optional
+- (void)_automationSessionDidRequestNewWindow:(_WKAutomationSession *)automationSession;
+@end
+
+#endif // WK_API_ENABLED
</ins><span class="cx">Property changes on: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkSourceWebKit2UIProcessAPICocoa_WKAutomationSessionInternalh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSessionInternal.h (0 => 196488)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSessionInternal.h                                (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSessionInternal.h        2016-02-12 19:28:29 UTC (rev 196488)
</span><span class="lines">@@ -0,0 +1,45 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &quot;_WKAutomationSession.h&quot;
+
+#if WK_API_ENABLED
+
+#import &quot;WKObject.h&quot;
+#import &quot;WebAutomationSession.h&quot;
+
+inline _WKAutomationSession *wrapper(WebKit::WebAutomationSession&amp; session)
+{
+    ASSERT([session.wrapper() isKindOfClass:[_WKAutomationSession class]]);
+    return (_WKAutomationSession *)session.wrapper();
+}
+
+@interface _WKAutomationSession () &lt;WKObject&gt; {
+@package
+    API::ObjectStorage&lt;WebKit::WebAutomationSession&gt; _session;
+}
+@end
+
+#endif // WK_API_ENABLED
</ins><span class="cx">Property changes on: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSessionInternal.h
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkSourceWebKit2UIProcessCocoaAutomationSessionClienth"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/UIProcess/Cocoa/AutomationSessionClient.h (0 => 196488)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Cocoa/AutomationSessionClient.h                                (rev 0)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/AutomationSessionClient.h        2016-02-12 19:28:29 UTC (rev 196488)
</span><span class="lines">@@ -0,0 +1,59 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef AutomationSessionClient_h
+#define AutomationSessionClient_h
+
+#import &quot;WKFoundation.h&quot;
+
+#if WK_API_ENABLED
+
+#import &quot;APIAutomationSessionClient.h&quot;
+#import &quot;WeakObjCPtr.h&quot;
+
+@protocol _WKAutomationSessionDelegate;
+
+namespace WebKit {
+
+class AutomationSessionClient final : public API::AutomationSessionClient {
+public:
+    explicit AutomationSessionClient(id &lt;_WKAutomationSessionDelegate&gt;);
+
+private:
+    // From API::AutomationSessionClient
+    virtual void didRequestNewWindow(WebKit::WebProcessPool*, WebKit::WebAutomationSession*) override;
+
+    WeakObjCPtr&lt;id &lt;_WKAutomationSessionDelegate&gt;&gt; m_delegate;
+
+    struct {
+        bool didRequestNewWindow : 1;
+    } m_delegateMethods;
+};
+
+} // namespace WebKit
+
+#endif
+
+#endif // AutomationSessionClient_h
</ins><span class="cx">Property changes on: trunk/Source/WebKit2/UIProcess/Cocoa/AutomationSessionClient.h
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkSourceWebKit2UIProcessCocoaAutomationSessionClientmm"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/UIProcess/Cocoa/AutomationSessionClient.mm (0 => 196488)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Cocoa/AutomationSessionClient.mm                                (rev 0)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/AutomationSessionClient.mm        2016-02-12 19:28:29 UTC (rev 196488)
</span><span class="lines">@@ -0,0 +1,51 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &quot;config.h&quot;
+#import &quot;AutomationSessionClient.h&quot;
+
+#if WK_API_ENABLED
+
+#import &quot;WebAutomationSession.h&quot;
+#import &quot;_WKAutomationSessionDelegate.h&quot;
+#import &quot;_WKAutomationSessionInternal.h&quot;
+
+namespace WebKit {
+
+AutomationSessionClient::AutomationSessionClient(id &lt;_WKAutomationSessionDelegate&gt; delegate)
+    : m_delegate(delegate)
+{
+    m_delegateMethods.didRequestNewWindow = [delegate respondsToSelector:@selector(_automationSessionDidRequestNewWindow:)];
+}
+
+void AutomationSessionClient::didRequestNewWindow(WebProcessPool*, WebAutomationSession* session)
+{
+    if (m_delegateMethods.didRequestNewWindow)
+        [m_delegate.get() _automationSessionDidRequestNewWindow:wrapper(*session)];
+}
+
+} // namespace WebKit
+
+#endif // WK_API_ENABLED
</ins><span class="cx">Property changes on: trunk/Source/WebKit2/UIProcess/Cocoa/AutomationSessionClient.mm
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkSourceWebKit2UIProcessWebAutomationSessioncpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/UIProcess/WebAutomationSession.cpp (0 => 196488)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebAutomationSession.cpp                                (rev 0)
+++ trunk/Source/WebKit2/UIProcess/WebAutomationSession.cpp        2016-02-12 19:28:29 UTC (rev 196488)
</span><span class="lines">@@ -0,0 +1,76 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include &quot;config.h&quot;
+#include &quot;WebAutomationSession.h&quot;
+
+#include &quot;APIAutomationSessionClient.h&quot;
+
+namespace WebKit {
+
+WebAutomationSession::WebAutomationSession()
+    : m_client(std::make_unique&lt;API::AutomationSessionClient&gt;())
+{
+}
+
+WebAutomationSession::~WebAutomationSession()
+{
+    ASSERT(!m_client);
+}
+
+void WebAutomationSession::setClient(std::unique_ptr&lt;API::AutomationSessionClient&gt; client)
+{
+    m_client = WTFMove(client);
+}
+
+// NOTE: this class could be split at some point to support local and remote automation sessions.
+// For now, it only works with a remote automation driver over a RemoteInspector connection.
+
+#if ENABLE(REMOTE_INSPECTOR)
+
+// Inspector::RemoteAutomationTarget API
+
+void WebAutomationSession::dispatchMessageFromRemote(const String&amp;)
+{
+    // FIXME: to be implemented.
+}
+
+void WebAutomationSession::connect(Inspector::FrontendChannel* channel, bool isAutomaticConnection)
+{
+    UNUSED_PARAM(isAutomaticConnection);
+
+    m_remoteChannel = channel;
+    setIsPaired(true);
+}
+
+void WebAutomationSession::disconnect(Inspector::FrontendChannel* channel)
+{
+    m_remoteChannel = nullptr;
+    setIsPaired(false);
+}
+
+#endif // ENABLE(REMOTE_INSPECTOR)
+
+} // namespace WebKit
</ins><span class="cx">Property changes on: trunk/Source/WebKit2/UIProcess/WebAutomationSession.cpp
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkSourceWebKit2UIProcessWebAutomationSessionh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/UIProcess/WebAutomationSession.h (0 => 196488)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebAutomationSession.h                                (rev 0)
+++ trunk/Source/WebKit2/UIProcess/WebAutomationSession.h        2016-02-12 19:28:29 UTC (rev 196488)
</span><span class="lines">@@ -0,0 +1,77 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebAutomationSession_h
+#define WebAutomationSession_h
+
+#include &quot;APIObject.h&quot;
+#include &lt;wtf/Forward.h&gt;
+
+#if ENABLE(REMOTE_INSPECTOR)
+#include &lt;JavaScriptCore/RemoteAutomationTarget.h&gt;
+#endif
+
+namespace API {
+class AutomationSessionClient;
+}
+
+namespace WebKit {
+
+class WebAutomationSessionClient;
+
+class WebAutomationSession final : public API::ObjectImpl&lt;API::Object::Type::AutomationSession&gt;
+#if ENABLE(REMOTE_INSPECTOR)
+    , public Inspector::RemoteAutomationTarget
+#endif
+{
+public:
+    WebAutomationSession();
+    ~WebAutomationSession();
+
+    void setClient(std::unique_ptr&lt;API::AutomationSessionClient&gt;);
+
+    void setSessionIdentifier(const String&amp; sessionIdentifier) { m_sessionIdentifier = sessionIdentifier; }
+    String sessionIdentifier() const { return m_sessionIdentifier; }
+
+#if ENABLE(REMOTE_INSPECTOR)
+    // Inspector::RemoteAutomationTarget API
+    virtual String name() const override { return m_sessionIdentifier; }
+    virtual void dispatchMessageFromRemote(const String&amp; message) override;
+    virtual void connect(Inspector::FrontendChannel*, bool isAutomaticConnection = false) override;
+    virtual void disconnect(Inspector::FrontendChannel*) override;
+#endif
+
+private:
+    std::unique_ptr&lt;API::AutomationSessionClient&gt; m_client;
+    String m_sessionIdentifier { ASCIILiteral(&quot;Untitled Session&quot;) };
+
+#if ENABLE(REMOTE_INSPECTOR)
+    Inspector::FrontendChannel* m_remoteChannel { nullptr };
+#endif
+};
+
+} // namespace WebKit
+
+#endif // WebAutomationSession_h
</ins><span class="cx">Property changes on: trunk/Source/WebKit2/UIProcess/WebAutomationSession.h
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkSourceWebKit2UIProcessWebProcessPoolcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp (196487 => 196488)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp        2016-02-12 19:18:01 UTC (rev 196487)
+++ trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp        2016-02-12 19:28:29 UTC (rev 196488)
</span><span class="lines">@@ -43,6 +43,7 @@
</span><span class="cx"> #include &quot;StatisticsData.h&quot;
</span><span class="cx"> #include &quot;TextChecker.h&quot;
</span><span class="cx"> #include &quot;WKContextPrivate.h&quot;
</span><ins>+#include &quot;WebAutomationSession.h&quot;
</ins><span class="cx"> #include &quot;WebCertificateInfo.h&quot;
</span><span class="cx"> #include &quot;WebContextSupplement.h&quot;
</span><span class="cx"> #include &quot;WebCookieManagerProxy.h&quot;
</span><span class="lines">@@ -1091,6 +1092,16 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WebProcessPool::setAutomationSession(RefPtr&lt;WebAutomationSession&gt;&amp;&amp; automationSession)
+{
+    m_automationSession = WTFMove(automationSession);
+
+#if ENABLE(REMOTE_INSPECTOR)
+    if (m_automationSession)
+        m_automationSession-&gt;init();
+#endif
+}
+
</ins><span class="cx"> void WebProcessPool::setHTTPPipeliningEnabled(bool enabled)
</span><span class="cx"> {
</span><span class="cx"> #if PLATFORM(COCOA)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebProcessPoolh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebProcessPool.h (196487 => 196488)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebProcessPool.h        2016-02-12 19:18:01 UTC (rev 196487)
+++ trunk/Source/WebKit2/UIProcess/WebProcessPool.h        2016-02-12 19:28:29 UTC (rev 196488)
</span><span class="lines">@@ -79,6 +79,7 @@
</span><span class="cx"> namespace WebKit {
</span><span class="cx"> 
</span><span class="cx"> class DownloadProxy;
</span><ins>+class WebAutomationSession;
</ins><span class="cx"> class WebContextSupplement;
</span><span class="cx"> class WebIconDatabase;
</span><span class="cx"> class WebPageGroup;
</span><span class="lines">@@ -254,6 +255,7 @@
</span><span class="cx">     void enableProcessTermination();
</span><span class="cx"> 
</span><span class="cx">     void updateAutomationCapabilities() const;
</span><ins>+    void setAutomationSession(RefPtr&lt;WebAutomationSession&gt;&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx">     // Defaults to false.
</span><span class="cx">     void setHTTPPipeliningEnabled(bool);
</span><span class="lines">@@ -426,6 +428,8 @@
</span><span class="cx">     std::unique_ptr&lt;API::DownloadClient&gt; m_downloadClient;
</span><span class="cx">     std::unique_ptr&lt;API::LegacyContextHistoryClient&gt; m_historyClient;
</span><span class="cx"> 
</span><ins>+    RefPtr&lt;WebAutomationSession&gt; m_automationSession;
+
</ins><span class="cx"> #if ENABLE(NETSCAPE_PLUGIN_API)
</span><span class="cx">     PluginInfoStore m_pluginInfoStore;
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebKit2WebKit2xcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (196487 => 196488)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj        2016-02-12 19:18:01 UTC (rev 196487)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj        2016-02-12 19:28:29 UTC (rev 196488)
</span><span class="lines">@@ -1233,6 +1233,15 @@
</span><span class="cx">                 93A88B471BC8829700ABA5C2 /* APIHitTestResult.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93A88B421BC8828C00ABA5C2 /* APIHitTestResult.cpp */; };
</span><span class="cx">                 93BDEB01171DD7AF00BFEE1B /* WKPageLoadTypesPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 93BDEB00171DD7AF00BFEE1B /* WKPageLoadTypesPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 93E6A4EE1BC5DD3900F8A0E7 /* _WKHitTestResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 93E6A4ED1BC5DD3900F8A0E7 /* _WKHitTestResult.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><ins>+                990D28AB1C6420C600986977 /* _WKAutomationSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 990D28A71C6404B000986977 /* _WKAutomationSession.h */; settings = {ATTRIBUTES = (Private, ); }; };
+                990D28AC1C6420CF00986977 /* _WKAutomationSessionDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 990D28A81C6404B000986977 /* _WKAutomationSessionDelegate.h */; settings = {ATTRIBUTES = (Private, ); }; };
+                990D28B11C65208D00986977 /* _WKAutomationSessionInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 990D28AF1C65203900986977 /* _WKAutomationSessionInternal.h */; };
+                990D28B21C65209400986977 /* _WKAutomationSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = 990D28AD1C65190400986977 /* _WKAutomationSession.mm */; };
+                990D28BB1C6539D300986977 /* AutomationSessionClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 990D28B71C6539A000986977 /* AutomationSessionClient.h */; };
+                990D28BC1C6539DA00986977 /* AutomationSessionClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = 990D28B81C6539A000986977 /* AutomationSessionClient.mm */; };
+                990D28BF1C654D3900986977 /* WebAutomationSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 990D28BD1C65490A00986977 /* WebAutomationSession.cpp */; };
+                990D28C01C6553F100986977 /* APIAutomationSessionClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 990D28B31C6526D400986977 /* APIAutomationSessionClient.h */; };
+                990D28C11C65626500986977 /* WebAutomationSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 990D28B51C6526F500986977 /* WebAutomationSession.h */; };
</ins><span class="cx">                 99C81D591C20E1E5005C4C82 /* AutomationClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = 99C81D561C20DFBE005C4C82 /* AutomationClient.mm */; };
</span><span class="cx">                 99C81D5A1C20E7E2005C4C82 /* AutomationClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 99C81D551C20DFBE005C4C82 /* AutomationClient.h */; };
</span><span class="cx">                 99C81D5D1C21F38B005C4C82 /* APIAutomationClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 99C81D5B1C20E817005C4C82 /* APIAutomationClient.h */; };
</span><span class="lines">@@ -3265,6 +3274,15 @@
</span><span class="cx">                 93A88B431BC8828C00ABA5C2 /* APIHitTestResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIHitTestResult.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 93BDEB00171DD7AF00BFEE1B /* WKPageLoadTypesPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKPageLoadTypesPrivate.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 93E6A4ED1BC5DD3900F8A0E7 /* _WKHitTestResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKHitTestResult.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                990D28A71C6404B000986977 /* _WKAutomationSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKAutomationSession.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                990D28AD1C65190400986977 /* _WKAutomationSession.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKAutomationSession.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
+                990D28A81C6404B000986977 /* _WKAutomationSessionDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKAutomationSessionDelegate.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                990D28AF1C65203900986977 /* _WKAutomationSessionInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKAutomationSessionInternal.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                990D28B31C6526D400986977 /* APIAutomationSessionClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIAutomationSessionClient.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                990D28B51C6526F500986977 /* WebAutomationSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebAutomationSession.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                990D28B71C6539A000986977 /* AutomationSessionClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AutomationSessionClient.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                990D28B81C6539A000986977 /* AutomationSessionClient.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AutomationSessionClient.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
+                990D28BD1C65490A00986977 /* WebAutomationSession.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebAutomationSession.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 99C81D551C20DFBE005C4C82 /* AutomationClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AutomationClient.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 99C81D561C20DFBE005C4C82 /* AutomationClient.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AutomationClient.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 99C81D5B1C20E817005C4C82 /* APIAutomationClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIAutomationClient.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -4623,6 +4641,8 @@
</span><span class="cx">                                 517DD5BB180DA7C40081660B /* Databases */,
</span><span class="cx">                                 99C81D551C20DFBE005C4C82 /* AutomationClient.h */,
</span><span class="cx">                                 99C81D561C20DFBE005C4C82 /* AutomationClient.mm */,
</span><ins>+                                990D28B71C6539A000986977 /* AutomationSessionClient.h */,
+                                990D28B81C6539A000986977 /* AutomationSessionClient.mm */,
</ins><span class="cx">                                 83891B6A1A68C30B0030F386 /* DiagnosticLoggingClient.h */,
</span><span class="cx">                                 83891B6B1A68C30B0030F386 /* DiagnosticLoggingClient.mm */,
</span><span class="cx">                                 A1DF631118E0B7C8003A3E2A /* DownloadClient.h */,
</span><span class="lines">@@ -4987,6 +5007,10 @@
</span><span class="cx">                                 37A5E01118BBF937000A081E /* _WKActivatedElementInfo.mm */,
</span><span class="cx">                                 379A873518BBFA4300588AF2 /* _WKActivatedElementInfoInternal.h */,
</span><span class="cx">                                 99E714C11C1249E600665B3A /* _WKAutomationDelegate.h */,
</span><ins>+                                990D28A71C6404B000986977 /* _WKAutomationSession.h */,
+                                990D28AD1C65190400986977 /* _WKAutomationSession.mm */,
+                                990D28A81C6404B000986977 /* _WKAutomationSessionDelegate.h */,
+                                990D28AF1C65203900986977 /* _WKAutomationSessionInternal.h */,
</ins><span class="cx">                                 1A5704F61BE01FF400874AF1 /* _WKContextMenuElementInfo.h */,
</span><span class="cx">                                 1A5704F51BE01FF400874AF1 /* _WKContextMenuElementInfo.mm */,
</span><span class="cx">                                 83891B681A68BEBC0030F386 /* _WKDiagnosticLoggingDelegate.h */,
</span><span class="lines">@@ -5872,6 +5896,8 @@
</span><span class="cx">                                 1A0F29E1120B44420053D1B9 /* VisitedLinkStore.cpp */,
</span><span class="cx">                                 1A0F29E2120B44420053D1B9 /* VisitedLinkStore.h */,
</span><span class="cx">                                 1A60224918C16B0800C3E8C9 /* VisitedLinkStore.messages.in */,
</span><ins>+                                990D28BD1C65490A00986977 /* WebAutomationSession.cpp */,
+                                990D28B51C6526F500986977 /* WebAutomationSession.h */,
</ins><span class="cx">                                 BC72BA1B11E64907001EB4EA /* WebBackForwardList.cpp */,
</span><span class="cx">                                 BC72BA1C11E64907001EB4EA /* WebBackForwardList.h */,
</span><span class="cx">                                 F036978715F4BF0500C3A80E /* WebColorPicker.cpp */,
</span><span class="lines">@@ -5970,6 +5996,7 @@
</span><span class="cx">                                 BC8A501311765F4500757573 /* cpp */,
</span><span class="cx">                                 BC111B47112F616900337BAB /* mac */,
</span><span class="cx">                                 99C81D5B1C20E817005C4C82 /* APIAutomationClient.h */,
</span><ins>+                                990D28B31C6526D400986977 /* APIAutomationSessionClient.h */,
</ins><span class="cx">                                 076E884D1A13CADF005E90FC /* APIContextMenuClient.h */,
</span><span class="cx">                                 83891B621A68B3420030F386 /* APIDiagnosticLoggingClient.h */,
</span><span class="cx">                                 1F7D36C018DA513F00D9D659 /* APIDownloadClient.h */,
</span><span class="lines">@@ -7181,6 +7208,7 @@
</span><span class="cx">                                 A1A4FE5C18DCE9FA00B5EA8A /* _WKDownloadInternal.h in Headers */,
</span><span class="cx">                                 379A873A18BBFE0F00588AF2 /* _WKElementAction.h in Headers */,
</span><span class="cx">                                 379A873C18BBFF0700588AF2 /* _WKElementActionInternal.h in Headers */,
</span><ins>+                                990D28BB1C6539D300986977 /* AutomationSessionClient.h in Headers */,
</ins><span class="cx">                                 1A5704F21BE0174000874AF1 /* _WKElementInfo.h in Headers */,
</span><span class="cx">                                 1AD01BC91905D37E00C9C45F /* _WKErrorRecoveryAttempting.h in Headers */,
</span><span class="cx">                                 005D158F18E4C4EB00734619 /* _WKFindDelegate.h in Headers */,
</span><span class="lines">@@ -7257,6 +7285,7 @@
</span><span class="cx">                                 1AC1336C18565C7A00F3EC05 /* APIPageHandle.h in Headers */,
</span><span class="cx">                                 1AFDD3151891B54000153970 /* APIPolicyClient.h in Headers */,
</span><span class="cx">                                 7CE4D2201A4914CA00C7F152 /* APIProcessPoolConfiguration.h in Headers */,
</span><ins>+                                990D28AC1C6420CF00986977 /* _WKAutomationSessionDelegate.h in Headers */,
</ins><span class="cx">                                 F634445612A885C8000612D8 /* APISecurityOrigin.h in Headers */,
</span><span class="cx">                                 75A8D2E1187DEC1A00C39C9E /* APISession.h in Headers */,
</span><span class="cx">                                 1AFDE6621954E9B100C48FFA /* APISessionState.h in Headers */,
</span><span class="lines">@@ -7373,6 +7402,7 @@
</span><span class="cx">                                 512935E41288D97800A4B695 /* InjectedBundlePageContextMenuClient.h in Headers */,
</span><span class="cx">                                 E1EE53E311F8CFC000CCBEE4 /* InjectedBundlePageEditorClient.h in Headers */,
</span><span class="cx">                                 BC14E10A120B905E00826C0C /* InjectedBundlePageFormClient.h in Headers */,
</span><ins>+                                990D28C11C65626500986977 /* WebAutomationSession.h in Headers */,
</ins><span class="cx">                                 CD5C66A1134B9D38004FE2A8 /* InjectedBundlePageFullScreenClient.h in Headers */,
</span><span class="cx">                                 BCA8C6A911E3BA5F00812FB7 /* InjectedBundlePageLoaderClient.h in Headers */,
</span><span class="cx">                                 BC8147A912F64CDA007B2C32 /* InjectedBundlePagePolicyClient.h in Headers */,
</span><span class="lines">@@ -7406,6 +7436,7 @@
</span><span class="cx">                                 1ADCB86B189831B30022EE5A /* NavigationActionData.h in Headers */,
</span><span class="cx">                                 1ABC3DF61899E437004F0626 /* NavigationState.h in Headers */,
</span><span class="cx">                                 1A6FBA2A11E6862700DB1371 /* NetscapeBrowserFuncs.h in Headers */,
</span><ins>+                                990D28AB1C6420C600986977 /* _WKAutomationSession.h in Headers */,
</ins><span class="cx">                                 1A6FBD2811E69BC200DB1371 /* NetscapePlugin.h in Headers */,
</span><span class="cx">                                 1A4A9C5612B816CF008FE984 /* NetscapePluginModule.h in Headers */,
</span><span class="cx">                                 1AA5889211EE70400061B882 /* NetscapePluginStream.h in Headers */,
</span><span class="lines">@@ -7632,6 +7663,7 @@
</span><span class="cx">                                 BC032DB910F4380F0058C15A /* WebEvent.h in Headers */,
</span><span class="cx">                                 BC032DBB10F4380F0058C15A /* WebEventConversion.h in Headers */,
</span><span class="cx">                                 BC111B5D112F629800337BAB /* WebEventFactory.h in Headers */,
</span><ins>+                                990D28C01C6553F100986977 /* APIAutomationSessionClient.h in Headers */,
</ins><span class="cx">                                 1A90C1EE1264FD50003E44D4 /* WebFindOptions.h in Headers */,
</span><span class="cx">                                 BCE469541214E6CB000B98EB /* WebFormClient.h in Headers */,
</span><span class="cx">                                 BCE469561214E6CB000B98EB /* WebFormSubmissionListenerProxy.h in Headers */,
</span><span class="lines">@@ -7684,6 +7716,7 @@
</span><span class="cx">                                 2D3EF4431917646300034184 /* WebMemoryPressureHandlerIOS.h in Headers */,
</span><span class="cx">                                 909854ED12BC4E18000AD080 /* WebMemorySampler.h in Headers */,
</span><span class="cx">                                 BCF69F9A1176CED600471A52 /* WebNavigationDataStore.h in Headers */,
</span><ins>+                                990D28B11C65208D00986977 /* _WKAutomationSessionInternal.h in Headers */,
</ins><span class="cx">                                 7CCCC8FB1A5F50FD008FB0DA /* WebNavigationState.h in Headers */,
</span><span class="cx">                                 31A2EC49148997C200810D71 /* WebNotification.h in Headers */,
</span><span class="cx">                                 310999C7146C9E3D0029DEB9 /* WebNotificationClient.h in Headers */,
</span><span class="lines">@@ -8871,6 +8904,7 @@
</span><span class="cx">                                 E489D28F1A0A2DB80078C06A /* NetworkCacheEncoder.cpp in Sources */,
</span><span class="cx">                                 E413F59F1AC1AF9D00345360 /* NetworkCacheEntry.cpp in Sources */,
</span><span class="cx">                                 E4697CCD1B25EB8F001B0A6C /* NetworkCacheFileSystem.cpp in Sources */,
</span><ins>+                                990D28BC1C6539DA00986977 /* AutomationSessionClient.mm in Sources */,
</ins><span class="cx">                                 E42E060F1AA7523400B11699 /* NetworkCacheIOChannelCocoa.mm in Sources */,
</span><span class="cx">                                 E4436ECD1A0D040B00EAD204 /* NetworkCacheKey.cpp in Sources */,
</span><span class="cx">                                 831EEBBE1BD85C4300BB64C3 /* NetworkCacheSpeculativeLoad.cpp in Sources */,
</span><span class="lines">@@ -9341,6 +9375,7 @@
</span><span class="cx">                                 1A4D664B18A3030E00D82E21 /* WKFrameInfo.mm in Sources */,
</span><span class="cx">                                 2D3A65E61A7C3AA700CAC637 /* WKFrameInfoRef.cpp in Sources */,
</span><span class="cx">                                 BCB9F6A61123DD0D00A137E0 /* WKFramePolicyListener.cpp in Sources */,
</span><ins>+                                990D28B21C65209400986977 /* _WKAutomationSession.mm in Sources */,
</ins><span class="cx">                                 E1AEA23014687BDB00804569 /* WKFullKeyboardAccessWatcher.mm in Sources */,
</span><span class="cx">                                 CDCA85C8132ABA4E00E961DF /* WKFullScreenWindowController.mm in Sources */,
</span><span class="cx">                                 BC54CC1312D674EE005C67B0 /* WKGeolocationManager.cpp in Sources */,
</span><span class="lines">@@ -9366,6 +9401,7 @@
</span><span class="cx">                                 C98C48A91B6FD5B500145103 /* WKMediaSessionFocusManager.cpp in Sources */,
</span><span class="cx">                                 C9CD439E1B4B025300239E33 /* WKMediaSessionMetadata.cpp in Sources */,
</span><span class="cx">                                 BC4075FD124FF0270068F20A /* WKMutableArray.cpp in Sources */,
</span><ins>+                                990D28BF1C654D3900986977 /* WebAutomationSession.cpp in Sources */,
</ins><span class="cx">                                 BC4075FF124FF0270068F20A /* WKMutableDictionary.cpp in Sources */,
</span><span class="cx">                                 1A5B1C501898606F004FCF9B /* WKNavigation.mm in Sources */,
</span><span class="cx">                                 1A256E3718A1A788006FB922 /* WKNavigationAction.mm in Sources */,
</span></span></pre>
</div>
</div>

</body>
</html>