Create string tightly when retrive string from cbhm callback event
[framework/web/webkit-efl.git] / Source / WebKit2 / UIProcess / API / efl / ewk_context.cpp
index 7b8b70f..ab51c9f 100755 (executable)
 #include "ewk_context.h"
 
 #include "BatteryProvider.h"
+#include "ContextHistoryClientEfl.h"
 #include "NetworkInfoProvider.h"
+#include "RequestManagerClientEfl.h"
 #include "VibrationProvider.h"
 #include "WKAPICast.h"
 #include "WKContextSoup.h"
 #include "WKRetainPtr.h"
 #include "WKString.h"
-#include "ewk_context_download_client_private.h"
+#include "WebContext.h"
+#include "WebSoupRequestManagerProxy.h"
 #include "ewk_context_private.h"
-#include "ewk_context_request_manager_client_private.h"
 #include "ewk_cookie_manager_private.h"
-#include "ewk_download_job.h"
-#include "ewk_download_job_private.h"
+#include "ewk_favicon_database_private.h"
+#include "ewk_url_scheme_request_private.h"
+#include <WebCore/FileSystem.h>
+#include <WebCore/IconDatabase.h>
 #include <wtf/HashMap.h>
 #include <wtf/text/WTFString.h>
 
 #endif
 #include "WKNumber.h"
 #include "WKSecurityOrigin.h"
-#include "WKString.h"
 #include "WKURL.h"
-#include "WebContext.h"
 #include "ewk_context_injected_bundle_client.h"
 #include "ewk_security_origin.h"
+#include "ewk_private.h"
 #include <Eina.h>
-#include <WebCore/FileSystem.h>
-#include <wtf/text/WTFString.h>
 
 #if ENABLE(TIZEN_WRT_LAUNCHING_PERFORMANCE)
 #include "ProcessLauncher.h"
 #include "ewk_text_checker_private.h"
 #endif
 
-using namespace WebKit;
+#if ENABLE(TIZEN_WEBKIT2_DDK_CHECK)
+#include <EGL/egl.h>
+#endif
 
-struct _Ewk_Url_Scheme_Handler {
-    Ewk_Url_Scheme_Request_Cb callback;
-    void* userData;
+#if ENABLE(TIZEN_HW_MORE_BACK_KEY)
+#include <dlfcn.h>
+void* EflAssistHandle = 0;
+#endif
 
-    _Ewk_Url_Scheme_Handler()
-        : callback(0)
-        , userData(0)
-    { }
+using namespace WebCore;
+using namespace WebKit;
 
-    _Ewk_Url_Scheme_Handler(Ewk_Url_Scheme_Request_Cb callback, void* userData)
-        : callback(callback)
-        , userData(userData)
-    { }
-};
+typedef HashMap<WKContextRef, Ewk_Context*> ContextMap;
 
-typedef HashMap<String, _Ewk_Url_Scheme_Handler> URLSchemeHandlerMap;
+static inline ContextMap& contextMap()
+{
+    DEFINE_STATIC_LOCAL(ContextMap, map, ());
+    return map;
+}
 
-struct _Ewk_Context {
-    WKRetainPtr<WKContextRef> context;
+Ewk_Context::Ewk_Context(WKContextRef context)
+    : m_context(context)
+    , m_historyClient(ContextHistoryClientEfl::create(context))
+{
+    ContextMap::AddResult result = contextMap().add(context, this);
+    ASSERT_UNUSED(result, result.isNewEntry);
 
-    Ewk_Cookie_Manager* cookieManager;
 #if ENABLE(BATTERY_STATUS)
-    RefPtr<BatteryProvider> batteryProvider;
+    m_batteryProvider = BatteryProvider::create(context);
 #endif
+
 #if ENABLE(NETWORK_INFO)
-    RefPtr<NetworkInfoProvider> networkInfoProvider;
+    m_networkInfoProvider = NetworkInfoProvider::create(context);
 #endif
+
 #if ENABLE(VIBRATION)
-    RefPtr<VibrationProvider> vibrationProvider;
+    m_vibrationProvider = VibrationProvider::create(context);
 #endif
-    HashMap<uint64_t, Ewk_Download_Job*> downloadJobs;
 
-    WKRetainPtr<WKSoupRequestManagerRef> requestManager;
-    URLSchemeHandlerMap urlSchemeHandlers;
+#if ENABLE(MEMORY_SAMPLER)
+    static bool initializeMemorySampler = false;
+    static const char environmentVariable[] = "SAMPLE_MEMORY";
 
-#if OS(TIZEN)
-    const char* proxyAddress;
-#if ENABLE(TIZEN_CERTIFICATE_HANDLING)
-    const char* certificateFile;
+    if (!initializeMemorySampler && getenv(environmentVariable)) {
+        WKRetainPtr<WKDoubleRef> interval(AdoptWK, WKDoubleCreate(0.0));
+        WKContextStartMemorySampler(context, interval.get());
+        initializeMemorySampler = true;
+    }
 #endif
+
+#if ENABLE(SPELLCHECK)
+    Ewk_Text_Checker::initialize();
+    if (ewk_settings_continuous_spell_checking_enabled_get()) {
+        // Load the default language.
+        ewk_settings_spell_checking_languages_set(0);
+    }
+#endif
+
+    // Initialize WKContext clients.
+    m_downloadManager = DownloadManagerEfl::create(this);
+    m_requestManagerClient = RequestManagerClientEfl::create(this);
+
+#if OS(TIZEN)
 #if ENABLE(TIZEN_SQL_DATABASE)
-    uint64_t defaultDatabaseQuota;
-#endif
-    struct {
-        Ewk_Context_Message_From_Injected_Bundle_Callback callback;
-        void* userData;
-    } messageFromInjectedBundle;
-    struct {
-        Ewk_Context_Did_Start_Download_Callback callback;
-        void* userData;
-    } didStartDownload;
-#if ENABLE(TIZEN_WEBKIT2_CONTEXT_X_WINDOW)
-    Ecore_X_Window xWindow;
+    m_defaultDatabaseQuota = 5 * 1024 * 1024;
 #endif
+    m_messageFromInjectedBundle.callback = 0;
+    m_messageFromInjectedBundle.userData = 0;
+    m_didStartDownload.callback = 0;
+    m_didStartDownload.userData = 0;
 #if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
-    RefPtr<FormDatabase> formDatabase;
+    m_formDatabase = FormDatabase::create();
+    m_formDatabase->open(FormDatabase::defaultDatabaseDirectoryPath(), FormDatabase::defaultDatabaseFilename());
 #endif
 #endif
 
-    _Ewk_Context(WKRetainPtr<WKContextRef> contextRef)
-        : context(contextRef)
-        , cookieManager(0)
-        , requestManager(WKContextGetSoupRequestManager(contextRef.get()))
-    {
-#if ENABLE(BATTERY_STATUS)
-        batteryProvider = BatteryProvider::create(context.get());
+#if ENABLE(TIZEN_HW_MORE_BACK_KEY)
+    if (!EflAssistHandle)
+        EflAssistHandle = dlopen("/usr/lib/libefl-assist.so.0", RTLD_LAZY);
 #endif
+}
 
-#if ENABLE(NETWORK_INFO)
-        networkInfoProvider = NetworkInfoProvider::create(context.get());
+Ewk_Context::~Ewk_Context()
+{
+    ASSERT(contextMap().get(m_context.get()) == this);
+    contextMap().remove(m_context.get());
+#if ENABLE(TIZEN_CACHE_DUMP_SYNC)
+    dumpCache();
 #endif
+}
 
-#if ENABLE(VIBRATION)
-        vibrationProvider = VibrationProvider::create(context.get());
-#endif
+PassRefPtr<Ewk_Context> Ewk_Context::create(WKContextRef context)
+{
+    if (contextMap().contains(context))
+        return contextMap().get(context); // Will be ref-ed automatically.
 
-        ewk_context_request_manager_client_attach(this);
-        ewk_context_download_client_attach(this);
-#if ENABLE(SPELLCHECK)
-        Ewk_Text_Checker::initialize();
-        if (ewk_settings_continuous_spell_checking_enabled_get()) {
-            // Load the default language.
-            ewk_settings_spell_checking_languages_set(0);
-        }
-#endif
+    return adoptRef(new Ewk_Context(context));
+}
 
-#if OS(TIZEN)
-        this->proxyAddress = 0;
-#if ENABLE(TIZEN_CERTIFICATE_HANDLING)
-        this->certificateFile = 0;
-#endif
-#if ENABLE(TIZEN_SQL_DATABASE)
-        this->defaultDatabaseQuota = 5 * 1024 * 1024;
-#endif
-        this->messageFromInjectedBundle.callback = 0;
-        this->messageFromInjectedBundle.userData = 0;
-        this->didStartDownload.callback = 0;
-        this->didStartDownload.userData = 0;
-#if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
-        this->formDatabase = FormDatabase::create();
-        this->formDatabase->open(FormDatabase::defaultDatabaseDirectoryPath(), FormDatabase::defaultDatabaseFilename());
-#endif
+PassRefPtr<Ewk_Context> Ewk_Context::create()
+{
+    return create(adoptWK(WKContextCreate()).get());
+}
+
+PassRefPtr<Ewk_Context> Ewk_Context::create(const String& injectedBundlePath)
+{   
+    if (!fileExists(injectedBundlePath))
+        return 0;
+
+    WKRetainPtr<WKStringRef> injectedBundlePathWK = adoptWK(toCopiedAPI(injectedBundlePath));
+    WKRetainPtr<WKContextRef> contextWK = adoptWK(WKContextCreateWithInjectedBundlePath(injectedBundlePathWK.get()));
+
+    return create(contextWK.get());
+}
+
+PassRefPtr<Ewk_Context> Ewk_Context::defaultContext()
+{
+    static RefPtr<Ewk_Context> defaultInstance = create(adoptWK(WKContextCreate()).get());
+
+    return defaultInstance;
+}
+
+Ewk_Cookie_Manager* Ewk_Context::cookieManager()
+{
+    if (!m_cookieManager)
+        m_cookieManager = Ewk_Cookie_Manager::create(WKContextGetCookieManager(m_context.get()));
+
+    return m_cookieManager.get();
+}
+
+Ewk_Favicon_Database* Ewk_Context::faviconDatabase()
+{
+#if ENABLE(TIZEN_ICON_DATABASE)
+    return 0;
 #endif
+    if (!m_faviconDatabase) {
+        WKRetainPtr<WKIconDatabaseRef> iconDatabase = WKContextGetIconDatabase(m_context.get());
+        // Set the database path if it is not open yet.
+        if (!toImpl(iconDatabase.get())->isOpen()) {
+            WebContext* webContext = toImpl(m_context.get());
+            String databasePath = webContext->iconDatabasePath() + "/" + WebCore::IconDatabase::defaultDatabaseFilename();
+            webContext->setIconDatabasePath(databasePath);
+        }
+        m_faviconDatabase = Ewk_Favicon_Database::create(iconDatabase.get());
     }
 
-    ~_Ewk_Context()
-    {
-        if (cookieManager)
-            ewk_cookie_manager_free(cookieManager);
+    return m_faviconDatabase.get();
+}
 
-#if ENABLE(TIZEN_CACHE_DUMP_SYNC)
-        ewk_context_cache_dump(this);
+RequestManagerClientEfl* Ewk_Context::requestManager()
+{
+    return m_requestManagerClient.get();
+}
+
+#if ENABLE(VIBRATION)
+PassRefPtr<VibrationProvider> Ewk_Context::vibrationProvider()
+{
+    return m_vibrationProvider;
+}
 #endif
 
-        HashMap<uint64_t, Ewk_Download_Job*>::iterator it = downloadJobs.begin();
-        HashMap<uint64_t, Ewk_Download_Job*>::iterator end = downloadJobs.end();
-        for ( ; it != end; ++it)
-            ewk_download_job_unref(it->second);
-    }
-};
+void Ewk_Context::addVisitedLink(const String& visitedURL)
+{
+    toImpl(m_context.get())->addVisitedLink(visitedURL);
+}
+
+void Ewk_Context::setCacheModel(Ewk_Cache_Model cacheModel)
+{
+    WKContextSetCacheModel(m_context.get(), static_cast<Ewk_Cache_Model>(cacheModel));
+}
+
+Ewk_Cache_Model Ewk_Context::cacheModel() const
+{
+    return static_cast<Ewk_Cache_Model>(WKContextGetCacheModel(m_context.get()));
+}
+
+Ewk_Context* ewk_context_ref(Ewk_Context* ewkContext)
+{
+    EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, 0);
+
+    ewkContext->ref();
+
+    return ewkContext;
+}
+
+void ewk_context_unref(Ewk_Context* ewkContext)
+{
+    EINA_SAFETY_ON_NULL_RETURN(ewkContext);
+
+    ewkContext->deref();
+}
 
 Ewk_Cookie_Manager* ewk_context_cookie_manager_get(const Ewk_Context* ewkContext)
 {
     EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, 0);
 
