Title: [219874] trunk/Source
Revision
219874
Author
bb...@apple.com
Date
2017-07-25 11:03:02 -0700 (Tue, 25 Jul 2017)

Log Message

Web Automation: add support for uploading files
https://bugs.webkit.org/show_bug.cgi?id=174797
<rdar://problem/28485063>

Reviewed by Joseph Pecoraro.

Source/_javascript_Core:

* inspector/scripts/generate-inspector-protocol-bindings.py:
(generate_from_specification):
Start generating frontend dispatcher code if the target framework is 'WebKit'.

* inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py:
(CppFrontendDispatcherImplementationGenerator.generate_output):
Use a framework include for InspectorFrontendRouter.h since this generated code
will be compiled outside of WebCore.framework.

* inspector/scripts/tests/all/expected/definitions-with-mac-platform.json-result:
* inspector/scripts/tests/generic/expected/commands-with-async-attribute.json-result:
* inspector/scripts/tests/generic/expected/commands-with-optional-call-return-parameters.json-result:
* inspector/scripts/tests/generic/expected/definitions-with-mac-platform.json-result:
* inspector/scripts/tests/generic/expected/domain-availability.json-result:
* inspector/scripts/tests/generic/expected/domains-with-varying-command-sizes.json-result:
* inspector/scripts/tests/generic/expected/enum-values.json-result:
* inspector/scripts/tests/generic/expected/events-with-optional-parameters.json-result:
* inspector/scripts/tests/generic/expected/generate-domains-with-feature-guards.json-result:
* inspector/scripts/tests/generic/expected/same-type-id-different-domain.json-result:
* inspector/scripts/tests/generic/expected/shadowed-optional-type-setters.json-result:
* inspector/scripts/tests/generic/expected/type-declaration-aliased-primitive-type.json-result:
* inspector/scripts/tests/generic/expected/type-declaration-array-type.json-result:
* inspector/scripts/tests/generic/expected/type-declaration-enum-type.json-result:
* inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result:
* inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result:
* inspector/scripts/tests/generic/expected/type-with-open-parameters.json-result:
* inspector/scripts/tests/generic/expected/worker-supported-domains.json-result:
* inspector/scripts/tests/ios/expected/definitions-with-mac-platform.json-result:
* inspector/scripts/tests/mac/expected/definitions-with-mac-platform.json-result:
Rebaseline code generator tests.

Source/WebKit:

The general strategy is to have automation clients set the list of files they want
to select ahead of time. Then, the client simulates a click on the <input type="file"> element.
When that causes WebPageProxy to ask the UI delegate to runOpenPanel, it instead
gives WebAutomationSession a chance to select files if the page is under control of
automation. WebAutomationSession validates its file list and selects the files if valid.

* CMakeLists.txt: Add frontend dispatcher files.
* DerivedSources.make:
Add frontend dispatcher code generator scripts as dependencies of the generated code.
Add generated frontend dispatcher files to the list of output files.

* UIProcess/Automation/Automation.json:
Add a command to set the canned list of files that should be selected when prompted.
If no files are selected, then the effect is as if the user had clicked "cancel" in
the file chooser dialog.

Add an event to signal to the WebDriver service that the file selection request has
been either fulfilled or cancelled. This event is necessary because otherwise remotes
cannot distinguish whether selecting the files failed for some reason, or if the
UIProcess has not yet selected the files and sent them to the web content process.
In either case, the input element's "files" attribute would return an empty FileList.

* UIProcess/Automation/WebAutomationSession.h:
* UIProcess/Automation/WebAutomationSession.cpp:
(WebKit::WebAutomationSession::WebAutomationSession):
Add the frontend dispatcher for Automation domain. This is named m_domainNotifier since
m_domainDispatcher is already being used for the backend command dispatcher.

(WebKit::WebAutomationSession::handleRunOpenPanel):
Validate that the files-to-select list has valid entries and select the files if so.
If anything goes wrong, pretend to cancel out of the file chooser. Either way, notify the
frontend with an event that the file chooser was dismissed due to selecting files or cancelling.
Automation protocol clients may implement additional strategies to further restrict
the conditions upon which local files can be uploaded.

(WebKit::WebAutomationSession::setFilesToSelectForFileUpload): Added.
Store the list of files as a vector of strings. The file list is always replaced.

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::runOpenPanel):
If the page is under automation, delegating the runOpenPanel is likely to hang
because WebDriver cannot interact directly with the file chooser dialog. Instead,
give WebAutomationSession a chance to select files and don't tell the delegate.

* WebKit.xcodeproj/project.pbxproj:
Add frontend dispatcher files to "Derived Sources" group.

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (219873 => 219874)


--- trunk/Source/_javascript_Core/ChangeLog	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/ChangeLog	2017-07-25 18:03:02 UTC (rev 219874)
@@ -1,3 +1,42 @@
+2017-07-25  Brian Burg  <bb...@apple.com>
+
+        Web Automation: add support for uploading files
+        https://bugs.webkit.org/show_bug.cgi?id=174797
+        <rdar://problem/28485063>
+
+        Reviewed by Joseph Pecoraro.
+
+        * inspector/scripts/generate-inspector-protocol-bindings.py:
+        (generate_from_specification):
+        Start generating frontend dispatcher code if the target framework is 'WebKit'.
+
+        * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py:
+        (CppFrontendDispatcherImplementationGenerator.generate_output):
+        Use a framework include for InspectorFrontendRouter.h since this generated code
+        will be compiled outside of WebCore.framework.
+
+        * inspector/scripts/tests/all/expected/definitions-with-mac-platform.json-result:
+        * inspector/scripts/tests/generic/expected/commands-with-async-attribute.json-result:
+        * inspector/scripts/tests/generic/expected/commands-with-optional-call-return-parameters.json-result:
+        * inspector/scripts/tests/generic/expected/definitions-with-mac-platform.json-result:
+        * inspector/scripts/tests/generic/expected/domain-availability.json-result:
+        * inspector/scripts/tests/generic/expected/domains-with-varying-command-sizes.json-result:
+        * inspector/scripts/tests/generic/expected/enum-values.json-result:
+        * inspector/scripts/tests/generic/expected/events-with-optional-parameters.json-result:
+        * inspector/scripts/tests/generic/expected/generate-domains-with-feature-guards.json-result:
+        * inspector/scripts/tests/generic/expected/same-type-id-different-domain.json-result:
+        * inspector/scripts/tests/generic/expected/shadowed-optional-type-setters.json-result:
+        * inspector/scripts/tests/generic/expected/type-declaration-aliased-primitive-type.json-result:
+        * inspector/scripts/tests/generic/expected/type-declaration-array-type.json-result:
+        * inspector/scripts/tests/generic/expected/type-declaration-enum-type.json-result:
+        * inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result:
+        * inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result:
+        * inspector/scripts/tests/generic/expected/type-with-open-parameters.json-result:
+        * inspector/scripts/tests/generic/expected/worker-supported-domains.json-result:
+        * inspector/scripts/tests/ios/expected/definitions-with-mac-platform.json-result:
+        * inspector/scripts/tests/mac/expected/definitions-with-mac-platform.json-result:
+        Rebaseline code generator tests.
+
 2017-07-24  Mark Lam  <mark....@apple.com>
 
         Gardening: fixed C Loop build after r219790.

Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py	2017-07-25 18:03:02 UTC (rev 219874)
@@ -49,7 +49,7 @@
 
     def generate_output(self):
         secondary_headers = [
-            '"InspectorFrontendRouter.h"',
+            '<inspector/InspectorFrontendRouter.h>',
             '<wtf/text/CString.h>',
         ]
 

