Title: [196488] trunk/Source/WebKit2
Revision
196488
Author
[email protected]
Date
2016-02-12 11:28:29 -0800 (Fri, 12 Feb 2016)

Log Message

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.

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (196487 => 196488)


--- 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)
@@ -1,3 +1,83 @@
+2016-02-12  Brian Burg  <[email protected]>
+
+        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.
+
 2016-02-12  Anders Carlsson  <[email protected]>
 
         Get rid of NetscapePluginModule::createPluginMIMETypesPreferences

Modified: trunk/Source/WebKit2/Shared/API/APIObject.h (196487 => 196488)


--- 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)
@@ -98,6 +98,7 @@
         
         // UIProcess types
         ApplicationCacheManager,
+        AutomationSession,
         BackForwardList,
         BackForwardListItem,
         BatteryManager,

Modified: trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm (196487 => 196488)


--- 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)
@@ -61,6 +61,7 @@
 #import "WKWebsiteDataRecordInternal.h"
 #import "WKWebsiteDataStoreInternal.h"
 #import "WKWindowFeaturesInternal.h"
+#import "_WKAutomationSessionInternal.h"
 #import "_WKDownloadInternal.h"
 #import "_WKFrameHandleInternal.h"
 #import "_WKHitTestResultInternal.h"
@@ -99,6 +100,10 @@
         wrapper = NSAllocateObject([WKNSURLAuthenticationChallenge self], size, nullptr);
         break;
 
+    case Type::AutomationSession:
+        wrapper = [_WKAutomationSession alloc];
+        break;
+
     case Type::BackForwardList:
         wrapper = [WKBackForwardList alloc];
         break;

Added: trunk/Source/WebKit2/UIProcess/API/APIAutomationSessionClient.h (0 => 196488)


