Changeset 141709 in webkit


Ignore:
Timestamp:
Feb 2, 2013 4:14:41 PM (11 years ago)
Author:
Christophe Dumez
Message:

[EFL][WK2] Use C API inside ewk_file_chooser_request
https://bugs.webkit.org/show_bug.cgi?id=107811

Reviewed by Sam Weinig.

Use C API inside ewk_file_chooser_request instead of
accessing the internal C++ classes directly, to
avoid violating API layering.

  • UIProcess/API/efl/ewk_file_chooser_request.cpp:

(EwkFileChooserRequest::EwkFileChooserRequest):
(EwkFileChooserRequest::~EwkFileChooserRequest):
(EwkFileChooserRequest::allowMultipleFiles):
(EwkFileChooserRequest::acceptedMIMETypes):
(EwkFileChooserRequest::cancel):
(EwkFileChooserRequest::chooseFiles):
(ewk_file_chooser_request_accepted_mimetypes_get):
(ewk_file_chooser_request_files_choose):
(ewk_file_chooser_request_file_choose):

  • UIProcess/API/efl/ewk_file_chooser_request_private.h:

(EwkFileChooserRequest::create):
(EwkFileChooserRequest):

  • UIProcess/efl/PageUIClientEfl.cpp:

(WebKit::PageUIClientEfl::runOpenPanel):