Modified: trunk/Source/_javascript_Core/inspector/scripts/generate-inspector-protocol-bindings.py (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/generate-inspector-protocol-bindings.py	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/generate-inspector-protocol-bindings.py	2017-07-25 18:03:02 UTC (rev 219874)
@@ -170,6 +170,8 @@
     elif protocol.framework is Frameworks.WebKit and generate_backend:
         generators.append(CppBackendDispatcherHeaderGenerator(*generator_arguments))
         generators.append(CppBackendDispatcherImplementationGenerator(*generator_arguments))
+        generators.append(CppFrontendDispatcherHeaderGenerator(*generator_arguments))
+        generators.append(CppFrontendDispatcherImplementationGenerator(*generator_arguments))
         generators.append(CppProtocolTypesHeaderGenerator(*generator_arguments))
         generators.append(CppProtocolTypesImplementationGenerator(*generator_arguments))
 

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/all/expected/definitions-with-mac-platform.json-result (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/all/expected/definitions-with-mac-platform.json-result	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/all/expected/definitions-with-mac-platform.json-result	2017-07-25 18:03:02 UTC (rev 219874)
@@ -350,7 +350,7 @@
 #include "config.h"
 #include "TestFrontendDispatchers.h"
 
-#include "InspectorFrontendRouter.h"
+#include <inspector/InspectorFrontendRouter.h>
 #include <wtf/text/CString.h>
 
 namespace Inspector {

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/commands-with-async-attribute.json-result (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/commands-with-async-attribute.json-result	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/commands-with-async-attribute.json-result	2017-07-25 18:03:02 UTC (rev 219874)
@@ -566,7 +566,7 @@
 #include "config.h"
 #include "TestFrontendDispatchers.h"
 
-#include "InspectorFrontendRouter.h"
+#include <inspector/InspectorFrontendRouter.h>
 #include <wtf/text/CString.h>
 
 namespace Inspector {

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/commands-with-optional-call-return-parameters.json-result (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/commands-with-optional-call-return-parameters.json-result	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/commands-with-optional-call-return-parameters.json-result	2017-07-25 18:03:02 UTC (rev 219874)
@@ -467,7 +467,7 @@
 #include "config.h"
 #include "TestFrontendDispatchers.h"
 
-#include "InspectorFrontendRouter.h"
+#include <inspector/InspectorFrontendRouter.h>
 #include <wtf/text/CString.h>
 
 namespace Inspector {

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/definitions-with-mac-platform.json-result (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/definitions-with-mac-platform.json-result	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/definitions-with-mac-platform.json-result	2017-07-25 18:03:02 UTC (rev 219874)
@@ -262,7 +262,7 @@
 #include "config.h"
 #include "TestFrontendDispatchers.h"
 
-#include "InspectorFrontendRouter.h"
+#include <inspector/InspectorFrontendRouter.h>
 #include <wtf/text/CString.h>
 
 namespace Inspector {

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/domain-availability.json-result (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/domain-availability.json-result	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/domain-availability.json-result	2017-07-25 18:03:02 UTC (rev 219874)
@@ -419,7 +419,7 @@
 #include "config.h"
 #include "TestFrontendDispatchers.h"
 
-#include "InspectorFrontendRouter.h"
+#include <inspector/InspectorFrontendRouter.h>
 #include <wtf/text/CString.h>
 
 namespace Inspector {

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/domains-with-varying-command-sizes.json-result (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/domains-with-varying-command-sizes.json-result	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/domains-with-varying-command-sizes.json-result	2017-07-25 18:03:02 UTC (rev 219874)
@@ -581,7 +581,7 @@
 #include "config.h"
 #include "TestFrontendDispatchers.h"
 
-#include "InspectorFrontendRouter.h"
+#include <inspector/InspectorFrontendRouter.h>
 #include <wtf/text/CString.h>
 
 namespace Inspector {

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/enum-values.json-result (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/enum-values.json-result	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/enum-values.json-result	2017-07-25 18:03:02 UTC (rev 219874)
@@ -374,7 +374,7 @@
 #include "config.h"
 #include "TestFrontendDispatchers.h"
 
-#include "InspectorFrontendRouter.h"
+#include <inspector/InspectorFrontendRouter.h>
 #include <wtf/text/CString.h>
 
 namespace Inspector {

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/events-with-optional-parameters.json-result (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/events-with-optional-parameters.json-result	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/events-with-optional-parameters.json-result	2017-07-25 18:03:02 UTC (rev 219874)
@@ -277,7 +277,7 @@
 #include "config.h"
 #include "TestFrontendDispatchers.h"
 
-#include "InspectorFrontendRouter.h"
+#include <inspector/InspectorFrontendRouter.h>
 #include <wtf/text/CString.h>
 
 namespace Inspector {

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/generate-domains-with-feature-guards.json-result (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/generate-domains-with-feature-guards.json-result	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/generate-domains-with-feature-guards.json-result	2017-07-25 18:03:02 UTC (rev 219874)
@@ -367,7 +367,7 @@
 #include "config.h"
 #include "TestFrontendDispatchers.h"
 
-#include "InspectorFrontendRouter.h"
+#include <inspector/InspectorFrontendRouter.h>
 #include <wtf/text/CString.h>
 
 namespace Inspector {

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/same-type-id-different-domain.json-result (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/same-type-id-different-domain.json-result	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/same-type-id-different-domain.json-result	2017-07-25 18:03:02 UTC (rev 219874)
@@ -262,7 +262,7 @@
 #include "config.h"
 #include "TestFrontendDispatchers.h"
 
-#include "InspectorFrontendRouter.h"
+#include <inspector/InspectorFrontendRouter.h>
 #include <wtf/text/CString.h>
 
 namespace Inspector {

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/shadowed-optional-type-setters.json-result (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/shadowed-optional-type-setters.json-result	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/shadowed-optional-type-setters.json-result	2017-07-25 18:03:02 UTC (rev 219874)
@@ -262,7 +262,7 @@
 #include "config.h"
 #include "TestFrontendDispatchers.h"
 
-#include "InspectorFrontendRouter.h"
+#include <inspector/InspectorFrontendRouter.h>
 #include <wtf/text/CString.h>
 
 namespace Inspector {

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-declaration-aliased-primitive-type.json-result (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-declaration-aliased-primitive-type.json-result	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-declaration-aliased-primitive-type.json-result	2017-07-25 18:03:02 UTC (rev 219874)
@@ -262,7 +262,7 @@
 #include "config.h"
 #include "TestFrontendDispatchers.h"
 
-#include "InspectorFrontendRouter.h"
+#include <inspector/InspectorFrontendRouter.h>
 #include <wtf/text/CString.h>
 
 namespace Inspector {

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-declaration-array-type.json-result (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-declaration-array-type.json-result	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-declaration-array-type.json-result	2017-07-25 18:03:02 UTC (rev 219874)
@@ -265,7 +265,7 @@
 #include "config.h"
 #include "TestFrontendDispatchers.h"
 
-#include "InspectorFrontendRouter.h"
+#include <inspector/InspectorFrontendRouter.h>
 #include <wtf/text/CString.h>
 
 namespace Inspector {

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-declaration-enum-type.json-result (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-declaration-enum-type.json-result	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-declaration-enum-type.json-result	2017-07-25 18:03:02 UTC (rev 219874)
@@ -266,7 +266,7 @@
 #include "config.h"
 #include "TestFrontendDispatchers.h"
 
-#include "InspectorFrontendRouter.h"
+#include <inspector/InspectorFrontendRouter.h>
 #include <wtf/text/CString.h>
 
 namespace Inspector {

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result	2017-07-25 18:03:02 UTC (rev 219874)
@@ -267,7 +267,7 @@
 #include "config.h"
 #include "TestFrontendDispatchers.h"
 
-#include "InspectorFrontendRouter.h"
+#include <inspector/InspectorFrontendRouter.h>
 #include <wtf/text/CString.h>
 
 namespace Inspector {

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result	2017-07-25 18:03:02 UTC (rev 219874)
@@ -266,7 +266,7 @@
 #include "config.h"
 #include "TestFrontendDispatchers.h"
 
-#include "InspectorFrontendRouter.h"
+#include <inspector/InspectorFrontendRouter.h>
 #include <wtf/text/CString.h>
 
 namespace Inspector {

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-with-open-parameters.json-result (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-with-open-parameters.json-result	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-with-open-parameters.json-result	2017-07-25 18:03:02 UTC (rev 219874)
@@ -262,7 +262,7 @@
 #include "config.h"
 #include "TestFrontendDispatchers.h"
 
-#include "InspectorFrontendRouter.h"
+#include <inspector/InspectorFrontendRouter.h>
 #include <wtf/text/CString.h>
 
 namespace Inspector {

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/worker-supported-domains.json-result (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/worker-supported-domains.json-result	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/worker-supported-domains.json-result	2017-07-25 18:03:02 UTC (rev 219874)
@@ -420,7 +420,7 @@
 #include "config.h"
 #include "TestFrontendDispatchers.h"
 
-#include "InspectorFrontendRouter.h"
+#include <inspector/InspectorFrontendRouter.h>
 #include <wtf/text/CString.h>
 
 namespace Inspector {

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/ios/expected/definitions-with-mac-platform.json-result (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/ios/expected/definitions-with-mac-platform.json-result	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/ios/expected/definitions-with-mac-platform.json-result	2017-07-25 18:03:02 UTC (rev 219874)
@@ -262,7 +262,7 @@
 #include "config.h"
 #include "TestFrontendDispatchers.h"
 
-#include "InspectorFrontendRouter.h"
+#include <inspector/InspectorFrontendRouter.h>
 #include <wtf/text/CString.h>
 
 namespace Inspector {

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/mac/expected/definitions-with-mac-platform.json-result (219873 => 219874)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/mac/expected/definitions-with-mac-platform.json-result	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/mac/expected/definitions-with-mac-platform.json-result	2017-07-25 18:03:02 UTC (rev 219874)
@@ -350,7 +350,7 @@
 #include "config.h"
 #include "TestFrontendDispatchers.h"
 
-#include "InspectorFrontendRouter.h"
+#include <inspector/InspectorFrontendRouter.h>
 #include <wtf/text/CString.h>
 
 namespace Inspector {

Modified: trunk/Source/WebKit/CMakeLists.txt (219873 => 219874)


--- trunk/Source/WebKit/CMakeLists.txt	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/WebKit/CMakeLists.txt	2017-07-25 18:03:02 UTC (rev 219874)
@@ -783,6 +783,8 @@
     ${PROTOCOL_GENERATOR_SCRIPTS_DIR}/codegen/cpp_generator_templates.py
     ${PROTOCOL_GENERATOR_SCRIPTS_DIR}/codegen/generate_cpp_backend_dispatcher_header.py
     ${PROTOCOL_GENERATOR_SCRIPTS_DIR}/codegen/generate_cpp_backend_dispatcher_implementation.py
+    ${PROTOCOL_GENERATOR_SCRIPTS_DIR}/codegen/generate_cpp_frontend_dispatcher_header.py
+    ${PROTOCOL_GENERATOR_SCRIPTS_DIR}/codegen/generate_cpp_frontend_dispatcher_implementation.py
     ${PROTOCOL_GENERATOR_SCRIPTS_DIR}/codegen/generate_cpp_protocol_types_header.py
     ${PROTOCOL_GENERATOR_SCRIPTS_DIR}/codegen/generate_cpp_protocol_types_implementation.py
     ${PROTOCOL_GENERATOR_SCRIPTS_DIR}/codegen/generator.py
@@ -795,7 +797,7 @@
 )
 
 add_custom_command(
-    OUTPUT ${DERIVED_SOURCES_WEBKIT2_DIR}/AutomationBackendDispatchers.h ${DERIVED_SOURCES_WEBKIT2_DIR}/AutomationBackendDispatchers.cpp ${DERIVED_SOURCES_WEBKIT2_DIR}/AutomationProtocolObjects.h ${DERIVED_SOURCES_WEBKIT2_DIR}/AutomationProtocolObjects.cpp
+    OUTPUT ${DERIVED_SOURCES_WEBKIT2_DIR}/AutomationBackendDispatchers.h ${DERIVED_SOURCES_WEBKIT2_DIR}/AutomationBackendDispatchers.cpp ${DERIVED_SOURCES_WEBKIT2_DIR}/AutomationProtocolObjects.h ${DERIVED_SOURCES_WEBKIT2_DIR}/AutomationProtocolObjects.cpp ${DERIVED_SOURCES_WEBKIT2_DIR}/AutomationFrontendDispatchers.h ${DERIVED_SOURCES_WEBKIT2_DIR}/AutomationFrontendDispatchers.cpp
     MAIN_DEPENDENCY ${WebKit2_AUTOMATION_PROTOCOL_GENERATOR_INPUTS}
     DEPENDS ${WebKit2_AUTOMATION_PROTOCOL_GENERATOR_SCRIPTS}
     COMMAND ${PYTHON_EXECUTABLE} ${PROTOCOL_GENERATOR_SCRIPTS_DIR}/generate-inspector-protocol-bindings.py --outputDir "${DERIVED_SOURCES_WEBKIT2_DIR}" --framework WebKit ${WebKit2_AUTOMATION_PROTOCOL_GENERATOR_EXTRA_FLAGS} --backend ${WebKit2_AUTOMATION_PROTOCOL_GENERATOR_INPUTS}
@@ -803,11 +805,13 @@
 
 list(APPEND WebKit2_HEADERS
     ${DERIVED_SOURCES_WEBKIT2_DIR}/AutomationBackendDispatchers.h
+    ${DERIVED_SOURCES_WEBKIT2_DIR}/AutomationFrontendDispatchers.h
     ${DERIVED_SOURCES_WEBKIT2_DIR}/AutomationProtocolObjects.h
 )
 
 list(APPEND WebKit2_SOURCES
     ${DERIVED_SOURCES_WEBKIT2_DIR}/AutomationBackendDispatchers.cpp
+    ${DERIVED_SOURCES_WEBKIT2_DIR}/AutomationFrontendDispatchers.cpp
     ${DERIVED_SOURCES_WEBKIT2_DIR}/AutomationProtocolObjects.cpp
 )
 

Modified: trunk/Source/WebKit/ChangeLog (219873 => 219874)


--- trunk/Source/WebKit/ChangeLog	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/WebKit/ChangeLog	2017-07-25 18:03:02 UTC (rev 219874)
@@ -1,3 +1,58 @@
+2017-07-25  Brian Burg  <bb...@apple.com>
+
+        Web Automation: add support for uploading files
+        https://bugs.webkit.org/show_bug.cgi?id=174797
+        <rdar://problem/28485063>
+
+        Reviewed by Joseph Pecoraro.
+
+        The general strategy is to have automation clients set the list of files they want
+        to select ahead of time. Then, the client simulates a click on the <input type="file"> element.
+        When that causes WebPageProxy to ask the UI delegate to runOpenPanel, it instead
+        gives WebAutomationSession a chance to select files if the page is under control of
+        automation. WebAutomationSession validates its file list and selects the files if valid.
+
+        * CMakeLists.txt: Add frontend dispatcher files.
+        * DerivedSources.make:
+        Add frontend dispatcher code generator scripts as dependencies of the generated code.
+        Add generated frontend dispatcher files to the list of output files.
+
+        * UIProcess/Automation/Automation.json:
+        Add a command to set the canned list of files that should be selected when prompted.
+        If no files are selected, then the effect is as if the user had clicked "cancel" in
+        the file chooser dialog.
+
+        Add an event to signal to the WebDriver service that the file selection request has
+        been either fulfilled or cancelled. This event is necessary because otherwise remotes
+        cannot distinguish whether selecting the files failed for some reason, or if the
+        UIProcess has not yet selected the files and sent them to the web content process.
+        In either case, the input element's "files" attribute would return an empty FileList.
+
+        * UIProcess/Automation/WebAutomationSession.h:
+        * UIProcess/Automation/WebAutomationSession.cpp:
+        (WebKit::WebAutomationSession::WebAutomationSession):
+        Add the frontend dispatcher for Automation domain. This is named m_domainNotifier since
+        m_domainDispatcher is already being used for the backend command dispatcher.
+
+        (WebKit::WebAutomationSession::handleRunOpenPanel):
+        Validate that the files-to-select list has valid entries and select the files if so.
+        If anything goes wrong, pretend to cancel out of the file chooser. Either way, notify the
+        frontend with an event that the file chooser was dismissed due to selecting files or cancelling.
+        Automation protocol clients may implement additional strategies to further restrict
+        the conditions upon which local files can be uploaded.
+
+        (WebKit::WebAutomationSession::setFilesToSelectForFileUpload): Added.
+        Store the list of files as a vector of strings. The file list is always replaced.
+
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::runOpenPanel):
+        If the page is under automation, delegating the runOpenPanel is likely to hang
+        because WebDriver cannot interact directly with the file chooser dialog. Instead,
+        give WebAutomationSession a chance to select files and don't tell the delegate.
+
+        * WebKit.xcodeproj/project.pbxproj:
+        Add frontend dispatcher files to "Derived Sources" group.
+
 2017-07-25  Alex Christensen  <achristen...@webkit.org>
 
         Modernize NavigationAction code

Modified: trunk/Source/WebKit/DerivedSources.make (219873 => 219874)


--- trunk/Source/WebKit/DerivedSources.make	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/WebKit/DerivedSources.make	2017-07-25 18:03:02 UTC (rev 219874)
@@ -230,6 +230,8 @@
 	$(_javascript_Core_SCRIPTS_DIR)/cpp_generator.py \
 	$(_javascript_Core_SCRIPTS_DIR)/generate_cpp_backend_dispatcher_header.py \
 	$(_javascript_Core_SCRIPTS_DIR)/generate_cpp_backend_dispatcher_implementation.py \
+	$(_javascript_Core_SCRIPTS_DIR)/generate_cpp_frontend_dispatcher_header.py \
+	$(_javascript_Core_SCRIPTS_DIR)/generate_cpp_frontend_dispatcher_implementation.py \
 	$(_javascript_Core_SCRIPTS_DIR)/generate_cpp_protocol_types_header.py \
 	$(_javascript_Core_SCRIPTS_DIR)/generate_cpp_protocol_types_implementation.py \
 	$(_javascript_Core_SCRIPTS_DIR)/generator_templates.py \
@@ -245,6 +247,8 @@
 AUTOMATION_PROTOCOL_OUTPUT_FILES = \
     AutomationBackendDispatchers.h \
     AutomationBackendDispatchers.cpp \
+    AutomationFrontendDispatchers.h \
+    AutomationFrontendDispatchers.cpp \
 #
 
 ifeq ($(OS),MACOS)
@@ -255,7 +259,7 @@
 endif
 endif # MACOS
 
-# JSON-RPC Backend Dispatchers, Type Builders
+# JSON-RPC Frontend Dispatchers, Backend Dispatchers, Type Builders
 $(firstword $(AUTOMATION_PROTOCOL_OUTPUT_FILES)) : $(AUTOMATION_PROTOCOL_INPUT_FILES) $(AUTOMATION_PROTOCOL_GENERATOR_SCRIPTS)
 	$(PYTHON) $(_javascript_Core_SCRIPTS_DIR)/generate-inspector-protocol-bindings.py --framework WebKit $(AUTOMATION_BACKEND_PLATFORM_ARGUMENTS) --backend --outputDir . $(AUTOMATION_PROTOCOL_INPUT_FILES)
 

Modified: trunk/Source/WebKit/UIProcess/Automation/Automation.json (219873 => 219874)


--- trunk/Source/WebKit/UIProcess/Automation/Automation.json	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/WebKit/UIProcess/Automation/Automation.json	2017-07-25 18:03:02 UTC (rev 219874)
@@ -469,6 +469,14 @@
             ]
         },
         {
+            "name": "setFilesToSelectForFileUpload",
+            "description": "Sets the files to be selected when a file input type element becomes active in a browsing context.",
+            "parameters": [
+                { "name": "browsingContextHandle", "$ref": "BrowsingContextHandle", "description": "The handle for the browsing context." },
+                { "name": "filenames", "type": "array", "items": { "$ref": "string" }, "description": "Absolute paths to the files that should be selected." }
+            ]
+        },
+        {
             "name": "getAllCookies",
             "description": "Returns all cookies visible to the specified browsing context.",
             "parameters": [
@@ -504,5 +512,15 @@
                 { "name": "browsingContextHandle", "$ref": "BrowsingContextHandle", "description": "The handle for the browsing context." }
             ]
         }
+    ],
+    "events": [
+        {
+            "name": "fileChooserDismissed",
+            "description": "Fired when a file chooser for a file input element is dismissed by selecting files or cancelling.",
+            "parameters": [
+                { "name": "browsingContextHandle", "$ref": "BrowsingContextHandle", "description": "The handle for the browsing context." },
+                { "name": "selectionCancelled", "type": "boolean", "description": "If true, the chooser was dismissed because file selection was cancelled." }
+            ]
+        }
     ]
 }

Modified: trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp (219873 => 219874)


--- trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp	2017-07-25 18:03:02 UTC (rev 219874)
@@ -27,6 +27,7 @@
 #include "WebAutomationSession.h"
 
 #include "APIAutomationSessionClient.h"
+#include "APIOpenPanelParameters.h"
 #include "AutomationProtocolObjects.h"
 #include "WebAutomationSessionMacros.h"
 #include "WebAutomationSessionMessages.h"
@@ -33,6 +34,7 @@
 #include "WebAutomationSessionProxyMessages.h"
 #include "WebCookieManagerProxy.h"
 #include "WebInspectorProxy.h"
+#include "WebOpenPanelResultListenerProxy.h"
 #include "WebProcessPool.h"
 #include <_javascript_Core/InspectorBackendDispatcher.h>
 #include <_javascript_Core/InspectorFrontendRouter.h>
@@ -56,6 +58,7 @@
     , m_frontendRouter(FrontendRouter::create())
     , m_backendDispatcher(BackendDispatcher::create(m_frontendRouter.copyRef()))
     , m_domainDispatcher(AutomationBackendDispatcher::create(m_backendDispatcher, this))
+    , m_domainNotifier(std::make_unique<AutomationFrontendDispatcher>(m_frontendRouter))
     , m_loadTimer(RunLoop::main(), this, &WebAutomationSession::loadTimerFired)
 {
 }
@@ -516,6 +519,35 @@
         callback->sendSuccess(InspectorObject::create());
 }
 
+void WebAutomationSession::handleRunOpenPanel(const WebPageProxy& page, const WebFrameProxy&, const API::OpenPanelParameters& parameters, WebOpenPanelResultListenerProxy& resultListener)
+{
+    if (!m_filesToSelectForFileUpload.size()) {
+        resultListener.cancel();
+        m_domainNotifier->fileChooserDismissed(m_activeBrowsingContextHandle, true);
+        return;
+    }
+
+    if (m_filesToSelectForFileUpload.size() > 1 && !parameters.allowMultipleFiles()) {
+        resultListener.cancel();
+        m_domainNotifier->fileChooserDismissed(m_activeBrowsingContextHandle, true);
+        return;
+    }
+
+    // Per ยง14.3.10.5 in the W3C spec, if at least one file no longer exists, the command should fail.
+    // The REST API service can tell that this failed by checking the "value" attribute of the input element.
+    for (const String& filename : m_filesToSelectForFileUpload) {
+        if (!WebCore::fileExists(filename)) {
+            resultListener.cancel();
+            m_domainNotifier->fileChooserDismissed(m_activeBrowsingContextHandle, true);
+            return;
+        }
+    }
+
+    // FIXME: validate filenames against allowed MIME types before choosing them. <https://webkit.org/b/174803>
+    resultListener.chooseFiles(m_filesToSelectForFileUpload);
+    m_domainNotifier->fileChooserDismissed(m_activeBrowsingContextHandle, false);
+}
+
 void WebAutomationSession::evaluateJavaScriptFunction(Inspector::ErrorString& errorString, const String& browsingContextHandle, const String* optionalFrameHandle, const String& function, const Inspector::InspectorArray& arguments, const bool* optionalExpectsImplicitCallbackArgument, const int* optionalCallbackTimeout, Ref<EvaluateJavaScriptFunctionCallback>&& callback)
 {
     WebPageProxy* page = webPageProxyForHandle(browsingContextHandle);
@@ -755,6 +787,22 @@
     m_client->setUserInputForCurrentJavaScriptPromptOnPage(*this, *page, promptValue);
 }
 
+void WebAutomationSession::setFilesToSelectForFileUpload(ErrorString& errorString, const String& browsingContextHandle, const Inspector::InspectorArray& filenames)
+{
+    Vector<String> newFileList;
+    newFileList.reserveInitialCapacity(filenames.length());
+
+    for (auto item : filenames) {
+        String filename;
+        if (!item->asString(filename))
+            FAIL_WITH_PREDEFINED_ERROR(InternalError);
+
+        newFileList.append(filename);
+    }
+
+    m_filesToSelectForFileUpload.swap(newFileList);
+}
+
 void WebAutomationSession::getAllCookies(ErrorString& errorString, const String& browsingContextHandle, Ref<GetAllCookiesCallback>&& callback)
 {
     WebPageProxy* page = webPageProxyForHandle(browsingContextHandle);

Modified: trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.h (219873 => 219874)


--- trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.h	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.h	2017-07-25 18:03:02 UTC (rev 219874)
@@ -27,6 +27,7 @@
 
 #include "APIObject.h"
 #include "AutomationBackendDispatchers.h"
+#include "AutomationFrontendDispatchers.h"
 #include "Connection.h"
 #include "ShareableBitmap.h"
 #include "WebEvent.h"
@@ -62,10 +63,15 @@
 OBJC_CLASS NSEvent;
 #endif
 
+namespace API {
+class OpenPanelParameters;
+}
+
 namespace WebKit {
 
 class WebAutomationSessionClient;
 class WebFrameProxy;
+class WebOpenPanelResultListenerProxy;
 class WebPageProxy;
 class WebProcessPool;
 
@@ -90,6 +96,7 @@
     void navigationOccurredForFrame(const WebFrameProxy&);
     void inspectorFrontendLoaded(const WebPageProxy&);
     void keyboardEventsFlushedForPage(const WebPageProxy&);
+    void handleRunOpenPanel(const WebPageProxy&, const WebFrameProxy&, const API::OpenPanelParameters&, WebOpenPanelResultListenerProxy&);
 
 #if ENABLE(REMOTE_INSPECTOR)
     // Inspector::RemoteAutomationTarget API
@@ -129,6 +136,7 @@
     void acceptCurrentJavaScriptDialog(Inspector::ErrorString&, const String& browsingContextHandle) override;
     void messageOfCurrentJavaScriptDialog(Inspector::ErrorString&, const String& browsingContextHandle, String* text) override;
     void setUserInputForCurrentJavaScriptPrompt(Inspector::ErrorString&, const String& browsingContextHandle, const String& text) override;
+    void setFilesToSelectForFileUpload(Inspector::ErrorString&, const String& browsingContextHandle, const Inspector::InspectorArray& filenames) override;
     void getAllCookies(Inspector::ErrorString&, const String& browsingContextHandle, Ref<GetAllCookiesCallback>&&) override;
     void deleteSingleCookie(Inspector::ErrorString&, const String& browsingContextHandle, const String& cookieName, Ref<DeleteSingleCookieCallback>&&) override;
     void addSingleCookie(Inspector::ErrorString&, const String& browsingContextHandle, const Inspector::InspectorObject& cookie, Ref<AddSingleCookieCallback>&&) override;
@@ -194,6 +202,7 @@
     Ref<Inspector::FrontendRouter> m_frontendRouter;
     Ref<Inspector::BackendDispatcher> m_backendDispatcher;
     Ref<Inspector::AutomationBackendDispatcher> m_domainDispatcher;
+    std::unique_ptr<Inspector::AutomationFrontendDispatcher> m_domainNotifier;
 
     HashMap<uint64_t, String> m_webPageHandleMap;
     HashMap<String, uint64_t> m_handleWebPageMap;
@@ -229,6 +238,7 @@
     HashMap<uint64_t, RefPtr<Inspector::AutomationBackendDispatcherHandler::DeleteSingleCookieCallback>> m_deleteCookieCallbacks;
 
     RunLoop::Timer<WebAutomationSession> m_loadTimer;
+    Vector<String> m_filesToSelectForFileUpload;
 
 #if ENABLE(REMOTE_INSPECTOR)
     Inspector::FrontendChannel* m_remoteChannel { nullptr };

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (219873 => 219874)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2017-07-25 18:03:02 UTC (rev 219874)
@@ -4118,10 +4118,17 @@
     Ref<API::OpenPanelParameters> parameters = API::OpenPanelParameters::create(settings);
     m_openPanelResultListener = WebOpenPanelResultListenerProxy::create(this);
 
+    if (m_controlledByAutomation) {
+        if (auto* automationSession = process().processPool().automationSession())
+            automationSession->handleRunOpenPanel(*this, *frame, parameters.get(), *m_openPanelResultListener);
+
+        // Don't show a file chooser, since automation will be unable to interact with it.
+        return;
+    }
+
     // Since runOpenPanel() can spin a nested run loop we need to turn off the responsiveness timer.
     m_process->responsivenessTimer().stop();
 
-
     if (!m_uiClient->runOpenPanel(this, frame, frameSecurityOrigin, parameters.ptr(), m_openPanelResultListener.get())) {
         if (!m_pageClient.handleRunOpenPanel(this, frame, parameters.ptr(), m_openPanelResultListener.get()))
             didCancelForOpenPanel();

Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (219873 => 219874)


--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2017-07-25 18:02:57 UTC (rev 219873)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2017-07-25 18:03:02 UTC (rev 219874)
@@ -1413,6 +1413,8 @@
 		990D28BB1C6539D300986977 /* AutomationSessionClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 990D28B71C6539A000986977 /* AutomationSessionClient.h */; };
 		990D28BC1C6539DA00986977 /* AutomationSessionClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = 990D28B81C6539A000986977 /* AutomationSessionClient.mm */; };
 		990D28C01C6553F100986977 /* APIAutomationSessionClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 990D28B31C6526D400986977 /* APIAutomationSessionClient.h */; };
+		99249AD51F1F1E5600B62FBB /* AutomationFrontendDispatchers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 99249AD31F1F1E3300B62FBB /* AutomationFrontendDispatchers.cpp */; };
+		99249AD61F1F1E5F00B62FBB /* AutomationFrontendDispatchers.h in Headers */ = {isa = PBXBuildFile; fileRef = 99249AD41F1F1E3300B62FBB /* AutomationFrontendDispatchers.h */; };
 		9946EF861E7B027000541E79 /* WebAutomationSessionIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9946EF851E7B026600541E79 /* WebAutomationSessionIOS.mm */; };
 		9955A6EC1C7980C200EB6A93 /* WebAutomationSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 9955A6EB1C7980BB00EB6A93 /* WebAutomationSession.h */; };
 		9955A6ED1C7980CA00EB6A93 /* WebAutomationSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9955A6EA1C7980BB00EB6A93 /* WebAutomationSession.cpp */; };
@@ -3702,6 +3704,8 @@
 		990D28B31C6526D400986977 /* APIAutomationSessionClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIAutomationSessionClient.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>"; };
+		99249AD31F1F1E3300B62FBB /* AutomationFrontendDispatchers.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AutomationFrontendDispatchers.cpp; sourceTree = "<group>"; };
+		99249AD41F1F1E3300B62FBB /* AutomationFrontendDispatchers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AutomationFrontendDispatchers.h; sourceTree = "<group>"; };
 		9946EF851E7B026600541E79 /* WebAutomationSessionIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebAutomationSessionIOS.mm; sourceTree = "<group>"; };
 		9955A6E91C7980BB00EB6A93 /* Automation.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Automation.json; sourceTree = "<group>"; };
 		9955A6EA1C7980BB00EB6A93 /* WebAutomationSession.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebAutomationSession.cpp; sourceTree = "<group>"; };
@@ -5724,9 +5728,9 @@
 				1A66BF8E18A052ED002071B4 /* WKWebViewInternal.h */,
 				26F9A83A18A3463F00AEB88A /* WKWebViewPrivate.h */,
 				1AD60F5C18E20F4C0020C034 /* WKWindowFeatures.h */,
-				6A5080BE1F0EDAAA00E617C5 /* WKWindowFeaturesPrivate.h */,
 				1AD60F5B18E20F4C0020C034 /* WKWindowFeatures.mm */,
 				1AD60F5F18E20F740020C034 /* WKWindowFeaturesInternal.h */,
+				6A5080BE1F0EDAAA00E617C5 /* WKWindowFeaturesPrivate.h */,
 			);
 			path = Cocoa;
 			sourceTree = "<group>";
@@ -7729,6 +7733,8 @@
 				512F58A112A883AD00629530 /* AuthenticationManagerMessages.h */,
 				9955A6F01C79866400EB6A93 /* AutomationBackendDispatchers.cpp */,
 				9955A6F11C79866400EB6A93 /* AutomationBackendDispatchers.h */,
+				99249AD31F1F1E3300B62FBB /* AutomationFrontendDispatchers.cpp */,
+				99249AD41F1F1E3300B62FBB /* AutomationFrontendDispatchers.h */,
 				9955A6F21C79866400EB6A93 /* AutomationProtocolObjects.cpp */,
 				9955A6F31C79866400EB6A93 /* AutomationProtocolObjects.h */,
 				51FAEC361B0657310009C4E7 /* ChildProcessMessageReceiver.cpp */,
@@ -8240,7 +8246,6 @@
 				1AD4C1931B39F33200ABC28E /* ApplicationStateTracker.h in Headers */,
 				1AEFD27911D16C81008219D3 /* ArgumentCoder.h in Headers */,
 				1AEFD2F711D1807B008219D3 /* ArgumentCoders.h in Headers */,
-				83850C0D1F16BA9000C15E52 /* ResourceLoadStatisticsPersistentStorage.h in Headers */,
 				1AAF0C4A12B16334008E49E2 /* ArgumentCodersCF.h in Headers */,
 				E179FD9C134D38060015B883 /* ArgumentCodersMac.h in Headers */,
 				CE1A0BD21A48E6C60054EF74 /* AssertionServicesSPI.h in Headers */,
@@ -8256,6 +8261,7 @@
 				9955A6EF1C79810800EB6A93 /* Automation.json in Headers */,
 				9955A6F51C7986E000EB6A93 /* AutomationBackendDispatchers.h in Headers */,
 				99C81D5A1C20E7E2005C4C82 /* AutomationClient.h in Headers */,
+				99249AD61F1F1E5F00B62FBB /* AutomationFrontendDispatchers.h in Headers */,
 				9955A6F71C7986E500EB6A93 /* AutomationProtocolObjects.h in Headers */,
 				990D28BB1C6539D300986977 /* AutomationSessionClient.h in Headers */,
 				CDA041F41ACE2105004A13EC /* BackBoardServicesSPI.h in Headers */,
@@ -8526,6 +8532,7 @@
 				A55BA8171BA23E12007CD33D /* RemoteWebInspectorUI.h in Headers */,
 				6BE969CD1E54E054008B7483 /* ResourceLoadStatisticsClassifier.h in Headers */,
 				6BE969CB1E54D4CF008B7483 /* ResourceLoadStatisticsClassifierCocoa.h in Headers */,
+				83850C0D1F16BA9000C15E52 /* ResourceLoadStatisticsPersistentStorage.h in Headers */,
 				1A30066E1110F4F70031937C /* ResponsivenessTimer.h in Headers */,
 				410482CE1DDD324F00F006D0 /* RTCNetwork.h in Headers */,
 				BC2D021712AC41CB00E732A3 /* SameDocumentNavigationType.h in Headers */,
@@ -8725,7 +8732,6 @@
 				CDA29A2B1CBEB67A00901CCF /* WebPlaybackSessionManagerProxyMessages.h in Headers */,
 				31D5929F166E060000E6BF02 /* WebPlugInClient.h in Headers */,
 				BC5744F012638FB3006F0F12 /* WebPopupItem.h in Headers */,
-				6A5080BF1F0EDAAA00E617C5 /* WKWindowFeaturesPrivate.h in Headers */,
 				D3B9484711FF4B6500032B39 /* WebPopupMenu.h in Headers */,
 				BC574E631267D080006F0F12 /* WebPopupMenuProxy.h in Headers */,
 				BC5750971268F3C6006F0F12 /* WebPopupMenuProxyMac.h in Headers */,
@@ -9126,6 +9132,7 @@
 				26F9A83B18A3468100AEB88A /* WKWebViewPrivate.h in Headers */,
 				1AD60F5E18E20F4C0020C034 /* WKWindowFeatures.h in Headers */,
 				1AD60F6018E20F740020C034 /* WKWindowFeaturesInternal.h in Headers */,
+				6A5080BF1F0EDAAA00E617C5 /* WKWindowFeaturesPrivate.h in Headers */,
 				1A7C0DF71B7D1F1000A9B848 /* WKWindowFeaturesRef.h in Headers */,
 				BCBECDE816B6416800047A1A /* XPCServiceEntryPoint.h in Headers */,
 			);
@@ -9799,6 +9806,7 @@
 				512F58A212A883AD00629530 /* AuthenticationManagerMessageReceiver.cpp in Sources */,
 				9955A6F41C7986DC00EB6A93 /* AutomationBackendDispatchers.cpp in Sources */,
 				99C81D591C20E1E5005C4C82 /* AutomationClient.mm in Sources */,
+				99249AD51F1F1E5600B62FBB /* AutomationFrontendDispatchers.cpp in Sources */,
 				9955A6F61C7986E300EB6A93 /* AutomationProtocolObjects.cpp in Sources */,
 				990D28BC1C6539DA00986977 /* AutomationSessionClient.mm in Sources */,
 				46A2B6081E5676A600C3DEDA /* BackgroundProcessResponsivenessTimer.cpp in Sources */,
@@ -9820,6 +9828,7 @@
 				1A30EAC6115D7DA30053E937 /* ConnectionMac.mm in Sources */,
 				5106D7C218BDBE73000AB166 /* ContextMenuContextData.cpp in Sources */,
 				CDC3831017212440008A2FC3 /* CookieStorageShim.mm in Sources */,
+				5104F5A21F19D7D2004CF821 /* CookieStorageUtilsCF.mm in Sources */,
 				B878B616133428DC006888E9 /* CorrectionPanel.mm in Sources */,
 				51E351FF180F5D0F00E53BE9 /* DatabaseProcess.cpp in Sources */,
 				515E772B184008B90007203F /* DatabaseProcessCreationParameters.cpp in Sources */,
@@ -9874,7 +9883,6 @@
 				935EEBA3127761D3003322B8 /* InjectedBundleBackForwardListItem.cpp in Sources */,
 				BCEE7DC6128B645D009827DA /* InjectedBundleClient.cpp in Sources */,
 				1A53C2A21A323004004E8C70 /* InjectedBundleCSSStyleDeclarationHandle.cpp in Sources */,
-				5104F5A21F19D7D2004CF821 /* CookieStorageUtilsCF.mm in Sources */,
 				51FA2D7415212DF100C1BA0B /* InjectedBundleDOMWindowExtension.cpp in Sources */,
 				7CBB811C1AA0F8B1006B1942 /* InjectedBundleFileHandle.cpp in Sources */,
 				BC498619124D10E200D834E1 /* InjectedBundleHitTestResult.cpp in Sources */,
@@ -9954,7 +9962,6 @@
 				E4436ECD1A0D040B00EAD204 /* NetworkCacheKey.cpp in Sources */,
 				831EEBBE1BD85C4300BB64C3 /* NetworkCacheSpeculativeLoad.cpp in Sources */,
 				832AE2531BE2E8CD00FAAE10 /* NetworkCacheSpeculativeLoadManager.cpp in Sources */,
-				83850C0C1F16BA9000C15E52 /* ResourceLoadStatisticsPersistentStorage.cpp in Sources */,
 				83BDCCB91AC5FDB6003F6441 /* NetworkCacheStatistics.cpp in Sources */,
 				E4436ED01A0D040B00EAD204 /* NetworkCacheStorage.cpp in Sources */,
 				8310428C1BD6B66F00A715E4 /* NetworkCacheSubresourcesEntry.cpp in Sources */,
@@ -10095,6 +10102,8 @@
 				1BBBE4A019B66C53006B7D81 /* RemoteWebInspectorUIMessageReceiver.cpp in Sources */,
 				6BE969C71E54D4B6008B7483 /* ResourceLoadStatisticsClassifier.cpp in Sources */,
 				6BE969CA1E54D4CF008B7483 /* ResourceLoadStatisticsClassifierCocoa.cpp in Sources */,
+				83850C0C1F16BA9000C15E52 /* ResourceLoadStatisticsPersistentStorage.cpp in Sources */,
+				8324355C1F1714670035AA3A /* ResourceLoadStatisticsPersistentStorageIOS.mm in Sources */,
 				BC111B09112F5E3C00337BAB /* ResponsivenessTimer.cpp in Sources */,
 				410482CD1DDD324C00F006D0 /* RTCNetwork.cpp in Sources */,
 				1AAB4AAA1296F1540023952F /* SandboxExtensionMac.mm in Sources */,
@@ -10537,7 +10546,6 @@
 				1ACC50F11CBC381D003C7D03 /* WKOpenPanelParameters.mm in Sources */,
 				BC85806312B8505700EDEB2E /* WKOpenPanelParametersRef.cpp in Sources */,
 				BC85806212B8505700EDEB2E /* WKOpenPanelResultListener.cpp in Sources */,
-				8324355C1F1714670035AA3A /* ResourceLoadStatisticsPersistentStorageIOS.mm in Sources */,
 				BCD597D6112B56DC00EC8C23 /* WKPage.cpp in Sources */,
 				7C89D29B1A67837B003A5FDE /* WKPageConfigurationRef.cpp in Sources */,
 				BC7B633812A45ABA00D174A4 /* WKPageGroup.cpp in Sources */,
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to