Title: [141709] trunk/Source/WebKit2
Revision
141709
Author
christophe.du...@intel.com
Date
2013-02-02 16:14:41 -0800 (Sat, 02 Feb 2013)

Log 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):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (141708 => 141709)


--- trunk/Source/WebKit2/ChangeLog	2013-02-02 23:50:18 UTC (rev 141708)
+++ trunk/Source/WebKit2/ChangeLog	2013-02-03 00:14:41 UTC (rev 141709)
@@ -1,3 +1,30 @@
+2013-02-02  Christophe Dumez  <christophe.du...@intel.com>
+
+        [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):
+
 2013-02-02  Sam Weinig  <s...@webkit.org>
 
         Stop keeping a frame tree in the UIProcess

Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_file_chooser_request.cpp (141708 => 141709)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_file_chooser_request.cpp	2013-02-02 23:50:18 UTC (rev 141708)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_file_chooser_request.cpp	2013-02-03 00:14:41 UTC (rev 141709)
@@ -26,18 +26,19 @@
 #include "config.h"
 #include "ewk_file_chooser_request.h"
 
-#include "ImmutableArray.h"
-#include "MutableArray.h"
-#include "WebOpenPanelParameters.h"
-#include "WebOpenPanelResultListenerProxy.h"
-#include "WebString.h"
-#include "WebURL.h"
+#include "WKArray.h"
+#include "WKOpenPanelParameters.h"
+#include "WKOpenPanelResultListener.h"
+#include "WKSharedAPICast.h"
+#include "WKString.h"
+#include "WKURL.h"
 #include "ewk_file_chooser_request_private.h"
+#include <wtf/OwnArrayPtr.h>
 #include <wtf/text/CString.h>
 
 using namespace WebKit;
 
-EwkFileChooserRequest::EwkFileChooserRequest(WebOpenPanelParameters* parameters, WebOpenPanelResultListenerProxy* listener)
+EwkFileChooserRequest::EwkFileChooserRequest(WKOpenPanelParametersRef parameters, WKOpenPanelResultListenerRef listener)
     : m_parameters(parameters)
     , m_listener(listener)
     , m_wasRequestHandled(false)
@@ -49,33 +50,30 @@
 EwkFileChooserRequest::~EwkFileChooserRequest()
 {
     if (!m_wasRequestHandled)
-        m_listener->cancel();
+        WKOpenPanelResultListenerCancel(m_listener.get());
 }
 
 bool EwkFileChooserRequest::allowMultipleFiles() const
 {
-    return m_parameters->allowMultipleFiles();
+    return WKOpenPanelParametersGetAllowsMultipleFiles(m_parameters.get());
 }
 
-PassRefPtr<ImmutableArray> EwkFileChooserRequest::acceptedMIMETypes() const
+WKRetainPtr<WKArrayRef> EwkFileChooserRequest::acceptedMIMETypes() const
 {
-    return m_parameters->acceptMIMETypes();
+    return adoptWK(WKOpenPanelParametersCopyAcceptedMIMETypes(m_parameters.get()));
 }
 
 void EwkFileChooserRequest::cancel()
 {
     m_wasRequestHandled = true;
 
-    return m_listener->cancel();
+    return WKOpenPanelResultListenerCancel(m_listener.get());
 }
 
-void EwkFileChooserRequest::chooseFiles(Vector< RefPtr<APIObject> >& fileURLs)
+void EwkFileChooserRequest::chooseFiles(WKArrayRef fileURLs)
 {
-    ASSERT(!fileURLs.isEmpty());
-    ASSERT(fileURLs.size() == 1 || m_parameters->allowMultipleFiles());
-
     m_wasRequestHandled = true;
-    m_listener->chooseFiles(ImmutableArray::adopt(fileURLs).get());
+    WKOpenPanelResultListenerChooseFiles(m_listener.get(), fileURLs);
 }
 
 Eina_Bool ewk_file_chooser_request_allow_multiple_files_get(const Ewk_File_Chooser_Request* request)
