mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-02-19 21:50:42 +01:00
cefclient: win: Fix delayload of user32.dll
The WinSboxNoFakeGdiInit feature requires delayload of all DLLs that might load user32.dll in the renderer process. It's enabled as a field trial for all non-Official builds, but appears to only work with non-component Release builds. See https://crbug.com/326277735
This commit is contained in:
parent
bd1e188c77
commit
5fe6382906
19
BUILD.gn
19
BUILD.gn
@ -1127,12 +1127,6 @@ source_set("libcef_static") {
|
|||||||
deps += [ "//content:sandbox_helper_win" ]
|
deps += [ "//content:sandbox_helper_win" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
libs = [
|
|
||||||
"comctl32.lib",
|
|
||||||
# For D3D11_DECODER_PROFILE_H264_VLD_NOFGT.
|
|
||||||
"dxguid.lib",
|
|
||||||
]
|
|
||||||
|
|
||||||
data_deps = [
|
data_deps = [
|
||||||
"//chrome/elevation_service",
|
"//chrome/elevation_service",
|
||||||
]
|
]
|
||||||
@ -1752,6 +1746,12 @@ if (is_mac) {
|
|||||||
# Delay-load as many DLLs as possible for sandbox and startup perf
|
# Delay-load as many DLLs as possible for sandbox and startup perf
|
||||||
# improvements.
|
# improvements.
|
||||||
configs += [ "//build/config/win:delayloads" ]
|
configs += [ "//build/config/win:delayloads" ]
|
||||||
|
|
||||||
|
libs = [
|
||||||
|
"comctl32.lib",
|
||||||
|
# For D3D11_DECODER_PROFILE_H264_VLD_NOFGT.
|
||||||
|
"dxguid.lib",
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_linux && !is_debug && !use_partition_alloc_as_malloc) {
|
if (is_linux && !is_debug && !use_partition_alloc_as_malloc) {
|
||||||
@ -2266,8 +2266,13 @@ if (is_mac) {
|
|||||||
|
|
||||||
if (target_cpu != "arm64") {
|
if (target_cpu != "arm64") {
|
||||||
libs += [
|
libs += [
|
||||||
|
"glu32.lib",
|
||||||
"opengl32.lib",
|
"opengl32.lib",
|
||||||
"glu32.lib"
|
]
|
||||||
|
ldflags = [
|
||||||
|
"/DELAYLOAD:glu32.dll",
|
||||||
|
"/DELAYLOAD:oleaut32.dll",
|
||||||
|
"/DELAYLOAD:opengl32.dll",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -324,10 +324,11 @@ std::optional<int> ChromeMainDelegateCef::BasicStartupComplete() {
|
|||||||
disable_features.push_back(base::kEnableHangWatcher.name);
|
disable_features.push_back(base::kEnableHangWatcher.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if BUILDFLAG(IS_WIN) && !defined(OFFICIAL_BUILD)
|
#if BUILDFLAG(IS_WIN) && (defined(COMPONENT_BUILD) || !defined(NDEBUG))
|
||||||
// Disable WinSboxNoFakeGdiInit which causes the renderer processes to crash
|
// Disable WinSboxNoFakeGdiInit for component and Debug builds. It causes
|
||||||
// with STATUS_DLL_INIT_FAILED. This is currently enabled via a field trial
|
// renderer processes to crash with STATUS_DLL_INIT_FAILED. This is
|
||||||
// for non-Official builds. See https://crbug.com/326277735#comment23.
|
// currently enabled via a field trial for non-Official builds.
|
||||||
|
// See https://crbug.com/326277735#comment37.
|
||||||
disable_features.push_back(
|
disable_features.push_back(
|
||||||
sandbox::policy::features::kWinSboxNoFakeGdiInit.name);
|
sandbox::policy::features::kWinSboxNoFakeGdiInit.name);
|
||||||
#endif
|
#endif
|
||||||
|
@ -296,6 +296,8 @@ if(OS_WINDOWS)
|
|||||||
SET_EXECUTABLE_TARGET_PROPERTIES(${CEF_TARGET})
|
SET_EXECUTABLE_TARGET_PROPERTIES(${CEF_TARGET})
|
||||||
add_dependencies(${CEF_TARGET} libcef_dll_wrapper)
|
add_dependencies(${CEF_TARGET} libcef_dll_wrapper)
|
||||||
target_link_libraries(${CEF_TARGET} libcef_lib libcef_dll_wrapper ${CEF_STANDARD_LIBS} d3d11.lib glu32.lib imm32.lib opengl32.lib)
|
target_link_libraries(${CEF_TARGET} libcef_lib libcef_dll_wrapper ${CEF_STANDARD_LIBS} d3d11.lib glu32.lib imm32.lib opengl32.lib)
|
||||||
|
# Add additional /DELAYLOADs that are missing from CEF_EXE_LINKER_FLAGS.
|
||||||
|
set_property(TARGET ${CEF_TARGET} PROPERTY LINK_FLAGS "/DELAYLOAD:glu32.dll /DELAYLOAD:oleaut32.dll /DELAYLOAD:opengl32.dll")
|
||||||
|
|
||||||
if(USE_ATL)
|
if(USE_ATL)
|
||||||
# Required by VS2013 to link accessibility API functions.
|
# Required by VS2013 to link accessibility API functions.
|
||||||
|
@ -217,14 +217,34 @@ void CFHtmlToHtml(const std::string& cf_html,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const DWORD moz_url_format = ::RegisterClipboardFormat(L"text/x-moz-url");
|
DWORD GetMozUrlFormat() {
|
||||||
const DWORD html_format = ::RegisterClipboardFormat(L"HTML Format");
|
static DWORD moz_url_format = ::RegisterClipboardFormat(L"text/x-moz-url");
|
||||||
const DWORD file_desc_format = ::RegisterClipboardFormat(CFSTR_FILEDESCRIPTOR);
|
return moz_url_format;
|
||||||
const DWORD file_contents_format =
|
}
|
||||||
::RegisterClipboardFormat(CFSTR_FILECONTENTS);
|
|
||||||
|
DWORD GetHtmlFormat() {
|
||||||
|
static DWORD html_format = ::RegisterClipboardFormat(L"HTML Format");
|
||||||
|
return html_format;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD GetFileDescFormat() {
|
||||||
|
static DWORD file_desc_format =
|
||||||
|
::RegisterClipboardFormat(CFSTR_FILEDESCRIPTOR);
|
||||||
|
return file_desc_format;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD GetFileContentsFormat() {
|
||||||
|
static DWORD file_contents_format =
|
||||||
|
::RegisterClipboardFormat(CFSTR_FILECONTENTS);
|
||||||
|
return file_contents_format;
|
||||||
|
}
|
||||||
|
|
||||||
bool DragDataToDataObject(CefRefPtr<CefDragData> drag_data,
|
bool DragDataToDataObject(CefRefPtr<CefDragData> drag_data,
|
||||||
IDataObject** data_object) {
|
IDataObject** data_object) {
|
||||||
|
const DWORD moz_url_format = GetMozUrlFormat();
|
||||||
|
const DWORD html_format = GetHtmlFormat();
|
||||||
|
const DWORD file_desc_format = GetFileDescFormat();
|
||||||
|
const DWORD file_contents_format = GetFileContentsFormat();
|
||||||
const int kMaxDataObjects = 10;
|
const int kMaxDataObjects = 10;
|
||||||
FORMATETC fmtetcs[kMaxDataObjects];
|
FORMATETC fmtetcs[kMaxDataObjects];
|
||||||
STGMEDIUM stgmeds[kMaxDataObjects];
|
STGMEDIUM stgmeds[kMaxDataObjects];
|
||||||
@ -283,6 +303,8 @@ bool DragDataToDataObject(CefRefPtr<CefDragData> drag_data,
|
|||||||
}
|
}
|
||||||
|
|
||||||
CefRefPtr<CefDragData> DataObjectToDragData(IDataObject* data_object) {
|
CefRefPtr<CefDragData> DataObjectToDragData(IDataObject* data_object) {
|
||||||
|
const DWORD moz_url_format = GetMozUrlFormat();
|
||||||
|
const DWORD html_format = GetHtmlFormat();
|
||||||
CefRefPtr<CefDragData> drag_data = CefDragData::Create();
|
CefRefPtr<CefDragData> drag_data = CefDragData::Create();
|
||||||
IEnumFORMATETC* enumFormats = nullptr;
|
IEnumFORMATETC* enumFormats = nullptr;
|
||||||
HRESULT res = data_object->EnumFormatEtc(DATADIR_GET, &enumFormats);
|
HRESULT res = data_object->EnumFormatEtc(DATADIR_GET, &enumFormats);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user