[M120 Migration][NUI] Add internal mouse event API for NUI.
[platform/framework/web/chromium-efl.git] / tizen_src / ewk / efl_integration / public / ewk_view.cc
index d0a3c50..f9bc785 100644 (file)
@@ -1,57 +1,62 @@
 /*
  * Copyright (C) 2009-2010 ProFUSION embedded systems
- * Copyright (C) 2009-2014 Samsung Electronics. All rights reserved.
+ * Copyright (C) 2009-2016 Samsung Electronics. All rights reserved.
  * Copyright (C) 2012 Intel Corporation
  *
  * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
+ * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
+ * version 2.1 of the License, or (at your option) any later version.
  *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA  02110-1301, USA.
+ * Lesser General Public License for more details.
  *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-#include "ewk_view.h"
+#include "ewk_view_product.h"
 
 #include <Evas.h>
+#include <algorithm>
 
-#if !defined(EWK_BRINGUP)
-#include "webkit/common/webpreferences.h"
-#else
-#include "content/public/common/web_preferences.h"
-#endif
+#include "authentication_challenge_popup.h"
+#include "base/trace_event/ttrace.h"
 #include "content/public/browser/navigation_controller.h"
 #include "cookie_manager.h"
 #include "eweb_view.h"
 #include "geolocation_permission_popup.h"
 #include "notification_permission_popup.h"
-#include "public/ewk_back_forward_list.h"
-#include "public/ewk_context.h"
-#include "public/ewk_enums.h"
-#include "public/ewk_settings.h"
+#include "private/ewk_back_forward_list_private.h"
 #include "private/ewk_context_private.h"
 #include "private/ewk_frame_private.h"
+#include "private/ewk_history_private.h"
 #include "private/ewk_hit_test_private.h"
 #include "private/ewk_notification_private.h"
 #include "private/ewk_private.h"
 #include "private/ewk_quota_permission_request_private.h"
-#include "private/ewk_back_forward_list_private.h"
-#include "private/ewk_history_private.h"
 #include "private/ewk_view_private.h"
-#include "third_party/WebKit/public/web/WebViewModeEnums.h"
+#include "public/ewk_back_forward_list.h"
+#include "public/ewk_context.h"
+#include "public/ewk_enums_internal.h"
+#include "public/ewk_settings.h"
+#include "third_party/blink/public/common/page/page_zoom.h"
+#include "third_party/blink/public/common/web_preferences/web_preferences.h"
 #include "ui/events/gesture_detection/gesture_configuration.h"
+#include "url/gurl.h"
 #include "usermedia_permission_popup.h"
 #include "web_contents_delegate_efl.h"
 
+#if defined(TIZEN_WEB_SPEECH_RECOGNITION)
+#include "content/browser/speech/tts_platform_impl_tizen.h"
+#endif
+#if defined(TIZEN_VIDEO_HOLE)
+#include "tizen_src/chromium_impl/media/base/tizen/video_plane_controller.h"
+#endif
+
 static Eina_Bool _ewk_view_default_user_media_permission(
     Evas_Object*, Ewk_User_Media_Permission_Request*, void*);
 
@@ -61,6 +66,9 @@ static Eina_Bool _ewk_view_default_geolocation_permission(
 static Eina_Bool _ewk_view_default_notification_permission(
     Evas_Object*, Ewk_Notification_Permission_Request*, void*);
 
+static void _ewk_view_default_authentication(
+    Evas_Object*, Ewk_Auth_Challenge*, void*);
+
 Eina_Bool ewk_view_smart_class_set(Ewk_View_Smart_Class* api)
 {
   EINA_SAFETY_ON_NULL_RETURN_VAL(api, false);
@@ -75,7 +83,7 @@ Evas_Object* ewk_view_add_with_session_data(Evas* canvas, const char* data, unsi
 
   Evas_Object* ret = ewk_view_add(canvas);
 
-  EWebView *webView = GetWebViewFromEvasObject(ret);
+  EWebView* webView = GetEWebViewFromEwkView(ret);
 
   if (!webView || !data || !length)
     return ret;
@@ -92,14 +100,18 @@ Evas_Object* ewk_view_add_with_context(Evas* e, Ewk_Context* context)
 {
   EINA_SAFETY_ON_NULL_RETURN_VAL(context, 0);
   Evas_Object* ewk_view = CreateWebViewAsEvasObject(context, e);
-
+  LOG(INFO) << "evas: " << e << ", context: " << context << ", ewk_view:" << ewk_view;
   if (ewk_view) {
+#if !BUILDFLAG(IS_TIZEN_TV)
     ewk_view_user_media_permission_callback_set(ewk_view,
         _ewk_view_default_user_media_permission, 0);
+#endif
     ewk_view_geolocation_permission_callback_set(ewk_view,
         _ewk_view_default_geolocation_permission, 0);
     ewk_view_notification_permission_callback_set(ewk_view,
         _ewk_view_default_notification_permission, 0);
+    ewk_view_authentication_callback_set(ewk_view,
+        _ewk_view_default_authentication, nullptr);
   }
 
   return ewk_view;
@@ -113,13 +125,16 @@ Evas_Object* ewk_view_add(Evas* e)
   // default web context. It won't be released by destroyed eweb_view because
   // ewk_context_default_get does AddRef
   Ewk_Context* context = ewk_context_default_get();
+  LOG(INFO) << "evas: " << e << ", context: " << context;
   return ewk_view_add_with_context(e, context);
 }
 
 Evas_Object* ewk_view_add_in_incognito_mode(Evas* e)
 {
-  Ewk_Context* context = Ewk_Context::Create(true);
-  EINA_SAFETY_ON_NULL_RETURN_VAL(context, NULL);
+  EINA_SAFETY_ON_NULL_RETURN_VAL(e, nullptr);
+  Ewk_Context* context = Ewk_Context::IncognitoContext();
+  LOG(INFO) << "evas: " << e << ", context: " << context;
+  EINA_SAFETY_ON_NULL_RETURN_VAL(context, nullptr);
   return ewk_view_add_with_context(e, context);
 }
 
@@ -129,24 +144,33 @@ Ewk_Context *ewk_view_context_get(const Evas_Object *view)
   return static_cast<Ewk_Context*>(impl->context());
 }
 
-Eina_Bool ewk_view_url_set(Evas_Object* view, const char* url)
+Eina_Bool ewk_view_url_set(Evas_Object* view, const char* url_string)
 {
+  TTRACE_WEB("ewk_view_url_set url: %s", url_string);
+  LOG(INFO) << "view: " << view << ", url: " << url_string;
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, false);
-  EINA_SAFETY_ON_NULL_RETURN_VAL(url, false);
-  impl->SetURL(url);
+  EINA_SAFETY_ON_NULL_RETURN_VAL(url_string, false);
+  GURL url(url_string);
+  impl->SetURL(url, true);
   return true;
 }
 
 const char* ewk_view_url_get(const Evas_Object* view)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, 0);
-  return impl->GetURL();
+  return impl->GetURL().possibly_invalid_spec().c_str();
 }
 
+const char* ewk_view_original_url_get(const Evas_Object* view)
+{
+  EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, 0);
+  return impl->GetOriginalURL().possibly_invalid_spec().c_str();
+}
 
 Eina_Bool ewk_view_reload(Evas_Object *view)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, false);
+  LOG(INFO) << "view: " << view;
   impl->Reload();
   return true;
 }
@@ -155,7 +179,7 @@ Eina_Bool ewk_view_reload(Evas_Object *view)
 Eina_Bool ewk_view_reload_bypass_cache(Evas_Object *view)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, false);
-  impl->ReloadIgnoringCache();
+  impl->ReloadBypassingCache();
   return true;
 }
 
@@ -185,17 +209,25 @@ double ewk_view_load_progress_get(const Evas_Object* view)
   return impl->GetProgressValue();
 }
 
-Eina_Bool ewk_view_scale_set(const Evas_Object* view, double scale_factor, int x, int y)
+Eina_Bool ewk_view_scale_set(Evas_Object* view, double scale_factor, int x, int y)
 {
-  // TODO: We should implement AC in order to work this API normally.
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, EINA_FALSE);
-  impl->SetScale(scale_factor, x, y);
+  impl->SetScale(scale_factor);
+  impl->SetScroll(x, y);
+  LOG(INFO) << "view: " << view << ", scale_factor: " << scale_factor << ", x:" << x << ", y:" << y;
   return EINA_TRUE;
 }
 
+void ewk_view_scale_changed_callback_set(
+    Evas_Object* view,
+    Ewk_View_Scale_Changed_Callback callback,
+    void* user_data) {
+  EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
+  impl->SetScaleChangedCallback(callback, user_data);
+}
+
 double ewk_view_scale_get(const Evas_Object *view)
 {
-  // TODO: We should implement AC in order to work this API normally.
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, -1);
   return impl->GetScale();
 }
@@ -203,12 +235,14 @@ double ewk_view_scale_get(const Evas_Object *view)
 Eina_Bool ewk_view_back(Evas_Object *view)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, false);
+  LOG(INFO) << "view: " << view;
   return impl->GoBack();
 }
 
 Eina_Bool ewk_view_forward(Evas_Object *view)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, false);
+  LOG(INFO) << "view: " << view;
   return impl->GoForward();
 }
 
@@ -234,6 +268,7 @@ Eina_Bool ewk_view_html_string_load(Evas_Object* view, const char* html, const c
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, EINA_FALSE);
   EINA_SAFETY_ON_NULL_RETURN_VAL(html, EINA_FALSE);
+  LOG(INFO) << "view: " << view;
   impl->LoadHTMLString(html, base_uri, unreachable_uri);
   return EINA_TRUE;
 }
@@ -294,6 +329,7 @@ void ewk_view_scale_range_get(Evas_Object* view, double* min_scale, double* max_
 void ewk_view_suspend(Evas_Object* ewkView)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl);
+  LOG(INFO) << "view: " << ewkView;
   impl->Suspend();
 }
 
@@ -313,7 +349,7 @@ Eina_Bool ewk_view_url_request_set(Evas_Object* ewkView, const char* url, Ewk_Ht
     loadtype = content::NavigationController::LOAD_TYPE_DEFAULT;
     break;
   case EWK_HTTP_METHOD_POST:
-    loadtype = content::NavigationController::LOAD_TYPE_BROWSER_INITIATED_HTTP_POST;
+    loadtype = content::NavigationController::LOAD_TYPE_HTTP_POST;
     break;
   default:
     LOG(ERROR) << "Not supported HTTP Method.";
@@ -347,24 +383,17 @@ Eina_Bool ewk_view_html_contents_set(Evas_Object* view, const char* html, const
 
 Eina_Bool ewk_view_page_visibility_state_set(Evas_Object* ewkView, Ewk_Page_Visibility_State page_visibility_state, Eina_Bool initial_state)
 {
-  EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl,false);
-  switch (page_visibility_state) {
-    case EWK_PAGE_VISIBILITY_STATE_VISIBLE :
-      impl->Show();
-      break;
-    case EWK_PAGE_VISIBILITY_STATE_HIDDEN :
-      impl->Hide();
-      break;
-    default:
-      break;
-  }
-  return true;
+  // TODO: Should we send initial_state to |Page::setVisibilityState()|?.
+  // isInitialState parameter seems be true only in the constructor of WebViewImpl.
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, false);
+
+  return impl->SetPageVisibility(page_visibility_state);
 }
 
 Eina_Bool ewk_view_user_agent_set(Evas_Object* ewkView, const char* user_agent)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, false);
-
+  LOG(INFO) << "view: " << ewkView << ", user_agent: " << user_agent;
   return impl->SetUserAgent(user_agent);
 }
 
@@ -413,29 +442,19 @@ Eina_Bool ewk_view_custom_header_clear(const Evas_Object* ewkView)
 }
 
 
-Eina_Bool ewk_view_visibility_set(const Evas_Object* view, Eina_Bool enable)
+Eina_Bool ewk_view_visibility_set(Evas_Object* view, Eina_Bool enable)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, EINA_FALSE);
-
-  if (enable)
-    impl->Show();
-  else
-    impl->Hide();
-
-  return EINA_TRUE;
+  LOG(INFO) << "view: " << view << ", enable:" << (bool)enable;
+  return impl->SetVisibility(enable);
 }
 
 Evas_Object* ewk_view_screenshot_contents_get(const Evas_Object* view, Eina_Rectangle view_area, float scale_factor, Evas* canvas)
 {
   EINA_SAFETY_ON_NULL_RETURN_VAL(canvas, NULL);
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, NULL);
-  // Zoom level equality (<=0.001) is sufficient compared to high precision std::numeric_value::epsilon.
-  if (!content::ZoomValuesEqual(scale_factor, 1.0)) {
-    LOG(ERROR) << "We only support scale factor of 1.0."
-               << "Scaling option will be supported after hardware acceleration is enabled.";
-    return NULL;
-  }
-  return impl->GetSnapshot(view_area);
+  LOG(INFO) << "view: " << view;
+  return impl->GetSnapshot(view_area, scale_factor);
 }
 
 Eina_Bool ewk_view_screenshot_contents_get_async(const Evas_Object* view, Eina_Rectangle view_area,
@@ -443,37 +462,36 @@ Eina_Bool ewk_view_screenshot_contents_get_async(const Evas_Object* view, Eina_R
 {
   EINA_SAFETY_ON_NULL_RETURN_VAL(callback, EINA_FALSE);
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, EINA_FALSE);
-  // Zoom level equality (<=0.001) is sufficient compared to high precision std::numeric_value::epsilon.
-  if (!content::ZoomValuesEqual(scale_factor, 1.0)) {
-    LOG(ERROR) << "We only support scale factor of 1.0."
-               << "Scaling option will be supported after hardware acceleration is enabled.";
-    return EINA_FALSE;
-  }
-  return impl->GetSnapshotAsync(view_area, callback, user_data) ? EINA_TRUE : EINA_FALSE;
+  LOG(INFO) << "view: " << view;
+  return impl->GetSnapshotAsync(view_area, callback, user_data, scale_factor)
+             ? EINA_TRUE
+             : EINA_FALSE;
 }
 
 unsigned int ewk_view_inspector_server_start(Evas_Object* ewkView, unsigned int port)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, false);
+  LOG(INFO) << "view: " << ewkView << ", port:" << port;
   return impl->StartInspectorServer(port);
 }
 
 Eina_Bool ewk_view_inspector_server_stop(Evas_Object* ewkView)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, false);
+  LOG(INFO) << "view: " << ewkView;
   return impl->StopInspectorServer();
 }
 
-Evas_Object* ewk_view_cache_image_get(const Evas_Object* ewkView, const char* imageUrl, Evas* canvas)
+Eina_Bool ewk_view_cache_image_get(const Evas_Object* o, const char* image_url, Evas* canvas, Ewk_View_Cache_Image_Get_Callback callback, void* user_data)
 {
   LOG_EWK_API_MOCKUP();
-       return NULL;
+  return false;
 }
 
 void ewk_view_scroll_by(Evas_Object* ewkView, int deltaX, int deltaY)
 {
   int x, y;
-
+  LOG(INFO) << "view: " << ewkView << ", deltaX:" << deltaX << ", deltaY:" << deltaY;
   if (EINA_TRUE == ewk_view_scroll_pos_get(ewkView, &x, &y)) {
     ewk_view_scroll_set(ewkView, x + deltaX, y + deltaY);
   }
@@ -482,14 +500,13 @@ void ewk_view_scroll_by(Evas_Object* ewkView, int deltaX, int deltaY)
 Eina_Bool ewk_view_scroll_pos_get(Evas_Object* ewkView, int* x, int* y)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, false);
-  EINA_SAFETY_ON_NULL_RETURN_VAL(x, EINA_FALSE);
-  EINA_SAFETY_ON_NULL_RETURN_VAL(y, EINA_FALSE);
   return impl->GetScrollPosition(x, y);
 }
 
 Eina_Bool ewk_view_scroll_set(Evas_Object* view, int x, int y)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, EINA_FALSE);
+  LOG(INFO) << "view: " << view << ", x:" << x << ", y:" << y;
   impl->SetScroll(x, y);
 
   return EINA_TRUE;
@@ -506,6 +523,11 @@ Eina_Bool ewk_view_scroll_size_get(const Evas_Object* view, int* width, int* hei
   return EINA_TRUE;
 }
 
+void ewk_view_clear_tiles_on_hide_enabled_set(Evas_Object* ewkView, Eina_Bool enable)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
 void ewk_view_password_confirm_popup_callback_set(Evas_Object* view, Ewk_View_Password_Confirm_Popup_Callback callback, void* user_data)
 {
   LOG_EWK_API_MOCKUP();
@@ -519,6 +541,7 @@ void ewk_view_password_confirm_popup_reply(Evas_Object* ewkView, Ewk_Password_Po
 void ewk_view_javascript_alert_callback_set(Evas_Object* view, Ewk_View_JavaScript_Alert_Callback callback, void* user_data)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
+  LOG(INFO) << "view: " << view;
   if (callback)
     impl->SetJavaScriptAlertCallback(callback, user_data);
 }
@@ -526,12 +549,14 @@ void ewk_view_javascript_alert_callback_set(Evas_Object* view, Ewk_View_JavaScri
 void ewk_view_javascript_alert_reply(Evas_Object* view)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
+  LOG(INFO) << "view: " << view;
   impl->JavaScriptAlertReply();
 }
 
 void ewk_view_javascript_confirm_callback_set(Evas_Object* view, Ewk_View_JavaScript_Confirm_Callback callback, void* user_data)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
+  LOG(INFO) << "view: " << view;
   if (callback)
     impl->SetJavaScriptConfirmCallback(callback, user_data);
 }
@@ -539,12 +564,14 @@ void ewk_view_javascript_confirm_callback_set(Evas_Object* view, Ewk_View_JavaSc
 void ewk_view_javascript_confirm_reply(Evas_Object* view, Eina_Bool result)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
+  LOG(INFO) << "view: " << view;
   impl->JavaScriptConfirmReply(result);
 }
 
 void ewk_view_javascript_prompt_callback_set(Evas_Object* view, Ewk_View_JavaScript_Prompt_Callback callback, void* user_data)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
+  LOG(INFO) << "view: " << view;
   if (callback)
     impl->SetJavaScriptPromptCallback(callback, user_data);
 }
@@ -552,38 +579,57 @@ void ewk_view_javascript_prompt_callback_set(Evas_Object* view, Ewk_View_JavaScr
 void ewk_view_javascript_prompt_reply(Evas_Object* view, const char* result)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
+  LOG(INFO) << "view: " << view;
   impl->JavaScriptPromptReply(result);
 }
 
 void ewk_view_before_unload_confirm_panel_callback_set(Evas_Object* ewkView, Ewk_View_Before_Unload_Confirm_Panel_Callback callback, void* userData)
 {
-  LOG_EWK_API_MOCKUP();
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl);
+  EINA_SAFETY_ON_NULL_RETURN(callback);
+  impl->SetBeforeUnloadConfirmPanelCallback(callback, userData);
 }
 
 void ewk_view_before_unload_confirm_panel_reply(Evas_Object* ewkView, Eina_Bool result)
 {
-  LOG_EWK_API_MOCKUP();
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl);
+  impl->ReplyBeforeUnloadConfirmPanel(result);
 }
 
 Eina_Bool ewk_view_web_application_capable_get(Evas_Object* ewkView, Ewk_Web_App_Capable_Get_Callback callback, void* userData)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, EINA_FALSE);
   EINA_SAFETY_ON_NULL_RETURN_VAL(callback, EINA_FALSE);
+#if !defined(EWK_BRINGUP)  // FIXME::M94 Bringup IPC to MOJO conversion in
+                           // WebAppCapableGet
   return impl->WebAppCapableGet(callback, userData) ? EINA_TRUE : EINA_FALSE;
+#else
+  return EINA_FALSE;
+#endif
 }
 
 Eina_Bool ewk_view_web_application_icon_url_get(Evas_Object* ewkView, Ewk_Web_App_Icon_URL_Get_Callback callback, void* userData)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, EINA_FALSE);
   EINA_SAFETY_ON_NULL_RETURN_VAL(callback, EINA_FALSE);
+#if !defined(EWK_BRINGUP)  // FIXME::M94 Bringup IPC to MOJO conversion in
+                           // WebAppIconUrlGet
   return impl->WebAppIconUrlGet(callback, userData) ? EINA_TRUE : EINA_FALSE;
+#else
+  return EINA_FALSE;
+#endif
 }
 
 Eina_Bool ewk_view_web_application_icon_urls_get(Evas_Object* ewkView, Ewk_Web_App_Icon_URLs_Get_Callback callback, void* userData)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, EINA_FALSE);
   EINA_SAFETY_ON_NULL_RETURN_VAL(callback, EINA_FALSE);
+#if !defined(EWK_BRINGUP)  // FIXME::M94 Bringup IPC to MOJO conversion in
+                           // WebAppIconUrlsGet
   return impl->WebAppIconUrlsGet(callback, userData) ? EINA_TRUE : EINA_FALSE;
+#else
+  return EINA_FALSE;
+#endif
 }
 
 Eina_Bool ewk_view_command_execute(Evas_Object* view, const char* command, const char* value)
@@ -594,7 +640,7 @@ Eina_Bool ewk_view_command_execute(Evas_Object* view, const char* command, const
   return true;
 }
 
-Eina_Bool ewk_view_contents_size_get(Evas_Object* view, Evas_Coord* width, Evas_Coord* height)
+Eina_Bool ewk_view_contents_size_get(const Evas_Object* view, Evas_Coord* width, Evas_Coord* height)
 {
   if (width)
     *width = 0;
@@ -623,13 +669,13 @@ Eina_Bool ewk_view_script_execute(Evas_Object* ewkView, const char* script, Ewk_
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, false);
   EINA_SAFETY_ON_NULL_RETURN_VAL(script, false);
+  LOG(INFO) << "view: " << ewkView;
   // callback can be null, so do not test it for null
   if (0 != strcmp(script, "")) //check for empty string
     return impl->ExecuteJavaScript(script, callback, user_data);
   return false;
 }
 
-
 Eina_Bool ewk_view_plain_text_get(Evas_Object* view, Ewk_View_Plain_Text_Get_Callback callback, void* user_data)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, EINA_FALSE);
@@ -680,29 +726,17 @@ Eina_Bool ewk_view_popup_menu_multiple_select(Evas_Object* ewkView, Eina_Inarray
   return false;
 }
 
-/*
- * Sends the new orientation of the device.
- *
- * If orientation value is changed, orientationchanged event will occur.
- *
- * @param view object to receive orientation event.
- * @param orientation the new orientation of the device. (degree)
- *
- * orientation will be 0 degrees when the device is oriented to natural position,
- *                     90 degrees when it's left side is at the top,
- *                    -90 degrees when it's right side is at the top,
- *                     180 degrees when it is upside down.
- */
 void ewk_view_orientation_send(Evas_Object* ewkView, int orientation)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl);
