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