--- 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)
@@ -0,0 +1,48 @@
+/*
+ * 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 <wtf/text/WTFString.h>
+
+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
Property changes on: trunk/Source/WebKit2/UIProcess/API/APIAutomationSessionClient.h
___________________________________________________________________

Added: svn:eol-style

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm (196487 => 196488)


--- 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)
@@ -39,6 +39,7 @@
 #import "WebProcessMessages.h"
 #import "WebProcessPool.h"
 #import "_WKAutomationDelegate.h"
+#import "_WKAutomationSessionInternal.h"
 #import "_WKDownloadDelegate.h"
 #import "_WKProcessPoolConfigurationInternal.h"
 #import <WebCore/CFNetworkSPI.h>
@@ -54,6 +55,7 @@
     WebKit::WeakObjCPtr<id <_WKAutomationDelegate>> _automationDelegate;
     WebKit::WeakObjCPtr<id <_WKDownloadDelegate>> _downloadDelegate;
 
+    RetainPtr<_WKAutomationSession> _automationSession;
 #if PLATFORM(IOS)
     RetainPtr<WKGeolocationProviderIOS> _geolocationProvider;
 #endif // PLATFORM(IOS)
@@ -243,6 +245,12 @@
     _processPool->updateAutomationCapabilities();
 }
 
+- (void)_setAutomationSession:(_WKAutomationSession *)automationSession
+{
+    _automationSession = automationSession;
+    _processPool->setAutomationSession(automationSession ? automationSession->_session.get() : nullptr);
+}
+
 @end
 
 #endif // WK_API_ENABLED

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h (196487 => 196488)


--- 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)
@@ -27,6 +27,7 @@
 
 #if WK_API_ENABLED
 
+@class _WKAutomationSession;
 @class _WKProcessPoolConfiguration;
 @protocol _WKAutomationDelegate;
 @protocol _WKDownloadDelegate;
@@ -56,6 +57,7 @@
 
 - (void)_warmInitialProcess WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
 - (void)_automationCapabilitiesDidChange WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
+- (void)_setAutomationSession:(_WKAutomationSession *)automationSession WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
 
 @end
 

Added: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSession.h (0 => 196488)


--- 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)
@@ -0,0 +1,46 @@
+/*
+ * 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 <WebKit/WKFoundation.h>
+
+#if WK_API_ENABLED
+
+#import <Foundation/Foundation.h>
+
+@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 <_WKAutomationSessionDelegate> delegate;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif // WK_API_ENABLED
Property changes on: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSession.h
___________________________________________________________________

Added: svn:eol-style

Added: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSession.mm (0 => 196488)


--- 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)
@@ -0,0 +1,90 @@
+/*
+ * 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 "config.h"
+#import "_WKAutomationSessionInternal.h"
+
+#if WK_API_ENABLED
+
+#import "AutomationSessionClient.h"
+#import "WKAPICast.h"
+#import "WKProcessPool.h"
+#import "WeakObjCPtr.h"
+#import "WebAutomationSession.h"
+#import "_WKAutomationSessionDelegate.h"
+
+@implementation _WKAutomationSession {
+    WebKit::WeakObjCPtr<id <_WKAutomationSessionDelegate>> _delegate;
+}
+
+- (instancetype)init
+{
+    if (!(self = [super init]))
+        return nil;
+
+    API::Object::constructInWrapper<WebKit::WebAutomationSession>(self);
+
+    return self;
+}
+
+- (void)dealloc
+{
+    _session->setClient(nullptr);
+    _session->~WebAutomationSession();
+
+    [super dealloc];
+}
+
+- (id <_WKAutomationSessionDelegate>)delegate
+{
+    return _delegate.getAutoreleased();
+}
+
+- (void)setDelegate:(id <_WKAutomationSessionDelegate>)delegate
+{
+    _delegate = delegate;
+    _session->setClient(delegate ? std::make_unique<WebKit::AutomationSessionClient>(delegate) : nullptr);
+}
+
+- (NSString *)sessionIdentifier
+{
+    return _session->sessionIdentifier();
+}
+
+- (void)setSessionIdentifier:(NSString *)sessionIdentifier
+{
+    _session->setSessionIdentifier(sessionIdentifier);
+}
+
+#pragma mark WKObject protocol implementation
+
+- (API::Object&)_apiObject
+{
+    return *_session;
+}
+
+@end
+
+#endif // WK_API_ENABLED
Property changes on: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSession.mm
___________________________________________________________________

Added: svn:eol-style

Added: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h (0 => 196488)


--- 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)
@@ -0,0 +1,39 @@
+/*
+ * 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 <WebKit/WKFoundation.h>
+
+#if WK_API_ENABLED
+
+#import <Foundation/Foundation.h>
+
+@class _WKAutomationSession;
+
+@protocol _WKAutomationSessionDelegate <NSObject>
+@optional
+- (void)_automationSessionDidRequestNewWindow:(_WKAutomationSession *)automationSession;
+@end
+
+#endif // WK_API_ENABLED
Property changes on: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h
___________________________________________________________________

Added: svn:eol-style

Added: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSessionInternal.h (0 => 196488)


--- 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)
@@ -0,0 +1,45 @@
+/*
+ * 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 "_WKAutomationSession.h"
+
+#if WK_API_ENABLED
+
+#import "WKObject.h"
+#import "WebAutomationSession.h"
+
+inline _WKAutomationSession *wrapper(WebKit::WebAutomationSession& session)
+{
+    ASSERT([session.wrapper() isKindOfClass:[_WKAutomationSession class]]);
+    return (_WKAutomationSession *)session.wrapper();
+}
+
+@interface _WKAutomationSession () <WKObject> {
+@package
+    API::ObjectStorage<WebKit::WebAutomationSession> _session;
+}
+@end
+
+#endif // WK_API_ENABLED
Property changes on: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKAutomationSessionInternal.h
___________________________________________________________________

Added: svn:eol-style

Added: trunk/Source/WebKit2/UIProcess/Cocoa/AutomationSessionClient.h (0 => 196488)


--- 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)
@@ -0,0 +1,59 @@
+/*
+ * 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 "WKFoundation.h"
+
+#if WK_API_ENABLED
+
+#import "APIAutomationSessionClient.h"
+#import "WeakObjCPtr.h"
+
+@protocol _WKAutomationSessionDelegate;
+
+namespace WebKit {
+
+class AutomationSessionClient final : public API::AutomationSessionClient {
+public:
+    explicit AutomationSessionClient(id <_WKAutomationSessionDelegate>);
+
+private:
+    // From API::AutomationSessionClient
+    virtual void didRequestNewWindow(WebKit::WebProcessPool*, WebKit::WebAutomationSession*) override;
+
+    WeakObjCPtr<id <_WKAutomationSessionDelegate>> m_delegate;
+
+    struct {
+        bool didRequestNewWindow : 1;
+    } m_delegateMethods;
+};
+
+} // namespace WebKit
+
+#endif
+
+#endif // AutomationSessionClient_h
Property changes on: trunk/Source/WebKit2/UIProcess/Cocoa/AutomationSessionClient.h
___________________________________________________________________

Added: svn:eol-style

Added: trunk/Source/WebKit2/UIProcess/Cocoa/AutomationSessionClient.mm (0 => 196488)


--- 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)
@@ -0,0 +1,51 @@
+/*
+ * 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 "config.h"
+#import "AutomationSessionClient.h"
+
+#if WK_API_ENABLED
+
+#import "WebAutomationSession.h"
+#import "_WKAutomationSessionDelegate.h"
+#import "_WKAutomationSessionInternal.h"
+
+namespace WebKit {
+
+AutomationSessionClient::AutomationSessionClient(id <_WKAutomationSessionDelegate> 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
Property changes on: trunk/Source/WebKit2/UIProcess/Cocoa/AutomationSessionClient.mm
___________________________________________________________________

Added: svn:eol-style

Added: trunk/Source/WebKit2/UIProcess/WebAutomationSession.cpp (0 => 196488)


--- trunk/Source/WebKit2/UIProcess/WebAutomationSession.cpp	                        (rev 0)
+++ trunk/Source/WebKit2/UIProcess/WebAutomationSession.cpp	2016-02-12 19:28:29 UTC (rev 196488)
@@ -0,0 +1,76 @@
+/*
+ * 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 "config.h"
+#include "WebAutomationSession.h"
+
+#include "APIAutomationSessionClient.h"
+
+namespace WebKit {
+
+WebAutomationSession::WebAutomationSession()
+    : m_client(std::make_unique<API::AutomationSessionClient>())
+{
+}
+
+WebAutomationSession::~WebAutomationSession()
+{
+    ASSERT(!m_client);
+}
+
+void WebAutomationSession::setClient(std::unique_ptr<API::AutomationSessionClient> 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&)
+{
+    // 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
Property changes on: trunk/Source/WebKit2/UIProcess/WebAutomationSession.cpp
___________________________________________________________________

Added: svn:eol-style

Added: trunk/Source/WebKit2/UIProcess/WebAutomationSession.h (0 => 196488)


--- trunk/Source/WebKit2/UIProcess/WebAutomationSession.h	                        (rev 0)
+++ trunk/Source/WebKit2/UIProcess/WebAutomationSession.h	2016-02-12 19:28:29 UTC (rev 196488)
@@ -0,0 +1,77 @@
+/*
+ * 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 "APIObject.h"
+#include <wtf/Forward.h>
+
+#if ENABLE(REMOTE_INSPECTOR)
+#include <_javascript_Core/RemoteAutomationTarget.h>
+#endif
+
+namespace API {
+class AutomationSessionClient;
+}
+
+namespace WebKit {
+
+class WebAutomationSessionClient;
+
+class WebAutomationSession final : public API::ObjectImpl<API::Object::Type::AutomationSession>
+#if ENABLE(REMOTE_INSPECTOR)
+    , public Inspector::RemoteAutomationTarget
+#endif
+{
+public:
+    WebAutomationSession();
+    ~WebAutomationSession();
+
+    void setClient(std::unique_ptr<API::AutomationSessionClient>);
+
+    void setSessionIdentifier(const String& 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& message) override;
+    virtual void connect(Inspector::FrontendChannel*, bool isAutomaticConnection = false) override;
+    virtual void disconnect(Inspector::FrontendChannel*) override;
+#endif
+
+private:
+    std::unique_ptr<API::AutomationSessionClient> m_client;
+    String m_sessionIdentifier { ASCIILiteral("Untitled Session") };
+
+#if ENABLE(REMOTE_INSPECTOR)
+    Inspector::FrontendChannel* m_remoteChannel { nullptr };
+#endif
+};
+
+} // namespace WebKit
+
+#endif // WebAutomationSession_h
Property changes on: trunk/Source/WebKit2/UIProcess/WebAutomationSession.h
___________________________________________________________________

Added: svn:eol-style

Modified: trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp (196487 => 196488)


--- 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)
@@ -43,6 +43,7 @@
 #include "StatisticsData.h"
 #include "TextChecker.h"
 #include "WKContextPrivate.h"
+#include "WebAutomationSession.h"
 #include "WebCertificateInfo.h"
 #include "WebContextSupplement.h"
 #include "WebCookieManagerProxy.h"
@@ -1091,6 +1092,16 @@
 #endif
 }
 
+void WebProcessPool::setAutomationSession(RefPtr<WebAutomationSession>&& automationSession)
+{
+    m_automationSession = WTFMove(automationSession);
+
+#if ENABLE(REMOTE_INSPECTOR)
+    if (m_automationSession)
+        m_automationSession->init();
+#endif
+}
+
 void WebProcessPool::setHTTPPipeliningEnabled(bool enabled)
 {
 #if PLATFORM(COCOA)

Modified: trunk/Source/WebKit2/UIProcess/WebProcessPool.h (196487 => 196488)


--- 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)
@@ -79,6 +79,7 @@
 namespace WebKit {
 
 class DownloadProxy;
+class WebAutomationSession;
 class WebContextSupplement;
 class WebIconDatabase;
 class WebPageGroup;
@@ -254,6 +255,7 @@
     void enableProcessTermination();
 
     void updateAutomationCapabilities() const;
+    void setAutomationSession(RefPtr<WebAutomationSession>&&);
 
     // Defaults to false.
     void setHTTPPipeliningEnabled(bool);
@@ -426,6 +428,8 @@
     std::unique_ptr<API::DownloadClient> m_downloadClient;
     std::unique_ptr<API::LegacyContextHistoryClient> m_historyClient;
 
+    RefPtr<WebAutomationSession> m_automationSession;
+
 #if ENABLE(NETSCAPE_PLUGIN_API)
     PluginInfoStore m_pluginInfoStore;
 #endif

Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (196487 => 196488)


--- 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)
@@ -1233,6 +1233,15 @@
 		93A88B471BC8829700ABA5C2 /* APIHitTestResult.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93A88B421BC8828C00ABA5C2 /* APIHitTestResult.cpp */; };
 		93BDEB01171DD7AF00BFEE1B /* WKPageLoadTypesPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 93BDEB00171DD7AF00BFEE1B /* WKPageLoadTypesPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		93E6A4EE1BC5DD3900F8A0E7 /* _WKHitTestResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 93E6A4ED1BC5DD3900F8A0E7 /* _WKHitTestResult.h */; settings = {ATTRIBUTES = (Private, ); }; };