@@ -90,14 +88,14 @@
     EWK_OBJ_GET_IMPL_OR_RETURN(const EwkFileChooserRequest, request, impl, 0);
 
     Eina_List* mimeTypeList = 0;
-    RefPtr<ImmutableArray> mimeTypes = impl->acceptedMIMETypes();
+    WKRetainPtr<WKArrayRef> mimeTypes = impl->acceptedMIMETypes();
 
-    const size_t size = mimeTypes->size();
+    const size_t size = WKArrayGetSize(mimeTypes.get());
     for (size_t i = 0; i < size; ++i) {
-        String mimeTypeString = static_cast<WebString*>(mimeTypes->at(i))->string();
-        if (mimeTypeString.isEmpty())
+        WKRetainPtr<WKStringRef> mimeType = static_cast<WKStringRef>(WKArrayGetItemAtIndex(mimeTypes.get(), i));
+        if (!mimeType || WKStringIsEmpty(mimeType.get()))
             continue;
-        mimeTypeList = eina_list_append(mimeTypeList, eina_stringshare_add(mimeTypeString.utf8().data()));
+        mimeTypeList = eina_list_append(mimeTypeList, eina_stringshare_add(toWTFString(mimeType.get()).utf8().data()));
     }
 
     return mimeTypeList;
@@ -117,20 +115,22 @@
 {
     EWK_OBJ_GET_IMPL_OR_RETURN(EwkFileChooserRequest, request, impl, false);
     EINA_SAFETY_ON_NULL_RETURN_VAL(chosenFiles, false);
-    EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_list_count(chosenFiles) == 1 || impl->allowMultipleFiles(), false);
     EINA_SAFETY_ON_TRUE_RETURN_VAL(impl->wasHandled(), false);
 
-    Vector< RefPtr<APIObject> > fileURLs;
+    const unsigned urlCount = eina_list_count(chosenFiles);
+    EINA_SAFETY_ON_FALSE_RETURN_VAL(urlCount == 1 || (urlCount > 1 && impl->allowMultipleFiles()), false);
 
-    const Eina_List* l;
-    void* data;
-    EINA_LIST_FOREACH(chosenFiles, l, data) {
-        EINA_SAFETY_ON_NULL_RETURN_VAL(data, false);
-        String fileURL = "file://" + String::fromUTF8(static_cast<char*>(data));
-        fileURLs.append(WebURL::create(fileURL));
+    OwnArrayPtr<WKTypeRef> filesURLs = adoptArrayPtr(new WKTypeRef[urlCount]);
+
+    for (unsigned i = 0; i < urlCount; ++i) {
+        const char* url = "" i));
+        EINA_SAFETY_ON_NULL_RETURN_VAL(url, false);
+        String fileURL = ASCIILiteral("file://") + String::fromUTF8(url);
+        filesURLs[i] = toCopiedURLAPI(fileURL);
     }
 
-    impl->chooseFiles(fileURLs);
+    WKRetainPtr<WKArrayRef> wkFileURLs(AdoptWK, WKArrayCreateAdoptingValues(filesURLs.get(), urlCount));
+    impl->chooseFiles(wkFileURLs.get());
 
     return true;
 }
@@ -141,11 +141,12 @@
     EINA_SAFETY_ON_NULL_RETURN_VAL(chosenFile, false);
     EINA_SAFETY_ON_TRUE_RETURN_VAL(impl->wasHandled(), false);
 
-    Vector< RefPtr<APIObject> > fileURLs;
-    String fileURL = "file://" + String::fromUTF8(chosenFile);
-    fileURLs.append(WebURL::create(fileURL));
+    String fileURL = ASCIILiteral("file://") + String::fromUTF8(chosenFile);
+    WKRetainPtr<WKURLRef> wkURL(AdoptWK, toCopiedURLAPI(fileURL));
 