+  LOG(INFO) << "view: " << ewkView << ", orientation:" << orientation;
   impl->SetOrientation(orientation);
 }
 
 void ewk_view_encoding_custom_set(Evas_Object* ewkView, const char* encoding)
 {
-  EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl);
-  impl->SetOverrideEncoding(std::string(encoding));
+  // Chromium does not support this feature hence the comment
+  LOG_EWK_API_MOCKUP("Not Supported by chromium");
 }
 
 Eina_Bool ewk_view_text_selection_range_get(const Evas_Object* view, Eina_Rectangle* left_rect, Eina_Rectangle* right_rect)
@@ -723,13 +757,13 @@ Eina_Bool ewk_view_text_selection_range_get(const Evas_Object* view, Eina_Rectan
 Eina_Bool ewk_view_text_selection_clear(Evas_Object *view)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, EINA_FALSE);
-  return impl->GetSelectionController()->ClearSelectionViaEWebView() ? EINA_TRUE : EINA_FALSE;
+  return impl->ClearSelection();
 }
 
 const char* ewk_view_text_selection_text_get(Evas_Object* view)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, NULL);
-  return impl->GetSelectedText();
+  return impl->CacheSelectedText();
 }
 
 void ewk_view_focused_input_element_value_set(Evas_Object* ewkView, const char* value)
