Title: [147700] trunk/Source/WebKit2
Revision
147700
Author
[email protected]
Date
2013-04-04 19:52:06 -0700 (Thu, 04 Apr 2013)

Log Message

[EFL][WK2] Add support for getting page contents as string
https://bugs.webkit.org/show_bug.cgi?id=106752

Patch by KwangYong Choi <[email protected]> on 2013-04-04
Reviewed by Andreas Kling.

Modified ewk_view_page_contents_get() API to get page contents as string.
EWK_PAGE_CONTENTS_TYPE_STRING is added to Ewk_Page_Contents_Type.
Now, we can use both EWK_PAGE_CONTENTS_TYPE_MHTML and EWK_PAGE_CONTENTS_TYPE_STRING
for getting page contents.

* UIProcess/API/efl/ewk_view.cpp:
(Ewk_Page_Contents_Context):
(ewkViewPageContentsAsMHTMLCallback):
(ewkViewPageContentsAsStringCallback):
(ewk_view_page_contents_get):
* UIProcess/API/efl/ewk_view.h:
* UIProcess/API/efl/tests/test_ewk2_view.cpp:
(PageContentsAsMHTMLCallback):
(PageContentsAsStringCallback):
(TEST_F):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (147699 => 147700)


--- trunk/Source/WebKit2/ChangeLog	2013-04-05 02:51:23 UTC (rev 147699)
+++ trunk/Source/WebKit2/ChangeLog	2013-04-05 02:52:06 UTC (rev 147700)
@@ -1,3 +1,26 @@
+2013-04-04  KwangYong Choi  <[email protected]>
+
+        [EFL][WK2] Add support for getting page contents as string
+        https://bugs.webkit.org/show_bug.cgi?id=106752
+
+        Reviewed by Andreas Kling.
+
+        Modified ewk_view_page_contents_get() API to get page contents as string.
+        EWK_PAGE_CONTENTS_TYPE_STRING is added to Ewk_Page_Contents_Type.
+        Now, we can use both EWK_PAGE_CONTENTS_TYPE_MHTML and EWK_PAGE_CONTENTS_TYPE_STRING
+        for getting page contents.
+
+        * UIProcess/API/efl/ewk_view.cpp:
+        (Ewk_Page_Contents_Context):
+        (ewkViewPageContentsAsMHTMLCallback):
+        (ewkViewPageContentsAsStringCallback):
+        (ewk_view_page_contents_get):
+        * UIProcess/API/efl/ewk_view.h:
+        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
+        (PageContentsAsMHTMLCallback):
+        (PageContentsAsStringCallback):
+        (TEST_F):
+
 2013-04-04  Christophe Dumez  <[email protected]>
 
         [Cairo] Stop passing raw pointers to BitmapImage::create()

Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp (147699 => 147700)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp	2013-04-05 02:51:23 UTC (rev 147699)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp	2013-04-05 02:52:06 UTC (rev 147700)
@@ -535,36 +535,59 @@
 struct Ewk_Page_Contents_Context {
     Ewk_Page_Contents_Type type;
     Ewk_Page_Contents_Cb callback;
+    void* userData;
 };
 
 /**
  * @internal
  * Callback function used for ewk_view_page_contents_get().
  */
-static void ewkViewPageContentsCallback(WKDataRef wkData, WKErrorRef, void* context)
+static void ewkViewPageContentsAsMHTMLCallback(WKDataRef wkData, WKErrorRef, void* context)
 {
     EINA_SAFETY_ON_NULL_RETURN(context);
 
-    Ewk_Page_Contents_Context* contentsContext= static_cast<Ewk_Page_Contents_Context*>(context);
-    contentsContext->callback(contentsContext->type, reinterpret_cast<const char*>(WKDataGetBytes(wkData)));
+    Ewk_Page_Contents_Context* contentsContext = static_cast<Ewk_Page_Contents_Context*>(context);
+    contentsContext->callback(contentsContext->type, reinterpret_cast<const char*>(WKDataGetBytes(wkData)), contentsContext->userData);
 
     delete contentsContext;
 }
 
-Eina_Bool ewk_view_page_contents_get(const Evas_Object* ewkView, Ewk_Page_Contents_Type type, Ewk_Page_Contents_Cb callback)
+/**
+ * @internal
+ * Callback function used for ewk_view_page_contents_get().
+ */
+static void ewkViewPageContentsAsStringCallback(WKStringRef wkString, WKErrorRef, void* context)
 {
+    EINA_SAFETY_ON_NULL_RETURN(context);
+
+    Ewk_Page_Contents_Context* contentsContext = static_cast<Ewk_Page_Contents_Context*>(context);
+    contentsContext->callback(contentsContext->type, WKEinaSharedString(wkString), contentsContext->userData);
+
+    delete contentsContext;
+}
+
+Eina_Bool ewk_view_page_contents_get(const Evas_Object* ewkView, Ewk_Page_Contents_Type type, Ewk_Page_Contents_Cb callback, void* user_data)
+{
     EINA_SAFETY_ON_NULL_RETURN_VAL(callback, false);
     EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, false);
 
