Changeset 74139 in webkit


Ignore:
Timestamp:
Dec 15, 2010 1:52:51 PM (13 years ago)
Author:
weinig@apple.com
Message:

WebKit2: Can't add files to an <input type=file>
https://bugs.webkit.org/show_bug.cgi?id=51087

Reviewed by Anders Carlsson.

WebCore:

Add exported function.

  • WebCore.exp.in:

WebKit2:

  • Scripts/webkit2/messages.py:

Adds new types.

  • Shared/API/c/WKBase.h:

Adds WKOpenPanelParametersRef and WKOpenPanelResultListenerRef.

  • Shared/APIObject.h:

Adds TypeOpenPanelParameters and TypeOpenPanelResultListener.

  • Shared/WebOpenPanelParameters.cpp: Added.

(WebKit::WebOpenPanelParameters::create):
(WebKit::WebOpenPanelParameters::WebOpenPanelParameters):
(WebKit::WebOpenPanelParameters::~WebOpenPanelParameters):
(WebKit::WebOpenPanelParameters::Data::encode):
(WebKit::WebOpenPanelParameters::Data::decode):

  • Shared/WebOpenPanelParameters.h: Added.

(WebKit::WebOpenPanelParameters::allowMultipleFiles):
(WebKit::WebOpenPanelParameters::type):
Class representing options one can pass to open panel.

  • UIProcess/API/C/WKAPICast.h:

Add casts for WebOpenPanelParameters and WebOpenPanelResultListenerProxy.

  • UIProcess/API/C/WKOpenPanelParameters.cpp: Added.

(WKOpenPanelParametersGetTypeID):
(WKOpenPanelParametersGetAllowsMultipleFiles):

  • UIProcess/API/C/WKOpenPanelParameters.h: Added.
  • UIProcess/API/C/WKOpenPanelResultListener.cpp: Added.

(WKOpenPanelResultListenerGetTypeID):
(WKOpenPanelResultListenerChooseFiles):
(WKOpenPanelResultListenerCancel):

  • UIProcess/API/C/WKOpenPanelResultListener.h: Added.

Add API wrappers.

  • UIProcess/API/C/WKPage.h:

Add new UI callback, WKPageRunOpenPanelCallback.

  • UIProcess/API/C/WebKit2.h:

Add includes for new API headers.

  • UIProcess/API/qt/qwkpage.cpp:

(QWKPage::QWKPage):
Stub out the runOpenPanel callback.

  • UIProcess/WebOpenPanelResultListenerProxy.cpp: Added.

(WebKit::WebOpenPanelResultListenerProxy::WebOpenPanelResultListenerProxy):
(WebKit::WebOpenPanelResultListenerProxy::~WebOpenPanelResultListenerProxy):
(WebKit::WebOpenPanelResultListenerProxy::chooseFiles):
(WebKit::WebOpenPanelResultListenerProxy::cancel):
(WebKit::WebOpenPanelResultListenerProxy::invalidate):

  • UIProcess/WebOpenPanelResultListenerProxy.h: Added.

(WebKit::WebOpenPanelResultListenerProxy::create):
(WebKit::WebOpenPanelResultListenerProxy::type):
Adds the listener used to choose files for <input type=file>

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::runOpenPanel):
(WebKit::WebPageProxy::didChooseFilesForOpenPanel):
(WebKit::WebPageProxy::didCancelForOpenPanel):

  • UIProcess/WebPageProxy.h:
  • UIProcess/WebPageProxy.messages.in:
  • UIProcess/WebUIClient.cpp:

(WebKit::WebUIClient::runOpenPanel):

  • UIProcess/WebUIClient.h:
  • WebProcess/WebCoreSupport/WebChromeClient.cpp:

(WebKit::WebChromeClient::runOpenPanel):

  • WebProcess/WebPage/WebOpenPanelResultListener.cpp: Added.

(WebKit::WebOpenPanelResultListener::create):
(WebKit::WebOpenPanelResultListener::WebOpenPanelResultListener):
(WebKit::WebOpenPanelResultListener::~WebOpenPanelResultListener):
(WebKit::WebOpenPanelResultListener::didChooseFiles):

  • WebProcess/WebPage/WebOpenPanelResultListener.h: Added.

(WebKit::WebOpenPanelResultListener::disconnectFromPage):

  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::close):
(WebKit::WebPage::setActiveOpenPanelResultListener):
(WebKit::WebPage::didChooseFilesForOpenPanel):
(WebKit::WebPage::didCancelForOpenPanel):

  • WebProcess/WebPage/WebPage.h:

(WebKit::WebPage::activeOpenPanelResultListener):

  • WebProcess/WebPage/WebPage.messages.in:

Pipe through file choosing.

  • WebKit2.pro:
  • WebKit2.xcodeproj/project.pbxproj:
  • win/WebKit2.vcproj:
  • win/WebKit2Generated.make:

Add new files.

WebKitTools:

  • MiniBrowser/mac/BrowserWindowController.m:

(runOpenPanel):
(-[BrowserWindowController awakeFromNib]):
Add simple implementation of runOpenPanel callback.

  • MiniBrowser/win/BrowserView.cpp:

(BrowserView::create):

  • WebKitTestRunner/TestController.cpp:

(WTR::createOtherPage):
(WTR::TestController::initialize):
Stub out runOpenPanel callback.