-    if (!ewkContext->cookieManager)
-        const_cast<Ewk_Context*>(ewkContext)->cookieManager = ewk_cookie_manager_new(WKContextGetCookieManager(ewkContext->context.get()));
+    return const_cast<Ewk_Context*>(ewkContext)->cookieManager();
+}
+
+Ewk_Favicon_Database* ewk_context_favicon_database_get(const Ewk_Context* ewkContext)
+{
+    EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, 0);
+
+    return const_cast<Ewk_Context*>(ewkContext)->faviconDatabase();
+}
 
-    return ewkContext->cookieManager;
+WKContextRef Ewk_Context::wkContext()
+{
+    return m_context.get();
 }
 
-WKContextRef ewk_context_WKContext_get(const Ewk_Context* ewkContext)
+DownloadManagerEfl* Ewk_Context::downloadManager() const
 {
-    return ewkContext->context.get();
+    return m_downloadManager.get();
 }
 
-/**
- * @internal
- * Registers that a new download has been requested.
- */
-void ewk_context_download_job_add(Ewk_Context* ewkContext, Ewk_Download_Job* ewkDownload)
+ContextHistoryClientEfl* Ewk_Context::historyClient()
 {
-    EINA_SAFETY_ON_NULL_RETURN(ewkContext);
-    EINA_SAFETY_ON_NULL_RETURN(ewkDownload);
+    return m_historyClient.get();
+}
+
+#if OS(TIZEN)
+bool Ewk_Context::setProxyAddress(const char* proxyAddress)
+{
+    if (m_proxyAddress == proxyAddress)
+        return false;
+
+    m_proxyAddress = proxyAddress;
+    return true;
+}
+
+#if ENABLE(TIZEN_CERTIFICATE_HANDLING)
+bool Ewk_Context::setCertificateFile(const char* certificateFile)
+{
+    if (m_certificateFile == certificateFile)
+        return false;
+
+    m_certificateFile = certificateFile;
+    return true;
+}
+#endif
+
+void Ewk_Context::setDefaultDatabaseQuota(uint64_t defaultDatabaseQuota)
+{
+    m_defaultDatabaseQuota = defaultDatabaseQuota;
+}
+
+void Ewk_Context::setMessageFromInjectedBundleCallback(Ewk_Context_Message_From_Injected_Bundle_Callback callback, void* userData)
+{
+    m_messageFromInjectedBundle.callback = callback;
+    m_messageFromInjectedBundle.userData = userData;
+}
 
-    uint64_t downloadId = ewk_download_job_id_get(ewkDownload);
-    if (ewkContext->downloadJobs.contains(downloadId))
+void Ewk_Context::didReceiveMessageFromInjectedBundle(WKStringRef messageName, WKTypeRef messageBody, WKTypeRef* returnData)
+{
+    if (!m_messageFromInjectedBundle.callback)
         return;
 
-    ewk_download_job_ref(ewkDownload);
-    ewkContext->downloadJobs.add(downloadId, ewkDownload);
+    CString name = toImpl(messageName)->string().utf8();
+    CString body;
+    if (messageBody && WKStringGetTypeID() == WKGetTypeID(messageBody))
+        body = toImpl(static_cast<WKStringRef>(messageBody))->string().utf8();
+
+    if (returnData) {
+        char* returnString = 0;
+        m_messageFromInjectedBundle.callback(name.data(), body.data(), &returnString,
+                                                       m_messageFromInjectedBundle.userData);
+        if (returnString) {
+            *returnData = WKStringCreateWithUTF8CString(returnString);
+            free(returnString);
+        } else
+            *returnData = WKStringCreateWithUTF8CString("");
+    } else
+        m_messageFromInjectedBundle.callback(name.data(), body.data(), 0, m_messageFromInjectedBundle.userData);
 }
 
-/**
- * @internal
- * Returns the #Ewk_Download_Job with the given @a downloadId, or
- * @c 0 in case of failure.
- */
-Ewk_Download_Job* ewk_context_download_job_get(const Ewk_Context* ewkContext, uint64_t downloadId)
+void Ewk_Context::setDidStartDownloadCallback(Ewk_Context_Did_Start_Download_Callback callback, void* userData)
 {
-    EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, 0);
+    m_didStartDownload.callback = callback;
+    m_didStartDownload.userData = userData;
+}
+
+void Ewk_Context::didStartDownload(WKStringRef downloadURL)
+{
+    EINA_SAFETY_ON_NULL_RETURN(m_didStartDownload.callback);
 
-    return ewkContext->downloadJobs.get(downloadId);
+    m_didStartDownload.callback(toImpl(downloadURL)->string().utf8().data(), m_didStartDownload.userData);
 }
 
-/**
- * @internal
- * Removes the #Ewk_Download_Job with the given @a downloadId from the internal
- * HashMap.
- */
-void ewk_context_download_job_remove(Ewk_Context* ewkContext, uint64_t downloadId)
+#if ENABLE(TIZEN_CACHE_MEMORY_OPTIMIZATION)
+void Ewk_Context::clearAllDecodedData()
 {
-    EINA_SAFETY_ON_NULL_RETURN(ewkContext);
-    Ewk_Download_Job* download = ewkContext->downloadJobs.take(downloadId);
-    if (download)
-        ewk_download_job_unref(download);
+    WKResourceCacheManagerRef cacheManager = WKContextGetResourceCacheManager(wkContext());
+    WKResourceCacheManagerClearCacheForAllOrigins(cacheManager, WKResourceCachesToClearInDecodedDataOnly);
 }
+#endif
 
-/**
- * Retrieve the request manager for @a ewkContext.
- *
- * @param ewkContext a #Ewk_Context object.
- */
-WKSoupRequestManagerRef ewk_context_request_manager_get(const Ewk_Context* ewkContext)
+#if ENABLE(TIZEN_WEBKIT2_CONTEXT_X_WINDOW)
+Ecore_X_Window Ewk_Context::xWindow()
 {
-    return ewkContext->requestManager.get();
+    return m_xWindow;
 }
 