-    impl->chooseFiles(fileURLs);
+    WKTypeRef wkURLPtr = wkURL.get();
+    WKRetainPtr<WKArrayRef> wkFileURLs(AdoptWK, WKArrayCreate(&wkURLPtr, 1));
+    impl->chooseFiles(wkFileURLs.get());
 
     return true;
 }

Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_file_chooser_request_private.h (141708 => 141709)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_file_chooser_request_private.h	2013-02-02 23:50:18 UTC (rev 141708)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_file_chooser_request_private.h	2013-02-03 00:14:41 UTC (rev 141709)
@@ -27,22 +27,16 @@
 #define ewk_file_chooser_request_private_h
 
 #include "APIObject.h"
+#include "WKRetainPtr.h"
 #include "ewk_object_private.h"
+#include <WebKit2/WKBase.h>
 #include <wtf/PassRefPtr.h>
-#include <wtf/RefPtr.h>
-#include <wtf/Vector.h>
 
-namespace WebKit {
-class ImmutableArray;
-class WebOpenPanelParameters;
-class WebOpenPanelResultListenerProxy;
-}
-
 class EwkFileChooserRequest : public EwkObject {
 public:
     EWK_OBJECT_DECLARE(EwkFileChooserRequest)
 
-    static PassRefPtr<EwkFileChooserRequest> create(WebKit::WebOpenPanelParameters* parameters, WebKit::WebOpenPanelResultListenerProxy* listener)
+    static PassRefPtr<EwkFileChooserRequest> create(WKOpenPanelParametersRef parameters, WKOpenPanelResultListenerRef listener)
     {
         return adoptRef(new EwkFileChooserRequest(parameters, listener));
     }
@@ -50,16 +44,16 @@
     ~EwkFileChooserRequest();
 
     bool allowMultipleFiles() const;
-    PassRefPtr<WebKit::ImmutableArray> acceptedMIMETypes() const;
+    WKRetainPtr<WKArrayRef> acceptedMIMETypes() const;
     inline bool wasHandled() const { return m_wasRequestHandled; }
     void cancel();
-    void chooseFiles(Vector< RefPtr<WebKit::APIObject> >& fileURLs);
+    void chooseFiles(WKArrayRef fileURLs);
 
 private:
-    EwkFileChooserRequest(WebKit::WebOpenPanelParameters* parameters, WebKit::WebOpenPanelResultListenerProxy* listener);
+    EwkFileChooserRequest(WKOpenPanelParametersRef parameters, WKOpenPanelResultListenerRef listener);
 
-    RefPtr<WebKit::WebOpenPanelParameters> m_parameters;
-    RefPtr<WebKit::WebOpenPanelResultListenerProxy> m_listener;
+    WKRetainPtr<WKOpenPanelParametersRef> m_parameters;
+    WKRetainPtr<WKOpenPanelResultListenerRef> m_listener;
     bool m_wasRequestHandled;
 };
 

Modified: trunk/Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp (141708 => 141709)


--- trunk/Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp	2013-02-02 23:50:18 UTC (rev 141708)
+++ trunk/Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp	2013-02-03 00:14:41 UTC (rev 141709)
@@ -200,7 +200,7 @@
 void PageUIClientEfl::runOpenPanel(WKPageRef, WKFrameRef, WKOpenPanelParametersRef parameters, WKOpenPanelResultListenerRef listener, const void* clientInfo)
 {
     EwkView* view = toPageUIClientEfl(clientInfo)->m_view;
-    RefPtr<EwkFileChooserRequest> fileChooserRequest = EwkFileChooserRequest::create(toImpl(parameters), toImpl(listener));
+    RefPtr<EwkFileChooserRequest> fileChooserRequest = EwkFileChooserRequest::create(parameters, listener);
     view->smartCallback<FileChooserRequest>().call(fileChooserRequest.get());
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to