@@ -743,26 +777,33 @@ const char* ewk_view_focused_input_element_value_get(Evas_Object* ewkView)
   return NULL;
 }
 
+Eina_Bool ewk_view_horizontal_panning_hold_get(Evas_Object* ewkView) {
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, EINA_FALSE);
+  return impl->GetHorizontalPanningHold();
+}
+
+void ewk_view_horizontal_panning_hold_set(Evas_Object* ewkView,
+                                          Eina_Bool hold) {
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl);
+  impl->SetHorizontalPanningHold(hold);
+}
+
 Eina_Bool ewk_view_vertical_panning_hold_get(Evas_Object* ewkView)
 {
-  LOG_EWK_API_MOCKUP();
-  return false;
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, EINA_FALSE);
+  return impl->GetVerticalPanningHold();
 }
 
-void ewk_view_vertical_panning_hold_set(Evas_Object* view, Eina_Bool hold)
-{
-  LOG_EWK_API_MOCKUP();
+void ewk_view_vertical_panning_hold_set(Evas_Object* view, Eina_Bool hold) {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
-  // FIX ME: Currently the pan support is not present.
-  // In WK2 panning was implemented with evas directly, here its with chorme gesture reconignation
-  // So paning is not present yet
+  impl->SetVerticalPanningHold(hold);
 }
 
 void ewk_view_orientation_lock_callback_set(Evas_Object* ewkView, Ewk_Orientation_Lock_Cb func, void* data)
 {
-  EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl);
-  EINA_SAFETY_ON_NULL_RETURN(func);
-  impl->SetOrientationLockCallback(func, data);
+  LOG_EWK_API_MOCKUP("This API is deprecated, to use orientation lock/unlock "
+      "API please use functions lock_orientation/unlock_orientation provided "
+      "by Ewk_View_Smart_Class.");
 }
 
 