-/**
- * @internal
- * A new URL request was received.
- *
- * @param ewkContext a #Ewk_Context object.
- * @param schemeRequest a #Ewk_Url_Scheme_Request object.
- */
-void ewk_context_url_scheme_request_received(Ewk_Context* ewkContext, Ewk_Url_Scheme_Request* schemeRequest)
+void Ewk_Context::setXWindow(Ecore_X_Window xWindow)
 {
-    EINA_SAFETY_ON_NULL_RETURN(ewkContext);
-    EINA_SAFETY_ON_NULL_RETURN(schemeRequest);
+    toImpl(wkContext())->setXWindow(xWindow);
+}
+#endif
+
+#if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
+void Ewk_Context::addFormData(const char* url, WKDictionaryRef& formData, bool isPasswordForm)
+{
+    EINA_SAFETY_ON_NULL_RETURN(url);
+    if (!m_formDatabase->isOpen())
+        return;
 
-    _Ewk_Url_Scheme_Handler handler = ewkContext->urlSchemeHandlers.get(ewk_url_scheme_request_scheme_get(schemeRequest));
-    if (!handler.callback)
+    Vector<std::pair<String, String> > formDataVector;
+    WKRetainPtr<WKArrayRef> wkKeys(AdoptWK, WKDictionaryCopyKeys(formData));
+    size_t numKeys = WKArrayGetSize(wkKeys.get());
+    for (size_t i = 0; i < numKeys; ++i) {
+        WKStringRef wkKey = static_cast<WKStringRef>(WKArrayGetItemAtIndex(wkKeys.get(), i));
+        WKStringRef wkValue = static_cast<WKStringRef>(WKDictionaryGetItemForKey(formData, wkKey));
+
+        formDataVector.append(pair<String, String>(toImpl(wkKey)->string(), toImpl(wkValue)->string()));
+    }
+
+    m_formDatabase->addFormDataForURL(String::fromUTF8(url), formDataVector, isPasswordForm);
+}
+
+void Ewk_Context::passwordFormData(const char* url, Vector<std::pair<String, String> >& passwordFormData)
+{
+    EINA_SAFETY_ON_NULL_RETURN(url);
+    if (!m_formDatabase->isOpen())
         return;
+    m_formDatabase->getPasswordFormDataForURL(String::fromUTF8(url), passwordFormData);
+}
 
-    handler.callback(schemeRequest, handler.userData);
+void Ewk_Context::candidateFormData(const String& name, Vector<String>& candidates)
+{
+    if (!m_formDatabase->isOpen())
+        return;
+    m_formDatabase->getCandidateFormDataForName(name, candidates);
 }
 
-static inline Ewk_Context* createDefaultEwkContext()
+void Ewk_Context::clearPasswordFormData()
 {
-    return new Ewk_Context(WKContextGetSharedProcessContext());
+    m_formDatabase->clearPasswordFormData();
 }
 
+void Ewk_Context::clearCandidateFormData()
+{
+    m_formDatabase->clearCandidateFormData();
+}
+
+#endif
+
+#if ENABLE(TIZEN_CACHE_DUMP_SYNC)
+/**
+ * @internal
+ * Request WebProcess to dump cache.
+ *
+ * This sends sync message to WebProcess to dump memory cache, that is, soup cache.
+ *
+ * @param context context object
+ *
+ * @return @c EINA_TRUE on success or @c EINA_FALSE on failure
+ *
+ * @note This can effect UIProcess's performance because it calls to sync IPC message eventually.
+ */
+void Ewk_Context::dumpCache()
+{
+    WKResourceCacheManagerRef cacheManager = WKContextGetResourceCacheManager(wkContext());
+    toImpl(cacheManager)->dumpCache();
+}
+#endif
+#endif
+
 Ewk_Context* ewk_context_default_get()
 {
-#if OS(TIZEN)
-    static Ewk_Context* defaultContext = ewk_context_new();
-    return defaultContext;
-#else // #if OS(TIZEN)
-    DEFINE_STATIC_LOCAL(Ewk_Context, defaultContext, (WKContextGetSharedProcessContext()));
-    return &defaultContext;
-#endif // #if OS(TIZEN)
+    return Ewk_Context::defaultContext().get();
 }
 
 #if OS(TIZEN)
-typedef struct _Ewk_Context_Callback_Context
+typedef struct Ewk_Context_Callback_Context
 {
     union {
 #if ENABLE(TIZEN_FILE_SYSTEM)
@@ -324,7 +482,7 @@ typedef struct _Ewk_Context_Callback_Context
 } Ewk_Context_Callback_Context;
 
 #if ENABLE(TIZEN_SQL_DATABASE)
-struct _Ewk_Context_Exceeded_Quota
+struct Ewk_Context_Exceeded_Quota
 {
     Ewk_Security_Origin* origin;
     const char* databaseName;
@@ -337,17 +495,6 @@ struct _Ewk_Context_Exceeded_Quota
 };
 #endif
 
-/**
- * @internal
- * Create Ewk_Context with WKContext.
- */
-Ewk_Context* ewk_context_new_from_WKContext(WKContextRef contextRef)
-{
-    EINA_SAFETY_ON_NULL_RETURN_VAL(contextRef, 0);
-
-    return new Ewk_Context(contextRef);
-}
-
 #if ENABLE(TIZEN_SQL_DATABASE)
 Ewk_Context_Exceeded_Quota* ewkContextCreateExceededQuota(WKSecurityOriginRef origin, WKStringRef databaseName, WKStringRef displayName, unsigned long long currentQuota, unsigned long long currentOriginUsage, unsigned long long currentDatabaseUsage, unsigned long long expectedUsage)
 {
@@ -388,29 +535,38 @@ unsigned long long ewkContextGetNewQuotaForExceededQuota(Ewk_Context* ewkContext
     if (exceededQuota->currentQuota)
         return exceededQuota->currentQuota;
 
-    return ewkContext->defaultDatabaseQuota;
+    return ewkContext->defaultDatabaseQuota();
 }
 
 uint64_t ewkContextGetDatabaseQuota(Ewk_Context* ewkContext)
 {
-    return ewkContext->defaultDatabaseQuota;
+    return ewkContext->defaultDatabaseQuota();
 }
 #endif
 
 /* public */
 Ewk_Context* ewk_context_new()
 {
-    Ewk_Context* ewk_context = new Ewk_Context(adoptWK(WKContextCreate()));
-
+#if OS(TIZEN)
+    Ewk_Context* ewk_context = Ewk_Context::create().leakRef();
     ewkContextInjectedBundleClientAttachClient(ewk_context);
-
     return ewk_context;
+#endif
+    return Ewk_Context::create().leakRef();
 }
 
 Ewk_Context* ewk_context_new_with_injected_bundle_path(const char* path)
 {
     EINA_SAFETY_ON_NULL_RETURN_VAL(path, 0);
 
+#if ENABLE(TIZEN_WEBKIT2_DDK_CHECK)
+    // FIXME : OpenGL check code for WRT before launching WebProcess.
+    if(!eglGetDisplay(EGL_DEFAULT_DISPLAY)) {
+        EINA_LOG_CRIT("Fail in initiziling view because No DDK is installed.");
+        return 0;
+    }
+#endif
+
 #if ENABLE(TIZEN_WRT_LAUNCHING_PERFORMANCE)
     char* wrtLaunchingPerformance = getenv("WRT_LAUNCHING_PERFORMANCE");
     if (wrtLaunchingPerformance && !strcmp(wrtLaunchingPerformance, "1")) {
@@ -427,7 +583,7 @@ Ewk_Context* ewk_context_new_with_injected_bundle_path(const char* path)
 
             if (ProcessLauncher::isParentProcess()) {
                 Ewk_Context* ewkContext = ewk_context_new_with_injected_bundle_path(path);
-                WKContextRef contextRef = ewk_context_WKContext_get(ewkContext);
+                WKContextRef contextRef = ewkContext->wkContext();
                 toImpl(contextRef)->ensureWebProcess();
                 return ewkContext;
             }
@@ -442,33 +598,29 @@ Ewk_Context* ewk_context_new_with_injected_bundle_path(const char* path)
     }
 #endif
 
-    WKRetainPtr<WKStringRef> pathRef(AdoptWK, WKStringCreateWithUTF8CString(path));
-    Ewk_Context* ewk_context = new Ewk_Context(adoptWK(WKContextCreateWithInjectedBundlePath(pathRef.get())));
-
+#if OS(TIZEN)
+    Ewk_Context* ewk_context = Ewk_Context::create(String::fromUTF8(path)).leakRef();
     ewkContextInjectedBundleClientAttachClient(ewk_context);
-
     return ewk_context;
+#endif
+    return Ewk_Context::create(String::fromUTF8(path)).leakRef();
 }
 
 void ewk_context_delete(Ewk_Context* ewkContext)
 {
     EINA_SAFETY_ON_NULL_RETURN(ewkContext);
-    if (ewkContext == ewk_context_default_get())
+    if (ewkContext == ewk_context_default_get() && ewkContext->hasOneRef())
         return;
 
-    eina_stringshare_del(ewkContext->proxyAddress);
-#if ENABLE(TIZEN_CERTIFICATE_HANDLING)
-    eina_stringshare_del(ewkContext->certificateFile);
-#endif
     delete ewkContext;
 }
 
 void ewk_context_proxy_uri_set(Ewk_Context* ewkContext, const char* proxy)
 {
-    if (ewkContext && eina_stringshare_replace(&ewkContext->proxyAddress, proxy)) {
+    if (ewkContext && ewkContext->setProxyAddress(proxy)) {
         WKRetainPtr<WKURLRef> proxyAddress(AdoptWK, WKURLCreateWithUTF8CString(proxy));
 
-        WKContextRef contextRef = ewk_context_WKContext_get(ewkContext);
+        WKContextRef contextRef = ewkContext->wkContext();
         toImpl(contextRef)->setProxy(toWTFString(proxyAddress.get()));
     }
 }
@@ -478,14 +630,14 @@ const char* ewk_context_proxy_uri_get(Ewk_Context* ewkContext)
 #if ENABLE(TIZEN_WEBKIT2_PATCH_FOR_TC)
     EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, 0);
 #endif
-    return ewkContext->proxyAddress;
+    return ewkContext->proxyAddress();
 }
 
 void ewk_context_network_session_requests_cancel(Ewk_Context* ewkContext)
 {
     EINA_SAFETY_ON_NULL_RETURN(ewkContext);
 
-    WKContextRef contextRef = ewk_context_WKContext_get(ewkContext);
+    WKContextRef contextRef = ewkContext->wkContext();
     toImpl(contextRef)->abortSession();
 }
 
@@ -493,7 +645,7 @@ Eina_Bool ewk_context_notify_low_memory(Ewk_Context* ewkContext)
 {
     EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, false);
 
-    WKContextRef contextRef = ewk_context_WKContext_get(ewkContext);
+    WKContextRef contextRef = ewkContext->wkContext();
     toImpl(contextRef)->notifyLowMemory();
     return true;
 }
