1 // Copyright 2014 Samsung Electronics. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "ewk_global_data.h"
8 #include "base/logging.h"
9 #include "base/path_service.h"
10 #include "base/message_loop/message_loop.h"
11 #include "browser/autofill/personal_data_manager_factory.h"
12 #include "content/browser/gpu/gpu_process_host.h"
13 #include "content/gpu/in_process_gpu_thread.h"
14 #include "content/public/app/content_main_runner.h"
15 #include "content/public/browser/browser_main_runner.h"
16 #include "content/public/browser/browser_thread.h"
17 #include "content/public/browser/render_process_host.h"
18 #include "content/public/browser/utility_process_host.h"
19 #include "content/public/common/content_switches.h"
20 #include "content/public/app/content_main.h"
21 #include "content/renderer/in_process_renderer_thread.h"
22 #include "content/utility/in_process_utility_thread.h"
23 #include "content/browser/utility_process_host_impl.h"
24 #include "content/browser/renderer_host/render_process_host_impl.h"
25 #include "gpu/gpu_thread_override_efl.h"
26 #include "tizen_webview/public/tw_web_context.h"
27 #include "ui/base/resource/resource_bundle.h"
29 #include "command_line_efl.h"
30 #include "content_main_delegate_efl.h"
31 #include "message_pump_for_ui_efl.h"
32 #include "screen_efl.h"
34 #ifdef OS_TIZEN_MOBILE
36 void* EflAssistHandle = 0;
39 using base::MessageLoop;
40 using content::BrowserMainRunner;
41 using content::BrowserThread;
42 using content::ContentMainDelegateEfl;
43 using content::ContentMainRunner;
44 using content::GpuProcessHost;
45 using content::RenderProcessHost;
46 using content::UtilityProcessHost;
48 EwkGlobalData* EwkGlobalData::instance_ = NULL;
52 scoped_ptr<base::MessagePump> MessagePumpFactory() {
53 return scoped_ptr<base::MessagePump>(new base::MessagePumpForUIEfl);
58 EwkGlobalData::EwkGlobalData()
59 : content_main_runner_(ContentMainRunner::Create())
60 , browser_main_runner_(BrowserMainRunner::Create()) {
63 EwkGlobalData::~EwkGlobalData() {
64 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
65 // We need to pretend that message loop was stopped so chromium unwinds correctly
66 MessageLoop *loop = MessageLoop::current();
68 // browser_main_runner must be deleted first as it depends on content_main_runner
69 delete browser_main_runner_;
70 delete content_main_runner_;
73 EwkGlobalData* EwkGlobalData::GetInstance() {
75 CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
79 // Workaround for cpu info logging asserting if executed on the wrong thread
80 // during cpu info lazy instance initialization.
82 DCHECK(cpu.cpu_brand() != "");
84 instance_ = new EwkGlobalData();
86 bool message_pump_overridden =
87 base::MessageLoop::InitMessagePumpForUIFactory(&MessagePumpFactory);
88 DCHECK(message_pump_overridden);
90 ui::InstallScreenInstance();
92 instance_->content_main_delegate_efl_ = new ContentMainDelegateEfl();
93 content::ContentMainParams params(instance_->content_main_delegate_efl_);
94 params.argc = CommandLineEfl::GetArgc();
95 params.argv = CommandLineEfl::GetArgv();
97 // Call to CommandLineEfl::GetDefaultPortParams() should be before content
98 // main runner initialization in order to pass command line parameters
99 // for current process that are used in content main runner initialization.
100 content::MainFunctionParams main_funtion_params =
101 CommandLineEfl::GetDefaultPortParams();
103 instance_->content_main_runner_->Initialize(params);
104 instance_->browser_main_runner_->Initialize(main_funtion_params);
106 base::ThreadRestrictions::SetIOAllowed(true);
108 base::FilePath pak_dir;
109 base::FilePath pak_file;
110 PathService::Get(base::DIR_EXE, &pak_dir);
111 pak_file = pak_dir.Append(FILE_PATH_LITERAL("content_shell.pak"));
112 ui::ResourceBundle::InitSharedInstanceWithPakPath(pak_file);
114 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSingleProcess)) {
115 content::UtilityProcessHostImpl::RegisterUtilityMainThreadFactory(
116 content::CreateInProcessUtilityThread);
117 content::RenderProcessHostImpl::RegisterRendererMainThreadFactory(
118 content::CreateInProcessRendererThread);
119 GpuProcessHost::RegisterGpuMainThreadFactory(
120 CreateInProcessGpuThreadEfl);
124 logging::LoggingSettings settings;
125 settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
126 logging::InitLogging(settings);
127 logging::SetLogItems(true, true, true, true);
130 #ifdef OS_TIZEN_MOBILE
131 if (!EflAssistHandle)
132 EflAssistHandle = dlopen("/usr/lib/libefl-assist.so.0", RTLD_LAZY);
138 void EwkGlobalData::Delete()
145 bool EwkGlobalData::IsInitialized() {
146 return instance_ != NULL;