@@ -803,12 +844,6 @@ Ewk_Frame_Ref ewk_view_main_frame_get(Evas_Object* o)
   return static_cast<Ewk_Frame_Ref>(impl->GetMainFrame());
 }
 
-Eina_Bool ewk_view_main_frame_scrollbar_visible_set(Evas_Object* ewkView, Eina_Bool visible)
-{
-  LOG_EWK_API_MOCKUP();
-  return false;
-}
-
 void ewk_view_content_security_policy_set(Evas_Object* ewkView, const char* policy, Ewk_CSP_Header_Type type)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl);
@@ -828,20 +863,22 @@ void ewk_view_application_cache_permission_reply(Evas_Object* ewkView, Eina_Bool
   LOG_EWK_API_MOCKUP("Not Supported by chromium");
 }
 
-void ewk_view_exceeded_indexed_database_quota_callback_set(Evas_Object* ewkView, Ewk_View_Exceeded_Indexed_Database_Quota_Callback callback, void* userData)
+void ewk_view_exceeded_indexed_database_quota_callback_set(Evas_Object* view, Ewk_View_Exceeded_Indexed_Database_Quota_Callback callback, void* user_data)
 {
   // Chromium does not support quota for Indexed DB only.
   // IndexedDB uses temporary storage that is shared
   // between other features.
-  LOG_EWK_API_MOCKUP("Not Supported by chromium");
+  EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
+  impl->SetExceededIndexedDatabaseQuotaCallback(callback, user_data);
 }
 
-void ewk_view_exceeded_indexed_database_quota_reply(Evas_Object* ewkView, Eina_Bool allow)
+void ewk_view_exceeded_indexed_database_quota_reply(Evas_Object* view, Eina_Bool allow)
 {
   // Chromium does not support quota for Indexed DB only.
   // IndexedDB uses temporary storage that is shared
   // between other features.
-  LOG_EWK_API_MOCKUP("Not Supported by chromium");
+  EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
+  impl->ExceededIndexedDatabaseQuotaReply(allow);
 }
 
 Eina_Bool ewk_view_text_find(Evas_Object *view, const char *text, Ewk_Find_Options options, unsigned int max_match_count)
@@ -897,15 +934,20 @@ void ewk_view_exceeded_local_file_system_quota_reply(Evas_Object* ewkView, Eina_
   LOG_EWK_API_MOCKUP();
 }
 
-void ewk_view_intercept_request_callback_set (Evas_Object* ewkView, Ewk_View_Intercept_Request_Callback callback, void* user_data)
+void ewk_view_unfocus_allow_callback_set(Evas_Object* ewkView, Ewk_View_Unfocus_Allow_Callback callback, void* user_data)
 {
-  LOG_EWK_API_MOCKUP();
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl);
+  impl->SetViewUnfocusAllowCallback(callback, user_data);
 }
 
-void ewk_view_unfocus_allow_callback_set(Evas_Object* ewkView, Ewk_View_Unfocus_Allow_Callback callback, void* user_data)
+void ewk_view_smartrc_show_mic_notification_callback_set(Evas_Object* ewkView, Ewk_View_SmartRC_Mic_Notification_Callback callback, void* user_data)
 {
+#if BUILDFLAG(IS_TIZEN_TV)
   EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl);
-  impl->SetViewUnfocusAllowCallback(callback, user_data);
+  impl->SetViewSmartrcMicNotificationCallback(callback, user_data);
+#else
+  LOG_EWK_API_MOCKUP("This API is only available in Tizen TV product.");
+#endif
 }
 
 void ewk_view_geolocation_permission_callback_set(Evas_Object* ewk_view, Ewk_View_Geolocation_Permission_Callback callback, void* user_data)
@@ -950,6 +992,14 @@ void ewk_view_user_media_permission_callback_set(Evas_Object* ewk_view,
   impl->SetViewUserMediaPermissionCallback(callback, user_data);
 }
 
+void ewk_view_user_media_permission_query_callback_set(
+    Evas_Object* ewk_view,
+    Ewk_View_User_Media_Permission_Query_Callback callback,
+    void* user_data) {
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewk_view, impl);
+  impl->SetViewUserMediaPermissionQueryCallback(callback, user_data);
+}
+
 static Eina_Bool _ewk_view_default_user_media_permission(
     Evas_Object* ewk_view,
     Ewk_User_Media_Permission_Request* user_media_permission_request,
@@ -957,23 +1007,8 @@ static Eina_Bool _ewk_view_default_user_media_permission(
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(ewk_view, impl, EINA_FALSE);
 
-  std::string value = std::string(ewk_security_origin_host_get(
-      ewk_user_media_permission_request_origin_get(
-          user_media_permission_request)));
-
-  std::string message = std::string(dgettext(
-      "WebKit",
-      "IDS_WEBVIEW_POP_P1SS_HP2SS_IS_REQUESTING_PERMISSION_TO_USE_YOUR_CAMERA"));
-
-  std::string replace_str = std::string("%1$s");
-  size_t pos = message.find(replace_str.c_str());
-  if (pos != std::string::npos)
-    message.replace(pos, replace_str.length(), value.c_str());
-
-  replace_str = std::string("(%2$s)");
-  pos = message.find(replace_str.c_str());
-  if (pos != std::string::npos)
-    message.replace(pos, replace_str.length(), "");
+  std::string message =
+    CreatePermissionMessageRequest(user_media_permission_request);
 
   // add for suspending
   ewk_user_media_permission_request_suspend(user_media_permission_request);
@@ -998,8 +1033,10 @@ char* ewk_view_get_cookies_for_url(Evas_Object* view, const char* url)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, 0);
   EINA_SAFETY_ON_NULL_RETURN_VAL(url, 0);
-  std::string cookiesForURL;
-  cookiesForURL = impl->context()->cookieManager()->GetCookiesForURL(std::string(url));
+  EINA_SAFETY_ON_NULL_RETURN_VAL(impl->context(), 0);
+  EINA_SAFETY_ON_NULL_RETURN_VAL(impl->context()->cookieManager(), 0);
+  std::string cookiesForURL =
+      impl->context()->cookieManager()->GetCookiesForURL(std::string(url));
   if (cookiesForURL.empty())
     return NULL;
   return strndup(cookiesForURL.c_str(), cookiesForURL.length());
@@ -1008,6 +1045,7 @@ char* ewk_view_get_cookies_for_url(Evas_Object* view, const char* url)
 Eina_Bool ewk_view_fullscreen_exit(Evas_Object* view)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, EINA_FALSE);