@@ -672,7 +824,7 @@ Eina_Bool ewk_context_application_cache_delete_all(Ewk_Context* ewkContext)
     EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, false);
 
     TIZEN_LOGI("ewkContext (%p)", ewkContext);
-    WKApplicationCacheManagerRef applicationCache = WKContextGetApplicationCacheManager(ewk_context_WKContext_get(ewkContext));
+    WKApplicationCacheManagerRef applicationCache = WKContextGetApplicationCacheManager(ewkContext->wkContext());
     WKApplicationCacheManagerDeleteAllEntries(applicationCache);
 
     return true;
@@ -687,11 +839,10 @@ Eina_Bool ewk_context_application_cache_delete(Ewk_Context* ewkContext, Ewk_Secu
     EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, false);
     EINA_SAFETY_ON_NULL_RETURN_VAL(origin, false);
 
-    TIZEN_LOGI("host (%s)", ewk_security_origin_host_get(origin));
     WKRetainPtr<WKStringRef> protocolRef(AdoptWK, WKStringCreateWithUTF8CString(ewk_security_origin_protocol_get(origin)));
     WKRetainPtr<WKStringRef> hostRef(AdoptWK, WKStringCreateWithUTF8CString(ewk_security_origin_host_get(origin)));
     WKRetainPtr<WKSecurityOriginRef> securityOriginRef(AdoptWK, WKSecurityOriginCreate(protocolRef.get(), hostRef.get(), ewk_security_origin_port_get(origin)));
-    WKApplicationCacheManagerRef applicationCacheRef = WKContextGetApplicationCacheManager(ewk_context_WKContext_get(ewkContext));
+    WKApplicationCacheManagerRef applicationCacheRef = WKContextGetApplicationCacheManager(ewkContext->wkContext());
     WKApplicationCacheManagerDeleteEntriesForOrigin(applicationCacheRef, securityOriginRef.get());
 
     return true;
