Changeset 244557 in webkit
- Timestamp:
- Apr 23, 2019, 1:18:05 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 18 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/forms/file/file-reset-in-change-using-open-panel-with-icon-expected.html (added)
-
LayoutTests/fast/forms/file/file-reset-in-change-using-open-panel-with-icon.html (added)
-
LayoutTests/platform/win/TestExpectations (modified) (1 diff)
-
LayoutTests/platform/wincairo/TestExpectations (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/html/FileInputType.cpp (modified) (1 diff)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/UIProcess/API/C/WKOpenPanelResultListener.cpp (modified) (2 diffs)
-
Source/WebKit/UIProcess/API/C/WKOpenPanelResultListener.h (modified) (1 diff)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/DumpRenderTree/TestRunner.cpp (modified) (3 diffs)
-
Tools/DumpRenderTree/TestRunner.h (modified) (2 diffs)
-
Tools/DumpRenderTree/mac/UIDelegate.mm (modified) (1 diff)
-
Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl (modified) (1 diff)
-
Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp (modified) (1 diff)
-
Tools/WebKitTestRunner/InjectedBundle/TestRunner.h (modified) (1 diff)
-
Tools/WebKitTestRunner/TestController.cpp (modified) (4 diffs)
-
Tools/WebKitTestRunner/TestController.h (modified) (2 diffs)
-
Tools/WebKitTestRunner/TestInvocation.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r244552 r244557 1 2019-04-23 Guy Lewin <guy@lewin.co.il> 2 3 Multiple File Input Icon Set Regardless of File List 4 https://bugs.webkit.org/show_bug.cgi?id=195537 5 6 Add a layout test to verify file input icon resets on change event (iOS) 7 Change expectations according to 8 file-reset-in-change-using-open-panel.html 9 10 Reviewed by Alexey Proskuryakov. 11 12 * fast/forms/file/file-reset-in-change-using-open-panel-with-icon-expected.html: Added. 13 * fast/forms/file/file-reset-in-change-using-open-panel-with-icon.html: Added. 14 * platform/win/TestExpectations: 15 * platform/wincairo/TestExpectations: 16 1 17 2019-04-23 Devin Rousso <drousso@apple.com> 2 18 -
trunk/LayoutTests/platform/win/TestExpectations
r244428 r244557 3634 3634 fast/forms/file/file-input-reset-using-open-panel.html [ Skip ] 3635 3635 fast/forms/file/file-reset-in-change-using-open-panel.html [ Skip ] 3636 fast/forms/file/file-reset-in-change-using-open-panel-with-icon.html [ Skip ] 3636 3637 fast/forms/file/get-file-upload-using-open-panel.html [ Skip ] 3637 3638 fast/forms/file/input-file-value-using-open-panel.html [ Skip ] -
trunk/LayoutTests/platform/wincairo/TestExpectations
r244420 r244557 775 775 fast/forms/file/entries-api/webkitdirectory-open-panel.html [ Timeout ] 776 776 fast/forms/file/file-reset-in-change-using-open-panel.html [ Timeout ] 777 fast/forms/file/file-reset-in-change-using-open-panel-with-icon.html [ Timeout ] 777 778 fast/forms/file/get-file-upload-using-open-panel.html [ Timeout ] 778 779 fast/forms/file/input-file-value-using-open-panel.html [ Timeout ] -
trunk/Source/WebCore/ChangeLog
r244556 r244557 1 2019-04-23 Guy Lewin <guy@lewin.co.il> 2 3 Multiple File Input Icon Set Regardless of File List 4 https://bugs.webkit.org/show_bug.cgi?id=195537 5 6 Reviewed by Alexey Proskuryakov. 7 8 File input elements display icon with an empty file list after 9 resetting the file list in 'change' event handler - on iOS 10 11 Test: fast/forms/file/file-reset-in-change-using-open-panel-with-icon.html 12 13 * html/FileInputType.cpp: 14 (WebCore::FileInputType::filesChosen): 15 1 16 2019-04-23 Eric Carlson <eric.carlson@apple.com> 2 17 -
trunk/Source/WebCore/html/FileInputType.cpp
r240437 r244557 420 420 }); 421 421 422 if (icon )422 if (icon && !m_fileList->isEmpty()) 423 423 iconLoaded(icon); 424 424 } -
trunk/Source/WebKit/ChangeLog
r244556 r244557 1 2019-04-23 Guy Lewin <guy@lewin.co.il> 2 3 Multiple File Input Icon Set Regardless of File List 4 https://bugs.webkit.org/show_bug.cgi?id=195537 5 6 Reviewed by Alexey Proskuryakov. 7 8 Add WKOpenPanelResultListenerChooseMediaFiles() to choose files with 9 icon and display string on iOS file open panels 10 11 * UIProcess/API/C/WKOpenPanelResultListener.cpp: 12 (WKOpenPanelResultListenerChooseMediaFiles): 13 * UIProcess/API/C/WKOpenPanelResultListener.h: 14 1 15 2019-04-23 Eric Carlson <eric.carlson@apple.com> 2 16 -
trunk/Source/WebKit/UIProcess/API/C/WKOpenPanelResultListener.cpp
r238771 r244557 28 28 29 29 #include "APIArray.h" 30 #include "APIData.h" 31 #include "APIString.h" 30 32 #include "WKAPICast.h" 31 33 #include "WebOpenPanelResultListenerProxy.h" … … 55 57 } 56 58 59 #if PLATFORM(IOS_FAMILY) 60 void WKOpenPanelResultListenerChooseMediaFiles(WKOpenPanelResultListenerRef listenerRef, WKArrayRef fileURLsRef, WKStringRef displayString, WKDataRef iconImageDataRef) 61 { 62 toImpl(listenerRef)->chooseFiles(filePathsFromFileURLs(*toImpl(fileURLsRef)), toImpl(displayString)->string(), toImpl(iconImageDataRef)); 63 } 64 #endif 65 57 66 void WKOpenPanelResultListenerChooseFiles(WKOpenPanelResultListenerRef listenerRef, WKArrayRef fileURLsRef) 58 67 { -
trunk/Source/WebKit/UIProcess/API/C/WKOpenPanelResultListener.h
r168541 r244557 35 35 WK_EXPORT WKTypeID WKOpenPanelResultListenerGetTypeID(); 36 36 37 WK_EXPORT void WKOpenPanelResultListenerChooseMediaFiles(WKOpenPanelResultListenerRef listenerRef, WKArrayRef fileURLsRef, WKStringRef displayString, WKDataRef iconImageDataRef); 37 38 WK_EXPORT void WKOpenPanelResultListenerChooseFiles(WKOpenPanelResultListenerRef listener, WKArrayRef fileURLs); 38 39 WK_EXPORT void WKOpenPanelResultListenerCancel(WKOpenPanelResultListenerRef listener); -
trunk/Tools/ChangeLog
r244556 r244557 1 2019-04-23 Guy Lewin <guy@lewin.co.il> 2 3 Multiple File Input Icon Set Regardless of File List 4 https://bugs.webkit.org/show_bug.cgi?id=195537 5 6 Reviewed by Alexey Proskuryakov. 7 8 Add setOpenPanelFilesMediaIcon to TestRunner in order to test icon and 9 display string in iOS file inputs 10 11 * DumpRenderTree/TestRunner.cpp: 12 (SetOpenPanelFilesMediaIconCallback): 13 (TestRunner::staticFunctions): 14 (TestRunner::setOpenPanelFilesMediaIcon): 15 * DumpRenderTree/TestRunner.h: 16 (TestRunner::openPanelFilesMediaIcon const): 17 * DumpRenderTree/mac/UIDelegate.mm: 18 (-[UIDelegate webView:runOpenPanelForFileButtonWithResultListener:allowMultipleFiles:]): 19 * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: 20 * WebKitTestRunner/InjectedBundle/TestRunner.cpp: 21 (WTR::TestRunner::setOpenPanelFilesMediaIcon): 22 * WebKitTestRunner/InjectedBundle/TestRunner.h: 23 * WebKitTestRunner/TestController.cpp: 24 (WTR::runOpenPanel): 25 (WTR::TestController::resetStateToConsistentValues): 26 * WebKitTestRunner/TestController.h: 27 (WTR::TestController::openPanelFileURLsMediaIcon const): 28 (WTR::TestController::setOpenPanelFileURLsMediaIcon): 29 * WebKitTestRunner/TestInvocation.cpp: 30 (WTR::TestInvocation::didReceiveMessageFromInjectedBundle): 31 1 32 2019-04-23 Eric Carlson <eric.carlson@apple.com> 2 33 -
trunk/Tools/DumpRenderTree/TestRunner.cpp
r239832 r244557 1829 1829 return JSValueMakeUndefined(context); 1830 1830 } 1831 1832 #if PLATFORM(IOS_FAMILY) 1833 static JSValueRef SetOpenPanelFilesMediaIconCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) 1834 { 1835 if (argumentCount == 1) 1836 static_cast<TestRunner*>(JSObjectGetPrivate(thisObject))->setOpenPanelFilesMediaIcon(context, arguments[0]); 1837 return JSValueMakeUndefined(context); 1838 } 1839 #endif 1831 1840 1832 1841 // Static Values … … 2294 2303 { "setSpellCheckerResults", setSpellCheckerResultsCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete }, 2295 2304 { "setOpenPanelFiles", setOpenPanelFilesCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete }, 2305 #if PLATFORM(IOS_FAMILY) 2306 { "setOpenPanelFilesMediaIcon", SetOpenPanelFilesMediaIconCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete }, 2307 #endif 2296 2308 { "forceImmediateCompletion", forceImmediateCompletionCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete }, 2297 2309 { 0, 0, 0 } … … 2527 2539 } 2528 2540 2541 #if PLATFORM(IOS_FAMILY) 2542 void TestRunner::setOpenPanelFilesMediaIcon(JSContextRef context, JSValueRef mediaIcon) 2543 { 2544 // FIXME (123058): Use a JSC API to get buffer contents once such is exposed. 2545 JSC::VM& vm = toJS(context)->vm(); 2546 JSC::JSLockHolder lock(vm); 2547 2548 JSC::JSArrayBufferView* jsBufferView = JSC::jsDynamicCast<JSC::JSArrayBufferView*>(vm, toJS(toJS(context), mediaIcon)); 2549 ASSERT(jsBufferView); 2550 RefPtr<JSC::ArrayBufferView> bufferView = jsBufferView->unsharedImpl(); 2551 const char* buffer = static_cast<const char*>(bufferView->baseAddress()); 2552 std::vector<char> mediaIconData(buffer, buffer + bufferView->byteLength()); 2553 2554 m_openPanelFilesMediaIcon = mediaIconData; 2555 } 2556 #endif 2557 2529 2558 void TestRunner::cleanup() 2530 2559 { -
trunk/Tools/DumpRenderTree/TestRunner.h
r239832 r244557 384 384 void setOpenPanelFiles(JSContextRef, JSValueRef); 385 385 386 #if PLATFORM(IOS_FAMILY) 387 const std::vector<char>& openPanelFilesMediaIcon() const { return m_openPanelFilesMediaIcon; } 388 void setOpenPanelFilesMediaIcon(JSContextRef, JSValueRef); 389 #endif 390 386 391 bool didCancelClientRedirect() const { return m_didCancelClientRedirect; } 387 392 void setDidCancelClientRedirect(bool value) { m_didCancelClientRedirect = value; } … … 479 484 480 485 std::vector<std::string> m_openPanelFiles; 486 #if PLATFORM(IOS_FAMILY) 487 std::vector<char> m_openPanelFilesMediaIcon; 488 #endif 481 489 482 490 static JSClassRef getJSClass(); -
trunk/Tools/DumpRenderTree/mac/UIDelegate.mm
r237266 r244557 386 386 } 387 387 388 #if PLATFORM(IOS_FAMILY) 389 NSURL *firstURL = [NSURL fileURLWithPath:[NSString stringWithUTF8String:openPanelFiles[0].c_str()] relativeToURL:baseURL]; 390 NSString *displayString = firstURL.lastPathComponent; 391 const std::vector<char>& iconData = gTestRunner->openPanelFilesMediaIcon(); 392 CGImageRef imageRef; 393 if (!iconData.empty()) { 394 RetainPtr<CFDataRef> dataRef = adoptCF(CFDataCreate(nullptr, (unsigned char *)iconData.data(), iconData.size())); 395 RetainPtr<CGDataProviderRef> imageProviderRef = adoptCF(CGDataProviderCreateWithCFData(dataRef.get())); 396 imageRef = CGImageCreateWithJPEGDataProvider(imageProviderRef.get(), nullptr, true, kCGRenderingIntentDefault); 397 } 398 #endif 399 388 400 if (allowMultipleFiles) { 401 #if PLATFORM(IOS_FAMILY) 402 [resultListener chooseFilenames:filePaths.get() displayString:displayString iconImage:imageRef]; 403 #else 389 404 [resultListener chooseFilenames:filePaths.get()]; 405 #endif 390 406 return; 391 407 } 392 408 409 #if PLATFORM(IOS_FAMILY) 410 [resultListener chooseFilename:[filePaths firstObject] displayString:displayString iconImage:imageRef]; 411 #else 393 412 [resultListener chooseFilename:[filePaths firstObject]]; 413 #endif 394 414 } 395 415 -
trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl
r244370 r244557 341 341 // Open panel 342 342 void setOpenPanelFiles(object filesArray); 343 void setOpenPanelFilesMediaIcon(object mediaIcon); 343 344 344 345 // Modal alerts -
trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp
r244390 r244557 2446 2446 } 2447 2447 2448 #if PLATFORM(IOS_FAMILY) 2449 void TestRunner::setOpenPanelFilesMediaIcon(JSValueRef data) 2450 { 2451 WKBundlePageRef page = InjectedBundle::singleton().page()->page(); 2452 JSContextRef context = WKBundleFrameGetJavaScriptContext(WKBundlePageGetMainFrame(page)); 2453 2454 auto& injectedBundle = InjectedBundle::singleton(); 2455 // FIXME (123058): Use a JSC API to get buffer contents once such is exposed. 2456 WKRetainPtr<WKDataRef> iconData(AdoptWK, WKBundleCreateWKDataFromUInt8Array(injectedBundle.bundle(), context, data)); 2457 2458 static auto messageName = adoptWK(WKStringCreateWithUTF8CString("SetOpenPanelFileURLsMediaIcon")); 2459 WKBundlePagePostMessage(page, messageName.get(), iconData.get()); 2460 } 2461 #else 2462 void TestRunner::setOpenPanelFilesMediaIcon(JSValueRef) 2463 { 2464 } 2465 #endif // PLATFORM(IOS_FAMILY) 2466 2448 2467 void TestRunner::removeAllSessionCredentials(JSValueRef callback) 2449 2468 { -
trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h
r244370 r244557 456 456 // Open panel 457 457 void setOpenPanelFiles(JSValueRef); 458 void setOpenPanelFilesMediaIcon(JSValueRef); 458 459 459 460 // Modal alerts -
trunk/Tools/WebKitTestRunner/TestController.cpp
r244390 r244557 62 62 #include <WebKit/WKSecurityOriginRef.h> 63 63 #include <WebKit/WKTextChecker.h> 64 #include <WebKit/WKURL.h> 64 65 #include <WebKit/WKUserContentControllerRef.h> 65 66 #include <WebKit/WKUserContentExtensionStoreRef.h> … … 200 201 return; 201 202 } 203 204 WKTypeRef firstItem = WKArrayGetItemAtIndex(fileURLs, 0); 205 206 #if PLATFORM(IOS_FAMILY) 207 WKStringRef displayString = WKURLCopyLastPathComponent(static_cast<WKURLRef>(firstItem)); 208 WKDataRef mediaIcon = TestController::singleton().openPanelFileURLsMediaIcon(); 209 210 if (mediaIcon) { 211 if (WKOpenPanelParametersGetAllowsMultipleFiles(parameters)) { 212 WKOpenPanelResultListenerChooseMediaFiles(resultListenerRef, fileURLs, displayString, mediaIcon); 213 return; 214 } 215 216 WKOpenPanelResultListenerChooseMediaFiles(resultListenerRef, adoptWK(WKArrayCreate(&firstItem, 1)).get(), displayString, mediaIcon); 217 return; 218 } 219 #endif 202 220 203 221 if (WKOpenPanelParametersGetAllowsMultipleFiles(parameters)) { … … 206 224 } 207 225 208 WKTypeRef firstItem = WKArrayGetItemAtIndex(fileURLs, 0);209 226 WKOpenPanelResultListenerChooseFiles(resultListenerRef, adoptWK(WKArrayCreate(&firstItem, 1)).get()); 210 227 } … … 1006 1023 1007 1024 m_openPanelFileURLs = nullptr; 1025 #if PLATFORM(IOS_FAMILY) 1026 m_openPanelFileURLsMediaIcon = nullptr; 1027 #endif 1008 1028 1009 1029 statisticsResetToConsistentState(); -
trunk/Tools/WebKitTestRunner/TestController.h
r244370 r244557 252 252 void setOpenPanelFileURLs(WKArrayRef fileURLs) { m_openPanelFileURLs = fileURLs; } 253 253 254 #if PLATFORM(IOS_FAMILY) 255 WKDataRef openPanelFileURLsMediaIcon() const { return m_openPanelFileURLsMediaIcon.get(); } 256 void setOpenPanelFileURLsMediaIcon(WKDataRef mediaIcon) { m_openPanelFileURLsMediaIcon = mediaIcon; } 257 #endif 258 254 259 void terminateNetworkProcess(); 255 260 void terminateServiceWorkerProcess(); … … 561 566 562 567 WKRetainPtr<WKArrayRef> m_openPanelFileURLs; 568 #if PLATFORM(IOS_FAMILY) 569 WKRetainPtr<WKDataRef> m_openPanelFileURLsMediaIcon; 570 #endif 563 571 564 572 std::unique_ptr<EventSenderProxy> m_eventSenderProxy; -
trunk/Tools/WebKitTestRunner/TestInvocation.cpp
r244390 r244557 795 795 } 796 796 797 #if PLATFORM(IOS_FAMILY) 798 if (WKStringIsEqualToUTF8CString(messageName, "SetOpenPanelFileURLsMediaIcon")) { 799 TestController::singleton().setOpenPanelFileURLsMediaIcon(static_cast<WKDataRef>(messageBody)); 800 return; 801 } 802 #endif 803 797 804 ASSERT_NOT_REACHED(); 798 805 }
Note:
See TracChangeset
for help on using the changeset viewer.