static Eina_Bool ExitAppIdlerCallback(void* data) {
WebApplication* app = static_cast<WebApplication*>(data);
- if (app) {
- std::list<WebView*> vstack = app->view_stack();
- auto it = vstack.begin();
-
- for (; it != vstack.end(); ++it) {
- vstack.front()->SetVisibility(false);
- (*it)->Suspend();
- ewk_view_page_close((*it)->evas_object());
- }
- }
+ if (app)
+ app->Terminate();
return ECORE_CALLBACK_CANCEL;
}
ewk_context_(
ewk_context_new_with_injected_bundle_path(INJECTED_BUNDLE_PATH)),
has_ownership_of_ewk_context_(true),
- is_terminated_by_callback_(false),
window_(window),
appid_(app_data->app_id()),
app_data_(app_data),
verbose_mode_(false),
ewk_context_(context),
has_ownership_of_ewk_context_(false),
- is_terminated_by_callback_(false),
window_(window),
appid_(app_data->app_id()),
app_data_(app_data),
if (app_data_->widget_info() != NULL &&
app_data_->widget_info()->view_modes() == "fullscreen") {
+ window_->SetCurrentViewModeFullScreen(true);
window_->FullScreen(true);
}
// Setup View
WebView* view = new WebView(window_, ewk_context_);
SetupWebView(view);
- SetupWebViewTizenApplicationInfo(view);
+ SetupWebViewCompatibilitySettings(view);
std::unique_ptr<common::ResourceManager::Resource> res =
resource_manager_->GetStartResource(appcontrol.get());
ClearViewStack();
WebView* view = view_stack_.front();
SetupWebView(view);
- SetupWebViewTizenApplicationInfo(view);
+ SetupWebViewCompatibilitySettings(view);
view->SetDefaultEncoding(res->encoding());
view->LoadUrl(res->uri(), res->mime());
window_->SetContent(view->evas_object());
}
void WebApplication::Terminate() {
- is_terminated_by_callback_ = false;
if (terminator_) {
terminator_();
} else {
elm_exit();
}
auto extension_server = extensions::XWalkExtensionServer::GetInstance();
+ LOGGER(INFO) << "Shutdown extension server";
extension_server->Shutdown();
}
view_stack_.front()->SetVisibility(false);
SetupWebView(new_view);
- SetupWebViewTizenApplicationInfo(new_view);
+ SetupWebViewCompatibilitySettings(new_view);
view_stack_.push_front(new_view);
window_->SetContent(new_view->evas_object());
}
void WebApplication::RemoveWebViewFromStack(WebView* view) {
- if (view_stack_.size() == 0) {
- if (is_terminated_by_callback_) {
- Terminate();
- } else {
- return;
- }
- }
+ if (view_stack_.size() == 0)
+ return;
WebView* current = view_stack_.front();
if (current == view) {
+ // In order to prevent the crash issue due to the callback
+ // which occur after destroying WebApplication class,
+ // we have to set the 'SetEventListener' to NULL.
+ view->SetEventListener(NULL);
view_stack_.pop_front();
} else {
auto found = std::find(view_stack_.begin(), view_stack_.end(), view);
if (found != view_stack_.end()) {
- view_stack_.erase(found);
- }
- }
-
- if (view_stack_.size() == 0) {
- if (is_terminated_by_callback_) {
// In order to prevent the crash issue due to the callback
// which occur after destroying WebApplication class,
// we have to set the 'SetEventListener' to NULL.
view->SetEventListener(NULL);
- Terminate();
- } else {
- view->Suspend();
- ewk_view_page_close(view->evas_object());
- return;
+ view_stack_.erase(found);
}
+ }
+
+ if (view_stack_.size() == 0) {
+ Terminate();
} else if (current != view_stack_.front()) {
view_stack_.front()->SetVisibility(true);
window_->SetContent(view_stack_.front()->evas_object());
}
void WebApplication::OnClosedWebView(WebView* view) {
- is_terminated_by_callback_ = true;
// Reply to javascript dialog for preventing freeze issue.
view->ReplyToJavascriptDialog();
RemoveWebViewFromStack(view);
if (runtime::Runtime::is_on_terminate_called) {
+ LOGGER(INFO) << "Execute deferred termination of main loop";
ecore_main_loop_quit();
}
}
if(enabled)
view->EvalJavascript(kBackKeyEventScript);
if (!view->Backward()) {
- RemoveWebViewFromStack(view_stack_.front());
+ Terminate();
}
}
return;
(app_data_->widget_info() != NULL &&
app_data_->widget_info()->view_modes() == "windowed")) {
if (!view->Backward()) {
- RemoveWebViewFromStack(view_stack_.front());
+ Terminate();
}
}
} else if (enabled && kKeyNameMenu == keyname) {
}
}
-void WebApplication::SetupWebViewTizenApplicationInfo(WebView* view) {
+void WebApplication::SetupWebViewCompatibilitySettings(WebView* view) {
if (tizenWebKitCompatibilityEnabled()) {
Ewk_Settings* settings = ewk_view_settings_get(view->evas_object());
ewk_settings_tizen_compatibility_mode_set(settings,
m_tizenCompatibilitySettings.m_major,
m_tizenCompatibilitySettings.m_minor,
m_tizenCompatibilitySettings.m_release);
- }
+ ewk_settings_text_autosizing_enabled_set(settings, EINA_FALSE);
+ }
}
bool WebApplication::OnDidNavigation(WebView* /*view*/,