Skip to content

Commit ea7574d

Browse files
author
Johan Vos
committed
8337481: File API: file.name contains path instead of name
Backport-of: ca70a07b3ee712b1d06baf8a3901e6ae96070124
1 parent 49a2f3e commit ea7574d

File tree

4 files changed

+79
-15
lines changed

4 files changed

+79
-15
lines changed

modules/javafx.web/src/main/native/Source/WTF/wtf/java/FileSystemJava.cpp

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ int readFromFile(PlatformFileHandle handle, void* data, int length)
273273
return result;
274274
}
275275

276-
String pathGetFileName(const String& path)
276+
String pathFileName(const String& path)
277277
{
278278
JNIEnv* env = WTF::GetJavaEnv();
279279

@@ -441,13 +441,6 @@ bool isHiddenFile(const String& path)
441441
return false;
442442
}
443443

444-
String pathFileName(const String& path)
445-
{
446-
UNUSED_PARAM(path);
447-
// return path.substring(path.reverseFind('/') + 1);
448-
return nullString();
449-
}
450-
451444
bool hardLinkOrCopyFile(const String& targetPath, const String& linkPath)
452445
{
453446
fprintf(stderr, "hardLinkOrCopyFile(const String& targetPath, const String& linkPath) NOT IMPLEMENTED\n");

modules/javafx.web/src/main/native/Source/WebCore/fileapi/File.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -135,12 +135,7 @@ void File::computeNameAndContentType(const String& path, const String& nameOverr
135135
}
136136
#endif
137137

138-
#if !PLATFORM(JAVA)
139138
effectiveName = nameOverride.isEmpty() ? FileSystem::pathFileName(path) : nameOverride;
140-
#else
141-
// Use simple path not from std::FileSystem
142-
effectiveName = nameOverride.isEmpty() ? path : nameOverride;
143-
#endif
144139
size_t index = effectiveName.reverseFind('.');
145140
if (index != notFound) {
146141
callOnMainThreadAndWait([&effectiveContentType, &effectiveName, index] {

modules/javafx.web/src/main/native/Source/WebCore/fileapi/FileCocoa.mm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,9 @@
5959

6060
void File::computeNameAndContentTypeForReplacedFile(const String& path, const String& nameOverride, String& effectiveName, String& effectiveContentType)
6161
{
62-
ASSERT(!FileSystem::pathGetFileName(path).endsWith('/')); // Expecting to get a path without trailing slash, even for directories.
62+
ASSERT(!FileSystem::pathFileName(path).endsWith('/')); // Expecting to get a path without trailing slash, even for directories.
6363
effectiveContentType = "application/zip"_s;
64-
effectiveName = makeString((nameOverride.isNull() ? FileSystem::pathGetFileName(path) : nameOverride), ".zip"_s);
64+
effectiveName = makeString((nameOverride.isNull() ? FileSystem::pathFileName(path) : nameOverride), ".zip"_s);
6565
}
6666

6767
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/*
2+
* Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation. Oracle designates this
8+
* particular file as subject to the "Classpath" exception as provided
9+
* by Oracle in the LICENSE file that accompanied this code.
10+
*
11+
* This code is distributed in the hope that it will be useful, but WITHOUT
12+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+
* version 2 for more details (a copy is included in the LICENSE file that
15+
* accompanied this code).
16+
*
17+
* You should have received a copy of the GNU General Public License version
18+
* 2 along with this work; if not, write to the Free Software Foundation,
19+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+
*
21+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+
* or visit www.oracle.com if you need additional information or have any
23+
* questions.
24+
*/
25+
26+
package test.javafx.scene.web;
27+
28+
import java.io.File;
29+
30+
import com.sun.javafx.webkit.UIClientImplShim;
31+
import com.sun.webkit.WebPage;
32+
import com.sun.webkit.WebPageShim;
33+
import javafx.concurrent.Worker.State;
34+
import javafx.scene.web.WebEngineShim;
35+
36+
import org.junit.Before;
37+
import org.junit.Test;
38+
39+
import static org.junit.Assert.assertEquals;
40+
41+
public class FileTest extends TestBase {
42+
private final WebPage page = WebEngineShim.getPage(getEngine());
43+
private final String[] fileList = { new File("src/test/resources/test/html/HelloWorld.txt").getAbsolutePath() };
44+
private final String script = String.format("<script type='text/javascript'>" +
45+
"var result;" +
46+
"window.addEventListener('click', (e) => {" +
47+
"document.getElementById('file').click();" +
48+
"});" +
49+
"function readFile()" +
50+
"{" +
51+
"file = event.target.files[0];" +
52+
"result = file.name;" +
53+
"}" +
54+
"</script>" +
55+
"<body> <input type='file' id='file' onchange='readFile()'/> </body>");
56+
@Before
57+
public void before() {
58+
UIClientImplShim.test_setChooseFiles(fileList);
59+
}
60+
61+
private void loadFileReaderTestScript(String testScript) {
62+
loadContent(testScript);
63+
submit(() -> {
64+
// Send a dummy mouse click event at (0,0) to simulate click on file chooser button.
65+
WebPageShim.click(page, 0, 0);
66+
});
67+
}
68+
69+
@Test
70+
public void testFileName() {
71+
loadFileReaderTestScript(script);
72+
submit(() -> {
73+
assertEquals("Unexpected file name received", "HelloWorld.txt", getEngine().executeScript("window.result"));
74+
});
75+
}
76+
}

0 commit comments

Comments
 (0)