[Title] hiding zoom button when the zoom is not available.
[profile/ivi/org.tizen.browser.git] / src / browser-view / browser-view.cpp
1 /*
2  * Copyright 2012  Samsung Electronics Co., Ltd
3  *
4  * Licensed under the Flora License, Version 1.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *    http://www.tizenopensource.org/license
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 #include "browser-add-to-bookmark-view.h"
19 #include "browser-bookmark-view.h"
20 #include "browser-class.h"
21 #include "browser-config.h"
22 #include "browser-context-menu.h"
23 #include "browser-history-db.h"
24 #include "browser-find-word.h"
25 #include "browser-multi-window-view.h"
26 #include "browser-scissorbox-view.h"
27 #include "browser-settings-class.h"
28 #if defined(FEATURE_MOST_VISITED_SITES)
29 #include "most-visited-sites.h"
30 #include "most-visited-sites-db.h"
31 #endif
32 #include "browser-string.h"
33 #include "browser-view.h"
34 #include "browser-window.h"
35 #include <devman.h>
36
37 extern "C" {
38 #include <shortcut.h>
39 }
40
41 Browser_View::Browser_View(Evas_Object *win, Evas_Object *navi_bar, Evas_Object *bg, Browser_Class *browser)
42 :
43         m_main_layout(NULL)
44         ,m_scroller(NULL)
45         ,m_content_box(NULL)
46         ,m_dummy_loading_progressbar(NULL)
47         ,m_conformant(NULL)
48         ,m_url_layout(NULL)
49         ,m_url_entry_layout(NULL)
50         ,m_url_edit_field(NULL)
51         ,m_url_progressbar(NULL)
52         ,m_url_progresswheel(NULL)
53         ,m_cancel_button(NULL)
54         ,m_control_bar(NULL)
55         ,m_back_button(NULL)
56         ,m_forward_button(NULL)
57         ,m_add_bookmark_button(NULL)
58         ,m_more_button(NULL)
59         ,m_option_header_url_layout(NULL)
60         ,m_find_word_entry_layout(NULL)
61         ,m_find_word_edit_field(NULL)
62         ,m_option_header_layout(NULL)
63         ,m_find_word_cancel_button(NULL)
64         ,m_option_header_find_word_layout(NULL)
65         ,m_option_header_url_entry_layout(NULL)
66         ,m_option_header_cancel_button(NULL)
67         ,m_find_word_prev_button(NULL)
68         ,m_find_word_next_button(NULL)
69         ,m_option_header_url_progressbar(NULL)
70         ,m_option_header_url_progresswheel(NULL)
71         ,m_edit_mode(BR_NO_EDIT_MODE)
72         ,m_homepage_mode(BR_START_MODE_UNKOWN)
73 #if defined(HORIZONTAL_UI)
74         ,m_rotate_degree(0)
75         ,m_multi_window_rotate_timer(NULL)
76         ,m_is_rotated(EINA_FALSE)
77 #endif
78         ,m_scroller_region_y(0)
79         ,m_is_scrolling(EINA_FALSE)
80         ,m_focused_window(NULL)
81         ,m_more_context_popup(NULL)
82 #if defined(FEATURE_MOST_VISITED_SITES)
83         ,m_most_visited_sites(NULL)
84         ,m_most_visited_sites_db(NULL)
85 #endif
86         ,m_new_window_transit(NULL)
87         ,m_created_new_window(NULL)
88         ,m_browser_settings(NULL)
89         ,m_navi_it(NULL)
90         ,m_find_word(NULL)
91         ,m_scissorbox_view(NULL)
92         ,m_share_controlbar_button(NULL)
93 #ifdef USE_META_TAG
94         ,m_meta_tag(NULL)
95 #endif
96         ,m_context_menu(NULL)
97         ,m_multi_window_button(NULL)
98         ,m_new_window_button(NULL)
99         ,m_is_full_screen(EINA_FALSE)
100 #ifdef ZOOM_BUTTON
101         ,m_zoom_in_button(NULL)
102         ,m_zoom_out_button(NULL)
103         ,m_zoom_button_timer(NULL)
104 #endif
105         ,m_title_backward_button(NULL)
106         ,m_title_forward_button(NULL)
107         ,m_option_header_title_backward_button(NULL)
108         ,m_option_header_title_forward_button(NULL)
109         ,m_resize_idler(NULL)
110         ,m_is_private(EINA_FALSE)
111         ,m_private_check(NULL)
112         ,m_is_private_item_pressed(EINA_FALSE)
113         ,m_bookmark_on_off_icon(NULL)
114         ,m_brightness_control_bar(NULL)
115         ,m_brightness_auto_it(NULL)
116         ,m_brightness_manual_it(NULL)
117         ,m_default_seg_it(NULL)
118         ,m_low_seg_it(NULL)
119         ,m_medium_seg_it(NULL)
120         ,m_high_seg_it(NULL)
121         ,m_vibration_device_handle_id(-1)
122         ,m_is_multi_window_grid_mode(EINA_FALSE)
123 {
124         BROWSER_LOGD("[%s]", __func__);
125         m_win = win;
126         m_navi_bar = navi_bar;
127         m_bg = bg;
128         m_browser = browser;
129 }
130
131 Browser_View::~Browser_View()
132 {
133         BROWSER_LOGD("[%s]", __func__);
134         if (m_title_back_button)
135                 evas_object_del(m_title_back_button);
136
137         ug_destroy_all();
138
139         br_preference_set_str(LAST_VISITED_URL_KEY, m_last_visited_url.c_str());
140
141         m_data_manager->destroy_history_db();
142         m_data_manager->destroy_geolocation_db();
143
144         if (m_data_manager) {
145                 delete m_data_manager;
146                 m_data_manager = NULL;
147         }
148 #if defined(FEATURE_MOST_VISITED_SITES)
149         if (m_most_visited_sites) {
150                 delete m_most_visited_sites;
151                 m_most_visited_sites = NULL;
152         }
153         if (m_most_visited_sites_db) {
154                 delete m_most_visited_sites_db;
155                 m_most_visited_sites_db = NULL;
156         }
157 #endif
158         if (m_new_window_transit) {
159                 elm_transit_del(m_new_window_transit);
160                 m_new_window_transit = NULL;
161         }
162         if (m_browser_settings) {
163                 delete m_browser_settings;
164                 m_browser_settings = NULL;
165         }
166         if (m_find_word) {
167                 delete m_find_word;
168                 m_find_word = NULL;
169         }
170         if (m_context_menu) {
171                 delete m_context_menu;
172                 m_context_menu = NULL;
173         }
174         if (m_scissorbox_view) {
175                 delete m_scissorbox_view;
176                 m_scissorbox_view = NULL;
177         }
178 #if defined(HORIZONTAL_UI)
179         if (m_multi_window_rotate_timer) {
180                 ecore_timer_del(m_multi_window_rotate_timer);
181                 m_multi_window_rotate_timer = NULL;
182         }
183 #endif
184 #ifdef USE_META_TAG
185         if (m_meta_tag) {
186                 delete m_meta_tag;
187                 m_meta_tag = NULL;
188         }
189 #endif
190 #ifdef ZOOM_BUTTON
191         if (m_zoom_in_button)
192                 evas_object_del(m_zoom_in_button);
193         if (m_zoom_out_button)
194                 evas_object_del(m_zoom_out_button);
195         if (m_zoom_button_timer) {
196                 ecore_timer_del(m_zoom_button_timer);
197                 m_zoom_button_timer = NULL;
198         }
199 #endif
200 }
201
202 Eina_Bool Browser_View::init(void)
203 {
204         BROWSER_LOGD("[%s]", __func__);
205         /* set homepage from homepage vconf */
206         _set_homepage_mode();
207
208         m_data_manager = new(nothrow) Browser_Data_Manager;
209         if (!m_data_manager) {
210                 BROWSER_LOGE("new Browser_Data_Manager failed");
211                 return EINA_FALSE;
212         }
213
214         m_data_manager->set_browser_view(this);
215
216         if (!m_data_manager->create_history_db()) {
217                 BROWSER_LOGE("m_data_manager->create_history_db failed");
218                 return EINA_FALSE;
219         }
220
221         if (!m_data_manager->create_geolocation_db()) {
222                 BROWSER_LOGE("m_data_manager->create_geolocation_db failed");
223                 return EINA_FALSE;
224         }
225
226 #if defined(FEATURE_MOST_VISITED_SITES)
227         m_most_visited_sites_db = new(nothrow) Most_Visited_Sites_DB;
228         if (!m_most_visited_sites_db) {
229                 BROWSER_LOGE("new Most_Visited_Sites_DB failed");
230                 return EINA_FALSE;
231         }
232 #endif
233
234         m_find_word = new(nothrow) Browser_Find_Word(this);
235         if (!m_find_word) {
236                 BROWSER_LOGE("new Browser_Find_Word failed");
237                 return EINA_FALSE;
238         }
239
240         m_context_menu = new(nothrow) Browser_Context_Menu(this);
241         if (!m_context_menu) {
242                 BROWSER_LOGE("new Browser_Context_Menu failed");
243                 return EINA_FALSE;
244         }
245 #ifdef USE_META_TAG
246         m_meta_tag = new(nothrow) Browser_Meta_Tag();
247         if (!m_meta_tag) {
248                 BROWSER_LOGE("new Browser_Meta_Tag failed");
249                 return EINA_FALSE;
250         }
251 #endif
252         UG_INIT_EFL(m_win, UG_OPT_INDICATOR_ENABLE);
253
254         char *last_url = NULL;
255         if (br_preference_get_str(LAST_VISITED_URL_KEY, &last_url) == false) {
256                 BROWSER_LOGE("failed to get %s preference", LAST_VISITED_URL_KEY);
257                 return EINA_FALSE;
258         }
259         if (last_url) {
260                 m_last_visited_url = std::string(last_url);
261                 free(last_url);
262         }
263         if (_haptic_device_init() == EINA_FALSE) {
264                 BROWSER_LOGE("Failed to init haptic device");
265                 return EINA_FALSE;
266         }
267
268         /* create brower view layout */
269         return _create_main_layout();
270 }
271
272 void Browser_View::launch(const char *url)
273 {
274         /* Destroy all other views except browser view. */
275         _pop_other_views();
276
277         /*Workaround.
278           * When keypad is running via url entry, if browser goes to background by home key.
279           * Then relaunch the browser by aul. The webpage is loading but the keypad is still running.
280           * So give focus to cancel button not to invoke the keypad. */
281         elm_object_focus_set(m_cancel_button, EINA_TRUE);
282
283         if (url && strlen(url))
284                 load_url(url);
285 #if defined(FEATURE_MOST_VISITED_SITES)
286         else if (m_homepage_mode == BR_START_MODE_MOST_VISITED_SITES)
287                 load_url(BROWSER_MOST_VISITED_SITES_URL);
288 #endif
289         else if (m_homepage_mode == BR_START_MODE_RECENTLY_VISITED_SITE) {
290                 char *homepage = NULL;
291                 if (br_preference_get_str(LAST_VISITED_URL_KEY, &homepage) == false) {
292                         BROWSER_LOGD("failed to get %s preference", LAST_VISITED_URL_KEY);
293                         return;
294                 }
295                 if (homepage) {
296                         load_url(homepage);
297                         free(homepage);
298                 } else
299 #if defined(FEATURE_MOST_VISITED_SITES)
300                         load_url(BROWSER_MOST_VISITED_SITES_URL);
301 #else
302                         load_url(BROWSER_BLANK_PAGE_URL);
303 #endif
304         } else if (m_homepage_mode == BR_START_MODE_CUSTOMIZED_URL) {
305                 char *user_homepage = NULL;
306                 if (br_preference_get_str(USER_HOMEPAGE_KEY, &user_homepage) ==false) {
307                         BROWSER_LOGE("failed to get %s preference\n", USER_HOMEPAGE_KEY);
308                         return;
309                 }
310                 if (user_homepage) {
311                         load_url(user_homepage);
312                         free(user_homepage);
313                 } else
314 #if defined(FEATURE_MOST_VISITED_SITES)
315                         load_url(BROWSER_MOST_VISITED_SITES_URL);
316 #else
317                         load_url(BROWSER_BLANK_PAGE_URL);
318 #endif
319         } else if (m_homepage_mode == BR_START_MODE_EMPTY_PAGE) {
320                 load_url(BROWSER_BLANK_PAGE_URL);
321         }
322
323 }
324
325 void Browser_View::set_full_sreen(Eina_Bool enable)
326 {
327         BROWSER_LOGD("[%s]", __func__);
328
329         if (m_is_full_screen == enable)
330                 return;
331
332         m_is_full_screen = enable;
333
334         if (m_is_full_screen) {
335                 elm_win_indicator_mode_set(m_win, ELM_WIN_INDICATOR_HIDE);
336                 _hide_scroller_url_layout();
337                 edje_object_signal_emit(elm_layout_edje_get(m_main_layout), "enter,full_screen,signal", "");
338                 _enable_webview_scroll();
339
340                 elm_object_part_content_unset(m_focused_window->m_ewk_view_layout, "elm.swallow.webview");
341
342                 evas_object_move(m_focused_window->m_ewk_view, 0, 0);
343         } else {
344                 elm_win_indicator_mode_set(m_win, ELM_WIN_INDICATOR_SHOW);
345
346                 edje_object_signal_emit(elm_layout_edje_get(m_main_layout), "exit,full_screen,signal", "");
347
348                 elm_object_part_content_set(m_focused_window->m_ewk_view_layout, "elm.swallow.webview", m_focused_window->m_ewk_view);
349
350                 _navigationbar_visible_set_signal(EINA_TRUE);
351         }
352
353         ecore_idler_add(__webview_layout_resize_idler_cb, this);
354 }
355
356 #if defined(FEATURE_MOST_VISITED_SITES)
357 Eina_Bool Browser_View::is_most_visited_sites_running(void)
358 {
359         if (m_most_visited_sites)
360                 return EINA_TRUE;
361         else
362                 return EINA_FALSE;
363 }
364 #endif
365
366 void Browser_View::return_to_browser_view(Eina_Bool saved_most_visited_sites_item)
367 {
368         BROWSER_LOGD("[%s]", __func__);
369
370         if (!_is_loading()) {
371                 if (get_title().empty())
372                         _set_navigationbar_title(get_url().c_str());
373                 else
374                         _set_navigationbar_title(get_title().c_str());
375         }
376 #if defined(FEATURE_MOST_VISITED_SITES)
377         if (is_most_visited_sites_running()) {
378                 edje_object_signal_emit(elm_layout_edje_get(m_main_layout),
379                                         "show,control_bar,no_animation,signal", "");
380                 _set_navigationbar_title(BR_STRING_MOST_VISITED_SITES);
381         }
382         if (saved_most_visited_sites_item && is_most_visited_sites_running())
383                 /* If longpress on speed dial item, then add to bookmark. */
384                 edje_object_signal_emit(elm_layout_edje_get(m_most_visited_sites->m_selected_item->layout),
385                                                                                 "bookmark_icon", "");
386 #endif
387         _set_secure_icon();
388
389 }
390
391 void Browser_View::_pop_other_views(void)
392 {
393         BROWSER_LOGD("[%s]", __func__);
394         _destroy_more_context_popup();
395
396         /* if browser is runing background behind ug which browser invoked,
397         destroy the previous ug and show the browser view. */
398         ug_destroy_all();
399
400         /* If multi-window is running, destroy it to show browser view. */
401         if (m_data_manager->is_in_view_stack(BR_MULTI_WINDOW_VIEW))
402                 m_data_manager->get_multi_window_view()->close_multi_window();
403
404         /* Pop all other views except browser view. */
405         elm_naviframe_item_pop_to(m_navi_it);
406
407         if (m_scissorbox_view)
408                 _destroy_scissorbox_view();
409 }
410
411 /* set homepage from homepage vconf */
412 void Browser_View::_set_homepage_mode(void)
413 {
414         char *homepage = NULL;
415         if (br_preference_get_str(HOMEPAGE_KEY, &homepage) == false) {
416                 BROWSER_LOGE("failed to get %s preference\n", HOMEPAGE_KEY);
417                 return;
418         }
419         BROWSER_LOGD("homepage=[%s]", homepage);
420
421         if (!homepage) {
422                 BROWSER_LOGE("homepage is null");
423 #if defined(FEATURE_MOST_VISITED_SITES)
424                 m_homepage_mode = BR_START_MODE_MOST_VISITED_SITES;
425 #else
426                 m_homepage_mode = BR_START_MODE_EMPTY_PAGE;
427 #endif
428                 return;
429         }
430
431 #if defined(FEATURE_MOST_VISITED_SITES)
432         if (!strncmp(homepage, MOST_VISITED_SITES,
433                                 strlen(MOST_VISITED_SITES)))
434                 m_homepage_mode = BR_START_MODE_MOST_VISITED_SITES;
435         else
436 #endif
437         if (!strncmp(homepage, RECENTLY_VISITED_SITE,
438                         strlen(RECENTLY_VISITED_SITE)))
439                 m_homepage_mode = BR_START_MODE_RECENTLY_VISITED_SITE;
440         else if (!strncmp(homepage, EMPTY_PAGE,
441                         strlen(EMPTY_PAGE)))
442                 m_homepage_mode = BR_START_MODE_EMPTY_PAGE;
443         else
444                 m_homepage_mode = BR_START_MODE_CUSTOMIZED_URL;
445
446         free(homepage);
447         BROWSER_LOGD("m_homepage_mode=%d", m_homepage_mode);
448 }
449
450 void Browser_View::__new_window_transit_finished_cb(void *data, Elm_Transit *transit)
451 {
452         BROWSER_LOGD("[%s]", __func__);
453         if (!data)
454                 return;
455
456         Browser_View *browser_view = (Browser_View *)data;
457         if (!browser_view->m_new_window_transit)
458                 return;
459
460         browser_view->m_new_window_transit = NULL;
461         browser_view->m_browser->set_focused_window(browser_view->m_created_new_window
462 #if defined(FEATURE_MOST_VISITED_SITES)
463                         , EINA_FALSE
464 #endif
465                         );
466         browser_view->m_created_new_window = NULL;
467 }
468
469 Eina_Bool Browser_View::_show_new_window_effect(Evas_Object *current_ewk_view,
470                                                                 Evas_Object *new_ewk_view)
471 {
472         int scroller_x = 0;
473         int scroller_y = 0;
474         int scroller_w = 0;
475         int scroller_h = 0;
476         elm_scroller_region_get(m_scroller, &scroller_x, &scroller_y, &scroller_w, &scroller_h);
477         elm_scroller_region_show(m_scroller ,scroller_x, 0, scroller_w, scroller_h);
478
479         m_browser->set_focused_window(m_created_new_window
480 #if defined(FEATURE_MOST_VISITED_SITES)
481                 , EINA_FALSE
482 #endif
483                 );
484
485         return EINA_TRUE;
486 }
487
488 Evas_Object *Browser_View::get_favicon(const char *url)
489 {
490         if (!url || !strlen(url))
491                 return NULL;
492
493         Ewk_Context* context = ewk_view_context_get(m_focused_window->m_ewk_view);
494         Evas_Object *favicon = ewk_context_icon_database_icon_object_add(context, url, evas_object_evas_get(m_focused_window->m_ewk_view));
495
496         return favicon;
497 }
498
499 Eina_Bool Browser_View::_set_favicon(void)
500 {
501         BROWSER_LOGD("[%s]", __func__);
502
503         if (m_edit_mode == BR_URL_ENTRY_EDIT_MODE
504             || m_edit_mode == BR_URL_ENTRY_EDIT_MODE_WITH_NO_IMF) {
505                 BROWSER_LOGD("Edit mode");
506                 return EINA_FALSE;
507         }
508
509 #if defined(FEATURE_MOST_VISITED_SITES)
510         if (is_most_visited_sites_running()) {
511                 BROWSER_LOGD("is_most_visited_sites_running");
512                 return EINA_FALSE;
513         }
514 #endif
515
516         double progress = ewk_view_load_progress_get(m_focused_window->m_ewk_view);
517         if (progress < 1.0f && progress > 0.05f) {
518                 BROWSER_LOGD("loadin status");
519                 return EINA_FALSE;
520         }
521
522         Evas_Object *favicon = get_favicon(get_url().c_str());
523         Evas_Object *option_header_favicon = get_favicon(get_url().c_str());
524
525         if (favicon) {
526                 if (m_focused_window->m_favicon)
527                         evas_object_del(m_focused_window->m_favicon);
528
529                 m_focused_window->m_favicon = favicon;
530         } else {
531                 Evas_Object *default_icon = elm_icon_add(m_focused_window->m_ewk_view);
532                 if (!default_icon) {
533                         BROWSER_LOGE("elm_icon_add is failed.");
534                         return EINA_FALSE;
535                 }
536                 if (!elm_icon_file_set(default_icon, BROWSER_IMAGE_DIR"/faviconDefault.png", NULL)) {
537                         BROWSER_LOGE("elm_icon_file_set is failed.");
538                         return EINA_FALSE;
539                 }
540                 evas_object_size_hint_aspect_set(default_icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
541                 if (m_focused_window->m_favicon)
542                         evas_object_del(m_focused_window->m_favicon);
543
544                 m_focused_window->m_favicon = default_icon;
545         }
546
547         if (option_header_favicon) {
548                 if (m_focused_window->m_option_header_favicon)
549                         evas_object_del(m_focused_window->m_option_header_favicon);
550
551                 m_focused_window->m_option_header_favicon = option_header_favicon;
552         } else {
553                 Evas_Object *default_icon = elm_icon_add(m_focused_window->m_ewk_view);
554                 if (!default_icon) {
555                         BROWSER_LOGE("elm_icon_add is failed.");
556                         return EINA_FALSE;
557                 }
558                 if (!elm_icon_file_set(default_icon, BROWSER_IMAGE_DIR"/faviconDefault.png", NULL)) {
559                         BROWSER_LOGE("elm_icon_file_set is failed.");
560                         return EINA_FALSE;
561                 }
562                 evas_object_size_hint_aspect_set(default_icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
563                 if (m_focused_window->m_option_header_favicon)
564                         evas_object_del(m_focused_window->m_option_header_favicon);
565
566                 m_focused_window->m_option_header_favicon = default_icon;
567         }
568
569         if (elm_object_part_content_get(m_url_entry_layout, "elm.swallow.favicon"))
570                 elm_object_part_content_unset(m_url_entry_layout, "elm.swallow.favicon");
571         if (elm_object_part_content_get(m_option_header_url_entry_layout,
572                                                 "elm.swallow.favicon"))
573                 elm_object_part_content_unset(m_option_header_url_entry_layout,
574                                                 "elm.swallow.favicon");
575
576         elm_object_part_content_set(m_url_entry_layout, "elm.swallow.favicon",
577                                                         m_focused_window->m_favicon);
578         elm_object_part_content_set(m_option_header_url_entry_layout, "elm.swallow.favicon",
579                                                         m_focused_window->m_option_header_favicon);
580
581         edje_object_signal_emit(elm_layout_edje_get(m_url_entry_layout),
582                                                                 "show,favicon,signal", "");
583         edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_entry_layout),
584                                                                 "show,favicon,signal", "");
585
586         _set_secure_icon();
587
588         return EINA_TRUE;
589 }
590
591 Eina_Bool Browser_View::__close_window_idler_cb(void *data)
592 {
593         BROWSER_LOGD("[%s]", __func__);
594         if (!data)
595                 return ECORE_CALLBACK_CANCEL;
596
597         Browser_View *browser_view = (Browser_View *)data;
598         Browser_Class *browser = browser_view->m_browser;
599
600         if (browser_view->m_focused_window->m_parent)
601                 browser->delete_window(browser_view->m_focused_window,
602                                 browser_view->m_focused_window->m_parent);
603         else
604                 browser->delete_window(browser_view->m_focused_window);
605
606         int scroller_x = 0;
607         int scroller_w = 0;
608         int scroller_h = 0;
609         elm_scroller_region_get(browser_view->m_scroller, &scroller_x, NULL, &scroller_w, &scroller_h);
610         elm_scroller_region_show(browser_view->m_scroller ,scroller_x, 0,
611                                                                 scroller_w, scroller_h);
612         return ECORE_CALLBACK_CANCEL;
613 }
614
615 void Browser_View::__close_window_cb(void *data, Evas_Object *obj, void *event_info)
616 {
617         BROWSER_LOGD("[%s]", __func__);
618         if (!data)
619                 return;
620
621         Browser_View *browser_view = (Browser_View *)data;
622         Browser_Class *browser = browser_view->m_browser;
623
624         /* The window should be deleted by idler. The webkit recommands to delete by idler. */
625         ecore_idler_add(__close_window_idler_cb, browser_view);
626 }
627
628 Eina_Bool Browser_View::_haptic_device_init(void)
629 {
630         BROWSER_LOGD("[%s]", __func__);
631
632         if (m_vibration_device_handle_id == BROWSER_HAPTIC_DEVICE_HANDLE) {
633                 BROWSER_LOGD("device handle for haptic is already set");
634                 return EINA_FALSE;
635         }
636
637         if (haptic_initialize() != HAPTIC_ERROR_NONE) {
638                 BROWSER_LOGD("failed to initiate haptic device");
639                 return EINA_FALSE;
640         }
641
642         m_vibration_device_handle_id = BROWSER_HAPTIC_DEVICE_HANDLE;
643
644         return EINA_TRUE;
645 }
646
647 Eina_Bool Browser_View::_haptic_device_play(long haptic_play_time)
648 {
649         BROWSER_LOGD("[%s], requested time is [%dms]", __func__, haptic_play_time);
650
651         if (m_vibration_device_handle_id != BROWSER_HAPTIC_DEVICE_HANDLE) {
652                 BROWSER_LOGD("device handle for haptic is not set. Unable to play haptic");
653                 return EINA_FALSE;
654         }
655
656         if (haptic_vibrate_monotone(BROWSER_HAPTIC_DEVICE_HANDLE, haptic_play_time, HAPTIC_LEVEL_AUTO) != HAPTIC_ERROR_NONE) {
657                 BROWSER_LOGD("haptic_vibrate_monotone failed.");
658                 return EINA_FALSE;
659         }
660
661         return EINA_TRUE;
662 }
663
664 Eina_Bool Browser_View::_haptic_device_stop(void)
665 {
666         BROWSER_LOGD("[%s]", __func__);
667
668         if (m_vibration_device_handle_id != BROWSER_HAPTIC_DEVICE_HANDLE) {
669                 BROWSER_LOGD("device handle for haptic is not set. Unable to play haptic");
670                 return EINA_FALSE;
671         }
672
673         if (haptic_stop_device(BROWSER_HAPTIC_DEVICE_HANDLE) != HAPTIC_ERROR_NONE) {
674                 BROWSER_LOGD("haptic_stop_device failed.");
675                 return EINA_FALSE;
676         }
677
678         return EINA_TRUE;
679 }
680
681 Eina_Bool Browser_View::_haptic_device_close(void)
682 {
683         BROWSER_LOGD("[%s]", __func__);
684
685         if (haptic_deinitialize() != HAPTIC_ERROR_NONE) {
686                 BROWSER_LOGD("haptic_deinitialize failed.");
687                 return EINA_FALSE;
688         }
689
690         return EINA_TRUE;
691 }
692
693 void Browser_View::__create_window_cb(void *data, Evas_Object *obj, void *event_info)
694 {
695         BROWSER_LOGD("[%s]", __func__);
696         if (!data)
697                 return;
698
699         Browser_View *browser_view = (Browser_View *)data;
700         Browser_Class *browser = browser_view->m_browser;
701
702         std::vector<Browser_Window *> window_list = browser->get_window_list();
703         if (window_list.size() >= BROWSER_MULTI_WINDOW_MAX_COUNT) {
704                 /* If the multi window is max, delete the first one. */
705                 /* if the first window is focused, delete second one(oldest one except first one) */
706                 if (browser_view->m_focused_window != window_list[0])
707                         browser->delete_window(window_list[0]);
708                 else
709                         browser->delete_window(window_list[1]);
710         }
711
712         browser_view->m_created_new_window = browser->create_new_window();
713         if (!browser_view->m_created_new_window) {
714                 BROWSER_LOGE("create_new_window failed");
715                 return;
716         }
717         /* initialize the created webview first to connect ewk event callback functions such as load start, progress etc. */
718         browser->ewk_view_init(browser_view->m_created_new_window->m_ewk_view);
719
720         /* Set the caller window. */
721         browser_view->m_created_new_window->m_parent = browser_view->m_focused_window;
722
723         /* Destroy previous multi window item snapshot.
724           * This is because the snapshot of multi window item can't be captured in this case. */
725 #if defined(HORIZONTAL_UI)
726         if (browser_view->m_focused_window->m_landscape_snapshot_image) {
727                 evas_object_del(browser_view->m_focused_window->m_landscape_snapshot_image);
728                 browser_view->m_focused_window->m_landscape_snapshot_image = NULL;
729         }
730 #endif
731         if (browser_view->m_focused_window->m_portrait_snapshot_image) {
732                 evas_object_del(browser_view->m_focused_window->m_portrait_snapshot_image);
733                 browser_view->m_focused_window->m_portrait_snapshot_image = NULL;
734         }
735
736         if (!browser_view->_show_new_window_effect(browser_view->m_focused_window->m_ewk_view,
737                                         browser_view->m_created_new_window->m_ewk_view))
738                 BROWSER_LOGE("_show_new_window_effect failed");
739
740         *((Evas_Object **)event_info) = browser_view->m_created_new_window->m_ewk_view;
741 }
742
743 void Browser_View::__load_started_cb(void *data, Evas_Object *obj, void *event_info)
744 {
745         BROWSER_LOGD("[%s]", __func__); 
746         if (!data)
747                 return;
748
749         Browser_View *browser_view = (Browser_View *)data;
750         Evas_Object *url_progressbar = browser_view->m_url_progressbar;
751         Evas_Object *progressbar_wheel = browser_view->m_url_progresswheel;
752         Evas_Object *option_header_url_progressbar = browser_view->m_option_header_url_progressbar;
753         Evas_Object *option_header_progressbar_wheel = browser_view->m_option_header_url_progresswheel;
754
755         double progress = ewk_view_load_progress_get(browser_view->m_focused_window->m_ewk_view);
756         if (progress <= 0.0f)
757                 progress = 0.05f;
758         elm_progressbar_pulse(progressbar_wheel, EINA_TRUE);
759         elm_progressbar_pulse(option_header_progressbar_wheel, EINA_TRUE);
760
761         elm_progressbar_value_set(url_progressbar, progress);
762         elm_progressbar_value_set(option_header_url_progressbar, progress);
763
764         browser_view->_load_start();
765 }
766
767 void Browser_View::_navigationbar_visible_set_signal(Eina_Bool visible)
768 {
769         BROWSER_LOGD("visible=%d", visible);
770
771         if (visible && (m_data_manager->is_in_view_stack(BR_MULTI_WINDOW_VIEW) || m_is_full_screen || m_brightness_control_bar))
772                 return;
773
774         if (m_navi_it != elm_naviframe_top_item_get(m_navi_bar))
775                 return;
776
777         evas_object_data_set(m_navi_bar, "visible", (Eina_Bool *)visible);
778
779         Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
780
781         if (visible)
782                 elm_object_item_signal_emit(top_it, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_INSTANT_OPEN);
783         else
784                 elm_object_item_signal_emit(top_it, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_INSTANT_CLOSE);
785 }
786
787 void Browser_View::_navigationbar_visible_set(Eina_Bool visible)
788 {
789         if (visible && (m_data_manager->is_in_view_stack(BR_MULTI_WINDOW_VIEW) || m_is_full_screen))
790                 return;
791
792         if (m_navi_it != elm_naviframe_top_item_get(m_navi_bar))
793                 return;
794
795         evas_object_data_set(m_navi_bar, "visible", (Eina_Bool *)visible);
796
797         Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
798         if (visible)
799                 elm_object_item_signal_emit(top_it, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_OPEN);
800         else
801                 elm_object_item_signal_emit(top_it, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_CLOSE);
802 }
803
804 Eina_Bool Browser_View::_navigationbar_visible_get(void)
805 {
806         Eina_Bool* visible = (Eina_Bool *)evas_object_data_get(m_navi_bar, "visible");
807         BROWSER_LOGD("visible = %d", visible);
808         if (visible == (Eina_Bool *)EINA_TRUE)
809                 return EINA_TRUE;
810         else
811                 return EINA_FALSE;
812 }
813
814 void Browser_View::_load_start(void)
815 {
816         BROWSER_LOGD("[%s]", __func__);
817
818         if (m_dummy_loading_progressbar) {
819                 elm_object_part_content_unset(m_main_layout, "elm.swallow.waiting_progress");
820                 evas_object_del(m_dummy_loading_progressbar);
821                 m_dummy_loading_progressbar = NULL;
822                 edje_object_signal_emit(elm_layout_edje_get(m_main_layout),
823                                         "hide,waiting_progressbar,signal", "");
824         }
825
826         if (!m_data_manager->is_in_view_stack(BR_MULTI_WINDOW_VIEW))
827                 _set_navigationbar_title(BR_STRING_LOADING);
828
829         edje_object_signal_emit(elm_layout_edje_get(m_url_entry_layout), "loading,on,signal", "");
830         edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_entry_layout),
831                                 "loading,on,signal", "");
832
833         _navigationbar_visible_set_signal(EINA_TRUE);
834
835         /* Hide the secure lock icon in title bar. */
836         elm_object_item_part_content_set(m_navi_it, ELM_NAVIFRAME_ITEM_ICON, NULL);
837
838         /* Destroy & hide favicon when load start. */
839         edje_object_signal_emit(elm_layout_edje_get(m_url_entry_layout),
840                                                 "hide,favicon,signal", "");
841         edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_entry_layout),
842                                                 "hide,favicon,signal", "");
843         if (elm_object_part_content_get(m_url_entry_layout, "elm.swallow.favicon"))
844                 elm_object_part_content_unset(m_url_entry_layout, "elm.swallow.favicon");
845         if (elm_object_part_content_get(m_option_header_url_entry_layout,
846                                                 "elm.swallow.favicon"))
847                 elm_object_part_content_unset(m_option_header_url_entry_layout,
848                                                 "elm.swallow.favicon");
849
850         if (m_focused_window->m_favicon) {
851                 evas_object_del(m_focused_window->m_favicon);
852                 m_focused_window->m_favicon = NULL;
853         }
854         if (m_focused_window->m_option_header_favicon) {
855                 evas_object_del(m_focused_window->m_option_header_favicon);
856                 m_focused_window->m_option_header_favicon = NULL;
857         }
858
859         /* This makes the ewk view unfocused so that the ime can't be invoked. */
860         evas_object_focus_set(m_focused_window->m_ewk_view_layout, EINA_TRUE);
861
862         if (_get_edit_mode() != BR_NO_EDIT_MODE)
863                 _set_edit_mode(BR_NO_EDIT_MODE);
864
865         /* For deleted window because of unused case like low memory. */
866         m_focused_window->m_url.clear();
867         m_focused_window->m_title.clear();
868
869         set_full_sreen(EINA_FALSE);
870
871         elm_object_focus_set(m_option_header_cancel_button, EINA_TRUE);
872         elm_object_signal_emit(m_option_header_url_edit_field, "ellipsis_show,signal", "elm");
873         elm_object_signal_emit(m_url_edit_field, "ellipsis_show,signal", "elm");
874
875         if (m_scissorbox_view)
876                 _destroy_scissorbox_view();
877         _destroy_more_context_popup();
878 }
879
880 void Browser_View::__load_committed_cb(void *data, Evas_Object *obj, void *event_info)
881 {
882         BROWSER_LOGD("[%s]", __func__);
883         if (!data)
884                 return;
885
886         Browser_View *browser_view = (Browser_View *)data;
887         if (browser_view->_get_edit_mode() != BR_NO_EDIT_MODE)
888                 return;
889
890         browser_view->_set_url_entry(browser_view->get_url().c_str());
891 }
892
893 void Browser_View::__load_nonempty_layout_finished_cb(void *data, Evas_Object *obj, void *event_info)
894 {
895         BROWSER_LOGD("[%s]", __func__);
896         if (!data)
897                 return;
898
899         Browser_View *browser_view = (Browser_View *)data;
900
901         if (!browser_view->_is_loading())
902                 return;
903
904 #ifdef BROWSER_SCROLLER_BOUNCING
905         /* If the first content is displayed, hide the url layout in browser scroller like safari. */
906         int scroller_x = 0;
907         int scroller_w = 0;
908         int scroller_h = 0;
909         elm_scroller_region_get(browser_view->m_scroller, &scroller_x, NULL, &scroller_w, &scroller_h);
910         elm_scroller_region_show(browser_view->m_scroller ,scroller_x, 0,
911                                                                 scroller_w, scroller_h);
912 #endif
913 }
914
915 void Browser_View::__title_changed_cb(void *data, Evas_Object *obj, void *event_info)
916 {
917         BROWSER_LOGD("[%s]", __func__);
918         if (!data)
919                 return;
920
921         Browser_View *browser_view = (Browser_View *)data;
922         if (browser_view->_get_edit_mode() != BR_NO_EDIT_MODE)
923                 return;
924
925         if (!m_data_manager->is_in_view_stack(BR_MULTI_WINDOW_VIEW))
926                 browser_view->_set_navigationbar_title(browser_view->get_title().c_str());
927 }
928
929 void Browser_View::__load_finished_cb(void *data, Evas_Object *obj, void *event_info)
930 {
931         BROWSER_LOGD("[%s]", __func__);
932         if (!data)
933                 return;
934
935         Browser_View *browser_view = (Browser_View *)data;
936         Evas_Object *progressbar_wheel = browser_view->m_url_progresswheel;
937         Evas_Object *option_header_progressbar_wheel = browser_view->m_option_header_url_progresswheel;
938
939         elm_progressbar_pulse(progressbar_wheel, EINA_FALSE);
940         elm_progressbar_pulse(option_header_progressbar_wheel, EINA_FALSE);
941
942         /*
943         * For the first time, the background color is white initially.
944         * If the background is not displayed yet, show the grey background.
945         * This code is executed only one time at launching time.
946         */
947         const char* state = edje_object_part_state_get(elm_layout_edje_get(browser_view->m_main_layout),
948                                                         "contents_bg", NULL);
949         if(state && !strncmp(state, "default", strlen("default")))
950                 edje_object_signal_emit(elm_layout_edje_get(browser_view->m_main_layout),
951                                         "show,grey_background,signal", "");
952
953         if (browser_view->m_edit_mode != BR_URL_ENTRY_EDIT_MODE
954             && browser_view->m_edit_mode != BR_URL_ENTRY_EDIT_MODE_WITH_NO_IMF) {
955                 /* change the url layout for normal mode. (change the reload icon etc) */
956                 edje_object_signal_emit(elm_layout_edje_get(browser_view->m_url_entry_layout), "loading,off,signal", "");
957                 edje_object_signal_emit(elm_layout_edje_get(browser_view->m_option_header_url_entry_layout),
958                                         "loading,off,signal", "");
959         }
960
961         if (!m_data_manager->is_in_view_stack(BR_MULTI_WINDOW_VIEW))
962                 browser_view->_set_navigationbar_title(browser_view->get_title().c_str());
963
964         /* This is because,
965           * finish progress event can be come after finish progress frame event at some pages.
966           * In this case, the title & favicon display error happens, becaue these are handled in finish progress frame.
967           * So do that again here. */
968         if (!browser_view->_set_favicon())
969                 BROWSER_LOGE("_set_favicon failed");
970         browser_view->_set_secure_icon();
971         browser_view->_load_finished();
972 }
973
974 static Eina_Bool __kill_browser_timer_cb(void *data)
975 {
976         elm_exit();
977         return ECORE_CALLBACK_CANCEL;
978 }
979
980 void Browser_View::__process_crashed_cb(void *data, Evas_Object *obj, void *event_info)
981 {
982         BROWSER_LOGD("[%s]", __func__);
983         if (!data)
984                 return;
985
986         Browser_View *browser_view = (Browser_View *)data;
987         browser_view->show_msg_popup(BR_STRING_WEBPROCESS_CRASH, 3);
988         ecore_timer_add(3, __kill_browser_timer_cb, NULL);
989 }
990
991 void Browser_View::__did_finish_load_for_frame_cb(void *data, Evas_Object *obj, void *event_info)
992 {
993         if (!data)
994                 return;
995
996         Browser_View *browser_view = (Browser_View *)data;
997
998         if (!m_data_manager->is_in_view_stack(BR_MULTI_WINDOW_VIEW))
999                 browser_view->_set_navigationbar_title(browser_view->get_title().c_str());
1000
1001         browser_view->_load_finished();
1002 }
1003
1004 void Browser_View::_set_secure_icon(void)
1005 {
1006         std::string url = get_url();
1007         BROWSER_LOGD("url=[%s]", url.c_str());
1008
1009         if (m_focused_window->m_secure_icon == NULL) {
1010                 m_focused_window->m_secure_icon = elm_icon_add(m_focused_window->m_ewk_view);
1011                 if (!m_focused_window->m_secure_icon) {
1012                         BROWSER_LOGE("elm_icon_add is failed.");
1013                         return;
1014                 }
1015
1016                 if (!elm_icon_file_set(m_focused_window->m_secure_icon, BROWSER_IMAGE_DIR"/lock.png", NULL)) {
1017                         BROWSER_LOGE("elm_icon_file_set is failed.");
1018                         return;
1019                 }
1020                 evas_object_size_hint_aspect_set(m_focused_window->m_secure_icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1021                 elm_object_part_content_set(m_url_entry_layout, "elm.swallow.secure_icon",
1022                                 m_focused_window->m_secure_icon);
1023         }
1024
1025         if (m_focused_window->m_option_header_secure_icon == NULL) {
1026                 m_focused_window->m_option_header_secure_icon = elm_icon_add(m_focused_window->m_ewk_view);
1027                 if (!m_focused_window->m_option_header_secure_icon) {
1028                         BROWSER_LOGE("elm_icon_add is failed.");
1029                         return;
1030                 }
1031
1032                 if (!elm_icon_file_set(m_focused_window->m_option_header_secure_icon, BROWSER_IMAGE_DIR"/lock.png", NULL)) {
1033                         BROWSER_LOGE("elm_icon_file_set is failed.");
1034                         return;
1035                 }
1036                 evas_object_size_hint_aspect_set(m_focused_window->m_option_header_secure_icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1037                 elm_object_part_content_set(m_option_header_url_entry_layout, "elm.swallow.secure_icon",
1038                                 m_focused_window->m_option_header_secure_icon);
1039         }
1040
1041         if (url.c_str() && url.length()) {
1042                 if (!strncmp(url.c_str(), BROWSER_HTTPS_SCHEME, strlen(BROWSER_HTTPS_SCHEME))) {
1043                         edje_object_signal_emit(elm_layout_edje_get(m_url_entry_layout),
1044                                                                         "show,secure_icon,signal", "");
1045                         edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_entry_layout),
1046                                                                         "show,secure_icon,signal", "");
1047                         return;
1048                 }
1049         }
1050         edje_object_signal_emit(elm_layout_edje_get(m_url_entry_layout), "hide,secure_icon,signal", "");
1051         edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_entry_layout),
1052                                                                 "hide,secure_icon,signal", "");
1053 }
1054
1055 #if defined(FEATURE_MOST_VISITED_SITES)
1056 Eina_Bool Browser_View::_capture_most_visited_sites_item_screen_shot(void)
1057 {
1058         BROWSER_LOGD("[%s]", __func__);
1059
1060         Eina_Bool is_ranked = EINA_FALSE;
1061         std::string screen_shot_path;
1062         std::string current_url = get_url();
1063         screen_shot_path.clear();
1064
1065         if (!m_selected_most_visited_sites_item_info.url.empty()) {
1066                 std::string history_id;
1067                 history_id = m_most_visited_sites_db->get_history_id_by_url(get_url().c_str());
1068                 if (!history_id.empty()) {
1069                         std::string history_title;
1070                         history_title = m_most_visited_sites_db->get_history_title_by_id(history_id.c_str());
1071                         if (!history_title.empty()) {
1072                                 if (!m_most_visited_sites_db->save_most_visited_sites_item(m_selected_most_visited_sites_item_info.index,
1073                                                 get_url().c_str(), history_title.c_str(), history_id.c_str()))
1074                                         BROWSER_LOGE("save_most_visited_sites_item failed");
1075                         } else {
1076                                 if (!m_most_visited_sites_db->save_most_visited_sites_item(m_selected_most_visited_sites_item_info.index,
1077                                                 get_url().c_str(), m_selected_most_visited_sites_item_info.title.c_str(),
1078                                                 history_id.c_str()))
1079                                         BROWSER_LOGE("save_most_visited_sites_item failed");
1080                         }
1081                 }
1082
1083                 m_selected_most_visited_sites_item_info.url.clear();
1084                 m_selected_most_visited_sites_item_info.title.clear();
1085                 m_selected_most_visited_sites_item_info.id.clear();
1086         }
1087
1088         std::vector<Most_Visited_Sites_DB::most_visited_sites_entry> most_visited_sites_list;
1089         if (!m_most_visited_sites_db->get_most_visited_sites_list(most_visited_sites_list)) {
1090                 BROWSER_LOGE("get_most_visited_sites_list failed");
1091                 return EINA_FALSE;
1092         }
1093
1094         for (int i = 0 ; i < most_visited_sites_list.size() ; i++) {
1095                 if (!current_url.empty() && !most_visited_sites_list[i].url.empty()
1096                      && (current_url.length() == most_visited_sites_list[i].url.length())
1097                      && !strncmp(most_visited_sites_list[i].url.c_str(), current_url.c_str(), current_url.length())) {
1098                         is_ranked = EINA_TRUE;
1099                         screen_shot_path = std::string(BROWSER_SCREEN_SHOT_DIR)
1100                                                         + most_visited_sites_list[i].id;
1101                         if (most_visited_sites_list[i].id.length() > strlen(DEFAULT_ICON_PREFIX) &&
1102                             !strncmp(DEFAULT_ICON_PREFIX, most_visited_sites_list[i].id.c_str(),
1103                                                         strlen(DEFAULT_ICON_PREFIX))) {
1104                                 /* If default icon */
1105                                 std::string history_id;
1106                                 history_id = m_most_visited_sites_db->get_history_id_by_url(most_visited_sites_list[i].url.c_str());
1107                                 if (!history_id.empty()) {
1108                                         if (m_most_visited_sites_db->save_most_visited_sites_item(most_visited_sites_list[i].index,
1109                                                 most_visited_sites_list[i].url.c_str(), most_visited_sites_list[i].title.c_str(),
1110                                                 history_id.c_str())) {
1111                                                 screen_shot_path = std::string(BROWSER_SCREEN_SHOT_DIR)
1112                                                                         + most_visited_sites_list[i].id;
1113                                                 remove(screen_shot_path.c_str());
1114                                                 screen_shot_path = std::string(BROWSER_SCREEN_SHOT_DIR)
1115                                                                         + history_id;
1116                                         }
1117                                 }
1118                         }
1119                         break;
1120                 }
1121         }
1122
1123         if (!is_ranked) {
1124                 std::vector<Most_Visited_Sites_DB::most_visited_sites_entry> most_visited_list;
1125                 if (!m_most_visited_sites_db->get_most_visited_list(most_visited_list, most_visited_sites_list,
1126                                                         BROWSER_MOST_VISITED_SITES_ITEM_MAX * 2)) {
1127                         BROWSER_LOGE("get_most_visited_list failed");
1128                         return EINA_FALSE;
1129                 }
1130                 for (int i = 0; i < most_visited_list.size(); i++)
1131                 {
1132                         if (most_visited_list[i].url == current_url) {
1133                                 is_ranked = EINA_TRUE;
1134                                 screen_shot_path = std::string(BROWSER_SCREEN_SHOT_DIR)
1135                                                                         + most_visited_list[i].id;
1136                                 break;
1137                         }
1138                 }
1139         }
1140
1141         if (is_ranked && screen_shot_path.size() > 0) {
1142                 int focused_ewk_view_w = 0;
1143                 int focused_ewk_view_h = 0;
1144                 evas_object_geometry_get(m_focused_window->m_ewk_view, NULL, NULL,
1145                                                         &focused_ewk_view_w, &focused_ewk_view_h);
1146
1147                 int window_w = 0;
1148                 evas_object_geometry_get(m_win, NULL, NULL, &window_w, NULL);
1149                 int item_w = window_w / 3;
1150                 int item_h = item_w + 10 * elm_scale_get();
1151
1152                 double ratio = (double)((double)item_h / (double)item_w);
1153
1154                 Eina_Rectangle snapshot_rect;
1155                 snapshot_rect.x = snapshot_rect.y = 0;
1156                 snapshot_rect.w = focused_ewk_view_w;
1157                 snapshot_rect.h = focused_ewk_view_w * ratio;
1158
1159                 Evas_Object *snapshot = ewk_view_screenshot_contents_get(m_focused_window->m_ewk_view,
1160                                         snapshot_rect, 0.33, evas_object_evas_get(m_navi_bar));
1161                 if (!snapshot) {
1162                         BROWSER_LOGE("ewk_view_screenshot_contents_get failed");
1163                         return EINA_FALSE;
1164                 }
1165                 uint8_t *pixels = (uint8_t *)(evas_object_image_data_get(snapshot, EINA_TRUE));
1166
1167                 int surface_width = 0;
1168                 int surface_height = 0;
1169                 evas_object_image_size_get(snapshot, &surface_width, &surface_height);
1170                 BROWSER_LOGD("<<<< surface_width = %d, surface_height = %d >>>", surface_width, surface_height);
1171
1172                 cairo_surface_t *snapshot_surface = cairo_image_surface_create_for_data(pixels, CAIRO_FORMAT_RGB24,
1173                                                                 surface_width, surface_height,
1174                                                                 cairo_format_stride_for_width(CAIRO_FORMAT_RGB24, surface_width));
1175                 if (!snapshot_surface) {
1176                         BROWSER_LOGE("cairo_image_surface_create_for_data failed");
1177                         return EINA_FALSE;
1178                 }
1179
1180                 if (cairo_surface_write_to_png(snapshot_surface, screen_shot_path.c_str())
1181                                                         != CAIRO_STATUS_SUCCESS)
1182                         BROWSER_LOGD("cairo_surface_write_to_png FAILED");
1183                 cairo_surface_destroy(snapshot_surface);
1184         }
1185         return EINA_TRUE;
1186 }
1187
1188 Eina_Bool Browser_View::__capture_most_visited_sites_screen_shot_idler_cb(void *data)
1189 {
1190         BROWSER_LOGD("[%s]", __func__);
1191         if (!data)
1192                 return ECORE_CALLBACK_CANCEL;
1193
1194         Browser_View *browser_view = (Browser_View *)data;
1195         if (!browser_view->_capture_most_visited_sites_item_screen_shot())
1196                 BROWSER_LOGE("_capture_most_visited_sites_item_screen_shot failed");
1197
1198         return ECORE_CALLBACK_CANCEL;
1199 }
1200 #endif
1201
1202 void Browser_View::_load_finished(void)
1203 {
1204         BROWSER_LOGD("[%s]", __func__);
1205
1206         /* enable or disable back,forward controlbar buttons */
1207         _set_controlbar_back_forward_status();
1208
1209         if (!_set_favicon())
1210                 BROWSER_LOGE("_set_favicon failed");
1211         _set_secure_icon();
1212
1213         /* Add current url to history */
1214         Eina_Bool is_full = EINA_FALSE;
1215
1216         /* Save last visited url to save this when browser exits. */
1217         m_last_visited_url = get_url();
1218
1219         if (m_data_manager->get_history_db() && !m_is_private) {
1220                 m_data_manager->get_history_db()->save_history(m_last_visited_url.c_str(),
1221                                                         get_title().c_str(), &is_full);
1222                 if (is_full)
1223                         BROWSER_LOGE("history is full, delete the first one");
1224         }
1225
1226         _hide_scroller_url_layout();
1227
1228 #if defined(FEATURE_MOST_VISITED_SITES)
1229         ecore_idler_add(__capture_most_visited_sites_screen_shot_idler_cb, this);
1230 #endif
1231
1232         elm_object_focus_set(m_option_header_cancel_button, EINA_TRUE);
1233         elm_object_signal_emit(m_option_header_url_edit_field, "ellipsis_show,signal", "elm");
1234         elm_object_signal_emit(m_url_edit_field, "ellipsis_show,signal", "elm");
1235
1236         _update_back_forward_buttons();
1237 }
1238
1239 void Browser_View::_hide_scroller_url_layout(void)
1240 {
1241         BROWSER_LOGD("[%s]", __func__);
1242
1243         if (_get_edit_mode() != BR_NO_EDIT_MODE
1244 #if defined(FEATURE_MOST_VISITED_SITES)
1245             || is_most_visited_sites_running()
1246 #endif
1247         )
1248                 return;
1249
1250         _navigationbar_visible_set_signal(EINA_FALSE);
1251
1252         int browser_scroller_x = 0;
1253         int browser_scroller_w = 0;
1254         int browser_scroller_h = 0;
1255         elm_scroller_region_get(m_scroller, &browser_scroller_x, NULL,
1256                                         &browser_scroller_w, &browser_scroller_h);
1257
1258         int url_layout_h = 0;
1259         evas_object_geometry_get(m_url_layout, NULL, NULL, NULL, &url_layout_h);
1260         elm_scroller_region_show(m_scroller, browser_scroller_x, url_layout_h,
1261                                         browser_scroller_w, browser_scroller_h);
1262 }
1263
1264 void Browser_View::__load_progress_cb(void *data, Evas_Object *obj, void *event_info)
1265 {
1266         if (!data)
1267                 return;
1268
1269         Browser_View *browser_view = (Browser_View *)data;
1270         Evas_Object *url_progressbar = browser_view->m_url_progressbar;
1271         Evas_Object *option_header_url_progressbar = browser_view->m_option_header_url_progressbar;
1272
1273         double progress = ewk_view_load_progress_get(browser_view->m_focused_window->m_ewk_view);
1274         elm_progressbar_value_set(url_progressbar, progress);
1275         elm_progressbar_value_set(option_header_url_progressbar, progress);
1276
1277         if (progress == 1.0f)
1278                 __load_finished_cb(data, obj, NULL);
1279 }
1280
1281 void Browser_View::__ewk_view_mouse_down_cb(void* data, Evas* evas, Evas_Object* obj, void* ev)
1282 {
1283         if (!data)
1284                 return;
1285
1286         Browser_View *browser_view = (Browser_View *)data;
1287         Evas_Event_Mouse_Down event = *(Evas_Event_Mouse_Down *)ev;
1288         Evas_Object *main_layout = browser_view->m_main_layout;
1289         Evas_Object *ewk_view = browser_view->m_focused_window->m_ewk_view;
1290
1291 #if defined(FEATURE_MOST_VISITED_SITES)
1292         if (browser_view->is_most_visited_sites_running())
1293                 return;
1294 #endif
1295
1296 #ifdef BROWSER_SCROLLER_BOUNCING
1297         /* activate webview firstly when user starts to touch. */
1298         browser_view->_enable_webview_scroll();
1299 #endif
1300
1301         if (!browser_view->_is_loading() && browser_view->_get_edit_mode() != BR_FIND_WORD_MODE)
1302                 browser_view->_navigationbar_visible_set(EINA_FALSE);
1303
1304         browser_view->m_is_scrolling = EINA_TRUE;
1305
1306         BROWSER_LOGD("__ewk_view_mouse_down_cb");
1307
1308 #ifdef ZOOM_BUTTON
1309         double scale_factor = ewk_view_scale_get(browser_view->m_focused_window->m_ewk_view);
1310         double min_scale = 0;
1311         double max_scale = 0;
1312
1313         bool zoom_button_flag = true;
1314         if (br_preference_get_bool(ZOOM_BUTTON_KEY, &zoom_button_flag) == false)
1315                 BROWSER_LOGE("failed to get ZOOM_BUTTON_KEY value\n");
1316
1317         BROWSER_LOGD("zoom_button_flag =%d", zoom_button_flag);
1318
1319         if (zoom_button_flag == false)
1320                 return;
1321
1322
1323         ewk_view_scale_range_get(browser_view->m_focused_window->m_ewk_view,
1324                                         &min_scale, &max_scale);
1325         if (scale_factor > min_scale && scale_factor < max_scale) {
1326                 if (browser_view->m_zoom_button_timer)
1327                         ecore_timer_del(browser_view->m_zoom_button_timer);
1328                 browser_view->m_zoom_button_timer = ecore_timer_add(3, __zoom_button_timeout_cb, browser_view);
1329                 edje_object_signal_emit(elm_layout_edje_get(browser_view->m_main_layout), "show,zoom_buttons,signal", "");
1330         }
1331 #endif
1332 }
1333
1334 void Browser_View::__ewk_view_enter_full_screen_cb(void *data, Evas_Object *obj, void *event_info)
1335 {
1336         if (!data)
1337                 return;
1338
1339         Browser_View *browser_view = (Browser_View *)data;
1340         browser_view->set_full_sreen(EINA_TRUE);
1341 }
1342
1343 void Browser_View::__ewk_view_exit_full_screen_cb(void *data, Evas_Object *obj, void *event_info)
1344 {
1345         if (!data)
1346                 return;
1347
1348         Browser_View *browser_view = (Browser_View *)data;
1349         browser_view->set_full_sreen(EINA_FALSE);
1350 }
1351
1352 void Browser_View::__ewk_view_vibration_vibrate_cb(void *data, Evas_Object *obj, void *event_info)
1353 {
1354         Browser_View *browser_view = (Browser_View*)data;
1355         const long vibration_time = *((const long *)event_info);
1356
1357         BROWSER_LOGD("__ewk_view_vibration_vibrate_cb : play time is [%ld]", vibration_time);
1358
1359         browser_view->_haptic_device_play(vibration_time);
1360 }
1361
1362 void Browser_View::__ewk_view_vibration_cancel_cb(void *data, Evas_Object *obj, void *event_info)
1363 {
1364         BROWSER_LOGD("[%s]", __func__);
1365
1366         Browser_View *browser_view = (Browser_View*)data;
1367
1368         browser_view->_haptic_device_stop();
1369 }
1370
1371 void Browser_View::__ewk_view_mouse_up_cb(void* data, Evas* evas, Evas_Object* obj, void* ev)
1372 {
1373         if (!data)
1374                 return;
1375
1376         Browser_View *browser_view = (Browser_View *)data;
1377
1378         browser_view->m_is_scrolling = EINA_FALSE;
1379 }
1380
1381 void Browser_View::__ewk_view_edge_top_cb(void *data, Evas_Object *obj, void *event_info)
1382 {
1383 #ifdef BROWSER_SCROLLER_BOUNCING
1384         BROWSER_LOGD("[%s]", __func__);
1385
1386         if (!data)
1387                 return;
1388         Browser_View *browser_view = (Browser_View *)data;
1389         browser_view->_enable_browser_scroller_scroll();
1390
1391         /* If user do flicking the mouse with scroll up, bring in the browser scroller to y=0.  */
1392         if (!browser_view->m_is_scrolling) {
1393                 BROWSER_LOGD("<< elm_scroller_region_bring_in >>");
1394                 int browser_scroller_x = 0;
1395                 int browser_scroller_w = 0;
1396                 int browser_scroller_h = 0;
1397                 elm_scroller_region_get(browser_view->m_scroller, &browser_scroller_x, NULL,
1398                                                 &browser_scroller_w, &browser_scroller_h);
1399
1400                 elm_scroller_region_bring_in(browser_view->m_scroller, browser_scroller_x, 0,
1401                                                 browser_scroller_w, browser_scroller_h);
1402         }
1403 #endif
1404 }
1405
1406 void Browser_View::__ewk_view_scroll_down_cb(void *data, Evas_Object *obj, void *event_info)
1407 {
1408 #ifdef BROWSER_SCROLLER_BOUNCING
1409         if (!data)
1410                 return;
1411         Browser_View *browser_view = (Browser_View *)data;
1412
1413         int scroller_x = 0;
1414         int scroller_y = 0;
1415         int scroller_w = 0;
1416         int scroller_h = 0;
1417         int url_layout_h = 0;
1418         elm_scroller_region_get(browser_view->m_scroller, &scroller_x, &scroller_y, &scroller_w, &scroller_h);
1419         evas_object_geometry_get(browser_view->m_url_layout, NULL, NULL, NULL, &url_layout_h);
1420
1421         if (scroller_y < url_layout_h) {
1422                 /* We have to hide urlbar when webview's contents are scrolled down by flicking. */
1423                 if (!browser_view->m_is_scrolling)
1424                         elm_scroller_region_show(browser_view->m_scroller, scroller_x, url_layout_h, scroller_w, scroller_h);
1425                 else
1426                         browser_view->_enable_browser_scroller_scroll();
1427         } else {
1428                 browser_view->_enable_webview_scroll();
1429         }
1430 #endif
1431 }
1432
1433 void Browser_View::__ewk_view_scroll_up_cb(void *data, Evas_Object *obj, void *event_info)
1434 {
1435 #ifdef BROWSER_SCROLLER_BOUNCING
1436         if (!data)
1437                 return;
1438
1439         Browser_View *browser_view = (Browser_View *)data;
1440         browser_view->_enable_webview_scroll();
1441 #endif
1442 }
1443
1444 void Browser_View::_set_navigationbar_title(const char *title)
1445 {
1446         BROWSER_LOGD("title=[%s]", title);
1447         edje_object_part_text_set(elm_layout_edje_get(m_url_layout),
1448                                         "title_text", title);
1449         edje_object_part_text_set(elm_layout_edje_get(m_option_header_url_layout),
1450                                         "title_text", title);
1451 }
1452
1453
1454 void Browser_View::_set_url_entry(const char *url, Eina_Bool set_secrue_icon)
1455 {
1456         BROWSER_LOGD("url=[%s]", url);
1457         if (url && strlen(url)) {
1458                 std::string url_without_http_scheme;
1459                 if (strstr(url, BROWSER_HTTP_SCHEME) && strlen(url) > strlen(BROWSER_HTTP_SCHEME))
1460                         url_without_http_scheme = std::string(url + strlen(BROWSER_HTTP_SCHEME));
1461                 else
1462                         url_without_http_scheme = std::string(url);
1463
1464                 char *mark_up_url = elm_entry_utf8_to_markup(url_without_http_scheme.c_str());
1465                 if (mark_up_url) {
1466                         Evas_Object *entry = br_elm_editfield_entry_get(m_url_edit_field);
1467                         elm_entry_entry_set(entry, mark_up_url);
1468                         entry = br_elm_editfield_entry_get(m_option_header_url_edit_field);
1469                         elm_entry_entry_set(entry, mark_up_url);
1470
1471                         edje_object_part_text_set(elm_layout_edje_get(m_option_header_url_edit_field),
1472                                                         "elm.text.ellipsis", mark_up_url);
1473                         edje_object_part_text_set(elm_layout_edje_get(m_url_edit_field),
1474                                                         "elm.text.ellipsis", mark_up_url);
1475                         free(mark_up_url);
1476                 }
1477         } else {
1478                 Evas_Object *entry = br_elm_editfield_entry_get(m_url_edit_field);
1479 #if defined(FEATURE_MOST_VISITED_SITES)
1480                 elm_entry_entry_set(entry, BROWSER_MOST_VISITED_SITES_URL);
1481 #else
1482                 elm_entry_entry_set(entry, BROWSER_BLANK_PAGE_URL);
1483 #endif
1484                 entry = br_elm_editfield_entry_get(m_option_header_url_edit_field);
1485 #if defined(FEATURE_MOST_VISITED_SITES)
1486                 elm_entry_entry_set(entry, BROWSER_MOST_VISITED_SITES_URL);
1487
1488                 edje_object_part_text_set(elm_layout_edje_get(m_option_header_url_edit_field),
1489                                                 "elm.text.ellipsis", BROWSER_MOST_VISITED_SITES_URL);
1490                 edje_object_part_text_set(elm_layout_edje_get(m_url_edit_field),
1491                                                 "elm.text.ellipsis", BROWSER_MOST_VISITED_SITES_URL);
1492 #else
1493                 elm_entry_entry_set(entry, BROWSER_BLANK_PAGE_URL);
1494
1495                 edje_object_part_text_set(elm_layout_edje_get(m_option_header_url_edit_field),
1496                                                 "elm.text.ellipsis", BROWSER_BLANK_PAGE_URL);
1497                 edje_object_part_text_set(elm_layout_edje_get(m_url_edit_field),
1498                                                 "elm.text.ellipsis", BROWSER_BLANK_PAGE_URL);
1499 #endif
1500         }
1501
1502         if (set_secrue_icon)
1503                 _set_secure_icon();
1504 }
1505
1506 void Browser_View::_stop_loading(void)
1507 {
1508         BROWSER_LOGD("[%s]", __func__);
1509         if (m_focused_window->m_ewk_view)
1510                 ewk_view_stop(m_focused_window->m_ewk_view);
1511 }
1512
1513 void Browser_View::_reload(void)
1514 {
1515         BROWSER_LOGD("[%s]", __func__);
1516         if (m_focused_window->m_ewk_view)
1517                 ewk_view_reload_bypass_cache(m_focused_window->m_ewk_view);
1518 }
1519
1520 void Browser_View::set_focused_window(Browser_Window *window
1521 #if defined(FEATURE_MOST_VISITED_SITES)
1522         ,Eina_Bool show_most_visited_sites
1523 #endif
1524         )
1525 {
1526         BROWSER_LOGD("[%s]", __func__);
1527         if (m_focused_window && m_focused_window->m_ewk_view_layout) {
1528                 elm_box_unpack(m_content_box, m_focused_window->m_ewk_view_layout);
1529                 evas_object_hide(m_focused_window->m_ewk_view_layout);
1530         }
1531
1532         if (m_focused_window && m_focused_window->m_favicon) {
1533                 if (elm_object_part_content_get(m_url_entry_layout, "elm.swallow.favicon"))
1534                         elm_object_part_content_unset(m_url_entry_layout, "elm.swallow.favicon");
1535
1536                 evas_object_hide(m_focused_window->m_favicon);
1537         }
1538         if (m_focused_window && m_focused_window->m_option_header_favicon) {
1539                 if (elm_object_part_content_get(m_option_header_url_entry_layout, "elm.swallow.favicon"))
1540                         elm_object_part_content_unset(m_option_header_url_entry_layout, "elm.swallow.favicon");
1541
1542                 evas_object_hide(m_focused_window->m_option_header_favicon);
1543         }
1544
1545         m_focused_window = window;
1546
1547         if (!m_focused_window->m_ewk_view_layout) {
1548                 m_focused_window->m_ewk_view_layout = elm_layout_add(m_navi_bar);
1549                 if (!m_focused_window->m_ewk_view_layout) {
1550                         BROWSER_LOGE("elm_layout_add failed!");
1551                         return;
1552                 }
1553                 if (!elm_layout_file_set(m_focused_window->m_ewk_view_layout,
1554                                         BROWSER_EDJE_DIR"/browser-view-main.edj",
1555                                         "browser/browser-view-webview")) {
1556                         BROWSER_LOGE("elm_layout_file_set failed", BROWSER_EDJE_DIR);
1557                         return;
1558                 }
1559                 evas_object_size_hint_weight_set(m_focused_window->m_ewk_view_layout,
1560                                                 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1561                 evas_object_size_hint_align_set(m_focused_window->m_ewk_view_layout,
1562                                                 EVAS_HINT_FILL, EVAS_HINT_FILL);
1563                 elm_box_pack_end(m_content_box, m_focused_window->m_ewk_view_layout);
1564                 evas_object_show(m_focused_window->m_ewk_view_layout);
1565
1566                 elm_object_part_content_set(m_focused_window->m_ewk_view_layout, "elm.swallow.webview",
1567                                         m_focused_window->m_ewk_view);
1568                 evas_object_show(m_focused_window->m_ewk_view);
1569
1570
1571                 /* Workaround.
1572                   * If launch the browser by aul, the grey bg is displayed shortly. */
1573                 edje_object_signal_emit(elm_layout_edje_get(m_main_layout),
1574                                                 "hide,grey_background,signal", "");
1575                 /* Workaround.
1576                   * The webview layout is not resized whenever repack to content box.
1577                   * So resize the webview layout whenever repack. */
1578                 m_resize_idler = ecore_idler_add(__webview_layout_resize_idler_cb, this);
1579         } else {
1580                 elm_box_pack_end(m_content_box, m_focused_window->m_ewk_view_layout);
1581                 evas_object_show(m_focused_window->m_ewk_view_layout);
1582                 evas_object_show(m_focused_window->m_ewk_view);
1583         }
1584
1585         if (!_is_loading()) {
1586                 edje_object_signal_emit(elm_layout_edje_get(m_url_entry_layout), "loading,off,signal", "");
1587                 edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_entry_layout),
1588                                         "loading,off,signal", "");
1589                 elm_progressbar_pulse(m_url_progresswheel, EINA_FALSE);
1590                 elm_progressbar_pulse(m_option_header_url_progresswheel, EINA_FALSE);
1591         }
1592
1593         /* show or hide favicon in url layout. */
1594         if (m_focused_window->m_favicon
1595 #if defined(FEATURE_MOST_VISITED_SITES)
1596                 && !is_most_visited_sites_running()
1597 #endif
1598                 ) {
1599                 if (elm_object_part_content_get(m_url_entry_layout, "elm.swallow.favicon"))
1600                         elm_object_part_content_unset(m_url_entry_layout, "elm.swallow.favicon");
1601
1602                 elm_object_part_content_set(m_url_entry_layout, "elm.swallow.favicon",
1603                                                         m_focused_window->m_favicon);
1604                 edje_object_signal_emit(elm_layout_edje_get(m_url_entry_layout),
1605                                                         "show,favicon,signal", "");
1606                 evas_object_show(m_focused_window->m_favicon);
1607                 _set_secure_icon();
1608         } else {
1609                 edje_object_signal_emit(elm_layout_edje_get(m_url_entry_layout),
1610                                                         "hide,favicon,signal", "");
1611         }
1612
1613         /* show or hide favicon in option header url layout. */
1614         if (m_focused_window->m_option_header_favicon
1615 #if defined(FEATURE_MOST_VISITED_SITES)
1616                 && !is_most_visited_sites_running()
1617 #endif
1618                 ) {
1619                 if (elm_object_part_content_get(m_option_header_url_entry_layout, "elm.swallow.favicon"))
1620                         elm_object_part_content_unset(m_option_header_url_entry_layout, "elm.swallow.favicon");
1621
1622                 elm_object_part_content_set(m_option_header_url_entry_layout, "elm.swallow.favicon",
1623                                                         m_focused_window->m_option_header_favicon);
1624                 edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_entry_layout),
1625                                                         "show,favicon,signal", "");
1626                 _set_secure_icon();
1627                 evas_object_show(m_focused_window->m_option_header_favicon);
1628         } else {
1629                 edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_entry_layout),
1630                                                         "hide,favicon,signal", "");
1631         }
1632
1633 #if defined(FEATURE_MOST_VISITED_SITES)
1634         if (show_most_visited_sites) {
1635                 if (get_url().empty())
1636                         _show_most_visited_sites(EINA_TRUE);
1637                 else
1638                         _show_most_visited_sites(EINA_FALSE);
1639         }
1640 #endif
1641
1642         std::vector<Browser_Window *> window_list = m_browser->get_window_list();
1643         _set_multi_window_controlbar_text(window_list.size());
1644
1645         if (!_set_favicon())
1646                 BROWSER_LOGE("_set_favicon failed");
1647
1648         _update_back_forward_buttons();
1649
1650         /* Without this code, the url is empty shortly when create deleted-window in multi window. */
1651         if (get_url().empty() && !m_focused_window->m_url.empty())
1652                 _set_url_entry(m_focused_window->m_url.c_str());
1653         else
1654                 _set_url_entry(get_url().c_str());
1655
1656         if (window_list.size() >= BROWSER_MULTI_WINDOW_MAX_COUNT)
1657                 elm_object_item_disabled_set(m_new_window_button, EINA_TRUE);
1658         else
1659                 elm_object_item_disabled_set(m_new_window_button, EINA_FALSE);
1660 }
1661
1662 #if defined(FEATURE_MOST_VISITED_SITES)
1663 Eina_Bool Browser_View::_show_most_visited_sites(Eina_Bool is_show)
1664 {
1665         BROWSER_LOGD("[%s]is_show=%d", __func__, is_show);
1666         if (is_show) {
1667                 m_selected_most_visited_sites_item_info.url.clear();
1668                 m_selected_most_visited_sites_item_info.title.clear();
1669                 m_selected_most_visited_sites_item_info.id.clear();
1670
1671                 if (!m_most_visited_sites) {
1672                         m_most_visited_sites = new(nothrow) Most_Visited_Sites(m_navi_bar, this, m_most_visited_sites_db);
1673                         if (!m_most_visited_sites) {
1674                                 BROWSER_LOGE("new Most_Visited_Sites failed");
1675                                 return EINA_FALSE;
1676                         }
1677
1678                         Evas_Object *most_visited_sites_layout = m_most_visited_sites->create_most_visited_sites_main_layout();
1679                         if (!most_visited_sites_layout) {
1680                                 BROWSER_LOGE("create_most_visited_sites_main_layout failed");
1681                                 if (m_most_visited_sites) {
1682                                         delete m_most_visited_sites;
1683                                         m_most_visited_sites = NULL;
1684                                 }
1685                                 return EINA_FALSE;
1686                         }
1687                         elm_object_part_content_set(m_main_layout, "elm.swallow.most_visited_sites", most_visited_sites_layout);
1688                         edje_object_signal_emit(elm_layout_edje_get(m_main_layout),
1689                                                         "show,most_visited_sites,signal", "");
1690                         edje_object_signal_emit(elm_layout_edje_get(m_main_layout),
1691                                                         "show,control_bar,no_animation,signal", "");
1692
1693                         /* change the url layout for normal mode. (change the reload icon etc) */
1694                         edje_object_signal_emit(elm_layout_edje_get(m_url_entry_layout), "loading,off,signal", "");
1695                         edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_entry_layout),
1696                                                 "loading,off,signal", "");
1697
1698                         edje_object_part_text_set(elm_layout_edje_get(m_url_entry_layout),
1699                                                         "url_guide_text", BR_STRING_URL_GUIDE_TEXT);
1700                         edje_object_part_text_set(elm_layout_edje_get(m_option_header_url_entry_layout),
1701                                                         "url_guide_text", BR_STRING_URL_GUIDE_TEXT);
1702
1703                         edje_object_signal_emit(elm_layout_edje_get(m_url_entry_layout), "url_guide_text,on,signal", "");
1704                         edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_entry_layout),
1705                                                                 "url_guide_text,on,signal", "");
1706
1707                         _set_navigationbar_title(BR_STRING_MOST_VISITED_SITES);
1708                         _set_url_entry(BROWSER_MOST_VISITED_SITES_URL);
1709
1710                         /* If the speed dial is displayed for the first time, destroy the progress wheel. */
1711                         if (m_dummy_loading_progressbar) {
1712                                 elm_object_part_content_unset(m_main_layout, "elm.swallow.waiting_progress");
1713                                 evas_object_del(m_dummy_loading_progressbar);
1714                                 m_dummy_loading_progressbar = NULL;
1715                                 edje_object_signal_emit(elm_layout_edje_get(m_main_layout),
1716                                                         "hide,waiting_progressbar,signal", "");
1717                         }
1718
1719                         elm_object_item_disabled_set(m_add_bookmark_button, EINA_TRUE);
1720                 }
1721
1722                 int scroller_x = 0;
1723                 int scroller_w = 0;
1724                 int scroller_h = 0;
1725                 elm_scroller_region_get(m_scroller, &scroller_x, NULL, &scroller_w, &scroller_h);
1726                 elm_scroller_region_show(m_scroller ,scroller_x, 0, scroller_w, scroller_h);
1727
1728                 _navigationbar_visible_set_signal(EINA_TRUE);
1729
1730                 edje_object_signal_emit(elm_layout_edje_get(m_url_entry_layout),
1731                                                         "hide,favicon,signal", "");
1732                 edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_entry_layout),
1733                                                         "hide,favicon,signal", "");
1734
1735 #ifdef BROWSER_SCROLLER_BOUNCING
1736                 BROWSER_LOGD("<< lock browser scroller >>");
1737                 elm_object_scroll_freeze_pop(m_scroller);
1738                 elm_object_scroll_freeze_push(m_scroller);
1739 #endif
1740         } else {
1741                 if (m_most_visited_sites) {
1742                         if (elm_object_part_content_get(m_main_layout, "elm.swallow.most_visited_sites"))
1743                                 elm_object_part_content_unset(m_main_layout, "elm.swallow.most_visited_sites");
1744                         edje_object_signal_emit(elm_layout_edje_get(m_main_layout),
1745                                                         "hide,most_visited_sites,signal", "");
1746                         edje_object_signal_emit(elm_layout_edje_get(m_main_layout),
1747                                                 "hide,most_visited_sites_guide_text,signal", "");
1748
1749                         edje_object_signal_emit(elm_layout_edje_get(m_url_entry_layout), "url_guide_text,off,signal", "");
1750                         edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_entry_layout),
1751                                                                                 "url_guide_text,off,signal", "");
1752
1753                         delete m_most_visited_sites;
1754                         m_most_visited_sites = NULL;
1755
1756                         elm_object_item_disabled_set(m_add_bookmark_button, EINA_FALSE);
1757                 }
1758         }
1759         return EINA_TRUE;
1760 }
1761 #endif
1762
1763 void Browser_View::load_url(const char *url)
1764 {
1765         BROWSER_LOGD("[%s]", __func__);
1766 #if defined(FEATURE_MOST_VISITED_SITES)
1767         if (!url || !strlen(url)) {
1768                 if (!_show_most_visited_sites(EINA_TRUE))
1769                         BROWSER_LOGE("_show_most_visited_sites EINA_TRUE failed");
1770                 return;
1771
1772         } else {
1773                 if (!_show_most_visited_sites(EINA_FALSE))
1774                         BROWSER_LOGE("_show_most_visited_sites EINA_FALSE failed");
1775         }
1776 #endif
1777
1778         Evas_Object *edit_field_entry = br_elm_editfield_entry_get(_get_activated_url_entry());
1779         evas_object_smart_callback_del(edit_field_entry, "changed", __url_entry_changed_cb);
1780
1781         std::string full_url;
1782         if (_has_url_sheme(url))
1783                 full_url = url;
1784         else
1785                 full_url = std::string(BROWSER_HTTP_SCHEME) + std::string(url);
1786
1787         BROWSER_LOGD("full_url = [%s]", full_url.c_str());
1788
1789         _set_url_entry(full_url.c_str());
1790
1791         ewk_view_uri_set(m_focused_window->m_ewk_view, full_url.c_str());
1792 }
1793
1794 string Browser_View::get_title(Browser_Window *window)
1795 {
1796         const char *title = ewk_view_title_get(window->m_ewk_view);
1797         BROWSER_LOGD("title = [%s]", title);
1798
1799         if (!window->m_ewk_view && !window->m_title.empty())
1800                 return window->m_title;
1801
1802         if (!window->m_ewk_view)
1803                 return std::string();
1804
1805         if (!title) {
1806                 if (!window->m_title.empty())
1807                         return window->m_title;
1808                 else
1809                         return std::string();
1810         }
1811
1812         return std::string(title);
1813 }
1814
1815 string Browser_View::get_title(void)
1816 {
1817         const char *title = ewk_view_title_get(m_focused_window->m_ewk_view);
1818         BROWSER_LOGD("title = [%s]", title);
1819
1820         if (!title && m_focused_window->m_title.empty())
1821                 return std::string();
1822         else if (!title && !m_focused_window->m_title.empty())
1823                 return m_focused_window->m_title;
1824
1825         if (title && strlen(title))
1826                 return std::string(title);
1827
1828         return std::string();
1829 }
1830
1831 string Browser_View::get_url(Browser_Window *window)
1832 {
1833         BROWSER_LOGD("[%s]", __func__);
1834
1835         if (!window->m_ewk_view && !window->m_url.empty())
1836                 return window->m_url;
1837
1838         if (!window->m_ewk_view)
1839                 return std::string();
1840
1841         const char *uri = ewk_view_uri_get(window->m_ewk_view);
1842         BROWSER_LOGD("uri = [%s]", uri);
1843
1844         if (!uri || strlen(uri) == 0)
1845                 return std::string();
1846
1847         return std::string(uri);
1848 }
1849
1850 string Browser_View::get_url(void)
1851 {
1852         const char *uri = ewk_view_uri_get(m_focused_window->m_ewk_view);
1853         BROWSER_LOGD("uri = [%s]", uri);
1854
1855         if (!uri || strlen(uri) == 0)
1856                 return std::string();
1857
1858         return std::string(uri);
1859 }
1860
1861 /* If multi window is running, unset the navigation title object,
1862   * else set the navigation title object to show title object arrow.  */
1863 void Browser_View::unset_navigationbar_title_object(Eina_Bool is_unset)
1864 {
1865         BROWSER_LOGD("[%s] is_unset =%d", __func__, is_unset);
1866         Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
1867         if (is_unset) {
1868                 _navigationbar_visible_set_signal(EINA_FALSE);
1869                 elm_object_item_part_content_unset(top_it, ELM_NAVIFRAME_ITEM_OPTIONHEADER);
1870                 evas_object_hide(m_option_header_layout);
1871         } else {
1872                 Evas_Object *title_object = NULL;
1873                 title_object = elm_object_item_part_content_get(top_it, ELM_NAVIFRAME_ITEM_OPTIONHEADER);
1874                 if (!title_object) {
1875                         elm_object_item_part_content_set(top_it, ELM_NAVIFRAME_ITEM_OPTIONHEADER,
1876                                                                         m_option_header_layout);
1877                         evas_object_show(m_option_header_layout);
1878                 }
1879 #if defined(FEATURE_MOST_VISITED_SITES)
1880                 if (!is_most_visited_sites_running())
1881                         _navigationbar_visible_set_signal(EINA_FALSE);
1882 #endif
1883         }
1884 }
1885
1886 void Browser_View::__go_to_bookmark_cb(void *data, Evas_Object *obj, void *event_info)
1887 {
1888         BROWSER_LOGD("[%s]", __func__);
1889         if (!data)
1890                 return;
1891
1892         Browser_View *browser_view = (Browser_View *)data;
1893
1894         if (!m_data_manager->create_bookmark_view()) {
1895                 BROWSER_LOGE("m_data_manager->create_bookmark_view failed");
1896                 return;
1897         }
1898
1899         if (!m_data_manager->get_bookmark_view()->init()) {
1900                 BROWSER_LOGE("m_data_manager->get_bookmark_view()->init failed");
1901                 m_data_manager->destroy_bookmark_view();
1902         }
1903
1904         browser_view->_destroy_more_context_popup();
1905 }
1906
1907 void Browser_View::__backward_cb(void *data, Evas_Object *obj, void *event_info)
1908 {
1909         BROWSER_LOGD("[%s]", __func__);
1910         if (!data)
1911                 return;
1912
1913         Browser_View *browser_view = (Browser_View *)data;
1914         __title_back_button_clicked_cb(data, NULL, NULL);
1915
1916         browser_view->_destroy_more_context_popup();
1917 }
1918
1919 void Browser_View::__forward_cb(void *data, Evas_Object *obj, void *event_info)
1920 {
1921         BROWSER_LOGD("[%s]", __func__);
1922         if (!data)
1923                 return;
1924
1925         Browser_View *browser_view = (Browser_View *)data;
1926         browser_view->_destroy_more_context_popup();
1927         if (browser_view->m_focused_window->m_ewk_view
1928                 && ewk_view_forward_possible(browser_view->m_focused_window->m_ewk_view))
1929                 ewk_view_forward(browser_view->m_focused_window->m_ewk_view);
1930 }
1931
1932 #ifdef USE_META_TAG
1933 void Browser_View::__web_app_capable_get_cb(Eina_Bool capable, void* user_data)
1934 {
1935         BROWSER_LOGD("[%s]", __func__);
1936
1937         if (!user_data)
1938                 return;
1939
1940         Browser_View *browser_view = (Browser_View *)user_data;
1941         Evas_Object *webkit = browser_view->m_focused_window->m_ewk_view;
1942         if (capable) {
1943                 ewk_view_web_application_icon_url_get(webkit, __web_app_icon_url_get_cb, browser_view);
1944         }
1945 }
1946
1947 void Browser_View::__web_app_icon_url_get_cb(const char* icon_url, void* user_data)
1948 {
1949         BROWSER_LOGD("icon_url:%s", icon_url);
1950
1951         if (!user_data)
1952                 return;
1953
1954         Browser_View *browser_view = (Browser_View *)user_data;
1955
1956         /* make configure file */
1957         browser_view->m_meta_tag->create_config_xml((browser_view->get_url()).c_str(), browser_view->get_title().c_str(), NULL);
1958         if (!icon_url || strlen(icon_url) == 0) {
1959                 BROWSER_LOGD("Failed to get webapp icon url, make widget with default icon");
1960                 browser_view->m_meta_tag->wgt_install(NULL);
1961         } else {
1962                 BROWSER_LOGD("Succeed to get webapp icon url, make widget after icon downloaded");
1963                 /* get icon */
1964                 browser_view->m_meta_tag->request_download_icon(icon_url);
1965         }
1966 }
1967 #endif
1968
1969 void Browser_View::__url_editfield_share_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1970 {
1971         BROWSER_LOGD("[%s]", __func__);
1972         if (!data)
1973                 return;
1974
1975         Browser_View *browser_view = (Browser_View *)data;
1976         const char *selected_text = elm_entry_selection_get(br_elm_editfield_entry_get(browser_view->m_option_header_url_edit_field));
1977
1978         if (browser_view->_show_share_popup(selected_text))
1979                 BROWSER_LOGE("_show_share_popup failed");
1980 }
1981
1982 Eina_Bool Browser_View::__show_scissorbox_view_idler_cb(void *data)
1983 {
1984         if (!data)
1985                 return ECORE_CALLBACK_CANCEL;
1986
1987         Browser_View *browser_view = (Browser_View *)data;
1988
1989         if (browser_view->m_scissorbox_view)
1990                 delete browser_view->m_scissorbox_view;
1991
1992         browser_view->m_scissorbox_view = new(nothrow) Browser_Scissorbox_View(browser_view);
1993         if (!browser_view->m_scissorbox_view) {
1994                 BROWSER_LOGE("new Browser_Scissorbox_View failed");
1995                 return ECORE_CALLBACK_CANCEL;
1996         }
1997         if (!browser_view->m_scissorbox_view->init()) {
1998                 BROWSER_LOGE("m_scissorbox_view->init failed");
1999                 delete browser_view->m_scissorbox_view;
2000                 browser_view->m_scissorbox_view = NULL;
2001                 return ECORE_CALLBACK_CANCEL;
2002         }
2003
2004         elm_object_part_content_set(browser_view->m_main_layout, "elm.swallow.scissorbox",
2005                                                 browser_view->m_scissorbox_view->get_layout());
2006         edje_object_signal_emit(elm_layout_edje_get(browser_view->m_main_layout),
2007                                                         "show,scissorbox,signal", "");
2008
2009         edje_object_signal_emit(elm_layout_edje_get(browser_view->m_url_layout),
2010                                                         "show,scissorbox,signal", "");
2011         edje_object_signal_emit(elm_layout_edje_get(browser_view->m_option_header_url_layout),
2012                                                         "show,scissorbox,signal", "");
2013
2014
2015         elm_object_part_content_unset(browser_view->m_main_layout, "elm.swallow.control_bar");
2016         evas_object_hide(browser_view->m_control_bar);
2017
2018         return ECORE_CALLBACK_CANCEL;
2019 }
2020
2021 Eina_Bool Browser_View::_show_scissorbox_view(void)
2022 {
2023         BROWSER_LOGD("[%s]", __func__);
2024
2025 //      _hide_scroller_url_layout();
2026
2027         ecore_idler_add(__show_scissorbox_view_idler_cb, this);
2028
2029         return EINA_TRUE;
2030 }
2031
2032 void Browser_View::_destroy_scissorbox_view(void)
2033 {
2034         elm_object_part_content_unset(m_main_layout, "elm.swallow.scissorbox");
2035         edje_object_signal_emit(elm_layout_edje_get(m_main_layout), "hide,scissorbox,signal", "");
2036
2037         edje_object_signal_emit(elm_layout_edje_get(m_url_layout),
2038                                                         "hide,scissorbox,signal", "");
2039         edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_layout),
2040                                                         "hide,scissorbox,signal", "");
2041
2042         elm_object_part_content_unset(m_main_layout, "elm.swallow.control_bar");
2043
2044         if (m_scissorbox_view) {
2045                 delete m_scissorbox_view;
2046                 m_scissorbox_view = NULL;
2047         }
2048
2049         elm_object_part_content_set(m_main_layout, "elm.swallow.control_bar", m_control_bar);
2050         evas_object_show(m_control_bar);
2051 }
2052
2053 void Browser_View::__share_cb(void *data, Evas_Object *obj, void *event_info)
2054 {
2055         BROWSER_LOGD("[%s]", __func__);
2056         if (!data)
2057                 return;
2058
2059         Browser_View *browser_view = (Browser_View *)data;
2060         browser_view->_destroy_more_context_popup();
2061         browser_view->_show_share_popup(browser_view->get_url().c_str());
2062 }
2063
2064
2065 void Browser_View::__private_cb(void *data, Evas_Object *obj, void *event_info)
2066 {
2067         BROWSER_LOGD("[%s]", __func__);
2068         if (!data)
2069                 return;
2070
2071         Browser_View *browser_view = (Browser_View *)data;
2072         browser_view->m_is_private = !browser_view->m_is_private;
2073
2074         browser_view->m_is_private_item_pressed = EINA_TRUE;
2075
2076         elm_check_state_set(browser_view->m_private_check, browser_view->m_is_private);
2077
2078         if (browser_view->m_is_private) {
2079                 edje_object_signal_emit(elm_layout_edje_get(browser_view->m_url_entry_layout), "private,on,signal", "");
2080                 edje_object_signal_emit(elm_layout_edje_get(browser_view->m_option_header_url_entry_layout), "private,on,signal", "");
2081         } else {
2082                 edje_object_signal_emit(elm_layout_edje_get(browser_view->m_url_entry_layout), "private,off,signal", "");
2083                 edje_object_signal_emit(elm_layout_edje_get(browser_view->m_option_header_url_entry_layout), "private,off,signal", "");
2084         }
2085
2086         Ewk_Setting *setting = ewk_view_setting_get(browser_view->m_focused_window->m_ewk_view);
2087         ewk_setting_private_browsing_set(setting, browser_view->m_is_private);
2088 }
2089
2090 void Browser_View::__bookmark_cb(void *data, Evas_Object *obj, void *event_info)
2091 {
2092         BROWSER_LOGD("[%s]", __func__);
2093         if (!data)
2094                 return;
2095
2096         Browser_View *browser_view = (Browser_View *)data;
2097         int bookmark_id = -1;
2098         if(!m_data_manager->get_history_db()->is_in_bookmark(browser_view->get_url().c_str(), &bookmark_id)) {
2099                 if (!elm_icon_file_set(browser_view->m_bookmark_on_off_icon, BROWSER_IMAGE_DIR"/I01_icon_bookmark_on.png", NULL)) {
2100                         BROWSER_LOGE("elm_icon_file_set is failed.\n");
2101                         return;
2102                 }
2103                 m_data_manager->create_bookmark_db()->save_bookmark(BROWSER_BOOKMARK_MAIN_FOLDER_ID,
2104                                         browser_view->get_title().c_str(), browser_view->get_url().c_str());
2105                 browser_view->show_notify_popup(BR_STRING_ADDED_TO_BOOKMARKS, 3, EINA_TRUE);
2106         } else {
2107                 if (!elm_icon_file_set(browser_view->m_bookmark_on_off_icon, BROWSER_IMAGE_DIR"/I01_icon_bookmark_off.png", NULL)) {
2108                         BROWSER_LOGE("elm_icon_file_set is failed.\n");
2109                         return;
2110                 }
2111                 m_data_manager->create_bookmark_db()->delete_bookmark(bookmark_id);
2112                 browser_view->show_notify_popup(BR_STRING_REMOVED_TO_BOOKMARKS, 3, EINA_TRUE);
2113         }
2114
2115         m_data_manager->destroy_bookmark_db();
2116 }
2117
2118 void Browser_View::__bookmark_icon_changed_cb(void *data, Evas_Object *obj, void *event_info)
2119 {
2120         BROWSER_LOGD("[%s]", __func__);
2121         if (!data)
2122                 return;
2123
2124         Browser_View *browser_view = (Browser_View *)data;
2125 }
2126
2127 void Browser_View::__private_check_change_cb(void *data, Evas_Object *obj, void *event_info)
2128 {
2129         BROWSER_LOGD("[%s]", __func__);
2130         if (!data)
2131                 return;
2132
2133         Browser_View *browser_view = (Browser_View *)data;
2134         Eina_Bool state = elm_check_state_get((Evas_Object*)obj);
2135         browser_view->m_is_private = state;
2136
2137         if (browser_view->m_is_private_item_pressed) {
2138                 browser_view->m_is_private = !browser_view->m_is_private;
2139                 elm_check_state_set(browser_view->m_private_check, browser_view->m_is_private);
2140                 browser_view->m_is_private_item_pressed = EINA_FALSE;
2141         }
2142
2143         if (browser_view->m_is_private) {
2144                 edje_object_signal_emit(elm_layout_edje_get(browser_view->m_url_entry_layout), "private,on,signal", "");
2145                 edje_object_signal_emit(elm_layout_edje_get(browser_view->m_option_header_url_entry_layout), "private,on,signal", "");
2146         } else {
2147                 edje_object_signal_emit(elm_layout_edje_get(browser_view->m_url_entry_layout), "private,off,signal", "");
2148                 edje_object_signal_emit(elm_layout_edje_get(browser_view->m_option_header_url_entry_layout), "private,off,signal", "");
2149         }
2150
2151         Ewk_Setting *setting = ewk_view_setting_get(browser_view->m_focused_window->m_ewk_view);
2152         ewk_setting_private_browsing_set(setting, browser_view->m_is_private);
2153 }
2154
2155 void Browser_View::__expand_option_header_cb(void *data, Evas_Object *obj, void *event_info)
2156 {
2157         BROWSER_LOGD("[%s]", __func__);
2158         if (!data)
2159                 return;
2160
2161         Browser_View *browser_view = (Browser_View *)data;
2162
2163         browser_view->_navigationbar_title_clicked();
2164 }
2165
2166 void Browser_View::__add_bookmark_cb(void *data, Evas_Object *obj, void *event_info)
2167 {
2168         BROWSER_LOGD("[%s]", __func__);
2169         if (!data)
2170                 return;
2171
2172         Browser_View *browser_view = (Browser_View *)data;
2173         if (!m_data_manager->create_add_to_bookmark_view(browser_view->get_title(), browser_view->get_url())) {
2174                 BROWSER_LOGE("m_data_manager->create_add_to_bookmark_view failed");
2175                 return;
2176         }
2177
2178         if (!m_data_manager->get_add_to_bookmark_view()->init())
2179                 m_data_manager->destroy_add_to_bookmark_view();
2180 }
2181
2182 #if defined(HORIZONTAL_UI)
2183 void Browser_View::_rotate_multi_window(void)
2184 {
2185         BROWSER_LOGD("[%s]", __func__);
2186
2187         if (!m_data_manager->create_multi_window_view()) {
2188                 BROWSER_LOGE("m_data_manager->create_multi_window_view failed");
2189                 return;
2190         }
2191
2192         if (!m_data_manager->get_multi_window_view()->init(0.0, m_is_multi_window_grid_mode)) {
2193                 m_data_manager->destroy_multi_window_view();
2194                 BROWSER_LOGE("get_multi_window_view()->init failed");
2195                 return;
2196         }
2197
2198         ewk_view_suspend(m_focused_window->m_ewk_view);
2199
2200         _navigationbar_visible_set_signal(EINA_FALSE);
2201
2202         /* Hide the secure lock icon in title bar. */
2203         Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
2204         elm_object_item_part_content_set(top_it, ELM_NAVIFRAME_ITEM_ICON, NULL);
2205
2206         if (_get_edit_mode() != BR_NO_EDIT_MODE)
2207                 _set_edit_mode(BR_NO_EDIT_MODE);
2208
2209         m_is_multi_window_grid_mode = EINA_FALSE;
2210 }
2211 #endif
2212
2213 void Browser_View::__multi_window_cb(void *data, Evas_Object *obj, void *event_info)
2214 {
2215         BROWSER_LOGD("[%s]", __func__);
2216
2217         Browser_View *browser_view = (Browser_View *)data;
2218         browser_view->_destroy_more_context_popup();
2219
2220 #if defined(FEATURE_MOST_VISITED_SITES)
2221         if (browser_view->m_most_visited_sites && browser_view->m_most_visited_sites->is_guide_text_running())
2222                 return;
2223 #endif
2224
2225         if (m_data_manager->is_in_view_stack(BR_MULTI_WINDOW_VIEW)) {
2226                 BROWSER_LOGD("close multi window");
2227                 m_data_manager->get_multi_window_view()->close_multi_window();
2228                 return;
2229         }
2230
2231         if (!m_data_manager->create_multi_window_view()) {
2232                 BROWSER_LOGE("m_data_manager->create_multi_window_view failed");
2233                 return;
2234         }
2235
2236         if (!m_data_manager->get_multi_window_view()->init()) {
2237                 m_data_manager->destroy_multi_window_view();
2238                 BROWSER_LOGE("get_multi_window_view()->init failed");
2239                 return;
2240         }
2241
2242         /* Exception case to call ewk_view_suspend directly.
2243           * That's because the webpage is cleared, when call ewk_view_visibility_set suspend_ewk_view */
2244         ewk_view_suspend(browser_view->m_focused_window->m_ewk_view);
2245         ewk_view_visibility_set(browser_view->m_focused_window->m_ewk_view, EINA_FALSE);
2246
2247         browser_view->_navigationbar_visible_set_signal(EINA_FALSE);
2248
2249         /* Hide the secure lock icon in title bar. */
2250         Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
2251         elm_object_item_part_content_set(top_it, ELM_NAVIFRAME_ITEM_ICON, NULL);
2252
2253         if (browser_view->_get_edit_mode() != BR_NO_EDIT_MODE)
2254                 browser_view->_set_edit_mode(BR_NO_EDIT_MODE);
2255 }
2256
2257 void Browser_View::__new_window_cb(void *data, Evas_Object *obj, void *event_info)
2258 {
2259         BROWSER_LOGD("[%s]", __func__);
2260         if (!data)
2261                 return;
2262
2263         Browser_View *browser_view = (Browser_View *)data;
2264         Browser_Class *browser = browser_view->m_browser;
2265
2266         if (browser_view->m_resize_idler)
2267                 return;
2268
2269         std::vector<Browser_Window *> window_list = browser->get_window_list();
2270         if (window_list.size() >= BROWSER_MULTI_WINDOW_MAX_COUNT) {
2271                 /* If the multi window is max, delete the first one. */
2272                 /* if the first window is focused, delete second one(oldest one except first one) */
2273                 if (browser_view->m_focused_window != window_list[0])
2274                         browser->delete_window(window_list[0]);
2275                 else
2276                         browser->delete_window(window_list[1]);
2277         }
2278
2279         browser_view->m_created_new_window = browser->create_new_window(EINA_TRUE);
2280         if (!browser_view->m_created_new_window) {
2281                 BROWSER_LOGE("create_new_window failed");
2282                 return;
2283         }
2284         /* initialize the created webview first to connect ewk event callback functions such as load start, progress etc. */
2285         ewk_view_suspend(browser_view->m_focused_window->m_ewk_view);
2286
2287 #if defined(HORIZONTAL_UI)
2288                 if (browser_view->m_focused_window->m_landscape_snapshot_image) {
2289                         evas_object_del(browser_view->m_focused_window->m_landscape_snapshot_image);
2290                         browser_view->m_focused_window->m_landscape_snapshot_image = NULL;
2291                 }
2292 #endif
2293                 if (browser_view->m_focused_window->m_portrait_snapshot_image) {
2294                         evas_object_del(browser_view->m_focused_window->m_portrait_snapshot_image);
2295                         browser_view->m_focused_window->m_portrait_snapshot_image = NULL;
2296                 }
2297
2298 #if defined(HORIZONTAL_UI)
2299                 if (browser_view->is_landscape())
2300                         browser_view->m_focused_window->m_landscape_snapshot_image = browser_view->_capture_snapshot(browser_view->m_focused_window, BROWSER_MULTI_WINDOW_ITEM_RATIO);
2301                 else
2302 #endif
2303                         browser_view->m_focused_window->m_portrait_snapshot_image = browser_view->_capture_snapshot(browser_view->m_focused_window, BROWSER_MULTI_WINDOW_ITEM_RATIO);
2304
2305 #if defined(FEATURE_MOST_VISITED_SITES)
2306         if (!browser_view->_show_most_visited_sites(EINA_FALSE))
2307                 BROWSER_LOGE("_show_most_visited_sites EINA_FALSE failed");
2308 #endif
2309
2310         /* initialize the created webview first to connect ewk event callback functions such as load start, progress etc. */
2311         browser->ewk_view_init(browser_view->m_created_new_window->m_ewk_view);
2312
2313         if (!browser_view->_show_new_window_effect(browser_view->m_focused_window->m_ewk_view,
2314                                         browser_view->m_created_new_window->m_ewk_view))
2315                 BROWSER_LOGE("_show_new_window_effect failed");
2316
2317 #if defined(FEATURE_MOST_VISITED_SITES)
2318         browser_view->load_url(BROWSER_MOST_VISITED_SITES_URL);
2319 #else
2320         browser_view->load_url(BROWSER_BLANK_PAGE_URL);
2321 #endif
2322         return;
2323 }
2324
2325 Eina_Bool Browser_View::_call_internet_settings(void)
2326 {
2327         BROWSER_LOGD("[%s]", __func__);
2328
2329         m_browser_settings = new(nothrow) Browser_Settings_Class;
2330         if (!m_browser_settings) {
2331                 BROWSER_LOGE("new Browser_Settings_Class failed");
2332                 return EINA_FALSE;
2333         }
2334         if (!m_browser_settings->init()) {
2335                 BROWSER_LOGE("m_browser_settings->init failed");
2336                 delete m_browser_settings;
2337                 m_browser_settings = NULL;
2338
2339                 return EINA_FALSE;
2340         }
2341         return EINA_TRUE;
2342 }
2343
2344 void Browser_View::__internet_settings_cb(void *data, Evas_Object *obj, void *event_info)
2345 {
2346         BROWSER_LOGD("[%s]", __func__);
2347         if (!data)
2348                 return;
2349
2350         Browser_View *browser_view = (Browser_View *)data;
2351         browser_view->_destroy_more_context_popup();
2352
2353         if (!browser_view->_call_internet_settings())
2354                 BROWSER_LOGE("_call_internet_settings failed");
2355 }
2356
2357 void Browser_View::_update_find_word_index_text(const char *index_text, int index, int max_match_cnt)
2358 {
2359         BROWSER_LOGD("[%s]", __func__);
2360
2361         edje_object_part_text_set(elm_layout_edje_get(m_option_header_find_word_layout), "elm.index_text", index_text);
2362
2363         if (max_match_cnt == 0 || max_match_cnt == 1) {
2364                 elm_object_disabled_set(m_find_word_prev_button, EINA_TRUE);
2365                 elm_object_disabled_set(m_find_word_next_button, EINA_TRUE);
2366         } else if (index == 0 || index == 1) {
2367                 elm_object_disabled_set(m_find_word_prev_button, EINA_TRUE);
2368                 elm_object_disabled_set(m_find_word_next_button, EINA_FALSE);
2369                 if (index == 0 || (index == 1 && elm_object_focus_get(m_find_word_cancel_button)))
2370                         elm_object_focus_set(m_find_word_cancel_button, EINA_TRUE);
2371         } else if (index == max_match_cnt) {
2372                 elm_object_disabled_set(m_find_word_prev_button, EINA_FALSE);
2373                 elm_object_disabled_set(m_find_word_next_button, EINA_TRUE);
2374                 elm_object_focus_set(m_find_word_cancel_button, EINA_TRUE);
2375         } else {
2376                 if (elm_object_disabled_get(m_find_word_prev_button))
2377                         elm_object_disabled_set(m_find_word_prev_button, EINA_FALSE);
2378                 if (elm_object_disabled_get(m_find_word_next_button))
2379                         elm_object_disabled_set(m_find_word_next_button, EINA_FALSE);
2380         }
2381 }
2382 void Browser_View::__find_word_cb(void *data, Evas_Object *obj, void *event_info)
2383 {
2384         BROWSER_LOGD("[%s]", __func__);
2385         if (!data)
2386                 return;
2387
2388         Browser_View *browser_view = (Browser_View *)data;
2389         browser_view->_destroy_more_context_popup();
2390
2391         if (browser_view->_get_edit_mode() == BR_FIND_WORD_MODE)
2392                 return;
2393
2394         /* find word layout is only in naviframe optino header.
2395           * So expand the option header to show find word layout. */
2396         browser_view->_navigationbar_visible_set_signal(EINA_TRUE);
2397
2398         browser_view->_set_edit_mode(BR_FIND_WORD_MODE);
2399
2400         elm_object_focus_set(browser_view->m_find_word_edit_field, EINA_TRUE);
2401
2402         edje_object_part_text_set(elm_layout_edje_get(browser_view->m_option_header_find_word_layout), "elm.index_text", "0/0");
2403 }
2404
2405 Eina_Bool Browser_View::_call_download_manager(void)
2406 {
2407         service_h service_handle = NULL;
2408         BROWSER_LOGD("[%s]", __func__);
2409
2410         if (service_create(&service_handle) < 0) {
2411                 BROWSER_LOGE("Fail to create service handle");
2412                 return EINA_FALSE;
2413         }
2414         
2415         if (!service_handle) {
2416                 BROWSER_LOGE("service handle is NULL");
2417                 return EINA_FALSE;
2418         }
2419
2420         if (service_set_operation(service_handle, SERVICE_OPERATION_DOWNLOAD) < 0) {
2421                 BROWSER_LOGE("Fail to set service operation");
2422                 service_destroy(service_handle);
2423                 return EINA_FALSE;
2424         }
2425
2426         if (service_add_extra_data(service_handle, "mode", "view") < 0) {
2427                 BROWSER_LOGE("Fail to set extra data");
2428                 service_destroy(service_handle);
2429                 return EINA_FALSE;
2430         }
2431
2432         if (service_send_launch_request(service_handle, NULL, NULL) < 0) {
2433                 BROWSER_LOGE("Fail to launch service operation");
2434                 service_destroy(service_handle);
2435                 return EINA_FALSE;
2436         }
2437
2438         service_destroy(service_handle);
2439
2440         return EINA_TRUE;
2441 }
2442
2443 void Browser_View::__download_manager_cb(void *data, Evas_Object *obj, void *event_info)
2444 {
2445         BROWSER_LOGD("[%s]", __func__);
2446         if (!data)
2447                 return;
2448
2449         Browser_View *browser_view = (Browser_View *)data;
2450         browser_view->_destroy_more_context_popup();
2451
2452         if (!browser_view->_call_download_manager())
2453                 BROWSER_LOGE("_call_download_manager failed");
2454 }
2455
2456 void Browser_View::__send_via_message_cb(void *data, Evas_Object *obj, void *event_info)
2457 {
2458         BROWSER_LOGD("[%s]", __func__);
2459         if (!data)
2460                 return;
2461
2462         Browser_View *browser_view = (Browser_View *)data;
2463         browser_view->_destroy_more_context_popup();
2464
2465         if (!browser_view->_send_via_message(browser_view->get_url(), std::string()))
2466                 BROWSER_LOGE("_send_via_message failed");
2467 }
2468
2469 void Browser_View::__send_via_email_cb(void *data, Evas_Object *obj, void *event_info)
2470 {
2471         BROWSER_LOGD("[%s]", __func__);
2472         if (!data)
2473                 return;
2474
2475         Browser_View *browser_view = (Browser_View *)data;
2476         browser_view->_destroy_more_context_popup();
2477
2478         if (!browser_view->_send_via_email(browser_view->get_url()))
2479                 BROWSER_LOGE("_send_via_email failed");
2480 }
2481
2482 void Browser_View::__post_to_sns_cb(void *data, Evas_Object *obj, void *event_info)
2483 {
2484         BROWSER_LOGD("[%s]", __func__);
2485         if (!data)
2486                 return;
2487
2488         Browser_View *browser_view = (Browser_View*)data;
2489
2490         Elm_Object_Item *it = (Elm_Object_Item *)event_info;
2491         const char *label = elm_object_item_text_get(it);
2492         BROWSER_LOGD("label=[%s]", label);
2493         if (label && strlen(label)) {
2494                 if (!browser_view->_post_to_sns(std::string(label), browser_view->get_url()))
2495                         BROWSER_LOGE("_post_to_sns failed");
2496         }
2497
2498         browser_view->_destroy_more_context_popup();
2499 }
2500
2501 void Browser_View::_destroy_more_context_popup(void)
2502 {
2503         if (m_more_context_popup) {
2504                 evas_object_del(m_more_context_popup);
2505                 m_more_context_popup = NULL;
2506         }
2507
2508         edje_object_signal_emit(elm_layout_edje_get(m_main_layout), "hide,more_context_bg,signal", "");
2509 }
2510
2511 void Browser_View::__more_context_popup_dismissed_cb(void *data, Evas_Object *obj,
2512                                                                         void *event_info)
2513 {
2514         BROWSER_LOGD("[%s]", __func__);
2515         if (!data)
2516                 return;
2517
2518         Browser_View *browser_view = (Browser_View *)data;
2519         browser_view->_destroy_more_context_popup();
2520 }
2521
2522 void Browser_View::__clean_up_windows_test_cb(void *data, Evas_Object *obj, void *event_info)
2523 {
2524         if (!data)
2525                 return;
2526
2527         Browser_View *browser_view = (Browser_View *)data;
2528         browser_view->_destroy_more_context_popup();
2529
2530         m_browser->clean_up_windows();
2531 }
2532
2533 Eina_Bool Browser_View::_show_more_context_popup(void)
2534 {
2535         BROWSER_LOGD("[%s]", __func__);
2536
2537         _destroy_more_context_popup();
2538
2539         m_more_context_popup = elm_ctxpopup_add(m_win);
2540         if (!m_more_context_popup) {
2541                 BROWSER_LOGE("elm_ctxpopup_add failed");
2542                 return EINA_FALSE;
2543         }
2544
2545         elm_object_style_set(m_more_context_popup, "pass_event");
2546
2547         edje_object_signal_emit(elm_layout_edje_get(m_main_layout), "show,more_context_bg,signal", "");
2548
2549         evas_object_size_hint_weight_set(m_more_context_popup, EVAS_HINT_EXPAND,
2550                                                                 EVAS_HINT_EXPAND);
2551         evas_object_smart_callback_add(m_more_context_popup, "dismissed",
2552                                         __more_context_popup_dismissed_cb, this);
2553
2554         Elm_Object_Item *sub_menu = NULL;
2555         elm_ctxpopup_item_append(m_more_context_popup, BR_STRING_DOWNLOAD_MANAGER, NULL,
2556                                                         __download_manager_cb, this);
2557
2558         sub_menu = elm_ctxpopup_item_append(m_more_context_popup, BR_STRING_FIND_ON_PAGE, NULL,
2559                                                         __find_word_cb, this);
2560         if (
2561 #if defined(FEATURE_MOST_VISITED_SITES)
2562                 is_most_visited_sites_running() ||
2563 #endif
2564                 get_url().empty()
2565             || _get_edit_mode() == BR_FIND_WORD_MODE)
2566                 elm_object_item_disabled_set(sub_menu, EINA_TRUE);
2567
2568         sub_menu = elm_ctxpopup_item_append(m_more_context_popup, BR_STRING_SHARE, NULL,
2569                                                         __share_cb, this);
2570
2571         m_bookmark_on_off_icon = elm_icon_add(m_more_context_popup);
2572
2573         if(m_data_manager->get_history_db()->is_in_bookmark(get_url().c_str(), NULL)) {
2574                 if (!elm_icon_file_set(m_bookmark_on_off_icon, BROWSER_IMAGE_DIR"/I01_icon_bookmark_on.png", NULL)) {
2575                         BROWSER_LOGE("elm_icon_file_set is failed.\n");
2576                         return EINA_FALSE;
2577                 }
2578         } else {
2579                 if (!elm_icon_file_set(m_bookmark_on_off_icon, BROWSER_IMAGE_DIR"/I01_icon_bookmark_off.png", NULL)) {
2580                         BROWSER_LOGE("elm_icon_file_set is failed.\n");
2581                         return EINA_FALSE;
2582                 }
2583         }
2584         evas_object_size_hint_aspect_set(m_bookmark_on_off_icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
2585
2586         evas_object_propagate_events_set(m_bookmark_on_off_icon, EINA_FALSE);
2587         evas_object_repeat_events_set(m_bookmark_on_off_icon, EINA_FALSE);
2588         evas_object_smart_callback_add(m_bookmark_on_off_icon, "clicked", __bookmark_icon_changed_cb, this);
2589
2590         sub_menu = elm_ctxpopup_item_append(m_more_context_popup, BR_STRING_BOOKMARK, m_bookmark_on_off_icon,
2591                                                         __bookmark_cb, this);
2592         if (
2593 #if defined(FEATURE_MOST_VISITED_SITES)
2594                 is_most_visited_sites_running() ||
2595 #endif
2596                 get_url().empty()
2597             || _get_edit_mode() == BR_FIND_WORD_MODE)
2598                 elm_object_item_disabled_set(sub_menu, EINA_TRUE);
2599
2600         m_private_check = elm_check_add(m_more_context_popup);
2601         elm_object_style_set(m_private_check, "on&off");
2602         evas_object_smart_callback_add(m_private_check, "changed", __private_check_change_cb, this);
2603
2604         elm_check_state_set(m_private_check, m_is_private);
2605         evas_object_propagate_events_set(m_private_check, EINA_FALSE);
2606         evas_object_show(m_private_check);
2607
2608         elm_ctxpopup_item_append(m_more_context_popup, BR_STRING_PRIVATE, m_private_check,
2609                                                                 __private_cb, this);
2610
2611         elm_ctxpopup_item_append(m_more_context_popup, BR_STRING_SETTINGS, NULL,
2612                                                         __internet_settings_cb, this);
2613
2614         elm_ctxpopup_hover_parent_set(m_more_context_popup, m_navi_bar);
2615
2616         int controlbar_x = 0;
2617         int controlbar_y = 0;
2618         int controlbar_w = 0;
2619         int controlbar_h = 0;
2620         evas_object_geometry_get(m_control_bar, &controlbar_x, &controlbar_y, &controlbar_w, &controlbar_h);
2621
2622         evas_object_move(m_more_context_popup, (controlbar_w / 5) * 3 + controlbar_w / 10, controlbar_y + (controlbar_h / 2));
2623
2624         evas_object_show(m_more_context_popup);
2625
2626         return EINA_TRUE;
2627 }
2628
2629 void Browser_View::__more_cb(void *data, Evas_Object *obj, void *event_info)
2630 {
2631         BROWSER_LOGD("[%s]", __func__);
2632         if (!data)
2633                 return;
2634
2635         Browser_View *browser_view = (Browser_View *)data;
2636         if (browser_view->m_more_context_popup == NULL) {
2637                 if (!browser_view->_show_more_context_popup())
2638                         BROWSER_LOGE("_show_more_context_popup failed");
2639         } else {
2640                 browser_view->_destroy_more_context_popup();
2641         }
2642
2643         browser_view->_navigationbar_visible_set(EINA_TRUE);
2644 }
2645
2646 void Browser_View::_set_controlbar_back_forward_status(void)
2647 {
2648         BROWSER_LOGD("[%s]", __func__);
2649         Evas_Object *ewk_view = m_focused_window->m_ewk_view;
2650         if (!ewk_view)
2651                 return;
2652
2653         if (
2654 #if defined(FEATURE_MOST_VISITED_SITES)
2655                 is_most_visited_sites_running() ||
2656 #endif
2657                 get_url().empty())
2658                 elm_object_item_disabled_set(m_share_controlbar_button, EINA_TRUE);
2659         else
2660                 elm_object_item_disabled_set(m_share_controlbar_button, EINA_FALSE);
2661 }
2662
2663 void Browser_View::_set_multi_window_controlbar_text(int count)
2664 {
2665         BROWSER_LOGD("[%s]", __func__);
2666         if (count == 1) {
2667                 elm_toolbar_item_icon_set(m_multi_window_button, BROWSER_IMAGE_DIR"/01_controlbar_icon_multiview.png");
2668         } else {
2669                 char icon_path[100] = {0, };
2670                 snprintf(icon_path, sizeof(icon_path) - 1, "%s/01_controlbar_icon_multiview_0%d.png", BROWSER_IMAGE_DIR, count);
2671                 elm_toolbar_item_icon_set(m_multi_window_button, icon_path);
2672         }
2673 }
2674
2675 Evas_Object *Browser_View::_create_control_bar(void)
2676 {
2677         BROWSER_LOGD("[%s]", __func__);
2678         Evas_Object *controlbar_layout;
2679         controlbar_layout = elm_layout_add(m_navi_bar);
2680         if (!controlbar_layout) {
2681                 BROWSER_LOGE("elm_layout_add failed");
2682                 return NULL;
2683         }
2684         if (!elm_layout_file_set(controlbar_layout, BROWSER_EDJE_DIR"/browser-view-control-bar.edj",
2685                                 "browser-view-controlbar")) {
2686                 BROWSER_LOGE("Can not set layout browser-view-controlbar\n");
2687                 return NULL;
2688         }
2689         evas_object_size_hint_weight_set(controlbar_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2690         evas_object_size_hint_align_set(controlbar_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
2691         evas_object_show(controlbar_layout);
2692
2693         Evas_Object *control_bar;
2694         control_bar = elm_toolbar_add(m_navi_bar);
2695         if (control_bar) {
2696                 elm_object_style_set(control_bar, "browser/browser-view");
2697
2698                 elm_toolbar_shrink_mode_set(control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2699
2700                 /* New Window Button */
2701                 m_new_window_button = elm_toolbar_item_append(control_bar,
2702                                         BROWSER_IMAGE_DIR"/I01_controlbar_icon_new_window.png", NULL, __new_window_cb, this);
2703                 if (!m_new_window_button) {
2704                         BROWSER_LOGE("elm_toolbar_item_append failed");
2705                         return NULL;
2706                 }
2707
2708                 /* Multi Window Button */
2709                 m_multi_window_button = elm_toolbar_item_append(control_bar,
2710                                         BROWSER_IMAGE_DIR"/01_controlbar_icon_multiview.png", NULL, __multi_window_cb, this);
2711                 /* Bookmark Button */
2712                 elm_toolbar_item_append(control_bar, BROWSER_IMAGE_DIR"/I01_controlbar_icon_bookmark.png",
2713                                                 NULL, __go_to_bookmark_cb, this);
2714                 /* More menu Button */
2715                 m_more_button = elm_toolbar_item_append(control_bar,
2716                                         BROWSER_IMAGE_DIR"/I01_controlbar_icon_more.png", NULL, __more_cb, this);
2717                 if (!m_more_button) {
2718                         BROWSER_LOGE("elm_toolbar_item_append failed");
2719                         return NULL;
2720                 }
2721
2722                 elm_object_part_content_set(controlbar_layout, "elm.swallow.controlbar", control_bar);
2723
2724                 m_back_button = elm_button_add(control_bar);
2725                 if (!m_back_button) {
2726                         BROWSER_LOGE("elm_button_add failed");
2727                         return NULL;
2728                 }
2729                 elm_object_style_set(m_back_button, "browser/browser_view_controlbar_back");
2730
2731                 elm_object_part_content_set(controlbar_layout, "elm.swallow.back_button", m_back_button);
2732                 evas_object_smart_callback_add(m_back_button, "clicked", __backward_cb, this);
2733                 evas_object_show(m_back_button);
2734                 evas_object_show(control_bar);
2735         }
2736
2737         return controlbar_layout;
2738 }
2739
2740 /* 
2741 * Create two same url layouts similar with other browsers like android & safari.
2742 * The one(by _create_url_layout) is in the browser scroller and
2743 * the other(by _create_option_header_url_layout) is in the navigation bar option header.
2744 */
2745 Evas_Object *Browser_View::_create_option_header_url_layout(void)
2746 {
2747         BROWSER_LOGD("[%s]", __func__);
2748         Evas_Object *url_layout;
2749         url_layout = elm_layout_add(m_navi_bar);
2750         if (url_layout) {
2751                 if (!elm_layout_file_set(url_layout, BROWSER_EDJE_DIR"/browser-view-url-layout.edj",
2752                                         "browser/url_layout")) {
2753                         BROWSER_LOGE("Can not set layout theme[browser/url_layout]\n");
2754                         return NULL;
2755                 }
2756                 evas_object_size_hint_weight_set(url_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2757                 evas_object_size_hint_align_set(url_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
2758                 evas_object_show(url_layout);
2759
2760                 m_option_header_url_entry_layout = elm_layout_add(m_navi_bar);
2761                 if (!m_option_header_url_entry_layout) {
2762                         BROWSER_LOGE("elm_layout_add failed");
2763                         return NULL;
2764                 }
2765                 if (!elm_layout_file_set(m_option_header_url_entry_layout, BROWSER_EDJE_DIR"/browser-view-url-layout.edj",
2766                                         "elm/browser/urlentry/default")) {
2767                         BROWSER_LOGE("Can not set layout theme[browser, urlentry, default]\n");
2768                         return NULL;
2769                 }
2770                 elm_object_part_content_set(url_layout, "elm.swallow.url", m_option_header_url_entry_layout);
2771                 edje_object_signal_callback_add(elm_layout_edje_get(m_option_header_url_entry_layout),
2772                                                 "mouse,clicked,1", "elm.swallow.entry", __url_entry_clicked_cb, this);
2773
2774                 edje_object_signal_callback_add(elm_layout_edje_get(m_option_header_url_entry_layout),
2775                                                 "refresh_stop", "*", __refresh_button_clicked_cb, this);
2776
2777                 evas_object_show(m_option_header_url_entry_layout);
2778
2779                 m_option_header_url_edit_field = br_elm_url_editfield_add(m_navi_bar);
2780                 if (!m_option_header_url_edit_field) {
2781                         BROWSER_LOGE("elm_editfield_add failed");
2782                         return NULL;
2783                 }
2784                 elm_entry_context_menu_item_add(br_elm_editfield_entry_get(m_option_header_url_edit_field),
2785                                                                 BR_STRING_CTXMENU_SHARE, NULL, ELM_ICON_NONE, __url_editfield_share_clicked_cb, this);
2786
2787                 elm_object_part_content_set(m_option_header_url_entry_layout, "elm.swallow.entry", m_option_header_url_edit_field);
2788 //              br_elm_editfield_entry_single_line_set(m_option_header_url_edit_field, EINA_TRUE);
2789                 br_elm_editfield_eraser_set(m_option_header_url_edit_field, EINA_FALSE);
2790
2791                 Evas_Object *edit_field_entry = br_elm_editfield_entry_get(m_option_header_url_edit_field);
2792                 elm_entry_input_panel_layout_set(edit_field_entry, ELM_INPUT_PANEL_LAYOUT_URL);
2793                 ecore_imf_context_input_panel_event_callback_add((Ecore_IMF_Context *)elm_entry_imf_context_get(edit_field_entry),
2794                                                                 ECORE_IMF_INPUT_PANEL_STATE_EVENT, __url_entry_imf_event_cb, this);
2795
2796                 evas_object_smart_callback_add(edit_field_entry, "activated", __url_entry_enter_key_cb, this);
2797                 evas_event_callback_add(evas_object_evas_get(m_option_header_url_edit_field), EVAS_CALLBACK_CANVAS_FOCUS_OUT,
2798                                         __url_entry_focus_out_cb, this);
2799                 evas_object_show(m_option_header_url_edit_field);
2800
2801                 m_option_header_url_progressbar = elm_progressbar_add(m_navi_bar);
2802                 if (!m_option_header_url_progressbar) {
2803                         BROWSER_LOGE("elm_progressbar_add failed");
2804                         return NULL;
2805                 }
2806                 elm_object_style_set(m_option_header_url_progressbar, "browser/loading");
2807                 elm_object_part_content_set(m_option_header_url_entry_layout, "elm.swallow.progressbar", m_option_header_url_progressbar);
2808                 elm_progressbar_value_set(m_option_header_url_progressbar, 0);
2809                 evas_object_show(m_option_header_url_progressbar);
2810
2811                 m_option_header_url_progresswheel = elm_progressbar_add(m_navi_bar);
2812                 if (!m_option_header_url_progresswheel) {
2813                         BROWSER_LOGE("elm_progressbar_add failed");
2814                         return NULL;
2815                 }
2816
2817                 elm_object_style_set(m_option_header_url_progresswheel, "UIActivityIndicatorStyleWhite");
2818
2819                 elm_progressbar_pulse(m_option_header_url_progresswheel, EINA_FALSE);
2820                 elm_object_part_content_set(m_option_header_url_entry_layout, "elm.swallow.progress", m_option_header_url_progresswheel);
2821                 evas_object_show(m_option_header_url_progresswheel);
2822
2823                 m_option_header_cancel_button = elm_button_add(m_navi_bar);
2824                 if (!m_option_header_cancel_button) {
2825                         BROWSER_LOGE("elm_button_add failed");
2826                         return NULL;
2827                 }
2828                 evas_object_size_hint_weight_set(m_option_header_cancel_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2829                 evas_object_size_hint_align_set(m_option_header_cancel_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
2830                 elm_object_style_set(m_option_header_cancel_button, "browser/cancel_button");
2831                 elm_object_text_set(m_option_header_cancel_button, BR_STRING_CANCEL);
2832                 elm_object_part_content_set(url_layout, "elm.swallow.cancel", m_option_header_cancel_button);
2833                 evas_object_smart_callback_add(m_option_header_cancel_button, "clicked", __cancel_button_clicked_cb, this);
2834                 evas_object_show(m_option_header_cancel_button);
2835
2836                 m_option_header_title_backward_button = elm_button_add(m_navi_bar);
2837                 if (!m_option_header_title_backward_button) {
2838                         BROWSER_LOGE("elm_button_add failed");
2839                         return NULL;
2840                 }
2841                 elm_object_style_set(m_option_header_title_backward_button, "browser/backward");
2842                 elm_object_part_content_set(url_layout, "elm.swallow.backward_button", m_option_header_title_backward_button);
2843                 evas_object_smart_callback_add(m_option_header_title_backward_button, "clicked", __backward_button_clicked_cb, this);
2844                 elm_object_focus_allow_set(m_option_header_title_backward_button, EINA_FALSE);
2845                 evas_object_show(m_option_header_title_backward_button);
2846                 elm_object_disabled_set(m_option_header_title_backward_button, EINA_TRUE);
2847
2848                 m_option_header_title_forward_button = elm_button_add(m_navi_bar);
2849                 if (!m_option_header_title_forward_button) {
2850                         BROWSER_LOGE("elm_button_add failed");
2851                         return NULL;
2852                 }
2853                 elm_object_style_set(m_option_header_title_forward_button, "browser/forward");
2854                 elm_object_part_content_set(url_layout, "elm.swallow.forward_button", m_option_header_title_forward_button);
2855                 evas_object_smart_callback_add(m_option_header_title_forward_button, "clicked", __forward_button_clicked_cb, this);
2856                 elm_object_focus_allow_set(m_option_header_title_forward_button, EINA_FALSE);
2857                 evas_object_show(m_option_header_title_forward_button);
2858                 elm_object_disabled_set(m_option_header_title_forward_button, EINA_TRUE);
2859
2860                 /* for jump to top. */
2861                 evas_object_event_callback_add(url_layout, EVAS_CALLBACK_MOUSE_DOWN, __option_header_url_layout_mouse_down_cb, this);
2862         }
2863
2864         return url_layout;
2865 }
2866
2867 Evas_Object *Browser_View::_get_activated_url_entry(void)
2868 {
2869         /* The edit field in option header url layout is only valid for edit. 
2870           * If the edit field in browser scroller can have focus, there is so many focus issue.
2871           * So just make the edit field in option header editable. */
2872         return m_option_header_url_edit_field;
2873 }
2874
2875 void Browser_View::__url_entry_imf_event_cb(void *data, Ecore_IMF_Context *ctx, int value)
2876 {
2877         BROWSER_LOGD("value=%d", value);
2878         if (!data)
2879                 return;
2880
2881         Browser_View *browser_view = (Browser_View *)data;
2882         if (value == ECORE_IMF_INPUT_PANEL_STATE_HIDE) {
2883                 Evas_Object *edit_field_entry;
2884                 edit_field_entry = br_elm_editfield_entry_get(browser_view->_get_activated_url_entry());
2885                 elm_object_focus_set(edit_field_entry, EINA_FALSE);
2886
2887                 if (browser_view->m_edit_mode != BR_URL_ENTRY_EDIT_MODE_WITH_NO_IMF
2888                     && browser_view->m_edit_mode != BR_FIND_WORD_MODE)
2889                         browser_view->_set_edit_mode(BR_NO_EDIT_MODE);
2890                 else
2891                         return;
2892         } else if (value == ECORE_IMF_INPUT_PANEL_STATE_SHOW)
2893                 /* If the focus of url entry is set automatically, the keypad is also displayed automatically. */
2894                 /* eg. At url edit mode, lock the screen -> then unlock, the url entry will get focus. */
2895                 /* The keypad is also invoked, so set the edit mode. */
2896                 browser_view->_set_edit_mode(BR_URL_ENTRY_EDIT_MODE);
2897 }
2898
2899 void Browser_View::__url_entry_focus_out_cb(void *data, Evas *e, void *event_info)
2900 {
2901         BROWSER_LOGD("[%s]", __func__);
2902         if (!data)
2903                 return;
2904
2905         Browser_View *browser_view = (Browser_View *)data;
2906         Evas_Object *edit_field_entry;
2907         edit_field_entry = br_elm_editfield_entry_get(browser_view->_get_activated_url_entry());
2908
2909         Ecore_IMF_Context *ic = (Ecore_IMF_Context *)elm_entry_imf_context_get(edit_field_entry);
2910         if (!ic)
2911                 return;
2912
2913         ecore_imf_context_input_panel_hide(ic);
2914
2915         if (browser_view->m_edit_mode != BR_FIND_WORD_MODE)
2916                 browser_view->_set_edit_mode(BR_NO_EDIT_MODE);
2917 }
2918
2919 void Browser_View::_set_edit_mode(edit_mode mode)
2920 {
2921         BROWSER_LOGD("mode = %d", mode);
2922
2923         if (m_edit_mode == mode)
2924                 return;
2925
2926 #if defined(FEATURE_MOST_VISITED_SITES)
2927         if (mode == BR_NO_EDIT_MODE) {
2928                 if (m_most_visited_sites) {
2929                         edje_object_signal_emit(elm_layout_edje_get(m_url_entry_layout), "url_guide_text,on,signal", "");
2930                         edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_entry_layout),
2931                                                                 "url_guide_text,on,signal", "");
2932                 }
2933         } else {
2934                 if (m_most_visited_sites) {
2935                         edje_object_signal_emit(elm_layout_edje_get(m_url_entry_layout), "url_guide_text,off,signal", "");
2936                         edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_entry_layout),
2937                                                                 "url_guide_text,off,signal", "");
2938                 }
2939         }
2940 #endif
2941
2942         if (mode == BR_URL_ENTRY_EDIT_MODE || mode == BR_FIND_WORD_MODE
2943             || mode == BR_URL_ENTRY_EDIT_MODE_WITH_NO_IMF) {
2944 #ifdef BROWSER_SCROLLER_BOUNCING
2945                 /* If edit mode, lock the browser scroller */
2946                 _enable_webview_scroll();
2947 #endif
2948                 /* Make the browser scroller region y = 0 to show url bar all at edit mode. */
2949                 int scroller_x = 0;
2950                 int scroller_w = 0;
2951                 int scroller_h = 0;
2952                 elm_scroller_region_get(m_scroller, &scroller_x, NULL, &scroller_w, &scroller_h);
2953                 elm_scroller_region_show(m_scroller ,scroller_x, 0, scroller_w, scroller_h);
2954         }
2955
2956         if (mode == BR_URL_ENTRY_EDIT_MODE) {
2957                 /* change layout of url layout for edit mode. */
2958                 edje_object_signal_emit(elm_layout_edje_get(m_url_layout), "edit,url,on,signal", "");
2959                 edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_layout),
2960                                         "edit,url,on,signal", "");
2961
2962                 /* change refresh icon in url entry for edit mode. */
2963                 edje_object_signal_emit(elm_layout_edje_get(m_url_entry_layout), "edit,url,on,signal", "");
2964                 edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_entry_layout),
2965                                         "edit,url,on,signal", "");
2966
2967                 edje_object_signal_emit(elm_layout_edje_get(m_url_entry_layout), "hide,favicon,signal", "");
2968                 edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_entry_layout),
2969                                                                                 "hide,favicon,signal", "");
2970                 edje_object_signal_emit(elm_layout_edje_get(m_main_layout),
2971                                                                 "edit,url,on,signal", "");
2972         } else if (mode == BR_NO_EDIT_MODE || mode == BR_URL_ENTRY_EDIT_MODE_WITH_NO_IMF) {
2973                 if (m_edit_mode == BR_FIND_WORD_MODE) {
2974                         edje_object_signal_emit(elm_layout_edje_get(m_option_header_layout), "hide,find_word_layout,signal", "");
2975                         m_find_word->find_word("", Browser_Find_Word::BROWSER_FIND_WORD_FORWARD);
2976                 } else {
2977                         /* change layout of url layout for normal mode. */
2978                         edje_object_signal_emit(elm_layout_edje_get(m_url_layout), "edit,url,off,signal", "");
2979                         edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_layout),
2980                                                 "edit,url,off,signal", "");
2981
2982                         /* change refresh icon in url entry for normal mode. */
2983                         edje_object_signal_emit(elm_layout_edje_get(m_url_entry_layout), "edit,url,off,signal", "");
2984                         edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_entry_layout),
2985                                                 "edit,url,off,signal", "");
2986
2987 #if defined(FEATURE_MOST_VISITED_SITES)
2988                         if (!is_most_visited_sites_running())
2989 #endif
2990                         {
2991                                 if (m_focused_window->m_favicon)
2992                                         edje_object_signal_emit(elm_layout_edje_get(m_url_entry_layout),
2993                                                                                         "show,favicon,signal", "");
2994                                 _set_secure_icon();
2995                         }
2996                         if (m_focused_window->m_option_header_favicon) {
2997                                 edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_entry_layout),
2998                                                                                 "show,favicon,signal", "");
2999                                 _set_secure_icon();
3000                         }
3001
3002                         edje_object_signal_emit(elm_layout_edje_get(m_main_layout),
3003                                                 "edit,url,off,signal", "");
3004                         if (_is_loading()) {
3005                                 edje_object_signal_emit(elm_layout_edje_get(m_url_entry_layout), "loading,on,signal", "");
3006                                 edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_entry_layout),
3007                                                         "loading,on,signal", "");
3008                         }
3009                 }
3010         } else if (mode == BR_FIND_WORD_MODE) {
3011                 Evas_Object *find_word_edit_field_entry = br_elm_editfield_entry_get(m_find_word_edit_field);
3012                 elm_entry_entry_set(find_word_edit_field_entry, "");
3013
3014                 evas_object_smart_callback_del(find_word_edit_field_entry, "changed", __find_word_entry_changed_cb);
3015                 evas_object_smart_callback_add(find_word_edit_field_entry, "changed", __find_word_entry_changed_cb, this);
3016
3017                 edje_object_signal_emit(elm_layout_edje_get(m_option_header_layout), "show,find_word_layout,signal", "");
3018         }
3019
3020         m_edit_mode = mode;
3021
3022         /* To show favicon, if click url entry while loading, then cancel case. */
3023         _set_favicon();
3024 }
3025
3026 /* Workaround
3027   * The url entry of option header can't be focusable in case of switch TEXTBLOCK & elm entry.
3028   * So focus the url entry in idler callback.
3029   */
3030 static Eina_Bool __url_entry_focus_idler_cb(void *data)
3031 {
3032         Evas_Object *edit_field = (Evas_Object *)data;
3033         elm_object_focus_set(edit_field, EINA_TRUE);
3034
3035         Evas_Object *entry = br_elm_editfield_entry_get(edit_field);
3036         elm_entry_cursor_end_set(entry);
3037
3038         return ECORE_CALLBACK_CANCEL;
3039 }
3040
3041 void Browser_View::__url_entry_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
3042 {
3043         BROWSER_LOGD("[%s]", __func__);
3044         if (!data)
3045                 return;
3046
3047         Browser_View *browser_view = (Browser_View *)data;
3048
3049         if (browser_view->_is_loading())
3050                 browser_view->_stop_loading();
3051
3052         if (!browser_view->_navigationbar_visible_get()) {
3053                 /* The edit field in option header is only for edit url. */
3054                 browser_view->_navigationbar_visible_set_signal(EINA_TRUE);
3055         }
3056
3057         browser_view->_destroy_more_context_popup();
3058
3059         edit_mode mode = browser_view->_get_edit_mode();
3060
3061         browser_view->_set_edit_mode(BR_URL_ENTRY_EDIT_MODE);
3062
3063         if (mode == BR_NO_EDIT_MODE) {
3064                 Evas_Object *entry = br_elm_editfield_entry_get(browser_view->m_option_header_url_edit_field);
3065
3066                 elm_object_focus_set(browser_view->m_option_header_url_edit_field, EINA_TRUE);
3067                 elm_entry_cursor_end_set(entry);
3068
3069 //              ecore_idler_add(__url_entry_focus_idler_cb, browser_view->m_option_header_url_edit_field);
3070         }
3071 }
3072
3073 Eina_Bool Browser_View::_is_option_header_expanded(void)
3074 {
3075         return _navigationbar_visible_get();
3076 }
3077
3078 void Browser_View::__cancel_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
3079 {
3080         BROWSER_LOGD("[%s]", __func__);
3081         if (!data)
3082                 return;
3083
3084         Browser_View *browser_view = (Browser_View *)data;
3085         Evas_Object *ewk_view = browser_view->m_focused_window->m_ewk_view;
3086         if (!ewk_view)
3087                 return;
3088
3089         browser_view->_set_edit_mode(BR_NO_EDIT_MODE);
3090
3091         elm_object_signal_emit(browser_view->m_option_header_url_edit_field, "ellipsis_show,signal", "elm");
3092         elm_object_signal_emit(browser_view->m_url_edit_field, "ellipsis_show,signal", "elm");
3093
3094         browser_view->_set_url_entry(browser_view->get_url().c_str());
3095 }
3096
3097 void Browser_View::__refresh_button_clicked_cb(void *data, Evas_Object *obj,
3098                                                 const char *emission, const char *source)
3099 {
3100         BROWSER_LOGD("[%s]", __func__);
3101         if (!data)
3102                 return;
3103
3104         Browser_View *browser_view = (Browser_View *)data;
3105         if (browser_view->_get_edit_mode() == BR_URL_ENTRY_EDIT_MODE) {
3106                 elm_entry_entry_set(br_elm_editfield_entry_get(browser_view->m_url_edit_field), "");
3107                 elm_entry_entry_set(br_elm_editfield_entry_get(browser_view->m_option_header_url_edit_field), "");
3108         } else if(browser_view->_is_loading())
3109                 browser_view->_stop_loading();
3110         else
3111                 browser_view->_reload();
3112 }
3113
3114 void Browser_View::__url_entry_enter_key_cb(void *data, Evas_Object *obj, void *event_info)
3115 {
3116         BROWSER_LOGD("[%s]", __func__);
3117         if (!data)
3118                 return;
3119
3120         Browser_View *browser_view = (Browser_View *)data;
3121         Evas_Object *ewk_view = browser_view->m_focused_window->m_ewk_view;
3122         Evas_Object *edit_field_entry;
3123         edit_field_entry = br_elm_editfield_entry_get(browser_view->_get_activated_url_entry());
3124
3125         /* Workaround.
3126           * Give focus to option header cancel button to hide imf. */
3127         elm_object_focus_set(browser_view->m_option_header_cancel_button, EINA_TRUE);
3128
3129         char *url = elm_entry_markup_to_utf8(elm_entry_entry_get(edit_field_entry));
3130         BROWSER_LOGD("input url = [%s]", url);
3131
3132         if (url && strlen(url)) {
3133                 browser_view->load_url(url);
3134                 free(url);
3135         }
3136 }
3137
3138
3139 void Browser_View::__url_entry_changed_cb(void *data, Evas_Object *obj, void *event_info)
3140 {
3141         BROWSER_LOGD("[%s]", __func__);
3142 }
3143
3144 void Browser_View::__url_layout_mouse_down_cb(void *data, Evas* evas, Evas_Object *obj,
3145                                                                                 void *event_info)
3146 {
3147         BROWSER_LOGD("[%s]", __func__);
3148         if (!data)
3149                 return;
3150
3151         Evas_Event_Mouse_Down event = *(Evas_Event_Mouse_Down *)event_info;
3152
3153         Browser_View *browser_view = (Browser_View *)data;
3154
3155         Evas_Object *entry = br_elm_editfield_entry_get(browser_view->m_url_edit_field);
3156
3157         int entry_x = 0;
3158         int entry_y = 0;
3159         int entry_w = 0;
3160         int entry_h = 0;
3161         evas_object_geometry_get(browser_view->m_url_edit_field, &entry_x, &entry_y, &entry_w, &entry_h);
3162
3163         if (event.output.x > entry_x && event.output.x < entry_x + entry_w &&
3164             event.output.y > entry_y && event.output.y < entry_y + entry_h) {
3165                 elm_object_signal_emit(browser_view->m_option_header_url_edit_field, "ellipsis_hide,signal", "elm");
3166                 elm_object_signal_emit(browser_view->m_url_edit_field, "ellipsis_hide,signal", "elm");
3167         }
3168
3169         edit_mode mode = browser_view->_get_edit_mode();
3170         if (mode == BR_URL_ENTRY_EDIT_MODE || mode == BR_FIND_WORD_MODE
3171                     || mode == BR_URL_ENTRY_EDIT_MODE_WITH_NO_IMF) {
3172 #ifdef BROWSER_SCROLLER_BOUNCING
3173                 BROWSER_LOGD("<< lock browser scroller >>");
3174                 elm_object_scroll_freeze_pop(browser_view->m_scroller);
3175                 elm_object_scroll_freeze_push(browser_view->m_scroller);
3176 #endif
3177         }
3178 }
3179
3180 void Browser_View::__option_header_url_layout_mouse_down_cb(void *data, Evas* evas, Evas_Object *obj,
3181                                                                                 void *event_info)
3182 {
3183         BROWSER_LOGD("[%s]", __func__);
3184         if (!data)
3185                 return;
3186         Evas_Event_Mouse_Down event = *(Evas_Event_Mouse_Down *)event_info;
3187         Browser_View *browser_view = (Browser_View *)data;
3188
3189         Evas_Object *entry = br_elm_editfield_entry_get(browser_view->m_option_header_url_edit_field);
3190
3191         int entry_x = 0;
3192         int entry_y = 0;
3193         int entry_w = 0;
3194         int entry_h = 0;
3195         evas_object_geometry_get(browser_view->m_option_header_url_edit_field, &entry_x, &entry_y, &entry_w, &entry_h);
3196
3197         if (event.output.x > entry_x && event.output.x < entry_x + entry_w &&
3198             event.output.y > entry_y && event.output.y < entry_y + entry_h) {
3199                 elm_object_signal_emit(browser_view->m_option_header_url_edit_field, "ellipsis_hide,signal", "elm");
3200                 elm_object_signal_emit(browser_view->m_url_edit_field, "ellipsis_hide,signal", "elm");
3201         }
3202
3203         int icon_y = 0;
3204         if (event.output.y < icon_y)
3205                 browser_view->_jump_to_top();
3206 }
3207
3208 void Browser_View::_update_back_forward_buttons(void)
3209 {
3210         BROWSER_LOGD("[%s]", __func__);
3211         if (ewk_view_back_possible(m_focused_window->m_ewk_view)) {
3212                 elm_object_disabled_set(m_title_backward_button, EINA_FALSE);
3213                 elm_object_disabled_set(m_option_header_title_backward_button, EINA_FALSE);
3214         } else {
3215                 elm_object_disabled_set(m_title_backward_button, EINA_TRUE);
3216                 elm_object_disabled_set(m_option_header_title_backward_button, EINA_TRUE);
3217         }
3218
3219         if (ewk_view_forward_possible(m_focused_window->m_ewk_view)) {
3220                 elm_object_disabled_set(m_title_forward_button, EINA_FALSE);
3221                 elm_object_disabled_set(m_option_header_title_forward_button, EINA_FALSE);
3222         } else {
3223                 elm_object_disabled_set(m_title_forward_button, EINA_TRUE);
3224                 elm_object_disabled_set(m_option_header_title_forward_button, EINA_TRUE);
3225         }
3226 }
3227
3228 void Browser_View::__backward_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
3229 {
3230         BROWSER_LOGD("[%s]", __func__);
3231         if (!data)
3232                 return;
3233
3234         Browser_View *browser_view = (Browser_View *)data;
3235         ewk_view_back(browser_view->m_focused_window->m_ewk_view);
3236 }
3237
3238 void Browser_View::__forward_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
3239 {
3240         BROWSER_LOGD("[%s]", __func__);
3241         if (!data)
3242                 return;
3243
3244         Browser_View *browser_view = (Browser_View *)data;
3245         ewk_view_forward(browser_view->m_focused_window->m_ewk_view);
3246 }
3247
3248 Evas_Object *Browser_View::_create_url_layout(void)
3249 {
3250         BROWSER_LOGD("[%s]", __func__);
3251         Evas_Object *url_layout;
3252         url_layout = elm_layout_add(m_navi_bar);
3253         if (url_layout) {
3254                 if (!elm_layout_file_set(url_layout, BROWSER_EDJE_DIR"/browser-view-url-layout.edj",
3255                                         "browser/url_layout")) {
3256                         BROWSER_LOGE("Can not set layout theme[browser/url_layout]\n");
3257                         return NULL;
3258                 }
3259                 evas_object_size_hint_weight_set(url_layout, EVAS_HINT_EXPAND, 0.0);
3260                 evas_object_size_hint_align_set(url_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
3261                 evas_object_show(url_layout);
3262
3263                 /* create url entry layout in url layout */
3264                 m_url_entry_layout = elm_layout_add(m_navi_bar);
3265                 if (!m_url_entry_layout) {
3266                         BROWSER_LOGE("elm_layout_add failed");
3267                         return NULL;
3268                 }
3269                 if (!elm_layout_file_set(m_url_entry_layout, BROWSER_EDJE_DIR"/browser-view-url-layout.edj",
3270                                         "elm/browser/urlentry/default")) {
3271                         BROWSER_LOGE("Can not set layout theme[browser, urlentry, default]\n");
3272                         return NULL;
3273                 }
3274                 elm_object_part_content_set(url_layout, "elm.swallow.url", m_url_entry_layout);
3275                 evas_object_show(m_url_entry_layout);
3276
3277                 m_url_edit_field = br_elm_url_editfield_add(m_navi_bar);
3278                 if (!m_url_edit_field) {
3279                         BROWSER_LOGE("elm_editfield_add failed");
3280                         return NULL;
3281                 }
3282                 elm_object_part_content_set(m_url_entry_layout, "elm.swallow.entry", m_url_edit_field);
3283 //              br_elm_editfield_entry_single_line_set(m_url_edit_field, EINA_TRUE);
3284                 br_elm_editfield_eraser_set(m_url_edit_field, EINA_FALSE);
3285
3286                 Evas_Object *edit_field_entry = br_elm_editfield_entry_get(m_url_edit_field);
3287                 elm_entry_editable_set(edit_field_entry, EINA_FALSE);
3288                 /* The edit field in browser scroller is only for display.
3289                   * The edit url is only supported in option header url entry. */
3290                 elm_object_focus_allow_set(m_url_edit_field, EINA_FALSE);
3291                 elm_object_focus_allow_set(edit_field_entry, EINA_FALSE);
3292                 elm_entry_input_panel_enabled_set(edit_field_entry, EINA_FALSE);
3293
3294                 elm_entry_text_style_user_push(edit_field_entry, "DEFAULT='font_size=35 color=#3C3632 ellipsis=1'");
3295                 evas_object_show(m_url_edit_field);
3296
3297                 edje_object_signal_emit(elm_layout_edje_get(m_url_entry_layout), "disable_entry,signal", "");
3298                 edje_object_signal_callback_add(elm_layout_edje_get(m_url_entry_layout), "mouse,clicked,1", "block_entry",
3299                                                 __url_entry_clicked_cb, this);
3300
3301                 edje_object_signal_callback_add(elm_layout_edje_get(m_url_entry_layout), "refresh_stop", "*",
3302                                                 __refresh_button_clicked_cb, this);             
3303
3304                 m_url_progressbar = elm_progressbar_add(m_navi_bar);
3305                 if (!m_url_progressbar) {
3306                         BROWSER_LOGE("elm_progressbar_add failed");
3307                         return NULL;
3308                 }
3309                 elm_object_style_set(m_url_progressbar, "browser/loading");
3310                 elm_object_part_content_set(m_url_entry_layout, "elm.swallow.progressbar", m_url_progressbar);
3311                 elm_progressbar_value_set(m_url_progressbar, 0);
3312                 evas_object_show(m_url_progressbar);
3313
3314                 m_url_progresswheel = elm_progressbar_add(m_navi_bar);
3315                 if (!m_url_progresswheel) {
3316                         BROWSER_LOGE("elm_progressbar_add failed");
3317                         return NULL;
3318                 }
3319
3320                 elm_object_style_set(m_url_progresswheel, "UIActivityIndicatorStyleWhite");
3321                 elm_progressbar_pulse(m_url_progresswheel, EINA_FALSE);
3322                 elm_object_part_content_set(m_url_entry_layout, "elm.swallow.progress", m_url_progresswheel);
3323                 evas_object_show(m_url_progresswheel);
3324
3325                 m_cancel_button = elm_button_add(m_navi_bar);
3326                 if (!m_cancel_button) {
3327                         BROWSER_LOGE("elm_button_add failed");
3328                         return NULL;
3329                 }
3330                 evas_object_size_hint_weight_set(m_cancel_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
3331                 evas_object_size_hint_align_set(m_cancel_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
3332                 elm_object_style_set(m_cancel_button, "browser/cancel_button");
3333                 elm_object_text_set(m_cancel_button, BR_STRING_CANCEL);
3334                 elm_object_part_content_set(url_layout, "elm.swallow.cancel", m_cancel_button);
3335                 evas_object_smart_callback_add(m_cancel_button, "clicked", __cancel_button_clicked_cb, this);
3336                 evas_object_show(m_cancel_button);
3337
3338                 m_title_backward_button = elm_button_add(m_navi_bar);
3339                 if (!m_title_backward_button) {
3340                         BROWSER_LOGE("elm_button_add failed");
3341                         return NULL;
3342                 }
3343                 elm_object_style_set(m_title_backward_button, "browser/backward");
3344                 elm_object_part_content_set(url_layout, "elm.swallow.backward_button", m_title_backward_button);
3345                 evas_object_smart_callback_add(m_title_backward_button, "clicked", __backward_button_clicked_cb, this);
3346                 elm_object_focus_allow_set(m_title_backward_button, EINA_FALSE);
3347                 evas_object_show(m_title_backward_button);
3348                 elm_object_disabled_set(m_title_backward_button, EINA_TRUE);
3349
3350                 m_title_forward_button = elm_button_add(m_navi_bar);
3351                 if (!m_title_forward_button) {
3352                         BROWSER_LOGE("elm_button_add failed");
3353                         return NULL;
3354                 }
3355                 elm_object_style_set(m_title_forward_button, "browser/forward");
3356                 elm_object_part_content_set(url_layout, "elm.swallow.forward_button", m_title_forward_button);
3357                 evas_object_smart_callback_add(m_title_forward_button, "clicked", __forward_button_clicked_cb, this);
3358                 elm_object_focus_allow_set(m_title_forward_button, EINA_FALSE);
3359                 evas_object_show(m_title_forward_button);
3360                 elm_object_disabled_set(m_title_forward_button, EINA_TRUE);
3361
3362                 /* Workaround.
3363                  * When edit mode, if scroll down on url layout in browser view,
3364                  * the browser can be scrolled even though scroll locked.
3365                  * So, lock the browser scroller whenever touch on it if edit mode.
3366                  */
3367                 evas_object_event_callback_add(url_layout, EVAS_CALLBACK_MOUSE_DOWN, __url_layout_mouse_down_cb, this);
3368         }
3369
3370         return url_layout;
3371 }
3372
3373 Evas_Object *Browser_View::_create_find_word_layout(void)
3374 {
3375         BROWSER_LOGD("[%s]", __func__);
3376         Evas_Object *url_layout = elm_layout_add(m_navi_bar);
3377         if (!url_layout) {
3378                 BROWSER_LOGE("elm_layout_add failed");
3379                 return NULL;
3380         }
3381         if (!elm_layout_file_set(url_layout, BROWSER_EDJE_DIR"/browser-view-find-word-layout.edj",
3382                 "browser-view/find_word_layout")) {
3383                 BROWSER_LOGE("Can not set layout theme[browser-view/find_word_layout]\n");
3384                 return NULL;
3385         }
3386         evas_object_size_hint_weight_set(url_layout, EVAS_HINT_EXPAND, 0.0);
3387         evas_object_size_hint_align_set(url_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
3388         evas_object_show(url_layout);
3389
3390         /* create url entry layout in url layout */
3391         m_find_word_entry_layout = elm_layout_add(m_navi_bar);
3392         if (!m_find_word_entry_layout) {
3393                 BROWSER_LOGE("elm_layout_add failed");
3394                 return NULL;
3395         }
3396         if (!elm_layout_file_set(m_find_word_entry_layout, BROWSER_EDJE_DIR"/browser-view-find-word-layout.edj",
3397                                 "browser-view/find_word_editfield_layout")) {
3398                 BROWSER_LOGE("browser-view/find_word_editfield_layout failed");
3399                 return NULL;
3400         }
3401         elm_object_part_content_set(url_layout, "elm.swallow.url", m_find_word_entry_layout);
3402         evas_object_show(m_find_word_entry_layout);
3403
3404         edje_object_part_text_set(elm_layout_edje_get(url_layout), "title_text", BR_STRING_FIND_ON_PAGE);
3405
3406         m_find_word_edit_field = br_elm_find_word_editfield_add(m_navi_bar);
3407         if (!m_find_word_edit_field) {
3408                 BROWSER_LOGE("elm_editfield_add failed");
3409                 return NULL;
3410         }
3411         elm_object_part_content_set(m_find_word_entry_layout, "elm.swallow.entry", m_find_word_edit_field);
3412         evas_object_show(m_find_word_edit_field);
3413
3414         edje_object_signal_emit(elm_layout_edje_get(m_find_word_edit_field), "find_word,signal", "elm");
3415
3416 //      br_elm_editfield_entry_single_line_set(m_find_word_edit_field, EINA_TRUE);
3417         br_elm_editfield_eraser_set(m_find_word_edit_field, EINA_TRUE);
3418
3419         elm_object_signal_callback_add(m_find_word_edit_field, "elm,eraser,clicked", "elm",
3420                                                 __find_word_erase_button_clicked_cb, this);
3421
3422         Evas_Object *find_word_edit_field_entry = br_elm_editfield_entry_get(m_find_word_edit_field);
3423         elm_entry_entry_set(find_word_edit_field_entry, "");
3424         evas_object_smart_callback_add(find_word_edit_field_entry, "activated", __find_word_entry_enter_key_cb, this);
3425         elm_entry_input_panel_layout_set(find_word_edit_field_entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
3426         elm_entry_prediction_allow_set(find_word_edit_field_entry, EINA_FALSE);
3427         ecore_imf_context_input_panel_event_callback_add((Ecore_IMF_Context *)elm_entry_imf_context_get(find_word_edit_field_entry),
3428                         ECORE_IMF_INPUT_PANEL_STATE_EVENT, __find_word_entry_imf_event_cb, this);
3429         elm_entry_text_style_user_push(find_word_edit_field_entry, "DEFAULT='font_size=35 color=#3C363 2 ellipsis=1'");
3430         evas_object_show(m_find_word_edit_field);
3431
3432         m_find_word_cancel_button = elm_button_add(m_navi_bar);
3433         if (!m_find_word_cancel_button) {
3434                 BROWSER_LOGE("elm_button_add failed");
3435                 return NULL;
3436         }
3437         elm_object_style_set(m_find_word_cancel_button, "browser/cancel_button");
3438         elm_object_text_set(m_find_word_cancel_button, BR_STRING_CANCEL);
3439         elm_object_part_content_set(url_layout, "elm.swallow.cancel", m_find_word_cancel_button);
3440         evas_object_show(m_find_word_cancel_button);
3441
3442         evas_object_smart_callback_add(m_find_word_cancel_button, "clicked", __find_word_cancel_button_clicked_cb, this);
3443
3444         m_find_word_prev_button = elm_button_add(m_navi_bar);
3445         if (!m_find_word_prev_button) {
3446                 BROWSER_LOGE("elm_button_add failed");
3447                 return NULL;
3448         }
3449         elm_object_style_set(m_find_word_prev_button, "browser/find_word_prev_but");
3450         elm_object_part_content_set(url_layout, "elm.swallow.find_word_prev", m_find_word_prev_button);
3451         evas_object_show(m_find_word_prev_button);
3452         evas_object_smart_callback_add(m_find_word_prev_button, "clicked", __find_word_prev_button_clicked_cb, this);
3453
3454         m_find_word_next_button = elm_button_add(m_navi_bar);
3455         if (!m_find_word_next_button) {
3456                 BROWSER_LOGE("elm_button_add failed");
3457                 return NULL;
3458         }
3459         elm_object_style_set(m_find_word_next_button, "browser/find_word_next_but");
3460         elm_object_part_content_set(url_layout, "elm.swallow.find_word_next", m_find_word_next_button);
3461         evas_object_show(m_find_word_next_button);
3462         evas_object_smart_callback_add(m_find_word_next_button, "clicked", __find_word_next_button_clicked_cb, this);
3463
3464         const char *current_theme = elm_theme_get(NULL);
3465         if (current_theme && strstr(current_theme, "white")) {
3466         } else {
3467 //              edje_object_signal_emit(elm_layout_edje_get(m_find_word_entry_layout),
3468 //                                                                      "black_theme,signal", "");
3469         }
3470
3471         return url_layout;
3472 }
3473
3474 void Browser_View::__find_word_erase_button_clicked_cb(void *data, Evas_Object *obj,
3475                                                                 const char *emission, const char *source)
3476 {
3477         BROWSER_LOGD("[%s]", __func__);
3478         Browser_View *browser_view = (Browser_View *)data;
3479         edje_object_part_text_set(elm_layout_edje_get(browser_view->m_option_header_find_word_layout), "elm.index_text", "0/0");
3480 }
3481
3482 void Browser_View::__find_word_cancel_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
3483 {
3484         BROWSER_LOGD("[%s]", __func__);
3485         if (!data)
3486                 return;
3487
3488         Browser_View *browser_view = (Browser_View *)data;
3489         browser_view->_set_edit_mode(BR_NO_EDIT_MODE);
3490         browser_view->m_find_word->find_word("", Browser_Find_Word::BROWSER_FIND_WORD_FORWARD);
3491 }
3492
3493 void Browser_View::__find_word_prev_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
3494 {
3495         BROWSER_LOGD("[%s]", __func__);
3496         if (!data)
3497                 return;
3498
3499         Browser_View *browser_view = (Browser_View *)data;
3500         edje_object_signal_emit(elm_layout_edje_get(browser_view->m_main_layout), "hide,control_bar,no_animation,signal", "");
3501         Evas_Object *edit_field_entry = br_elm_editfield_entry_get(browser_view->m_find_word_edit_field);
3502         const char *find_word = elm_entry_entry_get(edit_field_entry);
3503         if (!find_word || !strlen(find_word))
3504                 return;
3505
3506         int index = browser_view->m_find_word->find_word(find_word, Browser_Find_Word::BROWSER_FIND_WORD_BACKWARD);
3507         if (index == 1)
3508                 elm_object_focus_set(browser_view->m_find_word_cancel_button, EINA_TRUE);
3509 }
3510 void Browser_View::__find_word_next_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
3511 {
3512         BROWSER_LOGD("[%s]", __func__);
3513         if (!data)
3514                 return;
3515
3516         Browser_View *browser_view = (Browser_View *)data;
3517         edje_object_signal_emit(elm_layout_edje_get(browser_view->m_main_layout), "hide,control_bar,no_animation,signal", "");
3518         Evas_Object *edit_field_entry = br_elm_editfield_entry_get(browser_view->m_find_word_edit_field);
3519         const char *find_word = elm_entry_entry_get(edit_field_entry);
3520         if (!find_word || !strlen(find_word))
3521                 return;
3522
3523         int index = browser_view->m_find_word->find_word(find_word, Browser_Find_Word::BROWSER_FIND_WORD_FORWARD);
3524         if (index == browser_view->m_find_word->get_match_max_value())
3525                 elm_object_focus_set(browser_view->m_find_word_cancel_button, EINA_TRUE);
3526 }
3527
3528 void Browser_View::__find_word_entry_imf_event_cb(void *data, Ecore_IMF_Context *ctx, int value)
3529 {
3530         BROWSER_LOGD("value=%d", value);
3531         if (!data)
3532                 return;
3533
3534         Browser_View *browser_view = (Browser_View *)data;
3535         Evas_Object *find_word_editfield_entry = br_elm_editfield_entry_get(browser_view->m_find_word_edit_field);
3536
3537         if (value == ECORE_IMF_INPUT_PANEL_STATE_HIDE)
3538                 elm_object_focus_set(find_word_editfield_entry, EINA_FALSE);
3539         else
3540                 elm_object_focus_set(find_word_editfield_entry, EINA_TRUE);
3541 }
3542
3543 void Browser_View::_enable_browser_scroller_scroll(void)
3544 {
3545 #ifdef BROWSER_SCROLLER_BOUNCING
3546         if (!ewk_view_vertical_panning_hold_get(m_focused_window->m_ewk_view)
3547              && !_is_loading() && !m_is_full_screen) {
3548                 BROWSER_LOGD("<< unlock browser scroller, lock ewk view >>");
3549                 elm_object_scroll_freeze_pop(m_scroller);
3550                 ewk_view_vertical_panning_hold_set(m_focused_window->m_ewk_view, EINA_TRUE);
3551         }
3552 #endif
3553 }
3554
3555 void Browser_View::_enable_webview_scroll(void)
3556 {
3557 #ifdef BROWSER_SCROLLER_BOUNCING
3558         if (ewk_view_vertical_panning_hold_get(m_focused_window->m_ewk_view)) {
3559                 BROWSER_LOGD("<< lock browser scroller, unlock ewk view >>");
3560                 elm_object_scroll_freeze_pop(m_scroller);
3561                 elm_object_scroll_freeze_push(m_scroller);
3562                 ewk_view_vertical_panning_hold_set(m_focused_window->m_ewk_view, EINA_FALSE);
3563         }
3564 #endif
3565 }
3566
3567 void Browser_View::__find_word_entry_enter_key_cb(void *data, Evas_Object *obj, void *event_info)
3568 {
3569         BROWSER_LOGD("[%s]", __func__);
3570         if (!data)
3571                 return;
3572
3573         Browser_View *browser_view = (Browser_View *)data;
3574         edje_object_signal_emit(elm_layout_edje_get(browser_view->m_main_layout), "hide,control_bar,no_animation,signal", "");
3575         Evas_Object *edit_field_entry = br_elm_editfield_entry_get(browser_view->m_find_word_edit_field);
3576         const char *find_word = elm_entry_entry_get(edit_field_entry);
3577         if (!find_word || !strlen(find_word))
3578                 return;
3579
3580         browser_view->m_find_word->init_index();
3581         browser_view->m_find_word->find_word(find_word, Browser_Find_Word::BROWSER_FIND_WORD_FORWARD);
3582
3583         elm_object_focus_set(edit_field_entry, EINA_FALSE);
3584         BROWSER_LOGD("find_word=[%s]", find_word);
3585 }
3586
3587 void Browser_View::__find_word_entry_changed_cb(void *data, Evas_Object *obj, void *event_info)
3588 {
3589         BROWSER_LOGD("[%s]", __func__);
3590         if (!data)
3591                 return;
3592
3593         Browser_View *browser_view = (Browser_View *)data;
3594         Evas_Object *edit_field_entry = br_elm_editfield_entry_get(browser_view->m_find_word_edit_field);
3595         const char *find_word = elm_entry_entry_get(edit_field_entry);
3596
3597         browser_view->m_find_word->init_index();
3598         browser_view->m_find_word->find_word(find_word, Browser_Find_Word::BROWSER_FIND_WORD_FORWARD);
3599 }
3600
3601
3602 void Browser_View::_navigationbar_title_clicked(void)
3603 {
3604         BROWSER_LOGD("[%s]", __func__);
3605         Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
3606         Evas_Object *content = elm_object_item_content_get(top_it);
3607         if (content != m_main_layout)
3608                 return;
3609
3610         if (m_data_manager->is_in_view_stack(BR_MULTI_WINDOW_VIEW)
3611 #if defined(FEATURE_MOST_VISITED_SITES)
3612             || is_most_visited_sites_running()
3613 #endif
3614             || m_edit_mode != BR_NO_EDIT_MODE)
3615             return;
3616
3617         int scroller_x = 0;
3618         int scroller_y = 0;
3619         int scroller_w = 0;
3620         int scroller_h = 0;
3621         elm_scroller_region_get(m_scroller, &scroller_x, &scroller_y, &scroller_w, &scroller_h);
3622
3623         if (scroller_y == 0) {
3624                 /* scroller is on top, the url bar in scroller is fully being displayed.
3625                  * Then, just show/hide the tool bar. */
3626                 const char* state = edje_object_part_state_get(elm_layout_edje_get(m_main_layout),
3627                                                                 "elm.swallow.control_bar", NULL);
3628                 if(state && !strncmp(state, "default", strlen("default")))
3629                         edje_object_signal_emit(elm_layout_edje_get(m_main_layout), "show,control_bar,signal", "");
3630                 else {
3631 #ifdef BROWSER_SCROLLER_BOUNCING
3632                         int url_layout_h = 0;
3633                         evas_object_geometry_get(m_url_layout, NULL, NULL, NULL, &url_layout_h);
3634                         elm_scroller_region_bring_in(m_scroller ,scroller_x, url_layout_h, scroller_w, scroller_h);
3635 #endif
3636                 }
3637         } else {
3638                 if (_is_loading()) {
3639                 } else {
3640                         Eina_Bool visible = _navigationbar_visible_get();
3641 #ifdef BROWSER_SCROLLER_BOUNCING
3642                         _navigationbar_visible_set(!visible);
3643 #endif
3644                 }
3645         }
3646 }
3647
3648
3649 void Browser_View::_jump_to_top(void)
3650 {
3651         BROWSER_LOGD("[%s]", __func__);
3652         Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
3653         Evas_Object *content = elm_object_item_content_get(top_it);
3654         if (content != m_main_layout)
3655                 return;
3656
3657         if (m_data_manager->is_in_view_stack(BR_MULTI_WINDOW_VIEW)
3658 #if defined(FEATURE_MOST_VISITED_SITES)
3659             || is_most_visited_sites_running()
3660 #endif
3661             || m_edit_mode != BR_NO_EDIT_MODE)
3662                 return;
3663
3664         int browser_scroller_x = 0;
3665         int browser_scroller_w = 0;
3666         int browser_scroller_h = 0;
3667         elm_scroller_region_get(m_scroller, &browser_scroller_x, NULL,
3668                                 &browser_scroller_w, &browser_scroller_h);
3669         elm_scroller_region_show(m_scroller, browser_scroller_x, 0, browser_scroller_w, browser_scroller_h);
3670
3671         ewk_view_top_of_contents_go(m_focused_window->m_ewk_view);
3672 }
3673
3674 void Browser_View::delete_non_user_created_windows(void)
3675 {
3676         BROWSER_LOGD("[%s]", __func__);
3677         /* Delete no-backward history window. */
3678         std::vector<Browser_Window *> window_list = m_browser->get_window_list();
3679         int window_count = window_list.size();
3680
3681         if (window_count <= 1)
3682                 return;
3683
3684         int i = 0;
3685         for (i = 0 ; i < window_count ; i++) {
3686                 BROWSER_LOGD("focusable_window = %d, window[%d]=%d", m_focused_window, i, window_list[i]);
3687                 if (window_list[i]->m_ewk_view
3688                      &&!ewk_view_back_possible(window_list[i]->m_ewk_view)
3689                      && window_list[i] != m_focused_window
3690                      && window_list[i]->m_created_by_user == EINA_FALSE) {
3691                         BROWSER_LOGD("delete window index=[%d]", i);
3692                         m_browser->delete_window(window_list[i]);
3693
3694                         /* Set title & url with the focused window. */
3695                         _set_navigationbar_title(get_title().c_str());
3696                         _set_url_entry(get_url().c_str());
3697                         _set_controlbar_back_forward_status();
3698                         if (!_set_favicon())
3699                                 BROWSER_LOGE("_set_favicon failed");
3700                 }
3701         }
3702 }
3703
3704 void Browser_View::__title_back_button_clicked_cb(void *data , Evas_Object *obj, void *event_info)
3705 {
3706         BROWSER_LOGD("[%s]", __func__);
3707         if (!data)
3708                 return;
3709
3710         if (m_data_manager->is_in_view_stack(BR_MULTI_WINDOW_VIEW)) {
3711                 BROWSER_LOGD("close multi window");
3712                 m_data_manager->get_multi_window_view()->close_multi_window();
3713                 return;
3714         }
3715
3716         Browser_View *browser_view = (Browser_View *)data;
3717
3718         if (browser_view->m_focused_window->m_ewk_view
3719             && ewk_view_back_possible(browser_view->m_focused_window->m_ewk_view))
3720                 ewk_view_back(browser_view->m_focused_window->m_ewk_view);
3721         else {
3722                 if (browser_view->m_focused_window->m_parent) {
3723                         /* Save current window pointer to delete later. */
3724                         Browser_Window *delete_window = browser_view->m_focused_window;
3725                         browser_view->m_browser->set_focused_window(browser_view->m_focused_window->m_parent);
3726                         browser_view->m_browser->delete_window(delete_window);
3727
3728                         /* Set title & url with the focused window. */
3729                         browser_view->_set_navigationbar_title(browser_view->get_title().c_str());
3730                         browser_view->_set_url_entry(browser_view->get_url().c_str());
3731                         browser_view->_set_controlbar_back_forward_status();
3732                         if (!browser_view->_set_favicon())
3733                                 BROWSER_LOGE("_set_favicon failed");
3734                 } else {
3735                         elm_win_lower(browser_view->m_win);
3736
3737                         browser_view->delete_non_user_created_windows();
3738                 }
3739         }
3740 }
3741
3742 void Browser_View::__scroller_scroll_cb(void *data, Evas_Object *obj, void *event_info)
3743 {
3744 #ifdef BROWSER_SCROLLER_BOUNCING
3745         if (!data)
3746                 return;
3747
3748         Browser_View *browser_view = (Browser_View *)data;
3749
3750         int browser_scroller_x = 0;
3751         int browser_scroller_y = 0;
3752         int browser_scroller_w = 0;
3753         int browser_scroller_h = 0;
3754         elm_scroller_region_get(browser_view->m_scroller, &browser_scroller_x, &browser_scroller_y,
3755                                 &browser_scroller_w, &browser_scroller_h);
3756
3757         int url_layout_h = 0;
3758         evas_object_geometry_get(browser_view->m_url_layout, NULL, NULL, NULL, &url_layout_h);
3759
3760         /* Workaround.
3761          * If user scrolls up/down near the url bar edge, the movement of scroller is not smooth.
3762          * It's because the browser scroller region y is also bouncing.
3763          * So if the scroller region y is bigger than the height of url bar(65 pixel),
3764          * make the region y to url bar height by force. */
3765         if (browser_scroller_y > url_layout_h)
3766                 elm_scroller_region_show(browser_view->m_scroller, browser_scroller_x, url_layout_h,
3767                                         browser_scroller_w, browser_scroller_h);
3768 #endif
3769 }
3770
3771 Eina_Bool Browser_View::_is_loading(void)
3772 {
3773         if (!m_focused_window || !m_focused_window->m_ewk_view)
3774                 return EINA_FALSE;
3775
3776         double progress = ewk_view_load_progress_get(m_focused_window->m_ewk_view);
3777 //      BROWSER_LOGD("progress=%f", progress);
3778         if (progress == 1.0f || progress < 0.05f)
3779                 return EINA_FALSE;
3780         else
3781                 return EINA_TRUE;
3782 }
3783
3784 #if defined(HORIZONTAL_UI)
3785 Eina_Bool Browser_View::is_available_to_rotate(void)
3786 {
3787         BROWSER_LOGD("\n");
3788         if (m_data_manager->is_in_view_stack(BR_MULTI_WINDOW_VIEW)) {
3789                 if (m_data_manager->get_multi_window_view()->is_reordering_mode())
3790                         return EINA_FALSE;
3791         }
3792
3793         if (m_scissorbox_view)
3794                 return EINA_FALSE;
3795
3796         return EINA_TRUE;
3797 }
3798
3799 Eina_Bool Browser_View::__rotate_multi_window_cb(void *data)
3800 {
3801         BROWSER_LOGD("[%s]", __func__);
3802         Browser_View *browser_view = (Browser_View *)data;
3803         browser_view->m_multi_window_rotate_timer = NULL;
3804         browser_view->_rotate_multi_window();
3805
3806         return ECORE_CALLBACK_CANCEL;
3807 }
3808
3809 void Browser_View::rotate(int degree)
3810 {
3811         BROWSER_LOGD("\n");
3812         /* In landscape mode, if the url bar is not displayed -> rotate to portrait mode.
3813          * Then the url bar is displayed. To avoid this issue, remember the scroller region y,
3814          * then restore it at portrait mode. */
3815         int scroller_region_y = 0;
3816         elm_scroller_region_get(m_scroller, NULL, &scroller_region_y, NULL, NULL);
3817         m_scroller_region_y = scroller_region_y;
3818
3819         m_rotate_degree = degree;
3820
3821 #if defined(FEATURE_MOST_VISITED_SITES)
3822         if (m_most_visited_sites)
3823                 m_most_visited_sites->rotate();
3824 #endif
3825         if (m_scissorbox_view)
3826                 _destroy_scissorbox_view();
3827 }
3828 #endif
3829 void Browser_View::suspend_ewk_view(Evas_Object *ewk_view)
3830 {
3831         BROWSER_LOGD("[%s]", __func__);
3832
3833         std::vector<Browser_Window *> window_list = m_browser->get_window_list();
3834         for (int i = 0 ; i < window_list.size() ; i++) {
3835                 if (window_list[i]->m_ewk_view_layout) {
3836                         edje_object_signal_emit(elm_layout_edje_get(window_list[i]->m_ewk_view_layout),
3837                                                                 "unresizable,signal", "");
3838
3839                 }
3840         }
3841
3842         ewk_view_suspend(ewk_view);
3843         ewk_view_visibility_set(ewk_view, EINA_FALSE);
3844 }
3845
3846 void Browser_View::resume_ewk_view(Evas_Object *ewk_view)
3847 {
3848         BROWSER_LOGD("[%s]", __func__);
3849
3850         if (m_data_manager->is_in_view_stack(BR_MULTI_WINDOW_VIEW))
3851                 return;
3852
3853         ewk_view_resume(ewk_view);
3854         ewk_view_visibility_set(ewk_view, EINA_TRUE);
3855 }
3856
3857 void Browser_View::pause(void)
3858 {
3859         BROWSER_LOGD("[%s]", __func__);
3860         if (_is_loading()) {
3861                 /* Because the progress wheel in url bar has about 15% cpu consumption.
3862                   * So, pause the animation when browser goes to background. It's nonsense!*/
3863                 if (m_option_header_url_progresswheel)
3864                         elm_progressbar_pulse(m_option_header_url_progresswheel, EINA_FALSE);
3865                 if (m_url_progresswheel)
3866                         elm_progressbar_pulse(m_url_progresswheel, EINA_FALSE);
3867         }
3868
3869         set_full_sreen(EINA_FALSE);
3870
3871         ug_pause();
3872
3873         suspend_ewk_view(m_focused_window->m_ewk_view);
3874
3875         /* stop vibration */
3876         _haptic_device_stop();
3877 }
3878
3879 void Browser_View::resume(void)
3880 {
3881         BROWSER_LOGD("[%s]", __func__);
3882         if (_is_loading()) {
3883                 /* Because the progress wheel in url bar has about 15% cpu consumption.
3884                   * So, pause the animation when browser goes to background. It's nonsense! */
3885                 if (m_option_header_url_progresswheel)
3886                         elm_progressbar_pulse(m_option_header_url_progresswheel, EINA_TRUE);
3887                 if (m_url_progresswheel)
3888                         elm_progressbar_pulse(m_url_progresswheel, EINA_TRUE);
3889         }
3890
3891         ug_resume();
3892
3893         resume_ewk_view(m_focused_window->m_ewk_view);
3894 }
3895
3896 void Browser_View::reset(void)
3897 {
3898         BROWSER_LOGD("[%s]", __func__);
3899         if (m_focused_window && m_focused_window->m_ewk_view)
3900                 resume();
3901 }
3902
3903 Eina_Bool Browser_View::__webview_layout_resize_idler_cb(void *data)
3904 {
3905         BROWSER_LOGD("\n");
3906         if (!data)
3907                 return ECORE_CALLBACK_CANCEL;
3908
3909         Browser_View *browser_view = (Browser_View *)data;
3910
3911         browser_view->m_resize_idler = NULL;
3912
3913         edje_object_signal_emit(elm_layout_edje_get(browser_view->m_focused_window->m_ewk_view_layout),
3914                                                 "resizable,signal", "");
3915
3916         int content_w = 0;
3917         int content_h = 0;
3918 #ifdef BROWSER_SCROLLER_BOUNCING        
3919         edje_object_part_geometry_get(elm_layout_edje_get(browser_view->m_main_layout),
3920                                 "elm.swallow.content", NULL, NULL, &content_w, &content_h);
3921 #else
3922         edje_object_part_geometry_get(elm_layout_edje_get(browser_view->m_focused_window->m_ewk_view_layout),
3923                                 "elm.swallow.webview", NULL, NULL, &content_w, &content_h);
3924 #endif
3925         if (browser_view->m_is_full_screen) {
3926                 int browser_scroller_y = 0;
3927                 evas_object_geometry_get(browser_view->m_scroller, NULL, &browser_scroller_y, NULL, NULL);
3928                 evas_object_resize(browser_view->m_focused_window->m_ewk_view,
3929                                         content_w, content_h + browser_scroller_y);
3930         } else {
3931                 evas_object_size_hint_min_set(browser_view->m_focused_window->m_ewk_view_layout,
3932                                         content_w, content_h);
3933                 evas_object_resize(browser_view->m_focused_window->m_ewk_view_layout,
3934                                         content_w, content_h);
3935         }
3936
3937         return ECORE_CALLBACK_CANCEL;
3938 }
3939
3940 Eina_Bool Browser_View::__scroller_bring_in_idler_cb(void *data)
3941 {
3942         BROWSER_LOGD("[%s]", __func__);
3943         if (!data)
3944                 return ECORE_CALLBACK_CANCEL;
3945         Browser_View *browser_view = (Browser_View *)data;
3946
3947         int url_layout_h = 0;
3948         evas_object_geometry_get(browser_view->m_url_layout, NULL, NULL, NULL, &url_layout_h);
3949
3950         BROWSER_LOGD("<< elm_scroller_region_bring_in , url_layout_h=%d >>", url_layout_h);
3951         int browser_scroller_x = 0;
3952         int browser_scroller_w = 0;
3953         int browser_scroller_h = 0;                     
3954         elm_scroller_region_get(browser_view->m_scroller, &browser_scroller_x, NULL,
3955                                         &browser_scroller_w, &browser_scroller_h);
3956         elm_scroller_region_show(browser_view->m_scroller, browser_scroller_x, url_layout_h,
3957                                         browser_scroller_w, browser_scroller_h);
3958
3959         return ECORE_CALLBACK_CANCEL;
3960 }
3961
3962 /* Workaround.
3963  * If user invokes the keypad via input field or url entry, resize the webview.
3964  * The only scroller resize is called when the keypad is launched.
3965  * Other elements like layout, conformant resize event doesn't come. */
3966 void Browser_View::__scroller_resize_cb(void* data, Evas* evas, Evas_Object* obj, void* ev)
3967 {
3968         BROWSER_LOGD("[%s]", __func__);
3969         if (!data)
3970                 return;
3971
3972         Browser_View *browser_view = (Browser_View *)data;
3973
3974         if (browser_view->m_is_full_screen) {
3975                 ecore_idler_add(__webview_layout_resize_idler_cb, browser_view);
3976                 return;
3977         }
3978
3979         int scroller_w = 0;
3980         int scroller_h = 0;
3981         evas_object_geometry_get(browser_view->m_scroller, NULL, NULL, &scroller_w, &scroller_h);
3982         std::vector<Browser_Window *> window_list = m_browser->get_window_list();
3983
3984         for (int i = 0 ; i < window_list.size() ; i++) {
3985                 if (window_list[i]->m_ewk_view_layout) {
3986                         edje_object_signal_emit(elm_layout_edje_get(window_list[i]->m_ewk_view_layout),
3987                                                                 "resizable,signal", "");
3988
3989                         evas_object_size_hint_min_set(window_list[i]->m_ewk_view_layout,
3990                                                                                 scroller_w, scroller_h);
3991                         evas_object_resize(window_list[i]->m_ewk_view_layout,
3992                                                                         scroller_w, scroller_h);
3993                 }
3994         }
3995
3996 #if defined(HORIZONTAL_UI)
3997         Evas_Object *edit_field_entry;
3998         edit_field_entry = br_elm_editfield_entry_get(browser_view->_get_activated_url_entry());
3999         Ecore_IMF_Context *ic = (Ecore_IMF_Context *)elm_entry_imf_context_get(edit_field_entry);
4000         /* If the keypad from webkit is invoked in landscape mode, the visible viewport is too narrow.
4001           * So, hide the url bar in browser scroller by bring in.
4002           * The direct bring in call doesn't work, so do it by idler. */
4003         if (ic && browser_view->is_landscape()) {
4004                 Ecore_IMF_Input_Panel_State imf_state = ecore_imf_context_input_panel_state_get(ic);
4005                 /* Strangley, The state of webkit's imf is show-state even if the ic is url entry.
4006                   * However, this is good for browser without webkit's ic get API. */
4007                 if (imf_state == ECORE_IMF_INPUT_PANEL_STATE_SHOW) {
4008                         browser_view->_enable_browser_scroller_scroll();
4009                         ecore_idler_add(__scroller_bring_in_idler_cb, browser_view);
4010                 }
4011         }
4012 #endif
4013
4014         if (m_data_manager->is_in_view_stack(BR_MULTI_WINDOW_VIEW)) {
4015                 BROWSER_LOGD("close multi window");
4016                 browser_view->m_is_multi_window_grid_mode = m_data_manager->get_multi_window_view()->_is_grid_mode();
4017                 m_data_manager->get_multi_window_view()->close_multi_window();
4018
4019 #if defined(HORIZONTAL_UI)
4020                 if (browser_view->m_multi_window_rotate_timer)
4021                         ecore_timer_del(browser_view->m_multi_window_rotate_timer);
4022                 browser_view->m_multi_window_rotate_timer = ecore_timer_add(0.2, __rotate_multi_window_cb, browser_view);
4023 #endif
4024         }
4025 }
4026
4027
4028 #ifdef ZOOM_BUTTON
4029 Eina_Bool Browser_View::__zoom_button_timeout_cb(void *data)
4030 {
4031         BROWSER_LOGD("[%s]", __func__);
4032         if (!data)
4033                 return ECORE_CALLBACK_CANCEL;
4034
4035         Browser_View *browser_view = (Browser_View *)data;
4036         browser_view->m_zoom_button_timer = NULL;
4037
4038         edje_object_signal_emit(elm_layout_edje_get(browser_view->m_main_layout), "hide,zoom_buttons,signal", "");
4039
4040         return ECORE_CALLBACK_CANCEL;
4041 }
4042
4043 void Browser_View::__zoom_out_clicked_cb(void *data, Evas_Object *obj, void *event_info)
4044 {
4045         BROWSER_LOGD("[%s]", __func__);
4046         if (!data)
4047                 return;
4048
4049         Browser_View *browser_view = (Browser_View *)data;
4050         double scale_factor = ewk_view_scale_get(browser_view->m_focused_window->m_ewk_view);
4051         ewk_view_scale_set(browser_view->m_focused_window->m_ewk_view, scale_factor - 0.5f, 0, 0);
4052
4053         if (browser_view->m_zoom_button_timer)
4054                 ecore_timer_del(browser_view->m_zoom_button_timer);
4055         browser_view->m_zoom_button_timer = ecore_timer_add(3, __zoom_button_timeout_cb, browser_view);
4056 }
4057
4058 void Browser_View::__zoom_in_clicked_cb(void *data, Evas_Object *obj, void *event_info)
4059 {
4060         BROWSER_LOGD("[%s]", __func__);
4061         if (!data)
4062                 return;
4063
4064         Browser_View *browser_view = (Browser_View *)data;
4065         double scale_factor = ewk_view_scale_get(browser_view->m_focused_window->m_ewk_view);
4066         ewk_view_scale_set(browser_view->m_focused_window->m_ewk_view, scale_factor + 0.5f, 0, 0);
4067
4068         if (browser_view->m_zoom_button_timer)
4069                 ecore_timer_del(browser_view->m_zoom_button_timer);
4070         browser_view->m_zoom_button_timer = ecore_timer_add(3, __zoom_button_timeout_cb, browser_view);
4071 }
4072
4073 Eina_Bool Browser_View::_create_zoom_buttons(void)
4074 {
4075         BROWSER_LOGD("[%s]", __func__);
4076         m_zoom_out_button = elm_button_add(m_navi_bar);
4077         if (!m_zoom_out_button) {
4078                 BROWSER_LOGE("elm_button_add failed");
4079                 return EINA_FALSE;
4080         }
4081         elm_object_style_set(m_zoom_out_button, "browser/zoom_out");
4082         elm_object_part_content_set(m_main_layout, "elm.swallow.zoom_out_button", m_zoom_out_button);
4083         evas_object_smart_callback_add(m_zoom_out_button, "clicked", __zoom_out_clicked_cb, this);
4084         evas_object_show(m_zoom_out_button);
4085
4086         m_zoom_in_button = elm_button_add(m_navi_bar);
4087         if (!m_zoom_in_button) {
4088                 BROWSER_LOGE("elm_button_add failed");
4089                 return EINA_FALSE;
4090         }
4091
4092         elm_object_style_set(m_zoom_in_button, "browser/zoom_in");
4093         elm_object_part_content_set(m_main_layout, "elm.swallow.zoom_in_button", m_zoom_in_button);
4094         evas_object_smart_callback_add(m_zoom_in_button, "clicked", __zoom_in_clicked_cb, this);
4095         evas_object_show(m_zoom_in_button);
4096
4097         return EINA_TRUE;
4098 }
4099 #endif
4100
4101 void Browser_View::__naviframe_pop_finished_cb(void *data , Evas_Object *obj, void *event_info)
4102 {
4103         BROWSER_LOGD("[%s]", __func__);
4104         if (!data)
4105                 return;
4106
4107         Browser_View *browser_view = (Browser_View *)data;
4108         Elm_Object_Item *it = (Elm_Object_Item *)event_info;
4109
4110         if (browser_view->m_navi_it != elm_naviframe_top_item_get(m_navi_bar))
4111                 return;
4112
4113         m_data_manager->destroy_bookmark_view();
4114         m_data_manager->destroy_history_layout();
4115         /* Add to bookmark, then cancel. */
4116         m_data_manager->destroy_add_to_bookmark_view();
4117 #if defined(FEATURE_MOST_VISITED_SITES)
4118         m_data_manager->destroy_add_to_most_visited_sites_view();
4119 #endif
4120
4121         /* If return from browser settings. */
4122         if (browser_view->m_browser_settings) {
4123                 delete browser_view->m_browser_settings;
4124                 browser_view->m_browser_settings = NULL;
4125         }
4126 }
4127
4128 void Browser_View::__dim_area_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
4129 {
4130         BROWSER_LOGD("[%s]", __func__);
4131         if (!data)
4132                 return;
4133
4134         Browser_View *browser_view = (Browser_View *)data;
4135
4136         elm_object_focus_set(m_data_manager->get_browser_view()->m_option_header_cancel_button, EINA_TRUE);
4137 }
4138
4139 void Browser_View::__context_menu_bg_mouse_down_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
4140 {
4141         BROWSER_LOGD("[%s]", __func__);
4142         if (!data)
4143                 return;
4144
4145         Browser_View *browser_view = (Browser_View *)data;
4146
4147         browser_view->_destroy_more_context_popup();
4148 }
4149
4150 Eina_Bool Browser_View::_create_main_layout(void)
4151 {
4152         BROWSER_LOGD("[%s]", __func__);
4153         m_main_layout = elm_layout_add(m_navi_bar);
4154         if (!m_main_layout) {
4155                 BROWSER_LOGE("elm_layout_add failed!");
4156                 return EINA_FALSE;
4157         }
4158
4159         if (!elm_layout_file_set(m_main_layout, BROWSER_EDJE_DIR"/browser-view-main.edj",
4160                                 "browser/browser-view-main")) {
4161                 BROWSER_LOGE("elm_layout_file_set failed", BROWSER_EDJE_DIR);
4162                 return EINA_FALSE;
4163         }
4164
4165         evas_object_size_hint_weight_set(m_main_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
4166         evas_object_size_hint_align_set(m_main_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
4167         evas_object_show(m_main_layout);
4168
4169         m_title_back_button = elm_button_add(m_navi_bar);
4170         if (!m_title_back_button) {
4171                 BROWSER_LOGE("elm_button_add failed!");
4172                 return EINA_FALSE;
4173         }
4174         evas_object_smart_callback_add(m_title_back_button, "clicked", __title_back_button_clicked_cb, this);
4175
4176         m_navi_it = elm_naviframe_item_push(m_navi_bar, "", NULL, NULL, m_main_layout, NULL);
4177
4178         evas_object_smart_callback_add(m_navi_bar, "transition,finished", __naviframe_pop_finished_cb, this);
4179
4180         elm_object_style_set(m_title_back_button, "browser/title_back");
4181         elm_object_item_part_content_set(m_navi_it, ELM_NAVIFRAME_ITEM_TITLE_LEFT_BTN, m_title_back_button);
4182
4183         evas_object_show(m_title_back_button);
4184         evas_object_show(m_navi_bar);
4185
4186         m_scroller = elm_scroller_add(m_navi_bar);
4187         if (!m_scroller) {
4188                 BROWSER_LOGE("elm_scroller_add failed!");
4189                 return EINA_FALSE;
4190         }
4191         /* Do not propagate event to scroller's ancestor */
4192         /* not to call unnecessary other callbacks. */
4193         evas_object_propagate_events_set(m_scroller, EINA_FALSE);
4194
4195         /* Do not use scroller's scrollbar, use webview's scrollbar instead */
4196         elm_scroller_policy_set(m_scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
4197         evas_object_size_hint_align_set(m_scroller, EVAS_HINT_FILL, 0.0);
4198         evas_object_size_hint_weight_set(m_scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
4199 #ifdef BROWSER_SCROLLER_BOUNCING
4200 //      elm_scroller_bounce_set(m_scroller, EINA_FALSE, EINA_TRUE);
4201         elm_scroller_bounce_set(m_scroller, EINA_FALSE, EINA_FALSE);
4202 #else
4203         elm_scroller_bounce_set(m_scroller, EINA_FALSE, EINA_FALSE);
4204         elm_object_scroll_freeze_pop(m_scroller);
4205         elm_object_scroll_freeze_push(m_scroller);
4206 #endif
4207         evas_object_show(m_scroller);
4208
4209         evas_object_smart_callback_add(m_scroller, "scroll", __scroller_scroll_cb, this);
4210         evas_object_event_callback_add(m_scroller, EVAS_CALLBACK_RESIZE, __scroller_resize_cb, this);
4211
4212         /* create content box which contains navigation layout & webview */
4213         m_content_box = elm_box_add(m_main_layout);
4214         if (!m_content_box) {
4215                 BROWSER_LOGE("elm_box_add failed!");
4216                 return EINA_FALSE;
4217         }
4218
4219         elm_box_horizontal_set(m_content_box, EINA_FALSE);
4220         evas_object_size_hint_weight_set(m_content_box, EVAS_HINT_EXPAND, 0.0);
4221         evas_object_size_hint_align_set(m_content_box, EVAS_HINT_FILL, EVAS_HINT_FILL);
4222         elm_object_content_set(m_scroller, m_content_box);
4223         evas_object_show(m_content_box);
4224
4225         /* create dummy loading progress bar which is displayed at launching time shortly */
4226         m_dummy_loading_progressbar = elm_progressbar_add(m_navi_bar);
4227         if (!m_dummy_loading_progressbar) {
4228                 BROWSER_LOGE("elm_progressbar_add failed!");
4229                 return EINA_FALSE;
4230         }
4231
4232         elm_object_style_set(m_dummy_loading_progressbar, "browser/loading_wheel");
4233         elm_progressbar_pulse(m_dummy_loading_progressbar, EINA_TRUE);
4234         evas_object_size_hint_weight_set(m_dummy_loading_progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
4235         evas_object_size_hint_align_set(m_dummy_loading_progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
4236         elm_object_part_content_set(m_main_layout, "elm.swallow.waiting_progress", m_dummy_loading_progressbar);
4237         evas_object_show(m_dummy_loading_progressbar);
4238
4239         /* create conformant */
4240         elm_win_conformant_set(m_win, EINA_TRUE);
4241         m_conformant = elm_conformant_add(m_main_layout);
4242         if (!m_conformant) {
4243                 BROWSER_LOGE("elm_conformant_add failed!");
4244                 return EINA_FALSE;
4245         }
4246
4247         elm_object_style_set(m_conformant, "internal_layout");
4248         evas_object_size_hint_weight_set(m_conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
4249         evas_object_size_hint_align_set(m_conformant, EVAS_HINT_FILL, EVAS_HINT_FILL);
4250         elm_object_content_set(m_conformant, m_scroller);
4251         elm_object_part_content_set(m_main_layout, "elm.swallow.content", m_conformant);
4252         evas_object_show(m_conformant);
4253
4254         m_url_layout = _create_url_layout();
4255         if (!m_url_layout) {
4256                 BROWSER_LOGE("_create_url_layout failed!");
4257                 return EINA_FALSE;
4258         }
4259         elm_box_pack_start(m_content_box, m_url_layout);
4260
4261         m_control_bar = _create_control_bar();
4262         if (!m_control_bar) {
4263                 BROWSER_LOGE("_create_control_bar failed!");
4264                 return EINA_FALSE;
4265         }
4266         elm_object_part_content_set(m_main_layout, "elm.swallow.control_bar", m_control_bar);
4267
4268         m_option_header_url_layout = _create_option_header_url_layout();
4269         if (!m_option_header_url_layout) {
4270                 BROWSER_LOGE("_create_option_header_url_layout failed!");
4271                 return EINA_FALSE;
4272         }
4273
4274         m_option_header_layout = elm_layout_add(m_navi_bar);
4275         if (!m_option_header_layout) {
4276                 BROWSER_LOGE("elm_layout_add failed!");
4277                 return EINA_FALSE;
4278         }
4279         if (!elm_layout_file_set(m_option_header_layout, BROWSER_EDJE_DIR"/browser-view-url-layout.edj",
4280                                 "browser-view/option_header")) {
4281                 BROWSER_LOGE("Can not set layout theme[browser/url_layout]\n");
4282                 return EINA_FALSE;
4283         }
4284         evas_object_size_hint_weight_set(m_option_header_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
4285         evas_object_size_hint_align_set(m_option_header_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
4286
4287         elm_object_part_content_set(m_option_header_layout, "elm.swallow.url_layout", m_option_header_url_layout);
4288         evas_object_show(m_option_header_layout);
4289
4290         m_option_header_find_word_layout = _create_find_word_layout();
4291         if (!m_option_header_find_word_layout) {
4292                 BROWSER_LOGE("_create_find_word_layout failed");
4293                 return EINA_FALSE;
4294         }
4295         elm_object_part_content_set(m_option_header_layout, "elm.swallow.find_word_layout", m_option_header_find_word_layout);
4296
4297         elm_object_item_part_content_set(m_navi_it, ELM_NAVIFRAME_ITEM_OPTIONHEADER, m_option_header_layout);
4298         _navigationbar_visible_set_signal(EINA_FALSE);
4299
4300 #ifdef ZOOM_BUTTON
4301         if (!_create_zoom_buttons()) {
4302                 BROWSER_LOGE("_create_zoom_buttons failed");
4303                 return EINA_FALSE;
4304         }
4305 #endif
4306
4307         edje_object_signal_callback_add(elm_layout_edje_get(m_main_layout),
4308                                         "mouse,clicked,1", "elm.rect.content_dim", __dim_area_clicked_cb, this);
4309
4310         edje_object_signal_callback_add(elm_layout_edje_get(m_main_layout),
4311                                         "mouse,down,1", "elm.rect.more_context_bg", __context_menu_bg_mouse_down_cb, this);
4312
4313         const char *current_theme = elm_theme_get(NULL);
4314         if (current_theme && strstr(current_theme, "white")) {
4315         } else {
4316 //              edje_object_signal_emit(elm_layout_edje_get(m_url_entry_layout), "black_theme,signal", "");
4317 //              edje_object_signal_emit(elm_layout_edje_get(m_option_header_url_entry_layout),
4318 //                                                                              "black_theme,signal", "");
4319         }
4320
4321         return EINA_TRUE;
4322 }
4323