+		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 */; };
 		99C81D591C20E1E5005C4C82 /* AutomationClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = 99C81D561C20DFBE005C4C82 /* AutomationClient.mm */; };
 		99C81D5A1C20E7E2005C4C82 /* AutomationClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 99C81D551C20DFBE005C4C82 /* AutomationClient.h */; };
 		99C81D5D1C21F38B005C4C82 /* APIAutomationClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 99C81D5B1C20E817005C4C82 /* APIAutomationClient.h */; };
@@ -3265,6 +3274,15 @@
 		93A88B431BC8828C00ABA5C2 /* APIHitTestResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIHitTestResult.h; sourceTree = "<group>"; };
 		93BDEB00171DD7AF00BFEE1B /* WKPageLoadTypesPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKPageLoadTypesPrivate.h; sourceTree = "<group>"; };
 		93E6A4ED1BC5DD3900F8A0E7 /* _WKHitTestResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKHitTestResult.h; sourceTree = "<group>"; };
+		990D28A71C6404B000986977 /* _WKAutomationSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKAutomationSession.h; sourceTree = "<group>"; };
+		990D28AD1C65190400986977 /* _WKAutomationSession.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKAutomationSession.mm; sourceTree = "<group>"; };
+		990D28A81C6404B000986977 /* _WKAutomationSessionDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKAutomationSessionDelegate.h; sourceTree = "<group>"; };
+		990D28AF1C65203900986977 /* _WKAutomationSessionInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKAutomationSessionInternal.h; sourceTree = "<group>"; };
+		990D28B31C6526D400986977 /* APIAutomationSessionClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIAutomationSessionClient.h; sourceTree = "<group>"; };
+		990D28B51C6526F500986977 /* WebAutomationSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebAutomationSession.h; sourceTree = "<group>"; };
+		990D28B71C6539A000986977 /* AutomationSessionClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AutomationSessionClient.h; sourceTree = "<group>"; };
+		990D28B81C6539A000986977 /* AutomationSessionClient.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AutomationSessionClient.mm; sourceTree = "<group>"; };
+		990D28BD1C65490A00986977 /* WebAutomationSession.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebAutomationSession.cpp; sourceTree = "<group>"; };
 		99C81D551C20DFBE005C4C82 /* AutomationClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AutomationClient.h; sourceTree = "<group>"; };
 		99C81D561C20DFBE005C4C82 /* AutomationClient.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AutomationClient.mm; sourceTree = "<group>"; };
 		99C81D5B1C20E817005C4C82 /* APIAutomationClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIAutomationClient.h; sourceTree = "<group>"; };
@@ -4623,6 +4641,8 @@
 				517DD5BB180DA7C40081660B /* Databases */,
 				99C81D551C20DFBE005C4C82 /* AutomationClient.h */,
 				99C81D561C20DFBE005C4C82 /* AutomationClient.mm */,
