cdda6ee9d27a8ce844c51b62969daee21ff5f105
[platform/framework/web/crosswalk-tizen.git] /
1 // Copyright 2015 Samsung Electronics. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "utc_blink_ewk_base.h"
6
7 class utc_blink_ewk_notification_test_base : public utc_blink_ewk_base
8 {
9  protected:
10   utc_blink_ewk_notification_test_base()
11     : security_origins(NULL)
12     , notification_sample_1(GetResourceUrl("/common/sample_notification_1.html"))
13   {}
14
15   /* Common setup */
16   void PostSetUp() override
17   {
18     ewk_view_notification_permission_callback_set(GetEwkWebView(),
19         reinterpret_cast<Ewk_View_Notification_Permission_Callback>(
20             notification_permission_request_callback),
21         this);
22     ewk_notification_callbacks_set(
23         reinterpret_cast<Ewk_Notification_Show_Callback>(notification_show_callback),
24         reinterpret_cast<Ewk_Notification_Cancel_Callback>(notification_cancel_callback),
25         this);
26   }
27
28   void PreTearDown() override
29   {
30     ewk_view_notification_permission_callback_set(GetEwkWebView(), NULL, NULL);
31     ewk_notification_callbacks_reset();
32
33     if (security_origins) {
34       // if it fails, than other TCs can produce false negatives/positives
35       EXPECT_EQ(EINA_TRUE, ewk_notification_policies_removed(security_origins));
36
37       void* data = NULL;
38
39       EINA_LIST_FREE(security_origins, data) {
40         Ewk_Security_Origin* origin = static_cast<Ewk_Security_Origin*>(data);
41         ewk_security_origin_free(origin);
42       }
43     }
44   }
45
46   virtual void NotificationShow(Ewk_Notification* notification)
47   {
48   }
49
50   virtual void NotificationCancel(uint64_t notificationId)
51   {
52   }
53
54   virtual Eina_Bool NotificationPermissionRequest(Evas_Object* webview, Ewk_Notification_Permission_Request* request)
55   {
56     //allow the notification by default
57     EXPECT_EQ(EINA_TRUE, ewk_notification_permission_reply(request, EINA_TRUE));
58     return EINA_TRUE;
59   }
60
61   static Eina_Bool notification_permission_request_callback(Evas_Object* webview, Ewk_Notification_Permission_Request* request, utc_blink_ewk_notification_test_base* owner)
62   {
63     utc_message("[notification_permission_request_callback] :: ");
64     if (!owner) {
65       EINA_FALSE;
66     }
67
68     if (!request) {
69       owner->EventLoopStop(Failure);
70       return EINA_FALSE;
71     }
72
73     const Ewk_Security_Origin *perm_origin = ewk_notification_permission_request_origin_get(request);
74
75     if (perm_origin) {
76       std::string proto, host;
77
78       if (ewk_security_origin_protocol_get(perm_origin)) {
79         proto = ewk_security_origin_protocol_get(perm_origin);
80       }
81
82       if (ewk_security_origin_host_get(perm_origin)) {
83         host = ewk_security_origin_host_get(perm_origin);
84       }
85
86       Ewk_Security_Origin *origin = ewk_security_origin_new_from_string((proto + "://" + host).c_str());
87       owner->security_origins = eina_list_append(owner->security_origins, origin);
88     }
89
90     return owner->NotificationPermissionRequest(webview, request);
91   }
92
93   static void notification_show_callback(Ewk_Notification* notification, utc_blink_ewk_notification_test_base* owner)
94   {
95     utc_message("[notification_show_callback] :: ");
96     ASSERT_TRUE(owner);
97
98     if (!notification) {
99       owner->EventLoopStop(Failure);
100       ASSERT_TRUE(notification);
101     }
102
103     owner->NotificationShow(notification);
104   }
105
106   static void notification_cancel_callback(uint64_t notificationId, utc_blink_ewk_notification_test_base* owner)
107   {
108     utc_message("[notification_cancel_callback] :: ");
109     ASSERT_TRUE(owner);
110
111     if (!notificationId) {
112       owner->EventLoopStop(Failure);
113       ASSERT_TRUE(notificationId);
114     }
115
116     owner->NotificationCancel(notificationId);
117   }
118
119  protected:
120   Eina_List* security_origins;
121   const std::string notification_sample_1;
122 };