+  LOG(INFO) << "view: " << view;
   impl->ExitFullscreen();
   return EINA_TRUE;
 }
@@ -1015,8 +1053,7 @@ Eina_Bool ewk_view_fullscreen_exit(Evas_Object* view)
 Eina_Bool ewk_view_draws_transparent_background_set(Evas_Object *view, Eina_Bool enabled)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, EINA_FALSE);
-  impl->SetDrawsTransparentBackground(enabled);
-  return EINA_TRUE;
+  return impl->SetDrawsTransparentBackground(!!enabled);
 }
 
 void ewk_view_browser_font_set(Evas_Object* ewkView)
@@ -1030,7 +1067,7 @@ void ewk_view_session_data_get(Evas_Object* ewkView, const char** data, unsigned
   EINA_SAFETY_ON_NULL_RETURN(data);
   EINA_SAFETY_ON_NULL_RETURN(length);
 
-  EWebView* impl = GetWebViewFromEvasObject(ewkView);
+  EWebView* impl = GetEWebViewFromEwkView(ewkView);
   if (!impl) {
     *data = NULL;
     *length = 0;
@@ -1045,10 +1082,14 @@ Eina_Bool ewk_view_mode_set(Evas_Object* ewkView, Ewk_View_Mode view_mode)
   EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, EINA_FALSE);
 
   if (view_mode == EWK_VIEW_MODE_WINDOWED) {
+#if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
     impl->SetViewMode(blink::WebViewModeWindowed);
+#endif
     return EINA_TRUE;
   } else if (view_mode == EWK_VIEW_MODE_FULLSCREEN) {
+#if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
     impl->SetViewMode(blink::WebViewModeFullscreen);
+#endif
     return EINA_TRUE;
   } else {
     return EINA_FALSE;
@@ -1103,29 +1144,26 @@ static Eina_Bool _ewk_view_default_notification_permission(
 
 void ewk_view_draw_focus_ring_enable_set(Evas_Object* ewkView, Eina_Bool enable)
 {
-#if defined(OS_TIZEN_TV) && !defined(EWK_BRINGUP)
-  EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl);
-  impl->setDrawFocusRing(enable);
-#else
-   LOG_EWK_API_MOCKUP("Only for Tizen TV Browser");
-#endif
+  LOG_EWK_API_MOCKUP("This API is deprecated");
 }
 
 double ewk_view_page_zoom_get(const Evas_Object* ewkView)
 {
-  LOG_EWK_API_MOCKUP("for Tizen TV Browser");
-  return 0;
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, -1.0);
+  return impl->GetPageZoomFactor();
 }
 
 Eina_Bool ewk_view_page_zoom_set(Evas_Object* ewkView, double zoomFactor)
 {
-  LOG_EWK_API_MOCKUP("for Tizen TV Browser");
-  return false;
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, EINA_FALSE);
+  impl->SetPageZoomFactor(zoomFactor);
+  return EINA_TRUE;
 }
 
 Evas_Object* ewk_view_smart_add(Evas* canvas, Evas_Smart* smart, Ewk_Context* context, Ewk_Page_Group* pageGroup)
 {
   EINA_SAFETY_ON_NULL_RETURN_VAL(context, 0);
+  LOG(INFO) << "evas: " << canvas << ", context:" << context;
   return CreateWebViewAsEvasObject(context, canvas, smart);
 }
 
@@ -1140,7 +1178,9 @@ void ewk_view_quota_permission_request_reply(const Ewk_Quota_Permission_Request*
   EINA_SAFETY_ON_NULL_RETURN(request);
   Evas_Object* ewkView = request->getView();
   EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl);
+#if !defined(EWK_BRINGUP)  // FIXME: m114 bringup
   impl->QuotaRequestReply(request, allow == EINA_TRUE);
+#endif
 }
 
 void ewk_view_quota_permission_request_cancel(const Ewk_Quota_Permission_Request* request)
@@ -1148,5 +1188,760 @@ void ewk_view_quota_permission_request_cancel(const Ewk_Quota_Permission_Request
   EINA_SAFETY_ON_NULL_RETURN(request);
   Evas_Object* ewkView = request->getView();
   EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl);
+#if !defined(EWK_BRINGUP)  // FIXME: m114 bringup
   impl->QuotaRequestCancel(request);