+				990D28B71C6539A000986977 /* AutomationSessionClient.h */,
+				990D28B81C6539A000986977 /* AutomationSessionClient.mm */,
 				83891B6A1A68C30B0030F386 /* DiagnosticLoggingClient.h */,
 				83891B6B1A68C30B0030F386 /* DiagnosticLoggingClient.mm */,
 				A1DF631118E0B7C8003A3E2A /* DownloadClient.h */,
@@ -4987,6 +5007,10 @@
 				37A5E01118BBF937000A081E /* _WKActivatedElementInfo.mm */,
 				379A873518BBFA4300588AF2 /* _WKActivatedElementInfoInternal.h */,
 				99E714C11C1249E600665B3A /* _WKAutomationDelegate.h */,
+				990D28A71C6404B000986977 /* _WKAutomationSession.h */,
+				990D28AD1C65190400986977 /* _WKAutomationSession.mm */,
+				990D28A81C6404B000986977 /* _WKAutomationSessionDelegate.h */,
+				990D28AF1C65203900986977 /* _WKAutomationSessionInternal.h */,
 				1A5704F61BE01FF400874AF1 /* _WKContextMenuElementInfo.h */,
 				1A5704F51BE01FF400874AF1 /* _WKContextMenuElementInfo.mm */,
 				83891B681A68BEBC0030F386 /* _WKDiagnosticLoggingDelegate.h */,