Location:
trunk
Files:
10 added
27 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r74137 r74139  
     12010-12-15  Sam Weinig  <sam@webkit.org>
     2
     3        Reviewed by Anders Carlsson.
     4
     5        WebKit2: Can't add files to an <input type=file>
     6        https://bugs.webkit.org/show_bug.cgi?id=51087
     7
     8        Add exported function.
     9
     10        * WebCore.exp.in:
     11
    1122010-12-15  Andreas Kling  <andreas.kling@nokia.com>
    213
  • trunk/WebCore/WebCore.exp.in

    r73941 r74139  
    224224__ZN7WebCore12EventHandler16handleWheelEventERNS_18PlatformWheelEventE
    225225__ZN7WebCore12EventHandler17scrollRecursivelyENS_15ScrollDirectionENS_17ScrollGranularityEPNS_4NodeE
    226 __ZN7WebCore12EventHandler24logicalScrollRecursivelyENS_22ScrollLogicalDirectionENS_17ScrollGranularityEPNS_4NodeE
    227226__ZN7WebCore12EventHandler20hitTestResultAtPointERKNS_8IntPointEbbNS_17HitTestScrollbarsEjRKNS_7IntSizeE
    228227__ZN7WebCore12EventHandler21handleMousePressEventERKNS_18PlatformMouseEventE
    229228__ZN7WebCore12EventHandler23handleMouseReleaseEventERKNS_18PlatformMouseEventE
     229__ZN7WebCore12EventHandler24logicalScrollRecursivelyENS_22ScrollLogicalDirectionENS_17ScrollGranularityEPNS_4NodeE
    230230__ZN7WebCore12EventHandler27capsLockStateMayHaveChangedEv
    231231__ZN7WebCore12EventHandler7mouseUpEP7NSEvent
     
    274274__ZN7WebCore12SharedBufferC1EPKci
    275275__ZN7WebCore12SharedBufferD1Ev
     276__ZN7WebCore12SpellChecker8didCheckEiRKN3WTF6VectorINS_19SpellCheckingResultELm0EEE
    276277__ZN7WebCore12TextEncodingC1ERKN3WTF6StringE
    277278__ZN7WebCore12TextIterator11rangeLengthEPKNS_5RangeEb
     
    520521__ZN7WebCore23overrideDefaultLanguageERKN3WTF6StringE
    521522__ZN7WebCore24BinaryPropertyListWriter17writePropertyListEv
     523__ZN7WebCore24DocumentMarkerController13removeMarkersENS_14DocumentMarker10MarkerTypeE
    522524__ZN7WebCore24DocumentMarkerController14markersForNodeEPNS_4NodeE
    523 __ZN7WebCore24DocumentMarkerController13removeMarkersENS_14DocumentMarker10MarkerTypeE
    524525__ZN7WebCore24DocumentMarkerController14markersForNodeEPNS_4NodeE
    525526__ZN7WebCore24DocumentMarkerController23renderedRectsForMarkersENS_14DocumentMarker10MarkerTypeE
     
    925926__ZN7WebCore9plainTextEPKNS_5RangeENS_20TextIteratorBehaviorE
    926927__ZN7WebCore9toElementEN3JSC7JSValueE
    927 __ZN7WebCore12SpellChecker8didCheckEiRKN3WTF6VectorINS_19SpellCheckingResultELm0EEE
    928928__ZNK3JSC8Bindings10RootObject12globalObjectEv
    929929__ZNK3WTF6String14createCFStringEv
     
    10911091__ZNK7WebCore4KURL11createCFURLEv
    10921092__ZNK7WebCore4KURL11isLocalFileEv
     1093__ZNK7WebCore4KURL14fileSystemPathEv
    10931094__ZNK7WebCore4KURL17lastPathComponentEv
    10941095__ZNK7WebCore4KURL4hostEv
  • trunk/WebKit2/ChangeLog

    r74134 r74139  
     12010-12-15  Sam Weinig  <sam@webkit.org>
     2
     3        Reviewed by Anders Carlsson.
     4
     5        WebKit2: Can't add files to an <input type=file>
     6        https://bugs.webkit.org/show_bug.cgi?id=51087
     7
     8        * Scripts/webkit2/messages.py:
     9        Adds new types.
     10
     11        * Shared/API/c/WKBase.h:
     12        Adds WKOpenPanelParametersRef and WKOpenPanelResultListenerRef.
     13
     14        * Shared/APIObject.h:
     15        Adds TypeOpenPanelParameters and TypeOpenPanelResultListener.
     16
     17        * Shared/WebOpenPanelParameters.cpp: Added.
     18        (WebKit::WebOpenPanelParameters::create):
     19        (WebKit::WebOpenPanelParameters::WebOpenPanelParameters):
     20        (WebKit::WebOpenPanelParameters::~WebOpenPanelParameters):
     21        (WebKit::WebOpenPanelParameters::Data::encode):
     22        (WebKit::WebOpenPanelParameters::Data::decode):
     23        * Shared/WebOpenPanelParameters.h: Added.
     24        (WebKit::WebOpenPanelParameters::allowMultipleFiles):
     25        (WebKit::WebOpenPanelParameters::type):
     26        Class representing options one can pass to open panel.
     27
     28        * UIProcess/API/C/WKAPICast.h:
     29        Add casts for WebOpenPanelParameters and WebOpenPanelResultListenerProxy.
     30
     31        * UIProcess/API/C/WKOpenPanelParameters.cpp: Added.
     32        (WKOpenPanelParametersGetTypeID):
     33        (WKOpenPanelParametersGetAllowsMultipleFiles):
     34        * UIProcess/API/C/WKOpenPanelParameters.h: Added.
     35        * UIProcess/API/C/WKOpenPanelResultListener.cpp: Added.
     36        (WKOpenPanelResultListenerGetTypeID):
     37        (WKOpenPanelResultListenerChooseFiles):
     38        (WKOpenPanelResultListenerCancel):
     39        * UIProcess/API/C/WKOpenPanelResultListener.h: Added.
     40        Add API wrappers.
     41
     42        * UIProcess/API/C/WKPage.h:
     43        Add new UI callback, WKPageRunOpenPanelCallback.
     44
     45        * UIProcess/API/C/WebKit2.h:
     46        Add includes for new API headers.
     47
     48        * UIProcess/API/qt/qwkpage.cpp:
     49        (QWKPage::QWKPage):
     50        Stub out the runOpenPanel callback.
     51
     52        * UIProcess/WebOpenPanelResultListenerProxy.cpp: Added.
     53        (WebKit::WebOpenPanelResultListenerProxy::WebOpenPanelResultListenerProxy):
     54        (WebKit::WebOpenPanelResultListenerProxy::~WebOpenPanelResultListenerProxy):
     55        (WebKit::WebOpenPanelResultListenerProxy::chooseFiles):
     56        (WebKit::WebOpenPanelResultListenerProxy::cancel):
     57        (WebKit::WebOpenPanelResultListenerProxy::invalidate):
     58        * UIProcess/WebOpenPanelResultListenerProxy.h: Added.
     59        (WebKit::WebOpenPanelResultListenerProxy::create):
     60        (WebKit::WebOpenPanelResultListenerProxy::type):
     61        Adds the listener used to choose files for <input type=file>
     62
     63        * UIProcess/WebPageProxy.cpp:
     64        (WebKit::WebPageProxy::runOpenPanel):
     65        (WebKit::WebPageProxy::didChooseFilesForOpenPanel):
     66        (WebKit::WebPageProxy::didCancelForOpenPanel):
     67        * UIProcess/WebPageProxy.h:
     68        * UIProcess/WebPageProxy.messages.in:
     69        * UIProcess/WebUIClient.cpp:
     70        (WebKit::WebUIClient::runOpenPanel):
     71        * UIProcess/WebUIClient.h:
     72        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
     73        (WebKit::WebChromeClient::runOpenPanel):
     74        * WebProcess/WebPage/WebOpenPanelResultListener.cpp: Added.
     75        (WebKit::WebOpenPanelResultListener::create):
     76        (WebKit::WebOpenPanelResultListener::WebOpenPanelResultListener):
     77        (WebKit::WebOpenPanelResultListener::~WebOpenPanelResultListener):
     78        (WebKit::WebOpenPanelResultListener::didChooseFiles):
     79        * WebProcess/WebPage/WebOpenPanelResultListener.h: Added.
     80        (WebKit::WebOpenPanelResultListener::disconnectFromPage):
     81        * WebProcess/WebPage/WebPage.cpp:
     82        (WebKit::WebPage::close):
     83        (WebKit::WebPage::setActiveOpenPanelResultListener):
     84        (WebKit::WebPage::didChooseFilesForOpenPanel):
     85        (WebKit::WebPage::didCancelForOpenPanel):
     86        * WebProcess/WebPage/WebPage.h:
     87        (WebKit::WebPage::activeOpenPanelResultListener):
     88        * WebProcess/WebPage/WebPage.messages.in:
     89        Pipe through file choosing.
     90
     91        * WebKit2.pro:
     92        * WebKit2.xcodeproj/project.pbxproj:
     93        * win/WebKit2.vcproj:
     94        * win/WebKit2Generated.make:
     95        Add new files.
     96
    1972010-12-15  Anders Carlsson  <andersca@apple.com>
    298
  • trunk/WebKit2/Scripts/webkit2/messages.py

    r73796 r74139  
    250250def struct_or_class(namespace, type):
    251251    structs = frozenset([
     252        'WebCore::CompositionUnderline',
    252253        'WebCore::KeypressCommand',
    253         'WebCore::CompositionUnderline',
    254254        'WebCore::PluginInfo',
    255255        'WebCore::ViewportArguments',
     
    259259        'WebKit::PluginProcessCreationParameters',
    260260        'WebKit::WebNavigationDataStore',
     261        'WebKit::WebOpenPanelParameters::Data',
    261262        'WebKit::WebPageCreationParameters',
    262263        'WebKit::WebPreferencesStore',
     
    412413    special_cases = {
    413414        'WTF::String': '<wtf/text/WTFString.h>',
     415        'WebCore::CompositionUnderline': '<WebCore/Editor.h>',
    414416        'WebCore::KeypressCommand': '<WebCore/KeyboardEvent.h>',
    415417        'WebCore::PluginInfo': '<WebCore/PluginData.h>',
    416         'WebCore::CompositionUnderline': '<WebCore/Editor.h>',
    417418        'WebKit::WebKeyboardEvent': '"WebEvent.h"',
    418419        'WebKit::WebMouseEvent': '"WebEvent.h"',
     420        'WebKit::WebTouchEvent': '"WebEvent.h"',
    419421        'WebKit::WebWheelEvent': '"WebEvent.h"',
    420         'WebKit::WebTouchEvent': '"WebEvent.h"',
    421422    }
    422423    if type in special_cases:
  • trunk/WebKit2/Shared/API/c/WKBase.h

    r73965 r74139  
    7474typedef const struct OpaqueWKInspector* WKInspectorRef;
    7575typedef const struct OpaqueWKNavigationData* WKNavigationDataRef;
     76typedef const struct OpaqueWKOpenPanelParameters* WKOpenPanelParametersRef;
     77typedef const struct OpaqueWKOpenPanelResultListener* WKOpenPanelResultListenerRef;
    7678typedef const struct OpaqueWKPage* WKPageRef;
    7779typedef const struct OpaqueWKPageGroup* WKPageGroupRef;
  • trunk/WebKit2/Shared/APIObject.h

    r73986 r74139  
    7070        TypeInspector,
    7171        TypeNavigationData,
     72        TypeOpenPanelParameters,
     73        TypeOpenPanelResultListener,
    7274        TypePage,
    7375        TypePageGroup,
  • trunk/WebKit2/UIProcess/API/C/WKAPICast.h

    r73965 r74139  
    5454class WebInspectorProxy;
    5555class WebNavigationData;
     56class WebOpenPanelParameters;
     57class WebOpenPanelResultListenerProxy;
    5658class WebPageGroup;
    5759class WebPageProxy;
     
    7173WK_ADD_API_MAPPING(WKFrameRef, WebFrameProxy)
    7274WK_ADD_API_MAPPING(WKNavigationDataRef, WebNavigationData)
     75WK_ADD_API_MAPPING(WKOpenPanelParametersRef, WebOpenPanelParameters)
     76WK_ADD_API_MAPPING(WKOpenPanelResultListenerRef, WebOpenPanelResultListenerProxy)
    7377WK_ADD_API_MAPPING(WKPageGroupRef, WebPageGroup)
    7478WK_ADD_API_MAPPING(WKPageRef, WebPageProxy)
  • trunk/WebKit2/UIProcess/API/C/WKPage.h

    r74000 r74139  
    155155typedef void (*WKPageDidScrollCallback)(WKPageRef page, const void *clientInfo);
    156156typedef unsigned long long (*WKPageExceededDatabaseQuotaCallback)(WKPageRef page, WKFrameRef frame, WKSecurityOriginRef origin, WKStringRef databaseName, WKStringRef displayName, unsigned long long currentQuota, unsigned long long currentUsage, unsigned long long expectedUsage, const void *clientInfo);
    157 
     157typedef void (*WKPageRunOpenPanelCallback)(WKPageRef page, WKFrameRef frame, WKOpenPanelParametersRef parameters, WKOpenPanelResultListenerRef listener, const void *clientInfo);
    158158
    159159struct WKPageUIClient {
     
    183183    WKPageDidScrollCallback                                             pageDidScroll;
    184184    WKPageExceededDatabaseQuotaCallback                                 exceededDatabaseQuota;
     185    WKPageRunOpenPanelCallback                                          runOpenPanel;
    185186};
    186187typedef struct WKPageUIClient WKPageUIClient;
  • trunk/WebKit2/UIProcess/API/C/WebKit2.h

    r73965 r74139  
    4444#include <WebKit2/WKNavigationData.h>
    4545#include <WebKit2/WKNumber.h>
     46#include <WebKit2/WKOpenPanelParameters.h>
     47#include <WebKit2/WKOpenPanelResultListener.h>
    4648#include <WebKit2/WKPage.h>
    4749#include <WebKit2/WKPageGroup.h>
  • trunk/WebKit2/UIProcess/API/qt/qwkpage.cpp

    r73986 r74139  
    361361        0,  /* didDraw */
    362362        0,  /* pageDidScroll */
    363         0   /* exceededDatabaseQuota */
     363        0,  /* exceededDatabaseQuota */
     364        0   /* runOpenPanel */
    364365    };
    365366    WKPageSetPageUIClient(pageRef(), &uiClient);
  • trunk/WebKit2/UIProcess/WebPageProxy.cpp

    r74046 r74139  
    4848#include "WebFormSubmissionListenerProxy.h"
    4949#include "WebFramePolicyListenerProxy.h"
     50#include "WebOpenPanelResultListenerProxy.h"
    5051#include "WebPageCreationParameters.h"
    5152#include "WebPageGroup.h"
     
    232233#endif
    233234
     235    if (m_openPanelResultListener) {
     236        m_openPanelResultListener->invalidate();
     237        m_openPanelResultListener = 0;
     238    }
     239
    234240    m_pageTitle = String();
    235241    m_toolTip = String();
     
    12521258}
    12531259
     1260void WebPageProxy::runOpenPanel(uint64_t frameID, const WebOpenPanelParameters::Data& data)
     1261{
     1262    if (m_openPanelResultListener) {
     1263        m_openPanelResultListener->invalidate();
     1264        m_openPanelResultListener = 0;
     1265    }
     1266
     1267    m_openPanelResultListener = WebOpenPanelResultListenerProxy::create(this);
     1268
     1269    if (!m_uiClient.runOpenPanel(this, process()->webFrame(frameID), data, m_openPanelResultListener.get()))
     1270        didCancelForOpenPanel();
     1271}
     1272
    12541273#if PLATFORM(QT)
    12551274void WebPageProxy::didChangeContentsSize(const WebCore::IntSize& size)
     
    14321451   
    14331452    process()->send(Messages::WebPage::DidSelectItemFromActiveContextMenu(item), m_pageID);
     1453}
     1454
     1455void WebPageProxy::didChooseFilesForOpenPanel(const Vector<String>& fileURLs)
     1456{
     1457    if (!isValid())
     1458        return;
     1459
     1460    // FIXME: This also needs to send a sandbox extension for these paths.
     1461    process()->send(Messages::WebPage::DidChooseFilesForOpenPanel(fileURLs), m_pageID);
     1462
     1463    m_openPanelResultListener->invalidate();
     1464    m_openPanelResultListener = 0;
     1465}
     1466
     1467void WebPageProxy::didCancelForOpenPanel()
     1468{
     1469    if (!isValid())
     1470        return;
     1471
     1472    process()->send(Messages::WebPage::DidCancelForOpenPanel(), m_pageID);
     1473   
     1474    m_openPanelResultListener->invalidate();
     1475    m_openPanelResultListener = 0;
    14341476}
    14351477
     
    16181660#endif
    16191661
     1662    if (m_openPanelResultListener) {
     1663        m_openPanelResultListener->invalidate();
     1664        m_openPanelResultListener = 0;
     1665    }
     1666
    16201667    m_pageTitle = String();
    16211668    m_toolTip = String();
  • trunk/WebKit2/UIProcess/WebPageProxy.h

    r74046 r74139  
    7979class PlatformCertificateInfo;
    8080class StringPairVector;
     81class WebOpenPanelResultListenerProxy;
    8182class WebBackForwardList;
    8283class WebBackForwardListItem;
     
    271272#endif
    272273
     274    // Called by the WebContextMenuProxy.
    273275    void contextMenuItemSelected(const WebContextMenuItemData&);
     276
     277    // Called by the WebOpenPanelResultListenerProxy.
     278    void didChooseFilesForOpenPanel(const Vector<String>&);
     279    void didCancelForOpenPanel();
    274280
    275281    WebPageCreationParameters creationParameters(const WebCore::IntSize&) const;
     
    339345    void didChangeViewportData(const WebCore::ViewportArguments&);
    340346    void pageDidScroll();
     347    void runOpenPanel(uint64_t frameID, const WebOpenPanelParameters::Data&);
     348
    341349#if ENABLE(TILED_BACKING_STORE)
    342350    void pageDidRequestScroll(const WebCore::IntSize&);
     
    439447    RefPtr<WebPopupMenuProxy> m_activePopupMenu;
    440448    RefPtr<WebContextMenuProxy> m_activeContextMenu;
     449    RefPtr<WebOpenPanelResultListenerProxy> m_openPanelResultListener;
    441450
    442451    double m_estimatedProgress;
  • trunk/WebKit2/UIProcess/WebPageProxy.messages.in

    r73968 r74139  
    5151    RunBeforeUnloadConfirmPanel(WTF::String message, uint64_t frameID) -> (bool shouldClose)
    5252    PageDidScroll()
     53    RunOpenPanel(uint64_t frameID, WebKit::WebOpenPanelParameters::Data parameters)
     54
    5355#if ENABLE(TILED_BACKING_STORE)
    5456    PageDidRequestScroll(WebCore::IntSize delta)
  • trunk/WebKit2/UIProcess/WebUIClient.cpp

    r73533 r74139  
    3030#include "WKAPICast.h"
    3131#include "WebNumber.h"
     32#include "WebOpenPanelResultListenerProxy.h"
    3233#include "WebPageProxy.h"
    3334#include <WebCore/FloatRect.h>
     
    246247}
    247248
     249bool WebUIClient::runOpenPanel(WebPageProxy* page, WebFrameProxy* frame, const WebOpenPanelParameters::Data& parameterData, WebOpenPanelResultListenerProxy* listener)
     250{
     251    if (!m_client.runOpenPanel)
     252        return false;
     253
     254    RefPtr<WebOpenPanelParameters> parameters = WebOpenPanelParameters::create(parameterData);
     255    m_client.runOpenPanel(toAPI(page), toAPI(frame), toAPI(parameters.get()), toAPI(listener), m_client.clientInfo);
     256    return true;
     257}
     258
    248259} // namespace WebKit
  • trunk/WebKit2/UIProcess/WebUIClient.h

    r73533 r74139  
    3030#include "WKPage.h"
    3131#include "WebEvent.h"
     32#include "WebOpenPanelParameters.h"
    3233#include <wtf/Forward.h>
    3334#include <wtf/PassRefPtr.h>
     
    4647class WebPageProxy;
    4748class WebSecurityOrigin;
     49class WebOpenPanelResultListenerProxy;
    4850
    4951class WebUIClient : public APIClient<WKPageUIClient> {
     
    8183
    8284    unsigned long long exceededDatabaseQuota(WebPageProxy*, WebFrameProxy*, WebSecurityOrigin*, const String& databaseName, const String& databaseDisplayName, unsigned long long currentQuota, unsigned long long currentUsage, unsigned long long expectedUsage);
     85
     86    bool runOpenPanel(WebPageProxy*, WebFrameProxy*, const WebOpenPanelParameters::Data&, WebOpenPanelResultListenerProxy*);
    8387};
    8488
  • trunk/WebKit2/WebKit2.pro

    r74079 r74139  
    262262    Shared/WebNavigationDataStore.h \
    263263    Shared/WebNumber.h \
     264    Shared/WebOpenPanelParameters.h \
    264265    Shared/WebPageCreationParameters.h \
    265266    Shared/WebPageGroupData.h \
     
    289290    UIProcess/API/C/WKFramePolicyListener.h \
    290291    UIProcess/API/C/WKInspector.h \
     292    UIProcess/API/C/WKOpenPanelParameters.h \
     293    UIProcess/API/C/WKOpenPanelResultListener.h \
    291294    UIProcess/API/C/WKNavigationData.h \
    292295    UIProcess/API/C/WKPage.h \
     
    346349    UIProcess/WebNavigationData.h \
    347350    UIProcess/WebPageContextMenuClient.h \
     351    UIProcess/WebOpenPanelResultListenerProxy.h \
    348352    UIProcess/WebPageGroup.h \
    349353    UIProcess/WebPageProxy.h \
     
    408412    WebProcess/WebPage/WebFrame.h \
    409413    WebProcess/WebPage/WebInspector.h \
     414    WebProcess/WebPage/WebOpenPanelResultListener.h \
    410415    WebProcess/WebPage/WebPage.h \
    411416    WebProcess/WebPage/WebPageGroupProxy.h \
     
    459464    Shared/WebKeyboardEvent.cpp \
    460465    Shared/WebMouseEvent.cpp \
     466    Shared/WebOpenPanelParameters.cpp \
    461467    Shared/WebPageCreationParameters.cpp \
    462468    Shared/WebPageGroupData.cpp \
     
    488494    UIProcess/API/C/WKFramePolicyListener.cpp \
    489495    UIProcess/API/C/WKInspector.cpp \
     496    UIProcess/API/C/WKOpenPanelParameters.cpp \
     497    UIProcess/API/C/WKOpenPanelResultListener.cpp \
    490498    UIProcess/API/C/WKNavigationData.cpp \
    491499    UIProcess/API/C/WKPage.cpp \
     
    537545    UIProcess/WebNavigationData.cpp \
    538546    UIProcess/WebPageContextMenuClient.cpp \
     547    UIProcess/WebOpenPanelResultListenerProxy.cpp \
    539548    UIProcess/WebPageGroup.cpp \
    540549    UIProcess/WebPageProxy.cpp \
     
    618627    WebProcess/WebPage/WebFrame.cpp \
    619628    WebProcess/WebPage/WebInspector.cpp \
    620     WebProcess/WebPage/qt/WebInspectorQt.cpp \
     629    WebProcess/WebPage/WebOpenPanelResultListener.cpp \
    621630    WebProcess/WebPage/WebPage.cpp \
    622631    WebProcess/WebPage/WebPageGroupProxy.cpp \
     632    WebProcess/WebPage/qt/WebInspectorQt.cpp \
    623633    WebProcess/WebPage/qt/ChunkedUpdateDrawingAreaQt.cpp \
    624634    WebProcess/WebPage/qt/TiledDrawingAreaQt.cpp \
  • trunk/WebKit2/WebKit2.xcodeproj/project.pbxproj

    r74077 r74139  
    325325                BC1B419811D41D570011E8DD /* WKBundlePagePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = BC1B419711D41D570011E8DD /* WKBundlePagePrivate.h */; settings = {ATTRIBUTES = (Private, ); }; };
    326326                BC1DD7B2114DC396005ADAF3 /* WebCoreArgumentCoders.h in Headers */ = {isa = PBXBuildFile; fileRef = BC1DD7B1114DC396005ADAF3 /* WebCoreArgumentCoders.h */; };
     327                BC1DFE8F12B31CA8005DF730 /* WKOpenPanelResultListener.h in Headers */ = {isa = PBXBuildFile; fileRef = BC1DFE8D12B31CA8005DF730 /* WKOpenPanelResultListener.h */; settings = {ATTRIBUTES = (Public, ); }; };
     328                BC1DFEA412B31F87005DF730 /* WebOpenPanelResultListenerProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = BC1DFEA212B31F87005DF730 /* WebOpenPanelResultListenerProxy.h */; };
    327329                BC204EE211C83E98008F3375 /* InjectedBundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC204EE011C83E98008F3375 /* InjectedBundle.cpp */; };
    328330                BC204EE311C83E98008F3375 /* InjectedBundle.h in Headers */ = {isa = PBXBuildFile; fileRef = BC204EE111C83E98008F3375 /* InjectedBundle.h */; };
     
    445447                BC84EB1812A7100C0083F2DA /* WebPreferencesMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC84EB1712A7100C0083F2DA /* WebPreferencesMac.mm */; };
    446448                BC857E8712B71EBB00EDEB2E /* WebPageProxyMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC857E8512B71EBB00EDEB2E /* WebPageProxyMac.mm */; };
     449                BC857F7E12B82CEE00EDEB2E /* WebOpenPanelResultListenerProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC1DFEA312B31F87005DF730 /* WebOpenPanelResultListenerProxy.cpp */; };
     450                BC857F8512B82D0B00EDEB2E /* WebOpenPanelResultListener.h in Headers */ = {isa = PBXBuildFile; fileRef = BC857F8312B82D0B00EDEB2E /* WebOpenPanelResultListener.h */; };
     451                BC857F8612B82D0B00EDEB2E /* WebOpenPanelResultListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC857F8412B82D0B00EDEB2E /* WebOpenPanelResultListener.cpp */; };
     452                BC857FB512B830E600EDEB2E /* WebOpenPanelParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = BC857FB312B830E600EDEB2E /* WebOpenPanelParameters.h */; };
     453                BC857FB612B830E600EDEB2E /* WebOpenPanelParameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC857FB412B830E600EDEB2E /* WebOpenPanelParameters.cpp */; };
     454                BC857FE612B843D800EDEB2E /* WKOpenPanelParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = BC857FE412B843D800EDEB2E /* WKOpenPanelParameters.h */; settings = {ATTRIBUTES = (Public, ); }; };
     455                BC85806212B8505700EDEB2E /* WKOpenPanelResultListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC1DFE8E12B31CA8005DF730 /* WKOpenPanelResultListener.cpp */; };
     456                BC85806312B8505700EDEB2E /* WKOpenPanelParameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC857FE512B843D800EDEB2E /* WKOpenPanelParameters.cpp */; };
    447457                BC8699B5116AADAA002A925B /* WKView.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8699B2116AADAA002A925B /* WKView.h */; settings = {ATTRIBUTES = (Public, ); }; };
    448458                BC8699B6116AADAA002A925B /* WKView.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC8699B3116AADAA002A925B /* WKView.mm */; };
     
    976986                BC1B419711D41D570011E8DD /* WKBundlePagePrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKBundlePagePrivate.h; sourceTree = "<group>"; };
    977987                BC1DD7B1114DC396005ADAF3 /* WebCoreArgumentCoders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebCoreArgumentCoders.h; sourceTree = "<group>"; };
     988                BC1DFE8D12B31CA8005DF730 /* WKOpenPanelResultListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKOpenPanelResultListener.h; sourceTree = "<group>"; };
     989                BC1DFE8E12B31CA8005DF730 /* WKOpenPanelResultListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKOpenPanelResultListener.cpp; sourceTree = "<group>"; };
     990                BC1DFEA212B31F87005DF730 /* WebOpenPanelResultListenerProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebOpenPanelResultListenerProxy.h; sourceTree = "<group>"; };
     991                BC1DFEA312B31F87005DF730 /* WebOpenPanelResultListenerProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebOpenPanelResultListenerProxy.cpp; sourceTree = "<group>"; };
    978992                BC204EE011C83E98008F3375 /* InjectedBundle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InjectedBundle.cpp; sourceTree = "<group>"; };
    979993                BC204EE111C83E98008F3375 /* InjectedBundle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InjectedBundle.h; sourceTree = "<group>"; };
     
    10961110                BC84EB1712A7100C0083F2DA /* WebPreferencesMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebPreferencesMac.mm; sourceTree = "<group>"; };
    10971111                BC857E8512B71EBB00EDEB2E /* WebPageProxyMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebPageProxyMac.mm; sourceTree = "<group>"; };
     1112                BC857F8312B82D0B00EDEB2E /* WebOpenPanelResultListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebOpenPanelResultListener.h; sourceTree = "<group>"; };
     1113                BC857F8412B82D0B00EDEB2E /* WebOpenPanelResultListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebOpenPanelResultListener.cpp; sourceTree = "<group>"; };
     1114                BC857FB312B830E600EDEB2E /* WebOpenPanelParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebOpenPanelParameters.h; sourceTree = "<group>"; };
     1115                BC857FB412B830E600EDEB2E /* WebOpenPanelParameters.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebOpenPanelParameters.cpp; sourceTree = "<group>"; };
     1116                BC857FE412B843D800EDEB2E /* WKOpenPanelParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKOpenPanelParameters.h; sourceTree = "<group>"; };
     1117                BC857FE512B843D800EDEB2E /* WKOpenPanelParameters.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKOpenPanelParameters.cpp; sourceTree = "<group>"; };
    10981118                BC8699B2116AADAA002A925B /* WKView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKView.h; sourceTree = "<group>"; };
    10991119                BC8699B3116AADAA002A925B /* WKView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKView.mm; sourceTree = "<group>"; };
     
    16001620                                BC5744ED12638FB3006F0F12 /* WebPopupItem.cpp */,
    16011621                                BC5744EE12638FB3006F0F12 /* WebPopupItem.h */,
     1622                                BC857FB412B830E600EDEB2E /* WebOpenPanelParameters.cpp */,
     1623                                BC857FB312B830E600EDEB2E /* WebOpenPanelParameters.h */,
    16021624                                C06C6093124C14430001682F /* WebPageCreationParameters.cpp */,
    16031625                                C06C6094124C14430001682F /* WebPageCreationParameters.h */,
     
    18421864                                1C8E281E1275D15400BC7BD0 /* WebInspector.h */,
    18431865                                1C8E2A1C1277833F00BC7BD0 /* WebInspector.messages.in */,
     1866                                BC857F8412B82D0B00EDEB2E /* WebOpenPanelResultListener.cpp */,
     1867                                BC857F8312B82D0B00EDEB2E /* WebOpenPanelResultListener.h */,
    18441868                                BC963D6A113DD19200574BE2 /* WebPage.cpp */,
    18451869                                BC032D8B10F437A00058C15A /* WebPage.h */,
     
    19161940                                BCF69FA11176D01400471A52 /* WebNavigationData.cpp */,
    19171941                                BCF69FA01176D01400471A52 /* WebNavigationData.h */,
     1942                                BC1DFEA312B31F87005DF730 /* WebOpenPanelResultListenerProxy.cpp */,
     1943                                BC1DFEA212B31F87005DF730 /* WebOpenPanelResultListenerProxy.h */,
    19181944                                5153569A1291B1D2000749DC /* WebPageContextMenuClient.cpp */,
    19191945                                5153569B1291B1D2000749DC /* WebPageContextMenuClient.h */,
     
    19762002                                BCE469571214EDF4000B98EB /* WKFormSubmissionListener.cpp */,
    19772003                                BCE469581214EDF4000B98EB /* WKFormSubmissionListener.h */,
     2004                                BC1DFE8E12B31CA8005DF730 /* WKOpenPanelResultListener.cpp */,
     2005                                BC1DFE8D12B31CA8005DF730 /* WKOpenPanelResultListener.h */,
     2006                                BC857FE512B843D800EDEB2E /* WKOpenPanelParameters.cpp */,
     2007                                BC857FE412B843D800EDEB2E /* WKOpenPanelParameters.h */,
    19782008                                BCD01398110FA420003B8A67 /* WKFrame.cpp */,
    19792009                                BCD01397110FA420003B8A67 /* WKFrame.h */,
     
    27192749                                F62A76B712B1B25F0005F1B6 /* WebDatabaseManagerMessages.h in Headers */,
    27202750                                F62A76B912B1B25F0005F1B6 /* WebDatabaseManagerProxyMessages.h in Headers */,
     2751                                BC1DFE8F12B31CA8005DF730 /* WKOpenPanelResultListener.h in Headers */,
     2752                                BC1DFEA412B31F87005DF730 /* WebOpenPanelResultListenerProxy.h in Headers */,
     2753                                BC857F8512B82D0B00EDEB2E /* WebOpenPanelResultListener.h in Headers */,
     2754                                BC857FB512B830E600EDEB2E /* WebOpenPanelParameters.h in Headers */,
     2755                                BC857FE612B843D800EDEB2E /* WKOpenPanelParameters.h in Headers */,
    27212756                                1A4A9AA812B7E796008FE984 /* WKTextInputWindowController.h in Headers */,
    27222757                                1A4A9C5612B816CF008FE984 /* NetscapePluginModule.h in Headers */,
     
    31363171                                F62A76B812B1B25F0005F1B6 /* WebDatabaseManagerProxyMessageReceiver.cpp in Sources */,
    31373172                                BC857E8712B71EBB00EDEB2E /* WebPageProxyMac.mm in Sources */,
     3173                                BC857F7E12B82CEE00EDEB2E /* WebOpenPanelResultListenerProxy.cpp in Sources */,
     3174                                BC857F8612B82D0B00EDEB2E /* WebOpenPanelResultListener.cpp in Sources */,
     3175                                BC857FB612B830E600EDEB2E /* WebOpenPanelParameters.cpp in Sources */,
     3176                                BC85806212B8505700EDEB2E /* WKOpenPanelResultListener.cpp in Sources */,
     3177                                BC85806312B8505700EDEB2E /* WKOpenPanelParameters.cpp in Sources */,
    31383178                                1A4A9AA912B7E796008FE984 /* WKTextInputWindowController.mm in Sources */,
    31393179                                1A4A9C5512B816CF008FE984 /* NetscapePluginModule.cpp in Sources */,
  • trunk/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp

    r73930 r74139  
    3636#include "WebFrame.h"
    3737#include "WebFrameLoaderClient.h"
     38#include "WebOpenPanelParameters.h"
     39#include "WebOpenPanelResultListener.h"
    3840#include "WebPage.h"
    3941#include "WebPageCreationParameters.h"
     
    509511}
    510512
    511 void WebChromeClient::runOpenPanel(Frame*, PassRefPtr<FileChooser>)
    512 {
    513     notImplemented();
     513void WebChromeClient::runOpenPanel(Frame* frame, PassRefPtr<FileChooser> prpFileChooser)
     514{
     515    if (m_page->activeOpenPanelResultListener())
     516        return;
     517
     518    RefPtr<FileChooser> fileChooser = prpFileChooser;
     519
     520    m_page->setActiveOpenPanelResultListener(WebOpenPanelResultListener::create(m_page, fileChooser.get()));
     521   
     522    WebOpenPanelParameters::Data parameters;
     523    parameters.allowMultipleFiles = fileChooser->allowsMultipleFiles();
     524#if ENABLE(DIRECTORY_UPLOAD)
     525    parameters.allowsDirectoryUpload = fileChooser->allowsDirectoryUpload();
     526#else
     527    parameters.allowsDirectoryUpload = false;
     528#endif
     529    parameters.acceptTypes = fileChooser->acceptTypes();
     530    parameters.filenames = fileChooser->filenames();
     531
     532    m_page->send(Messages::WebPageProxy::RunOpenPanel(static_cast<WebFrameLoaderClient*>(frame->loader()->client())->webFrame()->frameID(), parameters));
    514533}
    515534
  • trunk/WebKit2/WebProcess/WebPage/WebPage.cpp

    r74131 r74139  
    4343#include "WebContextMessages.h"
    4444#include "WebCoreArgumentCoders.h"
     45#include "WebOpenPanelResultListener.h"
    4546#include "WebDragClient.h"
    4647#include "WebEditorClient.h"
     
    329330    }
    330331
     332    if (m_activeOpenPanelResultListener) {
     333        m_activeOpenPanelResultListener->disconnectFromPage();
     334        m_activeOpenPanelResultListener = 0;
     335    }
     336
    331337    m_sandboxExtensionTracker.invalidate();
    332338
     
    10661072}
    10671073
     1074void WebPage::setActiveOpenPanelResultListener(PassRefPtr<WebOpenPanelResultListener> openPanelResultListener)
     1075{
     1076    m_activeOpenPanelResultListener = openPanelResultListener;
     1077}
     1078
    10681079bool WebPage::findStringFromInjectedBundle(const String& target, FindOptions options)
    10691080{
     
    10931104    m_activePopupMenu->didChangeSelectedIndex(newIndex);
    10941105    m_activePopupMenu = 0;
     1106}
     1107
     1108void WebPage::didChooseFilesForOpenPanel(const Vector<String>& files)
     1109{
     1110    if (!m_activeOpenPanelResultListener)
     1111        return;
     1112
     1113    m_activeOpenPanelResultListener->didChooseFiles(files);
     1114    m_activeOpenPanelResultListener = 0;
     1115}
     1116
     1117void WebPage::didCancelForOpenPanel()
     1118{
     1119    m_activeOpenPanelResultListener = 0;
    10951120}
    10961121
  • trunk/WebKit2/WebProcess/WebPage/WebPage.h

    r74131 r74139  
    7878class WebKeyboardEvent;
    7979class WebMouseEvent;
     80class WebOpenPanelResultListener;
    8081class WebPageGroupProxy;
    8182class WebPopupMenu;
     
    137138
    138139    void setActivePopupMenu(WebPopupMenu*);
     140   
     141    WebOpenPanelResultListener* activeOpenPanelResultListener() const { return m_activeOpenPanelResultListener.get(); }
     142    void setActiveOpenPanelResultListener(PassRefPtr<WebOpenPanelResultListener>);
    139143
    140144    // -- Called from WebProcess.
     
    328332    void didChangeSelectedIndexForActivePopupMenu(int32_t newIndex);
    329333
     334    void didChooseFilesForOpenPanel(const Vector<String>&);
     335    void didCancelForOpenPanel();
     336
    330337#if ENABLE(CONTEXT_MENUS)
    331338    void didSelectItemFromActiveContextMenu(const WebContextMenuItemData&);
     
    390397    RefPtr<WebPopupMenu> m_activePopupMenu;
    391398    RefPtr<WebContextMenu> m_contextMenu;
     399    RefPtr<WebOpenPanelResultListener> m_activeOpenPanelResultListener;
    392400
    393401    SandboxExtensionTracker m_sandboxExtensionTracker;
  • trunk/WebKit2/WebProcess/WebPage/WebPage.messages.in

    r74046 r74139  
    5555    RunJavaScriptInMainFrame(WTF::String script, uint64_t callbackID)
    5656
    57 
    5857    PreferencesDidChange(WebKit::WebPreferencesStore store)
    5958
     
    9291    DidSelectItemFromActiveContextMenu(WebKit::WebContextMenuItemData menuItem);
    9392
     93    # Open panel.
     94    DidChooseFilesForOpenPanel(Vector<WTF::String> fileURLs)
     95    DidCancelForOpenPanel()
     96
    9497    SetWindowResizerSize(WebCore::IntSize intersectsView)
    9598
     
    104107    FirstRectForCharacterRange(uint64_t location, uint64_t length) -> (WebCore::IntRect resultRect)
    105108#endif
    106         // This is a dummy message to avoid breaking the build for platforms that don't require
    107         // synchronous messages.
    108         Dummy() -> (bool dummyReturn)
     109
    109110#if PLATFORM(QT)
    110111    FindZoomableAreaForPoint(WebCore::IntPoint point)
    111112#endif
     113
     114    // This is a dummy message to avoid breaking the build for platforms that don't require
     115    // synchronous messages.
     116    Dummy() -> (bool dummyReturn)
    112117}
  • trunk/WebKit2/win/WebKit2.vcproj

    r74073 r74139  
    572572                        </File>
    573573                        <File
     574                                RelativePath="..\Shared\WebOpenPanelParameters.h"
     575                                >
     576                        </File>
     577                        <File
     578                                RelativePath="..\Shared\WebOpenPanelParameters.h"
     579                                >
     580                        </File>
     581                        <File
    574582                                RelativePath="..\Shared\WebPageCreationParameters.cpp"
    575583                                >
     
    13631371                                </File>
    13641372                                <File
     1373                                        RelativePath="..\WebProcess\WebPage\WebOpenPanelResultListener.cpp"
     1374                                        >
     1375                                </File>
     1376                                <File
     1377                                        RelativePath="..\WebProcess\WebPage\WebOpenPanelResultListener.h"
     1378                                        >
     1379                                </File>
     1380                                <File
    13651381                                        RelativePath="..\WebProcess\WebPage\WebPage.cpp"
    13661382                                        >
     
    20642080                        </File>
    20652081                        <File
     2082                                RelativePath="..\UIProcess\WebOpenPanelResultListenerProxy.cpp"
     2083                                >
     2084                        </File>
     2085                        <File
     2086                                RelativePath="..\UIProcess\WebOpenPanelResultListenerProxy.h"
     2087                                >
     2088                        </File>
     2089                        <File
    20662090                                RelativePath="..\UIProcess\WebPageContextMenuClient.cpp"
    20672091                                >
     
    22712295                                        <File
    22722296                                                RelativePath="..\UIProcess\API\C\WKNavigationData.h"
     2297                                                >
     2298                                        </File>
     2299                                        <File
     2300                                                RelativePath="..\UIProcess\API\C\WKOpenPanelParameters.cpp"
     2301                                                >
     2302                                        </File>
     2303                                        <File
     2304                                                RelativePath="..\UIProcess\API\C\WKOpenPanelParameters.h"
     2305                                                >
     2306                                        </File>
     2307                                        <File
     2308                                                RelativePath="..\UIProcess\API\C\WKOpenPanelResultListener.cpp"
     2309                                                >
     2310                                        </File>
     2311                                        <File
     2312                                                RelativePath="..\UIProcess\API\C\WKOpenPanelResultListener.h"
    22732313                                                >
    22742314                                        </File>
  • trunk/WebKit2/win/WebKit2Generated.make

    r73965 r74139  
    5050    xcopy /y /d "..\UIProcess\API\C\WKNativeEvent.h" "$(WEBKITOUTPUTDIR)\include\WebKit2"
    5151    xcopy /y /d "..\UIProcess\API\C\WKNavigationData.h" "$(WEBKITOUTPUTDIR)\include\WebKit2"
     52    xcopy /y /d "..\UIProcess\API\C\WKOpenPanelParameters.h" "$(WEBKITOUTPUTDIR)\include\WebKit2"
     53    xcopy /y /d "..\UIProcess\API\C\WKOpenPanelResultListener.h" "$(WEBKITOUTPUTDIR)\include\WebKit2"
    5254    xcopy /y /d "..\UIProcess\API\C\WKPage.h" "$(WEBKITOUTPUTDIR)\include\WebKit2"
    5355    xcopy /y /d "..\UIProcess\API\C\WKPageGroup.h" "$(WEBKITOUTPUTDIR)\include\WebKit2"
  • trunk/WebKitTools/ChangeLog

    r74138 r74139  
     12010-12-15  Sam Weinig  <sam@webkit.org>
     2
     3        Reviewed by Anders Carlsson.
     4
     5        WebKit2: Can't add files to an <input type=file>
     6        https://bugs.webkit.org/show_bug.cgi?id=51087
     7
     8        * MiniBrowser/mac/BrowserWindowController.m:
     9        (runOpenPanel):
     10        (-[BrowserWindowController awakeFromNib]):
     11        Add simple implementation of runOpenPanel callback.
     12
     13        * MiniBrowser/win/BrowserView.cpp:
     14        (BrowserView::create):
     15        * WebKitTestRunner/TestController.cpp:
     16        (WTR::createOtherPage):
     17        (WTR::TestController::initialize):
     18        Stub out runOpenPanel callback.
     19
    1202010-12-14  Eric Seidel  <eric@webkit.org>
    221
  • trunk/WebKitTools/MiniBrowser/mac/BrowserWindowController.m

    r73965 r74139  
    534534
    535535    return button == NSAlertFirstButtonReturn;
     536}
     537
     538static void runOpenPanel(WKPageRef page, WKFrameRef frame, WKOpenPanelParametersRef parameters, WKOpenPanelResultListenerRef listener, const void* clientInfo)
     539{
     540    NSOpenPanel *openPanel = [NSOpenPanel openPanel];
     541    [openPanel setAllowsMultipleSelection:WKOpenPanelParametersGetAllowsMultipleFiles(parameters)];
     542
     543    WKRetain(listener);
     544
     545    [openPanel beginSheetModalForWindow:[(BrowserWindowController *)clientInfo window] completionHandler:^(NSInteger result) {
     546        if (result == NSFileHandlingPanelOKButton) {
     547            WKMutableArrayRef fileURLs = WKMutableArrayCreate();
     548
     549            NSURL *nsURL;
     550            for (nsURL in [openPanel URLs]) {
     551                WKURLRef wkURL = WKURLCreateWithCFURL((CFURLRef)nsURL);
     552                WKArrayAppendItem(fileURLs, wkURL);
     553                WKRelease(wkURL);
     554            }
     555
     556            WKOpenPanelResultListenerChooseFiles(listener, fileURLs);
     557
     558            WKRelease(fileURLs);
     559        } else
     560            WKOpenPanelResultListenerCancel(listener);
     561       
     562        WKRelease(listener);
     563    }];
    536564}
    537565
     
    608636        0,          /* didDraw */
    609637        0,          /* pageDidScroll */
    610         0           /* exceededDatabaseQuota */
     638        0,          /* exceededDatabaseQuota */
     639        runOpenPanel
    611640    };
    612641    WKPageSetPageUIClient(_webView.pageRef, &uiClient);
  • trunk/WebKitTools/MiniBrowser/win/BrowserView.cpp

    r73965 r74139  
    118118        0,          /* didDraw */
    119119        0,          /* pageDidScroll */
    120         0           /* exceededDatabaseQuota */
     120        0,          /* exceededDatabaseQuota */
     121        0           /* runOpenPanel */
    121122    };
    122123
  • trunk/WebKitTools/WebKitTestRunner/TestController.cpp

    r73976 r74139  
    137137        0, // didDraw
    138138        0, // pageDidScroll
    139         0  // exceededDatabaseQuota
     139        0, // exceededDatabaseQuota
     140        0  // runOpenPanel
    140141    };
    141142    WKPageSetPageUIClient(newPage, &otherPageUIClient);
     
    239240        0, // didDraw
    240241        0, // pageDidScroll
    241         0  // exceededDatabaseQuota
     242        0, // exceededDatabaseQuota
     243        0  // runOpenPanel
    242244    };
    243245    WKPageSetPageUIClient(m_mainWebView->page(), &pageUIClient);
Note: See TracChangeset for help on using the changeset viewer.