[WinCairo][PlayStation] Add automation support for RemoteInspector SocketServer implementation.
https://bugs.webkit.org/show_bug.cgi?id=199070
Reviewed by Ross Kirsling.
Added handler for StartAutomationSession event from WebDriver and preparing for automation session.
* inspector/remote/RemoteInspector.h:
* inspector/remote/socket/RemoteInspectorSocket.cpp:
(Inspector::RemoteInspector::listingForAutomationTarget const):
(Inspector::RemoteInspector::sendAutomaticInspectionCandidateMessage):
(Inspector::RemoteInspector::requestAutomationSession):
(Inspector::RemoteInspector::dispatchMap):
(Inspector::RemoteInspector::startAutomationSession):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@251373 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog
index 35fd09a..1c930b0 100644
--- a/Source/JavaScriptCore/ChangeLog
+++ b/Source/JavaScriptCore/ChangeLog
@@ -1,3 +1,20 @@
+2019-10-21 Basuke Suzuki <Basuke.Suzuki@sony.com>
+
+ [WinCairo][PlayStation] Add automation support for RemoteInspector SocketServer implementation.
+ https://bugs.webkit.org/show_bug.cgi?id=199070
+
+ Reviewed by Ross Kirsling.
+
+ Added handler for StartAutomationSession event from WebDriver and preparing for automation session.
+
+ * inspector/remote/RemoteInspector.h:
+ * inspector/remote/socket/RemoteInspectorSocket.cpp:
+ (Inspector::RemoteInspector::listingForAutomationTarget const):
+ (Inspector::RemoteInspector::sendAutomaticInspectionCandidateMessage):
+ (Inspector::RemoteInspector::requestAutomationSession):
+ (Inspector::RemoteInspector::dispatchMap):
+ (Inspector::RemoteInspector::startAutomationSession):
+
2019-10-21 Mark Lam <mark.lam@apple.com>
Remove all uses of untagCodePtr in debugging code.
diff --git a/Source/JavaScriptCore/inspector/remote/RemoteInspector.h b/Source/JavaScriptCore/inspector/remote/RemoteInspector.h
index fb09379..141e9ab 100644
--- a/Source/JavaScriptCore/inspector/remote/RemoteInspector.h
+++ b/Source/JavaScriptCore/inspector/remote/RemoteInspector.h
@@ -149,7 +149,7 @@
void sendMessageToTarget(TargetID, const char* message);
#endif
#if USE(INSPECTOR_SOCKET_SERVER)
- void requestAutomationSession(String&& sessionID, const Client::SessionCapabilities&);
+ void requestAutomationSession(const String& sessionID, const Client::SessionCapabilities&);
bool isConnected() const { return !!m_clientConnection; }
void connect(ConnectionID);
@@ -221,6 +221,9 @@
void setupTarget(const Event&);
void frontendDidClose(const Event&);
void sendMessageToBackend(const Event&);
+ void startAutomationSession(const Event&);
+
+ void receivedAutomationSessionRequestMessage(const Event&);
String backendCommands() const;
#endif
diff --git a/Source/JavaScriptCore/inspector/remote/socket/RemoteInspectorSocket.cpp b/Source/JavaScriptCore/inspector/remote/socket/RemoteInspectorSocket.cpp
index e99e874..decd84f 100644
--- a/Source/JavaScriptCore/inspector/remote/socket/RemoteInspectorSocket.cpp
+++ b/Source/JavaScriptCore/inspector/remote/socket/RemoteInspectorSocket.cpp
@@ -135,9 +135,14 @@
return targetListing;
}
-TargetListing RemoteInspector::listingForAutomationTarget(const RemoteAutomationTarget&) const
+TargetListing RemoteInspector::listingForAutomationTarget(const RemoteAutomationTarget& target) const
{
- return nullptr;
+ TargetListing targetListing = JSON::Object::create();
+ targetListing->setString("type"_s, "automation"_s);
+ targetListing->setString("name"_s, target.name());
+ targetListing->setInteger("targetID"_s, target.targetIdentifier());
+ targetListing->setBoolean("isPaired"_s, target.isPaired());
+ return targetListing;
}
void RemoteInspector::pushListingsNow()
@@ -178,6 +183,30 @@
void RemoteInspector::sendAutomaticInspectionCandidateMessage()
{
+ ASSERT(m_enabled);
+ ASSERT(m_automaticInspectionEnabled);
+ ASSERT(m_automaticInspectionPaused);
+ ASSERT(m_automaticInspectionCandidateTargetIdentifier);
+ // FIXME: Implement automatic inspection.
+}
+
+void RemoteInspector::requestAutomationSession(const String& sessionID, const Client::SessionCapabilities& capabilities)
+{
+ if (!m_client)
+ return;
+
+ if (!m_clientCapabilities || !m_clientCapabilities->remoteAutomationAllowed) {
+ LOG_ERROR("Error: Remote automation is not allowed");
+ return;
+ }
+
+ if (sessionID.isNull()) {
+ LOG_ERROR("Client error: SESSION ID cannot be null");
+ return;
+ }
+
+ m_client->requestAutomationSession(sessionID, capabilities);
+ updateClientCapabilities();
}
void RemoteInspector::sendMessageToRemote(TargetID targetIdentifier, const String& message)
@@ -251,6 +280,7 @@
{ "Setup"_s, static_cast<CallHandler>(&RemoteInspector::setupTarget) },
{ "FrontendDidClose"_s, static_cast<CallHandler>(&RemoteInspector::frontendDidClose) },
{ "SendMessageToBackend"_s, static_cast<CallHandler>(&RemoteInspector::sendMessageToBackend) },
+ { "StartAutomationSession"_s, static_cast<CallHandler>(&RemoteInspector::startAutomationSession) },
});
return methods;
@@ -321,6 +351,32 @@
connectionToTarget->sendMessageToTarget(event.message.value());
}
+void RemoteInspector::startAutomationSession(const Event& event)
+{
+ ASSERT(isMainThread());
+
+ if (!event.message)
+ return;
+
+ requestAutomationSession(event.message.value(), { });
+
+ auto sendEvent = JSON::Object::create();
+ sendEvent->setString("event"_s, "SetCapabilities"_s);
+
+ auto capability = clientCapabilities();
+
+ auto message = JSON::Object::create();
+ message->setString("browserName"_s, capability ? capability->browserName : "");
+ message->setString("browserVersion"_s, capability ? capability->browserVersion : "");
+ sendEvent->setString("message"_s, message->toJSONString());
+ sendWebInspectorEvent(sendEvent->toJSONString());
+
+ m_readyToPushListings = true;
+
+ LockHolder lock(m_mutex);
+ pushListingsNow();
+}
+
} // namespace Inspector
#endif // ENABLE(REMOTE_INSPECTOR)