[M67 Dev][EWK] Classify EWK APIs by public, internal, or product
[platform/framework/web/chromium-efl.git] / tizen_src / ewk / efl_integration / public / ewk_settings.cc
1 // Copyright 2013 Samsung Electronics. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ewk_settings_product.h"
6
7 #include "eweb_view.h"
8 #include "ui/events/gesture_detection/gesture_configuration.h"
9 #include "text_encoding_map_efl.h"
10 #include "private/ewk_private.h"
11 #include "private/ewk_private.h"
12 #include "private/ewk_settings_private.h"
13 #include "private/ewk_view_private.h"
14 #include "tizen/system_info.h"
15
16 namespace {
17
18 void ewkUpdateWebkitPreferences(Evas_Object *ewkView)
19 {
20   EWebView* impl = EWebView::FromEvasObject(ewkView);
21   assert(impl);
22
23   bool autoSelectWord = ewk_settings_select_word_automatically_get(impl->GetSettings());
24   // TODO(sns.park) : remove dependency to chromium internals
25   if(autoSelectWord){
26 #if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
27     ui::GestureConfiguration::set_double_tap_to_zoom_enabled(false);
28 #endif
29   }
30   else{
31 #if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
32     ui::GestureConfiguration::set_double_tap_to_zoom_enabled(true);
33 #endif
34   }
35   impl->UpdateWebKitPreferences();
36 }
37
38 }
39
40 Eina_Bool ewk_settings_fullscreen_enabled_set(Ewk_Settings* settings, Eina_Bool enable)
41 {
42 #if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
43 #pragma message "[M38] fullscreen_enabled flag has been deleted from webpreference.h"
44   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
45   settings->getPreferences().fullscreen_enabled = enable;
46   ewkUpdateWebkitPreferences(settings->getEvasObject());
47   return true;
48 #else
49   return false;
50 #endif
51 }
52
53 Eina_Bool ewk_settings_fullscreen_enabled_get(const Ewk_Settings* settings)
54 {
55 #if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
56 #pragma message "[M38] fullscreen_enabled flag has been deleted from webpreference.h"
57   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
58   return settings->getPreferences().fullscreen_enabled;
59 #else
60   return false;
61 #endif
62 }
63
64 Eina_Bool ewk_settings_javascript_enabled_set(Ewk_Settings* settings, Eina_Bool enable)
65 {
66   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
67   settings->getPreferences().javascript_enabled = enable;
68   ewkUpdateWebkitPreferences(settings->getEvasObject());
69   return true;
70 }
71
72 Eina_Bool ewk_settings_javascript_enabled_get(const Ewk_Settings* settings)
73 {
74   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
75   return settings->getPreferences().javascript_enabled;
76 }
77
78 Eina_Bool ewk_settings_loads_images_automatically_set(Ewk_Settings* settings, Eina_Bool automatic)
79 {
80   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
81   settings->getPreferences().loads_images_automatically = automatic;
82   settings->getPreferences().images_enabled = automatic;
83   ewkUpdateWebkitPreferences(settings->getEvasObject());
84   return true;
85 }
86
87 Eina_Bool ewk_settings_loads_images_automatically_get(const Ewk_Settings* settings)
88 {
89   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
90   return settings->getPreferences().loads_images_automatically;
91 }
92
93 Eina_Bool ewk_settings_plugins_enabled_set(Ewk_Settings* settings, Eina_Bool enable)
94 {
95   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
96   settings->getPreferences().plugins_enabled = enable;
97   ewkUpdateWebkitPreferences(settings->getEvasObject());
98   return true;
99 }
100
101 Eina_Bool ewk_settings_plugins_enabled_get(const Ewk_Settings* settings)
102 {
103   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
104   return settings->getPreferences().plugins_enabled;
105 }
106
107 Eina_Bool ewk_settings_auto_fitting_set(Ewk_Settings* settings, Eina_Bool enable)
108 {
109   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
110   settings->getPreferencesEfl().shrinks_viewport_content_to_fit = enable;
111   ewkUpdateWebkitPreferences(settings->getEvasObject());
112   return true;
113 }
114
115 Eina_Bool ewk_settings_auto_fitting_get(const Ewk_Settings* settings)
116 {
117   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
118   return settings->getPreferencesEfl().shrinks_viewport_content_to_fit;
119 }
120
121 Eina_Bool ewk_settings_force_zoom_set(Ewk_Settings* settings, Eina_Bool enable)
122 {
123   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
124 #if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
125   settings->getPreferences().force_enable_zoom = enable;
126 #endif
127   ewkUpdateWebkitPreferences(settings->getEvasObject());
128   return true;
129 }
130
131 Eina_Bool ewk_settings_force_zoom_get(const Ewk_Settings* settings)
132 {
133   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
134 #if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
135   return settings->getPreferences().force_enable_zoom;
136 #else
137   return false;
138 #endif
139 }
140
141 Eina_Bool ewk_settings_font_default_size_set(Ewk_Settings* settings, int size)
142 {
143   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
144   settings->getPreferences().default_font_size = size;
145   ewkUpdateWebkitPreferences(settings->getEvasObject());
146   return true;
147 }
148
149 int ewk_settings_font_default_size_get(const Ewk_Settings* settings)
150 {
151   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
152   return settings->getPreferences().default_font_size;
153 }
154
155 Eina_Bool ewk_settings_scripts_window_open_set(Ewk_Settings* settings, Eina_Bool allow)
156 {
157   return ewk_settings_scripts_can_open_windows_set(settings, allow);
158 }
159
160 Eina_Bool ewk_settings_scripts_window_open_get(const Ewk_Settings* settings)
161 {
162   return ewk_settings_scripts_can_open_windows_get(settings);
163 }
164
165 Eina_Bool ewk_settings_compositing_borders_visible_set(Ewk_Settings* settings, Eina_Bool enable)
166 {
167   /*
168   This API is impossible to implement in same manner as it was in webkit-efl
169   for few reasons: chromium made compositing-borders-visible setting global - it
170   is either enabled or disabled for whole process, it requires application restart
171   because it is controled by command line switch. It must be provided before
172   spawning any renderer/zygote processes
173   */
174
175   LOG_EWK_API_MOCKUP("Not implement by difference of webkit2 and chromium's behavior");
176   return false;
177 }
178
179 Eina_Bool ewk_settings_default_encoding_set(Ewk_Settings* settings, const char* encoding)
180 {
181   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
182   EINA_SAFETY_ON_NULL_RETURN_VAL(encoding, false);
183   settings->getPreferences().default_encoding = std::string(encoding);
184   ewkUpdateWebkitPreferences(settings->getEvasObject());
185   return true;
186 }
187
188 Eina_Bool ewk_settings_is_encoding_valid(const char* encoding)
189 {
190   return TextEncodingMapEfl::GetInstance()->isTextEncodingValid(encoding);
191 }
192
193 const char* ewk_settings_default_encoding_get(const Ewk_Settings* settings)
194 {
195   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, 0);
196   return settings->getPreferences().default_encoding.c_str();
197 }
198
199 Eina_Bool ewk_settings_private_browsing_enabled_set(Ewk_Settings* settings, Eina_Bool enable)
200 {
201   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
202   EWebView* impl = EWebView::FromEvasObject(settings->getEvasObject());
203   return impl->SetPrivateBrowsing(enable);
204 }
205
206 Eina_Bool ewk_settings_private_browsing_enabled_get(const Ewk_Settings* settings)
207 {
208   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
209   EWK_VIEW_IMPL_GET_OR_RETURN(const_cast<Ewk_Settings *>(settings)->getEvasObject(), webview, EINA_FALSE);
210   return webview->GetPrivateBrowsing();
211 }
212
213 Eina_Bool ewk_settings_editable_link_behavior_set(Ewk_Settings* settings, Ewk_Editable_Link_Behavior behavior)
214 {
215   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
216 #if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
217   settings->getPreferences().editable_link_behavior = static_cast<webkit_glue::EditableLinkBehavior>(behavior);
218 #endif
219   ewkUpdateWebkitPreferences(settings->getEvasObject());
220   return true;
221 }
222
223 Eina_Bool ewk_settings_load_remote_images_set(Ewk_Settings* settings, Eina_Bool loadRemoteImages)
224 {
225   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
226   // FIXME: To be implemented when the functionality is required.
227   // To be added in WebkitPreferences -> WebSettings -> Settings
228   settings->setLoadRemoteImages(loadRemoteImages);
229   return true;
230 }
231
232 Eina_Bool ewk_settings_load_remote_images_get(const Ewk_Settings* settings)
233 {
234   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
235   // FIXME: To be implemented when the functionality is required.
236   // To be added in WebkitPreferences -> WebSettings -> Settings
237   return settings->loadRemoteImages();
238 }
239
240 Eina_Bool ewk_settings_scan_malware_enabled_set(Ewk_Settings* settings, Eina_Bool scanMalwareEnabled)
241 {
242   // API is postponed. Possibly chromium's mechanism may be reused.
243   LOG_EWK_API_MOCKUP("Not Supported yet");
244   return false;
245 }
246
247 Eina_Bool ewk_settings_spdy_enabled_set(Ewk_Settings* settings, Eina_Bool spdyEnabled)
248 {
249   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, EINA_FALSE);
250   settings->setSpdyEnabled(spdyEnabled);
251
252   return EINA_TRUE;
253 }
254
255 Eina_Bool ewk_settings_performance_features_enabled_set(Ewk_Settings* settings, Eina_Bool spdyEnabled)
256 {
257   (void) settings;
258   (void) spdyEnabled;
259   // This function was used to set some libsoup settings.
260   // Chromium doesn't use libsoup.
261   LOG_EWK_API_MOCKUP("Not Supported by chromium");
262   return EINA_FALSE;
263 }
264
265 void ewk_settings_link_magnifier_enabled_set(Ewk_Settings* settings, Eina_Bool enabled)
266 {
267   EINA_SAFETY_ON_NULL_RETURN(settings);
268   EWK_VIEW_IMPL_GET_OR_RETURN(settings->getEvasObject(), webview);
269
270   webview->SetLinkMagnifierEnabled(enabled);
271 }
272
273 Eina_Bool ewk_settings_link_magnifier_enabled_get(const Ewk_Settings *settings)
274 {
275   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, EINA_FALSE);
276   EWK_VIEW_IMPL_GET_OR_RETURN(const_cast<Ewk_Settings *>(settings)->getEvasObject(), webview, EINA_FALSE);
277
278   return webview->GetLinkMagnifierEnabled();
279 }
280
281 Eina_Bool ewk_settings_link_effect_enabled_set(Ewk_Settings* settings, Eina_Bool linkEffectEnabled)
282 {
283   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
284   settings->setLinkEffectEnabled(linkEffectEnabled);
285   return true;
286 }
287
288 Eina_Bool ewk_settings_link_effect_enabled_get(const Ewk_Settings* settings)
289 {
290   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
291   return settings->getLinkEffectEnabled();
292 }
293
294 Eina_Bool ewk_settings_uses_encoding_detector_set(Ewk_Settings* settings, Eina_Bool use)
295 {
296   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
297 #if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
298   settings->getPreferences().uses_encoding_detector = use;
299 #endif
300   ewkUpdateWebkitPreferences(settings->getEvasObject());
301   return true;
302 }
303
304 Eina_Bool ewk_settings_uses_encoding_detector_get(const Ewk_Settings* settings)
305 {
306   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
307 #if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
308   return settings->getPreferences().uses_encoding_detector;
309 #else
310   return false;
311 #endif
312 }
313
314 Eina_Bool ewk_settings_default_keypad_enabled_set(Ewk_Settings* settings, Eina_Bool enable)
315 {
316     EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
317
318     settings->setEnableDefaultKeypad(enable);
319
320     return true;
321 }
322
323 Eina_Bool ewk_settings_default_keypad_enabled_get(const Ewk_Settings* settings)
324 {
325     EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
326
327     return settings->defaultKeypadEnabled();
328 }
329
330 Eina_Bool ewk_settings_uses_keypad_without_user_action_set(Ewk_Settings* settings, Eina_Bool use)
331 {
332   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
333   settings->setUseKeyPadWithoutUserAction(use);
334   return true;
335 }
336
337 Eina_Bool ewk_settings_uses_keypad_without_user_action_get(const Ewk_Settings* settings)
338 {
339   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
340   return settings->useKeyPadWithoutUserAction();
341 }
342
343 Eina_Bool ewk_settings_text_zoom_enabled_set(Ewk_Settings* settings, Eina_Bool enable)
344 {
345   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
346   settings->setTextZoomEnabled(enable);
347   return true;
348 }
349
350 Eina_Bool ewk_settings_text_zoom_enabled_get(const Ewk_Settings* settings)
351 {
352   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
353   return settings->textZoomEnabled();
354 }
355
356 Eina_Bool ewk_settings_autofill_password_form_enabled_set(Ewk_Settings* settings, Eina_Bool enable)
357 {
358   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
359   settings->setAutofillPasswordForm(enable);
360   ewkUpdateWebkitPreferences(settings->getEvasObject());
361   return true;
362 }
363
364 Eina_Bool ewk_settings_autofill_password_form_enabled_get(Ewk_Settings* settings)
365 {
366   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
367   return settings->autofillPasswordForm();
368 }
369
370 Eina_Bool ewk_settings_form_candidate_data_enabled_set(Ewk_Settings* settings, Eina_Bool enable)
371 {
372   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
373   settings->setFormCandidateData(enable);
374   return true;
375 }
376
377 Eina_Bool ewk_settings_form_candidate_data_enabled_get(Ewk_Settings* settings)
378 {
379   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
380   return settings->formCandidateData();
381 }
382
383 Eina_Bool ewk_settings_form_profile_data_enabled_set(Ewk_Settings *settings, Eina_Bool enable)
384 {
385   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
386   settings->setAutofillProfileForm(enable);
387   ewkUpdateWebkitPreferences(settings->getEvasObject());
388   return true;
389 }
390
391 Eina_Bool ewk_settings_form_profile_data_enabled_get(const Ewk_Settings *settings)
392 {
393   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
394   return settings->autofillProfileForm();
395 }
396
397 Eina_Bool ewk_settings_current_legacy_font_size_mode_set(Ewk_Settings *settings, Ewk_Legacy_Font_Size_Mode mode)
398 {
399   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
400
401   settings->setCurrentLegacyFontSizeMode(mode);
402   ewkUpdateWebkitPreferences(settings->getEvasObject());
403   return true;
404 }
405
406 Ewk_Legacy_Font_Size_Mode ewk_settings_current_legacy_font_size_mode_get(const Ewk_Settings *settings)
407 {
408   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, EWK_LEGACY_FONT_SIZE_MODE_ONLY_IF_PIXEL_VALUES_MATCH);
409   return settings->currentLegacyFontSizeMode();
410 }
411
412 Eina_Bool ewk_settings_paste_image_uri_mode_set(Ewk_Settings *settings, Eina_Bool enable)
413 {
414   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
415   // FIXME: To be implemented when the functionality is required.
416   // To be added in WebkitPreferences -> WebSettings -> Settings
417   settings->setPasteImageUriEnabled(enable);
418   return true;
419 }
420
421 Eina_Bool ewk_settings_paste_image_uri_mode_get(const Ewk_Settings *settings)
422 {
423   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
424   // FIXME: To be implemented when the functionality is required.
425   // To be added in WebkitPreferences -> WebSettings -> Settings
426   return settings->pasteImageUriEnabled();
427 }
428
429
430 Eina_Bool ewk_settings_text_selection_enabled_set(Ewk_Settings* settings, Eina_Bool enable)
431 {
432   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
433   settings->setTextSelectionEnabled(enable);
434   return true;
435 }
436
437 Eina_Bool ewk_settings_text_selection_enabled_get(const Ewk_Settings* settings)
438 {
439   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
440   return settings->textSelectionEnabled();
441 }
442
443 Eina_Bool ewk_settings_clear_text_selection_automatically_set(Ewk_Settings* settings, Eina_Bool enable)
444 {
445   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
446   settings->setAutoClearTextSelection(enable);
447   return true;
448 }
449
450 Eina_Bool ewk_settings_clear_text_selection_automatically_get(const Ewk_Settings* settings)
451 {
452   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
453   return settings->autoClearTextSelection();
454 }
455
456 Eina_Bool ewk_settings_text_autosizing_enabled_set(Ewk_Settings* settings, Eina_Bool enable)
457 {
458   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
459   if (IsMobileProfile() || IsWearableProfile()) {
460 #if !defined(EWK_BRINGUP)
461     settings->getPreferences().text_autosizing_enabled = enable;
462     ewkUpdateWebkitPreferences(settings->getEvasObject());
463     return true;
464 #else
465     return false;
466 #endif
467   } else {
468     LOG_EWK_API_MOCKUP("Only for Tizen Mobile Browser");
469     return false;
470   }
471 }
472
473 Eina_Bool ewk_settings_text_autosizing_enabled_get(const Ewk_Settings* settings)
474 {
475   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
476   if (IsMobileProfile() || IsWearableProfile()) {
477 #if !defined(EWK_BRINGUP)
478     return settings->getPreferences().text_autosizing_enabled;
479 #else
480     return false;
481 #endif
482   } else {
483     LOG_EWK_API_MOCKUP("Only for Tizen Mobile Browser");
484     return false;
485   }
486 }
487
488 Eina_Bool ewk_settings_text_autosizing_font_scale_factor_set(Ewk_Settings* settings, double factor)
489 {
490   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
491   if (factor <= 0.0) {
492     return false;
493   }
494   settings->getPreferences().font_scale_factor = factor;
495   ewkUpdateWebkitPreferences(settings->getEvasObject());
496   return true;
497 }
498
499 double ewk_settings_text_autosizing_font_scale_factor_get(const Ewk_Settings* settings)
500 {
501   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, -1.0);
502   return settings->getPreferences().font_scale_factor;
503 }
504
505 Eina_Bool ewk_settings_edge_effect_enabled_set(Ewk_Settings* settings, Eina_Bool enable)
506 {
507   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
508   settings->setEdgeEffectEnabled(enable);
509   return true;
510 }
511
512 Eina_Bool ewk_settings_edge_effect_enabled_get(const Ewk_Settings* settings)
513 {
514   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
515   return settings->edgeEffectEnabled();
516 }
517
518 void ewk_settings_text_style_state_enabled_set(Ewk_Settings* settings, Eina_Bool enabled)
519 {
520   EINA_SAFETY_ON_NULL_RETURN(settings);
521   settings->setTextStyleStateState(enabled);
522 }
523
524 Eina_Bool ewk_settings_text_style_state_enabled_get(const Ewk_Settings* settings)
525 {
526   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
527   return settings->textStyleStateState();
528 }
529
530 Eina_Bool ewk_settings_select_word_automatically_set(Ewk_Settings* settings, Eina_Bool enable)
531 {
532   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
533   settings->setAutoSelectWord(enable);
534   ewkUpdateWebkitPreferences(settings->getEvasObject());
535   return true;
536 }
537
538 Eina_Bool ewk_settings_select_word_automatically_get(const Ewk_Settings* settings)
539 {
540   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
541   return settings->autoSelectWord();
542 }
543
544 Ewk_List_Style_Position ewk_settings_initial_list_style_position_get(const Ewk_Settings* settings)
545 {
546 #if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
547   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, EWK_LIST_STYLE_POSITION_OUTSIDE);
548   return static_cast<Ewk_List_Style_Position>(settings->getPreferences().initial_list_style_position);
549 #else
550   return EWK_LIST_STYLE_POSITION_OUTSIDE;
551 #endif
552 }
553
554 Eina_Bool ewk_settings_initial_list_style_position_set(Ewk_Settings* settings, Ewk_List_Style_Position style)
555 {
556   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, EINA_FALSE);
557 #if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
558   settings->getPreferences().initial_list_style_position = static_cast<content::ListStylePosition>(style);
559 #endif
560   ewkUpdateWebkitPreferences(settings->getEvasObject());
561   return EINA_TRUE;
562 }
563
564 Eina_Bool ewk_settings_webkit_text_size_adjust_enabled_set(Ewk_Settings* settings, Eina_Bool enabled)
565 {
566   // Chromium does not support CSS property "-webkit-text-size-adjust"
567   // and this API was created to disable this property.
568   // There is no need to implement this API.
569   LOG_EWK_API_MOCKUP("Not Supported by chromium");
570   return false;
571 }
572
573 // TODO: this API is gone in newer versions of webkit-efl
574 void ewk_settings_detect_contents_automatically_set(Ewk_Settings* settings, Eina_Bool enable)
575 {
576   EINA_SAFETY_ON_NULL_RETURN(settings);
577 #if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
578   settings->setDetectContentsEnabled(enable);
579 #endif
580 }
581
582 Eina_Bool ewk_settings_detect_contents_automatically_get(const Ewk_Settings* settings)
583 {
584   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
585 #if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
586   return settings->getDetectContentsEnabled();
587 #else
588   return EINA_FALSE;
589 #endif
590 }
591
592 void ewk_settings_cache_builder_enabled_set(Ewk_Settings *settings, Eina_Bool enabled)
593 {
594   if (IsTvProfile()) {
595     EINA_SAFETY_ON_NULL_RETURN(settings);
596     settings->setCacheBuilderEnabled(enabled);
597   } else {
598     LOG_EWK_API_MOCKUP("Only for Tizen TV Browser");
599   }
600 }
601
602 int ewk_settings_default_font_size_get(const Ewk_Settings* settings)
603 {
604   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, 0);
605   return settings->getPreferences().default_font_size;
606 }
607
608 Eina_Bool ewk_settings_default_font_size_set(Ewk_Settings* settings, int size)
609 {
610   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
611   settings->getPreferences().default_font_size = size;
612   return true;
613 }
614
615 const char* ewk_settings_default_text_encoding_name_get(Ewk_Settings* settings)
616 {
617   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, NULL);
618   return settings->defaultTextEncoding();
619 }
620
621 Eina_Bool ewk_settings_default_text_encoding_name_set(Ewk_Settings* settings, const char* encoding)
622 {
623   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
624   EINA_SAFETY_ON_NULL_RETURN_VAL(encoding, false);
625   settings->setDefaultTextEncoding(encoding);
626   ewkUpdateWebkitPreferences(settings->getEvasObject());
627   return true;
628 }
629
630 Eina_Bool ewk_settings_scripts_can_open_windows_set(Ewk_Settings* settings, Eina_Bool enable)
631 {
632   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
633   settings->getPreferencesEfl().javascript_can_open_windows_automatically_ewk = enable;
634   ewkUpdateWebkitPreferences(settings->getEvasObject());
635   return true;
636 }
637
638 Eina_Bool ewk_settings_scripts_can_open_windows_get(const Ewk_Settings* settings)
639 {
640   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
641   return settings->getPreferencesEfl().javascript_can_open_windows_automatically_ewk;
642 }
643
644 Eina_Bool ewk_settings_encoding_detector_enabled_set(Ewk_Settings* settings, Eina_Bool enable)
645 {
646   LOG_EWK_API_MOCKUP("for Tizen TV Browser");
647   return false;
648 }
649
650 namespace {
651 #define EXTRA_FEATURE_FUNCTIONS(VALNAME) \
652   void Ewk_Extra_Feature_Set_ ## VALNAME(Ewk_Settings* settings, Eina_Bool value) \
653   { \
654     EINA_SAFETY_ON_NULL_RETURN(settings); \
655     settings->set ## VALNAME ## Enabled(value == EINA_TRUE); \
656   } \
657   Eina_Bool Ewk_Extra_Feature_Get_ ## VALNAME(const Ewk_Settings* settings) \
658   { \
659     EINA_SAFETY_ON_NULL_RETURN_VAL(settings, EINA_FALSE); \
660     return settings->get ## VALNAME ## Enabled() ? EINA_TRUE : EINA_FALSE; \
661   }
662
663 #define EWK_EXTRA_FEATURE(NAME, VALNAME) {NAME, Ewk_Extra_Feature_Set_## VALNAME, Ewk_Extra_Feature_Get_ ## VALNAME}
664
665   EXTRA_FEATURE_FUNCTIONS(LongPress)
666   EXTRA_FEATURE_FUNCTIONS(LinkMagnifier)
667   EXTRA_FEATURE_FUNCTIONS(DetectContents)
668   EXTRA_FEATURE_FUNCTIONS(WebLogin)
669   EXTRA_FEATURE_FUNCTIONS(DoubleTap)
670   EXTRA_FEATURE_FUNCTIONS(Zoom)
671   EXTRA_FEATURE_FUNCTIONS(OpenPanel)
672   EXTRA_FEATURE_FUNCTIONS(AllowRestrictedURL)
673   EXTRA_FEATURE_FUNCTIONS(URLBarHide)
674
675   void Ewk_Extra_Feature_Set_ViewportQuirk(Ewk_Settings* settings, Eina_Bool value)
676   {
677     EINA_SAFETY_ON_NULL_RETURN(settings);
678 #if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
679     settings->getPreferences().viewport_meta_non_user_scalable_quirk = value;
680 #endif
681     ewkUpdateWebkitPreferences(settings->getEvasObject());
682   }
683
684   Eina_Bool Ewk_Extra_Feature_Get_ViewportQuirk(const Ewk_Settings* settings)
685   {
686 #if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
687     EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false);
688     return settings->getPreferences().viewport_meta_non_user_scalable_quirk;
689 #else
690     return EINA_FALSE;
691 #endif
692   }
693
694   typedef struct {
695     const char* name;
696     void (*set)(Ewk_Settings*, Eina_Bool enable);
697     Eina_Bool (*get)(const Ewk_Settings*);
698   } Ewk_Extra_Feature;
699
700   static Ewk_Extra_Feature extra_features[] = {
701     EWK_EXTRA_FEATURE("longpress,enable", LongPress),
702     EWK_EXTRA_FEATURE("link,magnifier", LinkMagnifier),
703     EWK_EXTRA_FEATURE("detect,contents", DetectContents),
704     EWK_EXTRA_FEATURE("web,login", WebLogin),
705     EWK_EXTRA_FEATURE("doubletap,enable", DoubleTap),
706     EWK_EXTRA_FEATURE("zoom,enable", Zoom),
707     EWK_EXTRA_FEATURE("openpanel,enable", OpenPanel),
708     EWK_EXTRA_FEATURE("allow,restrictedurl", AllowRestrictedURL),
709     EWK_EXTRA_FEATURE("urlbar,hide", URLBarHide),
710     EWK_EXTRA_FEATURE("wrt,viewport,quirk", ViewportQuirk),
711     {NULL, NULL, NULL}
712   };
713
714   Ewk_Extra_Feature* find_extra_feature(const char*feature)
715   {
716     for(Ewk_Extra_Feature *feat = extra_features; feat->name != NULL; feat++) {
717       if (strcasecmp(feat->name, feature) == 0) {
718         return feat;
719       }
720     }
721
722     return NULL;
723   }
724 }
725
726 Eina_Bool ewk_settings_extra_feature_get(const Ewk_Settings* settings, const char* feature)
727 {
728   EINA_SAFETY_ON_NULL_RETURN_VAL(settings, EINA_FALSE);
729   EINA_SAFETY_ON_NULL_RETURN_VAL(feature, EINA_FALSE);
730   Ewk_Extra_Feature *feat = find_extra_feature(feature);
731   EINA_SAFETY_ON_NULL_RETURN_VAL(feat, EINA_FALSE);
732   return feat->get(settings);
733 }
734
735 void ewk_settings_extra_feature_set(Ewk_Settings* settings, const char* feature, Eina_Bool enable)
736 {
737   EINA_SAFETY_ON_NULL_RETURN(settings);
738   EINA_SAFETY_ON_NULL_RETURN(feature);
739   Ewk_Extra_Feature *feat = find_extra_feature(feature);
740   EINA_SAFETY_ON_NULL_RETURN(feat);
741   feat->set(settings, enable);
742 }