Location:
trunk/Source/WebKit2
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r141708 r141709  
     12013-02-02  Christophe Dumez  <christophe.dumez@intel.com>
     2
     3        [EFL][WK2] Use C API inside ewk_file_chooser_request
     4        https://bugs.webkit.org/show_bug.cgi?id=107811
     5
     6        Reviewed by Sam Weinig.
     7
     8        Use C API inside ewk_file_chooser_request instead of
     9        accessing the internal C++ classes directly, to
     10        avoid violating API layering.
     11
     12        * UIProcess/API/efl/ewk_file_chooser_request.cpp:
     13        (EwkFileChooserRequest::EwkFileChooserRequest):
     14        (EwkFileChooserRequest::~EwkFileChooserRequest):
     15        (EwkFileChooserRequest::allowMultipleFiles):
     16        (EwkFileChooserRequest::acceptedMIMETypes):
     17        (EwkFileChooserRequest::cancel):
     18        (EwkFileChooserRequest::chooseFiles):
     19        (ewk_file_chooser_request_accepted_mimetypes_get):
     20        (ewk_file_chooser_request_files_choose):
     21        (ewk_file_chooser_request_file_choose):
     22        * UIProcess/API/efl/ewk_file_chooser_request_private.h:
     23        (EwkFileChooserRequest::create):
     24        (EwkFileChooserRequest):
     25        * UIProcess/efl/PageUIClientEfl.cpp:
     26        (WebKit::PageUIClientEfl::runOpenPanel):
     27
    1282013-02-02  Sam Weinig  <sam@webkit.org>
    229
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_file_chooser_request.cpp

    r133744 r141709  
    2727#include "ewk_file_chooser_request.h"
    2828
    29 #include "ImmutableArray.h"
    30 #include "MutableArray.h"
    31 #include "WebOpenPanelParameters.h"
    32 #include "WebOpenPanelResultListenerProxy.h"
    33 #include "WebString.h"
    34 #include "WebURL.h"
     29#include "WKArray.h"
     30#include "WKOpenPanelParameters.h"
     31#include "WKOpenPanelResultListener.h"
     32#include "WKSharedAPICast.h"
     33#include "WKString.h"
     34#include "WKURL.h"
    3535#include "ewk_file_chooser_request_private.h"
     36#include <wtf/OwnArrayPtr.h>
    3637#include <wtf/text/CString.h>
    3738
    3839using namespace WebKit;
    3940
    40 EwkFileChooserRequest::EwkFileChooserRequest(WebOpenPanelParameters* parameters, WebOpenPanelResultListenerProxy* listener)
     41EwkFileChooserRequest::EwkFileChooserRequest(WKOpenPanelParametersRef parameters, WKOpenPanelResultListenerRef listener)
    4142    : m_parameters(parameters)
    4243    , m_listener(listener)
     
    5051{
    5152    if (!m_wasRequestHandled)
    52         m_listener->cancel();
     53        WKOpenPanelResultListenerCancel(m_listener.get());
    5354}
    5455
    5556bool EwkFileChooserRequest::allowMultipleFiles() const
    5657{
    57     return m_parameters->allowMultipleFiles();
     58    return WKOpenPanelParametersGetAllowsMultipleFiles(m_parameters.get());
    5859}
    5960
    60 PassRefPtr<ImmutableArray> EwkFileChooserRequest::acceptedMIMETypes() const
     61WKRetainPtr<WKArrayRef> EwkFileChooserRequest::acceptedMIMETypes() const
    6162{
    62     return m_parameters->acceptMIMETypes();
     63    return adoptWK(WKOpenPanelParametersCopyAcceptedMIMETypes(m_parameters.get()));
    6364}
    6465
     
    6768    m_wasRequestHandled = true;
    6869
    69     return m_listener->cancel();
     70    return WKOpenPanelResultListenerCancel(m_listener.get());
    7071}
    7172
    72 void EwkFileChooserRequest::chooseFiles(Vector< RefPtr<APIObject> >& fileURLs)
     73void EwkFileChooserRequest::chooseFiles(WKArrayRef fileURLs)
    7374{
    74     ASSERT(!fileURLs.isEmpty());
    75     ASSERT(fileURLs.size() == 1 || m_parameters->allowMultipleFiles());
    76 
    7775    m_wasRequestHandled = true;
    78     m_listener->chooseFiles(ImmutableArray::adopt(fileURLs).get());
     76    WKOpenPanelResultListenerChooseFiles(m_listener.get(), fileURLs);
    7977}
    8078
     
    9189
    9290    Eina_List* mimeTypeList = 0;
    93     RefPtr<ImmutableArray> mimeTypes = impl->acceptedMIMETypes();
     91    WKRetainPtr<WKArrayRef> mimeTypes = impl->acceptedMIMETypes();
    9492
    95     const size_t size = mimeTypes->size();
     93    const size_t size = WKArrayGetSize(mimeTypes.get());
    9694    for (size_t i = 0; i < size; ++i) {
    97         String mimeTypeString = static_cast<WebString*>(mimeTypes->at(i))->string();
    98         if (mimeTypeString.isEmpty())
     95        WKRetainPtr<WKStringRef> mimeType = static_cast<WKStringRef>(WKArrayGetItemAtIndex(mimeTypes.get(), i));
     96        if (!mimeType || WKStringIsEmpty(mimeType.get()))
    9997            continue;
    100         mimeTypeList = eina_list_append(mimeTypeList, eina_stringshare_add(mimeTypeString.utf8().data()));
     98        mimeTypeList = eina_list_append(mimeTypeList, eina_stringshare_add(toWTFString(mimeType.get()).utf8().data()));
    10199    }
    102100
     
    118116    EWK_OBJ_GET_IMPL_OR_RETURN(EwkFileChooserRequest, request, impl, false);
    119117    EINA_SAFETY_ON_NULL_RETURN_VAL(chosenFiles, false);
    120     EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_list_count(chosenFiles) == 1 || impl->allowMultipleFiles(), false);
    121118    EINA_SAFETY_ON_TRUE_RETURN_VAL(impl->wasHandled(), false);
    122119
    123     Vector< RefPtr<APIObject> > fileURLs;
     120    const unsigned urlCount = eina_list_count(chosenFiles);
     121    EINA_SAFETY_ON_FALSE_RETURN_VAL(urlCount == 1 || (urlCount > 1 && impl->allowMultipleFiles()), false);
    124122
    125     const Eina_List* l;
    126     void* data;
    127     EINA_LIST_FOREACH(chosenFiles, l, data) {
    128         EINA_SAFETY_ON_NULL_RETURN_VAL(data, false);
    129         String fileURL = "file://" + String::fromUTF8(static_cast<char*>(data));
    130         fileURLs.append(WebURL::create(fileURL));
     123    OwnArrayPtr<WKTypeRef> filesURLs = adoptArrayPtr(new WKTypeRef[urlCount]);
     124
     125    for (unsigned i = 0; i < urlCount; ++i) {
     126        const char* url = static_cast<char*>(eina_list_nth(chosenFiles, i));
     127        EINA_SAFETY_ON_NULL_RETURN_VAL(url, false);
     128        String fileURL = ASCIILiteral("file://") + String::fromUTF8(url);
     129        filesURLs[i] = toCopiedURLAPI(fileURL);
    131130    }
    132131
    133     impl->chooseFiles(fileURLs);
     132    WKRetainPtr<WKArrayRef> wkFileURLs(AdoptWK, WKArrayCreateAdoptingValues(filesURLs.get(), urlCount));
     133    impl->chooseFiles(wkFileURLs.get());
    134134
    135135    return true;
     
    142142    EINA_SAFETY_ON_TRUE_RETURN_VAL(impl->wasHandled(), false);
    143143
    144     Vector< RefPtr<APIObject> > fileURLs;
    145     String fileURL = "file://" + String::fromUTF8(chosenFile);
    146     fileURLs.append(WebURL::create(fileURL));
     144    String fileURL = ASCIILiteral("file://") + String::fromUTF8(chosenFile);
     145    WKRetainPtr<WKURLRef> wkURL(AdoptWK, toCopiedURLAPI(fileURL));
    147146
    148     impl->chooseFiles(fileURLs);
     147    WKTypeRef wkURLPtr = wkURL.get();
     148    WKRetainPtr<WKArrayRef> wkFileURLs(AdoptWK, WKArrayCreate(&wkURLPtr, 1));
     149    impl->chooseFiles(wkFileURLs.get());
    149150
    150151    return true;
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_file_chooser_request_private.h

    r135117 r141709  
    2828
    2929#include "APIObject.h"
     30#include "WKRetainPtr.h"
    3031#include "ewk_object_private.h"
     32#include <WebKit2/WKBase.h>
    3133#include <wtf/PassRefPtr.h>
    32 #include <wtf/RefPtr.h>
    33 #include <wtf/Vector.h>
    34 
    35 namespace WebKit {
    36 class ImmutableArray;
    37 class WebOpenPanelParameters;
    38 class WebOpenPanelResultListenerProxy;
    39 }
    4034
    4135class EwkFileChooserRequest : public EwkObject {
     
    4337    EWK_OBJECT_DECLARE(EwkFileChooserRequest)
    4438
    45     static PassRefPtr<EwkFileChooserRequest> create(WebKit::WebOpenPanelParameters* parameters, WebKit::WebOpenPanelResultListenerProxy* listener)
     39    static PassRefPtr<EwkFileChooserRequest> create(WKOpenPanelParametersRef parameters, WKOpenPanelResultListenerRef listener)
    4640    {
    4741        return adoptRef(new EwkFileChooserRequest(parameters, listener));
     
    5145
    5246    bool allowMultipleFiles() const;
    53     PassRefPtr<WebKit::ImmutableArray> acceptedMIMETypes() const;
     47    WKRetainPtr<WKArrayRef> acceptedMIMETypes() const;
    5448    inline bool wasHandled() const { return m_wasRequestHandled; }
    5549    void cancel();
    56     void chooseFiles(Vector< RefPtr<WebKit::APIObject> >& fileURLs);
     50    void chooseFiles(WKArrayRef fileURLs);
    5751
    5852private:
    59     EwkFileChooserRequest(WebKit::WebOpenPanelParameters* parameters, WebKit::WebOpenPanelResultListenerProxy* listener);
     53    EwkFileChooserRequest(WKOpenPanelParametersRef parameters, WKOpenPanelResultListenerRef listener);
    6054
    61     RefPtr<WebKit::WebOpenPanelParameters> m_parameters;
    62     RefPtr<WebKit::WebOpenPanelResultListenerProxy> m_listener;
     55    WKRetainPtr<WKOpenPanelParametersRef> m_parameters;
     56    WKRetainPtr<WKOpenPanelResultListenerRef> m_listener;
    6357    bool m_wasRequestHandled;
    6458};
  • trunk/Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp

    r141274 r141709  
    201201{
    202202    EwkView* view = toPageUIClientEfl(clientInfo)->m_view;
    203     RefPtr<EwkFileChooserRequest> fileChooserRequest = EwkFileChooserRequest::create(toImpl(parameters), toImpl(listener));
     203    RefPtr<EwkFileChooserRequest> fileChooserRequest = EwkFileChooserRequest::create(parameters, listener);
    204204    view->smartCallback<FileChooserRequest>().call(fileChooserRequest.get());
    205205}
Note: See TracChangeset for help on using the changeset viewer.