2019-04-19 17:19:57 +08:00
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
#include "cef_manager.h"
|
|
|
|
|
#include "include/wrapper/cef_closure_task.h"
|
|
|
|
|
#include "include/base/cef_bind.h"
|
|
|
|
|
|
|
|
|
|
#include "cef_control/app/client_app.h"
|
|
|
|
|
#include "cef_control/handler/browser_handler.h"
|
|
|
|
|
|
|
|
|
|
namespace nim_cef
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
BOOL CefMessageLoopDispatcher::IsIdleMessage(const MSG* pMsg)
|
|
|
|
|
{
|
|
|
|
|
switch (pMsg->message)
|
|
|
|
|
{
|
|
|
|
|
case WM_MOUSEMOVE:
|
|
|
|
|
case WM_NCMOUSEMOVE:
|
|
|
|
|
case WM_PAINT:
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CefMessageLoopDispatcher::Dispatch(const MSG &msg)
|
|
|
|
|
{
|
|
|
|
|
static BOOL bDoIdle = TRUE;
|
|
|
|
|
|
|
|
|
|
TranslateMessage(&msg);
|
|
|
|
|
DispatchMessage(&msg);
|
|
|
|
|
|
|
|
|
|
if (IsIdleMessage(&msg))
|
|
|
|
|
{
|
|
|
|
|
bDoIdle = TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
while (bDoIdle && !::PeekMessage(const_cast<MSG*>(&msg), NULL, 0, 0, PM_NOREMOVE))
|
|
|
|
|
{
|
|
|
|
|
CefDoMessageLoopWork();
|
|
|
|
|
bDoIdle = FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>dz<EFBFBD><C7B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bug<75><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦ+<2B><><EFBFBD>߳<EFBFBD><DFB3><EFBFBD>Ϣѭ<CFA2><D1AD>ģʽ<C4A3>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>رյ<D8B1>
|
|
|
|
|
// <20><>cefԴ<66><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ˵<D6B2><CBB5><EFBFBD><EFBFBD><EFBFBD>TrackPopupMenu<6E><75><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>MSDN<44><4E><EFBFBD><EFBFBD><EFBFBD>ϲ鿴<CFB2><E9BFB4><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>TrackPopupMenuǰ
|
|
|
|
|
// <20><>Ҫ<EFBFBD><D2AA><EFBFBD>丸<EFBFBD><E4B8B8><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>SetForegroundWindow<6F><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>cefԴ<66><D4B4><EFBFBD><EFBFBD>û<EFBFBD>е<EFBFBD><D0B5><EFBFBD>
|
|
|
|
|
// <20><><EFBFBD>շ<EFBFBD>cefԴ<66><D4B4><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>cef<65><66>UI<55>̴߳<DFB3><CCB4><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UI<55>̴߳<DFB3><CCB4><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ˵<D6B2><CBB5><EFBFBD><DEB7>رյ<D8B1>bug<75>ˣ<EFBFBD><CBA3><EFBFBD>Ȼ<EFBFBD><C8BB>֪<EFBFBD><D6AA>Ϊʲô<CAB2><C3B4><EFBFBD><EFBFBD>bug<75><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void FixContextMenuBug(HWND hwnd)
|
|
|
|
|
{
|
|
|
|
|
CreateWindow(L"Static", L"", WS_CHILD, 0, 0, 0, 0, hwnd, NULL, NULL, NULL);
|
|
|
|
|
PostMessage(hwnd, WM_CLOSE, 0, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
CefManager::CefManager()
|
|
|
|
|
{
|
|
|
|
|
browser_count_ = 0;
|
|
|
|
|
is_enable_offset_render_ = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CefManager::AddCefDllToPath()
|
|
|
|
|
{
|
|
|
|
|
#if !defined(SUPPORT_CEF)
|
|
|
|
|
return;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
TCHAR path_envirom[4096] = { 0 };
|
|
|
|
|
GetEnvironmentVariable(L"path", path_envirom, 4096);
|
|
|
|
|
|
2019-09-20 16:27:58 +08:00
|
|
|
|
std::wstring cef_path = nbase::win32::GetCurrentModuleDirectory();
|
2019-04-19 17:19:57 +08:00
|
|
|
|
#ifdef _DEBUG
|
|
|
|
|
//cef_path += L"cef_debug"; // <20><><EFBFBD>ڼ<EFBFBD>ʹ<EFBFBD><CAB9>debugģʽ<C4A3><CABD>Ҳʹ<D2B2><CAB9>cef release<73>汾<EFBFBD><E6B1BE>dll<6C><6C>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD>cef<65>˳<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>cef<65>Ĺ<EFBFBD><C4B9>ܲ<EFBFBD><DCB2><EFBFBD>Ҫʹ<D2AA><CAB9>debug<75>汾<EFBFBD><E6B1BE>dll
|
|
|
|
|
cef_path += L"cef";
|
|
|
|
|
#else
|
|
|
|
|
cef_path += L"cef";
|
|
|
|
|
#endif
|
|
|
|
|
if (!nbase::FilePathIsExist(cef_path, true))
|
|
|
|
|
{
|
|
|
|
|
MessageBox(NULL, L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹCef.rarѹ<72><D1B9><EFBFBD><EFBFBD>", L"<EFBFBD><EFBFBD>ʾ", MB_OK);
|
|
|
|
|
exit(0);
|
|
|
|
|
}
|
|
|
|
|
std::wstring new_envirom(cef_path);
|
|
|
|
|
new_envirom.append(L";").append(path_envirom);
|
|
|
|
|
SetEnvironmentVariable(L"path", new_envirom.c_str());
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>flash<73><68><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// https://blog.csdn.net/zhuhongshu/article/details/77482985
|
|
|
|
|
std::wstring cmd_path = cef_path + L"\\dummy_cmd.exe";
|
|
|
|
|
SetEnvironmentVariable(L"ComSpec", cmd_path.c_str());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Cef<65>ij<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ӿڣ<D3BF>ͬʱ<CDAC><CAB1>ע<EFBFBD><D7A2>ʹ<EFBFBD>ø<EFBFBD><C3B8><EFBFBD><EFBFBD>汾<EFBFBD><E6B1BE>Cefʱ<66><CAB1><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8>ֿ<EFBFBD>
|
|
|
|
|
// Cef1916<31>汾<EFBFBD><E6B1BE><EFBFBD>ȶ<EFBFBD><C8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ijЩ<C4B3><D0A9>debugģʽ<C4A3><CABD>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>жϾ<D0B6><CFBE>棨<EFBFBD><E6A3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD><F3A3A9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>html<6D><6C>֧<D7BC>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>releaseģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
|
|
|
|
// Cef2357<35>汾<EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE><EFBFBD>̻<EFBFBD><CCBB><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// Cef2526<32><36>2623<32>汾<EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD>涼֧<E6B6BC>֣<EFBFBD>Ψһ<CEA8>ĿӾ<C4BF><D3BE><EFBFBD>debugģʽ<C4A3>ڶ<EFBFBD><DAB6>߳<EFBFBD><DFB3><EFBFBD>Ϣѭ<CFA2><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>releaseģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// (PS:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߲<EFBFBD>ʹ<EFBFBD>ø<EFBFBD><C3B8><EFBFBD>Cef<65><66><EFBFBD>ܵĿ<DCB5><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD>releaseģʽ<C4A3><CABD>cef dll<6C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>deubg<62><67>Ҳ<EFBFBD><D2B2><EFBFBD>ᱨ<EFBFBD><E1B1A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AddCefDllToPath<74><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD>releaseĿ¼)
|
|
|
|
|
bool CefManager::Initialize(const std::wstring& app_data_dir, CefSettings &settings, bool is_enable_offset_render /*= true*/)
|
|
|
|
|
{
|
|
|
|
|
#if !defined(SUPPORT_CEF)
|
|
|
|
|
return true;
|
|
|
|
|
#endif
|
|
|
|
|
is_enable_offset_render_ = is_enable_offset_render;
|
|
|
|
|
|
|
|
|
|
CefMainArgs main_args(GetModuleHandle(NULL));
|
|
|
|
|
CefRefPtr<ClientApp> app(new ClientApp);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD>е<EFBFBD><D0B5>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>exit_code<64><65><EFBFBD>ش<EFBFBD><D8B4>ڵ<EFBFBD><DAB5><EFBFBD>0
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Browser<65><72><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-1
|
|
|
|
|
int exit_code = CefExecuteProcess(main_args, app.get(), NULL);
|
|
|
|
|
if (exit_code >= 0)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
GetCefSetting(app_data_dir, settings);
|
|
|
|
|
|
|
|
|
|
bool bRet = CefInitialize(main_args, settings, app.get(), NULL);
|
|
|
|
|
|
|
|
|
|
if (is_enable_offset_render_)
|
|
|
|
|
{
|
|
|
|
|
HWND hwnd = CreateWindow(L"Static", L"", WS_POPUP, 0, 0, 0, 0, NULL, NULL, NULL, NULL);
|
|
|
|
|
CefPostTask(TID_UI, base::Bind(&FixContextMenuBug, hwnd));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return bRet;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CefManager::UnInitialize()
|
|
|
|
|
{
|
|
|
|
|
#if !defined(SUPPORT_CEF)
|
|
|
|
|
return;
|
|
|
|
|
#endif
|
|
|
|
|
CefShutdown();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CefManager::IsEnableOffsetRender() const
|
|
|
|
|
{
|
|
|
|
|
return is_enable_offset_render_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
nbase::Dispatcher* CefManager::GetMessageDispatcher()
|
|
|
|
|
{
|
|
|
|
|
return &message_dispatcher_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CefManager::AddBrowserCount()
|
|
|
|
|
{
|
|
|
|
|
browser_count_++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CefManager::SubBrowserCount()
|
|
|
|
|
{
|
|
|
|
|
browser_count_--;
|
|
|
|
|
ASSERT(browser_count_ >= 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CefManager::GetBrowserCount()
|
|
|
|
|
{
|
|
|
|
|
return browser_count_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CefManager::PostQuitMessage(int nExitCode)
|
|
|
|
|
{
|
|
|
|
|
#if !defined(SUPPORT_CEF)
|
|
|
|
|
::PostQuitMessage(nExitCode);
|
|
|
|
|
return;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ǧ<EFBFBD><C7A7><EFBFBD><EFBFBD>Ҫֱ<D2AA>ӵ<EFBFBD><D3B5><EFBFBD>::PostQuitMessage<67><65><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF>ܻ<EFBFBD><DCBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// Ӧ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٺ<EFBFBD><D9BA>ٵ<EFBFBD><D9B5><EFBFBD>::PostQuitMessage
|
|
|
|
|
if (browser_count_ == 0)
|
|
|
|
|
{
|
2019-09-20 16:27:58 +08:00
|
|
|
|
nbase::ThreadManager::PostTask(kThreadMain, [nExitCode]()
|
2019-04-19 17:19:57 +08:00
|
|
|
|
{
|
|
|
|
|
::PostQuitMessage(nExitCode);
|
2019-09-20 16:27:58 +08:00
|
|
|
|
});
|
2019-04-19 17:19:57 +08:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
auto cb = [nExitCode]()
|
|
|
|
|
{
|
|
|
|
|
CefManager::GetInstance()->PostQuitMessage(nExitCode);
|
|
|
|
|
};
|
|
|
|
|
|
2019-09-20 16:27:58 +08:00
|
|
|
|
nbase::ThreadManager::PostDelayedTask(kThreadMain, cb, nbase::TimeDelta::FromMilliseconds(500));
|
2019-04-19 17:19:57 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CefManager::GetCefSetting(const std::wstring& app_data_dir, CefSettings &settings)
|
|
|
|
|
{
|
|
|
|
|
if (false == nbase::FilePathIsExist(app_data_dir, true))
|
|
|
|
|
nbase::CreateDirectory(app_data_dir);
|
|
|
|
|
|
|
|
|
|
settings.no_sandbox = true;
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>localstorage<67><65><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>·<EFBFBD><C2B7>ĩβ<C4A9><CEB2>"\\"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ᱨ<EFBFBD><E1B1A8>
|
|
|
|
|
CefString(&settings.cache_path) = app_data_dir + L"CefLocalStorage";
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>debug log<6F>ļ<EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
CefString(&settings.log_file) = app_data_dir + L"cef.log";
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD><EFBFBD>ǧ<EFBFBD><C7A7><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>release<73><65><EFBFBD><EFBFBD><EFBFBD>汾<EFBFBD><E6B1BE>ʹ<EFBFBD>ã<EFBFBD><C3A3>ٷ<EFBFBD><D9B7>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>Ƽ<EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|
|
|
|
// cef1916<31>汾debugģʽ:<3A>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3>³<EFBFBD><C2B3><EFBFBD><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ᴥ<EFBFBD><E1B4A5><EFBFBD>ж<EFBFBD>
|
|
|
|
|
#ifdef _DEBUG
|
|
|
|
|
settings.single_process = true;
|
|
|
|
|
#else
|
|
|
|
|
settings.single_process = false;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
// cef2623<32><33>2526<32>汾debugģʽ:<3A><>ʹ<EFBFBD><CAB9>multi_threaded_message_loopʱ<70>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᴥ<EFBFBD><E1B4A5><EFBFBD>ж<EFBFBD>
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>disable-extensions<6E><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⣬<EFBFBD><E2A3AC><EFBFBD>ǻᵼ<C7BB><E1B5BC>һЩҳ<D0A9><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>Cef<65><66><EFBFBD>߳<EFBFBD><DFB3><EFBFBD>Ϣѭ<CFA2><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nbase<73><65><EFBFBD><EFBFBD>Ϣѭ<CFA2><D1AD>
|
|
|
|
|
settings.multi_threaded_message_loop = true;
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦ
|
|
|
|
|
settings.windowless_rendering_enabled = is_enable_offset_render_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|