+#endif
+}
+
+Eina_Bool ewk_view_focus_set(const Evas_Object* view, Eina_Bool focused)
+{
+  EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, EINA_FALSE);
+  LOG(INFO) << "view: " << view << ", focused:" << (bool)focused;
+  impl->SetFocus(focused);
+  return EINA_TRUE;
+}
+
+Eina_Bool ewk_view_focus_get(const Evas_Object* view)
+{
+  EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, EINA_FALSE);
+  return impl->HasFocus();
+}
+
+Eina_Bool ewk_view_page_close(Evas_Object* o)
+{
+  EWK_VIEW_IMPL_GET_OR_RETURN(o, impl, EINA_FALSE);
+
+  impl->ClosePage();
+  return EINA_TRUE;
+}
+
+void ewk_view_session_timeout_set(Evas_Object* o, unsigned long timeout)
+{
+  EWK_VIEW_IMPL_GET_OR_RETURN(o, impl);
+  impl->SetSessionTimeout(timeout);
+}
+
+Evas_Object* ewk_view_widget_get(Evas_Object* view)
+{
+  LOG_EWK_API_MOCKUP();
+  return NULL;
+}
+
+Eina_Bool ewk_view_draws_transparent_background_get(Evas_Object* o)
+{
+  EWK_VIEW_IMPL_GET_OR_RETURN(o, impl, EINA_FALSE);
+  return impl->GetDrawsTransparentBackground();
+}
+
+Eina_Bool ewk_view_did_change_theme_color_callback_set(
+    Evas_Object* o,
+    Ewk_View_Did_Change_Theme_Color_Callback callback,
+    void* user_data) {
+  EWK_VIEW_IMPL_GET_OR_RETURN(o, impl, EINA_FALSE);
+  impl->SetDidChangeThemeColorCallback(callback, user_data);
+  return EINA_TRUE;
+}
+
+Eina_Bool ewk_view_split_scroll_overflow_enabled_get(const Evas_Object* o) {
+  LOG_EWK_API_MOCKUP();
+  return false;
+}
+
+Eina_Bool ewk_view_save_page_as_mhtml(Evas_Object* o, const char* path, Ewk_View_Save_Page_Callback callback, void* user_data)
+{
+  EWK_VIEW_IMPL_GET_OR_RETURN(o, impl, EINA_FALSE);
+  EINA_SAFETY_ON_NULL_RETURN_VAL(path, EINA_FALSE);
+  EINA_SAFETY_ON_NULL_RETURN_VAL(callback, EINA_FALSE);
+  return impl->SavePageAsMHTML(path, callback, user_data);
+}
+
+void ewk_view_reader_mode_set(Evas_Object* ewk_view, Eina_Bool enable)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
+Eina_Bool ewk_view_top_controls_height_set(Evas_Object* ewk_view, size_t top_height, size_t bottom_height)
+{
+  LOG_EWK_API_MOCKUP();
+  return false;
+}
+
+Eina_Bool ewk_view_top_controls_state_set(Evas_Object* ewk_view, Ewk_Top_Control_State constraint,  Ewk_Top_Control_State current, Eina_Bool animation)
+{
+  LOG_EWK_API_MOCKUP();
+  return false;
+}
+
+Eina_Bool ewk_view_main_frame_scrollbar_visible_set(Evas_Object* ewk_view,
+                                                    Eina_Bool visible) {
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewk_view, impl, EINA_FALSE);
+  return impl->SetMainFrameScrollbarVisible(!!visible);
+}
+
+Eina_Bool ewk_view_main_frame_scrollbar_visible_get(
+    Evas_Object* ewk_view,
+    Ewk_View_Main_Frame_Scrollbar_Visible_Get_Callback callback,
+    void* user_data) {
+  EINA_SAFETY_ON_NULL_RETURN_VAL(callback, EINA_FALSE);
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewk_view, impl, EINA_FALSE);
+
+  return impl->GetMainFrameScrollbarVisible(callback, user_data);
+}
+
+Eina_Bool ewk_view_set_custom_device_pixel_ratio(Evas_Object* ewkView, Eina_Bool enabled)
+{
+  LOG_EWK_API_MOCKUP();
+  return false;
+}
+
+Ewk_Board_Decoding_Capabilities ewk_view_board_decoding_capabilities_get(
+  const Evas_Object* view)
+{
+  LOG_EWK_API_MOCKUP();
+  return EWK_BOARD_DECODING_CAPABILITIES_UNKNOWN;
+}
+
+void ewk_view_next_player_for_media_switch_set(
+  Evas_Object* view,
+  int player_id)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
+void ewk_view_sw_audio_decoding_set(
+  Evas_Object* view,
+  Eina_Bool use_sw_audio_decoder)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
+void ewk_view_set_video_geometry(
+  Evas_Object* view,
+  Eina_Rectangle v_area)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
+void ewk_view_release_players(
+  Evas_Object* view)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
+void ewk_view_player_set_visibility(
+  Evas_Object* view,
+  int video_id,
+  bool visibility)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
+void ewk_view_broadcast_set_visibility(
+  Evas_Object* view,
+  bool visibility)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
+void ewk_view_player_play(
+  Evas_Object* view,
+  int video_id)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
+void ewk_view_player_pause(
+  Evas_Object* view,
+  int video_id)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
+Eina_Bool ewk_media_translated_url_set(Evas_Object* ewkView, const char* url)
+{
+#if BUILDFLAG(IS_TIZEN_TV)
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, EINA_FALSE);
+  EINA_SAFETY_ON_NULL_RETURN_VAL(url, EINA_FALSE);
+  impl->SetTranslatedURL(url);
+  return EINA_TRUE;
+#else
+  LOG_EWK_API_MOCKUP("Only for Tizen TV.");
+  return false;
+#endif
+}
+
+#if BUILDFLAG(IS_TIZEN_TV)
+Eina_Bool ewk_view_app_preload_set(Evas_Object* ewkView, Eina_Bool is_preload)
+{
+  LOG_EWK_API_MOCKUP();
+  return false;
+}
+#endif
+
+Evas_Object* ewk_view_favicon_get(const Evas_Object* ewkView)
+{
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, nullptr);
+  EINA_SAFETY_ON_NULL_RETURN_VAL(impl->context(), nullptr);
+  const char* url = ewk_view_url_get(ewkView);
+  return impl->context()->AddFaviconObject(url, impl->GetEvas());
+}
+
+Eina_Bool ewk_view_html_string_override_current_entry_load(Evas_Object* view, const char* html, const char* base_uri, const char* unreachable_url)
+{
+#if BUILDFLAG(IS_TIZEN_TV)
+  EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, EINA_FALSE);
+  EINA_SAFETY_ON_NULL_RETURN_VAL(html, EINA_FALSE);
+  impl->LoadHTMLStringOverridingCurrentEntry(html, base_uri, unreachable_url);
+  return EINA_TRUE;
+#else
+  LOG_EWK_API_MOCKUP("Only for Tizen TV.");
+  return EINA_FALSE;
+#endif
 }
