Compare commits

..

36 Commits
3497 ... 3538

Author SHA1 Message Date
Marshall Greenblatt
cb937fc9cd Windows: Fix sandbox link error with binary distribution (issue #2546) 2018-11-13 13:46:51 -05:00
Marshall Greenblatt
56227877aa Update to Chromium version 70.0.3538.102 2018-11-12 16:57:34 -05:00
Marshall Greenblatt
e710be4f64 cefclient: Fix new window always on top (issue #1468) 2018-11-05 13:47:17 -05:00
Marshall Greenblatt
458cc98590 Fix incorrect quota size (issue #2452) 2018-10-26 15:47:35 -04:00
Marshall Greenblatt
1d1fe01a48 Update to Chromium version 70.0.3538.77 2018-10-25 18:36:05 -04:00
Marshall Greenblatt
5e6699b223 Fix substitution of localized strings for directory listings (issue #2412) 2018-10-19 14:41:34 -04:00
Marshall Greenblatt
678fa78c28 Fix ArrayBuffer crashes and add performance test (issue #2521) 2018-10-10 16:14:26 +03:00
Marshall Greenblatt
924c2e339e Windows: Fix crashes when dragging an image with OSR enabled (issue #2525) 2018-10-10 14:46:14 +03:00
Marshall Greenblatt
c8ac6c879d Linux: cefclient: Fix crash when creating popup window (issue #2512) 2018-10-10 13:49:22 +03:00
Isaac Devine
5969b2bbb8 Windows: Fix hidden dropdowns when the window is topmost (issue #1468)
Also add a --always-on-top flag to cefclient to allow easier testing of this
behavior on Windows and Linux.
2018-10-10 12:12:29 +03:00
Marshall Greenblatt
fbc59483b9 Fix crash using CefCookieManager::SetStoragePath (issue #2522) 2018-10-08 19:12:47 +03:00
Marshall Greenblatt
dcdb070ecd macOS: Fix crash when showing a select popup with CefDoMessageLoopWork (issue #2495) 2018-09-28 16:30:38 +02:00
Marshall Greenblatt
b69a4a2e3d Add missing include for DISALLOW_COPY_AND_ASSIGN 2018-09-28 15:50:01 +02:00
Marshall Greenblatt
df6fb4f06e Update to Chromium version 70.0.3538.35 2018-09-28 15:40:26 +02:00
Marshall Greenblatt
b8ca094aca Fix redraw of OSR PDF viewer (issue #2507) 2018-09-27 16:02:55 +02:00
Marshall Greenblatt
01ef24d928 Fix DCHECK when mouse wheel deltas are 0 (issue #2515) 2018-09-27 14:24:45 +02:00
Marshall Greenblatt
ce3a5d5a7b Linux: Add missing return statement (issue #2014) 2018-09-25 13:25:08 +02:00
Marshall Greenblatt
36bc0371bf Linux: Add missing use_gtk check (issue #2014) 2018-09-24 16:12:16 +02:00
Marshall Greenblatt
391685c279 Add TS_PROCESS_OOM termination status (issue #2510) 2018-09-24 10:52:22 +02:00
Marshall Greenblatt
7016b2def6 Fix crash when high contrast themes are enabled (issue #2508) 2018-09-21 16:37:00 +02:00
Marshall Greenblatt
f9b6257652 Windows: cmake: Add VS2017 15.8 build support 2018-09-21 11:13:46 +02:00
Marshall Greenblatt
6d61f0c90f Linux: Add multi-threaded message loop support (issue #2512) 2018-09-20 15:26:54 +02:00
Marshall Greenblatt
006d0629a0 Fix crash when hovering buttons in OSR PDF viewer (issue #2488) 2018-09-14 11:19:44 +02:00
Marshall Greenblatt
8f5df4027b Remove Singleton patches which are no longer required (issue #2362) 2018-09-06 21:54:33 +02:00
Marshall Greenblatt
1489b9dde4 Windows: Fix DCHECKs during shutdown with multi-threaded message loop mode (issue #2362) 2018-09-06 17:35:58 +02:00
Marshall Greenblatt
e858849615 Fix external message pump (issue #2493) 2018-09-06 14:43:20 +02:00
Marshall Greenblatt
876e82f444 Linux: Zero initialize MwmHints (issue #2492) 2018-09-06 13:49:39 +02:00
Marshall Greenblatt
74b4a5fe27 macOS: Fix crash when closing full-screen window (issue #2491) 2018-09-06 13:49:33 +02:00
Marshall Greenblatt
b3f2995808 Linux: Remove GTK build dependency (issue #2014) 2018-09-06 11:34:40 +02:00
Marshall Greenblatt
5fa11acf79 Update to Chromium version 70.0.3538.7 2018-09-05 22:22:57 +02:00
Marshall Greenblatt
a64237bcb0 Update to Chromium version 70.0.3538.0 (#587811)
Known issues:
- The CefLoadCRLSetsFile function needs to be re-implemented (see issue #2497).
- Linux: GTK2 support has been removed. The cefclient sample needs to be updated
  to use GTK3 (see issue #2014).
2018-09-05 15:42:42 +02:00
Marshall Greenblatt
ea0e213bef Update to Chromium version 70.0.3516.0 (#581409) 2018-08-10 11:31:08 -04:00
Marshall Greenblatt
a659b48fd1 Update to Chromium version 70.0.3507.0 (#578961) 2018-08-02 15:15:23 -04:00
Marshall Greenblatt
4cc3a221c3 macOS: Update README.txt for distribution content changes 2018-07-30 16:15:19 -04:00
Marshall Greenblatt
dec98a5534 macOS: Add support for and enable the V2 sandbox (issue #2459)
The CEF_USE_SANDBOX define is now used on all platforms.
2018-07-27 22:33:31 -04:00
Marshall Greenblatt
fcad76b405 macOS: Load the CEF framework using dlopen instead of direct linking (issue #2459)
This is a prerequisite for using the Chromium V2 sandbox.
2018-07-27 17:36:49 -04:00
167 changed files with 4477 additions and 1207 deletions

120
BUILD.gn
View File

@@ -350,6 +350,8 @@ static_library("libcef_static") {
"libcef/browser/extensions/component_extension_resource_manager.h",
"libcef/browser/extensions/extensions_api_client.cc",
"libcef/browser/extensions/extensions_api_client.h",
"libcef/browser/extensions/extensions_browser_api_provider.cc",
"libcef/browser/extensions/extensions_browser_api_provider.h",
"libcef/browser/extensions/extensions_browser_client.cc",
"libcef/browser/extensions/extensions_browser_client.h",
"libcef/browser/extensions/extension_background_host.cc",
@@ -522,6 +524,8 @@ static_library("libcef_static") {
"libcef/common/drag_data_impl.h",
"libcef/common/extensions/chrome_generated_schemas.cc",
"libcef/common/extensions/chrome_generated_schemas.h",
"libcef/common/extensions/extensions_api_provider.cc",
"libcef/common/extensions/extensions_api_provider.h",
"libcef/common/extensions/extensions_client.cc",
"libcef/common/extensions/extensions_client.h",
"libcef/common/extensions/extensions_util.cc",
@@ -637,9 +641,7 @@ static_library("libcef_static") {
]
deps = [
# Generate pack files and associated CEF header files.
":make_pack_header_resources",
":make_pack_header_strings",
":cef_make_headers",
# Generate API bindings for extensions.
# TODO(cef): Enable if/when CEF exposes its own Mojo APIs. See
@@ -677,6 +679,7 @@ static_library("libcef_static") {
"//components/printing/browser",
"//components/printing/common",
"//components/printing/renderer",
"//components/safe_browsing/db:test_database_manager",
"//components/services/pdf_compositor:pdf_compositor_manifest",
"//components/services/pdf_compositor/public/cpp:utils",
"//components/services/pdf_compositor/public/interfaces",
@@ -700,9 +703,10 @@ static_library("libcef_static") {
"//crypto",
"//device/base",
"//extensions/browser",
"//extensions/browser/api:api_registration",
"//extensions/browser:core_api_provider",
"//extensions/buildflags",
"//extensions/common/api",
"//extensions/common:core_api_provider",
"//extensions/renderer",
"//gpu",
"//ipc",
@@ -770,6 +774,7 @@ static_library("libcef_static") {
]
deps += [
"//chrome/install_static:secondary_module",
"//chrome_elf",
]
@@ -801,7 +806,6 @@ static_library("libcef_static") {
deps += [
"//build/config/freetype",
"//services/ui:lib",
"//third_party/fontconfig",
]
}
@@ -922,7 +926,6 @@ static_library("libcef_static") {
]
deps += [
"//services/ui",
"//ui/aura",
"//ui/events",
"//ui/strings",
@@ -1006,6 +1009,10 @@ static_library("libcef_dll_wrapper") {
gypi_paths2.libcef_dll_wrapper_sources_common +
gypi_paths.autogen_client_side
if (is_mac) {
sources += gypi_paths2.libcef_dll_wrapper_sources_mac
}
defines = [ "WRAPPING_CEF_SHARED" ]
configs += [ ":libcef_dll_wrapper_config" ]
@@ -1026,6 +1033,15 @@ if (is_win) {
}
}
if (is_mac) {
static_library("cef_sandbox") {
sources = [ "libcef_dll/sandbox/sandbox_mac.mm" ]
# CEF sources use include paths relative to the CEF root directory.
include_dirs = [ "." ]
deps = [ "//sandbox/mac:seatbelt" ]
}
}
#
# Service manifests.
@@ -1315,6 +1331,14 @@ make_pack_header("strings") {
]
}
# Generate pack files and associated CEF header files.
group("cef_make_headers") {
deps = [
":make_pack_header_resources",
":make_pack_header_strings",
]
}
#
# libcef dll/framework target.
@@ -1465,14 +1489,9 @@ if (is_mac) {
":libcef_static",
]
# Both the main app executable and helper executables need to link the
# framework. Because they are at different directory depths, using
# @executable_path as the install_name would require using install_name_tool
# on one of the executables. However install_name_tool only operates
# in-place, which is problematic to express in GN. Instead, use rpath-based
# loading.
# We don't link the framework so just use the path from the main executable.
ldflags = [
"-Wl,-install_name,@rpath/Frameworks/$output_name.framework/$output_name",
"-Wl,-install_name,@executable_path/../Frameworks/$output_name.framework/$output_name",
"-compatibility_version",
cef_dylib_version,
"-current_version",
@@ -1571,7 +1590,8 @@ if (is_mac) {
sources = invoker.helper_sources
deps = [
":cef_framework+link",
":cef_make_headers",
":cef_sandbox",
":libcef_dll_wrapper",
]
if (defined(invoker.helper_deps)) {
@@ -1580,12 +1600,16 @@ if (is_mac) {
ldflags = [
# The helper is in $app_name.app/Contents/Frameworks/$app_name Helper.app/Contents/MacOS/
# so set rpath up to Contents/ so that the loader can find Frameworks/.
# so set rpath up to the base.
"-rpath",
"@executable_path/../../../..",
"@executable_path/../../../../../..",
]
info_plist_target = ":${app_name}_helper_plist"
if (defined(invoker.helper_defines)) {
defines = invoker.helper_defines
}
}
bundle_data("${app_name}_framework_bundle_data") {
@@ -1596,7 +1620,7 @@ if (is_mac) {
]
public_deps = [
":cef_framework+link",
":cef_framework",
":${app_name}_helper_app",
]
@@ -1622,6 +1646,7 @@ if (is_mac) {
sources = invoker.sources
deps = [
":libcef_dll_wrapper",
":${app_name}_framework_bundle_data",
]
if (defined(invoker.deps)) {
@@ -1632,12 +1657,9 @@ if (is_mac) {
libs = invoker.libs
}
ldflags = [
# The main app is at $app_name.app/Contents/MacOS/$app_name
# so set rpath up to Contents/ so that the loader can find Frameworks/.
"-rpath",
"@executable_path/../",
]
if (defined(invoker.defines)) {
defines = invoker.defines
}
info_plist_target = ":${app_name}_plist"
}
@@ -1689,19 +1711,21 @@ if (is_mac) {
helper_sources = gypi_paths2.includes_mac +
gypi_paths2.includes_common +
gypi_paths2.includes_wrapper +
gypi_paths2.includes_wrapper_mac +
gypi_paths2.shared_sources_common +
gypi_paths2.shared_sources_renderer +
gypi_paths2.shared_sources_mac_helper +
gypi_paths2.cefclient_sources_common +
gypi_paths2.cefclient_sources_renderer
helper_deps = [
":libcef_dll_wrapper",
helper_defines = [
"CEF_USE_SANDBOX",
]
info_plist = "tests/cefclient/resources/mac/Info.plist"
sources = gypi_paths2.includes_mac +
gypi_paths2.includes_common +
gypi_paths2.includes_wrapper +
gypi_paths2.includes_wrapper_mac +
gypi_paths2.shared_sources_browser +
gypi_paths2.shared_sources_common +
gypi_paths2.shared_sources_mac +
@@ -1713,12 +1737,14 @@ if (is_mac) {
":cefclient_resources_bundle_data_extensions_set_page_color",
":cefclient_resources_bundle_data_english",
":cefclient_xibs",
":libcef_dll_wrapper",
]
libs = [
"AppKit.framework",
"OpenGL.framework",
]
defines = [
"CEF_USE_SANDBOX",
]
}
@@ -1759,22 +1785,26 @@ if (is_mac) {
helper_sources = gypi_paths2.includes_mac +
gypi_paths2.includes_common +
gypi_paths2.includes_wrapper +
gypi_paths2.includes_wrapper_mac +
gypi_paths2.cefsimple_sources_mac_helper
helper_deps = [
":libcef_dll_wrapper",
helper_defines = [
"CEF_USE_SANDBOX",
]
info_plist = "tests/cefsimple/mac/Info.plist"
sources = gypi_paths2.includes_mac +
gypi_paths2.includes_common +
gypi_paths2.includes_wrapper +
gypi_paths2.includes_wrapper_mac +
gypi_paths2.cefsimple_sources_common +
gypi_paths2.cefsimple_sources_mac
deps = [
":cefsimple_resources_bundle_data",
":cefsimple_resources_bundle_data_english",
":cefsimple_xibs",
":libcef_dll_wrapper",
]
defines = [
"CEF_USE_SANDBOX",
]
}
@@ -1820,14 +1850,17 @@ if (is_mac) {
gypi_paths2.shared_sources_mac_helper +
gypi_paths2.ceftests_sources_mac_helper
helper_deps = [
":libcef_dll_wrapper",
"//testing/gtest",
]
helper_defines = [
"CEF_USE_SANDBOX",
]
info_plist = "tests/ceftests/resources/mac/Info.plist"
sources = gypi_paths2.includes_mac +
gypi_paths2.includes_common +
gypi_paths2.includes_wrapper +
gypi_paths2.includes_wrapper_mac +
gypi_paths2.shared_sources_browser +
gypi_paths2.shared_sources_common +
gypi_paths2.shared_sources_mac +
@@ -1837,12 +1870,14 @@ if (is_mac) {
":ceftests_resources_bundle_data",
":ceftests_resources_bundle_data_english",
":ceftests_xibs",
":libcef_dll_wrapper",
"//testing/gtest",
]
libs = [
"AppKit.framework",
]
defines = [
"CEF_USE_SANDBOX",
]
}
} else {
#
@@ -1899,6 +1934,10 @@ if (is_mac) {
":libcef_dll_wrapper",
]
defines = [
"CEF_USE_SANDBOX",
]
if (is_win) {
sources += gypi_paths2.includes_win +
gypi_paths2.shared_sources_win +
@@ -1908,9 +1947,8 @@ if (is_mac) {
configs -= [ "//build/config/win:console" ]
configs += [ "//build/config/win:windowed" ]
defines = [
defines += [
"CEF_USE_ATL",
"CEF_USE_SANDBOX",
]
deps += [
@@ -1972,6 +2010,10 @@ if (is_mac) {
":libcef_dll_wrapper",
]
defines = [
"CEF_USE_SANDBOX",
]
if (is_win) {
sources += gypi_paths2.includes_win +
gypi_paths2.cefsimple_sources_win
@@ -1980,10 +2022,6 @@ if (is_mac) {
configs -= [ "//build/config/win:console" ]
configs += [ "//build/config/win:windowed" ]
defines = [
"CEF_USE_SANDBOX",
]
deps += [
":cef_sandbox",
"//build/win:default_exe_manifest",
@@ -2041,14 +2079,14 @@ if (is_mac) {
"//testing/gtest",
]
defines = [
"CEF_USE_SANDBOX",
]
if (is_win) {
sources += gypi_paths2.shared_sources_win +
gypi_paths2.ceftests_sources_win
defines = [
"CEF_USE_SANDBOX",
]
deps += [
":cef_sandbox",
"//build/win:default_exe_manifest",

View File

@@ -7,5 +7,5 @@
# https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding
{
'chromium_checkout': 'refs/tags/69.0.3497.100',
'chromium_checkout': 'refs/tags/70.0.3538.102',
}

View File

@@ -65,6 +65,9 @@
'include/wrapper/cef_xml_object.h',
'include/wrapper/cef_zip_archive.h',
],
'includes_wrapper_mac': [
'include/wrapper/cef_library_loader.h',
],
'includes_win': [
'include/base/internal/cef_atomicops_x86_msvc.h',
'include/base/internal/cef_bind_internal_win.h',
@@ -76,6 +79,7 @@
'include/base/internal/cef_atomicops_atomicword_compat.h',
'include/base/internal/cef_atomicops_mac.h',
'include/cef_application_mac.h',
'include/cef_sandbox_mac.h',
'include/internal/cef_mac.h',
'include/internal/cef_types_mac.h',
],
@@ -141,6 +145,10 @@
'libcef_dll/wrapper/libcef_dll_wrapper.cc',
'libcef_dll/wrapper/libcef_dll_wrapper2.cc',
],
'libcef_dll_wrapper_sources_mac': [
'libcef_dll/wrapper/cef_library_loader_mac.mm',
'libcef_dll/wrapper/libcef_dll_dylib.cc',
],
'shared_sources_browser': [
'tests/shared/browser/client_app_browser.cc',
'tests/shared/browser/client_app_browser.h',

View File

@@ -31,10 +31,11 @@ macro(PRINT_CEF_CONFIG)
endif()
if(OS_WINDOWS)
message(STATUS "CEF Windows sandbox: ${USE_SANDBOX}")
message(STATUS "Visual Studio ATL support: ${USE_ATL}")
endif()
message(STATUS "CEF sandbox: ${USE_SANDBOX}")
set(_libraries ${CEF_STANDARD_LIBS})
if(OS_WINDOWS AND USE_SANDBOX)
list(APPEND _libraries ${CEF_SANDBOX_STANDARD_LIBS})
@@ -185,22 +186,6 @@ endif(OS_LINUX)
if(OS_MACOSX)
# Fix the framework rpath in the helper executable.
macro(FIX_MACOSX_HELPER_FRAMEWORK_RPATH target)
# The helper is in $app_name.app/Contents/Frameworks/$app_name Helper.app/Contents/MacOS/
# so set rpath up to Contents/ so that the loader can find Frameworks/.
set_target_properties(${target} PROPERTIES INSTALL_RPATH "@executable_path/../../../..")
set_target_properties(${target} PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE)
endmacro()
# Fix the framework rpath in the main executable.
macro(FIX_MACOSX_MAIN_FRAMEWORK_RPATH target)
# The main app is at $app_name.app/Contents/MacOS/$app_name
# so set rpath up to Contents/ so that the loader can find Frameworks/.
set_target_properties(${target} PROPERTIES INSTALL_RPATH "@executable_path/..")
set_target_properties(${target} PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE)
endmacro()
# Manually process and copy over resource files.
macro(COPY_MACOSX_RESOURCES resource_list prefix_list target source_dir app_path)
foreach(FILENAME ${resource_list})

View File

@@ -66,6 +66,10 @@ list(APPEND CEF_COMPILER_DEFINES
)
# Configure use of the sandbox.
option(USE_SANDBOX "Enable or disable use of the sandbox." ON)
#
# Linux configuration.
#
@@ -217,6 +221,12 @@ if(OS_LINUX)
icudtl.dat
locales
)
if(USE_SANDBOX)
list(APPEND CEF_COMPILER_DEFINES
CEF_USE_SANDBOX # Used by apps to test if the sandbox is enabled
)
endif()
endif()
@@ -314,9 +324,15 @@ if(OS_MACOSX)
set(CEF_BINARY_DIR_DEBUG "${_CEF_ROOT}/Debug")
set(CEF_BINARY_DIR_RELEASE "${_CEF_ROOT}/Release")
# CEF library paths.
set(CEF_LIB_DEBUG "${CEF_BINARY_DIR_DEBUG}/Chromium Embedded Framework.framework/Chromium Embedded Framework")
set(CEF_LIB_RELEASE "${CEF_BINARY_DIR_RELEASE}/Chromium Embedded Framework.framework/Chromium Embedded Framework")
if(USE_SANDBOX)
list(APPEND CEF_COMPILER_DEFINES
CEF_USE_SANDBOX # Used by apps to test if the sandbox is enabled
)
# CEF sandbox library paths.
set(CEF_SANDBOX_LIB_DEBUG "${CEF_BINARY_DIR_DEBUG}/cef_sandbox.a")
set(CEF_SANDBOX_LIB_RELEASE "${CEF_BINARY_DIR_RELEASE}/cef_sandbox.a")
endif()
endif()
@@ -333,8 +349,6 @@ if(OS_WINDOWS)
set(CMAKE_CXX_FLAGS_RELEASE "")
endif()
# Configure use of the sandbox.
option(USE_SANDBOX "Enable or disable use of the sandbox." ON)
if(USE_SANDBOX)
# Check if the current MSVC version is compatible with the cef_sandbox.lib
# static library. For a list of all version numbers see
@@ -465,6 +479,7 @@ if(OS_WINDOWS)
dbghelp.lib
psapi.lib
version.lib
wbemuuid.lib
winmm.lib
)

View File

@@ -60,6 +60,7 @@ namespace cef_subtle {
class RefCountedBase {
public:
bool HasOneRef() const { return ref_count_ == 1; }
bool HasAtLeastOneRef() const { return ref_count_ >= 1; }
protected:
RefCountedBase()
@@ -110,6 +111,7 @@ class RefCountedBase {
class RefCountedThreadSafeBase {
public:
bool HasOneRef() const;
bool HasAtLeastOneRef() const;
protected:
RefCountedThreadSafeBase();

View File

@@ -69,6 +69,11 @@ typedef struct _cef_base_ref_counted_t {
// Returns true (1) if the current reference count is 1.
///
int(CEF_CALLBACK* has_one_ref)(struct _cef_base_ref_counted_t* self);
///
// Returns true (1) if the current reference count is at least 1.
///
int(CEF_CALLBACK* has_at_least_one_ref)(struct _cef_base_ref_counted_t* self);
} cef_base_ref_counted_t;
///

View File

@@ -68,6 +68,11 @@ class CefBaseRefCounted {
///
virtual bool HasOneRef() const = 0;
///
// Returns true if the reference count is at least 1.
///
virtual bool HasAtLeastOneRef() const = 0;
protected:
virtual ~CefBaseRefCounted() {}
};
@@ -102,6 +107,13 @@ class CefRefCount {
///
bool HasOneRef() const { return base::AtomicRefCountIsOne(&ref_count_); }
///
// Returns true if the reference count is at least 1.
///
bool HasAtLeastOneRef() const {
return !base::AtomicRefCountIsZero(&ref_count_);
}
private:
mutable base::AtomicRefCount ref_count_;
DISALLOW_COPY_AND_ASSIGN(CefRefCount);
@@ -122,6 +134,9 @@ class CefRefCount {
return false; \
} \
bool HasOneRef() const OVERRIDE { return ref_count_.HasOneRef(); } \
bool HasAtLeastOneRef() const OVERRIDE { \
return ref_count_.HasAtLeastOneRef(); \
} \
\
private: \
CefRefCount ref_count_;

87
include/cef_sandbox_mac.h Normal file
View File

@@ -0,0 +1,87 @@
// Copyright (c) 2018 Marshall A. Greenblatt. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the name Chromium Embedded
// Framework nor the names of its contributors may be used to endorse
// or promote products derived from this software without specific prior
// written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef CEF_INCLUDE_CEF_SANDBOX_MAC_H_
#define CEF_INCLUDE_CEF_SANDBOX_MAC_H_
#pragma once
#include "include/base/cef_build.h"
#if defined(OS_MACOSX)
#ifdef __cplusplus
extern "C" {
#endif
// The sandbox is used to restrict sub-processes (renderer, plugin, GPU, etc)
// from directly accessing system resources. This helps to protect the user
// from untrusted and potentially malicious Web content.
// See http://www.chromium.org/developers/design-documents/sandbox for
// complete details.
//
// To enable the sandbox on macOS the following requirements must be met:
// 1. Link the helper process executable with the cef_sandbox static library.
// 2. Call the cef_sandbox_initialize() function at the beginning of the
// helper executable main() function and before loading the CEF framework
// library. See include/wrapper/cef_library_loader.h for example usage.
///
// Initialize the sandbox for this process. Returns the sandbox context
// handle on success or NULL on failure. The returned handle should be
// passed to cef_sandbox_destroy() immediately before process termination.
///
void* cef_sandbox_initialize(int argc, char** argv);
///
// Destroy the specified sandbox context handle.
///
void cef_sandbox_destroy(void* sandbox_context);
#ifdef __cplusplus
}
///
// Scoped helper for managing the life span of a sandbox context handle.
///
class CefScopedSandboxContext {
public:
CefScopedSandboxContext();
~CefScopedSandboxContext();
// Load the sandbox for this process. Returns true on success.
bool Initialize(int argc, char** argv);
private:
void* sandbox_context_;
};
#endif // __cplusplus
#endif // defined(OS_MACOSX)
#endif // CEF_INCLUDE_CEF_SANDBOX_MAC_H_

View File

@@ -789,6 +789,11 @@ typedef enum {
// Segmentation fault.
///
TS_PROCESS_CRASHED,
///
// Out of memory. Some platforms may use TS_PROCESS_CRASHED instead.
///
TS_PROCESS_OOM,
} cef_termination_status_t;
///

View File

@@ -0,0 +1,128 @@
// Copyright (c) 2018 Marshall A. Greenblatt. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the name Chromium Embedded
// Framework nor the names of its contributors may be used to endorse
// or promote products derived from this software without specific prior
// written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef CEF_INCLUDE_WRAPPER_CEF_LIBRARY_LOADER_H_
#define CEF_INCLUDE_WRAPPER_CEF_LIBRARY_LOADER_H_
#pragma once
#include "include/base/cef_build.h"
#ifdef __cplusplus
#include <string>
#include "include/base/cef_macros.h"
extern "C" {
#endif // __cplusplus
///
// Load the CEF library at the specified |path|. Returns true (1) on
// success and false (0) on failure.
///
int cef_load_library(const char* path);
///
// Unload the CEF library that was previously loaded. Returns true (1)
// on success and false (0) on failure.
///
int cef_unload_library();
#ifdef __cplusplus
}
#if defined(OS_MACOSX)
///
// Scoped helper for loading and unloading the CEF framework library at
// runtime from the expected location in the app bundle. Loading at runtime
// instead of linking directly is a requirement of the macOS sandbox
// implementation.
//
// Example usage in the main process:
//
// #include "include/wrapper/cef_library_loader.h"
//
// int main(int argc, char* argv[]) {
// // Dynamically load the CEF framework library.
// CefScopedLibraryLoader library_loader;
// if (!library_loader.LoadInMain())
// return 1;
//
// // Continue with CEF initialization...
// }
//
// Example usage in the helper process:
//
// #include "include/cef_sandbox_mac.h"
// #include "include/wrapper/cef_library_loader.h"
//
// int main(int argc, char* argv[]) {
// // Initialize the macOS sandbox for this helper process.
// CefScopedSandboxContext sandbox_context;
// if (!sandbox_context.Initialize(argc, argv))
// return 1;
//
// // Dynamically load the CEF framework library.
// CefScopedLibraryLoader library_loader;
// if (!library_loader.LoadInHelper())
// return 1;
//
// // Continue with CEF initialization...
// }
///
class CefScopedLibraryLoader {
public:
CefScopedLibraryLoader();
~CefScopedLibraryLoader();
///
// Load the CEF framework in the main process from the expected app
// bundle location relative to the executable. Returns true if the
// load succeeds.
///
bool LoadInMain() { return Load(false); }
///
// Load the CEF framework in the helper process from the expected app
// bundle location relative to the executable. Returns true if the
// load succeeds.
///
bool LoadInHelper() { return Load(true); }
private:
bool Load(bool helper);
bool loaded_;
DISALLOW_COPY_AND_ASSIGN(CefScopedLibraryLoader);
};
#endif // defined(OS_MACOSX)
#endif // __cplusplus
#endif // CEF_INCLUDE_WRAPPER_CEF_LIBRARY_LOADER_H_

View File

@@ -105,6 +105,10 @@ void CefBrowserContext::Shutdown() {
}
}
base::FilePath CefBrowserContext::GetCachePath() const {
return GetPath();
}
content::ResourceContext* CefBrowserContext::GetResourceContext() {
return resource_context_.get();
}

View File

@@ -137,6 +137,7 @@ class CefBrowserContext : public ChromeProfileStub {
virtual void Initialize();
// BrowserContext methods.
base::FilePath GetCachePath() const override;
content::ResourceContext* GetResourceContext() override;
net::URLRequestContextGetter* GetRequestContext() override;
net::URLRequestContextGetter* CreateMediaRequestContext() override;

View File

@@ -519,7 +519,7 @@ HostContentSettingsMap* CefBrowserContextImpl::GetHostContentSettingsMap() {
// that can be stored in the settings map (for example, default values set
// via DefaultProvider::SetWebsiteSetting).
host_content_settings_map_ =
new HostContentSettingsMap(GetPrefs(), false, false, false);
new HostContentSettingsMap(GetPrefs(), false, false, false, false);
// Change the default plugin policy.
const base::CommandLine* command_line =

View File

@@ -1213,6 +1213,11 @@ void CefBrowserHostImpl::SendMouseMoveEvent(const CefMouseEvent& event,
void CefBrowserHostImpl::SendMouseWheelEvent(const CefMouseEvent& event,
int deltaX,
int deltaY) {
if (deltaX == 0 && deltaY == 0) {
// Nothing to do.
return;
}
if (!CEF_CURRENTLY_ON_UIT()) {
CEF_POST_TASK(CEF_UIT,
base::BindOnce(&CefBrowserHostImpl::SendMouseWheelEvent, this,
@@ -2606,7 +2611,7 @@ void CefBrowserHostImpl::RequestMediaAccessPermission(
bool webcam_requested =
(request.video_type == content::MEDIA_DEVICE_VIDEO_CAPTURE);
bool screen_requested =
(request.video_type == content::MEDIA_DESKTOP_VIDEO_CAPTURE);
(request.video_type == content::MEDIA_GUM_DESKTOP_VIDEO_CAPTURE);
if (microphone_requested || webcam_requested || screen_requested) {
// Pick the desired device or fall back to the first available of the
// given type.
@@ -2628,8 +2633,9 @@ void CefBrowserHostImpl::RequestMediaAccessPermission(
media_id =
content::DesktopMediaID::Parse(request.requested_video_device_id);
}
devices.push_back(content::MediaStreamDevice(
content::MEDIA_DESKTOP_VIDEO_CAPTURE, media_id.ToString(), "Screen"));
devices.push_back(
content::MediaStreamDevice(content::MEDIA_GUM_DESKTOP_VIDEO_CAPTURE,
media_id.ToString(), "Screen"));
}
}
@@ -2780,6 +2786,8 @@ void CefBrowserHostImpl::RenderProcessGone(base::TerminationStatus status) {
ts = TS_PROCESS_WAS_KILLED;
else if (status == base::TERMINATION_STATUS_PROCESS_CRASHED)
ts = TS_PROCESS_CRASHED;
else if (status == base::TERMINATION_STATUS_OOM)
ts = TS_PROCESS_OOM;
else if (status != base::TERMINATION_STATUS_ABNORMAL_TERMINATION)
return;

View File

@@ -749,7 +749,7 @@ class CefBrowserHostImpl : public CefBrowserHost,
CefDevToolsFrontend* devtools_frontend_;
// Observers that want to be notified of changes to this object.
base::ObserverList<Observer> observers_;
base::ObserverList<Observer>::Unchecked observers_;
// Used to provide unique incremental IDs for each find request.
int find_request_id_counter_ = 0;

View File

@@ -25,7 +25,7 @@
#include "base/bind.h"
#include "base/message_loop/message_loop.h"
#include "base/strings/string_number_conversions.h"
#include "base/task_scheduler/post_task.h"
#include "base/task/post_task.h"
#include "chrome/browser/chrome_browser_main_extra_parts.h"
#include "chrome/browser/plugins/plugin_finder.h"
#include "content/public/browser/gpu_data_manager.h"
@@ -175,7 +175,7 @@ void CefBrowserMainParts::PreMainMessageLoopRun() {
printing::CefPrintingMessageFilter::EnsureShutdownNotifierFactoryBuilt();
background_task_runner_ = base::CreateSingleThreadTaskRunnerWithTraits(
{base::TaskPriority::BACKGROUND,
{base::TaskPriority::BEST_EFFORT,
base::TaskShutdownBehavior::BLOCK_SHUTDOWN, base::MayBlock()});
user_visible_task_runner_ = base::CreateSingleThreadTaskRunnerWithTraits(
{base::TaskPriority::USER_VISIBLE,
@@ -219,16 +219,16 @@ void CefBrowserMainParts::PostMainMessageLoopRun() {
DCHECK(global_request_context_->HasOneRef());
global_request_context_ = NULL;
if (extensions::ExtensionsEnabled()) {
extensions::ExtensionsBrowserClient::Set(NULL);
extensions_browser_client_.reset();
}
for (size_t i = 0; i < chrome_extra_parts_.size(); ++i)
chrome_extra_parts_[i]->PostMainMessageLoopRun();
}
void CefBrowserMainParts::PostDestroyThreads() {
if (extensions::ExtensionsEnabled()) {
extensions::ExtensionsBrowserClient::Set(NULL);
extensions_browser_client_.reset();
}
#if defined(USE_AURA)
// Delete the DesktopTestViewsDelegate.
delete views::ViewsDelegate::GetInstance();

View File

@@ -62,26 +62,26 @@ class CefURLFetcherResponseWriter : public net::URLFetcherResponseWriter {
: url_request_(url_request), task_runner_(task_runner) {}
// net::URLFetcherResponseWriter methods.
int Initialize(const net::CompletionCallback& callback) override {
int Initialize(net::CompletionOnceCallback callback) override {
return net::OK;
}
int Write(net::IOBuffer* buffer,
int num_bytes,
const net::CompletionCallback& callback) override {
net::CompletionOnceCallback callback) override {
if (url_request_.get()) {
task_runner_->PostTask(
FROM_HERE,
base::Bind(&CefURLFetcherResponseWriter::WriteOnClientThread,
url_request_, scoped_refptr<net::IOBuffer>(buffer),
num_bytes, callback,
num_bytes, base::Passed(std::move(callback)),
CefTaskRunnerImpl::GetCurrentTaskRunner()));
return net::ERR_IO_PENDING;
}
return num_bytes;
}
int Finish(int net_error, const net::CompletionCallback& callback) override {
int Finish(int net_error, net::CompletionOnceCallback callback) override {
if (url_request_.get())
url_request_ = NULL;
return net::OK;
@@ -92,7 +92,7 @@ class CefURLFetcherResponseWriter : public net::URLFetcherResponseWriter {
CefRefPtr<CefBrowserURLRequest> url_request,
scoped_refptr<net::IOBuffer> buffer,
int num_bytes,
const net::CompletionCallback& callback,
net::CompletionOnceCallback callback,
scoped_refptr<base::SequencedTaskRunner> source_message_loop_proxy) {
CefRefPtr<CefURLRequestClient> client = url_request->GetClient();
if (client.get())
@@ -101,12 +101,12 @@ class CefURLFetcherResponseWriter : public net::URLFetcherResponseWriter {
source_message_loop_proxy->PostTask(
FROM_HERE,
base::Bind(&CefURLFetcherResponseWriter::ContinueOnSourceThread,
num_bytes, callback));
num_bytes, base::Passed(std::move(callback))));
}
static void ContinueOnSourceThread(int num_bytes,
const net::CompletionCallback& callback) {
callback.Run(num_bytes);
net::CompletionOnceCallback callback) {
std::move(callback).Run(num_bytes);
}
CefRefPtr<CefBrowserURLRequest> url_request_;

View File

@@ -111,12 +111,6 @@ ChromeBrowserProcessStub::system_network_context_manager() {
return NULL;
}
content::NetworkConnectionTracker*
ChromeBrowserProcessStub::network_connection_tracker() {
NOTREACHED();
return NULL;
}
network::NetworkQualityTracker*
ChromeBrowserProcessStub::network_quality_tracker() {
NOTREACHED();

View File

@@ -49,7 +49,6 @@ class ChromeBrowserProcessStub : public BrowserProcess,
rappor::RapporServiceImpl* rappor_service() override;
IOThread* io_thread() override;
SystemNetworkContextManager* system_network_context_manager() override;
content::NetworkConnectionTracker* network_connection_tracker() override;
network::NetworkQualityTracker* network_quality_tracker() override;
WatchDogThread* watchdog_thread() override;
ProfileManager* profile_manager() override;

View File

@@ -53,7 +53,6 @@ bool ChromeProfileStub::IsChild() const {
}
bool ChromeProfileStub::IsLegacySupervised() const {
NOTREACHED();
return false;
}

View File

@@ -772,6 +772,17 @@ void CefContentBrowserClient::AppendExtraCommandLineSwitches(
}
}
bool CefContentBrowserClient::ShouldEnableStrictSiteIsolation() {
// TODO(cef): Enable this mode once we figure out why it breaks ceftests that
// rely on command-line arguments passed to the renderer process. It looks
// like the first renderer process is getting all of the callbacks despite
// multiple renderer processes being launched.
// For example, V8RendererTest::OnBrowserCreated appears to get the same
// kV8TestCmdArg value twice when running with:
// --gtest_filter=V8Test.ContextEvalCspBypassUnsafeEval:V8Test.ContextEntered
return false;
}
std::string CefContentBrowserClient::GetApplicationLocale() {
return g_browser_process->GetApplicationLocale();
}
@@ -786,8 +797,8 @@ void CefContentBrowserClient::GetQuotaSettings(
content::StoragePartition* partition,
storage::OptionalQuotaSettingsCallback callback) {
const base::FilePath& cache_path = partition->GetPath();
storage::GetNominalDynamicSettings(cache_path, !cache_path.empty(),
std::move(callback));
storage::GetNominalDynamicSettings(
cache_path, cache_path.empty() /* is_incognito */, std::move(callback));
}
content::MediaObserver* CefContentBrowserClient::GetMediaObserver() {
@@ -1074,6 +1085,7 @@ bool CefContentBrowserClient::WillCreateURLLoaderFactory(
content::BrowserContext* browser_context,
content::RenderFrameHost* frame,
bool is_navigation,
const GURL& url,
network::mojom::URLLoaderFactoryRequest* factory_request) {
if (!extensions::ExtensionsEnabled())
return false;

View File

@@ -62,6 +62,7 @@ class CefContentBrowserClient : public content::ContentBrowserClient {
content::BrowserContext* context2) override;
void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
int child_process_id) override;
bool ShouldEnableStrictSiteIsolation() override;
std::string GetApplicationLocale() override;
content::QuotaPermissionContext* CreateQuotaPermissionContext() override;
void GetQuotaSettings(
@@ -141,6 +142,7 @@ class CefContentBrowserClient : public content::ContentBrowserClient {
content::BrowserContext* browser_context,
content::RenderFrameHost* frame,
bool is_navigation,
const GURL& url,
network::mojom::URLLoaderFactoryRequest* factory_request) override;
bool HandleExternalProtocol(

View File

@@ -34,6 +34,7 @@
#if defined(OS_WIN)
#include "base/strings/utf_string_conversions.h"
#include "chrome/install_static/initialize_from_primary_module.h"
#include "chrome_elf/chrome_elf_main.h"
#include "components/crash/content/app/crashpad.h"
#include "content/public/app/sandbox_helper_win.h"
@@ -72,6 +73,16 @@ void DisableFMA3() {
}
#endif // defined(ARCH_CPU_X86_64)
// Transfer state from chrome_elf.dll to the libcef.dll. Accessed when
// loading chrome://system.
void InitInstallDetails() {
static bool initialized = false;
if (initialized)
return;
initialized = true;
install_static::InitializeFromPrimaryModule();
}
// Signal chrome_elf to initialize crash reporting, rather than doing it in
// DllMain. See https://crbug.com/656800 for details.
void InitCrashReporter() {
@@ -157,6 +168,7 @@ int CefExecuteProcess(const CefMainArgs& args,
#if defined(ARCH_CPU_X86_64)
DisableFMA3();
#endif
InitInstallDetails();
InitCrashReporter();
#endif
@@ -216,6 +228,7 @@ bool CefInitialize(const CefMainArgs& args,
#if defined(ARCH_CPU_X86_64)
DisableFMA3();
#endif
InitInstallDetails();
InitCrashReporter();
#endif

View File

@@ -19,6 +19,8 @@
#include "base/format_macros.h"
#include "base/logging.h"
#include "base/threading/thread_restrictions.h"
#include "chrome/browser/browser_process.h"
#include "components/net_log/chrome_net_log.h"
#include "content/browser/storage_partition_impl.h"
#include "net/cookies/cookie_util.h"
#include "net/cookies/parsed_cookie.h"
@@ -290,7 +292,8 @@ bool CefCookieManagerImpl::SetStoragePath(
cookie_source_.reset(new CefCookieStoreOwnerSource());
}
cookie_source_->SetCookieStoragePath(new_path, persist_session_cookies);
cookie_source_->SetCookieStoragePath(new_path, persist_session_cookies,
g_browser_process->net_log());
RunAsyncCompletionOnIOThread(callback);
return true;

View File

@@ -34,6 +34,7 @@
#include "content/public/common/content_client.h"
#include "content/public/common/url_constants.h"
#include "ipc/ipc_channel.h"
#include "net/base/completion_once_callback.h"
#include "net/base/io_buffer.h"
#include "net/base/net_errors.h"
#include "net/http/http_response_headers.h"
@@ -52,11 +53,11 @@ class ResponseWriter : public net::URLFetcherResponseWriter {
~ResponseWriter() override;
// URLFetcherResponseWriter overrides:
int Initialize(const net::CompletionCallback& callback) override;
int Initialize(net::CompletionOnceCallback callback) override;
int Write(net::IOBuffer* buffer,
int num_bytes,
const net::CompletionCallback& callback) override;
int Finish(int net_error, const net::CompletionCallback& callback) override;
net::CompletionOnceCallback callback) override;
int Finish(int net_error, net::CompletionOnceCallback callback) override;
private:
base::WeakPtr<CefDevToolsFrontend> shell_devtools_;
@@ -72,13 +73,13 @@ ResponseWriter::ResponseWriter(
ResponseWriter::~ResponseWriter() {}
int ResponseWriter::Initialize(const net::CompletionCallback& callback) {
int ResponseWriter::Initialize(net::CompletionOnceCallback callback) {
return net::OK;
}
int ResponseWriter::Write(net::IOBuffer* buffer,
int num_bytes,
const net::CompletionCallback& callback) {
net::CompletionOnceCallback callback) {
std::string chunk = std::string(buffer->data(), num_bytes);
if (!base::IsStringUTF8(chunk))
return num_bytes;
@@ -95,7 +96,7 @@ int ResponseWriter::Write(net::IOBuffer* buffer,
}
int ResponseWriter::Finish(int net_error,
const net::CompletionCallback& callback) {
net::CompletionOnceCallback callback) {
return net::OK;
}

View File

@@ -11,7 +11,7 @@
#include "libcef/browser/thread_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/task_scheduler/post_task.h"
#include "base/task/post_task.h"
#include "chrome/browser/extensions/api/tabs/tabs_constants.h"
#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/profiles/profile.h"

View File

@@ -62,4 +62,16 @@ ExtensionHostQueue* CefExtensionHostDelegate::GetExtensionHostQueue() const {
return CefExtensionsBrowserClient::Get()->GetExtensionHostQueue();
}
gfx::Size CefExtensionHostDelegate::EnterPictureInPicture(
content::WebContents* web_contents,
const viz::SurfaceId& surface_id,
const gfx::Size& natural_size) {
NOTREACHED();
return gfx::Size();
}
void CefExtensionHostDelegate::ExitPictureInPicture() {
NOTREACHED();
}
} // namespace extensions

View File

@@ -35,6 +35,10 @@ class CefExtensionHostDelegate : public ExtensionHostDelegate {
content::MediaStreamType type,
const Extension* extension) override;
ExtensionHostQueue* GetExtensionHostQueue() const override;
gfx::Size EnterPictureInPicture(content::WebContents* web_contents,
const viz::SurfaceId& surface_id,
const gfx::Size& natural_size) override;
void ExitPictureInPicture() override;
private:
DISALLOW_COPY_AND_ASSIGN(CefExtensionHostDelegate);

View File

@@ -9,8 +9,6 @@
#include "content/public/browser/render_process_host.h"
#include "content/public/common/url_constants.h"
DEFINE_WEB_CONTENTS_USER_DATA_KEY(extensions::CefExtensionWebContentsObserver);
namespace extensions {
CefExtensionWebContentsObserver::CefExtensionWebContentsObserver(

View File

@@ -38,7 +38,8 @@ class CefExtensionWebContentsObserver
// Our content script observers. Declare at top so that it will outlive all
// other members, since they might add themselves as observers.
base::ObserverList<ScriptExecutionObserver> script_execution_observers_;
base::ObserverList<ScriptExecutionObserver>::Unchecked
script_execution_observers_;
std::unique_ptr<ScriptExecutor> script_executor_;

View File

@@ -0,0 +1,29 @@
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "libcef/browser/extensions/chrome_api_registration.h"
#include "libcef/browser/extensions/extensions_browser_api_provider.h"
//#include "cef/libcef/browser/extensions/api/generated_api_registration.h"
#include "extensions/browser/api/generated_api_registration.h"
namespace extensions {
CefExtensionsBrowserAPIProvider::CefExtensionsBrowserAPIProvider() =
default;
CefExtensionsBrowserAPIProvider::~CefExtensionsBrowserAPIProvider() =
default;
void CefExtensionsBrowserAPIProvider::RegisterExtensionFunctions(
ExtensionFunctionRegistry* registry) {
// CEF-only APIs.
// TODO(cef): Enable if/when CEF exposes its own Mojo APIs. See
// libcef/common/extensions/api/README.txt for details.
// api::cef::CefGeneratedFunctionRegistry::RegisterAll(registry);
// Chrome APIs whitelisted by CEF.
api::cef::ChromeFunctionRegistry::RegisterAll(registry);
}
} // namespace extensions

View File

@@ -0,0 +1,26 @@
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CEF_LIBCEF_BROWSER_EXTENSIONS_EXTENSIONS_BROWSER_API_PROVIDER_H_
#define CEF_LIBCEF_BROWSER_EXTENSIONS_EXTENSIONS_BROWSER_API_PROVIDER_H_
#include "base/macros.h"
#include "extensions/browser/extensions_browser_api_provider.h"
namespace extensions {
class CefExtensionsBrowserAPIProvider : public ExtensionsBrowserAPIProvider {
public:
CefExtensionsBrowserAPIProvider();
~CefExtensionsBrowserAPIProvider() override;
void RegisterExtensionFunctions(ExtensionFunctionRegistry* registry) override;
private:
DISALLOW_COPY_AND_ASSIGN(CefExtensionsBrowserAPIProvider);
};
} // namespace extensions
#endif // CEF_LIBCEF_BROWSER_EXTENSIONS_EXTENSIONS_BROWSER_API_PROVIDER_H_

View File

@@ -9,15 +9,14 @@
#include "libcef/browser/browser_context_impl.h"
#include "libcef/browser/browser_host_impl.h"
#include "libcef/browser/extensions/chrome_api_registration.h"
#include "libcef/browser/extensions/component_extension_resource_manager.h"
#include "libcef/browser/extensions/extension_system.h"
#include "libcef/browser/extensions/extension_system_factory.h"
#include "libcef/browser/extensions/extension_web_contents_observer.h"
#include "libcef/browser/extensions/extensions_api_client.h"
#include "libcef/browser/extensions/extensions_browser_api_provider.h"
#include "libcef/browser/request_context_impl.h"
//#include "cef/libcef/browser/extensions/api/generated_api_registration.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/extensions/chrome_url_request_util.h"
#include "chrome/browser/extensions/event_router_forwarder.h"
@@ -25,11 +24,10 @@
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_frame_host.h"
#include "extensions/browser/api/extensions_api_client.h"
#include "extensions/browser/api/generated_api_registration.h"
#include "extensions/browser/api/runtime/runtime_api_delegate.h"
#include "extensions/browser/app_sorting.h"
#include "extensions/browser/core_extensions_browser_api_provider.h"
#include "extensions/browser/event_router.h"
#include "extensions/browser/extension_function_registry.h"
#include "extensions/browser/extension_host_delegate.h"
#include "extensions/browser/mojo/interface_registration.h"
#include "extensions/browser/serial_extension_host_queue.h"
@@ -43,7 +41,10 @@ namespace extensions {
CefExtensionsBrowserClient::CefExtensionsBrowserClient()
: api_client_(new CefExtensionsAPIClient),
resource_manager_(new CefComponentExtensionResourceManager) {}
resource_manager_(new CefComponentExtensionResourceManager) {
AddAPIProvider(std::make_unique<CoreExtensionsBrowserAPIProvider>());
AddAPIProvider(std::make_unique<CefExtensionsBrowserAPIProvider>());
}
CefExtensionsBrowserClient::~CefExtensionsBrowserClient() {}
@@ -258,6 +259,11 @@ bool CefExtensionsBrowserClient::IsInDemoMode() {
return false;
}
bool CefExtensionsBrowserClient::IsScreensaverInDemoMode(
const std::string& app_id) {
return false;
}
bool CefExtensionsBrowserClient::IsRunningInForcedAppMode() {
return false;
}
@@ -276,20 +282,6 @@ CefExtensionsBrowserClient::GetExtensionSystemFactory() {
return CefExtensionSystemFactory::GetInstance();
}
void CefExtensionsBrowserClient::RegisterExtensionFunctions(
ExtensionFunctionRegistry* registry) const {
// Register core extension-system APIs.
api::GeneratedFunctionRegistry::RegisterAll(registry);
// CEF-only APIs.
// TODO(cef): Enable if/when CEF exposes its own Mojo APIs. See
// libcef/common/extensions/api/README.txt for details.
// api::cef::CefGeneratedFunctionRegistry::RegisterAll(registry);
// Chrome APIs whitelisted by CEF.
api::cef::ChromeFunctionRegistry::RegisterAll(registry);
}
void CefExtensionsBrowserClient::RegisterExtensionInterfaces(
service_manager::BinderRegistryWithArgs<content::RenderFrameHost*>*
registry,

View File

@@ -85,12 +85,11 @@ class CefExtensionsBrowserClient : public ExtensionsBrowserClient {
bool DidVersionUpdate(content::BrowserContext* context) override;
void PermitExternalProtocolHandler() override;
bool IsInDemoMode() override;
bool IsScreensaverInDemoMode(const std::string& app_id) override;
bool IsRunningInForcedAppMode() override;
bool IsAppModeForcedForApp(const ExtensionId& extension_id) override;
bool IsLoggedInAsPublicAccount() override;
ExtensionSystemProvider* GetExtensionSystemFactory() override;
void RegisterExtensionFunctions(
ExtensionFunctionRegistry* registry) const override;
void RegisterExtensionInterfaces(service_manager::BinderRegistryWithArgs<
content::RenderFrameHost*>* registry,
content::RenderFrameHost* render_frame_host,

View File

@@ -78,8 +78,8 @@ bool CefBrowserPlatformDelegateNativeLinux::CreateHostWindow() {
// Add a reference that will be released in BrowserDestroyed().
browser_->AddRef();
CefWindowDelegateView* delegate_view =
new CefWindowDelegateView(GetBackgroundColor());
CefWindowDelegateView* delegate_view = new CefWindowDelegateView(
GetBackgroundColor(), window_x11_->TopLevelAlwaysOnTop());
delegate_view->Init(window_info_.window, browser_->web_contents(),
gfx::Rect(gfx::Point(), rect.size()));

View File

@@ -189,8 +189,15 @@ bool CefBrowserPlatformDelegateNativeWin::CreateHostWindow() {
point =
gfx::ToFlooredPoint(gfx::ScalePoint(gfx::PointF(point), 1.0f / scale));
// Stay on top if top-most window hosting the web view is topmost.
HWND top_level_window = GetAncestor(window_info_.window, GA_ROOT);
DWORD top_level_window_ex_styles =
GetWindowLongPtr(top_level_window, GWL_EXSTYLE);
bool always_on_top =
(top_level_window_ex_styles & WS_EX_TOPMOST) == WS_EX_TOPMOST;
CefWindowDelegateView* delegate_view =
new CefWindowDelegateView(GetBackgroundColor());
new CefWindowDelegateView(GetBackgroundColor(), always_on_top);
delegate_view->Init(window_info_.window, browser_->web_contents(),
gfx::Rect(0, 0, point.x(), point.y()));

View File

@@ -140,7 +140,7 @@ class CefNativeMenuWin : public MenuWrapper {
MenuAction menu_action_;
// A list of listeners to call when the menu opens.
base::ObserverList<MenuListener> listeners_;
base::ObserverList<MenuListener>::Unchecked listeners_;
// Keep track of whether the listeners have already been called at least
// once.

View File

@@ -12,8 +12,11 @@
#include "ui/views/layout/fill_layout.h"
#include "ui/views/widget/widget.h"
CefWindowDelegateView::CefWindowDelegateView(SkColor background_color)
: background_color_(background_color), web_view_(NULL) {}
CefWindowDelegateView::CefWindowDelegateView(SkColor background_color,
bool always_on_top)
: background_color_(background_color),
web_view_(NULL),
always_on_top_(always_on_top) {}
void CefWindowDelegateView::Init(gfx::AcceleratedWidget parent_widget,
content::WebContents* web_contents,
@@ -44,6 +47,8 @@ void CefWindowDelegateView::Init(gfx::AcceleratedWidget parent_widget,
// CefBrowserHostImpl::PlatformSetFocus.
params.activatable = views::Widget::InitParams::ACTIVATABLE_YES;
params.keep_on_top = always_on_top_;
// Results in a call to InitContent().
widget->Init(params);

View File

@@ -20,7 +20,7 @@ class WebView;
// will be deleted automatically when the associated root window is destroyed.
class CefWindowDelegateView : public views::WidgetDelegateView {
public:
explicit CefWindowDelegateView(SkColor background_color);
CefWindowDelegateView(SkColor background_color, bool always_on_top);
// Create the Widget and associated root window.
void Init(gfx::AcceleratedWidget parent_widget,
@@ -43,6 +43,7 @@ class CefWindowDelegateView : public views::WidgetDelegateView {
private:
SkColor background_color_;
views::WebView* web_view_;
bool always_on_top_;
DISALLOW_COPY_AND_ASSIGN(CefWindowDelegateView);
};

View File

@@ -396,3 +396,34 @@ void CefWindowX11::ContinueFocus() {
browser_->SetFocus(true);
focus_pending_ = false;
}
bool CefWindowX11::TopLevelAlwaysOnTop() const {
::Window toplevel_window = FindToplevelParent(xdisplay_, xwindow_);
Atom state_atom = gfx::GetAtom("_NET_WM_STATE");
Atom state_keep_above = gfx::GetAtom("_NET_WM_STATE_KEEP_ABOVE");
Atom* states;
Atom actual_type;
int actual_format;
unsigned long num_items;
unsigned long bytes_after;
XGetWindowProperty(xdisplay_, toplevel_window, state_atom, 0, 1024,
x11::False, XA_ATOM, &actual_type, &actual_format,
&num_items, &bytes_after,
reinterpret_cast<unsigned char**>(&states));
bool always_on_top = false;
for (unsigned long i = 0; i < num_items; ++i) {
if (states[i] == state_keep_above) {
always_on_top = true;
break;
}
}
XFree(states);
return always_on_top;
}

View File

@@ -52,6 +52,8 @@ class CefWindowX11 : public ui::PlatformEventDispatcher {
::Window xwindow() const { return xwindow_; }
gfx::Rect bounds() const { return bounds_; }
bool TopLevelAlwaysOnTop() const;
private:
void ContinueFocus();

View File

@@ -62,7 +62,7 @@ const char kChromeUIWebUIHostsHost[] = "webui-hosts";
// testing all related functionality in CEF.
const char* kAllowedWebUIHosts[] = {
content::kChromeUIAppCacheInternalsHost,
content::kChromeUIAccessibilityHost,
chrome::kChromeUIAccessibilityHost,
content::kChromeUIBlobInternalsHost,
chrome::kChromeUICreditsHost,
content::kChromeUIGpuHost,

View File

@@ -49,7 +49,8 @@ CefCookieStoreOwnerSource::CefCookieStoreOwnerSource() {}
void CefCookieStoreOwnerSource::SetCookieStoragePath(
const base::FilePath& path,
bool persist_session_cookies) {
bool persist_session_cookies,
net::NetLog* net_log) {
CEF_REQUIRE_IOT();
if (cookie_store_ && ((path_.empty() && path.empty()) || path_ == path)) {
@@ -82,7 +83,7 @@ void CefCookieStoreOwnerSource::SetCookieStoragePath(
// cookie store, if any, will be automatically flushed and closed when no
// longer referenced.
std::unique_ptr<net::CookieMonster> cookie_monster(
new net::CookieMonster(persistent_store.get(), nullptr));
new net::CookieMonster(persistent_store.get(), nullptr, net_log));
if (persistent_store.get() && persist_session_cookies)
cookie_monster->SetPersistSessionCookies(true);
path_ = path;

View File

@@ -20,7 +20,8 @@ class FilePath;
namespace net {
class CookieStore;
}
class NetLog;
} // namespace net
class CefURLRequestContextImpl;
@@ -57,7 +58,8 @@ class CefCookieStoreOwnerSource : public CefCookieStoreSource {
CefCookieStoreOwnerSource();
void SetCookieStoragePath(const base::FilePath& path,
bool persist_session_cookies);
bool persist_session_cookies,
net::NetLog* net_log);
void SetCookieSupportedSchemes(const std::vector<std::string>& schemes);
net::CookieStore* GetCookieStore() override;

View File

@@ -19,7 +19,7 @@ namespace {
void SetCRLSetIfNewer(scoped_refptr<net::CRLSet> crl_set) {
CEF_REQUIRE_IOT();
net::SSLConfigService::SetCRLSetIfNewer(crl_set);
// TODO(cef): Re-implement via NetworkService.
}
void LoadFromDisk(const base::FilePath& path) {

View File

@@ -20,7 +20,7 @@
#include "base/command_line.h"
#include "base/metrics/field_trial.h"
#include "base/strings/string_util.h"
#include "chrome/browser/net/safe_search_util.h"
#include "chrome/common/net/safe_search_util.h"
#include "components/prefs/pref_member.h"
#include "components/prefs/pref_service.h"
#include "content/public/common/content_switches.h"
@@ -143,7 +143,7 @@ class CefBeforeResourceLoadCallbackImpl : public CefRequestCallback {
// Only execute the callback if the request has not been canceled.
if (request->status().status() != net::URLRequestStatus::CANCELED) {
if (force_google_safesearch && allow && new_url->is_empty())
safe_search_util::ForceGoogleSafeSearch(request, new_url);
safe_search_util::ForceGoogleSafeSearch(request->url(), new_url);
std::move(callback).Run(allow ? net::OK : net::ERR_ABORTED);
}
@@ -333,7 +333,7 @@ int CefNetworkDelegate::OnBeforeURLRequest(net::URLRequest* request,
}
if (force_google_safesearch && new_url->is_empty())
safe_search_util::ForceGoogleSafeSearch(request, new_url);
safe_search_util::ForceGoogleSafeSearch(request->url(), new_url);
// Continue the request immediately.
return net::OK;

View File

@@ -11,7 +11,7 @@
#include "libcef/common/net/scheme_registration.h"
#include "base/memory/ptr_util.h"
#include "base/task_scheduler/post_task.h"
#include "base/task/post_task.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/common/url_constants.h"
#include "net/net_buildflags.h"

View File

@@ -480,8 +480,8 @@ void CefURLRequestContextGetterImpl::SetCookieStoragePath(
io_state_->storage_->set_cookie_store(std::make_unique<CefCookieStoreProxy>(
base::WrapUnique(io_state_->cookie_source_)));
}
io_state_->cookie_source_->SetCookieStoragePath(path,
persist_session_cookies);
io_state_->cookie_source_->SetCookieStoragePath(path, persist_session_cookies,
io_state_->net_log_);
}
void CefURLRequestContextGetterImpl::SetCookieSupportedSchemes(

View File

@@ -192,15 +192,7 @@ bool CefBrowserPlatformDelegateOsr::IsViewsHosted() const {
}
void CefBrowserPlatformDelegateOsr::WasHidden(bool hidden) {
CefRenderWidgetHostViewOSR* view = GetOSRHostView();
if (view) {
if (hidden)
view->Hide();
else
view->Show();
}
// Also notify the WebContentsImpl for consistency.
// The WebContentsImpl will notify the OSR view.
content::WebContentsImpl* web_contents =
static_cast<content::WebContentsImpl*>(browser_->web_contents());
if (web_contents) {

View File

@@ -246,7 +246,6 @@ CefRenderWidgetHostViewOSR::CefRenderWidgetHostViewOSR(
// Matching the attributes from BrowserCompositorMac.
delegated_frame_host_ = std::make_unique<content::DelegatedFrameHost>(
AllocateFrameSinkId(is_guest_view_hack), this,
base::FeatureList::IsEnabled(features::kVizDisplayCompositor),
true /* should_register_frame_sink_id */);
root_layer_.reset(new ui::Layer(ui::LAYER_SOLID_COLOR));
@@ -294,7 +293,7 @@ CefRenderWidgetHostViewOSR::~CefRenderWidgetHostViewOSR() {
// necessary to remove all connections to its old ui::Compositor.
if (is_showing_)
delegated_frame_host_->WasHidden();
delegated_frame_host_->ResetCompositor();
delegated_frame_host_->DetachFromCompositor();
#endif
PlatformDestroyCompositorWidget();
@@ -365,7 +364,7 @@ void CefRenderWidgetHostViewOSR::Show() {
#if defined(OS_MACOSX)
browser_compositor_->SetRenderWidgetHostIsHidden(false);
#else
delegated_frame_host_->SetCompositor(compositor_.get());
delegated_frame_host_->AttachToCompositor(compositor_.get());
delegated_frame_host_->WasShown(GetLocalSurfaceId(),
GetRootLayer()->bounds().size(), false);
#endif
@@ -390,7 +389,7 @@ void CefRenderWidgetHostViewOSR::Hide() {
browser_compositor_->SetRenderWidgetHostIsHidden(true);
#else
GetDelegatedFrameHost()->WasHidden();
GetDelegatedFrameHost()->ResetCompositor();
GetDelegatedFrameHost()->DetachFromCompositor();
#endif
is_showing_ = false;
@@ -539,6 +538,10 @@ void CefRenderWidgetHostViewOSR::ClearCompositorFrame() {
GetDelegatedFrameHost()->ClearDelegatedFrame();
}
void CefRenderWidgetHostViewOSR::ResetFallbackToFirstNavigationSurface() {
GetDelegatedFrameHost()->ResetFallbackToFirstNavigationSurface();
}
void CefRenderWidgetHostViewOSR::InitAsPopup(
content::RenderWidgetHostView* parent_host_view,
const gfx::Rect& pos) {
@@ -766,12 +769,6 @@ CefRenderWidgetHostViewOSR::CreateBrowserAccessibilityManager(
return NULL;
}
#if defined(TOOLKIT_VIEWS) || defined(USE_AURA)
void CefRenderWidgetHostViewOSR::ShowDisambiguationPopup(
const gfx::Rect& rect_pixels,
const SkBitmap& zoomed_bitmap) {}
#endif
void CefRenderWidgetHostViewOSR::ImeSetComposition(
const CefString& text,
const std::vector<CefCompositionUnderline>& underlines,
@@ -920,11 +917,7 @@ bool CefRenderWidgetHostViewOSR::TransformPointToCoordSpaceForView(
return true;
}
// In TransformPointToLocalCoordSpace() there is a Point-to-Pixel conversion,
// but it is not necessary here because the final target view is responsible
// for converting before computing the final transform.
return GetDelegatedFrameHost()->TransformPointToCoordSpaceForView(
point, target_view, transformed_point, source);
return false;
}
void CefRenderWidgetHostViewOSR::DidNavigate() {
@@ -959,7 +952,8 @@ ui::Layer* CefRenderWidgetHostViewOSR::DelegatedFrameHostGetLayer() const {
}
bool CefRenderWidgetHostViewOSR::DelegatedFrameHostIsVisible() const {
return !render_widget_host_->is_hidden();
// Called indirectly from DelegatedFrameHost::WasShown.
return is_showing_;
}
SkColor CefRenderWidgetHostViewOSR::DelegatedFrameHostGetGutterColor() const {
@@ -986,10 +980,6 @@ void CefRenderWidgetHostViewOSR::OnFrameTokenChanged(uint32_t frame_token) {
render_widget_host_->DidProcessFrame(frame_token);
}
void CefRenderWidgetHostViewOSR::DidReceiveFirstFrameAfterNavigation() {
render_widget_host_->DidReceiveFirstFrameAfterNavigation();
}
#endif // !defined(OS_MACOSX)
bool CefRenderWidgetHostViewOSR::InstallTransparency() {

View File

@@ -34,6 +34,11 @@
#include "ui/gfx/win/window_impl.h"
#endif
#if defined(USE_AURA)
#include "third_party/blink/public/platform/web_cursor_info.h"
#include "ui/base/cursor/cursor.h"
#endif
namespace content {
class RenderWidgetHost;
class RenderWidgetHostImpl;
@@ -136,6 +141,7 @@ class CefRenderWidgetHostViewOSR : public content::RenderWidgetHostViewBase,
viz::CompositorFrame frame,
base::Optional<viz::HitTestRegionList> hit_test_region_list) override;
void ClearCompositorFrame() override;
void ResetFallbackToFirstNavigationSurface() override;
void InitAsPopup(content::RenderWidgetHostView* parent_host_view,
const gfx::Rect& pos) override;
void InitAsFullscreen(
@@ -167,10 +173,6 @@ class CefRenderWidgetHostViewOSR : public content::RenderWidgetHostViewBase,
content::BrowserAccessibilityDelegate* delegate,
bool for_root_frame) override;
#if defined(TOOLKIT_VIEWS) || defined(USE_AURA)
void ShowDisambiguationPopup(const gfx::Rect& rect_pixels,
const SkBitmap& zoomed_bitmap) override;
#endif
void ImeCompositionRangeChanged(
const gfx::Range& range,
const std::vector<gfx::Rect>& character_bounds) override;
@@ -208,7 +210,6 @@ class CefRenderWidgetHostViewOSR : public content::RenderWidgetHostViewBase,
void OnFirstSurfaceActivation(const viz::SurfaceInfo& surface_info) override;
void OnBeginFrame(base::TimeTicks frame_time) override;
void OnFrameTokenChanged(uint32_t frame_token) override;
void DidReceiveFirstFrameAfterNavigation() override;
#endif // !defined(OS_MACOSX)
bool InstallTransparency();

View File

@@ -15,6 +15,7 @@
#include "base/compiler_specific.h"
#include "base/strings/utf_string_conversions.h"
#include "content/browser/renderer_host/render_widget_host_impl.h"
#include "content/common/view_messages.h"
#include "ui/accelerated_widget_mac/accelerated_widget_mac.h"
#include "ui/display/screen.h"
@@ -44,10 +45,6 @@ class MacHelper : public content::BrowserCompositorMacClient,
view_->render_widget_host()->DidProcessFrame(frame_token);
}
void DidReceiveFirstFrameAfterNavigation() override {
view_->render_widget_host()->DidReceiveFirstFrameAfterNavigation();
}
void DestroyCompositorForShutdown() override {}
bool SynchronizeVisualProperties(

View File

@@ -13,8 +13,9 @@
#include "base/command_line.h"
#include "base/files/file_path.h"
#include "base/strings/string_number_conversions.h"
#include "base/task_scheduler/post_task.h"
#include "base/task/post_task.h"
#include "base/values.h"
#include "chrome/browser/accessibility/accessibility_ui.h"
#include "chrome/browser/net/prediction_options.h"
#include "chrome/browser/plugins/plugin_info_host_impl.h"
#include "chrome/browser/prefs/chrome_command_line_pref_store.h"
@@ -86,7 +87,7 @@ std::unique_ptr<PrefService> CreatePrefService(Profile* profile,
const base::FilePath& pref_path =
cache_path.AppendASCII(browser_prefs::kUserPrefsFileName);
scoped_refptr<JsonPrefStore> json_pref_store = new JsonPrefStore(
pref_path, sequenced_task_runner, std::unique_ptr<PrefFilter>());
pref_path, std::unique_ptr<PrefFilter>(), sequenced_task_runner);
factory.set_user_prefs(json_pref_store.get());
} else {
scoped_refptr<CefPrefStore> cef_pref_store = new CefPrefStore();
@@ -142,6 +143,7 @@ std::unique_ptr<PrefService> CreatePrefService(Profile* profile,
->RegisterProfilePrefsForServices(profile, registry.get());
// Default preferences.
AccessibilityUIMessageHandler::RegisterProfilePrefs(registry.get());
CefMediaCaptureDevicesDispatcher::RegisterPrefs(registry.get());
CefURLRequestContextGetterImpl::RegisterPrefs(registry.get());
chrome_browser_net::RegisterPredictionOptionsProfilePrefs(registry.get());

View File

@@ -94,9 +94,12 @@ void CefPrefStore::ReadPrefsAsync(ReadErrorDelegate* error_delegate) {
NotifyInitializationCompleted();
}
void CefPrefStore::CommitPendingWrite(base::OnceClosure done_callback) {
void CefPrefStore::CommitPendingWrite(
base::OnceClosure done_callback,
base::OnceClosure synchronous_done_callback) {
committed_ = true;
PersistentPrefStore::CommitPendingWrite(std::move(done_callback));
PersistentPrefStore::CommitPendingWrite(std::move(done_callback),
std::move(synchronous_done_callback));
}
void CefPrefStore::SchedulePendingLossyWrites() {}

View File

@@ -45,7 +45,9 @@ class CefPrefStore : public PersistentPrefStore {
PrefReadError GetReadError() const override;
PersistentPrefStore::PrefReadError ReadPrefs() override;
void ReadPrefsAsync(ReadErrorDelegate* error_delegate) override;
virtual void CommitPendingWrite(base::OnceClosure done_callback) override;
virtual void CommitPendingWrite(
base::OnceClosure done_callback,
base::OnceClosure synchronous_done_callback) override;
void SchedulePendingLossyWrites() override;
void ClearMutableValues() override;
void OnStoreDeletionFromDisk() override;
@@ -109,7 +111,7 @@ class CefPrefStore : public PersistentPrefStore {
bool committed_;
std::unique_ptr<ReadErrorDelegate> error_delegate_;
base::ObserverList<PrefStore::Observer, true> observers_;
base::ObserverList<PrefStore::Observer, true>::Unchecked observers_;
DISALLOW_COPY_AND_ASSIGN(CefPrefStore);
};

View File

@@ -20,14 +20,12 @@
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/web_contents.h"
#include "printing/pdf_metafile_skia.h"
#include "printing/metafile_skia.h"
#include "libcef/browser/thread_util.h"
using content::BrowserThread;
DEFINE_WEB_CONTENTS_USER_DATA_KEY(printing::CefPrintViewManager);
namespace printing {
namespace {
@@ -150,7 +148,7 @@ void SavePdfFile(scoped_refptr<base::RefCountedBytes> data,
CEF_REQUIRE_BLOCKING();
DCHECK_GT(data->size(), 0U);
PdfMetafileSkia metafile;
MetafileSkia metafile;
metafile.InitFromData(static_cast<const void*>(data->front()), data->size());
base::File file(path,

View File

@@ -16,7 +16,7 @@
#include "base/run_loop.h"
#include "base/single_thread_task_runner.h"
#include "base/strings/utf_string_conversions.h"
#include "base/task_scheduler/post_task.h"
#include "base/task/post_task.h"
#include "base/threading/thread_task_runner_handle.h"
#include "base/timer/timer.h"
#include "build/build_config.h"
@@ -27,7 +27,6 @@
#include "chrome/browser/printing/printer_query.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/webui_url_constants.h"
#include "chrome/grit/generated_resources.h"
#include "components/prefs/pref_service.h"
#include "components/printing/browser/print_composite_client.h"
@@ -43,14 +42,12 @@
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
#include "extensions/common/constants.h"
#include "mojo/public/cpp/system/buffer.h"
#include "printing/buildflags/buildflags.h"
#include "printing/pdf_metafile_skia.h"
#include "printing/metafile_skia.h"
#include "printing/print_settings.h"
#include "printing/printed_document.h"
#include "ui/base/l10n/l10n_util.h"
#include "url/gurl.h"
#if defined(OS_WIN)
#include "base/command_line.h"
@@ -62,18 +59,6 @@ using content::BrowserThread;
namespace printing {
namespace {
bool PrintingPdfContent(content::RenderFrameHost* rfh) {
GURL url = rfh->GetLastCommittedURL();
// Whether it is inside print preview or pdf plugin extension.
return url.GetOrigin() == chrome::kChromeUIPrintURL ||
(url.SchemeIs(extensions::kExtensionScheme) &&
url.host_piece() == extension_misc::kPdfExtensionId);
}
} // namespace
CefPrintViewManagerBase::CefPrintViewManagerBase(
content::WebContents* web_contents)
: PrintManager(web_contents),
@@ -113,8 +98,7 @@ void CefPrintViewManagerBase::PrintDocument(
print_job_->StartConversionToNativeFormat(print_data, page_size, content_area,
offsets);
#else
std::unique_ptr<PdfMetafileSkia> metafile =
std::make_unique<PdfMetafileSkia>();
std::unique_ptr<MetafileSkia> metafile = std::make_unique<MetafileSkia>();
CHECK(metafile->InitFromData(print_data->front(), print_data->size()));
// Update the rendered document. It will send notifications to the listener.
@@ -196,10 +180,9 @@ void CefPrintViewManagerBase::OnDidPrintDocument(
}
auto* client = PrintCompositeClient::FromWebContents(web_contents());
if (IsOopifEnabled() && !PrintingPdfContent(render_frame_host)) {
if (IsOopifEnabled() && print_job_->document()->settings().is_modifiable()) {
client->DoCompositeDocumentToPdf(
params.document_cookie, render_frame_host, content.metafile_data_handle,
content.data_size, content.subframe_content_info,
params.document_cookie, render_frame_host, content,
base::BindOnce(&CefPrintViewManagerBase::OnComposePdfDone,
weak_ptr_factory_.GetWeakPtr(), params));
return;

View File

@@ -88,6 +88,11 @@ CefStoragePartitionProxy::GetCacheStorageContext() {
return parent_->GetCacheStorageContext();
}
content::GeneratedCodeCacheContext*
CefStoragePartitionProxy::GetGeneratedCodeCacheContext() {
return parent_->GetGeneratedCodeCacheContext();
}
content::HostZoomMap* CefStoragePartitionProxy::GetHostZoomMap() {
return parent_->GetHostZoomMap();
}
@@ -156,6 +161,10 @@ void CefStoragePartitionProxy::Flush() {
parent_->Flush();
}
void CefStoragePartitionProxy::ResetURLLoaderFactories() {
parent_->ResetURLLoaderFactories();
}
void CefStoragePartitionProxy::ClearBluetoothAllowedDevicesMapForTesting() {
parent_->ClearBluetoothAllowedDevicesMapForTesting();
}

View File

@@ -40,6 +40,7 @@ class CefStoragePartitionProxy : public content::StoragePartition {
content::ServiceWorkerContext* GetServiceWorkerContext() override;
content::SharedWorkerService* GetSharedWorkerService() override;
content::CacheStorageContext* GetCacheStorageContext() override;
content::GeneratedCodeCacheContext* GetGeneratedCodeCacheContext() override;
content::HostZoomMap* GetHostZoomMap() override;
content::HostZoomLevelContext* GetHostZoomLevelContext() override;
content::ZoomLevelDelegate* GetZoomLevelDelegate() override;
@@ -69,6 +70,7 @@ class CefStoragePartitionProxy : public content::StoragePartition {
const base::Callback<bool(const GURL&)>& url_matcher,
base::OnceClosure callback) override;
void Flush() override;
void ResetURLLoaderFactories() override;
void ClearBluetoothAllowedDevicesMapForTesting() override;
void FlushNetworkInterfaceForTesting() override;
void WaitForDeletionTasksForTesting() override;

View File

@@ -8,7 +8,7 @@
#include "base/location.h"
#include "base/logging.h"
#include "base/task_scheduler/post_task.h"
#include "base/task/post_task.h"
#include "base/threading/thread_restrictions.h"
#include "content/public/browser/browser_thread.h"
@@ -70,7 +70,7 @@
// Post a blocking task where the user won't notice if it takes an arbitrarily
// long time to complete.
#define CEF_POST_BACKGROUND_TASK(task) \
CEF_POST_BLOCKING_TASK(base::TaskPriority::BACKGROUND, task)
CEF_POST_BLOCKING_TASK(base::TaskPriority::BEST_EFFORT, task)
// Assert that blocking is allowed on the current thread.
#define CEF_REQUIRE_BLOCKING() base::AssertBlockingAllowed()
@@ -87,6 +87,9 @@
return false; \
} \
bool HasOneRef() const OVERRIDE { return ref_count_.HasOneRef(); } \
bool HasAtLeastOneRef() const OVERRIDE { \
return ref_count_.HasAtLeastOneRef(); \
} \
\
private: \
CefRefCount ref_count_;

View File

@@ -18,20 +18,18 @@ import("//tools/json_schema_compiler/json_features.gni")
#schema_include_rules = "//cef/libcef/browser/extensions/api:extensions::api::cef::%(namespace)s"
#schema_dependencies = [ "//extensions/common/api" ]
#
#json_schema_api("api") {
#generated_json_strings("api") {
# sources = schema_sources
# schemas = true
# bundle = true
# configs = [ "//build/config:precompiled_headers" ]
# bundle_name = "Cef"
#
# deps = schema_dependencies
#}
#
#json_schema_api("api_registration") {
#function_registration("api_registration") {
# sources = schema_sources
# impl_dir = "//cef/libcef/browser/extensions/api"
# bundle_registration = true
# configs = [ "//build/config:precompiled_headers" ]
# bundle_name = "Cef"
#

View File

@@ -0,0 +1,89 @@
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "libcef/common/extensions/extensions_api_provider.h"
#include "libcef/common/extensions/chrome_generated_schemas.h"
#include "cef/grit/cef_resources.h"
//#include "cef/libcef/common/extensions/api/generated_schemas.h"
#include "cef/libcef/common/extensions/api/cef_api_features.h"
#include "cef/libcef/common/extensions/api/cef_manifest_features.h"
#include "cef/libcef/common/extensions/api/cef_permission_features.h"
#include "chrome/common/extensions/chrome_aliases.h"
#include "chrome/common/extensions/chrome_manifest_handlers.h"
#include "extensions/common/features/json_feature_provider_source.h"
#include "extensions/common/permissions/permissions_info.h"
namespace extensions {
CefExtensionsAPIProvider::CefExtensionsAPIProvider() {
}
void CefExtensionsAPIProvider::AddAPIFeatures(FeatureProvider* provider) {
AddCEFAPIFeatures(provider);
}
void CefExtensionsAPIProvider::AddManifestFeatures(
FeatureProvider* provider) {
AddCEFManifestFeatures(provider);
}
void CefExtensionsAPIProvider::AddPermissionFeatures(
FeatureProvider* provider) {
AddCEFPermissionFeatures(provider);
}
void CefExtensionsAPIProvider::AddBehaviorFeatures(
FeatureProvider* provider) {
// No CEF-specific behavior features.
}
void CefExtensionsAPIProvider::AddAPIJSONSources(
JSONFeatureProviderSource* json_source) {
// Extension API features specific to CEF. See
// libcef/common/extensions/api/README.txt for additional details.
json_source->LoadJSON(IDR_CEF_EXTENSION_API_FEATURES);
}
bool CefExtensionsAPIProvider::IsAPISchemaGenerated(const std::string& name) {
// Schema for CEF-only APIs.
// TODO(cef): Enable if/when CEF exposes its own Mojo APIs. See
// libcef/common/extensions/api/README.txt for details.
// if (api::cef::CefGeneratedSchemas::IsGenerated(name))
// return true;
// Chrome APIs whitelisted by CEF.
if (api::cef::ChromeGeneratedSchemas::IsGenerated(name))
return true;
return false;
}
base::StringPiece CefExtensionsAPIProvider::GetAPISchema(
const std::string& name) {
// Schema for CEF-only APIs.
// TODO(cef): Enable if/when CEF exposes its own Mojo APIs. See
// libcef/common/extensions/api/README.txt for details.
// if (api::cef::CefGeneratedSchemas::IsGenerated(name))
// return api::cef::CefGeneratedSchemas::Get(name);
// Chrome APIs whitelisted by CEF.
if (api::cef::ChromeGeneratedSchemas::IsGenerated(name))
return api::cef::ChromeGeneratedSchemas::Get(name);
return base::StringPiece();
}
void CefExtensionsAPIProvider::AddPermissionsProviders(
PermissionsInfo* permissions_info) {
permissions_info->AddProvider(chrome_api_permissions_,
GetChromePermissionAliases());
}
void CefExtensionsAPIProvider::RegisterManifestHandlers() {
RegisterChromeManifestHandlers();
}
} // namespace extensions

View File

@@ -0,0 +1,37 @@
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CEF_LIBCEF_COMMON_EXTENSIONS_EXTENSIONS_API_PROVIDER_H_
#define CEF_LIBCEF_COMMON_EXTENSIONS_EXTENSIONS_API_PROVIDER_H_
#include "base/macros.h"
#include "chrome/common/extensions/permissions/chrome_api_permissions.h"
#include "extensions/common/extensions_api_provider.h"
namespace extensions {
class CefExtensionsAPIProvider : public ExtensionsAPIProvider {
public:
CefExtensionsAPIProvider();
// ExtensionsAPIProvider:
void AddAPIFeatures(FeatureProvider* provider) override;
void AddManifestFeatures(FeatureProvider* provider) override;
void AddPermissionFeatures(FeatureProvider* provider) override;
void AddBehaviorFeatures(FeatureProvider* provider) override;
void AddAPIJSONSources(JSONFeatureProviderSource* json_source) override;
bool IsAPISchemaGenerated(const std::string& name) override;
base::StringPiece GetAPISchema(const std::string& name) override;
void AddPermissionsProviders(PermissionsInfo* permissions_info) override;
void RegisterManifestHandlers() override;
private:
const ChromeAPIPermissions chrome_api_permissions_;
DISALLOW_COPY_AND_ASSIGN(CefExtensionsAPIProvider);
};
} // namespace extensions
#endif // CEF_LIBCEF_COMMON_EXTENSIONS_EXTENSIONS_API_PROVIDER_H_

View File

@@ -8,34 +8,15 @@
#include <utility>
#include "libcef/common/cef_switches.h"
#include "libcef/common/extensions/chrome_generated_schemas.h"
#include "libcef/common/extensions/extensions_api_provider.h"
#include "base/logging.h"
#include "cef/grit/cef_resources.h"
//#include "cef/libcef/common/extensions/api/generated_schemas.h"
#include "cef/libcef/common/extensions/api/cef_api_features.h"
#include "cef/libcef/common/extensions/api/cef_manifest_features.h"
#include "cef/libcef/common/extensions/api/cef_permission_features.h"
#include "chrome/common/extensions/chrome_aliases.h"
#include "chrome/common/extensions/chrome_manifest_handlers.h"
#include "chrome/grit/common_resources.h"
#include "extensions/common/api/api_features.h"
#include "extensions/common/api/behavior_features.h"
#include "extensions/common/api/generated_schemas.h"
#include "extensions/common/api/manifest_features.h"
#include "extensions/common/api/permission_features.h"
#include "extensions/common/common_manifest_handlers.h"
#include "extensions/common/core_extensions_api_provider.h"
#include "extensions/common/extension_urls.h"
#include "extensions/common/extensions_aliases.h"
#include "extensions/common/features/feature_provider.h"
#include "extensions/common/features/json_feature_provider_source.h"
#include "extensions/common/features/simple_feature.h"
#include "extensions/common/manifest_handler.h"
#include "extensions/common/permissions/permission_message_provider.h"
#include "extensions/common/permissions/permissions_info.h"
#include "extensions/common/permissions/permissions_provider.h"
#include "extensions/common/url_pattern_set.h"
#include "extensions/grit/extensions_resources.h"
namespace extensions {
@@ -50,22 +31,14 @@ SimpleFeature* CreateFeature() {
CefExtensionsClient::CefExtensionsClient()
: webstore_base_url_(extension_urls::kChromeWebstoreBaseURL),
webstore_update_url_(extension_urls::kChromeWebstoreUpdateURL) {}
webstore_update_url_(extension_urls::kChromeWebstoreUpdateURL) {
AddAPIProvider(std::make_unique<CoreExtensionsAPIProvider>());
AddAPIProvider(std::make_unique<CefExtensionsAPIProvider>());
}
CefExtensionsClient::~CefExtensionsClient() {}
void CefExtensionsClient::Initialize() {
RegisterCommonManifestHandlers();
RegisterChromeManifestHandlers();
ManifestHandler::FinalizeRegistration();
// TODO(jamescook): Do we need to whitelist any extensions?
// Set up permissions.
PermissionsInfo::GetInstance()->AddProvider(chrome_api_permissions_,
GetChromePermissionAliases());
PermissionsInfo::GetInstance()->AddProvider(extensions_api_permissions_,
GetExtensionsPermissionAliases());
}
void CefExtensionsClient::Initialize() {}
void CefExtensionsClient::InitializeWebStoreUrls(
base::CommandLine* command_line) {}
@@ -79,40 +52,6 @@ const std::string CefExtensionsClient::GetProductName() {
return "cef";
}
std::unique_ptr<FeatureProvider> CefExtensionsClient::CreateFeatureProvider(
const std::string& name) const {
auto provider = std::make_unique<FeatureProvider>();
if (name == "api") {
AddCoreAPIFeatures(provider.get());
AddCEFAPIFeatures(provider.get());
} else if (name == "manifest") {
AddCoreManifestFeatures(provider.get());
AddCEFManifestFeatures(provider.get());
} else if (name == "permission") {
AddCorePermissionFeatures(provider.get());
AddCEFPermissionFeatures(provider.get());
} else if (name == "behavior") {
// Note: There are no CEF-specific behavior features.
AddCoreBehaviorFeatures(provider.get());
} else {
NOTREACHED();
}
return provider;
}
std::unique_ptr<JSONFeatureProviderSource>
CefExtensionsClient::CreateAPIFeatureSource() const {
std::unique_ptr<JSONFeatureProviderSource> source(
new JSONFeatureProviderSource("api"));
source->LoadJSON(IDR_EXTENSION_API_FEATURES);
// Extension API features specific to CEF. See
// libcef/common/extensions/api/README.txt for additional details.
source->LoadJSON(IDR_CEF_EXTENSION_API_FEATURES);
return source;
}
void CefExtensionsClient::FilterHostPermissions(
const URLPatternSet& hosts,
URLPatternSet* new_hosts,
@@ -142,40 +81,6 @@ bool CefExtensionsClient::IsScriptableURL(const GURL& url,
return true;
}
bool CefExtensionsClient::IsAPISchemaGenerated(const std::string& name) const {
// Schema for CEF-only APIs.
// TODO(cef): Enable if/when CEF exposes its own Mojo APIs. See
// libcef/common/extensions/api/README.txt for details.
// if (api::cef::CefGeneratedSchemas::IsGenerated(name))
// return true;
// Chrome APIs whitelisted by CEF.
if (api::cef::ChromeGeneratedSchemas::IsGenerated(name))
return true;
// Core extensions APIs.
if (api::GeneratedSchemas::IsGenerated(name))
return true;
return false;
}
base::StringPiece CefExtensionsClient::GetAPISchema(
const std::string& name) const {
// Schema for CEF-only APIs.
// TODO(cef): Enable if/when CEF exposes its own Mojo APIs. See
// libcef/common/extensions/api/README.txt for details.
// if (api::cef::CefGeneratedSchemas::IsGenerated(name))
// return api::cef::CefGeneratedSchemas::Get(name);
// Chrome APIs whitelisted by CEF.
if (api::cef::ChromeGeneratedSchemas::IsGenerated(name))
return api::cef::ChromeGeneratedSchemas::Get(name);
// Core extensions APIs.
return api::GeneratedSchemas::Get(name);
}
bool CefExtensionsClient::ShouldSuppressFatalErrors() const {
return true;
}

View File

@@ -8,10 +8,8 @@
#include "base/compiler_specific.h"
#include "base/macros.h"
#include "chrome/common/extensions/permissions/chrome_api_permissions.h"
#include "chrome/common/extensions/permissions/chrome_permission_message_provider.h"
#include "extensions/common/extensions_client.h"
#include "extensions/common/permissions/extensions_api_permissions.h"
#include "url/gurl.h"
namespace extensions {
@@ -28,10 +26,6 @@ class CefExtensionsClient : public ExtensionsClient {
const PermissionMessageProvider& GetPermissionMessageProvider()
const override;
const std::string GetProductName() override;
std::unique_ptr<FeatureProvider> CreateFeatureProvider(
const std::string& name) const override;
std::unique_ptr<JSONFeatureProviderSource> CreateAPIFeatureSource()
const override;
void FilterHostPermissions(const URLPatternSet& hosts,
URLPatternSet* new_hosts,
PermissionIDSet* permissions) const override;
@@ -41,8 +35,6 @@ class CefExtensionsClient : public ExtensionsClient {
const Extension* extension,
const APIPermissionSet& api_permissions) const override;
bool IsScriptableURL(const GURL& url, std::string* error) const override;
bool IsAPISchemaGenerated(const std::string& name) const override;
base::StringPiece GetAPISchema(const std::string& name) const override;
bool ShouldSuppressFatalErrors() const override;
void RecordDidSuppressFatalError() override;
const GURL& GetWebstoreBaseURL() const override;
@@ -50,8 +42,6 @@ class CefExtensionsClient : public ExtensionsClient {
bool IsBlacklistUpdateURL(const GURL& url) const override;
private:
const ChromeAPIPermissions chrome_api_permissions_;
const ExtensionsAPIPermissions extensions_api_permissions_;
const ChromePermissionMessageProvider permission_message_provider_;
ScriptingWhitelist scripting_whitelist_;

View File

@@ -99,6 +99,20 @@ void OverrideFrameworkBundlePath() {
base::mac::SetOverrideFrameworkBundlePath(framework_path);
}
void OverrideOuterBundlePath() {
base::FilePath bundle_path = util_mac::GetMainBundlePath();
DCHECK(!bundle_path.empty());
base::mac::SetOverrideOuterBundlePath(bundle_path);
}
void OverrideBaseBundleID() {
std::string bundle_id = util_mac::GetMainBundleID();
DCHECK(!bundle_id.empty());
base::mac::SetBaseBundleID(bundle_id.c_str());
}
void OverrideChildProcessPath() {
base::FilePath child_process_path =
base::CommandLine::ForCurrentProcess()->GetSwitchValuePath(
@@ -299,7 +313,7 @@ CefMainDelegate::CefMainDelegate(CefRefPtr<CefApp> application)
CefMainDelegate::~CefMainDelegate() {}
void CefMainDelegate::PreContentInitialization() {
void CefMainDelegate::PreCreateMainMessageLoop() {
// Create the main message loop.
message_loop_.reset(new CefBrowserMessageLoop());
}
@@ -450,29 +464,6 @@ bool CefMainDelegate::BasicStartupComplete(int* exit_code) {
switches::kUncaughtExceptionStackSize,
base::IntToString(settings.uncaught_exception_stack_size));
}
#if defined(OS_MACOSX)
std::vector<std::string> disable_features;
// TODO: Remove once MacV2Sandbox is supported. See issue #2459.
if (features::kMacV2Sandbox.default_state ==
base::FEATURE_ENABLED_BY_DEFAULT) {
disable_features.push_back(features::kMacV2Sandbox.name);
}
if (!disable_features.empty()) {
DCHECK(!base::FeatureList::GetInstance());
std::string disable_features_str =
command_line->GetSwitchValueASCII(switches::kDisableFeatures);
for (auto feature_str : disable_features) {
if (!disable_features_str.empty())
disable_features_str += ",";
disable_features_str += feature_str;
}
command_line->AppendSwitchASCII(switches::kDisableFeatures,
disable_features_str);
}
#endif // defined(OS_MACOSX)
}
if (content_client_.application().get()) {
@@ -531,6 +522,8 @@ bool CefMainDelegate::BasicStartupComplete(int* exit_code) {
#if defined(OS_MACOSX)
OverrideFrameworkBundlePath();
OverrideOuterBundlePath();
OverrideBaseBundleID();
#endif
return false;

View File

@@ -33,7 +33,7 @@ class CefMainDelegate : public content::ContentMainDelegate {
explicit CefMainDelegate(CefRefPtr<CefApp> application);
~CefMainDelegate() override;
void PreContentInitialization() override;
void PreCreateMainMessageLoop() override;
bool BasicStartupComplete(int* exit_code) override;
void PreSandboxStartup() override;
void SandboxInitialized(const std::string& process_type) override;

View File

@@ -18,7 +18,7 @@
#include "base/logging.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/task_scheduler/post_task.h"
#include "base/task/post_task.h"
#include "components/navigation_interception/navigation_params.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/resource_request_info.h"

View File

@@ -6,6 +6,8 @@
#define CEF_LIBCEF_COMMON_UTIL_MAC_H_
#pragma once
#include <string>
namespace base {
class FilePath;
}
@@ -31,6 +33,13 @@ base::FilePath GetFrameworkResourcesDirectory();
// "myapp.app/Contents/MacOS/myapp").
base::FilePath GetMainProcessPath();
// Returns the path to the top-level app bundle that contains the main process
// executable (e.g. "myapp.app").
base::FilePath GetMainBundlePath();
// Returns the identifier for the top-level app bundle.
std::string GetMainBundleID();
// Returns the path to the Resources directory inside the top-level app bundle
// (e.g. "myapp.app/Contents/Resources"). May return an empty value if not
// running in an app bundle.

View File

@@ -9,19 +9,15 @@
#include "base/base_paths.h"
#include "base/command_line.h"
#include "base/files/file_path.h"
#include "base/mac/bundle_locations.h"
#include "base/mac/foundation_util.h"
#include "base/path_service.h"
#include "base/strings/sys_string_conversions.h"
namespace util_mac {
namespace {
// Returns the path to the top-level app bundle that contains the main process
// executable.
base::FilePath GetMainBundlePath() {
return base::mac::GetAppBundlePath(GetMainProcessPath());
}
// Returns the path to the Frameworks directory inside the top-level app bundle.
base::FilePath GetFrameworksPath() {
base::FilePath bundle_path = GetMainBundlePath();
@@ -68,6 +64,15 @@ base::FilePath GetMainProcessPath() {
return path;
}
base::FilePath GetMainBundlePath() {
return base::mac::GetAppBundlePath(GetMainProcessPath());
}
std::string GetMainBundleID() {
NSBundle* bundle = base::mac::OuterBundle();
return base::SysNSStringToUTF8([bundle bundleIdentifier]);
}
base::FilePath GetMainResourcesDirectory() {
base::FilePath bundle_path = GetMainBundlePath();
if (bundle_path.empty())

View File

@@ -553,7 +553,7 @@ size_t CefBinaryValueImpl::GetData(void* buffer,
return 0;
size = std::min(buffer_size, size - data_offset);
const char* data = const_value().GetBlob().data();
auto* data = const_value().GetBlob().data();
memcpy(buffer, data + data_offset, size);
return size;
}

View File

@@ -5,9 +5,6 @@
#include "libcef/renderer/blink_glue.h"
#include "base/compiler_specific.h"
MSVC_PUSH_WARNING_LEVEL(0);
#include "third_party/blink/public/platform/web_string.h"
#include "third_party/blink/public/platform/web_url_response.h"
#include "third_party/blink/public/web/web_document.h"
@@ -32,7 +29,6 @@ MSVC_PUSH_WARNING_LEVEL(0);
#include "third_party/blink/renderer/platform/bindings/v8_binding.h"
#include "third_party/blink/renderer/platform/loader/fetch/resource_response.h"
#include "third_party/blink/renderer/platform/weborigin/scheme_registry.h"
MSVC_POP_WARNING();
#undef LOG
#include "base/logging.h"

View File

@@ -272,7 +272,7 @@ void CefContentRendererClient::WebKitInitialized() {
const Cef_CrossOriginWhiteListEntry_Params& entry =
cross_origin_whitelist_entries_[i];
GURL gurl = GURL(entry.source_origin);
blink::WebSecurityPolicy::AddOriginAccessWhitelistEntry(
blink::WebSecurityPolicy::AddOriginAccessAllowListEntry(
gurl, blink::WebString::FromUTF8(entry.target_protocol),
blink::WebString::FromUTF8(entry.target_domain),
entry.allow_target_subdomains);
@@ -492,8 +492,7 @@ bool CefContentRendererClient::ShouldFork(blink::WebLocalFrame* frame,
const GURL& url,
const std::string& http_method,
bool is_initial_navigation,
bool is_server_redirect,
bool* send_referrer) {
bool is_server_redirect) {
DCHECK(!frame->Parent());
// For now, we skip the rest for POST submissions. This is because
@@ -505,7 +504,7 @@ bool CefContentRendererClient::ShouldFork(blink::WebLocalFrame* frame,
if (extensions::ExtensionsEnabled()) {
return extensions::CefExtensionsRendererClient::ShouldFork(
frame, url, is_initial_navigation, is_server_redirect, send_referrer);
frame, url, is_initial_navigation, is_server_redirect);
}
return false;

View File

@@ -112,8 +112,7 @@ class CefContentRendererClient : public content::ContentRendererClient,
const GURL& url,
const std::string& http_method,
bool is_initial_navigation,
bool is_server_redirect,
bool* send_referrer) override;
bool is_server_redirect) override;
void WillSendRequest(blink::WebLocalFrame* frame,
ui::PageTransition transition_type,
const blink::WebURL& url,

View File

@@ -226,8 +226,7 @@ bool CefExtensionsRendererClient::IsStandaloneExtensionProcess() {
bool CefExtensionsRendererClient::ShouldFork(blink::WebLocalFrame* frame,
const GURL& url,
bool is_initial_navigation,
bool is_server_redirect,
bool* send_referrer) {
bool is_server_redirect) {
const extensions::RendererExtensionRegistry* extension_registry =
extensions::RendererExtensionRegistry::Get();
@@ -246,10 +245,6 @@ bool CefExtensionsRendererClient::ShouldFork(blink::WebLocalFrame* frame,
if (!is_server_redirect &&
CrossesExtensionExtents(frame, url, is_extension_url,
is_initial_navigation)) {
// Include the referrer in this case since we're going from a hosted web
// page. (the packaged case is handled previously by the extension
// navigation test)
*send_referrer = true;
return true;
}

View File

@@ -72,8 +72,7 @@ class CefExtensionsRendererClient : public ExtensionsRendererClient {
static bool ShouldFork(blink::WebLocalFrame* frame,
const GURL& url,
bool is_initial_navigation,
bool is_server_redirect,
bool* send_referrer);
bool is_server_redirect);
static content::BrowserPluginDelegate* CreateBrowserPluginDelegate(
content::RenderFrame* render_frame,
const content::WebPluginInfo& info,

View File

@@ -51,9 +51,8 @@ bool CefPrintRenderFrameHelperDelegate::OverridePrint(
if (!frame->GetDocument().IsPluginDocument())
return false;
std::vector<extensions::MimeHandlerViewContainer*> mime_handlers =
extensions::MimeHandlerViewContainer::FromRenderFrame(
content::RenderFrame::FromWebFrame(frame));
auto mime_handlers = extensions::MimeHandlerViewContainer::FromRenderFrame(
content::RenderFrame::FromWebFrame(frame));
if (!mime_handlers.empty()) {
// This message is handled in chrome/browser/resources/pdf/pdf.js and
// instructs the PDF plugin to print. This is to make window.print() on a

View File

@@ -7,6 +7,7 @@
#include "libcef/common/cef_messages.h"
#include "libcef/common/net/net_resource_provider.h"
#include "libcef/renderer/blink_glue.h"
#include "libcef/renderer/content_renderer_client.h"
#include "components/visitedlink/renderer/visitedlink_slave.h"
@@ -64,18 +65,15 @@ void CefRenderThreadObserver::OnModifyCrossOriginWhitelistEntry(
const Cef_CrossOriginWhiteListEntry_Params& params) {
GURL gurl = GURL(params.source_origin);
if (add) {
blink::WebSecurityPolicy::AddOriginAccessWhitelistEntry(
blink::WebSecurityPolicy::AddOriginAccessAllowListEntry(
gurl, blink::WebString::FromUTF8(params.target_protocol),
blink::WebString::FromUTF8(params.target_domain),
params.allow_target_subdomains);
} else {
blink::WebSecurityPolicy::RemoveOriginAccessWhitelistEntry(
gurl, blink::WebString::FromUTF8(params.target_protocol),
blink::WebString::FromUTF8(params.target_domain),
params.allow_target_subdomains);
blink::WebSecurityPolicy::ClearOriginAccessAllowListForOrigin(gurl);
}
}
void CefRenderThreadObserver::OnClearCrossOriginWhitelist() {
blink::WebSecurityPolicy::ResetOriginAccessWhitelists();
blink::WebSecurityPolicy::ClearOriginAccessAllowList();
}

View File

@@ -460,7 +460,9 @@ void v8impl_string_dtor(char* str) {
#endif
// Convert a v8::String to CefString.
void GetCefString(v8::Local<v8::String> str, CefString& out) {
void GetCefString(v8::Isolate* isolate,
v8::Local<v8::String> str,
CefString& out) {
if (str.IsEmpty())
return;
@@ -470,7 +472,7 @@ void GetCefString(v8::Local<v8::String> str, CefString& out) {
if (len == 0)
return;
char* buf = new char[len + 1];
str->WriteUtf8(buf, len + 1);
str->WriteUtf8(isolate, buf, len + 1);
// Perform conversion to the wide type.
cef_string_t* retws = out.GetWritableStruct();
@@ -483,14 +485,14 @@ void GetCefString(v8::Local<v8::String> str, CefString& out) {
if (len == 0)
return;
char16* buf = new char16[len + 1];
str->Write(reinterpret_cast<uint16_t*>(buf), 0, len + 1);
str->Write(isolate, reinterpret_cast<uint16_t*>(buf), 0, len + 1);
#else
// Allocate enough space for a worst-case conversion.
int len = str->Utf8Length();
if (len == 0)
return;
char* buf = new char[len + 1];
str->WriteUtf8(buf, len + 1);
str->WriteUtf8(isolate, buf, len + 1);
#endif
// Don't perform an extra string copy.
@@ -559,7 +561,7 @@ void AccessorNameGetterCallbackImpl(
CefRefPtr<CefV8Value> retval;
CefRefPtr<CefV8Value> object = new CefV8ValueImpl(isolate, context, obj);
CefString name, exception;
GetCefString(v8::Local<v8::String>::Cast(property), name);
GetCefString(isolate, v8::Local<v8::String>::Cast(property), name);
if (accessorPtr->Get(name, object, retval, exception)) {
if (!exception.empty()) {
info.GetReturnValue().Set(isolate->ThrowException(
@@ -598,7 +600,7 @@ void AccessorNameSetterCallbackImpl(
CefRefPtr<CefV8Value> cefValue =
new CefV8ValueImpl(isolate, context, value);
CefString name, exception;
GetCefString(v8::Local<v8::String>::Cast(property), name);
GetCefString(isolate, v8::Local<v8::String>::Cast(property), name);
accessorPtr->Set(name, object, cefValue, exception);
if (!exception.empty()) {
isolate->ThrowException(
@@ -609,13 +611,13 @@ void AccessorNameSetterCallbackImpl(
}
// Two helper functions for V8 Interceptor callbacks.
CefString PropertyToIndex(v8::Local<v8::Name> property) {
CefString PropertyToIndex(v8::Isolate* isolate, v8::Local<v8::Name> property) {
CefString name;
GetCefString(property.As<v8::String>(), name);
GetCefString(isolate, property.As<v8::String>(), name);
return name;
}
int PropertyToIndex(uint32_t index) {
int PropertyToIndex(v8::Isolate* isolate, uint32_t index) {
return static_cast<int>(index);
}
@@ -641,7 +643,8 @@ void InterceptorGetterCallbackImpl(
CefRefPtr<CefV8Value> object = new CefV8ValueImpl(isolate, context, obj);
CefRefPtr<CefV8Value> retval;
CefString exception;
interceptorPtr->Get(PropertyToIndex(property), object, retval, exception);
interceptorPtr->Get(PropertyToIndex(isolate, property), object, retval,
exception);
if (!exception.empty()) {
info.GetReturnValue().Set(isolate->ThrowException(
v8::Exception::Error(GetV8String(isolate, exception))));
@@ -672,7 +675,8 @@ void InterceptorSetterCallbackImpl(
CefRefPtr<CefV8Value> object = new CefV8ValueImpl(isolate, context, obj);
CefRefPtr<CefV8Value> cefValue = new CefV8ValueImpl(isolate, context, value);
CefString exception;
interceptorPtr->Set(PropertyToIndex(property), object, cefValue, exception);
interceptorPtr->Set(PropertyToIndex(isolate, property), object, cefValue,
exception);
if (!exception.empty()) {
isolate->ThrowException(
v8::Exception::Error(GetV8String(isolate, exception)));
@@ -695,7 +699,7 @@ class ExtensionWrapper : public v8::Extension {
return v8::Local<v8::FunctionTemplate>();
CefString func_name;
GetCefString(name, func_name);
GetCefString(isolate, name, func_name);
v8::Local<v8::External> function_data =
V8FunctionData::Create(isolate, func_name, handler_);
@@ -720,13 +724,18 @@ class CefV8ExceptionImpl : public CefV8Exception {
if (message.IsEmpty())
return;
GetCefString(message->Get(), message_);
v8::Isolate* isolate = context->GetIsolate();
GetCefString(isolate, message->Get(), message_);
v8::MaybeLocal<v8::String> source_line = message->GetSourceLine(context);
if (!source_line.IsEmpty())
GetCefString(source_line.ToLocalChecked(), source_line_);
GetCefString(isolate, source_line.ToLocalChecked(), source_line_);
if (!message->GetScriptResourceName().IsEmpty())
GetCefString(message->GetScriptResourceName()->ToString(), script_);
if (!message->GetScriptResourceName().IsEmpty()) {
GetCefString(
isolate,
message->GetScriptResourceName()->ToString(context).ToLocalChecked(),
script_);
}
v8::Maybe<int> line_number = message->GetLineNumber(context);
if (!line_number.IsNothing())
@@ -1490,7 +1499,8 @@ void CefV8ValueImpl::InitFromV8Value(v8::Local<v8::Context> context,
CefTime(value->ToNumber(context).ToLocalChecked()->Value() / 1000));
} else if (value->IsString()) {
CefString rv;
GetCefString(value->ToString(), rv);
GetCefString(context->GetIsolate(),
value->ToString(context).ToLocalChecked(), rv);
InitString(rv);
} else if (value->IsObject()) {
InitObject(value, NULL);
@@ -1769,7 +1779,7 @@ bool CefV8ValueImpl::IsUserCreated() {
}
v8::Local<v8::Value> value = handle_->GetNewV8Handle(false);
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Object> obj = value->ToObject(context).ToLocalChecked();
V8TrackObject* tracker = V8TrackObject::Unwrap(context, obj);
return (tracker != NULL);
@@ -1820,7 +1830,7 @@ bool CefV8ValueImpl::HasValue(const CefString& key) {
}
v8::Local<v8::Value> value = handle_->GetNewV8Handle(false);
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Object> obj = value->ToObject(context).ToLocalChecked();
return obj->Has(context, GetV8String(isolate, key)).FromJust();
}
@@ -1842,7 +1852,7 @@ bool CefV8ValueImpl::HasValue(int index) {
}
v8::Local<v8::Value> value = handle_->GetNewV8Handle(false);
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Object> obj = value->ToObject(context).ToLocalChecked();
return obj->Has(context, index).FromJust();
}
@@ -1859,7 +1869,7 @@ bool CefV8ValueImpl::DeleteValue(const CefString& key) {
}
v8::Local<v8::Value> value = handle_->GetNewV8Handle(false);
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Object> obj = value->ToObject(context).ToLocalChecked();
v8::TryCatch try_catch(isolate);
try_catch.SetVerbose(true);
@@ -1885,7 +1895,7 @@ bool CefV8ValueImpl::DeleteValue(int index) {
}
v8::Local<v8::Value> value = handle_->GetNewV8Handle(false);
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Object> obj = value->ToObject(context).ToLocalChecked();
v8::TryCatch try_catch(isolate);
try_catch.SetVerbose(true);
@@ -1906,7 +1916,7 @@ CefRefPtr<CefV8Value> CefV8ValueImpl::GetValue(const CefString& key) {
}
v8::Local<v8::Value> value = handle_->GetNewV8Handle(false);
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Object> obj = value->ToObject(context).ToLocalChecked();
v8::TryCatch try_catch(isolate);
try_catch.SetVerbose(true);
@@ -1934,7 +1944,7 @@ CefRefPtr<CefV8Value> CefV8ValueImpl::GetValue(int index) {
}
v8::Local<v8::Value> value = handle_->GetNewV8Handle(false);
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Object> obj = value->ToObject(context).ToLocalChecked();
v8::TryCatch try_catch(isolate);
try_catch.SetVerbose(true);
@@ -1961,7 +1971,7 @@ bool CefV8ValueImpl::SetValue(const CefString& key,
}
v8::Local<v8::Value> value = handle_->GetNewV8Handle(false);
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Object> obj = value->ToObject(context).ToLocalChecked();
v8::TryCatch try_catch(isolate);
try_catch.SetVerbose(true);
@@ -2005,7 +2015,7 @@ bool CefV8ValueImpl::SetValue(int index, CefRefPtr<CefV8Value> value) {
}
v8::Local<v8::Value> value = handle_->GetNewV8Handle(false);
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Object> obj = value->ToObject(context).ToLocalChecked();
v8::TryCatch try_catch(isolate);
try_catch.SetVerbose(true);
@@ -2032,7 +2042,7 @@ bool CefV8ValueImpl::SetValue(const CefString& key,
}
v8::Local<v8::Value> value = handle_->GetNewV8Handle(false);
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Object> obj = value->ToObject(context).ToLocalChecked();
CefRefPtr<CefV8Accessor> accessorPtr;
@@ -2064,15 +2074,22 @@ bool CefV8ValueImpl::GetKeys(std::vector<CefString>& keys) {
v8::Isolate* isolate = handle_->isolate();
v8::HandleScope handle_scope(isolate);
v8::Local<v8::Context> context = isolate->GetCurrentContext();
if (context.IsEmpty()) {
NOTREACHED() << "not currently in a V8 context";
return false;
}
v8::Local<v8::Value> value = handle_->GetNewV8Handle(false);
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Object> obj = value->ToObject(context).ToLocalChecked();
v8::Local<v8::Array> arr_keys = obj->GetPropertyNames();
uint32_t len = arr_keys->Length();
for (uint32_t i = 0; i < len; ++i) {
v8::Local<v8::Value> value = arr_keys->Get(v8::Integer::New(isolate, i));
CefString str;
GetCefString(value->ToString(), str);
GetCefString(isolate, value->ToString(context).ToLocalChecked(), str);
keys.push_back(str);
}
return true;
@@ -2091,7 +2108,7 @@ bool CefV8ValueImpl::SetUserData(CefRefPtr<CefBaseRefCounted> user_data) {
}
v8::Local<v8::Value> value = handle_->GetNewV8Handle(false);
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Object> obj = value->ToObject(context).ToLocalChecked();
V8TrackObject* tracker = V8TrackObject::Unwrap(context, obj);
if (tracker) {
@@ -2115,7 +2132,7 @@ CefRefPtr<CefBaseRefCounted> CefV8ValueImpl::GetUserData() {
}
v8::Local<v8::Value> value = handle_->GetNewV8Handle(false);
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Object> obj = value->ToObject(context).ToLocalChecked();
V8TrackObject* tracker = V8TrackObject::Unwrap(context, obj);
if (tracker)
@@ -2137,7 +2154,7 @@ int CefV8ValueImpl::GetExternallyAllocatedMemory() {
}
v8::Local<v8::Value> value = handle_->GetNewV8Handle(false);
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Object> obj = value->ToObject(context).ToLocalChecked();
V8TrackObject* tracker = V8TrackObject::Unwrap(context, obj);
if (tracker)
@@ -2159,7 +2176,7 @@ int CefV8ValueImpl::AdjustExternallyAllocatedMemory(int change_in_bytes) {
}
v8::Local<v8::Value> value = handle_->GetNewV8Handle(false);
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Object> obj = value->ToObject(context).ToLocalChecked();
V8TrackObject* tracker = V8TrackObject::Unwrap(context, obj);
if (tracker)
@@ -2171,14 +2188,22 @@ int CefV8ValueImpl::AdjustExternallyAllocatedMemory(int change_in_bytes) {
int CefV8ValueImpl::GetArrayLength() {
CEF_V8_REQUIRE_OBJECT_RETURN(0);
v8::HandleScope handle_scope(handle_->isolate());
v8::Isolate* isolate = handle_->isolate();
v8::HandleScope handle_scope(isolate);
v8::Local<v8::Context> context = isolate->GetCurrentContext();
if (context.IsEmpty()) {
NOTREACHED() << "not currently in a V8 context";
return 0;
}
v8::Local<v8::Value> value = handle_->GetNewV8Handle(false);
if (!value->IsArray()) {
NOTREACHED() << "V8 value is not an array";
return 0;
}
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Object> obj = value->ToObject(context).ToLocalChecked();
v8::Local<v8::Array> arr = v8::Local<v8::Array>::Cast(obj);
return arr->Length();
}
@@ -2189,18 +2214,20 @@ CefV8ValueImpl::GetArrayBufferReleaseCallback() {
v8::Isolate* isolate = handle_->isolate();
v8::HandleScope handle_scope(isolate);
v8::Local<v8::Context> context = isolate->GetCurrentContext();
if (context.IsEmpty()) {
NOTREACHED() << "not currently in a V8 context";
return NULL;
}
v8::Local<v8::Value> value = handle_->GetNewV8Handle(false);
if (!value->IsArrayBuffer()) {
NOTREACHED() << "V8 value is not an array buffer";
return NULL;
}
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Object> obj = value->ToObject(context).ToLocalChecked();
V8TrackArrayBuffer* tracker = V8TrackArrayBuffer::Unwrap(context, obj);
if (tracker)
@@ -2214,6 +2241,7 @@ bool CefV8ValueImpl::NeuterArrayBuffer() {
v8::Isolate* isolate = handle_->isolate();
v8::HandleScope handle_scope(isolate);
v8::Local<v8::Context> context = isolate->GetCurrentContext();
if (context.IsEmpty()) {
NOTREACHED() << "not currently in a V8 context";
@@ -2225,7 +2253,7 @@ bool CefV8ValueImpl::NeuterArrayBuffer() {
NOTREACHED() << "V8 value is not an array buffer";
return false;
}
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Object> obj = value->ToObject(context).ToLocalChecked();
v8::Local<v8::ArrayBuffer> arr = v8::Local<v8::ArrayBuffer>::Cast(obj);
if (!arr->IsNeuterable()) {
return false;
@@ -2241,16 +2269,25 @@ CefString CefV8ValueImpl::GetFunctionName() {
CefString rv;
CEF_V8_REQUIRE_OBJECT_RETURN(rv);
v8::HandleScope handle_scope(handle_->isolate());
v8::Isolate* isolate = handle_->isolate();
v8::HandleScope handle_scope(isolate);
v8::Local<v8::Context> context = isolate->GetCurrentContext();
if (context.IsEmpty()) {
NOTREACHED() << "not currently in a V8 context";
return rv;
}
v8::Local<v8::Value> value = handle_->GetNewV8Handle(false);
if (!value->IsFunction()) {
NOTREACHED() << "V8 value is not a function";
return rv;
}
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Object> obj = value->ToObject(context).ToLocalChecked();
v8::Local<v8::Function> func = v8::Local<v8::Function>::Cast(obj);
GetCefString(v8::Handle<v8::String>::Cast(func->GetName()), rv);
GetCefString(handle_->isolate(),
v8::Handle<v8::String>::Cast(func->GetName()), rv);
return rv;
}
@@ -2272,7 +2309,7 @@ CefRefPtr<CefV8Handler> CefV8ValueImpl::GetFunctionHandler() {
return NULL;
}
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Object> obj = value->ToObject(context).ToLocalChecked();
V8TrackObject* tracker = V8TrackObject::Unwrap(context, obj);
if (tracker)
return tracker->GetHandler();
@@ -2332,7 +2369,7 @@ CefRefPtr<CefV8Value> CefV8ValueImpl::ExecuteFunctionWithContext(
v8::Context::Scope context_scope(context_local);
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Object> obj = value->ToObject(context_local).ToLocalChecked();
v8::Local<v8::Function> func = v8::Local<v8::Function>::Cast(obj);
v8::Local<v8::Object> recv;
@@ -2413,7 +2450,7 @@ CefV8StackTraceImpl::CefV8StackTraceImpl(v8::Isolate* isolate,
frames_.reserve(frame_count);
for (int i = 0; i < frame_count; ++i)
frames_.push_back(
new CefV8StackFrameImpl(isolate, handle->GetFrame(i)));
new CefV8StackFrameImpl(isolate, handle->GetFrame(isolate, i)));
}
}
}
@@ -2441,9 +2478,10 @@ CefV8StackFrameImpl::CefV8StackFrameImpl(v8::Isolate* isolate,
: line_number_(0), column_(0), is_eval_(false), is_constructor_(false) {
if (handle.IsEmpty())
return;
GetCefString(handle->GetScriptName(), script_name_);
GetCefString(handle->GetScriptNameOrSourceURL(), script_name_or_source_url_);
GetCefString(handle->GetFunctionName(), function_name_);
GetCefString(isolate, handle->GetScriptName(), script_name_);
GetCefString(isolate, handle->GetScriptNameOrSourceURL(),
script_name_or_source_url_);
GetCefString(isolate, handle->GetFunctionName(), function_name_);
line_number_ = handle->GetLineNumber();
column_ = handle->GetColumn();
is_eval_ = handle->IsEval();

View File

@@ -27,11 +27,13 @@ set(CEF_TARGET libcef_dll_wrapper)
'includes_capi',
'autogen_capi_includes',
'includes_wrapper',
'includes_wrapper_mac:MACOSX',
'includes_win:WINDOWS',
'includes_mac:MACOSX',
'includes_linux:LINUX',
'libcef_dll_wrapper_sources_base',
'libcef_dll_wrapper_sources_common',
'libcef_dll_wrapper_sources_mac:MACOSX',
'autogen_client_side',
],
}}

View File

@@ -13,6 +13,11 @@ bool RefCountedThreadSafeBase::HasOneRef() const {
&const_cast<RefCountedThreadSafeBase*>(this)->ref_count_);
}
bool RefCountedThreadSafeBase::HasAtLeastOneRef() const {
return !AtomicRefCountIsZero(
&const_cast<RefCountedThreadSafeBase*>(this)->ref_count_);
}
RefCountedThreadSafeBase::RefCountedThreadSafeBase() : ref_count_(0) {
#if DCHECK_IS_ON()
in_dtor_ = false;

View File

@@ -89,6 +89,7 @@ class CefCppToCRefCounted : public CefBaseRefCounted {
return false;
}
bool HasOneRef() const { return UnderlyingHasOneRef(); }
bool HasAtLeastOneRef() const { return UnderlyingHasAtLeastOneRef(); }
#if DCHECK_IS_ON()
// Simple tracking of allocated objects.
@@ -107,6 +108,7 @@ class CefCppToCRefCounted : public CefBaseRefCounted {
base->add_ref = struct_add_ref;
base->release = struct_release;
base->has_one_ref = struct_has_one_ref;
base->has_at_least_one_ref = struct_has_at_least_one_ref;
#if DCHECK_IS_ON()
base::AtomicRefCountInc(&DebugObjCt);
@@ -147,6 +149,9 @@ class CefCppToCRefCounted : public CefBaseRefCounted {
bool UnderlyingHasOneRef() const {
return wrapper_struct_.object_->HasOneRef();
}
bool UnderlyingHasAtLeastOneRef() const {
return wrapper_struct_.object_->HasAtLeastOneRef();
}
static void CEF_CALLBACK struct_add_ref(cef_base_ref_counted_t* base) {
DCHECK(base);
@@ -187,6 +192,20 @@ class CefCppToCRefCounted : public CefBaseRefCounted {
return wrapperStruct->wrapper_->HasOneRef();
}
static int CEF_CALLBACK
struct_has_at_least_one_ref(cef_base_ref_counted_t* base) {
DCHECK(base);
if (!base)
return 0;
WrapperStruct* wrapperStruct =
GetWrapperStruct(reinterpret_cast<StructName*>(base));
// Verify that the wrapper offset was calculated correctly.
DCHECK_EQ(kWrapperType, wrapperStruct->type_);
return wrapperStruct->wrapper_->HasAtLeastOneRef();
}
WrapperStruct wrapper_struct_;
CefRefCount ref_count_;

View File

@@ -35,6 +35,7 @@ class CefCToCppRefCounted : public BaseName {
}
bool Release() const;
bool HasOneRef() const { return UnderlyingHasOneRef(); }
bool HasAtLeastOneRef() const { return UnderlyingHasAtLeastOneRef(); }
#if DCHECK_IS_ON()
// Simple tracking of allocated objects.
@@ -99,6 +100,15 @@ class CefCToCppRefCounted : public BaseName {
return base->has_one_ref(base) ? true : false;
}
NO_SANITIZE("cfi-icall")
bool UnderlyingHasAtLeastOneRef() const {
cef_base_ref_counted_t* base =
reinterpret_cast<cef_base_ref_counted_t*>(GetStruct());
if (!base->has_one_ref)
return false;
return base->has_at_least_one_ref(base) ? true : false;
}
CefRefCount ref_count_;
static CefWrapperType kWrapperType;

View File

@@ -0,0 +1,65 @@
// Copyright 2018 The Chromium Embedded Framework Authors. Portions Copyright
// 2018 the Chromium Authors. All rights reserved. Use of this source code is
// governed by a BSD-style license that can be found in the LICENSE file.
#include <mach-o/dyld.h>
#include <stdio.h>
#include <memory>
#include "sandbox/mac/seatbelt_exec.h"
#include "include/cef_sandbox_mac.h"
void* cef_sandbox_initialize(int argc, char** argv) {
uint32_t exec_path_size = 0;
int rv = _NSGetExecutablePath(NULL, &exec_path_size);
if (rv != -1) {
return NULL;
}
std::unique_ptr<char[]> exec_path(new char[exec_path_size]);
rv = _NSGetExecutablePath(exec_path.get(), &exec_path_size);
if (rv != 0) {
return NULL;
}
sandbox::SeatbeltExecServer::CreateFromArgumentsResult seatbelt =
sandbox::SeatbeltExecServer::CreateFromArguments(exec_path.get(), argc,
argv);
if (seatbelt.sandbox_required) {
if (!seatbelt.server) {
fprintf(stderr, "Failed to create the seatbelt sandbox server.\n");
return NULL;
}
if (!seatbelt.server->InitializeSandbox()) {
fprintf(stderr, "Failed to initialize the sandbox.\n");
return NULL;
}
}
auto* copy = new sandbox::SeatbeltExecServer::CreateFromArgumentsResult();
copy->sandbox_required = seatbelt.sandbox_required;
copy->server.swap(seatbelt.server);
return copy;
}
void cef_sandbox_destroy(void* sandbox_context) {
delete static_cast<sandbox::SeatbeltExecServer::CreateFromArgumentsResult*>(
sandbox_context);
}
CefScopedSandboxContext::CefScopedSandboxContext() : sandbox_context_(NULL) {}
CefScopedSandboxContext::~CefScopedSandboxContext() {
if (sandbox_context_) {
cef_sandbox_destroy(sandbox_context_);
}
}
bool CefScopedSandboxContext::Initialize(int argc, char** argv) {
if (sandbox_context_)
return false;
sandbox_context_ = cef_sandbox_initialize(argc, argv);
return !!sandbox_context_;
}

View File

@@ -0,0 +1,77 @@
// Copyright (c) 2018 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.
#include "include/wrapper/cef_library_loader.h"
#include <libgen.h>
#include <mach-o/dyld.h>
#include <stdio.h>
#include <memory>
#include <sstream>
namespace {
const char kFrameworkPath[] =
"Chromium Embedded Framework.framework/Chromium Embedded Framework";
const char kPathFromHelperExe[] = "../../..";
const char kPathFromMainExe[] = "../Frameworks";
std::string GetFrameworkPath(bool helper) {
uint32_t exec_path_size = 0;
int rv = _NSGetExecutablePath(NULL, &exec_path_size);
if (rv != -1) {
return std::string();
}
std::unique_ptr<char[]> exec_path(new char[exec_path_size]);
rv = _NSGetExecutablePath(exec_path.get(), &exec_path_size);
if (rv != 0) {
return std::string();
}
// Get the directory path of the executable.
const char* parent_dir = dirname(exec_path.get());
if (!parent_dir) {
return std::string();
}
// Append the relative path to the framework.
std::stringstream ss;
ss << parent_dir << "/" << (helper ? kPathFromHelperExe : kPathFromMainExe)
<< "/" << kFrameworkPath;
return ss.str();
}
} // namespace
CefScopedLibraryLoader::CefScopedLibraryLoader() : loaded_(false) {}
bool CefScopedLibraryLoader::Load(bool helper) {
if (loaded_) {
return false;
}
const std::string& framework_path = GetFrameworkPath(helper);
if (framework_path.empty()) {
fprintf(stderr, "App does not have the expected bundle structure.\n");
return false;
}
// Load the CEF framework library.
if (!cef_load_library(framework_path.c_str())) {
fprintf(stderr, "Failed to load the CEF framework.\n");
return false;
}
loaded_ = true;
return true;
}
CefScopedLibraryLoader::~CefScopedLibraryLoader() {
if (loaded_) {
// Unload the CEF framework library.
cef_unload_library();
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -41,11 +41,6 @@ patches = [
# https://bitbucket.org/chromiumembedded/cef/issues/1617
'name': 'component_build_1617',
},
{
# Support loading of password protected zip archives.
# https://bitbucket.org/chromiumembedded/cef/issues/496
'name': 'zlib',
},
{
# Revert change on Windows that removes MessageLoop::os_modal_loop().
# https://codereview.chromium.org/1992243003
@@ -330,13 +325,13 @@ patches = [
# Linux: Fix 32-bit build fails with ld.gold: internal error in
# get_section_contents, at icf.cc:467
# https://bitbucket.org/chromiumembedded/cef/issues/2256
#
# Linux: Fix GTK2 compile errors.
#
# Linux: Fix cfi-icall failure in atk_util_auralinux_gtk2.cc.
# https://bugs.chromium.org/p/chromium/issues/detail?id=863090
'name': 'linux_build',
},
{
# Linux: Remove GTK build dependency.
# https://bitbucket.org/chromiumembedded/cef/issues/2014
'name': 'linux_gtk_2014',
},
{
# Changes necessary to support for chrome extensions:
# (a) Add a new ExtensionHost constructor that allows CEF to create the
@@ -387,16 +382,9 @@ patches = [
'name': 'resource_bundle_2512',
},
{
# Fix tools/clang/scripts/update.py failure with custom VS toolchain on
# Windows. This needs to be done in DEPS because it executes during the
# `gclient runhooks` step.
# https://bugs.chromium.org/p/chromium/issues/detail?id=863130
'name': 'DEPS',
},
{
# RTL document in <iframe> should have left-hand scrollbar.
# https://bugs.chromium.org/p/chromium/issues/detail?id=250514#c34
'name': 'webkit_rtl_scrollbars_250514',
# Fix VR target dependencies.
# https://bugs.chromium.org/p/chromium/issues/detail?id=873170
'name': 'vr_build_873170',
},
{
# Fix redraw of OSR PDF viewer.

View File

@@ -1,16 +0,0 @@
diff --git tools/clang/scripts/update.py tools/clang/scripts/update.py
index f69d2eb8915b..04d97b47dbe9 100755
--- tools/clang/scripts/update.py
+++ tools/clang/scripts/update.py
@@ -392,7 +392,10 @@ def GetWinSDKDir():
if bool(int(os.environ.get('DEPOT_TOOLS_WIN_TOOLCHAIN', '1'))):
dia_path = os.path.join(win_sdk_dir, '..', 'DIA SDK', 'bin', 'amd64')
else:
- vs_path = vs_toolchain.DetectVisualStudioPath()
+ if 'GYP_MSVS_OVERRIDE_PATH' not in os.environ:
+ vs_path = vs_toolchain.DetectVisualStudioPath()
+ else:
+ vs_path = os.environ['GYP_MSVS_OVERRIDE_PATH']
dia_path = os.path.join(vs_path, 'DIA SDK', 'bin', 'amd64')
dia_dll = os.path.join(dia_path, DIA_DLL[msvs_version])

View File

@@ -1,8 +1,8 @@
diff --git content/browser/renderer_host/render_widget_host_view_child_frame.cc content/browser/renderer_host/render_widget_host_view_child_frame.cc
index 08e68296f2a6..0bcc696cf0cc 100644
index ef607a087cdf..1320a4d274f6 100644
--- content/browser/renderer_host/render_widget_host_view_child_frame.cc
+++ content/browser/renderer_host/render_widget_host_view_child_frame.cc
@@ -623,6 +623,7 @@ void RenderWidgetHostViewChildFrame::SubmitCompositorFrame(
@@ -662,6 +662,7 @@ void RenderWidgetHostViewChildFrame::SubmitCompositorFrame(
"RenderWidgetHostViewChildFrame::OnSwapCompositorFrame");
support_->SubmitCompositorFrame(local_surface_id, std::move(frame),
std::move(hit_test_region_list));
@@ -10,7 +10,7 @@ index 08e68296f2a6..0bcc696cf0cc 100644
}
void RenderWidgetHostViewChildFrame::OnDidNotProduceFrame(
@@ -914,7 +915,6 @@ void RenderWidgetHostViewChildFrame::OnFirstSurfaceActivation(
@@ -945,7 +946,6 @@ void RenderWidgetHostViewChildFrame::OnFirstSurfaceActivation(
last_activated_surface_info_ = surface_info;
has_frame_ = true;
FirstSurfaceActivation(surface_info);

View File

@@ -1,8 +1,8 @@
diff --git content/browser/renderer_host/browser_compositor_view_mac.h content/browser/renderer_host/browser_compositor_view_mac.h
index 46be85eea4b5..06177efbb25d 100644
index 7dc490ea5607..f67c457385ab 100644
--- content/browser/renderer_host/browser_compositor_view_mac.h
+++ content/browser/renderer_host/browser_compositor_view_mac.h
@@ -58,6 +58,8 @@ class CONTENT_EXPORT BrowserCompositorMac : public DelegatedFrameHostClient,
@@ -59,6 +59,8 @@ class CONTENT_EXPORT BrowserCompositorMac : public DelegatedFrameHostClient,
// These will not return nullptr until Destroy is called.
DelegatedFrameHost* GetDelegatedFrameHost();
@@ -12,10 +12,10 @@ index 46be85eea4b5..06177efbb25d 100644
// Ensure that the currect compositor frame be cleared (even if it is
// potentially visible).
diff --git content/browser/renderer_host/browser_compositor_view_mac.mm content/browser/renderer_host/browser_compositor_view_mac.mm
index 92afcc779106..222e7a528522 100644
index fb23caccdd1d..f29b586631aa 100644
--- content/browser/renderer_host/browser_compositor_view_mac.mm
+++ content/browser/renderer_host/browser_compositor_view_mac.mm
@@ -86,6 +86,12 @@ DelegatedFrameHost* BrowserCompositorMac::GetDelegatedFrameHost() {
@@ -84,6 +84,12 @@ DelegatedFrameHost* BrowserCompositorMac::GetDelegatedFrameHost() {
return delegated_frame_host_.get();
}

View File

@@ -1,8 +1,8 @@
diff --git content/browser/browser_plugin/browser_plugin_guest.cc content/browser/browser_plugin/browser_plugin_guest.cc
index f56ce93c3d5b..716cf8846378 100644
index e5f885ab4bc0..4573329ad26a 100644
--- content/browser/browser_plugin/browser_plugin_guest.cc
+++ content/browser/browser_plugin/browser_plugin_guest.cc
@@ -312,8 +312,11 @@ void BrowserPluginGuest::InitInternal(
@@ -313,8 +313,11 @@ void BrowserPluginGuest::InitInternal(
static_cast<WebContentsViewGuest*>(GetWebContents()->GetView());
}
@@ -15,7 +15,7 @@ index f56ce93c3d5b..716cf8846378 100644
// Once a BrowserPluginGuest has an embedder WebContents, it's considered to
// be attached.
@@ -787,10 +790,19 @@ void BrowserPluginGuest::OnWillAttachComplete(
@@ -794,10 +797,19 @@ void BrowserPluginGuest::OnWillAttachComplete(
static_cast<WebContentsViewGuest*>(GetWebContents()->GetView());
if (!web_contents()->GetRenderViewHost()->GetWidget()->GetView()) {
web_contents_view->CreateViewForWidget(
@@ -37,10 +37,10 @@ index f56ce93c3d5b..716cf8846378 100644
attached_ = true;
diff --git content/browser/frame_host/interstitial_page_impl.cc content/browser/frame_host/interstitial_page_impl.cc
index f839f62061bb..2150ceb6c780 100644
index 6a26f13d2466..af4a8f378d5e 100644
--- content/browser/frame_host/interstitial_page_impl.cc
+++ content/browser/frame_host/interstitial_page_impl.cc
@@ -619,7 +619,7 @@ WebContentsView* InterstitialPageImpl::CreateWebContentsView() {
@@ -634,7 +634,7 @@ WebContentsView* InterstitialPageImpl::CreateWebContentsView() {
WebContentsView* wcv =
static_cast<WebContentsImpl*>(web_contents())->GetView();
RenderWidgetHostViewBase* view =
@@ -79,10 +79,10 @@ index 41e44d5d658a..047c935d8ca2 100644
// Creates a new View that holds a popup and receives messages for it.
virtual RenderWidgetHostViewBase* CreateViewForPopupWidget(
diff --git content/browser/web_contents/web_contents_view_aura.cc content/browser/web_contents/web_contents_view_aura.cc
index 713b17948ef7..8ec3e045783f 100644
index e471459007af..2edd94c79b4d 100644
--- content/browser/web_contents/web_contents_view_aura.cc
+++ content/browser/web_contents/web_contents_view_aura.cc
@@ -781,7 +781,8 @@ void WebContentsViewAura::CreateView(const gfx::Size& initial_size,
@@ -811,7 +811,8 @@ void WebContentsViewAura::CreateView(const gfx::Size& initial_size,
}
RenderWidgetHostViewBase* WebContentsViewAura::CreateViewForWidget(
@@ -92,7 +92,7 @@ index 713b17948ef7..8ec3e045783f 100644
if (render_widget_host->GetView()) {
// During testing, the view will already be set up in most cases to the
// test view, so we don't want to clobber it with a real one. To verify that
@@ -793,6 +794,7 @@ RenderWidgetHostViewBase* WebContentsViewAura::CreateViewForWidget(
@@ -823,6 +824,7 @@ RenderWidgetHostViewBase* WebContentsViewAura::CreateViewForWidget(
render_widget_host->GetView());
}
@@ -101,10 +101,10 @@ index 713b17948ef7..8ec3e045783f 100644
g_create_render_widget_host_view
? g_create_render_widget_host_view(render_widget_host,
diff --git content/browser/web_contents/web_contents_view_aura.h content/browser/web_contents/web_contents_view_aura.h
index 058f3e00d6f5..25a3ad4ec991 100644
index 212da86e2539..84336af98e28 100644
--- content/browser/web_contents/web_contents_view_aura.h
+++ content/browser/web_contents/web_contents_view_aura.h
@@ -114,7 +114,7 @@ class CONTENT_EXPORT WebContentsViewAura
@@ -121,7 +121,7 @@ class CONTENT_EXPORT WebContentsViewAura
gfx::NativeView context) override;
RenderWidgetHostViewBase* CreateViewForWidget(
RenderWidgetHost* render_widget_host,
@@ -140,7 +140,7 @@ index e5485f5609c3..589bbb400684 100644
RenderWidgetHost* render_widget_host) override;
void SetPageTitle(const base::string16& title) override;
diff --git content/browser/web_contents/web_contents_view_guest.cc content/browser/web_contents/web_contents_view_guest.cc
index 44c68ed25b66..62026810703a 100644
index 12f6817499ef..b38e086ee04c 100644
--- content/browser/web_contents/web_contents_view_guest.cc
+++ content/browser/web_contents/web_contents_view_guest.cc
@@ -67,6 +67,8 @@ gfx::NativeWindow WebContentsViewGuest::GetTopLevelNativeWindow() const {
@@ -159,7 +159,7 @@ index 44c68ed25b66..62026810703a 100644
+ if (!platform_view_->GetNativeView())
+ return;
#if defined(USE_AURA)
if (features::IsAshInBrowserProcess()) {
if (!features::IsUsingWindowService()) {
old_parent_view->GetNativeView()->RemoveChild(
@@ -132,7 +136,8 @@ void WebContentsViewGuest::CreateView(const gfx::Size& initial_size,
}
@@ -243,7 +243,7 @@ index 94848b568363..4dea19adb512 100644
g_create_render_widget_host_view
? g_create_render_widget_host_view(render_widget_host,
diff --git content/public/browser/browser_plugin_guest_delegate.h content/public/browser/browser_plugin_guest_delegate.h
index d05dd5421458..fa13775f0512 100644
index bf2226b53dd7..782a320ab788 100644
--- content/public/browser/browser_plugin_guest_delegate.h
+++ content/public/browser/browser_plugin_guest_delegate.h
@@ -19,6 +19,7 @@ namespace content {
@@ -266,7 +266,7 @@ index d05dd5421458..fa13775f0512 100644
// a BrowserPlugin even when we are using cross process frames for guests. It
// should be removed after resolving https://crbug.com/642826).
diff --git extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc
index d59bfbac79cd..e5e60edf5174 100644
index 121f7d573d37..27c6108167ad 100644
--- extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc
+++ extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc
@@ -200,6 +200,8 @@ void MimeHandlerViewGuest::CreateWebContents(

View File

@@ -1,5 +1,5 @@
diff --git chrome/browser/BUILD.gn chrome/browser/BUILD.gn
index b5d398fd0882..11552886dc36 100644
index f37afc63467b..eb99c80f0516 100644
--- chrome/browser/BUILD.gn
+++ chrome/browser/BUILD.gn
@@ -8,6 +8,7 @@ import("//build/config/features.gni")
@@ -10,7 +10,7 @@ index b5d398fd0882..11552886dc36 100644
import("//chrome/common/features.gni")
import("//components/feature_engagement/features.gni")
import("//components/feed/features.gni")
@@ -1659,6 +1660,7 @@ jumbo_split_static_library("browser") {
@@ -1691,6 +1692,7 @@ jumbo_split_static_library("browser") {
"//base:i18n",
"//base/allocator:buildflags",
"//cc",
@@ -18,7 +18,7 @@ index b5d398fd0882..11552886dc36 100644
"//chrome:extra_resources",
"//chrome:resources",
"//chrome:strings",
@@ -1931,6 +1933,10 @@ jumbo_split_static_library("browser") {
@@ -1965,6 +1967,10 @@ jumbo_split_static_library("browser") {
]
}
@@ -29,3 +29,12 @@ index b5d398fd0882..11552886dc36 100644
if (is_android) {
sources += [
"after_startup_task_utils_android.cc",
@@ -3508,7 +3514,7 @@ jumbo_split_static_library("browser") {
]
}
- if (use_aura && !use_ozone && is_desktop_linux) {
+ if (use_aura && !use_ozone && is_desktop_linux && use_gtk) {
deps += [ "//chrome/browser/ui/libgtkui" ]
}

View File

@@ -1,5 +1,5 @@
diff --git chrome/browser/content_settings/host_content_settings_map_factory.cc chrome/browser/content_settings/host_content_settings_map_factory.cc
index eae14e50a894..62da11525b4f 100644
index 9596665e9320..c38584d4a222 100644
--- chrome/browser/content_settings/host_content_settings_map_factory.cc
+++ chrome/browser/content_settings/host_content_settings_map_factory.cc
@@ -7,6 +7,7 @@
@@ -36,8 +36,8 @@ index eae14e50a894..62da11525b4f 100644
#endif
}
@@ -87,10 +98,16 @@ scoped_refptr<RefcountedKeyedService>
/*store_last_modified=*/true));
@@ -88,10 +99,16 @@ scoped_refptr<RefcountedKeyedService>
base::FeatureList::IsEnabled(features::kPermissionDelegation)));
#if BUILDFLAG(ENABLE_EXTENSIONS)
+#if BUILDFLAG(ENABLE_CEF)

View File

@@ -1,8 +1,8 @@
diff --git chrome/browser/profiles/incognito_helpers.cc chrome/browser/profiles/incognito_helpers.cc
index ce4f72b98a05..39f7c3140c6e 100644
index a319237928b8..82945e3d625d 100644
--- chrome/browser/profiles/incognito_helpers.cc
+++ chrome/browser/profiles/incognito_helpers.cc
@@ -8,18 +8,41 @@
@@ -8,20 +8,41 @@
namespace chrome {
@@ -23,14 +23,15 @@ index ce4f72b98a05..39f7c3140c6e 100644
+ return new_context;
+ }
+
return static_cast<Profile*>(context)->GetOriginalProfile();
return Profile::FromBrowserContext(context)->GetOriginalProfile();
}
const content::BrowserContext* GetBrowserContextRedirectedInIncognito(
const content::BrowserContext* context) {
- return static_cast<const Profile*>(context)->GetOriginalProfile();
- const Profile* profile = Profile::FromBrowserContext(
+ return GetBrowserContextRedirectedInIncognito(
+ const_cast<content::BrowserContext*>(context));
const_cast<content::BrowserContext*>(context));
- return profile->GetOriginalProfile();
}
content::BrowserContext* GetBrowserContextOwnInstanceInIncognito(
@@ -70,10 +71,10 @@ index e8e76ce5b954..1dd338dd0142 100644
content::BrowserContext* GetBrowserContextRedirectedInIncognito(
content::BrowserContext* context);
diff --git chrome/browser/profiles/profile_manager.cc chrome/browser/profiles/profile_manager.cc
index 4aa9dd926ccb..35c940b08f7d 100644
index 351207fb8b55..97962af699b3 100644
--- chrome/browser/profiles/profile_manager.cc
+++ chrome/browser/profiles/profile_manager.cc
@@ -383,7 +383,7 @@ ProfileManager::ProfileManager(const base::FilePath& user_data_dir)
@@ -386,7 +386,7 @@ ProfileManager::ProfileManager(const base::FilePath& user_data_dir)
chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED,
content::NotificationService::AllSources());
@@ -83,7 +84,7 @@ index 4aa9dd926ccb..35c940b08f7d 100644
this));
}
diff --git chrome/browser/profiles/profile_manager.h chrome/browser/profiles/profile_manager.h
index fc027d61027a..61484ca7e3c5 100644
index 8a62433e9107..5ae35bc2d16a 100644
--- chrome/browser/profiles/profile_manager.h
+++ chrome/browser/profiles/profile_manager.h
@@ -93,7 +93,7 @@ class ProfileManager : public content::NotificationObserver,
@@ -95,7 +96,7 @@ index fc027d61027a..61484ca7e3c5 100644
// Returns total number of profiles available on this machine.
size_t GetNumberOfProfiles();
@@ -124,7 +124,7 @@ class ProfileManager : public content::NotificationObserver,
@@ -123,7 +123,7 @@ class ProfileManager : public content::NotificationObserver,
// Returns true if the profile pointer is known to point to an existing
// profile.
@@ -104,7 +105,7 @@ index fc027d61027a..61484ca7e3c5 100644
// Returns the directory where the first created profile is stored,
// relative to the user data directory currently in use.
@@ -133,7 +133,7 @@ class ProfileManager : public content::NotificationObserver,
@@ -132,7 +132,7 @@ class ProfileManager : public content::NotificationObserver,
// Get the Profile last used (the Profile to which owns the most recently
// focused window) with this Chrome build. If no signed profile has been
// stored in Local State, hand back the Default profile.

View File

@@ -1,5 +1,5 @@
diff --git chrome/browser/plugins/plugin_info_host_impl.cc chrome/browser/plugins/plugin_info_host_impl.cc
index 484e07af5a98..d9807243e2b5 100644
index 52d374d1fe4e..c113ae8634e0 100644
--- chrome/browser/plugins/plugin_info_host_impl.cc
+++ chrome/browser/plugins/plugin_info_host_impl.cc
@@ -16,6 +16,7 @@
@@ -86,7 +86,7 @@ index 484e07af5a98..d9807243e2b5 100644
if (security_status == PluginMetadata::SECURITY_STATUS_FULLY_TRUSTED) {
*status = chrome::mojom::PluginStatus::kAllowed;
return;
@@ -380,16 +404,36 @@ bool PluginInfoHostImpl::Context::FindEnabledPlugin(
@@ -379,16 +403,36 @@ bool PluginInfoHostImpl::Context::FindEnabledPlugin(
return false;
}
@@ -125,10 +125,10 @@ index 484e07af5a98..d9807243e2b5 100644
// If we broke out of the loop, we have found an enabled plugin.
bool enabled = i < matching_plugins.size();
diff --git chrome/renderer/chrome_content_renderer_client.cc chrome/renderer/chrome_content_renderer_client.cc
index 2951ee282f4c..f692717d5712 100644
index d3f9d5ebe197..f3f1ef7750d5 100644
--- chrome/renderer/chrome_content_renderer_client.cc
+++ chrome/renderer/chrome_content_renderer_client.cc
@@ -762,6 +762,7 @@ WebPlugin* ChromeContentRendererClient::CreatePlugin(
@@ -796,6 +796,7 @@ WebPlugin* ChromeContentRendererClient::CreatePlugin(
if ((status == chrome::mojom::PluginStatus::kUnauthorized ||
status == chrome::mojom::PluginStatus::kBlocked) &&
@@ -136,7 +136,7 @@ index 2951ee282f4c..f692717d5712 100644
observer->IsPluginTemporarilyAllowed(identifier)) {
status = chrome::mojom::PluginStatus::kAllowed;
}
@@ -949,7 +950,8 @@ WebPlugin* ChromeContentRendererClient::CreatePlugin(
@@ -983,7 +984,8 @@ WebPlugin* ChromeContentRendererClient::CreatePlugin(
render_frame->GetRemoteAssociatedInterfaces()->GetInterface(
&plugin_auth_host);
plugin_auth_host->BlockedUnauthorizedPlugin(group_name, identifier);
@@ -146,7 +146,7 @@ index 2951ee282f4c..f692717d5712 100644
break;
}
case chrome::mojom::PluginStatus::kBlocked: {
@@ -958,7 +960,8 @@ WebPlugin* ChromeContentRendererClient::CreatePlugin(
@@ -992,7 +994,8 @@ WebPlugin* ChromeContentRendererClient::CreatePlugin(
l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, group_name));
placeholder->AllowLoading();
RenderThread::Get()->RecordAction(UserMetricsAction("Plugin_Blocked"));
@@ -156,7 +156,7 @@ index 2951ee282f4c..f692717d5712 100644
break;
}
case chrome::mojom::PluginStatus::kBlockedByPolicy: {
@@ -968,7 +971,8 @@ WebPlugin* ChromeContentRendererClient::CreatePlugin(
@@ -1002,7 +1005,8 @@ WebPlugin* ChromeContentRendererClient::CreatePlugin(
group_name));
RenderThread::Get()->RecordAction(
UserMetricsAction("Plugin_BlockedByPolicy"));
@@ -166,7 +166,7 @@ index 2951ee282f4c..f692717d5712 100644
break;
}
case chrome::mojom::PluginStatus::kBlockedNoLoading: {
@@ -976,7 +980,8 @@ WebPlugin* ChromeContentRendererClient::CreatePlugin(
@@ -1010,7 +1014,8 @@ WebPlugin* ChromeContentRendererClient::CreatePlugin(
IDR_BLOCKED_PLUGIN_HTML,
l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED_NO_LOADING,
group_name));

View File

@@ -1,16 +1,16 @@
diff --git chrome/renderer/BUILD.gn chrome/renderer/BUILD.gn
index 0a1e5754bb7a..f21aa63a4b86 100644
index bf218a3f098a..520119b1485e 100644
--- chrome/renderer/BUILD.gn
+++ chrome/renderer/BUILD.gn
@@ -3,6 +3,7 @@
# found in the LICENSE file.
@@ -4,6 +4,7 @@
import("//build/config/features.gni")
import("//build/config/jumbo.gni")
+import("//cef/libcef/features/features.gni")
import("//chrome/common/features.gni")
import("//components/nacl/features.gni")
import("//components/offline_pages/buildflags/features.gni")
@@ -115,6 +116,7 @@ static_library("renderer") {
@@ -119,6 +120,7 @@ jumbo_static_library("renderer") {
defines = []
deps = [
@@ -18,7 +18,7 @@ index 0a1e5754bb7a..f21aa63a4b86 100644
"//chrome:resources",
"//chrome:strings",
"//chrome/common",
@@ -178,6 +180,10 @@ static_library("renderer") {
@@ -182,6 +184,10 @@ jumbo_static_library("renderer") {
configs += [ "//build/config/compiler:wexit_time_destructors" ]

View File

@@ -1,8 +1,8 @@
diff --git chrome/common/chrome_content_client.cc chrome/common/chrome_content_client.cc
index f8a16d124dec..40e3c9439ed8 100644
index 47eea6d5c75b..40de62691f31 100644
--- chrome/common/chrome_content_client.cc
+++ chrome/common/chrome_content_client.cc
@@ -94,7 +94,8 @@
@@ -97,7 +97,8 @@
#if BUILDFLAG(ENABLE_LIBRARY_CDMS)
#include "media/cdm/cdm_paths.h" // nogncheck

View File

@@ -34,7 +34,7 @@ index 305095fc420e..f5ca4eda4a66 100644
MouseWheelPhaseHandler(RenderWidgetHostViewBase* const host_view);
~MouseWheelPhaseHandler() {}
diff --git third_party/blink/renderer/controller/BUILD.gn third_party/blink/renderer/controller/BUILD.gn
index 20d1994e156e..45102558569f 100644
index c9f9a18f1188..ecba73d54a30 100644
--- third_party/blink/renderer/controller/BUILD.gn
+++ third_party/blink/renderer/controller/BUILD.gn
@@ -25,6 +25,7 @@ component("controller") {

View File

@@ -1,8 +1,8 @@
diff --git content/browser/compositor/gpu_process_transport_factory.cc content/browser/compositor/gpu_process_transport_factory.cc
index 511d805187b1..5fb01fee0378 100644
index 642fff3b4367..45faeed249c0 100644
--- content/browser/compositor/gpu_process_transport_factory.cc
+++ content/browser/compositor/gpu_process_transport_factory.cc
@@ -494,10 +494,20 @@ void GpuProcessTransportFactory::EstablishedGpuChannel(
@@ -493,10 +493,20 @@ void GpuProcessTransportFactory::EstablishedGpuChannel(
// surfaces as they are not following the correct mode.
DisableGpuCompositing(compositor.get());
}
@@ -26,10 +26,10 @@ index 511d805187b1..5fb01fee0378 100644
} else {
DCHECK(context_provider);
diff --git ui/compositor/compositor.h ui/compositor/compositor.h
index e0ec33400b17..34fb1c987189 100644
index a1b6716fc79f..6ec79ea0fab4 100644
--- ui/compositor/compositor.h
+++ ui/compositor/compositor.h
@@ -24,6 +24,7 @@
@@ -25,6 +25,7 @@
#include "components/viz/common/surfaces/frame_sink_id.h"
#include "components/viz/common/surfaces/local_surface_id.h"
#include "components/viz/host/host_frame_sink_client.h"
@@ -37,7 +37,7 @@ index e0ec33400b17..34fb1c987189 100644
#include "third_party/skia/include/core/SkColor.h"
#include "third_party/skia/include/core/SkMatrix44.h"
#include "ui/compositor/compositor_animation_observer.h"
@@ -199,6 +200,17 @@ class COMPOSITOR_EXPORT ContextFactory {
@@ -200,6 +201,17 @@ class COMPOSITOR_EXPORT ContextFactory {
virtual bool SyncTokensRequiredForDisplayCompositor() = 0;
};
@@ -55,7 +55,7 @@ index e0ec33400b17..34fb1c987189 100644
// Compositor object to take care of GPU painting.
// A Browser compositor object is responsible for generating the final
// displayable form of pixels comprising a single widget's contents. It draws an
@@ -239,6 +251,9 @@ class COMPOSITOR_EXPORT Compositor : public cc::LayerTreeHostClient,
@@ -240,6 +252,9 @@ class COMPOSITOR_EXPORT Compositor : public cc::LayerTreeHostClient,
// Schedules a redraw of the layer tree associated with this compositor.
void ScheduleDraw();
@@ -65,7 +65,7 @@ index e0ec33400b17..34fb1c987189 100644
// Sets the root of the layer tree drawn by this Compositor. The root layer
// must have no parent. The compositor's root layer is reset if the root layer
// is destroyed. NULL can be passed to reset the root layer, in which case the
@@ -461,6 +476,8 @@ class COMPOSITOR_EXPORT Compositor : public cc::LayerTreeHostClient,
@@ -463,6 +478,8 @@ class COMPOSITOR_EXPORT Compositor : public cc::LayerTreeHostClient,
ui::ContextFactory* context_factory_;
ui::ContextFactoryPrivate* context_factory_private_;

Some files were not shown because too many files have changed in this diff Show More