From 859f7b9e978ae5e0a4de4433ba2abed8ed4ce1b3 Mon Sep 17 00:00:00 2001
From: Yury Semikhatsky <yurys@chromium.org>
Date: Thu, 1 Feb 2024 11:38:40 -0800
Subject: [PATCH] fix: put file payloads into "payloads" protocol field

Fixes https://github.com/microsoft/playwright-java/issues/1468
---
 .../playwright/impl/ElementHandleImpl.java          |  2 +-
 .../microsoft/playwright/TestPageSetInputFiles.java | 13 ++++++++++++-
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/ElementHandleImpl.java b/playwright/src/main/java/com/microsoft/playwright/impl/ElementHandleImpl.java
index 1218749b5..35d7374bc 100644
--- a/playwright/src/main/java/com/microsoft/playwright/impl/ElementHandleImpl.java
+++ b/playwright/src/main/java/com/microsoft/playwright/impl/ElementHandleImpl.java
@@ -490,7 +490,7 @@ void setInputFilesImpl(FilePayload[] files, SetInputFilesOptions options) {
       options = new SetInputFilesOptions();
     }
     JsonObject params = gson().toJsonTree(options).getAsJsonObject();
-    params.add("files", Serialization.toJsonArray(files));
+    params.add("payloads", Serialization.toJsonArray(files));
     sendMessage("setInputFiles", params);
   }
 
diff --git a/playwright/src/test/java/com/microsoft/playwright/TestPageSetInputFiles.java b/playwright/src/test/java/com/microsoft/playwright/TestPageSetInputFiles.java
index 6e44703b6..f2cfbed23 100644
--- a/playwright/src/test/java/com/microsoft/playwright/TestPageSetInputFiles.java
+++ b/playwright/src/test/java/com/microsoft/playwright/TestPageSetInputFiles.java
@@ -308,7 +308,18 @@ void shouldAcceptSingleFile() {
     assertEquals("file-to-upload.txt", page.evalOnSelector("input", "input => input.files[0].name"));
   }
 
-//  @Test
+  @Test
+  void shouldAcceptSingleFilePayload() {
+    page.setContent("<input type=file oninput='javascript:console.timeStamp()'>");
+    FileChooser fileChooser = page.waitForFileChooser(() -> page.click("input"));
+    assertEquals(page, fileChooser.page());
+    assertNotNull(fileChooser.element());
+    fileChooser.setFiles(new FilePayload("test.txt", "text/plain", "Hello!".getBytes()));
+    assertEquals(1, page.evalOnSelector("input", "input => input.files.length"));
+    assertEquals("test.txt", page.evalOnSelector("input", "input => input.files[0].name"));
+  }
+
+  //  @Test
   void shouldDetectMimeType() throws ExecutionException, InterruptedException {
     // TODO: Parse form fields on server
   }