@@ -5872,6 +5896,8 @@
 				1A0F29E1120B44420053D1B9 /* VisitedLinkStore.cpp */,
 				1A0F29E2120B44420053D1B9 /* VisitedLinkStore.h */,
 				1A60224918C16B0800C3E8C9 /* VisitedLinkStore.messages.in */,
+				990D28BD1C65490A00986977 /* WebAutomationSession.cpp */,
+				990D28B51C6526F500986977 /* WebAutomationSession.h */,
 				BC72BA1B11E64907001EB4EA /* WebBackForwardList.cpp */,
 				BC72BA1C11E64907001EB4EA /* WebBackForwardList.h */,
 				F036978715F4BF0500C3A80E /* WebColorPicker.cpp */,
@@ -5970,6 +5996,7 @@
 				BC8A501311765F4500757573 /* cpp */,
 				BC111B47112F616900337BAB /* mac */,
 				99C81D5B1C20E817005C4C82 /* APIAutomationClient.h */,
+				990D28B31C6526D400986977 /* APIAutomationSessionClient.h */,
 				076E884D1A13CADF005E90FC /* APIContextMenuClient.h */,
 				83891B621A68B3420030F386 /* APIDiagnosticLoggingClient.h */,
 				1F7D36C018DA513F00D9D659 /* APIDownloadClient.h */,