@@ -711,7 +862,7 @@ Eina_Bool ewk_context_application_cache_origins_get(Ewk_Context* ewkContext, Ewk
     context->webApplicationCacheOriginsCallback = callback;
     context->userData = userData;
 
-    WKApplicationCacheManagerRef applicationCacheRef = WKContextGetApplicationCacheManager(ewk_context_WKContext_get(ewkContext));
+    WKApplicationCacheManagerRef applicationCacheRef = WKContextGetApplicationCacheManager(ewkContext->wkContext());
     WKApplicationCacheManagerGetApplicationCacheOrigins(applicationCacheRef, context, didGetWebApplicationOrigins);
 
     return true;
@@ -733,7 +884,7 @@ Eina_Bool ewk_context_application_cache_path_set(Ewk_Context* ewkContext, const
 
     TIZEN_LOGI("path (%s)", path);
     WKRetainPtr<WKStringRef> applicationCachePathRef(AdoptWK, WKStringCreateWithUTF8CString(path));
-    WKContextSetApplicationCacheDirectory(ewk_context_WKContext_get(ewkContext), applicationCachePathRef.get());
+    WKContextSetApplicationCacheDirectory(ewkContext->wkContext(), applicationCachePathRef.get());
 
     return true;
 #else
@@ -752,7 +903,7 @@ Eina_Bool ewk_context_application_cache_path_get(Ewk_Context* ewkContext, Ewk_We
     context->webApplicationCachePathCallback= callback;
     context->userData = userData;
 
-    WKApplicationCacheManagerRef applicationCacheRef = WKContextGetApplicationCacheManager(ewk_context_WKContext_get(ewkContext));
+    WKApplicationCacheManagerRef applicationCacheRef = WKContextGetApplicationCacheManager(ewkContext->wkContext());
     WKApplicationCacheManagerGetApplicationCachePath(applicationCacheRef, context, didGetWebApplicationPath);
     return true;
 #else
@@ -771,7 +922,7 @@ Eina_Bool ewk_context_application_cache_quota_get(Ewk_Context* ewkContext, Ewk_W
     context->webApplicationCacheQuotaCallback = callback;
     context->userData = userData;
 
-    WKApplicationCacheManagerRef applicationCacheRef = WKContextGetApplicationCacheManager(ewk_context_WKContext_get(ewkContext));
+    WKApplicationCacheManagerRef applicationCacheRef = WKContextGetApplicationCacheManager(ewkContext->wkContext());
     WKApplicationCacheManagerGetApplicationCacheQuota(applicationCacheRef, context, didGetWebApplicationQuota);
 
     return true;
@@ -787,7 +938,6 @@ Eina_Bool ewk_context_application_cache_usage_for_origin_get(Ewk_Context* ewkCon
     EINA_SAFETY_ON_NULL_RETURN_VAL(callback, false);
     EINA_SAFETY_ON_NULL_RETURN_VAL(origin, false);
 
-    TIZEN_LOGI("host (%s)", ewk_security_origin_host_get(origin));
     Ewk_Context_Callback_Context* context = new Ewk_Context_Callback_Context;
     context->webApplicationCacheUsageForOriginCallback = callback;
     context->userData = userData;
@@ -795,7 +945,7 @@ Eina_Bool ewk_context_application_cache_usage_for_origin_get(Ewk_Context* ewkCon
     WKRetainPtr<WKStringRef> hostRef(AdoptWK, WKStringCreateWithUTF8CString(ewk_security_origin_host_get(origin)));
     WKRetainPtr<WKSecurityOriginRef> originRef(AdoptWK, WKSecurityOriginCreate(protocolRef.get(), hostRef.get(), ewk_security_origin_port_get(origin)));
 
-    WKApplicationCacheManagerRef applicationCache = WKContextGetApplicationCacheManager(ewk_context_WKContext_get(ewkContext));
+    WKApplicationCacheManagerRef applicationCache = WKContextGetApplicationCacheManager(ewkContext->wkContext());
     WKApplicationCacheManagerGetApplicationCacheUsageForOrigin(applicationCache, context, originRef.get(), didGetWebApplicationUsageForOrigin);
 
     return true;
@@ -814,7 +964,7 @@ Eina_Bool ewk_context_application_cache_quota_set(Ewk_Context* ewkContext, int64
     }
 
     TIZEN_LOGI("quota (%d)", quota);
-    WKApplicationCacheManagerRef applicationCacheRef = WKContextGetApplicationCacheManager(ewk_context_WKContext_get(ewkContext));
+    WKApplicationCacheManagerRef applicationCacheRef = WKContextGetApplicationCacheManager(ewkContext->wkContext());
     WKApplicationCacheManagerSetApplicationCacheQuota(applicationCacheRef, quota);
 
     return true;
@@ -838,7 +988,7 @@ Eina_Bool ewk_context_application_cache_quota_for_origin_set(Ewk_Context* ewkCon
     WKRetainPtr<WKStringRef> hostRef(AdoptWK, WKStringCreateWithUTF8CString(ewk_security_origin_host_get(origin)));
     WKRetainPtr<WKSecurityOriginRef> originRef(AdoptWK, WKSecurityOriginCreate(protocolRef.get(), hostRef.get(), ewk_security_origin_port_get(origin)));
 
-    WKApplicationCacheManagerRef applicationCache = WKContextGetApplicationCacheManager(ewk_context_WKContext_get(ewkContext));
+    WKApplicationCacheManagerRef applicationCache = WKContextGetApplicationCacheManager(ewkContext->wkContext());
     WKApplicationCacheManagerSetApplicationCacheQuotaForOrigin(applicationCache, originRef.get(), quota);
 
     return true;
@@ -854,7 +1004,7 @@ Eina_Bool ewk_context_icon_database_path_set(Ewk_Context* ewkContext, const char
     EINA_SAFETY_ON_NULL_RETURN_VAL(path, false);
 
     WKRetainPtr<WKStringRef> databasePath(AdoptWK, WKStringCreateWithUTF8CString(path));
-    WKContextSetIconDatabasePath(ewk_context_WKContext_get(ewkContext), databasePath.get());
+    WKContextSetIconDatabasePath(ewkContext->wkContext(), databasePath.get());
 
     return true;
 }
@@ -865,7 +1015,7 @@ Evas_Object* ewk_context_icon_database_icon_object_add(Ewk_Context* ewkContext,
     EINA_SAFETY_ON_NULL_RETURN_VAL(uri, 0);
     EINA_SAFETY_ON_NULL_RETURN_VAL(canvas, 0);
 
-    WKIconDatabaseRef iconDatabase = WKContextGetIconDatabase(ewk_context_WKContext_get(ewkContext));
+    WKIconDatabaseRef iconDatabase = WKContextGetIconDatabase(ewkContext->wkContext());
     WKRetainPtr<WKURLRef> urlString(AdoptWK, WKURLCreateWithUTF8CString(uri));
 
     return WKIconDatabaseTryGetImageForURL(iconDatabase, canvas, urlString.get());
@@ -875,7 +1025,7 @@ void ewk_context_icon_database_delete_all(Ewk_Context* ewkContext)
 {
     EINA_SAFETY_ON_NULL_RETURN(ewkContext);
 
-    WKIconDatabaseRef iconDatabase = WKContextGetIconDatabase(ewk_context_WKContext_get(ewkContext));
+    WKIconDatabaseRef iconDatabase = WKContextGetIconDatabase(ewkContext->wkContext());
     WKIconDatabaseRemoveAllIcons(iconDatabase);
 }
 
@@ -887,7 +1037,7 @@ Eina_Bool ewk_context_local_file_system_path_set(Ewk_Context* ewkContext, const
 
     TIZEN_LOGI("path (%s)", path);
     WKRetainPtr<WKStringRef> localFileSystemPathRef(AdoptWK, WKStringCreateWithUTF8CString(path));
-    WKContextSetLocalFileSystemDirectory(ewk_context_WKContext_get(ewkContext), localFileSystemPathRef.get());
+    WKContextSetLocalFileSystemDirectory(ewkContext->wkContext(), localFileSystemPathRef.get());
 
     return true;
 #else
@@ -901,7 +1051,7 @@ Eina_Bool ewk_context_local_file_system_all_delete(Ewk_Context* ewkContext)
     EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, false);
 
     TIZEN_LOGI("ewkContex (%p)", ewkContext);
-    WKLocalFileSystemManagerRef localFileSystemManager = WKContextGetLocalFileSystemManager(ewk_context_WKContext_get(ewkContext));
+    WKLocalFileSystemManagerRef localFileSystemManager = WKContextGetLocalFileSystemManager(ewkContext->wkContext());
     WKLocalFileSystemManagerDeleteAllLocalFileSystem(localFileSystemManager);
 
     return true;
@@ -918,11 +1068,10 @@ Eina_Bool ewk_context_local_file_system_delete(Ewk_Context* ewkContext, Ewk_Secu
     EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, false);
     EINA_SAFETY_ON_NULL_RETURN_VAL(origin, false);
 
-    TIZEN_LOGI("host (%s)", ewk_security_origin_host_get(origin));
     WKRetainPtr<WKStringRef> hostRef(AdoptWK, WKStringCreateWithUTF8CString(ewk_security_origin_host_get(origin)));
     WKRetainPtr<WKStringRef> protocolRef(AdoptWK, WKStringCreateWithUTF8CString(ewk_security_origin_protocol_get(origin)));
     WKRetainPtr<WKSecurityOriginRef> originRef(AdoptWK, WKSecurityOriginCreate(protocolRef.get(), hostRef.get(), ewk_security_origin_port_get(origin)));
-    WKLocalFileSystemManagerRef localFileSystemManager = WKContextGetLocalFileSystemManager(ewk_context_WKContext_get(ewkContext));
+    WKLocalFileSystemManagerRef localFileSystemManager = WKContextGetLocalFileSystemManager(ewkContext->wkContext());
 
     WKLocalFileSystemManagerDeleteLocalFileSystem(localFileSystemManager, originRef.get());
 
@@ -945,7 +1094,7 @@ Eina_Bool ewk_context_local_file_system_origins_get(const Ewk_Context* ewkContex
     Ewk_Context_Callback_Context* context = new Ewk_Context_Callback_Context;
     context->localFileSystemOriginsCallback= callback;
     context->userData = userData;
-    WKLocalFileSystemManagerRef localFileSystemManager = WKContextGetLocalFileSystemManager(ewk_context_WKContext_get(ewkContext));
+    WKLocalFileSystemManagerRef localFileSystemManager = WKContextGetLocalFileSystemManager(const_cast<Ewk_Context*>(ewkContext)->wkContext());
 
     WKLocalFileSystemManagerGetLocalFileSystemOrigins(localFileSystemManager, context, didGetLocalFileSystemOrigins);
 
@@ -964,7 +1113,6 @@ Ewk_Security_Origin* ewk_context_web_database_exceeded_quota_security_origin_get
 #if ENABLE(TIZEN_SQL_DATABASE)
     EINA_SAFETY_ON_NULL_RETURN_VAL(exceededQuota, 0);
 
-    TIZEN_LOGI("host (%s)", ewk_security_origin_host_get(exceededQuota->origin));
     return exceededQuota->origin;
 #else
     return 0;
@@ -1059,7 +1207,7 @@ Eina_Bool ewk_context_web_database_delete_all(Ewk_Context* ewkContext)
     EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, false);
 
     TIZEN_LOGI("ewkContext (%p)", ewkContext);
-    WKDatabaseManagerRef databaseManager = WKContextGetDatabaseManager(ewk_context_WKContext_get(ewkContext));
+    WKDatabaseManagerRef databaseManager = WKContextGetDatabaseManager(ewkContext->wkContext());
     WKDatabaseManagerDeleteAllDatabases(databaseManager);
 
     return true;
@@ -1074,11 +1222,10 @@ Eina_Bool ewk_context_web_database_delete(Ewk_Context* ewkContext, Ewk_Security_
     EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, false);
     EINA_SAFETY_ON_NULL_RETURN_VAL(origin, false);
 
-    TIZEN_LOGI("host (%s)", ewk_security_origin_host_get(origin));
     WKRetainPtr<WKStringRef> hostRef(AdoptWK, WKStringCreateWithUTF8CString(ewk_security_origin_host_get(origin)));
     WKRetainPtr<WKStringRef> protocolRef(AdoptWK, WKStringCreateWithUTF8CString(ewk_security_origin_protocol_get(origin)));
     WKRetainPtr<WKSecurityOriginRef> originRef(AdoptWK, WKSecurityOriginCreate(protocolRef.get(), hostRef.get(), ewk_security_origin_port_get(origin)));
-    WKDatabaseManagerRef databaseManager = WKContextGetDatabaseManager(ewk_context_WKContext_get(ewkContext));
+    WKDatabaseManagerRef databaseManager = WKContextGetDatabaseManager(ewkContext->wkContext());
     WKDatabaseManagerDeleteDatabasesForOrigin(databaseManager, originRef.get());
 
     return true;
@@ -1098,7 +1245,7 @@ Eina_Bool ewk_context_web_database_origins_get(Ewk_Context* ewkContext, Ewk_Web_
     context->webDatabaseOriginsCallback = callback;
     context->userData = userData;
 
-    WKDatabaseManagerRef databaseManager = WKContextGetDatabaseManager(ewk_context_WKContext_get(ewkContext));
+    WKDatabaseManagerRef databaseManager = WKContextGetDatabaseManager(ewkContext->wkContext());
     WKDatabaseManagerGetDatabaseOrigins(databaseManager, context, didGetWebDatabaseOrigins);
 
     return true;
@@ -1115,7 +1262,7 @@ Eina_Bool ewk_context_web_database_path_set(Ewk_Context* ewkContext, const char*
 
     TIZEN_LOGI("path (%s)", path);
     WKRetainPtr<WKStringRef> databasePath(AdoptWK, WKStringCreateWithUTF8CString(path));
-    WKContextSetDatabaseDirectory(ewk_context_WKContext_get(ewkContext), databasePath.get());
+    WKContextSetDatabaseDirectory(ewkContext->wkContext(), databasePath.get());
 
     return true;
 #else
@@ -1134,7 +1281,7 @@ Eina_Bool ewk_context_web_database_path_get(Ewk_Context* ewkContext, Ewk_Web_Dat
     context->webDatabasePathCallback= callback;
     context->userData = userData;
 
-    WKDatabaseManagerRef databaseManager = WKContextGetDatabaseManager(ewk_context_WKContext_get(ewkContext));
+    WKDatabaseManagerRef databaseManager = WKContextGetDatabaseManager(ewkContext->wkContext());
     WKDatabaseManagerGetDatabasePath(databaseManager, context, didGetWebDatabasePath);
     return true;
 #else
@@ -1148,7 +1295,6 @@ Eina_Bool ewk_context_web_database_quota_for_origin_get(Ewk_Context* ewkContext,
     EINA_SAFETY_ON_NULL_RETURN_VAL(callback, false);
     EINA_SAFETY_ON_NULL_RETURN_VAL(origin, false);
 
-    TIZEN_LOGI("host (%s)", ewk_security_origin_host_get(origin));
     Ewk_Context_Callback_Context* context = new Ewk_Context_Callback_Context;
     context->webDatabaseQuotaCallback = callback;
     context->userData = userData;
@@ -1156,7 +1302,7 @@ Eina_Bool ewk_context_web_database_quota_for_origin_get(Ewk_Context* ewkContext,
     WKRetainPtr<WKStringRef> hostRef(AdoptWK, WKStringCreateWithUTF8CString(ewk_security_origin_host_get(origin)));
     WKRetainPtr<WKStringRef> protocolRef(AdoptWK, WKStringCreateWithUTF8CString(ewk_security_origin_protocol_get(origin)));
     WKRetainPtr<WKSecurityOriginRef> originRef(AdoptWK, WKSecurityOriginCreate(protocolRef.get(), hostRef.get(), ewk_security_origin_port_get(origin)));
-    WKDatabaseManagerRef databaseManager = WKContextGetDatabaseManager(ewk_context_WKContext_get(ewkContext));
+    WKDatabaseManagerRef databaseManager = WKContextGetDatabaseManager(ewkContext->wkContext());
     WKDatabaseManagerGetQuotaForOrigin(databaseManager, context, didGetWebDatabaseQuota, originRef.get());
 
     return true;
@@ -1171,7 +1317,7 @@ Eina_Bool ewk_context_web_database_default_quota_set(Ewk_Context* ewkContext, ui
     EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, false);
 
     TIZEN_LOGI("quota (%d)", quota);
-    ewkContext->defaultDatabaseQuota = quota;
+    ewkContext->setDefaultDatabaseQuota(quota);
 
     return true;
 #else
@@ -1185,11 +1331,10 @@ Eina_Bool ewk_context_web_database_quota_for_origin_set(Ewk_Context* ewkContext,
     EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, false);
     EINA_SAFETY_ON_NULL_RETURN_VAL(origin, false);
 
-    TIZEN_LOGI("host (%s) quota(%d)", ewk_security_origin_host_get(origin), quota);
     WKRetainPtr<WKStringRef> hostRef(AdoptWK, WKStringCreateWithUTF8CString(ewk_security_origin_host_get(origin)));
     WKRetainPtr<WKStringRef> protocolRef(AdoptWK, WKStringCreateWithUTF8CString(ewk_security_origin_protocol_get(origin)));
     WKRetainPtr<WKSecurityOriginRef> originRef(AdoptWK, WKSecurityOriginCreate(protocolRef.get(), hostRef.get(), ewk_security_origin_port_get(origin)));
-    WKDatabaseManagerRef databaseManager = WKContextGetDatabaseManager(ewk_context_WKContext_get(ewkContext));
+    WKDatabaseManagerRef databaseManager = WKContextGetDatabaseManager(ewkContext->wkContext());
     WKDatabaseManagerSetQuotaForOrigin(databaseManager, originRef.get(), quota);
 
     return true;
@@ -1205,7 +1350,6 @@ Eina_Bool ewk_context_web_database_usage_for_origin_get(Ewk_Context* ewkContext,
     EINA_SAFETY_ON_NULL_RETURN_VAL(callback, false);
     EINA_SAFETY_ON_NULL_RETURN_VAL(origin, false);
 
-    TIZEN_LOGI("host (%s)", ewk_security_origin_host_get(origin));
     Ewk_Context_Callback_Context* context = new Ewk_Context_Callback_Context;
     context->webDatabaseQuotaCallback = callback;
     context->userData = userData;
@@ -1213,7 +1357,7 @@ Eina_Bool ewk_context_web_database_usage_for_origin_get(Ewk_Context* ewkContext,
     WKRetainPtr<WKStringRef> protocolRef(AdoptWK, WKStringCreateWithUTF8CString(ewk_security_origin_protocol_get(origin)));
     WKRetainPtr<WKStringRef> hostRef(AdoptWK, WKStringCreateWithUTF8CString(ewk_security_origin_host_get(origin)));
     WKRetainPtr<WKSecurityOriginRef> originRef(AdoptWK, WKSecurityOriginCreate(protocolRef.get(), hostRef.get(), ewk_security_origin_port_get(origin)));
-    WKDatabaseManagerRef databaseManager = WKContextGetDatabaseManager(ewk_context_WKContext_get(ewkContext));
+    WKDatabaseManagerRef databaseManager = WKContextGetDatabaseManager(ewkContext->wkContext());
     WKDatabaseManagerGetUsageForOrigin(databaseManager, context, didGetWebDatabaseUsage, originRef.get());
 
     return true;
@@ -1225,20 +1369,7 @@ Eina_Bool ewk_context_web_database_usage_for_origin_get(Ewk_Context* ewkContext,
 Eina_Bool ewk_context_web_indexed_database_delete_all(Ewk_Context* ewkContext)
 {
 #if ENABLE(TIZEN_INDEXED_DATABASE)
-    EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, false);
-
-    TIZEN_LOGI("ewkContext (%p)", ewkContext);
-    DEFINE_STATIC_LOCAL(const String, fileMatchPattern, ("*"));
-    DEFINE_STATIC_LOCAL(const String, indexedDatabaseDirectory, ("/opt/apps/com.samsung.browser/data/.webkit/indexedDatabases"));
-
-    Vector<String> paths = WebCore::listDirectory(indexedDatabaseDirectory, fileMatchPattern);
-    Vector<String>::const_iterator end = paths.end();
-    for(Vector<String>::const_iterator it = paths.begin(); it != end; ++it){
-        String path = *it;
-#if ENABLE(TIZEN_FILE_SYSTEM)
-        WebCore::removeDirectory(path);
-#endif
-    }
+    WKContextDeleteIndexedDatabaseAll(ewkContext->wkContext());
 
     return true;
 #else
@@ -1252,7 +1383,7 @@ Eina_Bool ewk_context_web_storage_delete_all(Ewk_Context* ewkContext)
     EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, false);
 
     TIZEN_LOGI("ewkContext (%p)", ewkContext);
-    WKKeyValueStorageManagerRef storageManager = WKContextGetKeyValueStorageManager(ewk_context_WKContext_get(ewkContext));
+    WKKeyValueStorageManagerRef storageManager = WKContextGetKeyValueStorageManager(ewkContext->wkContext());
     WKKeyValueStorageManagerDeleteAllEntries(storageManager);
 
     return true;
@@ -1267,11 +1398,10 @@ Eina_Bool ewk_context_web_storage_origin_delete(Ewk_Context* ewkContext, Ewk_Sec
     EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, false);
     EINA_SAFETY_ON_NULL_RETURN_VAL(origin, false);
 
-    TIZEN_LOGI("host (%s)", ewk_security_origin_host_get(origin));
     WKRetainPtr<WKStringRef> hostRef(AdoptWK, WKStringCreateWithUTF8CString(ewk_security_origin_host_get(origin)));
     WKRetainPtr<WKStringRef> protocolRef(AdoptWK, WKStringCreateWithUTF8CString(ewk_security_origin_protocol_get(origin)));
     WKRetainPtr<WKSecurityOriginRef> securityOriginRef(AdoptWK, WKSecurityOriginCreate(protocolRef.get(), hostRef.get(), ewk_security_origin_port_get(origin)));
-    WKKeyValueStorageManagerRef storageManager = WKContextGetKeyValueStorageManager(ewk_context_WKContext_get(ewkContext));
+    WKKeyValueStorageManagerRef storageManager = WKContextGetKeyValueStorageManager(ewkContext->wkContext());
     WKKeyValueStorageManagerDeleteEntriesForOrigin(storageManager, securityOriginRef.get());
 
     return true;
@@ -1291,7 +1421,7 @@ Eina_Bool ewk_context_web_storage_origins_get(Ewk_Context* ewkContext, Ewk_Web_S
     context->webStorageOriginsCallback = callback;
     context->userData = userData;
 
-    WKKeyValueStorageManagerRef storageManager = WKContextGetKeyValueStorageManager(ewk_context_WKContext_get(ewkContext));
+    WKKeyValueStorageManagerRef storageManager = WKContextGetKeyValueStorageManager(ewkContext->wkContext());
     WKKeyValueStorageManagerGetKeyValueStorageOrigins(storageManager, context, didGetWebStorageOrigins);
 
     return true;
@@ -1308,7 +1438,7 @@ Eina_Bool ewk_context_web_storage_path_set(Ewk_Context* ewkContext, const char*
 
     TIZEN_LOGI("path (%s)", path);
     WKRetainPtr<WKStringRef> webStoragePath(AdoptWK, WKStringCreateWithUTF8CString(path));
-    WKContextSetLocalStorageDirectory(ewk_context_WKContext_get(ewkContext), webStoragePath.get());
+    WKContextSetLocalStorageDirectory(ewkContext->wkContext(), webStoragePath.get());
 
     return true;
 #else
@@ -1327,7 +1457,7 @@ Eina_Bool ewk_context_web_storage_path_get(Ewk_Context* ewkContext, Ewk_Web_Stor
     context->webStoragePathCallback= callback;
     context->userData = userData;
 
-    WKKeyValueStorageManagerRef storageManager = WKContextGetKeyValueStorageManager(ewk_context_WKContext_get(ewkContext));
+    WKKeyValueStorageManagerRef storageManager = WKContextGetKeyValueStorageManager(ewkContext->wkContext());
     WKKeyValueStorageManagerGetKeyValueStoragePath(storageManager, context, didGetWebStoragePath);
     return true;
 #else
@@ -1341,7 +1471,6 @@ Eina_Bool ewk_context_web_storage_usage_for_origin_get(Ewk_Context* ewkContext,
     EINA_SAFETY_ON_NULL_RETURN_VAL(callback, false);
     EINA_SAFETY_ON_NULL_RETURN_VAL(origin, false);
 
-    TIZEN_LOGI("host (%s)", ewk_security_origin_host_get(origin));
     Ewk_Context_Callback_Context* context = new Ewk_Context_Callback_Context;
     context->webStorageUsageCallback = callback;
     context->userData = userData;
@@ -1349,7 +1478,7 @@ Eina_Bool ewk_context_web_storage_usage_for_origin_get(Ewk_Context* ewkContext,
     WKRetainPtr<WKStringRef> hostRef(AdoptWK, WKStringCreateWithUTF8CString(ewk_security_origin_host_get(origin)));
     WKRetainPtr<WKSecurityOriginRef> originRef(AdoptWK, WKSecurityOriginCreate(protocolRef.get(), hostRef.get(), ewk_security_origin_port_get(origin)));
 
-    WKKeyValueStorageManagerRef storageManager = WKContextGetKeyValueStorageManager(ewk_context_WKContext_get(ewkContext));
+    WKKeyValueStorageManagerRef storageManager = WKContextGetKeyValueStorageManager(ewkContext->wkContext());
     WKKeyValueStorageManagerGetKeyValueStorageUsageForOrigin(storageManager, context, didGetWebStorageUsage, originRef.get());
 
     return true;
@@ -1365,20 +1494,20 @@ Eina_Bool ewk_context_soup_data_directory_set(Ewk_Context* ewkContext, const cha
     EINA_SAFETY_ON_NULL_RETURN_VAL(path, false);
 
     WKRetainPtr<WKStringRef> soupDataDirectory(AdoptWK, WKStringCreateWithUTF8CString(path));
-    WKContextSetSoupDataDirectory(ewk_context_WKContext_get(ewkContext), soupDataDirectory.get());
+    WKContextSetSoupDataDirectory(ewkContext->wkContext(), soupDataDirectory.get());
     return true;
 }
 //#endif
 
-Eina_Bool ewk_context_cache_model_set(Ewk_Context* ewkContext, Ewk_Cache_Model model)
+COMPILE_ASSERT_MATCHING_ENUM(EWK_CACHE_MODEL_DOCUMENT_VIEWER, kWKCacheModelDocumentViewer);
+COMPILE_ASSERT_MATCHING_ENUM(EWK_CACHE_MODEL_DOCUMENT_BROWSER, kWKCacheModelDocumentBrowser);
+COMPILE_ASSERT_MATCHING_ENUM(EWK_CACHE_MODEL_PRIMARY_WEBBROWSER, kWKCacheModelPrimaryWebBrowser);
+
+Eina_Bool ewk_context_cache_model_set(Ewk_Context* ewkContext, Ewk_Cache_Model cacheModel)
 {
     EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, false);
-    if (model == EWK_CACHE_MODEL_DOCUMENT_VIEWER)
-        WKContextSetCacheModel(ewk_context_WKContext_get(ewkContext), kWKCacheModelDocumentViewer);
-    else if (model == EWK_CACHE_MODEL_DOCUMENT_BROWSER)
-        WKContextSetCacheModel(ewk_context_WKContext_get(ewkContext), kWKCacheModelDocumentBrowser);
-    else
-        WKContextSetCacheModel(ewk_context_WKContext_get(ewkContext), kWKCacheModelPrimaryWebBrowser);
+
+    ewkContext->setCacheModel(cacheModel);
 
     return true;
 }
@@ -1386,21 +1515,15 @@ Eina_Bool ewk_context_cache_model_set(Ewk_Context* ewkContext, Ewk_Cache_Model m
 Ewk_Cache_Model ewk_context_cache_model_get(Ewk_Context* ewkContext)
 {
     EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, EWK_CACHE_MODEL_DOCUMENT_VIEWER);
-    WKCacheModel cacheModel = WKContextGetCacheModel(ewk_context_WKContext_get(ewkContext));
 
-    if (cacheModel == kWKCacheModelDocumentViewer)
-        return EWK_CACHE_MODEL_DOCUMENT_VIEWER;
-    else if (cacheModel == kWKCacheModelDocumentBrowser)
-        return EWK_CACHE_MODEL_DOCUMENT_BROWSER;
-    else
-        return EWK_CACHE_MODEL_PRIMARY_WEBBROWSER;
+    return ewkContext->cacheModel();
 }
 
 Eina_Bool ewk_context_cache_disabled_set(Ewk_Context* ewkContext, Eina_Bool cacheDisabled)
 {
 #if ENABLE(TIZEN_CACHE_CONTROL)
     EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, false);
-    WKContextSetCacheDisabled(ewk_context_WKContext_get(ewkContext), cacheDisabled);
+    WKContextSetCacheDisabled(ewkContext->wkContext(), cacheDisabled);
 #endif
 
     return true;
@@ -1410,7 +1533,7 @@ Eina_Bool ewk_context_cache_disabled_get(Ewk_Context* ewkContext)
 {
 #if ENABLE(TIZEN_CACHE_CONTROL)
     EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, false);
-    return WKContextGetCacheDisabled(ewk_context_WKContext_get(ewkContext));
+    return WKContextGetCacheDisabled(ewkContext->wkContext());
 #else
     return false;
 #endif
@@ -1421,13 +1544,18 @@ Eina_Bool ewk_context_certificate_file_set(Ewk_Context* context, const char* cer
     EINA_SAFETY_ON_NULL_RETURN_VAL(context, false);
     EINA_SAFETY_ON_NULL_RETURN_VAL(certificateFile, false);
 #if ENABLE(TIZEN_CERTIFICATE_HANDLING)
-    eina_stringshare_replace(&context->certificateFile, certificateFile);
+    if (!context->setCertificateFile(certificateFile))
+        return true;
 
-    if (!fileExists(WTF::String::fromUTF8(certificateFile)))
-        LOG_ERROR("[Network] ewk_context_certificate_file_set certificateFile does not exist!\n");
+    if (fileExists(WTF::String::fromUTF8(certificateFile))) {
+        long long fileSize = -1;
+        getFileSize(WTF::String::fromUTF8(certificateFile), fileSize);
+        TIZEN_LOGE("[Network] ewk_context_certificate_file_set certificateFile fileSize [%lld]\n", fileSize);
+    } else
+        TIZEN_LOGE("[Network] ewk_context_certificate_file_set certificateFile does not exist!\n");
 
     WKRetainPtr<WKStringRef> certificateFileRef(AdoptWK, WKStringCreateWithUTF8CString(certificateFile));
-    WKContextSetCertificateFile(ewk_context_WKContext_get(context), certificateFileRef.get());
+    WKContextSetCertificateFile(context->wkContext(), certificateFileRef.get());
     return true;
 #else
     UNUSED_PARAM(context);
@@ -1440,7 +1568,7 @@ const char* ewk_context_certificate_file_get(const Ewk_Context* context)
 {
     EINA_SAFETY_ON_NULL_RETURN_VAL(context, 0);
 #if ENABLE(TIZEN_CERTIFICATE_HANDLING)
-    return context->certificateFile;
+    return context->certificateFile();
 #else
     UNUSED_PARAM(context);
     return 0;
@@ -1450,7 +1578,7 @@ const char* ewk_context_certificate_file_get(const Ewk_Context* context)
 Eina_Bool ewk_context_cache_clear(Ewk_Context* ewkContext)
 {
     EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, false);
-    WKResourceCacheManagerRef cacheManager = WKContextGetResourceCacheManager(ewk_context_WKContext_get(ewkContext));
+    WKResourceCacheManagerRef cacheManager = WKContextGetResourceCacheManager(ewkContext->wkContext());
 #if ENABLE(TIZEN_EWK_CONTEXT_CACHE_MANAGER_NULL_CHECK_WORKAROUND)
     if (!cacheManager)
         return false;
@@ -1460,27 +1588,6 @@ Eina_Bool ewk_context_cache_clear(Ewk_Context* ewkContext)
     return true;
 }
 
-#if ENABLE(TIZEN_CACHE_DUMP_SYNC)
-/**
- * @internal
- * Request WebProcess to dump cache.
- *
- * This sends sync message to WebProcess to dump memory cache, that is, soup cache.
- *
- * @param context context object
- *
- * @return @c EINA_TRUE on success or @c EINA_FALSE on failure
- *
- * @note This can effect UIProcess's performance because it calls to sync IPC message eventually.
- */
-void ewk_context_cache_dump(Ewk_Context* ewkContext)
-{
-    EINA_SAFETY_ON_NULL_RETURN(ewkContext);
-    WKResourceCacheManagerRef cacheManager = WKContextGetResourceCacheManager(ewk_context_WKContext_get(ewkContext));
-    toImpl(cacheManager)->dumpCache();
-}
-#endif
-
 void ewk_context_message_post_to_injected_bundle(Ewk_Context* ewkContext, const char* name, const char* body)
 {
     EINA_SAFETY_ON_NULL_RETURN(ewkContext);
@@ -1489,59 +1596,21 @@ void ewk_context_message_post_to_injected_bundle(Ewk_Context* ewkContext, const
 
     WKRetainPtr<WKStringRef> messageName(AdoptWK, WKStringCreateWithUTF8CString(name));
     WKRetainPtr<WKStringRef> messageBody(AdoptWK, WKStringCreateWithUTF8CString(body));
-    WKContextPostMessageToInjectedBundle(ewk_context_WKContext_get(ewkContext), messageName.get(), messageBody.get());
+    WKContextPostMessageToInjectedBundle(ewkContext->wkContext(), messageName.get(), messageBody.get());
 }
 
 void ewk_context_message_from_injected_bundle_callback_set(Ewk_Context* ewkContext, Ewk_Context_Message_From_Injected_Bundle_Callback callback, void* userData)
 {
     EINA_SAFETY_ON_NULL_RETURN(ewkContext);
 
-    ewkContext->messageFromInjectedBundle.callback = callback;
-    ewkContext->messageFromInjectedBundle.userData = userData;
-}
-
-void ewkContextDidReceiveMessageFromInjectedBundle(Ewk_Context* ewkContext, WKStringRef messageName, WKTypeRef messageBody, WKTypeRef* returnData)
-{
-    EINA_SAFETY_ON_NULL_RETURN(ewkContext);
-
-    if (!ewkContext->messageFromInjectedBundle.callback)
-        return;
-
-    CString name = toImpl(messageName)->string().utf8();
-    CString body;
-    if (messageBody && WKStringGetTypeID() == WKGetTypeID(messageBody))
-        body = toImpl(static_cast<WKStringRef>(messageBody))->string().utf8();
-
-    if (returnData) {
-        char* returnString = 0;
-        ewkContext->messageFromInjectedBundle.callback(name.data(), body.data(), &returnString,
-                                                       ewkContext->messageFromInjectedBundle.userData);
-        if (returnString) {
-            *returnData = WKStringCreateWithUTF8CString(returnString);
-            free(returnString);
-        } else {
-            *returnData = WKStringCreateWithUTF8CString("");
-        }
-    } else {
-        ewkContext->messageFromInjectedBundle.callback(name.data(), body.data(), 0,
-                                                       ewkContext->messageFromInjectedBundle.userData);
-    }
+    ewkContext->setMessageFromInjectedBundleCallback(callback, userData);
 }
 
 void ewk_context_did_start_download_callback_set(Ewk_Context* ewkContext, Ewk_Context_Did_Start_Download_Callback callback, void* userData)
 {
     EINA_SAFETY_ON_NULL_RETURN(ewkContext);
 
-    ewkContext->didStartDownload.callback = callback;
-    ewkContext->didStartDownload.userData = userData;
-}
-
-void ewkContextDidStartDownload(Ewk_Context* ewkContext, WKStringRef downloadURL)
-{
-    EINA_SAFETY_ON_NULL_RETURN(ewkContext);
-    EINA_SAFETY_ON_NULL_RETURN(ewkContext->didStartDownload.callback);
-
-    ewkContext->didStartDownload.callback(toImpl(downloadURL)->string().utf8().data(), ewkContext->didStartDownload.userData);
+    ewkContext->setDidStartDownloadCallback(callback, userData);
 }
 
 #if ENABLE(MEMORY_SAMPLER)
@@ -1549,24 +1618,13 @@ void ewk_context_memory_sampler_start(Ewk_Context* ewkContext, double timerInter
 {
     EINA_SAFETY_ON_NULL_RETURN(ewkContext);
     WKRetainPtr<WKDoubleRef> interval(AdoptWK, WKDoubleCreate(timerInterval));
-    WKContextStartMemorySampler(ewk_context_WKContext_get(ewkContext), interval.get());
+    WKContextStartMemorySampler(ewkContext->wkContext(), interval.get());
 }
 
 void ewk_context_memory_sampler_stop(Ewk_Context* ewkContext)
 {
     EINA_SAFETY_ON_NULL_RETURN(ewkContext);
-    WKContextStopMemorySampler(ewk_context_WKContext_get(ewkContext));
-}
-#endif
-
-#if ENABLE(TIZEN_CACHE_MEMORY_OPTIMIZATION)
-Eina_Bool ewk_context_decoded_data_clear_all(Ewk_Context* ewkContext)
-{
-    EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, false);
-    WKResourceCacheManagerRef cacheManager = WKContextGetResourceCacheManager(ewk_context_WKContext_get(ewkContext));
-    WKResourceCacheManagerClearCacheForAllOrigins(cacheManager, WKResourceCachesToClearInDecodedDataOnly);
-
-    return true;
+    WKContextStopMemorySampler(ewkContext->wkContext());
 }
 #endif
 
@@ -1577,7 +1635,7 @@ Eina_Bool ewk_context_additional_plugin_path_set(Ewk_Context* ewkContext, const
     EINA_SAFETY_ON_NULL_RETURN_VAL(path, false);
 
     WKRetainPtr<WKStringRef> pluginPath(AdoptWK, WKStringCreateWithUTF8CString(path));
-    WKContextSetAdditionalPluginsDirectory(ewk_context_WKContext_get(ewkContext), pluginPath.get());
+    WKContextSetAdditionalPluginsDirectory(ewkContext->wkContext(), pluginPath.get());
 
     return true;
 #else
@@ -1590,85 +1648,22 @@ void ewk_context_memory_saving_mode_set(Ewk_Context* ewkContext, Eina_Bool mode)
 {
     EINA_SAFETY_ON_NULL_RETURN(ewkContext);
 
-    WKContextRef contextRef = ewk_context_WKContext_get(ewkContext);
+    WKContextRef contextRef = ewkContext->wkContext();
     toImpl(contextRef)->setMemorySavingMode(mode);
 }
 #endif
 
-#if ENABLE(TIZEN_WEBKIT2_CONTEXT_X_WINDOW)
-Ecore_X_Window ewk_context_x_window_get(Ewk_Context* ewkContext)
-{
-    EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, 0);
-    return ewkContext->xWindow;
-}
-
-void ewk_context_x_window_set(Ewk_Context* ewkContext, Ecore_X_Window xWindow)
-{
-    EINA_SAFETY_ON_NULL_RETURN(ewkContext);
-    WKContextRef contextRef = ewk_context_WKContext_get(ewkContext);
-    toImpl(contextRef)->setXWindow(xWindow);
-}
-#endif
-
 #if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
-void ewk_context_form_data_add(Ewk_Context* ewkContext, const char* url, WKDictionaryRef& formData, bool isPasswordForm)
-{
-    EINA_SAFETY_ON_NULL_RETURN(ewkContext);
-    EINA_SAFETY_ON_NULL_RETURN(url);
-    if (!ewkContext->formDatabase->isOpen())
-        return;
-
-    Vector<std::pair<String, String> > formDataVector;
-    WKRetainPtr<WKArrayRef> wkKeys(AdoptWK, WKDictionaryCopyKeys(formData));
-    size_t numKeys = WKArrayGetSize(wkKeys.get());
-    for (size_t i = 0; i < numKeys; ++i) {
-        WKStringRef wkKey = static_cast<WKStringRef>(WKArrayGetItemAtIndex(wkKeys.get(), i));
-        WKStringRef wkValue = static_cast<WKStringRef>(WKDictionaryGetItemForKey(formData, wkKey));
-
-        int length = WKStringGetMaximumUTF8CStringSize(wkKey);
-        if (length <= 0)
-            continue;
-        OwnArrayPtr<char> keyBuffer = adoptArrayPtr(new char[length]);
-        WKStringGetUTF8CString(wkKey, keyBuffer.get(), length);
-
-        length = WKStringGetMaximumUTF8CStringSize(wkValue);
-        if (length <= 0)
-            continue;
-        OwnArrayPtr<char> valueBuffer = adoptArrayPtr(new char[length]);
-        WKStringGetUTF8CString(wkValue, valueBuffer.get(), length);
-        formDataVector.append(pair<String, String>(keyBuffer.get(), valueBuffer.get()));
-    }
-
-    ewkContext->formDatabase->addFormDataForURL(String::fromUTF8(url), formDataVector, isPasswordForm);
-}
-
-void ewk_context_form_password_data_get(Ewk_Context* ewkContext, const char* url, Vector<std::pair<String, String> >& passwordFormData)
-{
-    EINA_SAFETY_ON_NULL_RETURN(ewkContext);
-    EINA_SAFETY_ON_NULL_RETURN(url);
-    if (!ewkContext->formDatabase->isOpen())
-        return;
-    ewkContext->formDatabase->getPasswordFormDataForURL(String::fromUTF8(url), passwordFormData);
-}
-
-void ewk_context_form_candidate_data_get(Ewk_Context* ewkContext, const String& name, Vector<String>& candidates)
-{
-    EINA_SAFETY_ON_NULL_RETURN(ewkContext);
-    if (!ewkContext->formDatabase->isOpen())
-        return;
-    ewkContext->formDatabase->getCandidateFormDataForName(name, candidates);
-}
-
 void ewk_context_form_password_data_clear(Ewk_Context* ewkContext)
 {
     EINA_SAFETY_ON_NULL_RETURN(ewkContext);
-    ewkContext->formDatabase->clearPasswordFormData();
+    ewkContext->clearPasswordFormData();
 }
 
 void ewk_context_form_candidate_data_clear(Ewk_Context* ewkContext)
 {
     EINA_SAFETY_ON_NULL_RETURN(ewkContext);
-    ewkContext->formDatabase->clearCandidateFormData();
+    ewkContext->clearCandidateFormData();
 }
 #endif
 #endif // #if OS(TIZEN)
@@ -1679,9 +1674,7 @@ Eina_Bool ewk_context_url_scheme_register(Ewk_Context* ewkContext, const char* s
     EINA_SAFETY_ON_NULL_RETURN_VAL(scheme, false);
     EINA_SAFETY_ON_NULL_RETURN_VAL(callback, false);
 
-    ewkContext->urlSchemeHandlers.set(String::fromUTF8(scheme), _Ewk_Url_Scheme_Handler(callback, userData));
-    WKRetainPtr<WKStringRef> wkScheme(AdoptWK, WKStringCreateWithUTF8CString(scheme));
-    WKSoupRequestManagerRegisterURIScheme(ewkContext->requestManager.get(), wkScheme.get());
+    ewkContext->requestManager()->registerURLSchemeHandler(String::fromUTF8(scheme), callback, userData);
 
     return true;
 }
@@ -1692,7 +1685,7 @@ void ewk_context_vibration_client_callbacks_set(Ewk_Context* ewkContext, Ewk_Vib
 
     TIZEN_LOGI("vibrate (%p)", vibrate);
 #if ENABLE(VIBRATION)
-    ewkContext->vibrationProvider->setVibrationClientCallbacks(vibrate, cancel, data);
+    ewkContext->vibrationProvider()->setVibrationClientCallbacks(vibrate, cancel, data);
 #endif
 }
 
@@ -1702,7 +1695,7 @@ Eina_Bool ewk_context_tizen_extensible_api_set(Ewk_Context* ewkContext,  Ewk_Ext
     EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, false);
 
     TIZEN_LOGI("extensibleAPI (%d) enable (%d)", extensibleAPI, enable);
-    WKContextSetTizenExtensibleAPI(ewk_context_WKContext_get(ewkContext), static_cast<WKTizenExtensibleAPI>(extensibleAPI), enable);
+    WKContextSetTizenExtensibleAPI(ewkContext->wkContext(), static_cast<WKTizenExtensibleAPI>(extensibleAPI), enable);
 
     return true;
 #else
@@ -1720,8 +1713,23 @@ void ewk_context_storage_path_reset(Ewk_Context* ewkContext)
     EINA_SAFETY_ON_NULL_RETURN(ewkContext);
 
     TIZEN_LOGI("ewkContext (%p)", ewkContext);
-    WKContextResetStoragePath(ewk_context_WKContext_get(ewkContext));
+    WKContextResetStoragePath(ewkContext->wkContext());
 #else
     UNUSED_PARAM(ewkContext);
 #endif
 }
+
+void ewk_context_history_callbacks_set(Ewk_Context* ewkContext, Ewk_History_Navigation_Cb navigate, Ewk_History_Client_Redirection_Cb clientRedirect, Ewk_History_Server_Redirection_Cb serverRedirect, Ewk_History_Title_Update_Cb titleUpdate, Ewk_History_Populate_Visited_Links_Cb populateVisitedLinks, void* data)
+{
+    EINA_SAFETY_ON_NULL_RETURN(ewkContext);
+
+    ewkContext->historyClient()->setCallbacks(navigate, clientRedirect, serverRedirect, titleUpdate, populateVisitedLinks, data);
+}
+
+void ewk_context_visited_link_add(Ewk_Context* ewkContext, const char* visitedURL)
+{
+    EINA_SAFETY_ON_NULL_RETURN(ewkContext);
+    EINA_SAFETY_ON_NULL_RETURN(visitedURL);
+
+    ewkContext->addVisitedLink(visitedURL);
+}