+
+Eina_Bool ewk_view_text_matches_count(Evas_Object* o, const char* text, Ewk_Find_Options options, unsigned max_match_count)
+{
+  LOG_EWK_API_MOCKUP();
+  return false;
+}
+
+void ewk_view_mirrored_blur_set(Evas_Object* o, Eina_Bool state)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
+void ewk_view_add_dynamic_certificate_path(const Evas_Object *ewkView, const char* host, const char* cert_path)
+{
+#if BUILDFLAG(IS_TIZEN_TV)
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl);
+  impl->AddDynamicCertificatePath(std::string(host), std::string(cert_path));
+#else
+  LOG_EWK_API_MOCKUP();
+#endif
+}
+
+void ewk_view_atk_deactivation_by_app(Evas_Object* view, Eina_Bool enable)
+{
+#if BUILDFLAG(IS_TIZEN_TV)
+  EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
+  LOG(INFO)<< "ewk_view_atk_deactivation_by_app, enable: " << (bool)enable;
+  impl->DeactivateAtk(enable == EINA_FALSE);
+#else
+  LOG_EWK_API_MOCKUP();
+#endif
+}
+
+char* ewk_view_cookies_get(Evas_Object* o, const char* url)
+{
+  LOG_EWK_API_MOCKUP();
+  return NULL;
+}
+
+void ewk_view_notification_show_callback_set(Evas_Object *o, Ewk_View_Notification_Show_Callback show_callback, void *user_data)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
+void ewk_view_notification_cancel_callback_set(Evas_Object *o, Ewk_View_Notification_Cancel_Callback cancel_callback, void *user_data)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
+const char* ewk_view_custom_encoding_get(const Evas_Object* o)
+{
+  LOG_EWK_API_MOCKUP();
+  return NULL;
+}
+
+Eina_Bool ewk_view_custom_encoding_set(Evas_Object* o, const char* encoding)
+{
+  LOG_EWK_API_MOCKUP();
+  return false;
+}
+
+void ewk_view_force_layout(const Evas_Object* o)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
+Eina_Bool ewk_view_send_key_event(Evas_Object* ewk_view, void* key_event, Eina_Bool is_press) {
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewk_view, impl, EINA_FALSE);
+  EINA_SAFETY_ON_NULL_RETURN_VAL(key_event, EINA_FALSE);
+#if BUILDFLAG(IS_TIZEN_TV)
+  LOG(INFO) << "view: " << ewk_view << ", is_press :" << (bool)is_press;
+#endif
+  impl->SendKeyEvent(ewk_view, key_event, !!is_press);
+  return EINA_TRUE;
+}
+
+Eina_Bool ewk_view_tts_mode_set(Evas_Object* view, ewk_tts_mode tts_mode) {
+#if defined(TIZEN_WEB_SPEECH_RECOGNITION)
+  switch (tts_mode) {
+    case EWK_TTS_MODE_DEFAULT:
+      content::TtsPlatformImplTizen::SetTtsMode(TTS_MODE_DEFAULT);
+      break;
+    case EWK_TTS_MODE_NOTIFICATION:
+      content::TtsPlatformImplTizen::SetTtsMode(TTS_MODE_NOTIFICATION);
+      break;
+    case EWK_TTS_MODE_SCREEN_READER:
+      content::TtsPlatformImplTizen::SetTtsMode(TTS_MODE_SCREEN_READER);
+      break;
+    default:
+      LOG(ERROR) << "Not supported TTS mode: " << static_cast<int>(tts_mode);
+      return EINA_FALSE;
+  }
+  return EINA_TRUE;
+#else
+  LOG_EWK_API_MOCKUP("API unavailable.");
+  return EINA_FALSE;
+#endif
+}
+
+Eina_Bool ewk_view_javascript_message_handler_add(
+    Evas_Object* view,
+    Ewk_View_Script_Message_Cb callback,
+    const char* name) {
+  EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, EINA_FALSE);
+  EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
+  return impl->AddJavaScriptMessageHandler(view, callback, std::string(name));
+}
+
+Eina_Bool ewk_view_evaluate_javascript(Evas_Object* view,
+                                       const char* name,
+                                       const char* result) {
+  EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, EINA_FALSE);
+  EINA_SAFETY_ON_NULL_RETURN_VAL(result, EINA_FALSE);
+  EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
+
+  std::string function(name);
+  std::string data(result);
+  std::string pattern("\n");
+  std::string replace("</br>");
+  std::string::size_type pos = 0;
+  std::string::size_type offset = 0;
+  while ((pos = data.find(pattern, offset)) != std::string::npos) {
+    data.replace(data.begin() + pos, data.begin() + pos + pattern.size(),
+                 replace);
+    offset = pos + replace.size();
+  }
+
+  // For JSON Object or Array.
+  if (result[0] == '{' || result[0] == '[') {
+    data = "javascript:" + function + "(JSON.parse('" + data + "'))";
+  } else {
+    data = "javascript:" + function + "('" + data + "')";
+  }
+
+  return impl->ExecuteJavaScript(data.c_str(), NULL, 0);
+}
+
+void ewk_view_authentication_callback_set(
+    Evas_Object* ewk_view,
+    Ewk_View_Authentication_Callback callback,
+    void* user_data)
+{
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewk_view, impl);
+  impl->SetViewAuthCallback(callback, user_data);
+
+}
+
+static void _ewk_view_default_authentication(Evas_Object* ewk_view,
+                                             Ewk_Auth_Challenge* auth_challenge,
+                                             void* user_data)
+{
+  AuthenticationChallengePopup::CreateAndShow(auth_challenge, ewk_view);
+}
+
+void ewk_view_app_installation_request_callback_set(Evas_Object* o, Ewk_App_Installation_Request_Callback callback, void* user_data)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
+Eina_Bool ewk_view_bg_color_set(Evas_Object* o, int r, int g, int b, int a) {
+  EWK_VIEW_IMPL_GET_OR_RETURN(o, impl, EINA_FALSE);
+  if (r < 0 || r > 255 || g < 0 || g > 255 || b < 0 || b > 255 || a < 0 ||
+    a > 255) {
+    LOG(ERROR) << "Invalid background color";
+    return EINA_FALSE;
+  }
+  return impl->SetBackgroundColor(r, g, b, a);
+}
+
+Eina_Bool ewk_view_key_events_enabled_set(Evas_Object* o, Eina_Bool enabled) {
+#if BUILDFLAG(IS_TIZEN_TV)
+  EWK_VIEW_IMPL_GET_OR_RETURN(o, impl, EINA_FALSE);
+  LOG(INFO)<< "ewk_view_key_events_enabled_set, enabled: " << (bool)enabled;
+  return impl->SetKeyEventsEnabled(!!enabled);
+#else
+  LOG_EWK_API_MOCKUP("This API is only available in Tizen TV product.");
+  return EINA_FALSE;
+#endif
+
+}
+
+Eina_Bool ewk_view_bg_color_get(Evas_Object* view,
+                                Ewk_View_Background_Color_Get_Callback callback,
+                                void* user_data) {
+  EINA_SAFETY_ON_NULL_RETURN_VAL(callback, EINA_FALSE);
+  EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, EINA_FALSE);
+
+  return impl->GetBackgroundColor(callback, user_data);
+}
+
+void ewk_view_clear_all_tiles_resources(Evas_Object* ewkView) {
+#if BUILDFLAG(IS_TIZEN_TV)
+  LOG(INFO) << "view: " << ewkView;
+#else
+  LOG_EWK_API_MOCKUP();
+#endif
+}
+
+Eina_Bool ewk_view_edge_scroll_by(Evas_Object *ewkView, int dx, int dy)
+{
+  LOG_EWK_API_MOCKUP();
+#if BUILDFLAG(IS_TIZEN_TV)
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, EINA_FALSE);
+  LOG(INFO) << "view: " << ewkView << ", dx:" << dx << ", dy:" << dy;
+  return impl->EdgeScrollBy(dx, dy);
+#else
+  LOG_EWK_API_MOCKUP("edge_scroll_by feature is not enabled");
+  return EINA_FALSE;
+#endif
+}
+
+Eina_Bool ewk_view_set_support_video_hole(Evas_Object* ewkView,
+                                          void* window,
+                                          Eina_Bool enable,
+                                          Eina_Bool isVideoWindow) {
+  LOG_EWK_API_MOCKUP();
+#if defined(TIZEN_VIDEO_HOLE)
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, EINA_FALSE);
+  LOG(INFO) << "view: " << ewkView << ", enable:" << (bool)enable;
+  // Video hole is set false by default. So further calls are not needed
+  // if |enable| is false.
+  if (enable == EINA_FALSE)
+    return EINA_FALSE;
+
+  impl->EnableVideoHoleSupport();
+  media::VideoPlaneController::SetSharedVideoWindowHandle(
+      window,
+      static_cast<media::VideoPlaneController::RenderingMode>(isVideoWindow));
+  return EINA_TRUE;
+#else
+  LOG_EWK_API_MOCKUP("Video Hole feature is not enabled");
+  return EINA_FALSE;
+#endif
+}
+
+void ewk_view_set_cursor_by_client(Evas_Object* ewkView, Eina_Bool enable) {}
+
+void ewk_view_widget_pepper_extension_callback_set(Evas_Object* ewk_view, Generic_Sync_Call_Callback cb, void* user_data) {
+#if defined(TIZEN_PEPPER_EXTENSIONS) && BUILDFLAG(IS_TIZEN_TV)
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewk_view, impl);
+  impl->SetPepperExtensionCallback(cb, user_data);
+#else
+  NOTIMPLEMENTED() << "This API is only available with TIZEN_PEPPER_EXTENSIONS"
+                   << " macro on TIZEN_TV products.";
+#endif
+}
+
+void ewk_view_widget_pepper_extension_info_set(Evas_Object* ewk_view, Ewk_Value widget_pepper_ext_info) {
+#if defined(TIZEN_PEPPER_EXTENSIONS) && BUILDFLAG(IS_TIZEN_TV)
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewk_view, impl);
+  impl->SetPepperExtensionWidgetInfo(widget_pepper_ext_info);
+#else
+  NOTIMPLEMENTED() << "This API is only available with TIZEN_PEPPER_EXTENSIONS"
+                   << " macro on TIZEN_TV products.";
+#endif
+}
+
+void ewk_view_resume_network_loading(Evas_Object* ewk_view)
+{
+#if BUILDFLAG(IS_TIZEN_TV)
+  LOG(INFO) << "view : " << ewk_view;
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewk_view, impl);
+  impl->ResumeNetworkLoading();
+#else
+  LOG_EWK_API_MOCKUP("Only for Tizen TV Browser");
+#endif
+}
+
+void ewk_view_suspend_network_loading(Evas_Object* ewk_view)
+{
+#if BUILDFLAG(IS_TIZEN_TV)
+  LOG(INFO) << "view : " << ewk_view;
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewk_view, impl);
+  impl->SuspendNetworkLoading();
+#else
+  LOG_EWK_API_MOCKUP("Only for Tizen TV Browser");
+#endif
+}
+
+void ewk_view_offscreen_rendering_enabled_set(Evas_Object* o, Eina_Bool enabled)
+{
+#if defined(TIZEN_TBM_SUPPORT)
+  EWK_VIEW_IMPL_GET_OR_RETURN(o, impl);
+  impl->SetOffscreenRendering(enabled);
+#if defined(TIZEN_VIDEO_HOLE)
+  media::VideoPlaneController::set_use_wayland_window(true);
+#endif
+#else
+  LOG_EWK_API_MOCKUP();
+#endif
+}
+
+void ewk_view_ime_window_set(Evas_Object* o, void* window)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
+Eina_Bool ewk_view_set_support_canvas_hole(Evas_Object* ewkView, const char* url)
+{
+  LOG_EWK_API_MOCKUP();
+  return EINA_FALSE;
+}
+
+void ewk_view_tile_cover_area_multiplier_set(Evas_Object* ewkView,
+                                             float cover_area_multiplier) {
+  LOG_EWK_API_MOCKUP();
+}
+
+Eina_Bool ewk_view_marlin_enable_set(Evas_Object* ewkView, Eina_Bool is_enable)
+{
+  LOG_EWK_API_MOCKUP();
+  return EINA_FALSE;
+}
+
+Eina_Bool ewk_view_key_system_whitelist_set(Evas_Object* ewkView, const char** list, unsigned list_size)
+{
+  LOG_EWK_API_MOCKUP();
+  return EINA_FALSE;
+}
+
+Eina_Bool ewk_view_is_video_playing(Evas_Object* o, Ewk_Is_Video_Playing_Callback callback, void* user_data)
+{
+#if BUILDFLAG(IS_TIZEN_TV)
+  EWK_VIEW_IMPL_GET_OR_RETURN(o, impl, EINA_FALSE);
+  EINA_SAFETY_ON_NULL_RETURN_VAL(callback, EINA_FALSE);
+  LOG(INFO) << __func__;
+  return impl->IsVideoPlaying(callback, user_data) ? EINA_TRUE : EINA_FALSE;
+#else
+  LOG_EWK_API_MOCKUP("Only for Tizen TV.");
+  return EINA_FALSE;
+#endif
+}
+
+Eina_Bool ewk_view_stop_video(Evas_Object* o, Ewk_Stop_Video_Callback callback, void* user_data)
+{
+  LOG_EWK_API_MOCKUP();
+  return EINA_FALSE;
+}
+
+Eina_Bool ewk_view_active_drm_set(Evas_Object* view, const char* drm_system_id)
+{
+  LOG_EWK_API_MOCKUP();
+  return EINA_FALSE;
+}
+
+void ewk_view_broadcast_decoder_set(
+  Evas_Object* view,
+  Ewk_Hardware_Decoders decoder)
+{
+#if BUILDFLAG(IS_TIZEN_TV)
+  EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
+  /* waiting for implement*/
+  //impl->SetBroadcastDecoder(decoder);
+#else
+  LOG_EWK_API_MOCKUP("Only for Tizen TV.");
+#endif
+}
+
+void ewk_media_set_subtitle_lang(Evas_Object* ewkView, const char* lang_list)
+{
+#if BUILDFLAG(IS_TIZEN_TV)
+    EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl);
+    impl->SetPreferSubtitleLang(lang_list);
+#else
+    LOG_EWK_API_MOCKUP("Only for Tizen TV.");
+#endif
+}
+
+void ewk_media_set_parental_rating_result(Evas_Object* ewkView, const char* url, Eina_Bool is_pass)
+{
+#if BUILDFLAG(IS_TIZEN_TV)
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl);
+  impl->SetParentalRatingResult(url, is_pass);
+#else
+  LOG_EWK_API_MOCKUP("Only for Tizen TV.");
+#endif
+}
+
+void ewk_media_start_with_high_bit_rate(Evas_Object* ewkView, Eina_Bool high_bitrate)
+{
+#if BUILDFLAG(IS_TIZEN_TV)
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl);
+  impl->SetHighBitRate(high_bitrate);
+#else
+  LOG_EWK_API_MOCKUP("Only for Tizen TV.");
+#endif
+}
+
+double ewk_view_media_current_time_get(const Evas_Object *o)
+{
+#if BUILDFLAG(IS_TIZEN_TV)
+  EWK_VIEW_IMPL_GET_OR_RETURN(o, impl, 0);
+  return impl->GetCurrentTime();
+#else
+  LOG_EWK_API_MOCKUP("Only for Tizen TV.");
+  return 0;
+#endif
+}
+
+void ewk_view_request_canvas_fullscreen(Evas_Object* ewkView)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
+void ewk_view_360video_play(Evas_Object* ewkView)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
+void ewk_view_360video_pause(Evas_Object* ewkView)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
+void ewk_view_360video_duration(Evas_Object* ewkView, Ewk_360_Video_Duration_Callback callback, void* user_data)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
+void ewk_view_360video_current_time(Evas_Object* ewkView, Ewk_360_Video_CurrentTime_Callback callback, void* user_data)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
+void ewk_view_360video_set_current_time(Evas_Object* ewkView, double current_time)
+{
+  LOG_EWK_API_MOCKUP();
+}
+
+Eina_Bool ewk_view_script_execute_all_frames(Evas_Object *o, const char *script, Ewk_View_Script_Execute_Cb callback, void *user_data)
+{
+#if BUILDFLAG(IS_TIZEN_TV)
+  LOG(INFO)  << ", view: " << o;
+#else
+  LOG_EWK_API_MOCKUP();
+#endif
+  return EINA_FALSE;
+}
+
+void ewk_view_voicemanager_label_draw(Evas_Object* view,
+                                      Evas_Object* image,
+                                      Eina_Rectangle rect) {
+#if BUILDFLAG(IS_TIZEN_TV)
+  EINA_SAFETY_ON_NULL_RETURN(image);
+  EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
+  impl->DrawLabel(image, rect);
+#else
+  LOG_EWK_API_MOCKUP("Only for Tizen TV.");
+#endif
+}
+
+void ewk_view_voicemanager_labels_clear(Evas_Object* view) {
+#if BUILDFLAG(IS_TIZEN_TV)
+  EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
+  impl->ClearLabels();
+#else
+  LOG_EWK_API_MOCKUP("Only for Tizen TV.");
+#endif
+}
+
+void ewk_view_floating_window_state_changed(const Evas_Object *view, Eina_Bool status)
+{
+#if BUILDFLAG(IS_TIZEN_TV)
+  EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
+  LOG(INFO) << __FUNCTION__ << ", view: "<< view << ", status: " << status;
+  impl->SetFloatVideoWindowState(status);
+#else
+  LOG_EWK_API_MOCKUP();
+#endif
+}
+
+void ewk_view_feed_mouse_down(Evas_Object* view,
+                              Ewk_Mouse_Button_Type button,
+                              int x,
+                              int y) {
+  EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
+  LOG(INFO) << "ewk_view_feed_mouse_down";
+  impl->SendMouseDown(button, x, y);
+}
+
+void ewk_view_feed_mouse_up(Evas_Object* view,
+                            Ewk_Mouse_Button_Type button,
+                            int x,
+                            int y) {
+  EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
+  impl->SendMouseUp(button, x, y);
+}
+
+void ewk_view_feed_mouse_move(Evas_Object* view, int x, int y) {
+  EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
+  impl->SendMouseMove(x, y);
+}
+
+void ewk_view_feed_mouse_wheel(Evas_Object* view,
+                               Eina_Bool y_direction,
+                               int step,
+                               int x,
+                               int y) {
+  EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
+  impl->SendMouseWheel(!!y_direction, step, x, y);
+}
+
+void ewk_view_feed_mouse_out(Evas_Object* view) {
+  EWK_VIEW_IMPL_GET_OR_RETURN(view, impl);
+  impl->SendMouseOut();
+}
+void ewk_view_auto_login(Evas_Object *view, const char* user_name, const char* password)
+{
+  LOG_EWK_API_MOCKUP("This API is not supported.");
+}
+
+void ewk_view_request_manifest(Evas_Object* o,
+                               Ewk_View_Request_Manifest_Callback callback,
+                               void* user_data) {
+  EWK_VIEW_IMPL_GET_OR_RETURN(o, impl);
+  impl->RequestManifest(callback, user_data);
+}
+
+void ewk_view_media_device_list_get(Evas_Object* o, Ewk_Media_Device_List_Get_Callback callback, void* user_data) {
+#if BUILDFLAG(IS_TIZEN_TV)
+  LOG(INFO) << "ewk_view_media_device_list_get called";
+  EWK_VIEW_IMPL_GET_OR_RETURN(o, impl);
+  EINA_SAFETY_ON_NULL_RETURN(callback);
+  impl->GetMediaDeviceList(callback, user_data);
+#else
+  LOG_EWK_API_MOCKUP("Only for Tizen TV.");
+#endif
+}
+
+void ewk_view_run_mixed_content_confirm_callback_set(
+    Evas_Object* /* ewkView */,
+    Ewk_View_Run_Mixed_Content_Confirm_Callback /* callback */,
+    void* /* user_data */) {}
+
+void ewk_view_error_page_load_callback_set(Evas_Object* ewk_view, Ewk_View_Error_Page_Load_Callback callback, void* user_data)
+{
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewk_view, impl);
+  EINA_SAFETY_ON_NULL_RETURN(callback);
+  impl->SetViewLoadErrorPageCallback(callback, user_data);
+}
+
+Eina_Bool ewk_view_add_item_to_back_forward_list(Evas_Object* o, const Ewk_Back_Forward_List_Item* item)
+{
+  return EINA_FALSE;
+}
+
+void ewk_view_poweroff_suspend(Evas_Object *item) {}