@@ -7181,6 +7208,7 @@
 				A1A4FE5C18DCE9FA00B5EA8A /* _WKDownloadInternal.h in Headers */,
 				379A873A18BBFE0F00588AF2 /* _WKElementAction.h in Headers */,
 				379A873C18BBFF0700588AF2 /* _WKElementActionInternal.h in Headers */,
+				990D28BB1C6539D300986977 /* AutomationSessionClient.h in Headers */,
 				1A5704F21BE0174000874AF1 /* _WKElementInfo.h in Headers */,
 				1AD01BC91905D37E00C9C45F /* _WKErrorRecoveryAttempting.h in Headers */,
 				005D158F18E4C4EB00734619 /* _WKFindDelegate.h in Headers */,
@@ -7257,6 +7285,7 @@
 				1AC1336C18565C7A00F3EC05 /* APIPageHandle.h in Headers */,
 				1AFDD3151891B54000153970 /* APIPolicyClient.h in Headers */,
 				7CE4D2201A4914CA00C7F152 /* APIProcessPoolConfiguration.h in Headers */,
+				990D28AC1C6420CF00986977 /* _WKAutomationSessionDelegate.h in Headers */,
 				F634445612A885C8000612D8 /* APISecurityOrigin.h in Headers */,
 				75A8D2E1187DEC1A00C39C9E /* APISession.h in Headers */,
 				1AFDE6621954E9B100C48FFA /* APISessionState.h in Headers */,
@@ -7373,6 +7402,7 @@
 				512935E41288D97800A4B695 /* InjectedBundlePageContextMenuClient.h in Headers */,
 				E1EE53E311F8CFC000CCBEE4 /* InjectedBundlePageEditorClient.h in Headers */,
 				BC14E10A120B905E00826C0C /* InjectedBundlePageFormClient.h in Headers */,
+				990D28C11C65626500986977 /* WebAutomationSession.h in Headers */,
 				CD5C66A1134B9D38004FE2A8 /* InjectedBundlePageFullScreenClient.h in Headers */,
 				BCA8C6A911E3BA5F00812FB7 /* InjectedBundlePageLoaderClient.h in Headers */,
 				BC8147A912F64CDA007B2C32 /* InjectedBundlePagePolicyClient.h in Headers */,
@@ -7406,6 +7436,7 @@
 				1ADCB86B189831B30022EE5A /* NavigationActionData.h in Headers */,
 				1ABC3DF61899E437004F0626 /* NavigationState.h in Headers */,
 				1A6FBA2A11E6862700DB1371 /* NetscapeBrowserFuncs.h in Headers */,