-    // We only support MHTML at the moment.
-    if (type != EWK_PAGE_CONTENTS_TYPE_MHTML)
-        return false;
-
     Ewk_Page_Contents_Context* context = new Ewk_Page_Contents_Context;
     context->type = type;
     context->callback = callback;
+    context->userData = user_data;
 
-    WKPageGetContentsAsMHTMLData(impl->wkPage(), false, context, ewkViewPageContentsCallback);
+    switch (context->type) {
+    case EWK_PAGE_CONTENTS_TYPE_MHTML:
+        WKPageGetContentsAsMHTMLData(impl->wkPage(), false, context, ewkViewPageContentsAsMHTMLCallback);
+        break;
+    case EWK_PAGE_CONTENTS_TYPE_STRING:
+        WKPageGetContentsAsString(impl->wkPage(), context, ewkViewPageContentsAsStringCallback);
+        break;
+    default:
+        delete context;
+        ASSERT_NOT_REACHED();
+        return false;
+    }
 
     return true;
 }

Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.h (147699 => 147700)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.h	2013-04-05 02:51:23 UTC (rev 147699)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.h	2013-04-05 02:52:06 UTC (rev 147700)
@@ -102,7 +102,8 @@
 
 /// Enum values containing page contents type values.
 typedef enum {
-    EWK_PAGE_CONTENTS_TYPE_MHTML
+    EWK_PAGE_CONTENTS_TYPE_MHTML,
+    EWK_PAGE_CONTENTS_TYPE_STRING
 } Ewk_Page_Contents_Type;
 
 typedef struct Ewk_View_Smart_Data Ewk_View_Smart_Data;
@@ -281,8 +282,9 @@
  *
  * @param type type of the contents
  * @param data string buffer of the contents
+ * @param user_data user data will be passed when ewk_view_page_contents_get is called
  */
-typedef void (*Ewk_Page_Contents_Cb)(Ewk_Page_Contents_Type type, const char *data);
+typedef void (*Ewk_Page_Contents_Cb)(Ewk_Page_Contents_Type type, const char *data, void *user_data);
 
 /**
  * Sets the smart class APIs, enabling view to be inherited.
@@ -821,10 +823,11 @@
  * @param o view object to get the page contents
  * @param type type of the page contents
  * @param callback callback function to be called when the operation is finished
+ * @param user_data user data to be passed to the callback function
  *
  * @return @c EINA_TRUE on success or @c EINA_FALSE otherwise
  */
-EAPI Eina_Bool ewk_view_page_contents_get(const Evas_Object *o, Ewk_Page_Contents_Type type, Ewk_Page_Contents_Cb callback);
+EAPI Eina_Bool ewk_view_page_contents_get(const Evas_Object *o, Ewk_Page_Contents_Type type, Ewk_Page_Contents_Cb callback, void *user_data);
 
 /**
  * Sets the source mode as EINA_TRUE to display the web source code

Modified: trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_view.cpp (147699 => 147700)


--- trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_view.cpp	2013-04-05 02:51:23 UTC (rev 147699)
+++ trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_view.cpp	2013-04-05 02:52:06 UTC (rev 147700)
@@ -926,7 +926,7 @@
 
 static bool obtainedPageContents = false;
 
-static void PageContentsCallback(Ewk_Page_Contents_Type type, const char* data)
+static void PageContentsAsMHTMLCallback(Ewk_Page_Contents_Type type, const char* data, void*)
 {
     // Check the type
     ASSERT_EQ(EWK_PAGE_CONTENTS_TYPE_MHTML, type);
@@ -943,15 +943,31 @@
     obtainedPageContents = true;
 }
 
+static void PageContentsAsStringCallback(Ewk_Page_Contents_Type type, const char* data, void*)
+{
+    // Check the type.
+    ASSERT_EQ(EWK_PAGE_CONTENTS_TYPE_STRING, type);
+
+    // The variable data should be "Simple HTML".
+    ASSERT_STREQ("Simple HTML", data);
+
+    obtainedPageContents = true;
+}
+
 TEST_F(EWK2UnitTestBase, ewk_view_page_contents_get)
 {
     const char content[] = "<p>Simple HTML</p>";
     ewk_view_html_string_load(webView(), content, 0, 0);
     waitUntilLoadFinished();
 
-    ASSERT_TRUE(ewk_view_page_contents_get(webView(), EWK_PAGE_CONTENTS_TYPE_MHTML, PageContentsCallback));
+    ASSERT_TRUE(ewk_view_page_contents_get(webView(), EWK_PAGE_CONTENTS_TYPE_MHTML, PageContentsAsMHTMLCallback, 0));
     while (!obtainedPageContents)
         ecore_main_loop_iterate();
+
+    obtainedPageContents = false;
+    ASSERT_TRUE(ewk_view_page_contents_get(webView(), EWK_PAGE_CONTENTS_TYPE_STRING, PageContentsAsStringCallback, 0));
+    while (!obtainedPageContents)
+        ecore_main_loop_iterate();
 }
 
 TEST_F(EWK2UnitTestBase, ewk_view_source_mode)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to