313
314bool PageClientImpl::handleRunOpenPanel(WebPageProxy*, WebFrameProxy*, WebOpenPanelParameters* parameters, WebOpenPanelResultListenerProxy* listener)
315{
316 if (!m_wkView) {
317 listener->invalidate();
318 return false;
319 }
320
321 NSWindow *window = [m_wkView window];
322
323 if (!window) {
324 listener->invalidate();
325 return false;
326 }
327
328 NSOpenPanel *panel = [NSOpenPanel openPanel];
329 [panel setAllowsMultipleSelection:parameters->allowMultipleFiles()];
330
331 [panel beginSheetModalForWindow:window completionHandler:^(NSInteger result)
332 {
333 if (NSFileHandlingPanelCancelButton == result)
334 listener->cancel();
335 else {
336 NSArray *fileURLs = [panel URLs];
337 NSUInteger count = [fileURLs count];
338 if (!count)
339 listener->cancel();
340 else {
341 Vector<RefPtr<API::Object>> urls;
342 urls.reserveInitialCapacity(count);
343 for (NSURL *fileURL in fileURLs)
344 urls.uncheckedAppend(adoptRef(toImpl(WKURLCreateWithCFURL((CFURLRef)fileURL))));
345 RefPtr<API::Array> fileURLsRef = API::Array::create(WTF::move(urls));
346
347 listener->chooseFiles(fileURLsRef.get());
348 }
349 }
350
351 }];
352
353 return true;
354}