mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Linux: Add support for ozone builds (fixes issue #2296).
Ozone builds can run with different platform backends (Wayland, X11, etc). Usage of the Views framework is required, and the cefclient sample application is not supported. Example usage: $ export GN_DEFINES="use_ozone=true" $ cd /path/to/chromium/src/cef $ ./cef_create_projects.sh $ cd /path/to/chromium/src $ ninja -C out/Release_GN_x64 cefsimple $ ./out/Release_GN_x64/cefsimple --use-views --ozone-platform=wayland Binary distributions can be created by passing the `--ozone` flag to make_distrib.py.
This commit is contained in:
committed by
Marshall Greenblatt
parent
07863c0d46
commit
491253fa03
1
.gitignore
vendored
1
.gitignore
vendored
@ -46,5 +46,6 @@ Thumbs.db
|
|||||||
/binary_distrib
|
/binary_distrib
|
||||||
/docs
|
/docs
|
||||||
# CEF generated files
|
# CEF generated files
|
||||||
|
/include/cef_config.h
|
||||||
/include/cef_version.h
|
/include/cef_version.h
|
||||||
.ccls-cache/
|
.ccls-cache/
|
74
BUILD.gn
74
BUILD.gn
@ -196,10 +196,13 @@ gypi_paths2 = exec_script("//cef/tools/gypi_to_gn.py",
|
|||||||
group("cef") {
|
group("cef") {
|
||||||
testonly = true
|
testonly = true
|
||||||
deps = [
|
deps = [
|
||||||
":cefclient",
|
|
||||||
":cefsimple",
|
":cefsimple",
|
||||||
":ceftests",
|
":ceftests",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if (!is_linux || use_x11) {
|
||||||
|
deps += [ ":cefclient" ]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -769,14 +772,25 @@ static_library("libcef_static") {
|
|||||||
"libcef/browser/osr/render_widget_host_view_osr_linux.cc",
|
"libcef/browser/osr/render_widget_host_view_osr_linux.cc",
|
||||||
"libcef/browser/printing/print_dialog_linux.cc",
|
"libcef/browser/printing/print_dialog_linux.cc",
|
||||||
"libcef/browser/printing/print_dialog_linux.h",
|
"libcef/browser/printing/print_dialog_linux.h",
|
||||||
"libcef/browser/native/window_x11.cc",
|
|
||||||
"libcef/browser/native/window_x11.h",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if (use_x11) {
|
||||||
|
sources += [
|
||||||
|
"libcef/browser/native/window_x11.cc",
|
||||||
|
"libcef/browser/native/window_x11.h",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
deps += [
|
deps += [
|
||||||
"//build/config/freetype",
|
"//build/config/freetype",
|
||||||
"//third_party/fontconfig",
|
"//third_party/fontconfig",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if (is_linux && !use_x11) {
|
||||||
|
deps += [
|
||||||
|
"//third_party/angle:libEGL",
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_mac) {
|
if (is_mac) {
|
||||||
@ -894,6 +908,15 @@ static_library("libcef_static") {
|
|||||||
"//ui/aura/test/ui_controls_factory_aura.h",
|
"//ui/aura/test/ui_controls_factory_aura.h",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if (is_linux && !use_x11) {
|
||||||
|
sources += [
|
||||||
|
"//ui/aura/test/mus/window_tree_client_test_api.h",
|
||||||
|
"//ui/aura/test/mus/window_tree_client_test_api.cc",
|
||||||
|
"//ui/aura/test/ui_controls_factory_ozone.cc",
|
||||||
|
"//ui/events/test/events_test_utils.cc"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
deps += [
|
deps += [
|
||||||
"//ui/aura",
|
"//ui/aura",
|
||||||
"//ui/events",
|
"//ui/events",
|
||||||
@ -931,16 +954,23 @@ static_library("libcef_static") {
|
|||||||
# Part of //ui/aura:test_support which is testingonly.
|
# Part of //ui/aura:test_support which is testingonly.
|
||||||
"//ui/aura/test/aura_test_utils.cc",
|
"//ui/aura/test/aura_test_utils.cc",
|
||||||
"//ui/aura/test/aura_test_utils.h",
|
"//ui/aura/test/aura_test_utils.h",
|
||||||
"//ui/aura/test/ui_controls_factory_aurax11.cc",
|
|
||||||
"//ui/aura/test/x11_event_sender.cc",
|
|
||||||
"//ui/aura/test/x11_event_sender.h",
|
|
||||||
# Part of //ui/events:test_support which is testingonly.
|
# Part of //ui/events:test_support which is testingonly.
|
||||||
"//ui/events/test/platform_event_waiter.cc",
|
"//ui/events/test/platform_event_waiter.cc",
|
||||||
"//ui/events/test/platform_event_waiter.h",
|
"//ui/events/test/platform_event_waiter.h",
|
||||||
# Part of //ui/views:test_support which is testingonly.
|
|
||||||
"//ui/views/test/ui_controls_factory_desktop_aurax11.cc",
|
|
||||||
"//ui/views/test/ui_controls_factory_desktop_aurax11.h",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if (use_x11) {
|
||||||
|
sources += [
|
||||||
|
# Support for UI input events.
|
||||||
|
# Part of //ui/aura:test_support which is testingonly.
|
||||||
|
"//ui/aura/test/ui_controls_factory_aurax11.cc",
|
||||||
|
"//ui/aura/test/x11_event_sender.cc",
|
||||||
|
"//ui/aura/test/x11_event_sender.h",
|
||||||
|
# Part of //ui/views:test_support which is testingonly.
|
||||||
|
"//ui/views/test/ui_controls_factory_desktop_aurax11.cc",
|
||||||
|
"//ui/views/test/ui_controls_factory_desktop_aurax11.h",
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
sources += [
|
sources += [
|
||||||
@ -1952,6 +1982,12 @@ if (is_mac) {
|
|||||||
# The cefclient target depends on packages that are not available in the
|
# The cefclient target depends on packages that are not available in the
|
||||||
# default sysroot environment.
|
# default sysroot environment.
|
||||||
if (is_linux && !use_sysroot) {
|
if (is_linux && !use_sysroot) {
|
||||||
|
pkg_config("glib") {
|
||||||
|
packages = [
|
||||||
|
"glib-2.0",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
pkg_config("gtk") {
|
pkg_config("gtk") {
|
||||||
packages = [
|
packages = [
|
||||||
"gmodule-2.0",
|
"gmodule-2.0",
|
||||||
@ -2111,9 +2147,11 @@ if (is_mac) {
|
|||||||
sources += gypi_paths2.includes_linux +
|
sources += gypi_paths2.includes_linux +
|
||||||
gypi_paths2.cefsimple_sources_linux
|
gypi_paths2.cefsimple_sources_linux
|
||||||
|
|
||||||
libs = [
|
if (use_x11) {
|
||||||
"X11",
|
libs = [
|
||||||
]
|
"X11",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
if (!is_component_build) {
|
if (!is_component_build) {
|
||||||
# Set rpath to find our own libfreetype even in a non-component build.
|
# Set rpath to find our own libfreetype even in a non-component build.
|
||||||
@ -2170,9 +2208,15 @@ if (is_mac) {
|
|||||||
sources += gypi_paths2.shared_sources_linux +
|
sources += gypi_paths2.shared_sources_linux +
|
||||||
gypi_paths2.ceftests_sources_linux
|
gypi_paths2.ceftests_sources_linux
|
||||||
|
|
||||||
libs = [
|
if (use_x11) {
|
||||||
"X11",
|
libs = [
|
||||||
]
|
"X11",
|
||||||
|
]
|
||||||
|
} else {
|
||||||
|
if (!use_sysroot) {
|
||||||
|
configs += [ ":glib" ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
deps += [
|
deps += [
|
||||||
":copy_ceftests_files",
|
":copy_ceftests_files",
|
||||||
|
@ -200,11 +200,14 @@ add_subdirectory(${CEF_LIBCEF_DLL_WRAPPER_PATH} libcef_dll_wrapper)
|
|||||||
# Comes from the <target>/CMakeLists.txt file in the current directory.
|
# Comes from the <target>/CMakeLists.txt file in the current directory.
|
||||||
# TODO: Change these lines to match your project target when you copy this file.
|
# TODO: Change these lines to match your project target when you copy this file.
|
||||||
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/tests")
|
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/tests")
|
||||||
add_subdirectory(tests/cefclient)
|
|
||||||
add_subdirectory(tests/cefsimple)
|
add_subdirectory(tests/cefsimple)
|
||||||
add_subdirectory(tests/gtest)
|
add_subdirectory(tests/gtest)
|
||||||
add_subdirectory(tests/ceftests)
|
add_subdirectory(tests/ceftests)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/tests/cefclient")
|
||||||
|
add_subdirectory(tests/cefclient)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Display configuration settings.
|
# Display configuration settings.
|
||||||
PRINT_CEF_CONFIG()
|
PRINT_CEF_CONFIG()
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
'include/base/internal/cef_thread_checker_impl.h',
|
'include/base/internal/cef_thread_checker_impl.h',
|
||||||
'include/cef_api_hash.h',
|
'include/cef_api_hash.h',
|
||||||
'include/cef_base.h',
|
'include/cef_base.h',
|
||||||
|
'include/cef_config.h',
|
||||||
'include/cef_version.h',
|
'include/cef_version.h',
|
||||||
'include/internal/cef_export.h',
|
'include/internal/cef_export.h',
|
||||||
'include/internal/cef_logging_internal.h',
|
'include/internal/cef_logging_internal.h',
|
||||||
|
@ -32,18 +32,27 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "include/base/cef_build.h"
|
#include "include/base/cef_build.h"
|
||||||
|
#include "include/cef_config.h"
|
||||||
|
|
||||||
#if defined(OS_LINUX)
|
#if defined(OS_LINUX)
|
||||||
|
|
||||||
|
#if defined(CEF_X11)
|
||||||
typedef union _XEvent XEvent;
|
typedef union _XEvent XEvent;
|
||||||
typedef struct _XDisplay XDisplay;
|
typedef struct _XDisplay XDisplay;
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "include/internal/cef_export.h"
|
#include "include/internal/cef_export.h"
|
||||||
#include "include/internal/cef_string.h"
|
#include "include/internal/cef_string.h"
|
||||||
|
|
||||||
// Handle types.
|
// Handle types.
|
||||||
|
#if defined(CEF_X11)
|
||||||
#define cef_cursor_handle_t unsigned long
|
#define cef_cursor_handle_t unsigned long
|
||||||
#define cef_event_handle_t XEvent*
|
#define cef_event_handle_t XEvent*
|
||||||
|
#else
|
||||||
|
#define cef_cursor_handle_t void*
|
||||||
|
#define cef_event_handle_t void*
|
||||||
|
#endif
|
||||||
|
|
||||||
#define cef_window_handle_t unsigned long
|
#define cef_window_handle_t unsigned long
|
||||||
|
|
||||||
#define kNullCursorHandle 0
|
#define kNullCursorHandle 0
|
||||||
@ -58,7 +67,9 @@ extern "C" {
|
|||||||
// Return the singleton X11 display shared with Chromium. The display is not
|
// Return the singleton X11 display shared with Chromium. The display is not
|
||||||
// thread-safe and must only be accessed on the browser process UI thread.
|
// thread-safe and must only be accessed on the browser process UI thread.
|
||||||
///
|
///
|
||||||
|
#if defined(CEF_X11)
|
||||||
CEF_EXPORT XDisplay* cef_get_xdisplay();
|
CEF_EXPORT XDisplay* cef_get_xdisplay();
|
||||||
|
#endif
|
||||||
|
|
||||||
///
|
///
|
||||||
// Structure representing CefExecuteProcess arguments.
|
// Structure representing CefExecuteProcess arguments.
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
#include "libcef/browser/context.h"
|
#include "libcef/browser/context.h"
|
||||||
#include "libcef/browser/native/menu_runner_linux.h"
|
#include "libcef/browser/native/menu_runner_linux.h"
|
||||||
#include "libcef/browser/native/window_delegate_view.h"
|
#include "libcef/browser/native/window_delegate_view.h"
|
||||||
#include "libcef/browser/native/window_x11.h"
|
|
||||||
#include "libcef/browser/thread_util.h"
|
#include "libcef/browser/thread_util.h"
|
||||||
|
|
||||||
#include "base/no_destructor.h"
|
#include "base/no_destructor.h"
|
||||||
@ -23,10 +22,14 @@
|
|||||||
#include "ui/events/keycodes/keyboard_code_conversion_xkb.h"
|
#include "ui/events/keycodes/keyboard_code_conversion_xkb.h"
|
||||||
#include "ui/events/keycodes/keysym_to_unicode.h"
|
#include "ui/events/keycodes/keysym_to_unicode.h"
|
||||||
#include "ui/gfx/font_render_params.h"
|
#include "ui/gfx/font_render_params.h"
|
||||||
#include "ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h"
|
|
||||||
#include "ui/views/widget/widget.h"
|
#include "ui/views/widget/widget.h"
|
||||||
#include "third_party/blink/public/mojom/renderer_preferences.mojom.h"
|
#include "third_party/blink/public/mojom/renderer_preferences.mojom.h"
|
||||||
|
|
||||||
|
#if defined(USE_X11)
|
||||||
|
#include "libcef/browser/native/window_x11.h"
|
||||||
|
#include "ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
// Returns the number of seconds since system boot.
|
// Returns the number of seconds since system boot.
|
||||||
@ -48,8 +51,7 @@ CefBrowserPlatformDelegateNativeLinux::CefBrowserPlatformDelegateNativeLinux(
|
|||||||
false,
|
false,
|
||||||
use_external_begin_frame),
|
use_external_begin_frame),
|
||||||
host_window_created_(false),
|
host_window_created_(false),
|
||||||
window_widget_(nullptr),
|
window_widget_(nullptr) {}
|
||||||
window_x11_(nullptr) {}
|
|
||||||
|
|
||||||
void CefBrowserPlatformDelegateNativeLinux::BrowserDestroyed(
|
void CefBrowserPlatformDelegateNativeLinux::BrowserDestroyed(
|
||||||
CefBrowserHostImpl* browser) {
|
CefBrowserHostImpl* browser) {
|
||||||
@ -62,7 +64,6 @@ void CefBrowserPlatformDelegateNativeLinux::BrowserDestroyed(
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool CefBrowserPlatformDelegateNativeLinux::CreateHostWindow() {
|
bool CefBrowserPlatformDelegateNativeLinux::CreateHostWindow() {
|
||||||
DCHECK(!window_x11_);
|
|
||||||
DCHECK(!window_widget_);
|
DCHECK(!window_widget_);
|
||||||
|
|
||||||
if (window_info_.width == 0)
|
if (window_info_.width == 0)
|
||||||
@ -73,6 +74,8 @@ bool CefBrowserPlatformDelegateNativeLinux::CreateHostWindow() {
|
|||||||
gfx::Rect rect(window_info_.x, window_info_.y, window_info_.width,
|
gfx::Rect rect(window_info_.x, window_info_.y, window_info_.width,
|
||||||
window_info_.height);
|
window_info_.height);
|
||||||
|
|
||||||
|
#if defined(USE_X11)
|
||||||
|
DCHECK(!window_x11_);
|
||||||
// Create a new window object. It will delete itself when the associated X11
|
// Create a new window object. It will delete itself when the associated X11
|
||||||
// window is destroyed.
|
// window is destroyed.
|
||||||
window_x11_ = new CefWindowX11(browser_, window_info_.parent_window, rect,
|
window_x11_ = new CefWindowX11(browser_, window_info_.parent_window, rect,
|
||||||
@ -93,6 +96,7 @@ bool CefBrowserPlatformDelegateNativeLinux::CreateHostWindow() {
|
|||||||
window_widget_->Show();
|
window_widget_->Show();
|
||||||
|
|
||||||
window_x11_->Show();
|
window_x11_->Show();
|
||||||
|
#endif // defined(USE_X11)
|
||||||
|
|
||||||
// As an additional requirement on Linux, we must set the colors for the
|
// As an additional requirement on Linux, we must set the colors for the
|
||||||
// render widgets in webkit.
|
// render widgets in webkit.
|
||||||
@ -121,8 +125,10 @@ bool CefBrowserPlatformDelegateNativeLinux::CreateHostWindow() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CefBrowserPlatformDelegateNativeLinux::CloseHostWindow() {
|
void CefBrowserPlatformDelegateNativeLinux::CloseHostWindow() {
|
||||||
|
#if defined(USE_X11)
|
||||||
if (window_x11_)
|
if (window_x11_)
|
||||||
window_x11_->Close();
|
window_x11_->Close();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
CefWindowHandle CefBrowserPlatformDelegateNativeLinux::GetHostWindowHandle()
|
CefWindowHandle CefBrowserPlatformDelegateNativeLinux::GetHostWindowHandle()
|
||||||
@ -146,18 +152,21 @@ void CefBrowserPlatformDelegateNativeLinux::SendFocusEvent(bool setFocus) {
|
|||||||
browser_->web_contents()->Focus();
|
browser_->web_contents()->Focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(USE_X11)
|
||||||
if (window_x11_) {
|
if (window_x11_) {
|
||||||
// Give native focus to the DesktopNativeWidgetAura for the root window.
|
// Give native focus to the DesktopNativeWidgetAura for the root window.
|
||||||
// Needs to be done via the ::Window so that keyboard focus is assigned
|
// Needs to be done via the ::Window so that keyboard focus is assigned
|
||||||
// correctly.
|
// correctly.
|
||||||
window_x11_->Focus();
|
window_x11_->Focus();
|
||||||
}
|
}
|
||||||
|
#endif // defined(USE_X11)
|
||||||
}
|
}
|
||||||
|
|
||||||
void CefBrowserPlatformDelegateNativeLinux::NotifyMoveOrResizeStarted() {
|
void CefBrowserPlatformDelegateNativeLinux::NotifyMoveOrResizeStarted() {
|
||||||
// Call the parent method to dismiss any existing popups.
|
// Call the parent method to dismiss any existing popups.
|
||||||
CefBrowserPlatformDelegate::NotifyMoveOrResizeStarted();
|
CefBrowserPlatformDelegate::NotifyMoveOrResizeStarted();
|
||||||
|
|
||||||
|
#if defined(USE_X11)
|
||||||
if (!window_x11_)
|
if (!window_x11_)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -175,13 +184,16 @@ void CefBrowserPlatformDelegateNativeLinux::NotifyMoveOrResizeStarted() {
|
|||||||
content::RenderWidgetHostImpl::From(
|
content::RenderWidgetHostImpl::From(
|
||||||
browser_->web_contents()->GetRenderViewHost()->GetWidget())
|
browser_->web_contents()->GetRenderViewHost()->GetWidget())
|
||||||
->SendScreenRects();
|
->SendScreenRects();
|
||||||
|
#endif // defined(USE_X11)
|
||||||
}
|
}
|
||||||
|
|
||||||
void CefBrowserPlatformDelegateNativeLinux::SizeTo(int width, int height) {
|
void CefBrowserPlatformDelegateNativeLinux::SizeTo(int width, int height) {
|
||||||
|
#if defined(USE_X11)
|
||||||
if (window_x11_) {
|
if (window_x11_) {
|
||||||
window_x11_->SetBounds(
|
window_x11_->SetBounds(
|
||||||
gfx::Rect(window_x11_->bounds().origin(), gfx::Size(width, height)));
|
gfx::Rect(window_x11_->bounds().origin(), gfx::Size(width, height)));
|
||||||
}
|
}
|
||||||
|
#endif // defined(USE_X11)
|
||||||
}
|
}
|
||||||
|
|
||||||
gfx::Point CefBrowserPlatformDelegateNativeLinux::GetScreenPoint(
|
gfx::Point CefBrowserPlatformDelegateNativeLinux::GetScreenPoint(
|
||||||
@ -189,6 +201,7 @@ gfx::Point CefBrowserPlatformDelegateNativeLinux::GetScreenPoint(
|
|||||||
if (windowless_handler_)
|
if (windowless_handler_)
|
||||||
return windowless_handler_->GetParentScreenPoint(view);
|
return windowless_handler_->GetParentScreenPoint(view);
|
||||||
|
|
||||||
|
#if defined(USE_X11)
|
||||||
if (!window_x11_)
|
if (!window_x11_)
|
||||||
return view;
|
return view;
|
||||||
|
|
||||||
@ -198,6 +211,8 @@ gfx::Point CefBrowserPlatformDelegateNativeLinux::GetScreenPoint(
|
|||||||
const gfx::Rect& bounds_in_screen = window_x11_->GetBoundsInScreen();
|
const gfx::Rect& bounds_in_screen = window_x11_->GetBoundsInScreen();
|
||||||
return gfx::Point(bounds_in_screen.x() + view.x(),
|
return gfx::Point(bounds_in_screen.x() + view.x(),
|
||||||
bounds_in_screen.y() + view.y());
|
bounds_in_screen.y() + view.y());
|
||||||
|
#endif // defined(USE_X11)
|
||||||
|
return gfx::Point();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CefBrowserPlatformDelegateNativeLinux::ViewText(const std::string& text) {
|
void CefBrowserPlatformDelegateNativeLinux::ViewText(const std::string& text) {
|
||||||
@ -260,6 +275,7 @@ void CefBrowserPlatformDelegateNativeLinux::TranslateKeyEvent(
|
|||||||
NOTREACHED();
|
NOTREACHED();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(USE_X11)
|
||||||
// Populate DOM values that will be passed to JavaScript handlers via
|
// Populate DOM values that will be passed to JavaScript handlers via
|
||||||
// KeyboardEvent.
|
// KeyboardEvent.
|
||||||
result.dom_code = static_cast<int>(
|
result.dom_code = static_cast<int>(
|
||||||
@ -275,6 +291,7 @@ void CefBrowserPlatformDelegateNativeLinux::TranslateKeyEvent(
|
|||||||
|
|
||||||
result.SetModifiers(result.GetModifiers() |
|
result.SetModifiers(result.GetModifiers() |
|
||||||
TranslateModifiers(key_event.modifiers));
|
TranslateModifiers(key_event.modifiers));
|
||||||
|
#endif // defined(USE_X11)
|
||||||
}
|
}
|
||||||
|
|
||||||
void CefBrowserPlatformDelegateNativeLinux::TranslateClickEvent(
|
void CefBrowserPlatformDelegateNativeLinux::TranslateClickEvent(
|
||||||
@ -363,7 +380,8 @@ CefEventHandle CefBrowserPlatformDelegateNativeLinux::GetEventHandle(
|
|||||||
const content::NativeWebKeyboardEvent& event) const {
|
const content::NativeWebKeyboardEvent& event) const {
|
||||||
if (!event.os_event)
|
if (!event.os_event)
|
||||||
return NULL;
|
return NULL;
|
||||||
return const_cast<CefEventHandle>(event.os_event->native_event());
|
return const_cast<CefEventHandle>(
|
||||||
|
static_cast<CefEventHandle>(event.os_event->native_event()));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<CefMenuRunner>
|
std::unique_ptr<CefMenuRunner>
|
||||||
|
@ -7,7 +7,9 @@
|
|||||||
|
|
||||||
#include "libcef/browser/native/browser_platform_delegate_native.h"
|
#include "libcef/browser/native/browser_platform_delegate_native.h"
|
||||||
|
|
||||||
|
#if defined(USE_X11)
|
||||||
class CefWindowX11;
|
class CefWindowX11;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Windowed browser implementation for Linux.
|
// Windowed browser implementation for Linux.
|
||||||
class CefBrowserPlatformDelegateNativeLinux
|
class CefBrowserPlatformDelegateNativeLinux
|
||||||
@ -60,7 +62,9 @@ class CefBrowserPlatformDelegateNativeLinux
|
|||||||
// associated root window is destroyed.
|
// associated root window is destroyed.
|
||||||
views::Widget* window_widget_;
|
views::Widget* window_widget_;
|
||||||
|
|
||||||
CefWindowX11* window_x11_;
|
#if defined(USE_X11)
|
||||||
|
CefWindowX11* window_x11_ = nullptr;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CEF_LIBCEF_BROWSER_NATIVE_BROWSER_PLATFORM_DELEGATE_NATIVE_LINUX_H_
|
#endif // CEF_LIBCEF_BROWSER_NATIVE_BROWSER_PLATFORM_DELEGATE_NATIVE_LINUX_H_
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
|
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include "libcef/browser/browser_host_impl.h"
|
|
||||||
#include "libcef/browser/osr/osr_util.h"
|
#include "libcef/browser/osr/osr_util.h"
|
||||||
#include "libcef/browser/osr/software_output_device_osr.h"
|
#include "libcef/browser/osr/software_output_device_osr.h"
|
||||||
#include "libcef/browser/osr/synthetic_gesture_target_osr.h"
|
#include "libcef/browser/osr/synthetic_gesture_target_osr.h"
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#include "include/cef_base.h"
|
#include "include/cef_base.h"
|
||||||
#include "include/cef_browser.h"
|
#include "include/cef_browser.h"
|
||||||
|
#include "libcef/browser/browser_host_impl.h"
|
||||||
#include "libcef/browser/osr/motion_event_osr.h"
|
#include "libcef/browser/osr/motion_event_osr.h"
|
||||||
|
|
||||||
#include "base/memory/weak_ptr.h"
|
#include "base/memory/weak_ptr.h"
|
||||||
@ -60,7 +60,6 @@ class CursorManager;
|
|||||||
} // namespace content
|
} // namespace content
|
||||||
|
|
||||||
class CefBeginFrameTimer;
|
class CefBeginFrameTimer;
|
||||||
class CefBrowserHostImpl;
|
|
||||||
class CefCopyFrameGenerator;
|
class CefCopyFrameGenerator;
|
||||||
class CefSoftwareOutputDeviceOSR;
|
class CefSoftwareOutputDeviceOSR;
|
||||||
class CefWebContentsViewOSR;
|
class CefWebContentsViewOSR;
|
||||||
|
@ -5,16 +5,20 @@
|
|||||||
|
|
||||||
#include "libcef/browser/osr/render_widget_host_view_osr.h"
|
#include "libcef/browser/osr/render_widget_host_view_osr.h"
|
||||||
|
|
||||||
|
#include "third_party/blink/public/platform/web_cursor_info.h"
|
||||||
|
|
||||||
|
#if defined(USE_X11)
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
#include <X11/cursorfont.h>
|
#include <X11/cursorfont.h>
|
||||||
#undef Status // Avoid conflicts with url_request_status.h
|
#undef Status // Avoid conflicts with url_request_status.h
|
||||||
|
|
||||||
#include "libcef/browser/native/window_x11.h"
|
#include "libcef/browser/native/window_x11.h"
|
||||||
|
|
||||||
#include "third_party/blink/public/platform/web_cursor_info.h"
|
|
||||||
#include "ui/base/x/x11_util.h"
|
#include "ui/base/x/x11_util.h"
|
||||||
#include "ui/gfx/x/x11_types.h"
|
#include "ui/gfx/x/x11_types.h"
|
||||||
|
#endif // defined(USE_X11)
|
||||||
|
|
||||||
|
#if defined(USE_X11)
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
// Based on ui/base/cursor/cursor_loader_x11.cc.
|
// Based on ui/base/cursor/cursor_loader_x11.cc.
|
||||||
@ -163,25 +167,31 @@ XCursorCache* cursor_cache = nullptr;
|
|||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
#endif // defined(USE_X11)
|
||||||
|
|
||||||
void CefRenderWidgetHostViewOSR::PlatformCreateCompositorWidget(
|
void CefRenderWidgetHostViewOSR::PlatformCreateCompositorWidget(
|
||||||
bool is_guest_view_hack) {
|
bool is_guest_view_hack) {
|
||||||
|
#if defined(USE_X11)
|
||||||
// Create a hidden 1x1 window. It will delete itself on close.
|
// Create a hidden 1x1 window. It will delete itself on close.
|
||||||
window_ = new CefWindowX11(NULL, None, gfx::Rect(0, 0, 1, 1), "");
|
window_ = new CefWindowX11(NULL, None, gfx::Rect(0, 0, 1, 1), "");
|
||||||
compositor_widget_ = window_->xwindow();
|
compositor_widget_ = window_->xwindow();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void CefRenderWidgetHostViewOSR::PlatformResizeCompositorWidget(
|
void CefRenderWidgetHostViewOSR::PlatformResizeCompositorWidget(
|
||||||
const gfx::Size&) {}
|
const gfx::Size&) {}
|
||||||
|
|
||||||
void CefRenderWidgetHostViewOSR::PlatformDestroyCompositorWidget() {
|
void CefRenderWidgetHostViewOSR::PlatformDestroyCompositorWidget() {
|
||||||
|
#if defined(USE_X11)
|
||||||
DCHECK(window_);
|
DCHECK(window_);
|
||||||
window_->Close();
|
window_->Close();
|
||||||
|
#endif
|
||||||
compositor_widget_ = gfx::kNullAcceleratedWidget;
|
compositor_widget_ = gfx::kNullAcceleratedWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
ui::PlatformCursor CefRenderWidgetHostViewOSR::GetPlatformCursor(
|
ui::PlatformCursor CefRenderWidgetHostViewOSR::GetPlatformCursor(
|
||||||
blink::WebCursorInfo::Type type) {
|
blink::WebCursorInfo::Type type) {
|
||||||
|
#if defined(USE_X11)
|
||||||
if (type == WebCursorInfo::kTypeNone) {
|
if (type == WebCursorInfo::kTypeNone) {
|
||||||
if (!invisible_cursor_) {
|
if (!invisible_cursor_) {
|
||||||
invisible_cursor_.reset(new ui::XScopedCursor(ui::CreateInvisibleCursor(),
|
invisible_cursor_.reset(new ui::XScopedCursor(ui::CreateInvisibleCursor(),
|
||||||
@ -191,4 +201,6 @@ ui::PlatformCursor CefRenderWidgetHostViewOSR::GetPlatformCursor(
|
|||||||
} else {
|
} else {
|
||||||
return GetXCursor(ToCursorID(type));
|
return GetXCursor(ToCursorID(type));
|
||||||
}
|
}
|
||||||
|
#endif // defined(USE_X11)
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
#include "ui/aura/test/ui_controls_factory_aura.h"
|
#include "ui/aura/test/ui_controls_factory_aura.h"
|
||||||
#include "ui/aura/window.h"
|
#include "ui/aura/window.h"
|
||||||
#include "ui/base/test/ui_controls_aura.h"
|
#include "ui/base/test/ui_controls_aura.h"
|
||||||
#if defined(OS_LINUX)
|
#if defined(OS_LINUX) && defined(USE_X11)
|
||||||
#include "ui/views/test/ui_controls_factory_desktop_aurax11.h"
|
#include "ui/views/test/ui_controls_factory_desktop_aurax11.h"
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@ -37,8 +37,9 @@ void InitializeUITesting() {
|
|||||||
if (!initialized) {
|
if (!initialized) {
|
||||||
ui_controls::EnableUIControls();
|
ui_controls::EnableUIControls();
|
||||||
|
|
||||||
|
|
||||||
#if defined(USE_AURA)
|
#if defined(USE_AURA)
|
||||||
#if defined(OS_LINUX)
|
#if defined(OS_LINUX) && defined(USE_X11)
|
||||||
ui_controls::InstallUIControlsAura(
|
ui_controls::InstallUIControlsAura(
|
||||||
views::test::CreateUIControlsDesktopAura());
|
views::test::CreateUIControlsDesktopAura());
|
||||||
#else
|
#else
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
#include "ui/views/widget/widget.h"
|
#include "ui/views/widget/widget.h"
|
||||||
#include "ui/views/window/native_frame_view.h"
|
#include "ui/views/window/native_frame_view.h"
|
||||||
|
|
||||||
#if defined(OS_LINUX)
|
#if defined(OS_LINUX) && defined(USE_X11)
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
#include "ui/gfx/x/x11_types.h"
|
#include "ui/gfx/x/x11_types.h"
|
||||||
#endif
|
#endif
|
||||||
@ -250,6 +250,7 @@ void CefWindowView::CreateWidget() {
|
|||||||
views::Widget::InitParams params;
|
views::Widget::InitParams params;
|
||||||
params.delegate = this;
|
params.delegate = this;
|
||||||
params.type = views::Widget::InitParams::TYPE_WINDOW;
|
params.type = views::Widget::InitParams::TYPE_WINDOW;
|
||||||
|
params.bounds = gfx::Rect(CalculatePreferredSize());
|
||||||
bool can_activate = true;
|
bool can_activate = true;
|
||||||
|
|
||||||
if (cef_delegate()) {
|
if (cef_delegate()) {
|
||||||
@ -294,7 +295,7 @@ void CefWindowView::CreateWidget() {
|
|||||||
DCHECK(widget->widget_delegate()->CanActivate());
|
DCHECK(widget->widget_delegate()->CanActivate());
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(OS_LINUX)
|
#if defined(OS_LINUX) && defined(USE_X11)
|
||||||
if (is_frameless_) {
|
if (is_frameless_) {
|
||||||
::Window window = view_util::GetWindowHandle(widget);
|
::Window window = view_util::GetWindowHandle(widget);
|
||||||
DCHECK(window);
|
DCHECK(window);
|
||||||
@ -329,7 +330,7 @@ void CefWindowView::CreateWidget() {
|
|||||||
XChangeProperty(display, window, mwmHintsProperty, mwmHintsProperty, 32,
|
XChangeProperty(display, window, mwmHintsProperty, mwmHintsProperty, 32,
|
||||||
PropModeReplace, (unsigned char*)&hints, 5);
|
PropModeReplace, (unsigned char*)&hints, 5);
|
||||||
}
|
}
|
||||||
#endif // defined(OS_LINUX)
|
#endif // defined(OS_LINUX) && defined(USE_X11)
|
||||||
}
|
}
|
||||||
|
|
||||||
CefRefPtr<CefWindow> CefWindowView::GetCefWindow() const {
|
CefRefPtr<CefWindow> CefWindowView::GetCefWindow() const {
|
||||||
|
@ -73,6 +73,9 @@ if(OS_LINUX)
|
|||||||
# Copy binary and resource files to the target output directory.
|
# Copy binary and resource files to the target output directory.
|
||||||
COPY_FILES("${CEF_TARGET}" "${CEF_BINARY_FILES}" "${CEF_BINARY_DIR}" "${CEF_TARGET_OUT_DIR}")
|
COPY_FILES("${CEF_TARGET}" "${CEF_BINARY_FILES}" "${CEF_BINARY_DIR}" "${CEF_TARGET_OUT_DIR}")
|
||||||
COPY_FILES("${CEF_TARGET}" "${CEF_RESOURCE_FILES}" "${CEF_RESOURCE_DIR}" "${CEF_TARGET_OUT_DIR}")
|
COPY_FILES("${CEF_TARGET}" "${CEF_RESOURCE_FILES}" "${CEF_RESOURCE_DIR}" "${CEF_TARGET_OUT_DIR}")
|
||||||
|
if (EXISTS "${CEF_BINARY_DIR}/libminigbm.so")
|
||||||
|
COPY_FILES("${CEF_TARGET}" "libminigbm.so" "${CEF_BINARY_DIR}" "${CEF_TARGET_OUT_DIR}")
|
||||||
|
endif()
|
||||||
|
|
||||||
# Set SUID permissions on the chrome-sandbox target.
|
# Set SUID permissions on the chrome-sandbox target.
|
||||||
SET_LINUX_SUID_PERMISSIONS("${CEF_TARGET}" "${CEF_TARGET_OUT_DIR}/chrome-sandbox")
|
SET_LINUX_SUID_PERMISSIONS("${CEF_TARGET}" "${CEF_TARGET_OUT_DIR}/chrome-sandbox")
|
||||||
|
@ -4,10 +4,13 @@
|
|||||||
|
|
||||||
#include "tests/cefsimple/simple_app.h"
|
#include "tests/cefsimple/simple_app.h"
|
||||||
|
|
||||||
|
#if defined(CEF_X11)
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "include/base/cef_logging.h"
|
#include "include/base/cef_logging.h"
|
||||||
|
|
||||||
|
#if defined(CEF_X11)
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
int XErrorHandlerImpl(Display* display, XErrorEvent* event) {
|
int XErrorHandlerImpl(Display* display, XErrorEvent* event) {
|
||||||
@ -26,6 +29,7 @@ int XIOErrorHandlerImpl(Display* display) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
#endif // defined(CEF_X11)
|
||||||
|
|
||||||
// Entry point function for all processes.
|
// Entry point function for all processes.
|
||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
@ -41,10 +45,12 @@ int main(int argc, char* argv[]) {
|
|||||||
return exit_code;
|
return exit_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(CEF_X11)
|
||||||
// Install xlib error handlers so that the application won't be terminated
|
// Install xlib error handlers so that the application won't be terminated
|
||||||
// on non-fatal errors.
|
// on non-fatal errors.
|
||||||
XSetErrorHandler(XErrorHandlerImpl);
|
XSetErrorHandler(XErrorHandlerImpl);
|
||||||
XSetIOErrorHandler(XIOErrorHandlerImpl);
|
XSetIOErrorHandler(XIOErrorHandlerImpl);
|
||||||
|
#endif
|
||||||
|
|
||||||
// Specify CEF global settings here.
|
// Specify CEF global settings here.
|
||||||
CefSettings settings;
|
CefSettings settings;
|
||||||
|
@ -43,6 +43,10 @@ class SimpleWindowDelegate : public CefWindowDelegate {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CefSize GetPreferredSize(CefRefPtr<CefView> view) OVERRIDE {
|
||||||
|
return CefSize(800, 600);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CefRefPtr<CefBrowserView> browser_view_;
|
CefRefPtr<CefBrowserView> browser_view_;
|
||||||
|
|
||||||
|
@ -4,8 +4,11 @@
|
|||||||
|
|
||||||
#include "tests/cefsimple/simple_handler.h"
|
#include "tests/cefsimple/simple_handler.h"
|
||||||
|
|
||||||
|
#if defined(CEF_X11)
|
||||||
#include <X11/Xatom.h>
|
#include <X11/Xatom.h>
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "include/base/cef_logging.h"
|
#include "include/base/cef_logging.h"
|
||||||
@ -15,6 +18,7 @@ void SimpleHandler::PlatformTitleChange(CefRefPtr<CefBrowser> browser,
|
|||||||
const CefString& title) {
|
const CefString& title) {
|
||||||
std::string titleStr(title);
|
std::string titleStr(title);
|
||||||
|
|
||||||
|
#if defined(CEF_X11)
|
||||||
// Retrieve the X11 display shared with Chromium.
|
// Retrieve the X11 display shared with Chromium.
|
||||||
::Display* display = cef_get_xdisplay();
|
::Display* display = cef_get_xdisplay();
|
||||||
DCHECK(display);
|
DCHECK(display);
|
||||||
@ -41,4 +45,5 @@ void SimpleHandler::PlatformTitleChange(CefRefPtr<CefBrowser> browser,
|
|||||||
// is Compound Text. This shouldn't matter 90% of the time since this is the
|
// is Compound Text. This shouldn't matter 90% of the time since this is the
|
||||||
// fallback to the UTF8 property above.
|
// fallback to the UTF8 property above.
|
||||||
XStoreName(display, browser->GetHost()->GetWindowHandle(), titleStr.c_str());
|
XStoreName(display, browser->GetHost()->GetWindowHandle(), titleStr.c_str());
|
||||||
|
#endif // defined(CEF_X11)
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,9 @@
|
|||||||
// can be found in the LICENSE file.
|
// can be found in the LICENSE file.
|
||||||
|
|
||||||
#include "include/base/cef_build.h"
|
#include "include/base/cef_build.h"
|
||||||
|
#include "include/cef_config.h"
|
||||||
|
|
||||||
#if defined(OS_LINUX)
|
#if defined(OS_LINUX) && defined(CEF_X11)
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
// Definitions conflict with gtest.
|
// Definitions conflict with gtest.
|
||||||
#undef None
|
#undef None
|
||||||
@ -84,7 +85,7 @@ void ContinueOnUIThread(CefRefPtr<CefTaskRunner> test_task_runner) {
|
|||||||
CefCreateClosureTask(base::Bind(&RunTestsOnTestThread)));
|
CefCreateClosureTask(base::Bind(&RunTestsOnTestThread)));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(OS_LINUX)
|
#if defined(OS_LINUX) && defined(CEF_X11)
|
||||||
int XErrorHandlerImpl(Display* display, XErrorEvent* event) {
|
int XErrorHandlerImpl(Display* display, XErrorEvent* event) {
|
||||||
LOG(WARNING) << "X error received: "
|
LOG(WARNING) << "X error received: "
|
||||||
<< "type " << event->type << ", "
|
<< "type " << event->type << ", "
|
||||||
@ -99,7 +100,7 @@ int XErrorHandlerImpl(Display* display, XErrorEvent* event) {
|
|||||||
int XIOErrorHandlerImpl(Display* display) {
|
int XIOErrorHandlerImpl(Display* display) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif // defined(OS_LINUX)
|
#endif // defined(OS_LINUX) && defined(CEF_X11)
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
@ -173,7 +174,7 @@ int main(int argc, char* argv[]) {
|
|||||||
PlatformInit();
|
PlatformInit();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(OS_LINUX)
|
#if defined(OS_LINUX) && defined(CEF_X11)
|
||||||
// Install xlib error handlers so that the application won't be terminated
|
// Install xlib error handlers so that the application won't be terminated
|
||||||
// on non-fatal errors.
|
// on non-fatal errors.
|
||||||
XSetErrorHandler(XErrorHandlerImpl);
|
XSetErrorHandler(XErrorHandlerImpl);
|
||||||
|
@ -132,3 +132,14 @@ for dir, config in configs.items():
|
|||||||
RunAction(src_dir, cmd)
|
RunAction(src_dir, cmd)
|
||||||
if platform == 'windows':
|
if platform == 'windows':
|
||||||
issue_1999.apply(out_path)
|
issue_1999.apply(out_path)
|
||||||
|
|
||||||
|
gn_dir = configs.keys()[0]
|
||||||
|
out_gn_path = os.path.join(src_dir, 'out', gn_dir)
|
||||||
|
gn_path = os.path.join(out_gn_path, 'args.gn')
|
||||||
|
print "\nGenerating CEF buildinfo header file..."
|
||||||
|
cmd = [
|
||||||
|
'python', 'tools/make_config_header.py', '--header', 'include/cef_config.h',
|
||||||
|
'--cef_gn_config', gn_path
|
||||||
|
]
|
||||||
|
|
||||||
|
RunAction(cef_dir, cmd)
|
||||||
|
121
tools/make_config_header.py
Normal file
121
tools/make_config_header.py
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
# Copyright (c) 2019 The Chromium Embedded Framework Authors. All rights
|
||||||
|
# reserved. Use of this source code is governed by a BSD-style license that
|
||||||
|
# can be found in the LICENSE file.
|
||||||
|
|
||||||
|
from date_util import *
|
||||||
|
from file_util import *
|
||||||
|
from optparse import OptionParser
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# cannot be loaded as a module
|
||||||
|
if __name__ != "__main__":
|
||||||
|
sys.stderr.write('This file cannot be loaded as a module!')
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
# parse command-line options
|
||||||
|
disc = """
|
||||||
|
This utility creates the config header file.
|
||||||
|
"""
|
||||||
|
parser = OptionParser(description=disc)
|
||||||
|
parser.add_option(
|
||||||
|
'--header',
|
||||||
|
dest='header',
|
||||||
|
metavar='FILE',
|
||||||
|
help='output config header file [required]')
|
||||||
|
parser.add_option(
|
||||||
|
'--cef_gn_config',
|
||||||
|
dest='cef_gn_config',
|
||||||
|
metavar='FILE',
|
||||||
|
help='input CEF gn config file [required]')
|
||||||
|
parser.add_option(
|
||||||
|
'-q',
|
||||||
|
'--quiet',
|
||||||
|
action='store_true',
|
||||||
|
dest='quiet',
|
||||||
|
default=False,
|
||||||
|
help='do not output detailed status information')
|
||||||
|
(options, args) = parser.parse_args()
|
||||||
|
|
||||||
|
# the header option is required
|
||||||
|
if options.header is None or options.cef_gn_config is None:
|
||||||
|
parser.print_help(sys.stdout)
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
|
||||||
|
def check_x11_build(gn_config):
|
||||||
|
""" Scan gn configuration file and decide whether it's x11 build or not """
|
||||||
|
lines = read_file(gn_config).split("\n")
|
||||||
|
for line in lines:
|
||||||
|
parts = line.split('=', 1)
|
||||||
|
if (parts[0] == "use_x11" and
|
||||||
|
parts[1] == "false") or (parts[0] == "use_ozone" and
|
||||||
|
parts[1] == "true"):
|
||||||
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
def write_config_header(header, cef_gn_config):
|
||||||
|
""" Creates the header file for the cef build configuration
|
||||||
|
if the information has changed or if the file doesn't already exist. """
|
||||||
|
|
||||||
|
if not path_exists(cef_gn_config):
|
||||||
|
raise Exception('file ' + cef_gn_config + ' does not exist.')
|
||||||
|
|
||||||
|
if path_exists(header):
|
||||||
|
oldcontents = read_file(header)
|
||||||
|
else:
|
||||||
|
oldcontents = ''
|
||||||
|
|
||||||
|
year = get_year()
|
||||||
|
|
||||||
|
cef_x11_defines = "#define CEF_X11 1" if check_x11_build(
|
||||||
|
cef_gn_config) else ""
|
||||||
|
|
||||||
|
newcontents = '// Copyright (c) '+year+' Marshall A. Greenblatt. All rights reserved.\n'+\
|
||||||
|
'//\n'+\
|
||||||
|
'// Redistribution and use in source and binary forms, with or without\n'+\
|
||||||
|
'// modification, are permitted provided that the following conditions are\n'+\
|
||||||
|
'// met:\n'+\
|
||||||
|
'//\n'+\
|
||||||
|
'// * Redistributions of source code must retain the above copyright\n'+\
|
||||||
|
'// notice, this list of conditions and the following disclaimer.\n'+\
|
||||||
|
'// * Redistributions in binary form must reproduce the above\n'+\
|
||||||
|
'// copyright notice, this list of conditions and the following disclaimer\n'+\
|
||||||
|
'// in the documentation and/or other materials provided with the\n'+\
|
||||||
|
'// distribution.\n'+\
|
||||||
|
'// * Neither the name of Google Inc. nor the name Chromium Embedded\n'+\
|
||||||
|
'// Framework nor the names of its contributors may be used to endorse\n'+\
|
||||||
|
'// or promote products derived from this software without specific prior\n'+\
|
||||||
|
'// written permission.\n'+\
|
||||||
|
'//\n'+\
|
||||||
|
'// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n'+\
|
||||||
|
'// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n'+\
|
||||||
|
'// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n'+\
|
||||||
|
'// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n'+\
|
||||||
|
'// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n'+\
|
||||||
|
'// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n'+\
|
||||||
|
'// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n'+\
|
||||||
|
'// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n'+\
|
||||||
|
'// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n'+\
|
||||||
|
'// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n'+\
|
||||||
|
'// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n'+\
|
||||||
|
'//\n'+\
|
||||||
|
'// ---------------------------------------------------------------------------\n'+\
|
||||||
|
'//\n'+\
|
||||||
|
'// This file is generated by the make_config_header.py tool.\n'+\
|
||||||
|
'//\n\n'+\
|
||||||
|
'#ifndef CEF_INCLUDE_CEF_CONFIG_H_\n'+\
|
||||||
|
'#define CEF_INCLUDE_CEF_CONFIG_H_\n\n'+\
|
||||||
|
'' + cef_x11_defines + '\n'+\
|
||||||
|
'#endif // CEF_INCLUDE_CEF_CONFIG_H_\n'
|
||||||
|
if newcontents != oldcontents:
|
||||||
|
write_file(header, newcontents)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
written = write_config_header(options.header, options.cef_gn_config)
|
||||||
|
if not options.quiet:
|
||||||
|
if written:
|
||||||
|
sys.stdout.write('File ' + options.header + ' updated.\n')
|
||||||
|
else:
|
||||||
|
sys.stdout.write('File ' + options.header + ' is already up to date.\n')
|
@ -496,6 +496,12 @@ parser.add_option(
|
|||||||
dest='sandbox',
|
dest='sandbox',
|
||||||
default=False,
|
default=False,
|
||||||
help='include only the cef_sandbox static library (macOS and Windows only)')
|
help='include only the cef_sandbox static library (macOS and Windows only)')
|
||||||
|
parser.add_option(
|
||||||
|
'--ozone',
|
||||||
|
action='store_true',
|
||||||
|
dest='ozone',
|
||||||
|
default=False,
|
||||||
|
help='include ozone build related files (Linux only)')
|
||||||
parser.add_option(
|
parser.add_option(
|
||||||
'-q',
|
'-q',
|
||||||
'--quiet',
|
'--quiet',
|
||||||
@ -541,6 +547,10 @@ if not options.ninjabuild:
|
|||||||
print 'Ninja build is required on all platforms'
|
print 'Ninja build is required on all platforms'
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
|
if options.ozone and platform != 'linux':
|
||||||
|
print '--ozone is only supported on Linux.'
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
# script directory
|
# script directory
|
||||||
script_dir = os.path.dirname(__file__)
|
script_dir = os.path.dirname(__file__)
|
||||||
|
|
||||||
@ -602,6 +612,9 @@ elif options.sandbox:
|
|||||||
else:
|
else:
|
||||||
mode = 'standard'
|
mode = 'standard'
|
||||||
|
|
||||||
|
if options.ozone:
|
||||||
|
output_dir_name = output_dir_name + '_ozone'
|
||||||
|
|
||||||
output_dir = create_output_dir(output_dir_name, options.outputdir)
|
output_dir = create_output_dir(output_dir_name, options.outputdir)
|
||||||
|
|
||||||
# create the README.TXT file
|
# create the README.TXT file
|
||||||
@ -711,9 +724,10 @@ if mode == 'standard':
|
|||||||
shared_dir = os.path.join(tests_dir, 'shared')
|
shared_dir = os.path.join(tests_dir, 'shared')
|
||||||
make_dir(shared_dir, options.quiet)
|
make_dir(shared_dir, options.quiet)
|
||||||
|
|
||||||
# create the tests/cefclient directory
|
if not options.ozone:
|
||||||
cefclient_dir = os.path.join(tests_dir, 'cefclient')
|
# create the tests/cefclient directory
|
||||||
make_dir(cefclient_dir, options.quiet)
|
cefclient_dir = os.path.join(tests_dir, 'cefclient')
|
||||||
|
make_dir(cefclient_dir, options.quiet)
|
||||||
|
|
||||||
# create the tests/cefsimple directory
|
# create the tests/cefsimple directory
|
||||||
cefsimple_dir = os.path.join(tests_dir, 'cefsimple')
|
cefsimple_dir = os.path.join(tests_dir, 'cefsimple')
|
||||||
@ -733,17 +747,18 @@ if mode == 'standard':
|
|||||||
transfer_gypi_files(cef_dir, cef_paths2['shared_sources_resources'], \
|
transfer_gypi_files(cef_dir, cef_paths2['shared_sources_resources'], \
|
||||||
'tests/shared/', shared_dir, options.quiet)
|
'tests/shared/', shared_dir, options.quiet)
|
||||||
|
|
||||||
# transfer common cefclient files
|
if not options.ozone:
|
||||||
transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_browser'], \
|
# transfer common cefclient files
|
||||||
'tests/cefclient/', cefclient_dir, options.quiet)
|
transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_browser'], \
|
||||||
transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_common'], \
|
'tests/cefclient/', cefclient_dir, options.quiet)
|
||||||
'tests/cefclient/', cefclient_dir, options.quiet)
|
transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_common'], \
|
||||||
transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_renderer'], \
|
'tests/cefclient/', cefclient_dir, options.quiet)
|
||||||
'tests/cefclient/', cefclient_dir, options.quiet)
|
transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_renderer'], \
|
||||||
transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_resources'], \
|
'tests/cefclient/', cefclient_dir, options.quiet)
|
||||||
'tests/cefclient/', cefclient_dir, options.quiet)
|
transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_resources'], \
|
||||||
transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_resources_extensions_set_page_color'], \
|
'tests/cefclient/', cefclient_dir, options.quiet)
|
||||||
'tests/cefclient/', cefclient_dir, options.quiet)
|
transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_resources_extensions_set_page_color'], \
|
||||||
|
'tests/cefclient/', cefclient_dir, options.quiet)
|
||||||
|
|
||||||
# transfer common cefsimple files
|
# transfer common cefsimple files
|
||||||
transfer_gypi_files(cef_dir, cef_paths2['cefsimple_sources_common'], \
|
transfer_gypi_files(cef_dir, cef_paths2['cefsimple_sources_common'], \
|
||||||
@ -757,9 +772,10 @@ if mode == 'standard':
|
|||||||
create_fuzed_gtest(tests_dir)
|
create_fuzed_gtest(tests_dir)
|
||||||
|
|
||||||
# process cmake templates
|
# process cmake templates
|
||||||
process_cmake_template(os.path.join(cef_dir, 'tests', 'cefclient', 'CMakeLists.txt.in'), \
|
if not options.ozone:
|
||||||
os.path.join(cefclient_dir, 'CMakeLists.txt'), \
|
process_cmake_template(os.path.join(cef_dir, 'tests', 'cefclient', 'CMakeLists.txt.in'), \
|
||||||
variables, options.quiet)
|
os.path.join(cefclient_dir, 'CMakeLists.txt'), \
|
||||||
|
variables, options.quiet)
|
||||||
process_cmake_template(os.path.join(cef_dir, 'tests', 'cefsimple', 'CMakeLists.txt.in'), \
|
process_cmake_template(os.path.join(cef_dir, 'tests', 'cefsimple', 'CMakeLists.txt.in'), \
|
||||||
os.path.join(cefsimple_dir, 'CMakeLists.txt'), \
|
os.path.join(cefsimple_dir, 'CMakeLists.txt'), \
|
||||||
variables, options.quiet)
|
variables, options.quiet)
|
||||||
@ -1101,6 +1117,8 @@ elif platform == 'linux':
|
|||||||
{'path': 'swiftshader/libGLESv2.so'},
|
{'path': 'swiftshader/libGLESv2.so'},
|
||||||
]
|
]
|
||||||
# yapf: enable
|
# yapf: enable
|
||||||
|
if options.ozone:
|
||||||
|
binaries.append({'path': 'libminigbm.so', 'conditional': True})
|
||||||
|
|
||||||
if mode == 'client':
|
if mode == 'client':
|
||||||
binaries.append({'path': 'cefsimple'})
|
binaries.append({'path': 'cefsimple'})
|
||||||
@ -1163,9 +1181,10 @@ elif platform == 'linux':
|
|||||||
transfer_gypi_files(cef_dir, cef_paths2['shared_sources_linux'], \
|
transfer_gypi_files(cef_dir, cef_paths2['shared_sources_linux'], \
|
||||||
'tests/shared/', shared_dir, options.quiet)
|
'tests/shared/', shared_dir, options.quiet)
|
||||||
|
|
||||||
# transfer cefclient files
|
if not options.ozone:
|
||||||
transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_linux'], \
|
# transfer cefclient files
|
||||||
'tests/cefclient/', cefclient_dir, options.quiet)
|
transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_linux'], \
|
||||||
|
'tests/cefclient/', cefclient_dir, options.quiet)
|
||||||
|
|
||||||
# transfer cefsimple files
|
# transfer cefsimple files
|
||||||
transfer_gypi_files(cef_dir, cef_paths2['cefsimple_sources_linux'], \
|
transfer_gypi_files(cef_dir, cef_paths2['cefsimple_sources_linux'], \
|
||||||
|
Reference in New Issue
Block a user