[M120 Migration][MM] Support W3C EME
[platform/framework/web/chromium-efl.git] / tizen_src / ewk / unittest / utc_blink_ewk_policy_decision_response_status_code_get_func.cpp
1 // Copyright 2014 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_policy_decision_response_status_code_get : public utc_blink_ewk_base {
8 protected:
9   utc_blink_ewk_policy_decision_response_status_code_get()
10     : status_code(-1)
11   {
12   }
13
14   void LoadFinished(Evas_Object* webview) override {
15     EventLoopStop(utc_blink_ewk_base::Failure);
16   }
17
18   static void policy_response_decide(utc_blink_ewk_policy_decision_response_status_code_get* owner, Evas_Object* webview, Ewk_Policy_Decision* policy_decision)
19   {
20     ASSERT_TRUE(owner);
21
22     if (policy_decision && webview) {
23       const char* webview_url = ewk_view_url_get(webview);
24       const char* policy_url = ewk_policy_decision_url_get(policy_decision);
25
26       if (webview_url && policy_url && strcmp(policy_url, webview_url) == 0) {
27         owner->status_code = ewk_policy_decision_response_status_code_get(policy_decision);
28         owner->EventLoopStop(Success);
29       }
30     }
31   }
32
33 protected:
34   int status_code;
35 };
36
37 /**
38  * @brief Tests if response status code for policy decision is returned properly.
39  */
40 TEST_F(utc_blink_ewk_policy_decision_response_status_code_get, response_status_code)
41 {
42   {
43     // policy decision callback will be send for each element on the page, we're interested only in the first
44     // one as it is reponse for request url. Other responses may break TC logic
45     evas_object_smart_callback_auto cb(GetEwkWebView(), "policy,response,decide", ToSmartCallback(policy_response_decide), this);
46     ASSERT_EQ(EINA_TRUE, ewk_view_url_set(GetEwkWebView(), "https://www.enlightenment.org/")); // this url should not redirect
47     ASSERT_EQ(Success, EventLoopStart()) << "policy,response,decide callback not triggered with proper url";
48   }
49
50   ASSERT_EQ(200, status_code);
51   // Wait for load,finished
52   ASSERT_EQ(Failure, EventLoopStart());
53
54   {
55     // policy decision callback will be send for each element on the page, we're interested only in the first
56     // one as it is reponse for request url. Other responses may break TC logic
57     evas_object_smart_callback_auto cb(GetEwkWebView(), "policy,response,decide", ToSmartCallback(policy_response_decide), this);
58     // Load page that should produce 404 error
59     ASSERT_EQ(EINA_TRUE, ewk_view_url_set(GetEwkWebView(), "http://www.google.com/random_page_that_most_likely_does_not_exist"));
60     ASSERT_EQ(Success, EventLoopStart()) << "policy,response,decide callback not triggered with proper url";
61   }
62
63   ASSERT_EQ(404, status_code);
64   // Wait for load,finished
65   ASSERT_EQ(Failure, EventLoopStart());
66 }
67
68 /**
69  * @brief Tests if default value is returned for policy decision with navigation type
70  */
71 TEST_F(utc_blink_ewk_policy_decision_response_status_code_get, request_status_code)
72 {
73   evas_object_smart_callback_auto cb(GetEwkWebView(), "policy,navigation,decide", ToSmartCallback(policy_response_decide), this);
74   ASSERT_EQ(EINA_TRUE, ewk_view_url_set(GetEwkWebView(), "http://www.google.com"));
75   ASSERT_EQ(Success, EventLoopStart());
76   ASSERT_EQ(0, status_code);
77 }
78
79 /**
80  * @brief Tests if function works properly in case of NULL of a policy decision
81  */
82 TEST_F(utc_blink_ewk_policy_decision_response_status_code_get, invalid_args)
83 {
84   ASSERT_EQ(0, ewk_policy_decision_response_status_code_get(NULL));
85 }