+				990D28AB1C6420C600986977 /* _WKAutomationSession.h in Headers */,
 				1A6FBD2811E69BC200DB1371 /* NetscapePlugin.h in Headers */,
 				1A4A9C5612B816CF008FE984 /* NetscapePluginModule.h in Headers */,
 				1AA5889211EE70400061B882 /* NetscapePluginStream.h in Headers */,
@@ -7632,6 +7663,7 @@
 				BC032DB910F4380F0058C15A /* WebEvent.h in Headers */,
 				BC032DBB10F4380F0058C15A /* WebEventConversion.h in Headers */,
 				BC111B5D112F629800337BAB /* WebEventFactory.h in Headers */,
+				990D28C01C6553F100986977 /* APIAutomationSessionClient.h in Headers */,
 				1A90C1EE1264FD50003E44D4 /* WebFindOptions.h in Headers */,
 				BCE469541214E6CB000B98EB /* WebFormClient.h in Headers */,
 				BCE469561214E6CB000B98EB /* WebFormSubmissionListenerProxy.h in Headers */,
@@ -7684,6 +7716,7 @@
 				2D3EF4431917646300034184 /* WebMemoryPressureHandlerIOS.h in Headers */,
 				909854ED12BC4E18000AD080 /* WebMemorySampler.h in Headers */,
 				BCF69F9A1176CED600471A52 /* WebNavigationDataStore.h in Headers */,
+				990D28B11C65208D00986977 /* _WKAutomationSessionInternal.h in Headers */,
 				7CCCC8FB1A5F50FD008FB0DA /* WebNavigationState.h in Headers */,
 				31A2EC49148997C200810D71 /* WebNotification.h in Headers */,
 				310999C7146C9E3D0029DEB9 /* WebNotificationClient.h in Headers */,
@@ -8871,6 +8904,7 @@
 				E489D28F1A0A2DB80078C06A /* NetworkCacheEncoder.cpp in Sources */,
 				E413F59F1AC1AF9D00345360 /* NetworkCacheEntry.cpp in Sources */,
 				E4697CCD1B25EB8F001B0A6C /* NetworkCacheFileSystem.cpp in Sources */,
+				990D28BC1C6539DA00986977 /* AutomationSessionClient.mm in Sources */,
 				E42E060F1AA7523400B11699 /* NetworkCacheIOChannelCocoa.mm in Sources */,
 				E4436ECD1A0D040B00EAD204 /* NetworkCacheKey.cpp in Sources */,
 				831EEBBE1BD85C4300BB64C3 /* NetworkCacheSpeculativeLoad.cpp in Sources */,
@@ -9341,6 +9375,7 @@
 				1A4D664B18A3030E00D82E21 /* WKFrameInfo.mm in Sources */,
 				2D3A65E61A7C3AA700CAC637 /* WKFrameInfoRef.cpp in Sources */,
 				BCB9F6A61123DD0D00A137E0 /* WKFramePolicyListener.cpp in Sources */,
+				990D28B21C65209400986977 /* _WKAutomationSession.mm in Sources */,
 				E1AEA23014687BDB00804569 /* WKFullKeyboardAccessWatcher.mm in Sources */,
 				CDCA85C8132ABA4E00E961DF /* WKFullScreenWindowController.mm in Sources */,
 				BC54CC1312D674EE005C67B0 /* WKGeolocationManager.cpp in Sources */,
@@ -9366,6 +9401,7 @@
 				C98C48A91B6FD5B500145103 /* WKMediaSessionFocusManager.cpp in Sources */,
 				C9CD439E1B4B025300239E33 /* WKMediaSessionMetadata.cpp in Sources */,
 				BC4075FD124FF0270068F20A /* WKMutableArray.cpp in Sources */,
+				990D28BF1C654D3900986977 /* WebAutomationSession.cpp in Sources */,
 				BC4075FF124FF0270068F20A /* WKMutableDictionary.cpp in Sources */,
 				1A5B1C501898606F004FCF9B /* WKNavigation.mm in Sources */,
 				1A256E3718A1A788006FB922 /* WKNavigationAction.mm in Sources */,
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to