Elementary Web: add functions to set / get useragent
authorbdilly <bdilly@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 6 Jan 2012 11:31:14 +0000 (11:31 +0000)
committerbdilly <bdilly@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 6 Jan 2012 11:31:14 +0000 (11:31 +0000)
Patch by Steven Falken <btwotch@googlemail.com> with a
few changes.

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@66938 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/bin/test.c
src/bin/test_web.c
src/lib/elm_web.c
src/lib/elm_web.h

index d97c960..dff5711 100644 (file)
@@ -156,7 +156,8 @@ void test_video(void *data, Evas_Object *obj, void *event_info);
 void test_eio(void *data, Evas_Object *obj, void *event_info);
 #endif
 #ifdef HAVE_ELEMENTARY_WEB
-void test_web(void *data, Evas_Object *obj, void *event_info);
+void test_web_normal(void *data, Evas_Object *obj, void *event_info);
+void test_web_mobile(void *data, Evas_Object *obj, void *event_info);
 #endif
 
 struct elm_test
@@ -412,7 +413,8 @@ add_tests:
 
    //------------------------------//
 #ifdef HAVE_ELEMENTARY_WEB
-   ADD_TEST(NULL, "Web", "Web", test_web);
+   ADD_TEST(NULL, "Web", "Web", test_web_normal);
+   ADD_TEST(NULL, "Web", "Web-mobile", test_web_mobile);
 #endif
 
    //------------------------------//
index 8529498..223b844 100644 (file)
@@ -11,6 +11,7 @@ typedef struct
    Evas_Object *btn_fwd;
    Evas_Object *url_entry;
    Eina_List *sub_wins;
+   const char* user_agent;
    Eina_Bool js_hooks : 1;
 } Web_Test;
 
@@ -102,6 +103,7 @@ _new_window_hook(void *data, Evas_Object *obj __UNUSED__, Eina_Bool js __UNUSED_
    evas_object_show(bg);
 
    new_web = elm_web_add(new_win);
+   elm_web_useragent_set(new_web, wt->user_agent);
    evas_object_size_hint_weight_set(new_web, EVAS_HINT_EXPAND,
                                     EVAS_HINT_EXPAND);
    elm_win_resize_object_add(new_win, new_web);
@@ -332,8 +334,10 @@ _main_web_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, vo
 }
 
 void
-test_web(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+test_web(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__, Eina_Bool mobile)
 {
+   const char user_agent_firefox[] = "Mozilla/5.0 (X11; Linux x86_64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1";
+   const char user_agent_mobile[] = "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3";
    Evas_Object *win, *bg, *bx, *bx2, *bt, *web, *url;
    Web_Test *wt;
 
@@ -342,7 +346,18 @@ test_web(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __
    wt = calloc(1, sizeof(*wt));
 
    win = elm_win_add(NULL, "web", ELM_WIN_BASIC);
-   elm_win_title_set(win, "Web");
+
+   if (mobile == EINA_TRUE)
+   {
+      wt->user_agent = user_agent_mobile;
+      elm_win_title_set(win, "Web-mobile");
+   }
+   else
+   {
+      wt->user_agent = user_agent_firefox;
+      elm_win_title_set(win, "Web");
+   }
+
    elm_win_autodel_set(win, EINA_TRUE);
 
    bg = elm_bg_add(win);
@@ -363,6 +378,8 @@ test_web(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __
    evas_object_show(bx2);
 
    web = elm_web_add(win);
+   elm_web_useragent_set(web, wt->user_agent);
+   printf("elm_web useragent: %s\n", elm_web_useragent_get(web));
    evas_object_size_hint_weight_set(web, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(web, EVAS_HINT_FILL, EVAS_HINT_FILL);
    elm_box_pack_end(bx, web);
@@ -481,4 +498,16 @@ test_web(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __
    evas_object_resize(win, 320, 480);
    evas_object_show(win);
 }
+
+void
+test_web_normal(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   test_web(data, obj, event_info, EINA_FALSE);
+}
+
+void
+test_web_mobile(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   test_web(data, obj, event_info, EINA_TRUE);
+}
 #endif
index b230f2e..f38801c 100644 (file)
@@ -1203,6 +1203,32 @@ elm_web_console_message_hook_set(Evas_Object *obj, Elm_Web_Console_Message func,
 #endif
 }
 
+EAPI void 
+elm_web_useragent_set(Evas_Object *obj, const char *user_agent)
+{
+   ELM_CHECK_WIDTYPE(obj, widtype);
+#ifdef HAVE_ELEMENTARY_WEB
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return;
+   ewk_view_setting_user_agent_set(wd->ewk_view, user_agent);
+#else
+   (void)user_agent;
+#endif
+}
+
+EAPI const char* 
+elm_web_useragent_get(const Evas_Object *obj)
+{
+   ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+#ifdef HAVE_ELEMENTARY_WEB
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return NULL;
+   return ewk_view_setting_user_agent_get(wd->ewk_view);
+#else
+   return NULL;
+#endif
+}
+
 EAPI Eina_Bool
 elm_web_tab_propagate_get(const Evas_Object *obj)
 {
index 12c64b2..492c2dd 100644 (file)
@@ -351,6 +351,24 @@ typedef void (*Elm_Web_Console_Message)(void *data, Evas_Object *obj, const char
 EAPI Evas_Object      *elm_web_add(Evas_Object *parent);
 
 /**
+ * Change useragent of a elm_web object
+ * 
+ * @param obj The object
+ * @param useragent String for useragent
+ *
+ */
+EAPI void elm_web_useragent_set(Evas_Object *obj, const char *user_agent);
+
+/**
+ * Return current useragent of elm_web object
+ *
+ * @param obj The object
+ * @return Useragent string
+ *
+ */
+EAPI const char* elm_web_useragent_get(const Evas_Object *obj);
+
+/**
  * Get internal ewk_view object from web object.
  *
  * Elementary may not provide some low level features of EWebKit,