Delete default context in ewk
[platform/framework/web/chromium-efl.git] / tizen_src / impl / ewk_global_data.cc
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.
4
5 #include "ewk_global_data.h"
6
7 #include "base/cpu.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"
28
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"
33
34 #ifdef OS_TIZEN_MOBILE
35 #include <dlfcn.h>
36 void* EflAssistHandle = 0;
37 #endif
38
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;
47
48 EwkGlobalData* EwkGlobalData::instance_ = NULL;
49
50 namespace {
51
52 scoped_ptr<base::MessagePump> MessagePumpFactory() {
53   return scoped_ptr<base::MessagePump>(new base::MessagePumpForUIEfl);
54 }
55
56 } // namespace
57
58 EwkGlobalData::EwkGlobalData()
59   : content_main_runner_(ContentMainRunner::Create())
60   , browser_main_runner_(BrowserMainRunner::Create()) {
61 }
62
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();
67   loop->QuitNow();
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_;
71 }
72
73 EwkGlobalData* EwkGlobalData::GetInstance() {
74   if (instance_) {
75     CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
76     return instance_;
77   }
78
79   // Workaround for cpu info logging asserting if executed on the wrong thread
80   // during cpu info lazy instance initialization.
81   base::CPU cpu;
82   DCHECK(cpu.cpu_brand() != "");
83
84   instance_ = new EwkGlobalData();
85
86   bool message_pump_overridden =
87       base::MessageLoop::InitMessagePumpForUIFactory(&MessagePumpFactory);
88   DCHECK(message_pump_overridden);
89
90   ui::InstallScreenInstance();
91
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();
96
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();
102
103   instance_->content_main_runner_->Initialize(params);
104   instance_->browser_main_runner_->Initialize(main_funtion_params);
105
106   base::ThreadRestrictions::SetIOAllowed(true);
107
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);
113
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);
121   }
122
123 #ifndef NDEBUG
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);
128 #endif
129
130 #ifdef OS_TIZEN_MOBILE
131   if (!EflAssistHandle)
132     EflAssistHandle = dlopen("/usr/lib/libefl-assist.so.0", RTLD_LAZY);
133 #endif
134
135   return instance_;
136 }
137
138 void EwkGlobalData::Delete()
139 {
140   delete instance_;
141   instance_ = NULL;
142 }
143
144 // static
145 bool EwkGlobalData::IsInitialized() {
146   return instance_ != NULL;
147 }