1 // Copyright 2013-2015 Samsung Electronics. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "ewk_context.h"
7 // TODO: remove dependency
8 #include <../src/base/memory/ref_counted.h>
9 #include <../impl/browser/vibration/vibration_provider_client.h>
10 #include <../impl/browser_context_efl.h>
11 #include <../impl/http_user_agent_settings_efl.h>
12 #include <../impl/API/ewk_cookie_manager_private.h>
13 #include <../impl/API/ewk_context_form_autofill_profile_private.h>
15 #include <tizen_webview/public/tw_security_origin.h>
16 #include <tizen_webview/public/tw_web_context.h>
17 #include <tizen_webview/public/tw_url.h>
19 #include "public/ewk_security_origin.h"
20 #include "private/ewk_context_private.h"
21 #include "private/ewk_private.h"
22 #include "private/ewk_security_origin_private.h"
23 #include "private/chromium_glue.h"
24 #include "private/ewk_favicon_database_private.h"
27 using tizen_webview::WebContext;
29 static WebContext* default_context_ = NULL;
31 Ewk_Context *ewk_context_ref(Ewk_Context *context)
33 EINA_SAFETY_ON_NULL_RETURN_VAL(context, NULL);
38 void ewk_context_unref(Ewk_Context *context)
40 EINA_SAFETY_ON_NULL_RETURN(context);
44 Ewk_Cookie_Manager* ewk_context_cookie_manager_get(const Ewk_Context* context)
46 EINA_SAFETY_ON_NULL_RETURN_VAL(context, 0);
47 return context->ewkCookieManager();
50 Ewk_Context* ewk_context_default_get()
52 if (!default_context_) {
53 default_context_ = WebContext::Create(false);
54 default_context_->AddRef();
56 return static_cast<Ewk_Context*>(default_context_);
59 Ewk_Context* ewk_context_new()
61 return static_cast<Ewk_Context*>(WebContext::Create());
64 Ewk_Context *ewk_context_new_with_injected_bundle_path(const char *path)
66 //with chromium engine this API not used.
67 //returning default context
72 void ewk_context_delete(Ewk_Context* context)
78 void ewk_context_proxy_uri_set(Ewk_Context* context, const char* proxy)
81 EINA_SAFETY_ON_NULL_RETURN(context);
82 EINA_SAFETY_ON_NULL_RETURN(proxy);
83 if (0 != strcmp(proxy,""))
84 context->SetProxyUri(proxy);
87 const char* ewk_context_proxy_uri_get(Ewk_Context* context)
89 EINA_SAFETY_ON_NULL_RETURN_VAL(context,0);
90 return context->GetProxyUri();
93 Eina_Bool ewk_context_notify_low_memory(Ewk_Context* context)
95 EINA_SAFETY_ON_NULL_RETURN_VAL(context, false);
96 context->NotifyLowMemory();
100 Eina_Bool ewk_context_origins_free(Eina_List* origins)
102 EINA_SAFETY_ON_NULL_RETURN_VAL(origins, false);
104 void* current_origin;
105 EINA_LIST_FREE(origins, current_origin) {
106 Ewk_Security_Origin* origin = static_cast<Ewk_Security_Origin*>(current_origin);
112 Eina_Bool ewk_context_application_cache_delete_all(Ewk_Context* context)
114 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
115 context->DeleteAllApplicationCache();
119 Eina_Bool ewk_context_application_cache_delete(Ewk_Context* context, Ewk_Security_Origin* origin)
121 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
122 EINA_SAFETY_ON_NULL_RETURN_VAL(origin, EINA_FALSE);
123 context->DeleteApplicationCacheForSite(origin->GetURL());
127 Eina_Bool ewk_context_application_cache_origins_get(Ewk_Context* context, Ewk_Web_Application_Cache_Origins_Get_Callback callback, void* user_data)
129 EINA_SAFETY_ON_NULL_RETURN_VAL(callback, EINA_FALSE);
130 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
132 context->GetAllOriginsWithApplicationCache(callback, user_data);
136 Eina_Bool ewk_context_application_cache_usage_for_origin_get(Ewk_Context* context, const Ewk_Security_Origin* origin, Ewk_Web_Application_Cache_Usage_For_Origin_Get_Callback callback, void* user_data)
138 EINA_SAFETY_ON_NULL_RETURN_VAL(callback, EINA_FALSE);
139 EINA_SAFETY_ON_NULL_RETURN_VAL(origin, EINA_FALSE);
140 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
141 context->GetApplicationCacheUsage(origin->GetURL(), callback, user_data);
145 Eina_Bool ewk_context_application_cache_quota_for_origin_set(Ewk_Context* context, const Ewk_Security_Origin* origin, int64_t quota)
147 NOTIMPLEMENTED() << "Chromium does not support quota management for individual features.";
151 Eina_Bool ewk_context_icon_database_path_set(Ewk_Context* context, const char* path)
153 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
154 return context->SetFaviconDatabasePath(path) ? EINA_TRUE : EINA_FALSE;
157 Evas_Object* ewk_context_icon_database_icon_object_add(Ewk_Context* context, const char* uri, Evas* canvas)
159 EINA_SAFETY_ON_NULL_RETURN_VAL(uri, NULL);
160 EINA_SAFETY_ON_NULL_RETURN_VAL(canvas, NULL);
161 EINA_SAFETY_ON_NULL_RETURN_VAL(context, NULL);
162 return context->AddFaviconObject(uri, canvas);
165 Eina_Bool ewk_context_local_file_system_all_delete(Ewk_Context *context)
167 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
168 context->FileSystemDelete(tizen_webview::URL());
172 Eina_Bool ewk_context_local_file_system_delete(Ewk_Context *context, Ewk_Security_Origin *origin)
174 EINA_SAFETY_ON_NULL_RETURN_VAL(origin, EINA_FALSE);
175 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
176 context->FileSystemDelete(tizen_webview::URL(ewk_security_origin_host_get(origin)));
180 Eina_Bool ewk_context_local_file_system_origins_get(const Ewk_Context *context,
181 Ewk_Local_File_System_Origins_Get_Callback callback,
184 EINA_SAFETY_ON_NULL_RETURN_VAL(callback, EINA_FALSE);
185 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
186 context->GetAllOriginsWithFileSystem(callback, user_data);
190 Eina_Bool ewk_context_web_database_delete_all(Ewk_Context* context)
192 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
193 context->WebDBDelete(tizen_webview::URL());
197 Eina_Bool ewk_context_web_database_delete(Ewk_Context* context, Ewk_Security_Origin* origin)
199 EINA_SAFETY_ON_NULL_RETURN_VAL(origin, EINA_FALSE);
200 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
201 context->WebDBDelete(tizen_webview::URL(ewk_security_origin_host_get(origin)));
205 Eina_Bool ewk_context_web_database_origins_get(Ewk_Context* context,
206 Ewk_Web_Database_Origins_Get_Callback callback,
209 EINA_SAFETY_ON_NULL_RETURN_VAL(callback, EINA_FALSE);
210 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
211 context->GetAllOriginsWithWebDB(callback, user_data);
215 Eina_Bool ewk_context_web_database_quota_for_origin_get(Ewk_Context* context, Ewk_Web_Database_Quota_Get_Callback callback, void* userData, Ewk_Security_Origin* origin)
217 LOG_EWK_API_MOCKUP();
221 Eina_Bool ewk_context_web_database_quota_for_origin_set(Ewk_Context* context, Ewk_Security_Origin* origin, uint64_t quota)
223 LOG_EWK_API_MOCKUP();
227 Eina_Bool ewk_context_web_indexed_database_delete_all(Ewk_Context* context)
229 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
230 context->IndexedDBDelete();
234 Eina_Bool ewk_context_web_storage_delete_all(Ewk_Context* context)
236 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
237 context->WebStorageDelete();
241 Eina_Bool ewk_context_web_storage_origin_delete(Ewk_Context* context, Ewk_Security_Origin* origin)
243 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
244 EINA_SAFETY_ON_NULL_RETURN_VAL(origin, EINA_FALSE);
246 context->WebStorageDelete(origin->GetURL());
250 Eina_Bool ewk_context_web_storage_origins_get(Ewk_Context* context, Ewk_Web_Storage_Origins_Get_Callback callback, void* user_data)
252 EINA_SAFETY_ON_NULL_RETURN_VAL(callback, EINA_FALSE);
253 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
255 context->WebStorageOriginsAllGet(callback, user_data);
259 Eina_Bool ewk_context_web_storage_path_set(Ewk_Context* /*context*/, const char* /*path*/)
261 //With chromium engine no separate path for web storage supported.
262 //This API not implemented
267 Eina_Bool ewk_context_web_storage_usage_for_origin_get(Ewk_Context* context, Ewk_Security_Origin* origin, Ewk_Web_Storage_Usage_Get_Callback callback, void* userData)
269 LOG_EWK_API_MOCKUP();
273 Eina_Bool ewk_context_soup_data_directory_set(Ewk_Context* /*context*/, const char* /*path*/)
275 //chomium engine does not use libsoup hence this API will not be implemented
280 Eina_Bool ewk_context_cache_model_set(Ewk_Context* context, Ewk_Cache_Model model)
282 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
283 context->SetCacheModel(chromium_glue::to(model));
287 Ewk_Cache_Model ewk_context_cache_model_get(Ewk_Context* context)
289 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EWK_CACHE_MODEL_DOCUMENT_VIEWER);
290 return chromium_glue::from(context->GetCacheModel());
293 Eina_Bool ewk_context_cache_disabled_set(Ewk_Context* context, Eina_Bool cacheDisabled)
295 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
296 context->SetNetworkCacheEnable(!cacheDisabled);
300 Eina_Bool ewk_context_cache_disabled_get(Ewk_Context* context)
302 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
303 return !context->GetNetworkCacheEnable();
306 Eina_Bool ewk_context_certificate_file_set(Ewk_Context *context, const char *certificate_file)
308 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
309 EINA_SAFETY_ON_NULL_RETURN_VAL(certificate_file, EINA_FALSE);
310 context->SetCertificate(certificate_file);
314 const char* ewk_context_certificate_file_get(const Ewk_Context* context)
316 EINA_SAFETY_ON_NULL_RETURN_VAL(context, NULL);
317 #if !defined(EWK_BRINGUP)
318 return context->GetCertificate();
320 LOG_EWK_API_MOCKUP();
325 Eina_Bool ewk_context_cache_clear(Ewk_Context* context)
327 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
328 context->ClearNetworkCache();
329 context->ClearWebkitCache();
333 void ewk_context_did_start_download_callback_set(Ewk_Context* context,
334 Ewk_Context_Did_Start_Download_Callback callback,
337 EINA_SAFETY_ON_NULL_RETURN(context);
338 context->SetDidStartDownloadCallback(callback, userData);
341 void ewk_context_mime_override_callback_set(Ewk_Context* context, Ewk_Context_Override_Mime_For_Url_Callback callback, void* user_data)
343 EINA_SAFETY_ON_NULL_RETURN(context);
344 context->SetMimeOverrideCallback(callback, user_data);
347 void ewk_context_memory_sampler_start(Ewk_Context* context, double timerInterval)
349 LOG_EWK_API_MOCKUP();
352 void ewk_context_memory_sampler_stop(Ewk_Context* context)
354 LOG_EWK_API_MOCKUP();
357 Eina_Bool ewk_context_additional_plugin_path_set(Ewk_Context *context, const char *path)
359 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
360 EINA_SAFETY_ON_NULL_RETURN_VAL(path, EINA_FALSE);
361 context->AddExtraPluginDir(path);
365 void ewk_context_memory_saving_mode_set(Ewk_Context* context, Eina_Bool mode)
367 //memory saving mode should be handled in chromium in different way
368 //than it is handled in WebKit, so implementation of this feature
369 //is postponed, for now dummy implementation is enough
374 void ewk_context_form_password_data_delete_all(Ewk_Context* context)
376 EINA_SAFETY_ON_NULL_RETURN(context);
377 context->ClearPasswordData();
380 void ewk_context_form_password_data_delete(Ewk_Context* ewkContext, const char* url)
382 LOG_EWK_API_MOCKUP();
385 Eina_List* ewk_context_form_password_data_list_get(Ewk_Context* ewkContext)
387 LOG_EWK_API_MOCKUP();
391 void ewk_context_form_password_data_list_free(Ewk_Context* ewkContext, Eina_List* list)
393 LOG_EWK_API_MOCKUP();
396 void ewk_context_form_candidate_data_delete_all(Ewk_Context* context)
398 EINA_SAFETY_ON_NULL_RETURN(context);
399 context->ClearCandidateData();
402 void ewk_context_form_autofill_profile_changed_callback_set(
403 Ewk_Context_Form_Autofill_Profile_Changed_Callback callback,
406 EwkContextFormAutofillProfileManager::priv_form_autofill_profile_changed_callback_set(
407 callback, user_data);
410 Eina_List* ewk_context_form_autofill_profile_get_all(Ewk_Context* context)
412 if (NULL == context) {
415 return EwkContextFormAutofillProfileManager::priv_form_autofill_profile_get_all(context);
418 Ewk_Autofill_Profile* ewk_context_form_autofill_profile_get(Ewk_Context* context, unsigned id)
420 if (NULL == context) {
423 return EwkContextFormAutofillProfileManager::priv_form_autofill_profile_get(context, id);
426 Eina_Bool ewk_context_form_autofill_profile_set(Ewk_Context* context, unsigned id, Ewk_Autofill_Profile* profile)
428 if (NULL == context || NULL == profile) {
431 return EwkContextFormAutofillProfileManager::priv_form_autofill_profile_set(context, id, profile);
434 Eina_Bool ewk_context_form_autofill_profile_add(Ewk_Context* context, Ewk_Autofill_Profile* profile)
436 if (NULL == context || NULL == profile) {
439 return EwkContextFormAutofillProfileManager::priv_form_autofill_profile_add(context, profile);
442 Eina_Bool ewk_context_form_autofill_profile_remove(Ewk_Context* context, unsigned id)
444 if (NULL == context) {
447 return EwkContextFormAutofillProfileManager::priv_form_autofill_profile_remove(context, id);
450 void ewk_context_vibration_client_callbacks_set(Ewk_Context* context,
451 Ewk_Vibration_Client_Vibrate_Cb vibrate,
452 Ewk_Vibration_Client_Vibration_Cancel_Cb cancel,
455 VibrationProviderClient* vibra_client = VibrationProviderClient::GetInstance();
456 vibra_client->SetVibrationClientCallbacks(vibrate, cancel, data);
459 Eina_Bool ewk_context_tizen_extensible_api_string_set(Ewk_Context* ewkContext, const char* extensibleAPI, Eina_Bool enable)
461 LOG_EWK_API_MOCKUP();
465 Eina_Bool ewk_context_tizen_extensible_api_set(Ewk_Context * /*context*/, Ewk_Extensible_API /*extensibleAPI*/, Eina_Bool /*enable*/)
467 //This API will not be implemented with chromium engine based Ewk View
472 Eina_Bool ewk_context_tizen_extensible_api_get(Ewk_Context * /*context*/, Ewk_Extensible_API /*extensibleAPI*/)
474 //This API will not be implemented with chromium engine based Ewk View
479 void ewk_context_storage_path_reset(Ewk_Context* /*context*/)
481 //not supported in chromium to dynamically update the storage path
485 Eina_Bool ewk_context_pixmap_set(Ewk_Context *context, int pixmap)
487 EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE);
488 context->SetPixmap(pixmap);
492 int ewk_context_pixmap_get(Ewk_Context *context)
494 EINA_SAFETY_ON_NULL_RETURN_VAL(context, 0);
495 return context->Pixmap();
498 unsigned int ewk_context_inspector_server_start(Ewk_Context* ewkContext, unsigned int port)
500 EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, 0);
501 return ewkContext->InspectorServerStart(port);
504 Eina_Bool ewk_context_inspector_server_stop(Ewk_Context* ewkContext)
506 EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, EINA_FALSE);
507 return ewkContext->InspectorServerStop();
510 void ewk_send_widget_info(Ewk_Context *context,
514 const char *encodedBundle)
516 EINA_SAFETY_ON_NULL_RETURN(theme);
517 EINA_SAFETY_ON_NULL_RETURN(encodedBundle);
518 EINA_SAFETY_ON_NULL_RETURN(context);
519 context->SendWidgetInfo(widget_handle, scale, theme, encodedBundle);
522 #if defined(OS_TIZEN_TV)
523 Ewk_Application_Cache_Manager* ewk_context_application_cache_manager_get(const Ewk_Context* ewkContext)
525 LOG_EWK_API_MOCKUP("for Tizen TV Browser");
530 Ewk_Favicon_Database* ewk_context_favicon_database_get(const Ewk_Context* ewkContext)
532 #if defined(OS_TIZEN_TV)
533 EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, 0);
534 Ewk_Favicon_Database *favicon_database = Ewk_Favicon_Database::Instance();
535 favicon_database->InitEwkFaviconDatabase(ewkContext);
536 return favicon_database;
538 LOG_EWK_API_MOCKUP("Only for Tizen TV Browser");
543 void ewk_context_resource_cache_clear(Ewk_Context* ewkContext)
545 EINA_SAFETY_ON_NULL_RETURN(ewkContext);
546 ewkContext->ClearNetworkCache();
547 ewkContext->ClearWebkitCache();
550 #if defined(OS_TIZEN_TV)
551 Eina_Bool ewk_context_favicon_database_directory_set(Ewk_Context* ewkContext, const char* directoryPath)
553 LOG_EWK_API_MOCKUP("Tizen TV Browser");
556 #endif // OS_TIZEN_TV
558 void ewk_context_preferred_languages_set(Eina_List* languages)
560 std::string preferredLanguages;
565 EINA_LIST_FOREACH(languages, it, data) {
567 preferredLanguages.append(static_cast<char*>(data));
569 preferredLanguages.append(",");
573 std::transform(preferredLanguages.begin(), preferredLanguages.end(), preferredLanguages.begin(), ::tolower);
574 std::replace(preferredLanguages.begin(), preferredLanguages.end(), '_', '-');
575 HttpUserAgentSettingsEfl::SetAcceptLanguage(preferredLanguages);
578 #if defined(OS_TIZEN_TV)
579 Ewk_Storage_Manager* ewk_context_storage_manager_get(const Ewk_Context* ewkContext)
581 LOG_EWK_API_MOCKUP("Tizen TV Browser");
584 #endif // OS_TIZEN_TV