mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Compare commits
49 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
ecefb59aa8 | ||
|
b05ffc446b | ||
|
90301bdb7f | ||
|
febbb4adb7 | ||
|
5dd41fd1c1 | ||
|
5ee40133ac | ||
|
1d805e5357 | ||
|
fc9ef34529 | ||
|
f3796e2964 | ||
|
a5bf6d5484 | ||
|
f272726527 | ||
|
d2449e563c | ||
|
50b44dcfea | ||
|
cb2b46f6d7 | ||
|
1dbdf7b9cb | ||
|
71efeca335 | ||
|
cc2fc7eaff | ||
|
f527bf312c | ||
|
f24e1caec9 | ||
|
6dbe2b782f | ||
|
716121c74a | ||
|
29cbaf7e21 | ||
|
ca65ff02c4 | ||
|
b06a408e7f | ||
|
5eeb26cb76 | ||
|
70c5db44d1 | ||
|
d2de1468d8 | ||
|
497033bd8a | ||
|
7ec49fabd5 | ||
|
8c1ac9dc42 | ||
|
b3bb1273fe | ||
|
fae3bd1f16 | ||
|
a86d586b9f | ||
|
767a901be2 | ||
|
d3604dea82 | ||
|
a5342ed51c | ||
|
de7b51479e | ||
|
3455686ac7 | ||
|
cded9f4db3 | ||
|
e866a07123 | ||
|
ba025c621c | ||
|
6ef19fd061 | ||
|
e8680c0482 | ||
|
c10886dc25 | ||
|
76da0744f0 | ||
|
d12e990737 | ||
|
0b5365f822 | ||
|
f4d74643b0 | ||
|
eb5fe4ee13 |
40
BUILD.gn
40
BUILD.gn
@@ -473,16 +473,6 @@ static_library("libcef_static") {
|
||||
"libcef/browser/javascript_dialog_manager.h",
|
||||
"libcef/browser/media_capture_devices_dispatcher.cc",
|
||||
"libcef/browser/media_capture_devices_dispatcher.h",
|
||||
"libcef/browser/media_router/media_route_impl.cc",
|
||||
"libcef/browser/media_router/media_route_impl.h",
|
||||
"libcef/browser/media_router/media_router_impl.cc",
|
||||
"libcef/browser/media_router/media_router_impl.h",
|
||||
"libcef/browser/media_router/media_router_manager.cc",
|
||||
"libcef/browser/media_router/media_router_manager.h",
|
||||
"libcef/browser/media_router/media_sink_impl.cc",
|
||||
"libcef/browser/media_router/media_sink_impl.h",
|
||||
"libcef/browser/media_router/media_source_impl.cc",
|
||||
"libcef/browser/media_router/media_source_impl.h",
|
||||
"libcef/browser/menu_manager.cc",
|
||||
"libcef/browser/menu_manager.h",
|
||||
"libcef/browser/menu_model_impl.cc",
|
||||
@@ -697,6 +687,8 @@ static_library("libcef_static") {
|
||||
"libcef/renderer/render_frame_observer.h",
|
||||
"libcef/renderer/render_frame_util.cc",
|
||||
"libcef/renderer/render_frame_util.h",
|
||||
"libcef/renderer/render_message_filter.cc",
|
||||
"libcef/renderer/render_message_filter.h",
|
||||
"libcef/renderer/render_thread_observer.cc",
|
||||
"libcef/renderer/render_thread_observer.h",
|
||||
"libcef/renderer/render_urlrequest_impl.cc",
|
||||
@@ -815,6 +807,7 @@ static_library("libcef_static") {
|
||||
"//media",
|
||||
"//media/blink",
|
||||
"//net",
|
||||
"//net:net_with_v8",
|
||||
"//pdf",
|
||||
"//ppapi/buildflags",
|
||||
"//printing/buildflags",
|
||||
@@ -829,7 +822,7 @@ static_library("libcef_static") {
|
||||
"//third_party/cld_3/src/src:cld_3",
|
||||
"//third_party/hunspell",
|
||||
"//third_party/leveldatabase",
|
||||
"//third_party/libxml:libxml",
|
||||
"//third_party/libxml",
|
||||
"//third_party/widevine/cdm:headers",
|
||||
"//third_party/widevine/cdm",
|
||||
"//third_party/icu",
|
||||
@@ -1105,13 +1098,6 @@ static_library("libcef_static") {
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
if (is_win || is_linux) {
|
||||
sources += [
|
||||
"libcef/browser/native/browser_platform_delegate_native_aura.cc",
|
||||
"libcef/browser/native/browser_platform_delegate_native_aura.h",
|
||||
]
|
||||
}
|
||||
} else {
|
||||
sources += [
|
||||
# Provides stub implementations for the views static methods.
|
||||
@@ -1197,7 +1183,6 @@ source_set("cef_content_browser_overlay_manifest") {
|
||||
|
||||
deps = [
|
||||
"//base",
|
||||
"//chrome/common:mojo_bindings",
|
||||
"//extensions/buildflags",
|
||||
"//extensions/common:mojom",
|
||||
"//extensions/common/api:mojom",
|
||||
@@ -1208,6 +1193,7 @@ source_set("cef_content_browser_overlay_manifest") {
|
||||
|
||||
source_set("cef_content_renderer_overlay_manifest") {
|
||||
sources = [
|
||||
"libcef/common/service_manifests/cef_content_renderer_overlay_manifest.cc",
|
||||
"libcef/common/service_manifests/cef_content_renderer_overlay_manifest.h",
|
||||
]
|
||||
|
||||
@@ -1318,8 +1304,6 @@ repack("pak_extensions") {
|
||||
# Add associated .h files in the make_pack_header("resources") target.
|
||||
sources = [
|
||||
"$root_gen_dir/chrome/component_extension_resources.pak",
|
||||
"$root_gen_dir/content/browser/resources/media/media_internals_resources.pak",
|
||||
"$root_gen_dir/content/browser/webrtc/resources/webrtc_internals_resources.pak",
|
||||
"$root_gen_dir/extensions/extensions_renderer_resources.pak",
|
||||
"$root_gen_dir/extensions/extensions_resources.pak",
|
||||
"$root_gen_dir/mojo/public/js/mojo_bindings_resources.pak",
|
||||
@@ -1331,8 +1315,6 @@ repack("pak_extensions") {
|
||||
# listed both here and in the libcef_static target.
|
||||
public_deps = [
|
||||
"//chrome/browser/resources:component_extension_resources",
|
||||
"//content/browser/resources/media:media_internals_resources",
|
||||
"//content/browser/webrtc/resources",
|
||||
"//extensions:extensions_renderer_resources",
|
||||
"//extensions:extensions_resources_grd",
|
||||
"//mojo/public/js:resources",
|
||||
@@ -1404,7 +1386,7 @@ repack("pak") {
|
||||
# listed both here and in the libcef_static target.
|
||||
public_deps = [
|
||||
"//chrome/browser:resources",
|
||||
"//chrome/browser/resources/net_internals:net_internals_resources",
|
||||
"//chrome/browser/resources:net_internals_resources",
|
||||
"//chrome/browser/resources:print_preview_resources",
|
||||
"//chrome/common:resources",
|
||||
"//components/resources:components_resources",
|
||||
@@ -1555,6 +1537,7 @@ if (is_mac) {
|
||||
|
||||
if (v8_use_external_startup_data) {
|
||||
sources += [
|
||||
"$root_out_dir/natives_blob.bin",
|
||||
"$root_out_dir/snapshot_blob.bin",
|
||||
]
|
||||
public_deps += [ "//v8" ]
|
||||
@@ -2154,18 +2137,13 @@ if (is_mac) {
|
||||
libs = [
|
||||
"comctl32.lib",
|
||||
"d3d11.lib",
|
||||
"glu32.lib",
|
||||
"imm32.lib",
|
||||
"oleacc.lib",
|
||||
"opengl32.lib",
|
||||
"rpcrt4.lib",
|
||||
"shlwapi.lib",
|
||||
]
|
||||
|
||||
if (target_cpu != "arm64") {
|
||||
libs += [
|
||||
"opengl32.lib",
|
||||
"glu32.lib"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
if (is_linux) {
|
||||
|
@@ -7,6 +7,5 @@
|
||||
# https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding
|
||||
|
||||
{
|
||||
'chromium_checkout': 'refs/tags/80.0.3987.163',
|
||||
'depot_tools_checkout': 'ec2a6ce270'
|
||||
'chromium_checkout': 'refs/tags/79.0.3945.130'
|
||||
}
|
||||
|
@@ -8,7 +8,7 @@
|
||||
# by hand. See the translator.README.txt file in the tools directory for
|
||||
# more information.
|
||||
#
|
||||
# $hash=578c0aef11c3c7840679e480069fc9031c628e25$
|
||||
# $hash=98198bc4243deb46c848735f0d5499aa4891e535$
|
||||
#
|
||||
|
||||
{
|
||||
@@ -43,7 +43,6 @@
|
||||
'include/cef_keyboard_handler.h',
|
||||
'include/cef_life_span_handler.h',
|
||||
'include/cef_load_handler.h',
|
||||
'include/cef_media_router.h',
|
||||
'include/cef_menu_model.h',
|
||||
'include/cef_menu_model_delegate.h',
|
||||
'include/cef_navigation_entry.h',
|
||||
@@ -54,7 +53,6 @@
|
||||
'include/cef_print_settings.h',
|
||||
'include/cef_process_message.h',
|
||||
'include/cef_process_util.h',
|
||||
'include/cef_registration.h',
|
||||
'include/cef_render_handler.h',
|
||||
'include/cef_render_process_handler.h',
|
||||
'include/cef_request.h',
|
||||
@@ -138,7 +136,6 @@
|
||||
'include/capi/cef_keyboard_handler_capi.h',
|
||||
'include/capi/cef_life_span_handler_capi.h',
|
||||
'include/capi/cef_load_handler_capi.h',
|
||||
'include/capi/cef_media_router_capi.h',
|
||||
'include/capi/cef_menu_model_capi.h',
|
||||
'include/capi/cef_menu_model_delegate_capi.h',
|
||||
'include/capi/cef_navigation_entry_capi.h',
|
||||
@@ -149,7 +146,6 @@
|
||||
'include/capi/cef_print_settings_capi.h',
|
||||
'include/capi/cef_process_message_capi.h',
|
||||
'include/capi/cef_process_util_capi.h',
|
||||
'include/capi/cef_registration_capi.h',
|
||||
'include/capi/cef_render_handler_capi.h',
|
||||
'include/capi/cef_render_process_handler_capi.h',
|
||||
'include/capi/cef_request_capi.h',
|
||||
@@ -312,18 +308,6 @@
|
||||
'libcef_dll/cpptoc/list_value_cpptoc.h',
|
||||
'libcef_dll/ctocpp/load_handler_ctocpp.cc',
|
||||
'libcef_dll/ctocpp/load_handler_ctocpp.h',
|
||||
'libcef_dll/ctocpp/media_observer_ctocpp.cc',
|
||||
'libcef_dll/ctocpp/media_observer_ctocpp.h',
|
||||
'libcef_dll/cpptoc/media_route_cpptoc.cc',
|
||||
'libcef_dll/cpptoc/media_route_cpptoc.h',
|
||||
'libcef_dll/ctocpp/media_route_create_callback_ctocpp.cc',
|
||||
'libcef_dll/ctocpp/media_route_create_callback_ctocpp.h',
|
||||
'libcef_dll/cpptoc/media_router_cpptoc.cc',
|
||||
'libcef_dll/cpptoc/media_router_cpptoc.h',
|
||||
'libcef_dll/cpptoc/media_sink_cpptoc.cc',
|
||||
'libcef_dll/cpptoc/media_sink_cpptoc.h',
|
||||
'libcef_dll/cpptoc/media_source_cpptoc.cc',
|
||||
'libcef_dll/cpptoc/media_source_cpptoc.h',
|
||||
'libcef_dll/cpptoc/views/menu_button_cpptoc.cc',
|
||||
'libcef_dll/cpptoc/views/menu_button_cpptoc.h',
|
||||
'libcef_dll/ctocpp/views/menu_button_delegate_ctocpp.cc',
|
||||
@@ -362,8 +346,6 @@
|
||||
'libcef_dll/ctocpp/read_handler_ctocpp.h',
|
||||
'libcef_dll/ctocpp/register_cdm_callback_ctocpp.cc',
|
||||
'libcef_dll/ctocpp/register_cdm_callback_ctocpp.h',
|
||||
'libcef_dll/cpptoc/registration_cpptoc.cc',
|
||||
'libcef_dll/cpptoc/registration_cpptoc.h',
|
||||
'libcef_dll/ctocpp/render_handler_ctocpp.cc',
|
||||
'libcef_dll/ctocpp/render_handler_ctocpp.h',
|
||||
'libcef_dll/ctocpp/render_process_handler_ctocpp.cc',
|
||||
@@ -616,18 +598,6 @@
|
||||
'libcef_dll/ctocpp/list_value_ctocpp.h',
|
||||
'libcef_dll/cpptoc/load_handler_cpptoc.cc',
|
||||
'libcef_dll/cpptoc/load_handler_cpptoc.h',
|
||||
'libcef_dll/cpptoc/media_observer_cpptoc.cc',
|
||||
'libcef_dll/cpptoc/media_observer_cpptoc.h',
|
||||
'libcef_dll/ctocpp/media_route_ctocpp.cc',
|
||||
'libcef_dll/ctocpp/media_route_ctocpp.h',
|
||||
'libcef_dll/cpptoc/media_route_create_callback_cpptoc.cc',
|
||||
'libcef_dll/cpptoc/media_route_create_callback_cpptoc.h',
|
||||
'libcef_dll/ctocpp/media_router_ctocpp.cc',
|
||||
'libcef_dll/ctocpp/media_router_ctocpp.h',
|
||||
'libcef_dll/ctocpp/media_sink_ctocpp.cc',
|
||||
'libcef_dll/ctocpp/media_sink_ctocpp.h',
|
||||
'libcef_dll/ctocpp/media_source_ctocpp.cc',
|
||||
'libcef_dll/ctocpp/media_source_ctocpp.h',
|
||||
'libcef_dll/ctocpp/views/menu_button_ctocpp.cc',
|
||||
'libcef_dll/ctocpp/views/menu_button_ctocpp.h',
|
||||
'libcef_dll/cpptoc/views/menu_button_delegate_cpptoc.cc',
|
||||
@@ -666,8 +636,6 @@
|
||||
'libcef_dll/cpptoc/read_handler_cpptoc.h',
|
||||
'libcef_dll/cpptoc/register_cdm_callback_cpptoc.cc',
|
||||
'libcef_dll/cpptoc/register_cdm_callback_cpptoc.h',
|
||||
'libcef_dll/ctocpp/registration_ctocpp.cc',
|
||||
'libcef_dll/ctocpp/registration_ctocpp.h',
|
||||
'libcef_dll/cpptoc/render_handler_cpptoc.cc',
|
||||
'libcef_dll/cpptoc/render_handler_cpptoc.h',
|
||||
'libcef_dll/cpptoc/render_process_handler_cpptoc.cc',
|
||||
|
@@ -238,8 +238,6 @@
|
||||
'tests/cefclient/browser/main_context.h',
|
||||
'tests/cefclient/browser/main_context_impl.cc',
|
||||
'tests/cefclient/browser/main_context_impl.h',
|
||||
'tests/cefclient/browser/media_router_test.cc',
|
||||
'tests/cefclient/browser/media_router_test.h',
|
||||
'tests/cefclient/browser/osr_dragdrop_events.h',
|
||||
'tests/cefclient/browser/osr_renderer.h',
|
||||
'tests/cefclient/browser/osr_renderer.cc',
|
||||
@@ -289,7 +287,6 @@
|
||||
'tests/cefclient/resources/drm.html',
|
||||
'tests/cefclient/resources/localstorage.html',
|
||||
'tests/cefclient/resources/logo.png',
|
||||
'tests/cefclient/resources/media_router.html',
|
||||
'tests/cefclient/resources/menu_icon.1x.png',
|
||||
'tests/cefclient/resources/menu_icon.2x.png',
|
||||
'tests/cefclient/resources/other_tests.html',
|
||||
|
@@ -218,6 +218,7 @@ if(OS_LINUX)
|
||||
libcef.so
|
||||
libEGL.so
|
||||
libGLESv2.so
|
||||
natives_blob.bin
|
||||
snapshot_blob.bin
|
||||
v8_context_snapshot.bin
|
||||
swiftshader
|
||||
@@ -480,6 +481,7 @@ if(OS_WINDOWS)
|
||||
libcef.dll
|
||||
libEGL.dll
|
||||
libGLESv2.dll
|
||||
natives_blob.bin
|
||||
snapshot_blob.bin
|
||||
v8_context_snapshot.bin
|
||||
swiftshader
|
||||
|
@@ -178,7 +178,7 @@ Atomic64 Release_Load(volatile const Atomic64* ptr);
|
||||
// Include our platform specific implementation.
|
||||
#if defined(OS_WIN) && defined(COMPILER_MSVC) && defined(ARCH_CPU_X86_FAMILY)
|
||||
#include "include/base/internal/cef_atomicops_x86_msvc.h"
|
||||
#elif defined(OS_WIN) && (defined(__ARM_ARCH_ISA_A64) || defined(_M_ARM64))
|
||||
#elif defined(OS_WIN) && defined(__ARM_ARCH_ISA_A64)
|
||||
#include "include/base/internal/cef_atomicops_arm64_msvc.h"
|
||||
#elif defined(OS_MACOSX)
|
||||
#include "include/base/internal/cef_atomicops_mac.h"
|
||||
|
@@ -95,7 +95,7 @@
|
||||
#define ARCH_CPU_ARMEL 1
|
||||
#define ARCH_CPU_32_BITS 1
|
||||
#define ARCH_CPU_LITTLE_ENDIAN 1
|
||||
#elif defined(__aarch64__) || defined(_M_ARM64)
|
||||
#elif defined(__aarch64__)
|
||||
#define ARCH_CPU_ARM_FAMILY 1
|
||||
#define ARCH_CPU_ARM64 1
|
||||
#define ARCH_CPU_64_BITS 1
|
||||
|
@@ -144,9 +144,9 @@
|
||||
|
||||
// Always define the DCHECK_IS_ON macro which is used from other CEF headers.
|
||||
#if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON)
|
||||
#define DCHECK_IS_ON() false
|
||||
#define DCHECK_IS_ON() 0
|
||||
#else
|
||||
#define DCHECK_IS_ON() true
|
||||
#define DCHECK_IS_ON() 1
|
||||
#endif
|
||||
|
||||
#elif defined(USING_CHROMIUM_INCLUDES)
|
||||
|
@@ -1,322 +0,0 @@
|
||||
// Copyright (c) 2020 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.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// This file was generated by the CEF translator tool and should not edited
|
||||
// by hand. See the translator.README.txt file in the tools directory for
|
||||
// more information.
|
||||
//
|
||||
// $hash=a7070419332ec8f6d6e4df898c8eb666b988970a$
|
||||
//
|
||||
|
||||
#ifndef CEF_INCLUDE_CAPI_CEF_MEDIA_ROUTER_CAPI_H_
|
||||
#define CEF_INCLUDE_CAPI_CEF_MEDIA_ROUTER_CAPI_H_
|
||||
#pragma once
|
||||
|
||||
#include "include/capi/cef_base_capi.h"
|
||||
#include "include/capi/cef_registration_capi.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct _cef_media_observer_t;
|
||||
struct _cef_media_route_create_callback_t;
|
||||
struct _cef_media_route_t;
|
||||
struct _cef_media_sink_t;
|
||||
struct _cef_media_source_t;
|
||||
|
||||
///
|
||||
// Supports discovery of and communication with media devices on the local
|
||||
// network via the Cast and DIAL protocols. The functions of this structure may
|
||||
// be called on any browser process thread unless otherwise indicated.
|
||||
///
|
||||
typedef struct _cef_media_router_t {
|
||||
///
|
||||
// Base structure.
|
||||
///
|
||||
cef_base_ref_counted_t base;
|
||||
|
||||
///
|
||||
// Add an observer for MediaRouter events. The observer will remain registered
|
||||
// until the returned Registration object is destroyed.
|
||||
///
|
||||
struct _cef_registration_t*(CEF_CALLBACK* add_observer)(
|
||||
struct _cef_media_router_t* self,
|
||||
struct _cef_media_observer_t* observer);
|
||||
|
||||
///
|
||||
// Returns a MediaSource object for the specified media source URN. Supported
|
||||
// URN schemes include "cast:" and "dial:", and will be already known by the
|
||||
// client application (e.g. "cast:<appId>?clientId=<clientId>").
|
||||
///
|
||||
struct _cef_media_source_t*(CEF_CALLBACK* get_source)(
|
||||
struct _cef_media_router_t* self,
|
||||
const cef_string_t* urn);
|
||||
|
||||
///
|
||||
// Trigger an asynchronous call to cef_media_observer_t::OnSinks on all
|
||||
// registered observers.
|
||||
///
|
||||
void(CEF_CALLBACK* notify_current_sinks)(struct _cef_media_router_t* self);
|
||||
|
||||
///
|
||||
// Create a new route between |source| and |sink|. Source and sink must be
|
||||
// valid, compatible (as reported by cef_media_sink_t::IsCompatibleWith), and
|
||||
// a route between them must not already exist. |callback| will be executed on
|
||||
// success or failure. If route creation succeeds it will also trigger an
|
||||
// asynchronous call to cef_media_observer_t::OnRoutes on all registered
|
||||
// observers.
|
||||
///
|
||||
void(CEF_CALLBACK* create_route)(
|
||||
struct _cef_media_router_t* self,
|
||||
struct _cef_media_source_t* source,
|
||||
struct _cef_media_sink_t* sink,
|
||||
struct _cef_media_route_create_callback_t* callback);
|
||||
|
||||
///
|
||||
// Trigger an asynchronous call to cef_media_observer_t::OnRoutes on all
|
||||
// registered observers.
|
||||
///
|
||||
void(CEF_CALLBACK* notify_current_routes)(struct _cef_media_router_t* self);
|
||||
} cef_media_router_t;
|
||||
|
||||
///
|
||||
// Returns the MediaRouter object associated with the global request context.
|
||||
// Equivalent to calling cef_request_context_t::cef_request_context_get_global_c
|
||||
// ontext()->get_media_router().
|
||||
///
|
||||
CEF_EXPORT cef_media_router_t* cef_media_router_get_global();
|
||||
|
||||
///
|
||||
// Implemented by the client to observe MediaRouter events and registered via
|
||||
// cef_media_router_t::AddObserver. The functions of this structure will be
|
||||
// called on the browser process UI thread.
|
||||
///
|
||||
typedef struct _cef_media_observer_t {
|
||||
///
|
||||
// Base structure.
|
||||
///
|
||||
cef_base_ref_counted_t base;
|
||||
|
||||
///
|
||||
// The list of available media sinks has changed or
|
||||
// cef_media_router_t::NotifyCurrentSinks was called.
|
||||
///
|
||||
void(CEF_CALLBACK* on_sinks)(struct _cef_media_observer_t* self,
|
||||
size_t sinksCount,
|
||||
struct _cef_media_sink_t* const* sinks);
|
||||
|
||||
///
|
||||
// The list of available media routes has changed or
|
||||
// cef_media_router_t::NotifyCurrentRoutes was called.
|
||||
///
|
||||
void(CEF_CALLBACK* on_routes)(struct _cef_media_observer_t* self,
|
||||
size_t routesCount,
|
||||
struct _cef_media_route_t* const* routes);
|
||||
|
||||
///
|
||||
// The connection state of |route| has changed.
|
||||
///
|
||||
void(CEF_CALLBACK* on_route_state_changed)(
|
||||
struct _cef_media_observer_t* self,
|
||||
struct _cef_media_route_t* route,
|
||||
cef_media_route_connection_state_t state);
|
||||
|
||||
///
|
||||
// A message was recieved over |route|. |message| is only valid for the scope
|
||||
// of this callback and should be copied if necessary.
|
||||
///
|
||||
void(CEF_CALLBACK* on_route_message_received)(
|
||||
struct _cef_media_observer_t* self,
|
||||
struct _cef_media_route_t* route,
|
||||
const void* message,
|
||||
size_t message_size);
|
||||
} cef_media_observer_t;
|
||||
|
||||
///
|
||||
// Represents the route between a media source and sink. Instances of this
|
||||
// object are created via cef_media_router_t::CreateRoute and retrieved via
|
||||
// cef_media_observer_t::OnRoutes. Contains the status and metadata of a routing
|
||||
// operation. The functions of this structure may be called on any browser
|
||||
// process thread unless otherwise indicated.
|
||||
///
|
||||
typedef struct _cef_media_route_t {
|
||||
///
|
||||
// Base structure.
|
||||
///
|
||||
cef_base_ref_counted_t base;
|
||||
|
||||
///
|
||||
// Returns the ID for this route.
|
||||
///
|
||||
// The resulting string must be freed by calling cef_string_userfree_free().
|
||||
cef_string_userfree_t(CEF_CALLBACK* get_id)(struct _cef_media_route_t* self);
|
||||
|
||||
///
|
||||
// Returns the source associated with this route.
|
||||
///
|
||||
struct _cef_media_source_t*(CEF_CALLBACK* get_source)(
|
||||
struct _cef_media_route_t* self);
|
||||
|
||||
///
|
||||
// Returns the sink associated with this route.
|
||||
///
|
||||
struct _cef_media_sink_t*(CEF_CALLBACK* get_sink)(
|
||||
struct _cef_media_route_t* self);
|
||||
|
||||
///
|
||||
// Send a message over this route. |message| will be copied if necessary.
|
||||
///
|
||||
void(CEF_CALLBACK* send_route_message)(struct _cef_media_route_t* self,
|
||||
const void* message,
|
||||
size_t message_size);
|
||||
|
||||
///
|
||||
// Terminate this route. Will result in an asynchronous call to
|
||||
// cef_media_observer_t::OnRoutes on all registered observers.
|
||||
///
|
||||
void(CEF_CALLBACK* terminate)(struct _cef_media_route_t* self);
|
||||
} cef_media_route_t;
|
||||
|
||||
///
|
||||
// Callback structure for cef_media_router_t::CreateRoute. The functions of this
|
||||
// structure will be called on the browser process UI thread.
|
||||
///
|
||||
typedef struct _cef_media_route_create_callback_t {
|
||||
///
|
||||
// Base structure.
|
||||
///
|
||||
cef_base_ref_counted_t base;
|
||||
|
||||
///
|
||||
// Method that will be executed when the route creation has finished. |result|
|
||||
// will be CEF_MRCR_OK if the route creation succeeded. |error| will be a
|
||||
// description of the error if the route creation failed. |route| is the
|
||||
// resulting route, or NULL if the route creation failed.
|
||||
///
|
||||
void(CEF_CALLBACK* on_media_route_create_finished)(
|
||||
struct _cef_media_route_create_callback_t* self,
|
||||
cef_media_route_create_result_t result,
|
||||
const cef_string_t* error,
|
||||
struct _cef_media_route_t* route);
|
||||
} cef_media_route_create_callback_t;
|
||||
|
||||
///
|
||||
// Represents a sink to which media can be routed. Instances of this object are
|
||||
// retrieved via cef_media_observer_t::OnSinks. The functions of this structure
|
||||
// may be called on any browser process thread unless otherwise indicated.
|
||||
///
|
||||
typedef struct _cef_media_sink_t {
|
||||
///
|
||||
// Base structure.
|
||||
///
|
||||
cef_base_ref_counted_t base;
|
||||
|
||||
///
|
||||
// Returns the ID for this sink.
|
||||
///
|
||||
// The resulting string must be freed by calling cef_string_userfree_free().
|
||||
cef_string_userfree_t(CEF_CALLBACK* get_id)(struct _cef_media_sink_t* self);
|
||||
|
||||
///
|
||||
// Returns true (1) if this sink is valid.
|
||||
///
|
||||
int(CEF_CALLBACK* is_valid)(struct _cef_media_sink_t* self);
|
||||
|
||||
///
|
||||
// Returns the name of this sink.
|
||||
///
|
||||
// The resulting string must be freed by calling cef_string_userfree_free().
|
||||
cef_string_userfree_t(CEF_CALLBACK* get_name)(struct _cef_media_sink_t* self);
|
||||
|
||||
///
|
||||
// Returns the description of this sink.
|
||||
///
|
||||
// The resulting string must be freed by calling cef_string_userfree_free().
|
||||
cef_string_userfree_t(CEF_CALLBACK* get_description)(
|
||||
struct _cef_media_sink_t* self);
|
||||
|
||||
///
|
||||
// Returns true (1) if this sink accepts content via Cast.
|
||||
///
|
||||
int(CEF_CALLBACK* is_cast_sink)(struct _cef_media_sink_t* self);
|
||||
|
||||
///
|
||||
// Returns true (1) if this sink accepts content via DIAL.
|
||||
///
|
||||
int(CEF_CALLBACK* is_dial_sink)(struct _cef_media_sink_t* self);
|
||||
|
||||
///
|
||||
// Returns true (1) if this sink is compatible with |source|.
|
||||
///
|
||||
int(CEF_CALLBACK* is_compatible_with)(struct _cef_media_sink_t* self,
|
||||
struct _cef_media_source_t* source);
|
||||
} cef_media_sink_t;
|
||||
|
||||
///
|
||||
// Represents a source from which media can be routed. Instances of this object
|
||||
// are retrieved via cef_media_router_t::GetSource. The functions of this
|
||||
// structure may be called on any browser process thread unless otherwise
|
||||
// indicated.
|
||||
///
|
||||
typedef struct _cef_media_source_t {
|
||||
///
|
||||
// Base structure.
|
||||
///
|
||||
cef_base_ref_counted_t base;
|
||||
|
||||
///
|
||||
// Returns the ID (media source URN or URL) for this source.
|
||||
///
|
||||
// The resulting string must be freed by calling cef_string_userfree_free().
|
||||
cef_string_userfree_t(CEF_CALLBACK* get_id)(struct _cef_media_source_t* self);
|
||||
|
||||
///
|
||||
// Returns true (1) if this source is valid.
|
||||
///
|
||||
int(CEF_CALLBACK* is_valid)(struct _cef_media_source_t* self);
|
||||
|
||||
///
|
||||
// Returns true (1) if this source outputs its content via Cast.
|
||||
///
|
||||
int(CEF_CALLBACK* is_cast_source)(struct _cef_media_source_t* self);
|
||||
|
||||
///
|
||||
// Returns true (1) if this source outputs its content via DIAL.
|
||||
///
|
||||
int(CEF_CALLBACK* is_dial_source)(struct _cef_media_source_t* self);
|
||||
} cef_media_source_t;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // CEF_INCLUDE_CAPI_CEF_MEDIA_ROUTER_CAPI_H_
|
@@ -1,63 +0,0 @@
|
||||
// Copyright (c) 2020 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.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// This file was generated by the CEF translator tool and should not edited
|
||||
// by hand. See the translator.README.txt file in the tools directory for
|
||||
// more information.
|
||||
//
|
||||
// $hash=029e237cf80f94a25453bac5a9b1e0765bb56f37$
|
||||
//
|
||||
|
||||
#ifndef CEF_INCLUDE_CAPI_CEF_REGISTRATION_CAPI_H_
|
||||
#define CEF_INCLUDE_CAPI_CEF_REGISTRATION_CAPI_H_
|
||||
#pragma once
|
||||
|
||||
#include "include/capi/cef_base_capi.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
///
|
||||
// Generic callback structure used for managing the lifespan of a registration.
|
||||
///
|
||||
typedef struct _cef_registration_t {
|
||||
///
|
||||
// Base structure.
|
||||
///
|
||||
cef_base_ref_counted_t base;
|
||||
} cef_registration_t;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // CEF_INCLUDE_CAPI_CEF_REGISTRATION_CAPI_H_
|
@@ -33,7 +33,7 @@
|
||||
// by hand. See the translator.README.txt file in the tools directory for
|
||||
// more information.
|
||||
//
|
||||
// $hash=7ce0953f069204a4dd2037c4a05ac9454c5e66a6$
|
||||
// $hash=2b01472d9b9a8cc9d1b2e669c91c2849bdb162e9$
|
||||
//
|
||||
|
||||
#ifndef CEF_INCLUDE_CAPI_CEF_REQUEST_CONTEXT_CAPI_H_
|
||||
@@ -44,7 +44,6 @@
|
||||
#include "include/capi/cef_cookie_capi.h"
|
||||
#include "include/capi/cef_extension_capi.h"
|
||||
#include "include/capi/cef_extension_handler_capi.h"
|
||||
#include "include/capi/cef_media_router_capi.h"
|
||||
#include "include/capi/cef_values_capi.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -354,12 +353,6 @@ typedef struct _cef_request_context_t {
|
||||
struct _cef_extension_t*(CEF_CALLBACK* get_extension)(
|
||||
struct _cef_request_context_t* self,
|
||||
const cef_string_t* extension_id);
|
||||
|
||||
///
|
||||
// Returns the MediaRouter object associated with this context.
|
||||
///
|
||||
struct _cef_media_router_t*(CEF_CALLBACK* get_media_router)(
|
||||
struct _cef_request_context_t* self);
|
||||
} cef_request_context_t;
|
||||
|
||||
///
|
||||
|
@@ -34,7 +34,7 @@
|
||||
// implementations. See the translator.README.txt file in the tools directory
|
||||
// for more information.
|
||||
//
|
||||
// $hash=789c89f59dd4f5aac704644d0d64cbf658506382$
|
||||
// $hash=06d0c1ccfa43926a01cbeb3ec95ff2a001fd0b45$
|
||||
//
|
||||
|
||||
#ifndef CEF_INCLUDE_API_HASH_H_
|
||||
@@ -47,13 +47,13 @@
|
||||
// way that may cause binary incompatibility with other builds. The universal
|
||||
// hash value will change if any platform is affected whereas the platform hash
|
||||
// values will change only if that particular platform is affected.
|
||||
#define CEF_API_HASH_UNIVERSAL "5f9a1d7977affd8006aff83fe4ab7c408c3288f0"
|
||||
#define CEF_API_HASH_UNIVERSAL "3ad9591f7024619a1e2fd796c7ad51ae3a34abbb"
|
||||
#if defined(OS_WIN)
|
||||
#define CEF_API_HASH_PLATFORM "5131b8a7e8097ab4c415227c65e7385a3363b56f"
|
||||
#define CEF_API_HASH_PLATFORM "3b8e38ae40c1a930227c6277c39dbc24081ccec1"
|
||||
#elif defined(OS_MACOSX)
|
||||
#define CEF_API_HASH_PLATFORM "136b3df0013c4997f81de2eba43fca2e36ad603c"
|
||||
#define CEF_API_HASH_PLATFORM "4a77f1908fabccdb01a2d3bdbede5ca09fbaa394"
|
||||
#elif defined(OS_LINUX)
|
||||
#define CEF_API_HASH_PLATFORM "7353c7e128ad2e0185a93f488876e607f57f576a"
|
||||
#define CEF_API_HASH_PLATFORM "434da6be7db70fd90c4265118ac47ace4073c6ae"
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@@ -178,7 +178,7 @@ class CefApp : public virtual CefBaseRefCounted {
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefResourceBundleHandler> GetResourceBundleHandler() {
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
///
|
||||
@@ -187,7 +187,7 @@ class CefApp : public virtual CefBaseRefCounted {
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefBrowserProcessHandler> GetBrowserProcessHandler() {
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
///
|
||||
@@ -196,7 +196,7 @@ class CefApp : public virtual CefBaseRefCounted {
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefRenderProcessHandler> GetRenderProcessHandler() {
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
};
|
||||
|
||||
|
@@ -84,7 +84,7 @@ class CefBrowserProcessHandler : public virtual CefBaseRefCounted {
|
||||
// provided then printing will not be supported on the Linux platform.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefPrintHandler> GetPrintHandler() { return nullptr; }
|
||||
virtual CefRefPtr<CefPrintHandler> GetPrintHandler() { return NULL; }
|
||||
|
||||
///
|
||||
// Called from any thread when work has been scheduled for the browser process
|
||||
|
@@ -66,7 +66,7 @@ class CefClient : public virtual CefBaseRefCounted {
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefContextMenuHandler> GetContextMenuHandler() {
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
///
|
||||
@@ -74,75 +74,75 @@ class CefClient : public virtual CefBaseRefCounted {
|
||||
// implementation will be used.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefDialogHandler> GetDialogHandler() { return nullptr; }
|
||||
virtual CefRefPtr<CefDialogHandler> GetDialogHandler() { return NULL; }
|
||||
|
||||
///
|
||||
// Return the handler for browser display state events.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefDisplayHandler> GetDisplayHandler() { return nullptr; }
|
||||
virtual CefRefPtr<CefDisplayHandler> GetDisplayHandler() { return NULL; }
|
||||
|
||||
///
|
||||
// Return the handler for download events. If no handler is returned downloads
|
||||
// will not be allowed.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefDownloadHandler> GetDownloadHandler() { return nullptr; }
|
||||
virtual CefRefPtr<CefDownloadHandler> GetDownloadHandler() { return NULL; }
|
||||
|
||||
///
|
||||
// Return the handler for drag events.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefDragHandler> GetDragHandler() { return nullptr; }
|
||||
virtual CefRefPtr<CefDragHandler> GetDragHandler() { return NULL; }
|
||||
|
||||
///
|
||||
// Return the handler for find result events.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefFindHandler> GetFindHandler() { return nullptr; }
|
||||
virtual CefRefPtr<CefFindHandler> GetFindHandler() { return NULL; }
|
||||
|
||||
///
|
||||
// Return the handler for focus events.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefFocusHandler> GetFocusHandler() { return nullptr; }
|
||||
virtual CefRefPtr<CefFocusHandler> GetFocusHandler() { return NULL; }
|
||||
|
||||
///
|
||||
// Return the handler for JavaScript dialogs. If no handler is provided the
|
||||
// default implementation will be used.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefJSDialogHandler> GetJSDialogHandler() { return nullptr; }
|
||||
virtual CefRefPtr<CefJSDialogHandler> GetJSDialogHandler() { return NULL; }
|
||||
|
||||
///
|
||||
// Return the handler for keyboard events.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefKeyboardHandler> GetKeyboardHandler() { return nullptr; }
|
||||
virtual CefRefPtr<CefKeyboardHandler> GetKeyboardHandler() { return NULL; }
|
||||
|
||||
///
|
||||
// Return the handler for browser life span events.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() { return nullptr; }
|
||||
virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() { return NULL; }
|
||||
|
||||
///
|
||||
// Return the handler for browser load status events.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefLoadHandler> GetLoadHandler() { return nullptr; }
|
||||
virtual CefRefPtr<CefLoadHandler> GetLoadHandler() { return NULL; }
|
||||
|
||||
///
|
||||
// Return the handler for off-screen rendering events.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefRenderHandler> GetRenderHandler() { return nullptr; }
|
||||
virtual CefRefPtr<CefRenderHandler> GetRenderHandler() { return NULL; }
|
||||
|
||||
///
|
||||
// Return the handler for browser request events.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefRequestHandler> GetRequestHandler() { return nullptr; }
|
||||
virtual CefRefPtr<CefRequestHandler> GetRequestHandler() { return NULL; }
|
||||
|
||||
///
|
||||
// Called when a new message is received from a different process. Return true
|
||||
|
@@ -157,7 +157,7 @@ class CefExtensionHandler : public virtual CefBaseRefCounted {
|
||||
CefRefPtr<CefExtension> extension,
|
||||
CefRefPtr<CefBrowser> browser,
|
||||
bool include_incognito) {
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
///
|
||||
|
@@ -1,300 +0,0 @@
|
||||
// Copyright (c) 2020 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.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// The contents of this file must follow a specific format in order to
|
||||
// support the CEF translator tool. See the translator.README.txt file in the
|
||||
// tools directory for more information.
|
||||
//
|
||||
|
||||
#ifndef CEF_INCLUDE_CEF_MEDIA_ROUTER_H_
|
||||
#define CEF_INCLUDE_CEF_MEDIA_ROUTER_H_
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include "include/cef_base.h"
|
||||
#include "include/cef_registration.h"
|
||||
|
||||
class CefMediaObserver;
|
||||
class CefMediaRoute;
|
||||
class CefMediaRouteCreateCallback;
|
||||
class CefMediaSink;
|
||||
class CefMediaSource;
|
||||
|
||||
///
|
||||
// Supports discovery of and communication with media devices on the local
|
||||
// network via the Cast and DIAL protocols. The methods of this class may be
|
||||
// called on any browser process thread unless otherwise indicated.
|
||||
///
|
||||
/*--cef(source=library)--*/
|
||||
class CefMediaRouter : public virtual CefBaseRefCounted {
|
||||
public:
|
||||
///
|
||||
// Returns the MediaRouter object associated with the global request context.
|
||||
// Equivalent to calling
|
||||
// CefRequestContext::GetGlobalContext()->GetMediaRouter().
|
||||
///
|
||||
/*--cef()--*/
|
||||
static CefRefPtr<CefMediaRouter> GetGlobalMediaRouter();
|
||||
|
||||
///
|
||||
// Add an observer for MediaRouter events. The observer will remain registered
|
||||
// until the returned Registration object is destroyed.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefRegistration> AddObserver(
|
||||
CefRefPtr<CefMediaObserver> observer) = 0;
|
||||
|
||||
///
|
||||
// Returns a MediaSource object for the specified media source URN. Supported
|
||||
// URN schemes include "cast:" and "dial:", and will be already known by the
|
||||
// client application (e.g. "cast:<appId>?clientId=<clientId>").
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefMediaSource> GetSource(const CefString& urn) = 0;
|
||||
|
||||
///
|
||||
// Trigger an asynchronous call to CefMediaObserver::OnSinks on all
|
||||
// registered observers.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual void NotifyCurrentSinks() = 0;
|
||||
|
||||
///
|
||||
// Create a new route between |source| and |sink|. Source and sink must be
|
||||
// valid, compatible (as reported by CefMediaSink::IsCompatibleWith), and a
|
||||
// route between them must not already exist. |callback| will be executed
|
||||
// on success or failure. If route creation succeeds it will also trigger an
|
||||
// asynchronous call to CefMediaObserver::OnRoutes on all registered
|
||||
// observers.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual void CreateRoute(CefRefPtr<CefMediaSource> source,
|
||||
CefRefPtr<CefMediaSink> sink,
|
||||
CefRefPtr<CefMediaRouteCreateCallback> callback) = 0;
|
||||
|
||||
///
|
||||
// Trigger an asynchronous call to CefMediaObserver::OnRoutes on all
|
||||
// registered observers.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual void NotifyCurrentRoutes() = 0;
|
||||
};
|
||||
|
||||
///
|
||||
// Implemented by the client to observe MediaRouter events and registered via
|
||||
// CefMediaRouter::AddObserver. The methods of this class will be called on the
|
||||
// browser process UI thread.
|
||||
///
|
||||
/*--cef(source=client)--*/
|
||||
class CefMediaObserver : public virtual CefBaseRefCounted {
|
||||
public:
|
||||
typedef cef_media_route_connection_state_t ConnectionState;
|
||||
|
||||
///
|
||||
// The list of available media sinks has changed or
|
||||
// CefMediaRouter::NotifyCurrentSinks was called.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual void OnSinks(const std::vector<CefRefPtr<CefMediaSink>>& sinks) = 0;
|
||||
|
||||
///
|
||||
// The list of available media routes has changed or
|
||||
// CefMediaRouter::NotifyCurrentRoutes was called.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual void OnRoutes(
|
||||
const std::vector<CefRefPtr<CefMediaRoute>>& routes) = 0;
|
||||
|
||||
///
|
||||
// The connection state of |route| has changed.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual void OnRouteStateChanged(CefRefPtr<CefMediaRoute> route,
|
||||
ConnectionState state) = 0;
|
||||
|
||||
///
|
||||
// A message was recieved over |route|. |message| is only valid for
|
||||
// the scope of this callback and should be copied if necessary.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual void OnRouteMessageReceived(CefRefPtr<CefMediaRoute> route,
|
||||
const void* message,
|
||||
size_t message_size) = 0;
|
||||
};
|
||||
|
||||
///
|
||||
// Represents the route between a media source and sink. Instances of this
|
||||
// object are created via CefMediaRouter::CreateRoute and retrieved via
|
||||
// CefMediaObserver::OnRoutes. Contains the status and metadata of a
|
||||
// routing operation. The methods of this class may be called on any browser
|
||||
// process thread unless otherwise indicated.
|
||||
///
|
||||
/*--cef(source=library)--*/
|
||||
class CefMediaRoute : public virtual CefBaseRefCounted {
|
||||
public:
|
||||
///
|
||||
// Returns the ID for this route.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefString GetId() = 0;
|
||||
|
||||
///
|
||||
// Returns the source associated with this route.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefMediaSource> GetSource() = 0;
|
||||
|
||||
///
|
||||
// Returns the sink associated with this route.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefMediaSink> GetSink() = 0;
|
||||
|
||||
///
|
||||
// Send a message over this route. |message| will be copied if necessary.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual void SendRouteMessage(const void* message, size_t message_size) = 0;
|
||||
|
||||
///
|
||||
// Terminate this route. Will result in an asynchronous call to
|
||||
// CefMediaObserver::OnRoutes on all registered observers.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual void Terminate() = 0;
|
||||
};
|
||||
|
||||
///
|
||||
// Callback interface for CefMediaRouter::CreateRoute. The methods of this
|
||||
// class will be called on the browser process UI thread.
|
||||
///
|
||||
/*--cef(source=client)--*/
|
||||
class CefMediaRouteCreateCallback : public virtual CefBaseRefCounted {
|
||||
public:
|
||||
typedef cef_media_route_create_result_t RouteCreateResult;
|
||||
|
||||
///
|
||||
// Method that will be executed when the route creation has finished. |result|
|
||||
// will be CEF_MRCR_OK if the route creation succeeded. |error| will be a
|
||||
// description of the error if the route creation failed. |route| is the
|
||||
// resulting route, or empty if the route creation failed.
|
||||
///
|
||||
/*--cef(optional_param=error,optional_param=route)--*/
|
||||
virtual void OnMediaRouteCreateFinished(RouteCreateResult result,
|
||||
const CefString& error,
|
||||
CefRefPtr<CefMediaRoute> route) = 0;
|
||||
};
|
||||
|
||||
///
|
||||
// Represents a sink to which media can be routed. Instances of this object are
|
||||
// retrieved via CefMediaObserver::OnSinks. The methods of this class may
|
||||
// be called on any browser process thread unless otherwise indicated.
|
||||
///
|
||||
/*--cef(source=library)--*/
|
||||
class CefMediaSink : public virtual CefBaseRefCounted {
|
||||
public:
|
||||
///
|
||||
// Returns the ID for this sink.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefString GetId() = 0;
|
||||
|
||||
///
|
||||
// Returns true if this sink is valid.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual bool IsValid() = 0;
|
||||
|
||||
///
|
||||
// Returns the name of this sink.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefString GetName() = 0;
|
||||
|
||||
///
|
||||
// Returns the description of this sink.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefString GetDescription() = 0;
|
||||
|
||||
///
|
||||
// Returns true if this sink accepts content via Cast.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual bool IsCastSink() = 0;
|
||||
|
||||
///
|
||||
// Returns true if this sink accepts content via DIAL.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual bool IsDialSink() = 0;
|
||||
|
||||
///
|
||||
// Returns true if this sink is compatible with |source|.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual bool IsCompatibleWith(CefRefPtr<CefMediaSource> source) = 0;
|
||||
};
|
||||
|
||||
///
|
||||
// Represents a source from which media can be routed. Instances of this object
|
||||
// are retrieved via CefMediaRouter::GetSource. The methods of this class may be
|
||||
// called on any browser process thread unless otherwise indicated.
|
||||
///
|
||||
/*--cef(source=library)--*/
|
||||
class CefMediaSource : public virtual CefBaseRefCounted {
|
||||
public:
|
||||
///
|
||||
// Returns the ID (media source URN or URL) for this source.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefString GetId() = 0;
|
||||
|
||||
///
|
||||
// Returns true if this source is valid.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual bool IsValid() = 0;
|
||||
|
||||
///
|
||||
// Returns true if this source outputs its content via Cast.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual bool IsCastSource() = 0;
|
||||
|
||||
///
|
||||
// Returns true if this source outputs its content via DIAL.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual bool IsDialSource() = 0;
|
||||
};
|
||||
|
||||
#endif // CEF_INCLUDE_CEF_MEDIA_ROUTER_H_
|
@@ -1,49 +0,0 @@
|
||||
// Copyright (c) 2020 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.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// The contents of this file must follow a specific format in order to
|
||||
// support the CEF translator tool. See the translator.README.txt file in the
|
||||
// tools directory for more information.
|
||||
//
|
||||
|
||||
#ifndef CEF_INCLUDE_CEF_REGISTRATION_H_
|
||||
#define CEF_INCLUDE_CEF_REGISTRATION_H_
|
||||
#pragma once
|
||||
|
||||
#include "include/cef_base.h"
|
||||
|
||||
///
|
||||
// Generic callback interface used for managing the lifespan of a registration.
|
||||
///
|
||||
/*--cef(source=library)--*/
|
||||
class CefRegistration : public virtual CefBaseRefCounted {};
|
||||
|
||||
#endif // CEF_INCLUDE_CEF_REGISTRATION_H_
|
@@ -65,7 +65,7 @@ class CefRenderHandler : public virtual CefBaseRefCounted {
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefAccessibilityHandler> GetAccessibilityHandler() {
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
///
|
||||
|
@@ -93,7 +93,7 @@ class CefRenderProcessHandler : public virtual CefBaseRefCounted {
|
||||
// Return the handler for browser load status events.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefLoadHandler> GetLoadHandler() { return nullptr; }
|
||||
virtual CefRefPtr<CefLoadHandler> GetLoadHandler() { return NULL; }
|
||||
|
||||
///
|
||||
// Called immediately after the V8 context for a frame has been created. To
|
||||
|
@@ -44,7 +44,6 @@
|
||||
#include "include/cef_cookie.h"
|
||||
#include "include/cef_extension.h"
|
||||
#include "include/cef_extension_handler.h"
|
||||
#include "include/cef_media_router.h"
|
||||
#include "include/cef_values.h"
|
||||
|
||||
class CefRequestContextHandler;
|
||||
@@ -362,12 +361,6 @@ class CefRequestContext : public virtual CefBaseRefCounted {
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefExtension> GetExtension(
|
||||
const CefString& extension_id) = 0;
|
||||
|
||||
///
|
||||
// Returns the MediaRouter object associated with this context.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefMediaRouter> GetMediaRouter() = 0;
|
||||
};
|
||||
|
||||
#endif // CEF_INCLUDE_CEF_REQUEST_CONTEXT_H_
|
||||
|
@@ -119,7 +119,7 @@ class CefRequestContextHandler : public virtual CefBaseRefCounted {
|
||||
bool is_download,
|
||||
const CefString& request_initiator,
|
||||
bool& disable_default_handling) {
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
};
|
||||
|
||||
|
@@ -145,7 +145,7 @@ class CefRequestHandler : public virtual CefBaseRefCounted {
|
||||
bool is_download,
|
||||
const CefString& request_initiator,
|
||||
bool& disable_default_handling) {
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
///
|
||||
|
@@ -72,7 +72,7 @@ class CefResourceRequestHandler : public virtual CefBaseRefCounted {
|
||||
CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame,
|
||||
CefRefPtr<CefRequest> request) {
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
///
|
||||
@@ -109,7 +109,7 @@ class CefResourceRequestHandler : public virtual CefBaseRefCounted {
|
||||
CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame,
|
||||
CefRefPtr<CefRequest> request) {
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
///
|
||||
@@ -163,7 +163,7 @@ class CefResourceRequestHandler : public virtual CefBaseRefCounted {
|
||||
CefRefPtr<CefFrame> frame,
|
||||
CefRefPtr<CefRequest> request,
|
||||
CefRefPtr<CefResponse> response) {
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
///
|
||||
|
@@ -1107,8 +1107,9 @@ typedef enum {
|
||||
TT_LINK = 0,
|
||||
|
||||
///
|
||||
// Source is some other "explicit" navigation. This is the default value for
|
||||
// navigations where the actual type is unknown. See also TT_DIRECT_LOAD_FLAG.
|
||||
// Source is some other "explicit" navigation action such as creating a new
|
||||
// browser or using the LoadURL function. This is also the default value
|
||||
// for navigations where the actual type is unknown.
|
||||
///
|
||||
TT_EXPLICIT = 1,
|
||||
|
||||
@@ -1160,15 +1161,9 @@ typedef enum {
|
||||
|
||||
///
|
||||
// Used the Forward or Back function to navigate among browsing history.
|
||||
// Will be ORed to the transition type for the original load.
|
||||
///
|
||||
TT_FORWARD_BACK_FLAG = 0x01000000,
|
||||
|
||||
///
|
||||
// Loaded a URL directly via CreateBrowser, LoadURL or LoadRequest.
|
||||
///
|
||||
TT_DIRECT_LOAD_FLAG = 0x02000000,
|
||||
|
||||
///
|
||||
// The beginning of a navigation chain.
|
||||
///
|
||||
@@ -1775,7 +1770,6 @@ typedef enum {
|
||||
EVENTFLAG_IS_KEY_PAD = 1 << 9,
|
||||
EVENTFLAG_IS_LEFT = 1 << 10,
|
||||
EVENTFLAG_IS_RIGHT = 1 << 11,
|
||||
EVENTFLAG_ALTGR_DOWN = 1 << 12,
|
||||
} cef_event_flags_t;
|
||||
|
||||
///
|
||||
@@ -2293,10 +2287,21 @@ typedef enum {
|
||||
///
|
||||
UU_URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS = 1 << 3,
|
||||
|
||||
///
|
||||
// Unescapes characters that can be used in spoofing attempts (such as LOCK)
|
||||
// and control characters (such as BiDi control characters and %01). This
|
||||
// INCLUDES NULLs. This is used for rare cases such as data: URL decoding
|
||||
// where the result is binary data.
|
||||
//
|
||||
// DO NOT use UU_SPOOFING_AND_CONTROL_CHARS if the URL is going to be
|
||||
// displayed in the UI for security reasons.
|
||||
///
|
||||
UU_SPOOFING_AND_CONTROL_CHARS = 1 << 4,
|
||||
|
||||
///
|
||||
// URL queries use "+" for space. This flag controls that replacement.
|
||||
///
|
||||
UU_REPLACE_PLUS_WITH_SPACE = 1 << 4,
|
||||
UU_REPLACE_PLUS_WITH_SPACE = 1 << 5,
|
||||
} cef_uri_unescape_rule_t;
|
||||
|
||||
///
|
||||
@@ -2943,36 +2948,6 @@ typedef struct _cef_composition_underline_t {
|
||||
int thick;
|
||||
} cef_composition_underline_t;
|
||||
|
||||
///
|
||||
// Result codes for CefMediaRouter::CreateRoute. These constants match
|
||||
// their equivalents in Chromium's route_request_result.h and should not be
|
||||
// renumbered.
|
||||
///
|
||||
typedef enum {
|
||||
CEF_MRCR_UNKNOWN_ERROR = 0,
|
||||
CEF_MRCR_OK = 1,
|
||||
CEF_MRCR_TIMED_OUT = 2,
|
||||
CEF_MRCR_ROUTE_NOT_FOUND = 3,
|
||||
CEF_MRCR_SINK_NOT_FOUND = 4,
|
||||
CEF_MRCR_INVALID_ORIGIN = 5,
|
||||
CEF_MRCR_NO_SUPPORTED_PROVIDER = 7,
|
||||
CEF_MRCR_CANCELLED = 8,
|
||||
CEF_MRCR_ROUTE_ALREADY_EXISTS = 9,
|
||||
|
||||
CEF_MRCR_TOTAL_COUNT = 11 // The total number of values.
|
||||
} cef_media_route_create_result_t;
|
||||
|
||||
///
|
||||
// Connection state for a MediaRoute object.
|
||||
///
|
||||
typedef enum {
|
||||
CEF_MRCS_UNKNOWN,
|
||||
CEF_MRCS_CONNECTING,
|
||||
CEF_MRCS_CONNECTED,
|
||||
CEF_MRCS_CLOSED,
|
||||
CEF_MRCS_TERMINATED,
|
||||
} cef_media_route_connection_state_t;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@@ -75,7 +75,7 @@ class CefWindowDelegate : public CefPanelDelegate {
|
||||
virtual CefRefPtr<CefWindow> GetParentWindow(CefRefPtr<CefWindow> window,
|
||||
bool* is_menu,
|
||||
bool* can_activate_menu) {
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
///
|
||||
|
@@ -11,7 +11,6 @@
|
||||
#include "libcef/browser/context.h"
|
||||
#include "libcef/browser/download_manager_delegate.h"
|
||||
#include "libcef/browser/extensions/extension_system.h"
|
||||
#include "libcef/browser/media_router/media_router_manager.h"
|
||||
#include "libcef/browser/prefs/browser_prefs.h"
|
||||
#include "libcef/browser/request_context_impl.h"
|
||||
#include "libcef/browser/ssl_host_state_delegate.h"
|
||||
@@ -38,7 +37,7 @@
|
||||
#include "components/proxy_config/pref_proxy_config_tracker_impl.h"
|
||||
#include "components/user_prefs/user_prefs.h"
|
||||
#include "components/visitedlink/browser/visitedlink_event_listener.h"
|
||||
#include "components/visitedlink/browser/visitedlink_writer.h"
|
||||
#include "components/visitedlink/browser/visitedlink_master.h"
|
||||
#include "components/zoom/zoom_event_manager.h"
|
||||
#include "content/public/browser/browser_task_traits.h"
|
||||
#include "content/public/browser/browser_thread.h"
|
||||
@@ -165,16 +164,11 @@ base::LazyInstance<ImplManager>::DestructorAtExit g_manager =
|
||||
base::LazyInstance<ImplManager>::Leaky g_manager = LAZY_INSTANCE_INITIALIZER;
|
||||
#endif
|
||||
|
||||
CefBrowserContext* GetSelf(base::WeakPtr<CefBrowserContext> self) {
|
||||
CEF_REQUIRE_UIT();
|
||||
return self.get();
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
// Creates and manages VisitedLinkEventListener objects for each
|
||||
// CefBrowserContext sharing the same VisitedLinkWriter.
|
||||
class CefVisitedLinkListener : public visitedlink::VisitedLinkWriter::Listener {
|
||||
// CefBrowserContext sharing the same VisitedLinkMaster.
|
||||
class CefVisitedLinkListener : public visitedlink::VisitedLinkMaster::Listener {
|
||||
public:
|
||||
CefVisitedLinkListener() { DCHECK(listener_map_.empty()); }
|
||||
|
||||
@@ -192,7 +186,7 @@ class CefVisitedLinkListener : public visitedlink::VisitedLinkWriter::Listener {
|
||||
listener_map_.erase(it);
|
||||
}
|
||||
|
||||
// visitedlink::VisitedLinkWriter::Listener methods.
|
||||
// visitedlink::VisitedLinkMaster::Listener methods.
|
||||
|
||||
void NewTable(base::ReadOnlySharedMemoryRegion* table_region) override {
|
||||
CEF_REQUIRE_UIT();
|
||||
@@ -226,9 +220,8 @@ class CefVisitedLinkListener : public visitedlink::VisitedLinkWriter::Listener {
|
||||
};
|
||||
|
||||
CefBrowserContext::CefBrowserContext(const CefRequestContextSettings& settings)
|
||||
: settings_(settings), weak_ptr_factory_(this) {
|
||||
: settings_(settings) {
|
||||
g_manager.Get().AddImpl(this);
|
||||
getter_ = base::BindRepeating(GetSelf, weak_ptr_factory_.GetWeakPtr());
|
||||
}
|
||||
|
||||
CefBrowserContext::~CefBrowserContext() {
|
||||
@@ -240,9 +233,6 @@ CefBrowserContext::~CefBrowserContext() {
|
||||
// Unregister the context first to avoid re-entrancy during shutdown.
|
||||
g_manager.Get().RemoveImpl(this, cache_path_);
|
||||
|
||||
// Destroy objects that may hold references to the MediaRouter.
|
||||
media_router_manager_.reset();
|
||||
|
||||
// Send notifications to clean up objects associated with this Profile.
|
||||
MaybeSendDestroyedNotification();
|
||||
|
||||
@@ -351,7 +341,7 @@ void CefBrowserContext::Initialize() {
|
||||
if (!cache_path_.empty())
|
||||
visited_link_path = cache_path_.Append(FILE_PATH_LITERAL("Visited Links"));
|
||||
visitedlink_listener_ = new CefVisitedLinkListener;
|
||||
visitedlink_master_.reset(new visitedlink::VisitedLinkWriter(
|
||||
visitedlink_master_.reset(new visitedlink::VisitedLinkMaster(
|
||||
visitedlink_listener_, this, !visited_link_path.empty(), false,
|
||||
visited_link_path, 0));
|
||||
visitedlink_listener_->CreateListenerForContext(this);
|
||||
@@ -592,7 +582,7 @@ HostContentSettingsMap* CefBrowserContext::GetHostContentSettingsMap() {
|
||||
plugin_policy = CONTENT_SETTING_BLOCK;
|
||||
}
|
||||
host_content_settings_map_->SetDefaultContentSetting(
|
||||
ContentSettingsType::PLUGINS, plugin_policy);
|
||||
CONTENT_SETTINGS_TYPE_PLUGINS, plugin_policy);
|
||||
}
|
||||
}
|
||||
return host_content_settings_map_.get();
|
||||
@@ -822,11 +812,3 @@ bool CefBrowserContext::IsPrintPreviewSupported() const {
|
||||
|
||||
return !GetPrefs()->GetBoolean(prefs::kPrintPreviewDisabled);
|
||||
}
|
||||
|
||||
CefMediaRouterManager* CefBrowserContext::GetMediaRouterManager() {
|
||||
CEF_REQUIRE_UIT();
|
||||
if (!media_router_manager_) {
|
||||
media_router_manager_.reset(new CefMediaRouterManager(this));
|
||||
}
|
||||
return media_router_manager_.get();
|
||||
}
|
||||
|
@@ -13,10 +13,8 @@
|
||||
#include "libcef/browser/request_context_handler_map.h"
|
||||
#include "libcef/browser/resource_context.h"
|
||||
|
||||
#include "base/callback.h"
|
||||
#include "base/files/file_path.h"
|
||||
#include "base/memory/ref_counted.h"
|
||||
#include "base/memory/weak_ptr.h"
|
||||
#include "chrome/browser/download/download_prefs.h"
|
||||
#include "chrome/common/plugin.mojom.h"
|
||||
#include "components/proxy_config/pref_proxy_config_tracker.h"
|
||||
@@ -86,7 +84,6 @@
|
||||
*/
|
||||
|
||||
class CefDownloadManagerDelegate;
|
||||
class CefMediaRouterManager;
|
||||
class CefRequestContextImpl;
|
||||
class CefSSLHostStateDelegate;
|
||||
class CefVisitedLinkListener;
|
||||
@@ -98,7 +95,7 @@ class CefExtensionSystem;
|
||||
}
|
||||
|
||||
namespace visitedlink {
|
||||
class VisitedLinkWriter;
|
||||
class VisitedLinkMaster;
|
||||
}
|
||||
|
||||
// Main entry point for configuring behavior on a per-browser basis. An instance
|
||||
@@ -282,13 +279,6 @@ class CefBrowserContext : public ChromeProfileStub,
|
||||
// Returns true if this context supports print preview.
|
||||
bool IsPrintPreviewSupported() const;
|
||||
|
||||
CefMediaRouterManager* GetMediaRouterManager();
|
||||
|
||||
// Returns the BrowserContext, or nullptr if the BrowserContext has already
|
||||
// been destroyed.
|
||||
using Getter = base::RepeatingCallback<CefBrowserContext*()>;
|
||||
Getter getter() const { return getter_; }
|
||||
|
||||
private:
|
||||
// Allow deletion via std::unique_ptr().
|
||||
friend std::default_delete<CefBrowserContext>;
|
||||
@@ -308,7 +298,7 @@ class CefBrowserContext : public ChromeProfileStub,
|
||||
std::unique_ptr<CefDownloadManagerDelegate> download_manager_delegate_;
|
||||
std::unique_ptr<CefSSLHostStateDelegate> ssl_host_state_delegate_;
|
||||
scoped_refptr<HostContentSettingsMap> host_content_settings_map_;
|
||||
std::unique_ptr<visitedlink::VisitedLinkWriter> visitedlink_master_;
|
||||
std::unique_ptr<visitedlink::VisitedLinkMaster> visitedlink_master_;
|
||||
// |visitedlink_listener_| is owned by visitedlink_master_.
|
||||
CefVisitedLinkListener* visitedlink_listener_;
|
||||
bool should_persist_session_cookies_ = false;
|
||||
@@ -325,8 +315,6 @@ class CefBrowserContext : public ChromeProfileStub,
|
||||
|
||||
std::unique_ptr<DownloadPrefs> download_prefs_;
|
||||
|
||||
std::unique_ptr<CefMediaRouterManager> media_router_manager_;
|
||||
|
||||
// Map IDs to CefRequestContextHandler objects.
|
||||
CefRequestContextHandlerMap handler_map_;
|
||||
|
||||
@@ -350,9 +338,6 @@ class CefBrowserContext : public ChromeProfileStub,
|
||||
typedef std::set<int> NodeIdSet;
|
||||
NodeIdSet node_id_set_;
|
||||
|
||||
Getter getter_;
|
||||
base::WeakPtrFactory<CefBrowserContext> weak_ptr_factory_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(CefBrowserContext);
|
||||
};
|
||||
|
||||
|
@@ -381,8 +381,7 @@ CefRefPtr<CefBrowserHostImpl> CefBrowserHostImpl::Create(
|
||||
create_params.extension_host_type);
|
||||
} else if (!create_params.url.is_empty()) {
|
||||
browser->LoadMainFrameURL(create_params.url.spec(), content::Referrer(),
|
||||
CefFrameHostImpl::kPageTransitionExplicit,
|
||||
std::string());
|
||||
ui::PAGE_TRANSITION_TYPED, std::string());
|
||||
}
|
||||
|
||||
return browser.get();
|
||||
@@ -592,7 +591,7 @@ void CefBrowserHostImpl::CloseBrowser(bool force_close) {
|
||||
}
|
||||
|
||||
content::WebContents* contents = web_contents();
|
||||
if (contents && contents->NeedToFireBeforeUnloadOrUnload()) {
|
||||
if (contents && contents->NeedToFireBeforeUnload()) {
|
||||
// Will result in a call to BeforeUnloadFired() and, if the close isn't
|
||||
// canceled, CloseContents().
|
||||
contents->DispatchBeforeUnload(false /* auto_cancel */);
|
||||
@@ -764,9 +763,8 @@ void CefBrowserHostImpl::DownloadImage(
|
||||
return;
|
||||
|
||||
web_contents()->DownloadImage(
|
||||
gurl, is_favicon, max_image_size,
|
||||
max_image_size * gfx::ImageSkia::GetMaxSupportedScale(), bypass_cache,
|
||||
base::BindOnce(OnDownloadImage, max_image_size, callback));
|
||||
gurl, is_favicon, max_image_size * gfx::ImageSkia::GetMaxSupportedScale(),
|
||||
bypass_cache, base::BindOnce(OnDownloadImage, max_image_size, callback));
|
||||
}
|
||||
|
||||
void CefBrowserHostImpl::Print() {
|
||||
@@ -929,7 +927,7 @@ void CefBrowserHostImpl::GetNavigationEntries(
|
||||
CefRefPtr<CefNavigationEntryImpl> entry =
|
||||
new CefNavigationEntryImpl(controller.GetEntryAtIndex(current));
|
||||
visitor->Visit(entry.get(), true, current, total);
|
||||
entry->Detach(nullptr);
|
||||
entry->Detach(NULL);
|
||||
} else {
|
||||
// Visit all entries.
|
||||
bool cont = true;
|
||||
@@ -937,7 +935,7 @@ void CefBrowserHostImpl::GetNavigationEntries(
|
||||
CefRefPtr<CefNavigationEntryImpl> entry =
|
||||
new CefNavigationEntryImpl(controller.GetEntryAtIndex(i));
|
||||
cont = visitor->Visit(entry.get(), (i == current), i, total);
|
||||
entry->Detach(nullptr);
|
||||
entry->Detach(NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1165,7 +1163,11 @@ void CefBrowserHostImpl::SendKeyEvent(const CefKeyEvent& event) {
|
||||
if (!web_contents() || !platform_delegate_)
|
||||
return;
|
||||
|
||||
platform_delegate_->SendKeyEvent(event);
|
||||
content::NativeWebKeyboardEvent web_event(blink::WebInputEvent::kUndefined,
|
||||
blink::WebInputEvent::kNoModifiers,
|
||||
ui::EventTimeForNow());
|
||||
platform_delegate_->TranslateKeyEvent(web_event, event);
|
||||
platform_delegate_->SendKeyEvent(web_event);
|
||||
}
|
||||
|
||||
void CefBrowserHostImpl::SendMouseClickEvent(const CefMouseEvent& event,
|
||||
@@ -1182,7 +1184,10 @@ void CefBrowserHostImpl::SendMouseClickEvent(const CefMouseEvent& event,
|
||||
if (!web_contents() || !platform_delegate_)
|
||||
return;
|
||||
|
||||
platform_delegate_->SendMouseClickEvent(event, type, mouseUp, clickCount);
|
||||
blink::WebMouseEvent web_event;
|
||||
platform_delegate_->TranslateClickEvent(web_event, event, type, mouseUp,
|
||||
clickCount);
|
||||
platform_delegate_->SendMouseEvent(web_event);
|
||||
}
|
||||
|
||||
void CefBrowserHostImpl::SendMouseMoveEvent(const CefMouseEvent& event,
|
||||
@@ -1197,7 +1202,9 @@ void CefBrowserHostImpl::SendMouseMoveEvent(const CefMouseEvent& event,
|
||||
if (!web_contents() || !platform_delegate_)
|
||||
return;
|
||||
|
||||
platform_delegate_->SendMouseMoveEvent(event, mouseLeave);
|
||||
blink::WebMouseEvent web_event;
|
||||
platform_delegate_->TranslateMoveEvent(web_event, event, mouseLeave);
|
||||
platform_delegate_->SendMouseEvent(web_event);
|
||||
}
|
||||
|
||||
void CefBrowserHostImpl::SendMouseWheelEvent(const CefMouseEvent& event,
|
||||
@@ -1218,7 +1225,9 @@ void CefBrowserHostImpl::SendMouseWheelEvent(const CefMouseEvent& event,
|
||||
if (!web_contents() || !platform_delegate_)
|
||||
return;
|
||||
|
||||
platform_delegate_->SendMouseWheelEvent(event, deltaX, deltaY);
|
||||
blink::WebMouseWheelEvent web_event;
|
||||
platform_delegate_->TranslateWheelEvent(web_event, event, deltaX, deltaY);
|
||||
platform_delegate_->SendMouseWheelEvent(web_event);
|
||||
}
|
||||
|
||||
void CefBrowserHostImpl::SendFocusEvent(bool setFocus) {
|
||||
@@ -1545,19 +1554,19 @@ void CefBrowserHostImpl::DestroyBrowser() {
|
||||
// Disassociate the platform delegate from this browser.
|
||||
platform_delegate_->BrowserDestroyed(this);
|
||||
|
||||
registrar_.reset(nullptr);
|
||||
content::WebContentsObserver::Observe(nullptr);
|
||||
registrar_.reset(NULL);
|
||||
content::WebContentsObserver::Observe(NULL);
|
||||
if (owned_web_contents_)
|
||||
owned_web_contents_.reset(nullptr);
|
||||
owned_web_contents_.reset(NULL);
|
||||
|
||||
// Delete objects created by the platform delegate that may be referenced by
|
||||
// the WebContents.
|
||||
file_dialog_manager_.reset(nullptr);
|
||||
javascript_dialog_manager_.reset(nullptr);
|
||||
menu_manager_.reset(nullptr);
|
||||
file_dialog_manager_.reset(NULL);
|
||||
javascript_dialog_manager_.reset(NULL);
|
||||
menu_manager_.reset(NULL);
|
||||
|
||||
// Delete the platform delegate.
|
||||
platform_delegate_.reset(nullptr);
|
||||
platform_delegate_.reset(NULL);
|
||||
|
||||
CefBrowserInfoManager::GetInstance()->RemoveBrowserInfo(browser_info_);
|
||||
browser_info_->SetBrowser(nullptr);
|
||||
@@ -1641,6 +1650,30 @@ void CefBrowserHostImpl::LoadMainFrameURL(const std::string& url,
|
||||
}
|
||||
}
|
||||
|
||||
void CefBrowserHostImpl::OnFrameFocused(CefRefPtr<CefFrameHostImpl> frame) {
|
||||
DCHECK(frame);
|
||||
|
||||
CefRefPtr<CefFrameHostImpl> previous_frame;
|
||||
{
|
||||
base::AutoLock lock_scope(state_lock_);
|
||||
previous_frame = focused_frame_;
|
||||
if (frame->IsMain())
|
||||
focused_frame_ = nullptr;
|
||||
else
|
||||
focused_frame_ = frame;
|
||||
}
|
||||
|
||||
if (!previous_frame) {
|
||||
// The main frame is focused by default.
|
||||
previous_frame = browser_info_->GetMainFrame();
|
||||
}
|
||||
|
||||
if (previous_frame->GetIdentifier() != frame->GetIdentifier()) {
|
||||
previous_frame->SetFocused(false);
|
||||
frame->SetFocused(true);
|
||||
}
|
||||
}
|
||||
|
||||
void CefBrowserHostImpl::OnDidFinishLoad(CefRefPtr<CefFrameHostImpl> frame,
|
||||
const GURL& validated_url,
|
||||
int http_status_code) {
|
||||
@@ -2086,7 +2119,8 @@ void CefBrowserHostImpl::LoadingStateChanged(content::WebContents* source,
|
||||
}
|
||||
}
|
||||
|
||||
void CefBrowserHostImpl::LoadProgressChanged(double progress) {
|
||||
void CefBrowserHostImpl::LoadProgressChanged(content::WebContents* source,
|
||||
double progress) {
|
||||
if (client_.get()) {
|
||||
CefRefPtr<CefDisplayHandler> handler = client_->GetDisplayHandler();
|
||||
if (handler.get()) {
|
||||
@@ -2717,34 +2751,6 @@ bool CefBrowserHostImpl::OnMessageReceived(
|
||||
return false;
|
||||
}
|
||||
|
||||
void CefBrowserHostImpl::OnFrameFocused(
|
||||
content::RenderFrameHost* render_frame_host) {
|
||||
CefRefPtr<CefFrameHostImpl> frame =
|
||||
static_cast<CefFrameHostImpl*>(GetFrameForHost(render_frame_host).get());
|
||||
if (!frame || frame->IsFocused())
|
||||
return;
|
||||
|
||||
CefRefPtr<CefFrameHostImpl> previous_frame;
|
||||
{
|
||||
base::AutoLock lock_scope(state_lock_);
|
||||
previous_frame = focused_frame_;
|
||||
if (frame->IsMain())
|
||||
focused_frame_ = nullptr;
|
||||
else
|
||||
focused_frame_ = frame;
|
||||
}
|
||||
|
||||
if (!previous_frame) {
|
||||
// The main frame is focused by default.
|
||||
previous_frame = browser_info_->GetMainFrame();
|
||||
}
|
||||
|
||||
if (previous_frame->GetIdentifier() != frame->GetIdentifier()) {
|
||||
previous_frame->SetFocused(false);
|
||||
frame->SetFocused(true);
|
||||
}
|
||||
}
|
||||
|
||||
void CefBrowserHostImpl::AccessibilityEventReceived(
|
||||
const content::AXEventNotificationDetails& content_event_bundle) {
|
||||
// Only needed in windowless mode.
|
||||
@@ -2873,7 +2879,7 @@ CefBrowserHostImpl::CefBrowserHostImpl(
|
||||
is_in_onsetfocus_(false),
|
||||
focus_on_editable_field_(false),
|
||||
mouse_cursor_change_disabled_(false),
|
||||
devtools_frontend_(nullptr),
|
||||
devtools_frontend_(NULL),
|
||||
extension_(extension) {
|
||||
if (opener.get() && !platform_delegate_->IsViewsHosted()) {
|
||||
// GetOpenerWindowHandle() only returns a value for non-views-hosted
|
||||
@@ -3086,7 +3092,7 @@ void CefBrowserHostImpl::OnTitleChange(const base::string16& title) {
|
||||
|
||||
void CefBrowserHostImpl::OnDevToolsWebContentsDestroyed() {
|
||||
devtools_observer_.reset();
|
||||
devtools_frontend_ = nullptr;
|
||||
devtools_frontend_ = NULL;
|
||||
}
|
||||
|
||||
void CefBrowserHostImpl::EnsureFileDialogManager() {
|
||||
|
@@ -313,6 +313,7 @@ class CefBrowserHostImpl : public CefBrowserHost,
|
||||
const std::string& extra_headers);
|
||||
|
||||
// Called from CefFrameHostImpl.
|
||||
void OnFrameFocused(CefRefPtr<CefFrameHostImpl> frame);
|
||||
void OnDidFinishLoad(CefRefPtr<CefFrameHostImpl> frame,
|
||||
const GURL& validated_url,
|
||||
int http_status_code);
|
||||
@@ -385,7 +386,8 @@ class CefBrowserHostImpl : public CefBrowserHost,
|
||||
bool* was_blocked) override;
|
||||
void LoadingStateChanged(content::WebContents* source,
|
||||
bool to_different_document) override;
|
||||
void LoadProgressChanged(double progress) override;
|
||||
void LoadProgressChanged(content::WebContents* source,
|
||||
double progress) override;
|
||||
void CloseContents(content::WebContents* source) override;
|
||||
void UpdateTargetURL(content::WebContents* source, const GURL& url) override;
|
||||
bool DidAddMessageToConsole(content::WebContents* source,
|
||||
@@ -491,7 +493,6 @@ class CefBrowserHostImpl : public CefBrowserHost,
|
||||
bool OnMessageReceived(const IPC::Message& message) override;
|
||||
bool OnMessageReceived(const IPC::Message& message,
|
||||
content::RenderFrameHost* render_frame_host) override;
|
||||
void OnFrameFocused(content::RenderFrameHost* render_frame_host) override;
|
||||
void AccessibilityEventReceived(
|
||||
const content::AXEventNotificationDetails& content_event_bundle) override;
|
||||
void AccessibilityLocationChangesReceived(
|
||||
|
@@ -11,11 +11,9 @@
|
||||
#include "libcef/browser/extensions/browser_extensions_util.h"
|
||||
#include "libcef/browser/thread_util.h"
|
||||
#include "libcef/common/cef_messages.h"
|
||||
#include "libcef/common/cef_switches.h"
|
||||
#include "libcef/common/extensions/extensions_util.h"
|
||||
#include "libcef/common/values_impl.h"
|
||||
|
||||
#include "base/command_line.h"
|
||||
#include "base/logging.h"
|
||||
#include "content/common/view_messages.h"
|
||||
#include "content/public/browser/render_frame_host.h"
|
||||
@@ -25,9 +23,6 @@
|
||||
|
||||
namespace {
|
||||
|
||||
// Timeout delay for new browser info responses.
|
||||
const int64_t kNewBrowserInfoResponseTimeoutMs = 2000;
|
||||
|
||||
void TranslatePopupFeatures(const blink::mojom::WindowFeatures& webKitFeatures,
|
||||
CefPopupFeatures& features) {
|
||||
features.x = static_cast<int>(webKitFeatures.x);
|
||||
@@ -49,7 +44,7 @@ CefBrowserInfoManager* g_info_manager = nullptr;
|
||||
|
||||
} // namespace
|
||||
|
||||
CefBrowserInfoManager::CefBrowserInfoManager() {
|
||||
CefBrowserInfoManager::CefBrowserInfoManager() : next_browser_id_(0) {
|
||||
DCHECK(!g_info_manager);
|
||||
g_info_manager = this;
|
||||
}
|
||||
@@ -91,11 +86,10 @@ scoped_refptr<CefBrowserInfo> CefBrowserInfoManager::CreatePopupBrowserInfo(
|
||||
new CefBrowserInfo(++next_browser_id_, true, is_windowless, extra_info);
|
||||
browser_info_list_.push_back(browser_info);
|
||||
|
||||
// Continue any pending NewBrowserInfo request.
|
||||
// Continue any pending NewBrowserInfo requests.
|
||||
auto it = pending_new_browser_info_map_.find(frame_id);
|
||||
if (it != pending_new_browser_info_map_.end()) {
|
||||
SendNewBrowserInfoResponse(render_process_id, browser_info,
|
||||
false /* is_guest_view */,
|
||||
SendNewBrowserInfoResponse(render_process_id, browser_info, false,
|
||||
it->second->reply_msg);
|
||||
pending_new_browser_info_map_.erase(it);
|
||||
}
|
||||
@@ -145,7 +139,7 @@ bool CefBrowserInfoManager::CanCreateWindow(
|
||||
std::unique_ptr<CefWindowInfo> window_info(new CefWindowInfo);
|
||||
|
||||
#if defined(OS_WIN)
|
||||
window_info->SetAsPopup(nullptr, CefString());
|
||||
window_info->SetAsPopup(NULL, CefString());
|
||||
#endif
|
||||
|
||||
auto pending_popup = std::make_unique<CefBrowserInfoManager::PendingPopup>();
|
||||
@@ -293,27 +287,13 @@ void CefBrowserInfoManager::OnGetNewBrowserInfo(int render_process_id,
|
||||
DCHECK(pending_new_browser_info_map_.find(frame_id) ==
|
||||
pending_new_browser_info_map_.end());
|
||||
|
||||
const int timeout_id = ++next_timeout_id_;
|
||||
|
||||
// Queue the request.
|
||||
std::unique_ptr<PendingNewBrowserInfo> pending(new PendingNewBrowserInfo());
|
||||
pending->render_process_id = render_process_id;
|
||||
pending->render_routing_id = render_routing_id;
|
||||
pending->timeout_id = timeout_id;
|
||||
pending->reply_msg = reply_msg;
|
||||
pending_new_browser_info_map_.insert(
|
||||
std::make_pair(frame_id, std::move(pending)));
|
||||
|
||||
// Register a timeout for the pending response so that the renderer process
|
||||
// doesn't hang forever.
|
||||
if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
|
||||
switches::kDisableNewBrowserInfoTimeout)) {
|
||||
CEF_POST_DELAYED_TASK(
|
||||
CEF_UIT,
|
||||
base::BindOnce(&CefBrowserInfoManager::TimeoutNewBrowserInfoResponse,
|
||||
frame_id, timeout_id),
|
||||
kNewBrowserInfoResponseTimeoutMs);
|
||||
}
|
||||
}
|
||||
|
||||
void CefBrowserInfoManager::RemoveBrowserInfo(
|
||||
@@ -518,52 +498,19 @@ void CefBrowserInfoManager::SendNewBrowserInfoResponse(
|
||||
}
|
||||
|
||||
CefProcessHostMsg_GetNewBrowserInfo_Params params;
|
||||
params.browser_id = browser_info->browser_id();
|
||||
params.is_windowless = browser_info->is_windowless();
|
||||
params.is_popup = browser_info->is_popup();
|
||||
params.is_guest_view = is_guest_view;
|
||||
|
||||
if (browser_info) {
|
||||
params.browser_id = browser_info->browser_id();
|
||||
params.is_windowless = browser_info->is_windowless();
|
||||
params.is_popup = browser_info->is_popup();
|
||||
|
||||
auto extra_info = browser_info->extra_info();
|
||||
if (extra_info) {
|
||||
auto extra_info_impl =
|
||||
static_cast<CefDictionaryValueImpl*>(extra_info.get());
|
||||
auto extra_info_value = extra_info_impl->CopyValue();
|
||||
extra_info_value->Swap(¶ms.extra_info);
|
||||
}
|
||||
} else {
|
||||
// The new browser info response has timed out.
|
||||
params.browser_id = -1;
|
||||
auto extra_info = browser_info->extra_info();
|
||||
if (extra_info) {
|
||||
auto extra_info_impl =
|
||||
static_cast<CefDictionaryValueImpl*>(extra_info.get());
|
||||
auto extra_info_value = extra_info_impl->CopyValue();
|
||||
extra_info_value->Swap(¶ms.extra_info);
|
||||
}
|
||||
|
||||
CefProcessHostMsg_GetNewBrowserInfo::WriteReplyParams(reply_msg, params);
|
||||
host->Send(reply_msg);
|
||||
}
|
||||
|
||||
// static
|
||||
void CefBrowserInfoManager::TimeoutNewBrowserInfoResponse(int64_t frame_id,
|
||||
int timeout_id) {
|
||||
if (!g_info_manager)
|
||||
return;
|
||||
|
||||
base::AutoLock lock_scope(g_info_manager->browser_info_lock_);
|
||||
|
||||
// Continue the NewBrowserInfo request if it's still pending.
|
||||
auto it = g_info_manager->pending_new_browser_info_map_.find(frame_id);
|
||||
if (it != g_info_manager->pending_new_browser_info_map_.end()) {
|
||||
const auto& pending_info = it->second;
|
||||
// Don't accidentally timeout a new request for the same frame.
|
||||
if (pending_info->timeout_id != timeout_id)
|
||||
return;
|
||||
|
||||
LOG(ERROR) << "Timeout of new browser info response for frame process id "
|
||||
<< pending_info->render_process_id << " and routing id "
|
||||
<< pending_info->render_routing_id;
|
||||
|
||||
SendNewBrowserInfoResponse(pending_info->render_process_id, nullptr,
|
||||
false /* is_guest_view */,
|
||||
pending_info->reply_msg);
|
||||
g_info_manager->pending_new_browser_info_map_.erase(it);
|
||||
}
|
||||
}
|
||||
|
@@ -201,14 +201,10 @@ class CefBrowserInfoManager : public content::RenderProcessHostObserver {
|
||||
bool is_guest_view,
|
||||
IPC::Message* reply_msg);
|
||||
|
||||
// Time out a response if it's still pending.
|
||||
static void TimeoutNewBrowserInfoResponse(int64_t frame_id, int timeout_id);
|
||||
|
||||
// Pending request for OnGetNewBrowserInfo.
|
||||
struct PendingNewBrowserInfo {
|
||||
int render_process_id;
|
||||
int render_routing_id;
|
||||
int timeout_id;
|
||||
IPC::Message* reply_msg;
|
||||
};
|
||||
|
||||
@@ -217,7 +213,7 @@ class CefBrowserInfoManager : public content::RenderProcessHostObserver {
|
||||
// Access to the below members must be protected by |browser_info_lock_|.
|
||||
|
||||
BrowserInfoList browser_info_list_;
|
||||
int next_browser_id_ = 0;
|
||||
int next_browser_id_;
|
||||
|
||||
// Map of frame ID to info.
|
||||
using PendingNewBrowserInfoMap =
|
||||
@@ -228,8 +224,6 @@ class CefBrowserInfoManager : public content::RenderProcessHostObserver {
|
||||
using PendingPopupList = std::vector<std::unique_ptr<PendingPopup>>;
|
||||
PendingPopupList pending_popup_list_;
|
||||
|
||||
int next_timeout_id_ = 0;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(CefBrowserInfoManager);
|
||||
};
|
||||
|
||||
|
@@ -50,7 +50,6 @@
|
||||
#include "ui/wm/core/wm_state.h"
|
||||
|
||||
#if defined(OS_WIN)
|
||||
#include "chrome/browser/chrome_browser_main_win.h"
|
||||
#include "ui/base/cursor/cursor_loader_win.h"
|
||||
#endif
|
||||
#endif // defined(USE_AURA)
|
||||
@@ -72,14 +71,14 @@
|
||||
#include "libcef/browser/printing/print_dialog_linux.h"
|
||||
#endif
|
||||
|
||||
#if defined(OS_MACOSX) || defined(OS_WIN)
|
||||
#if defined(OS_MACOSX)
|
||||
#include "chrome/browser/browser_process.h"
|
||||
#include "components/os_crypt/os_crypt.h"
|
||||
#endif
|
||||
|
||||
CefBrowserMainParts::CefBrowserMainParts(
|
||||
const content::MainFunctionParams& parameters)
|
||||
: BrowserMainParts(), devtools_delegate_(nullptr) {}
|
||||
: BrowserMainParts(), devtools_delegate_(NULL) {}
|
||||
|
||||
CefBrowserMainParts::~CefBrowserMainParts() {
|
||||
constrained_window::SetConstrainedWindowViewsClient(nullptr);
|
||||
@@ -123,18 +122,12 @@ void CefBrowserMainParts::PreMainMessageLoopStart() {
|
||||
ui::TouchFactory::SetTouchDeviceListFromCommandLine();
|
||||
#endif
|
||||
|
||||
#if defined(OS_MACOSX) || defined(OS_WIN)
|
||||
#if defined(OS_MACOSX)
|
||||
// Initialize the OSCrypt.
|
||||
PrefService* local_state = g_browser_process->local_state();
|
||||
DCHECK(local_state);
|
||||
OSCrypt::Init(local_state);
|
||||
#endif
|
||||
|
||||
#if defined(OS_WIN)
|
||||
// installer_util references strings that are normally compiled into
|
||||
// setup.exe. In Chrome, these strings are in the locale files.
|
||||
ChromeBrowserMainPartsWin::SetupInstallerUtilStrings();
|
||||
#endif // defined(OS_WIN)
|
||||
}
|
||||
|
||||
void CefBrowserMainParts::PostMainMessageLoopStart() {
|
||||
@@ -220,12 +213,12 @@ void CefBrowserMainParts::PostMainMessageLoopRun() {
|
||||
// There should be no additional references to the global CefRequestContext
|
||||
// during shutdown. Did you forget to release a CefBrowser reference?
|
||||
DCHECK(global_request_context_->HasOneRef());
|
||||
global_request_context_ = nullptr;
|
||||
global_request_context_ = NULL;
|
||||
}
|
||||
|
||||
void CefBrowserMainParts::PostDestroyThreads() {
|
||||
if (extensions::ExtensionsEnabled()) {
|
||||
extensions::ExtensionsBrowserClient::Set(nullptr);
|
||||
extensions::ExtensionsBrowserClient::Set(NULL);
|
||||
extensions_browser_client_.reset();
|
||||
}
|
||||
|
||||
|
@@ -14,7 +14,7 @@ void CefBrowserMainParts::PlatformInitialize() {
|
||||
HRESULT res;
|
||||
|
||||
// Initialize common controls.
|
||||
res = CoInitialize(nullptr);
|
||||
res = CoInitialize(NULL);
|
||||
DCHECK(SUCCEEDED(res));
|
||||
INITCOMMONCONTROLSEX InitCtrlEx;
|
||||
InitCtrlEx.dwSize = sizeof(INITCOMMONCONTROLSEX);
|
||||
@@ -22,6 +22,6 @@ void CefBrowserMainParts::PlatformInitialize() {
|
||||
InitCommonControlsEx(&InitCtrlEx);
|
||||
|
||||
// Start COM stuff.
|
||||
res = OleInitialize(nullptr);
|
||||
res = OleInitialize(NULL);
|
||||
DCHECK(SUCCEEDED(res));
|
||||
}
|
||||
|
@@ -51,7 +51,7 @@ void CefBrowserMessageFilter::OnGetNewRenderThreadInfo(
|
||||
CefRefPtr<CefListValueImpl> listValuePtr(
|
||||
new CefListValueImpl(¶ms->extra_info, false, false));
|
||||
handler->OnRenderProcessThreadCreated(listValuePtr.get());
|
||||
listValuePtr->Detach(nullptr);
|
||||
listValuePtr->Detach(NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -14,7 +14,7 @@
|
||||
#include "content/public/browser/render_view_host.h"
|
||||
#include "content/public/browser/render_widget_host.h"
|
||||
|
||||
CefBrowserPlatformDelegate::CefBrowserPlatformDelegate() {}
|
||||
CefBrowserPlatformDelegate::CefBrowserPlatformDelegate() : browser_(nullptr) {}
|
||||
|
||||
CefBrowserPlatformDelegate::~CefBrowserPlatformDelegate() {
|
||||
DCHECK(!browser_);
|
||||
@@ -237,33 +237,32 @@ base::RepeatingClosure CefBrowserPlatformDelegate::GetBoundsChangedCallback() {
|
||||
}
|
||||
|
||||
// static
|
||||
int CefBrowserPlatformDelegate::TranslateWebEventModifiers(
|
||||
uint32 cef_modifiers) {
|
||||
int result = 0;
|
||||
int CefBrowserPlatformDelegate::TranslateModifiers(uint32 cef_modifiers) {
|
||||
int webkit_modifiers = 0;
|
||||
// Set modifiers based on key state.
|
||||
if (cef_modifiers & EVENTFLAG_SHIFT_DOWN)
|
||||
result |= blink::WebInputEvent::kShiftKey;
|
||||
webkit_modifiers |= blink::WebInputEvent::kShiftKey;
|
||||
if (cef_modifiers & EVENTFLAG_CONTROL_DOWN)
|
||||
result |= blink::WebInputEvent::kControlKey;
|
||||
webkit_modifiers |= blink::WebInputEvent::kControlKey;
|
||||
if (cef_modifiers & EVENTFLAG_ALT_DOWN)
|
||||
result |= blink::WebInputEvent::kAltKey;
|
||||
webkit_modifiers |= blink::WebInputEvent::kAltKey;
|
||||
if (cef_modifiers & EVENTFLAG_COMMAND_DOWN)
|
||||
result |= blink::WebInputEvent::kMetaKey;
|
||||
webkit_modifiers |= blink::WebInputEvent::kMetaKey;
|
||||
if (cef_modifiers & EVENTFLAG_LEFT_MOUSE_BUTTON)
|
||||
result |= blink::WebInputEvent::kLeftButtonDown;
|
||||
webkit_modifiers |= blink::WebInputEvent::kLeftButtonDown;
|
||||
if (cef_modifiers & EVENTFLAG_MIDDLE_MOUSE_BUTTON)
|
||||
result |= blink::WebInputEvent::kMiddleButtonDown;
|
||||
webkit_modifiers |= blink::WebInputEvent::kMiddleButtonDown;
|
||||
if (cef_modifiers & EVENTFLAG_RIGHT_MOUSE_BUTTON)
|
||||
result |= blink::WebInputEvent::kRightButtonDown;
|
||||
webkit_modifiers |= blink::WebInputEvent::kRightButtonDown;
|
||||
if (cef_modifiers & EVENTFLAG_CAPS_LOCK_ON)
|
||||
result |= blink::WebInputEvent::kCapsLockOn;
|
||||
webkit_modifiers |= blink::WebInputEvent::kCapsLockOn;
|
||||
if (cef_modifiers & EVENTFLAG_NUM_LOCK_ON)
|
||||
result |= blink::WebInputEvent::kNumLockOn;
|
||||
webkit_modifiers |= blink::WebInputEvent::kNumLockOn;
|
||||
if (cef_modifiers & EVENTFLAG_IS_LEFT)
|
||||
result |= blink::WebInputEvent::kIsLeft;
|
||||
webkit_modifiers |= blink::WebInputEvent::kIsLeft;
|
||||
if (cef_modifiers & EVENTFLAG_IS_RIGHT)
|
||||
result |= blink::WebInputEvent::kIsRight;
|
||||
webkit_modifiers |= blink::WebInputEvent::kIsRight;
|
||||
if (cef_modifiers & EVENTFLAG_IS_KEY_PAD)
|
||||
result |= blink::WebInputEvent::kIsKeyPad;
|
||||
return result;
|
||||
webkit_modifiers |= blink::WebInputEvent::kIsKeyPad;
|
||||
return webkit_modifiers;
|
||||
}
|
||||
|
@@ -148,16 +148,11 @@ class CefBrowserPlatformDelegate {
|
||||
virtual void WasResized() = 0;
|
||||
|
||||
// Send input events.
|
||||
virtual void SendKeyEvent(const CefKeyEvent& event) = 0;
|
||||
virtual void SendMouseClickEvent(const CefMouseEvent& event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) = 0;
|
||||
virtual void SendMouseMoveEvent(const CefMouseEvent& event,
|
||||
bool mouseLeave) = 0;
|
||||
virtual void SendMouseWheelEvent(const CefMouseEvent& event,
|
||||
int deltaX,
|
||||
int deltaY) = 0;
|
||||
virtual void SendKeyEvent(const content::NativeWebKeyboardEvent& event) = 0;
|
||||
virtual void SendMouseEvent(const blink::WebMouseEvent& event) = 0;
|
||||
virtual void SendMouseWheelEvent(const blink::WebMouseWheelEvent& event) = 0;
|
||||
|
||||
// Send touch events.
|
||||
virtual void SendTouchEvent(const CefTouchEvent& event) = 0;
|
||||
|
||||
// Send focus event. The browser's WebContents may be NULL when this method is
|
||||
@@ -192,6 +187,22 @@ class CefBrowserPlatformDelegate {
|
||||
// Invoke platform specific handling for the external protocol.
|
||||
static void HandleExternalProtocol(const GURL& url);
|
||||
|
||||
// Translate CEF events to Chromium/Blink events.
|
||||
virtual void TranslateKeyEvent(content::NativeWebKeyboardEvent& result,
|
||||
const CefKeyEvent& key_event) const = 0;
|
||||
virtual void TranslateClickEvent(blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) const = 0;
|
||||
virtual void TranslateMoveEvent(blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
bool mouseLeave) const = 0;
|
||||
virtual void TranslateWheelEvent(blink::WebMouseWheelEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
int deltaX,
|
||||
int deltaY) const = 0;
|
||||
|
||||
// Returns the OS event handle, if any, associated with |event|.
|
||||
virtual CefEventHandle GetEventHandle(
|
||||
const content::NativeWebKeyboardEvent& event) const = 0;
|
||||
@@ -276,9 +287,9 @@ class CefBrowserPlatformDelegate {
|
||||
|
||||
base::RepeatingClosure GetBoundsChangedCallback();
|
||||
|
||||
static int TranslateWebEventModifiers(uint32 cef_modifiers);
|
||||
static int TranslateModifiers(uint32 cef_modifiers);
|
||||
|
||||
CefBrowserHostImpl* browser_ = nullptr; // Not owned by this object.
|
||||
CefBrowserHostImpl* browser_; // Not owned by this object.
|
||||
|
||||
private:
|
||||
// Used for the print preview dialog.
|
||||
|
@@ -72,8 +72,8 @@ void ChromeBrowserProcessStub::Shutdown() {
|
||||
// this might cause a nested message loop to run, and we don't want pending
|
||||
// tasks to run once teardown has started.
|
||||
print_job_manager_->Shutdown();
|
||||
print_job_manager_.reset(nullptr);
|
||||
print_preview_dialog_controller_ = nullptr;
|
||||
print_job_manager_.reset(NULL);
|
||||
print_preview_dialog_controller_ = NULL;
|
||||
|
||||
profile_manager_.reset();
|
||||
event_router_forwarder_ = nullptr;
|
||||
@@ -119,17 +119,17 @@ void ChromeBrowserProcessStub::FlushLocalStateAndReply(
|
||||
metrics_services_manager::MetricsServicesManager*
|
||||
ChromeBrowserProcessStub::GetMetricsServicesManager() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
metrics::MetricsService* ChromeBrowserProcessStub::metrics_service() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
rappor::RapporServiceImpl* ChromeBrowserProcessStub::rappor_service() {
|
||||
// Called from PluginInfoHostImpl::ReportMetrics.
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
SystemNetworkContextManager*
|
||||
@@ -141,12 +141,12 @@ ChromeBrowserProcessStub::system_network_context_manager() {
|
||||
network::NetworkQualityTracker*
|
||||
ChromeBrowserProcessStub::network_quality_tracker() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
WatchDogThread* ChromeBrowserProcessStub::watchdog_thread() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ProfileManager* ChromeBrowserProcessStub::profile_manager() {
|
||||
@@ -162,10 +162,8 @@ PrefService* ChromeBrowserProcessStub::local_state() {
|
||||
base::FilePath(CefString(&settings.cache_path));
|
||||
|
||||
// Used for very early NetworkService initialization.
|
||||
// Always persist preferences for this PrefService if possible because it
|
||||
// contains the cookie encryption key on Windows.
|
||||
local_state_ = browser_prefs::CreatePrefService(
|
||||
nullptr /* profile */, cache_path, true /* persist_user_preferences */);
|
||||
nullptr, cache_path, !!settings.persist_user_preferences);
|
||||
}
|
||||
return local_state_.get();
|
||||
}
|
||||
@@ -173,17 +171,17 @@ PrefService* ChromeBrowserProcessStub::local_state() {
|
||||
scoped_refptr<network::SharedURLLoaderFactory>
|
||||
ChromeBrowserProcessStub::shared_url_loader_factory() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
variations::VariationsService* ChromeBrowserProcessStub::variations_service() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
BrowserProcessPlatformPart* ChromeBrowserProcessStub::platform_part() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
extensions::EventRouterForwarder*
|
||||
@@ -194,13 +192,13 @@ ChromeBrowserProcessStub::extension_event_router_forwarder() {
|
||||
|
||||
NotificationUIManager* ChromeBrowserProcessStub::notification_ui_manager() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
NotificationPlatformBridge*
|
||||
ChromeBrowserProcessStub::notification_platform_bridge() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
policy::ChromeBrowserPolicyConnector*
|
||||
@@ -218,12 +216,12 @@ policy::PolicyService* ChromeBrowserProcessStub::policy_service() {
|
||||
|
||||
IconManager* ChromeBrowserProcessStub::icon_manager() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GpuModeManager* ChromeBrowserProcessStub::gpu_mode_manager() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void ChromeBrowserProcessStub::CreateDevToolsProtocolHandler() {
|
||||
@@ -265,7 +263,7 @@ ChromeBrowserProcessStub::background_printing_manager() {
|
||||
IntranetRedirectDetector*
|
||||
ChromeBrowserProcessStub::intranet_redirect_detector() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const std::string& ChromeBrowserProcessStub::GetApplicationLocale() {
|
||||
@@ -279,17 +277,17 @@ void ChromeBrowserProcessStub::SetApplicationLocale(const std::string& locale) {
|
||||
|
||||
DownloadStatusUpdater* ChromeBrowserProcessStub::download_status_updater() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
DownloadRequestLimiter* ChromeBrowserProcessStub::download_request_limiter() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
BackgroundModeManager* ChromeBrowserProcessStub::background_mode_manager() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void ChromeBrowserProcessStub::set_background_mode_manager_for_test(
|
||||
@@ -299,35 +297,35 @@ void ChromeBrowserProcessStub::set_background_mode_manager_for_test(
|
||||
|
||||
StatusTray* ChromeBrowserProcessStub::status_tray() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
safe_browsing::SafeBrowsingService*
|
||||
ChromeBrowserProcessStub::safe_browsing_service() {
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
safe_browsing::ClientSideDetectionService*
|
||||
ChromeBrowserProcessStub::safe_browsing_detection_service() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
subresource_filter::RulesetService*
|
||||
ChromeBrowserProcessStub::subresource_filter_ruleset_service() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
optimization_guide::OptimizationGuideService*
|
||||
ChromeBrowserProcessStub::optimization_guide_service() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
StartupData* ChromeBrowserProcessStub::startup_data() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
|
||||
@@ -337,38 +335,38 @@ void ChromeBrowserProcessStub::StartAutoupdateTimer() {}
|
||||
component_updater::ComponentUpdateService*
|
||||
ChromeBrowserProcessStub::component_updater() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
MediaFileSystemRegistry*
|
||||
ChromeBrowserProcessStub::media_file_system_registry() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
WebRtcLogUploader* ChromeBrowserProcessStub::webrtc_log_uploader() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
network_time::NetworkTimeTracker*
|
||||
ChromeBrowserProcessStub::network_time_tracker() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gcm::GCMDriver* ChromeBrowserProcessStub::gcm_driver() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
resource_coordinator::TabManager* ChromeBrowserProcessStub::GetTabManager() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
resource_coordinator::ResourceCoordinatorParts*
|
||||
ChromeBrowserProcessStub::resource_coordinator_parts() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
@@ -36,7 +36,7 @@ Profile::ProfileType ChromeProfileStub::GetProfileType() const {
|
||||
|
||||
Profile* ChromeProfileStub::GetOffTheRecordProfile() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void ChromeProfileStub::DestroyOffTheRecordProfile() {
|
||||
@@ -70,12 +70,12 @@ bool ChromeProfileStub::IsLegacySupervised() const {
|
||||
ExtensionSpecialStoragePolicy*
|
||||
ChromeProfileStub::GetExtensionSpecialStoragePolicy() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
PrefService* ChromeProfileStub::GetOffTheRecordPrefs() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool ChromeProfileStub::IsSameProfile(Profile* profile) {
|
||||
|
@@ -39,6 +39,7 @@
|
||||
#include "libcef/common/net/scheme_registration.h"
|
||||
#include "libcef/common/request_impl.h"
|
||||
#include "libcef/common/service_manifests/cef_content_browser_overlay_manifest.h"
|
||||
#include "libcef/common/service_manifests/cef_content_renderer_overlay_manifest.h"
|
||||
|
||||
#include "base/base_switches.h"
|
||||
#include "base/command_line.h"
|
||||
@@ -102,6 +103,7 @@
|
||||
#include "extensions/browser/extensions_browser_client.h"
|
||||
#include "extensions/browser/guest_view/extensions_guest_view_message_filter.h"
|
||||
#include "extensions/browser/guest_view/web_view/web_view_guest.h"
|
||||
#include "extensions/browser/io_thread_extension_message_filter.h"
|
||||
#include "extensions/common/constants.h"
|
||||
#include "extensions/common/switches.h"
|
||||
#include "mojo/public/cpp/bindings/remote.h"
|
||||
@@ -135,20 +137,14 @@
|
||||
#endif
|
||||
|
||||
#if defined(OS_MACOSX)
|
||||
#include "net/ssl/client_cert_store_mac.h"
|
||||
#include "services/audio/public/mojom/constants.mojom.h"
|
||||
#include "services/video_capture/public/mojom/constants.mojom.h"
|
||||
#endif
|
||||
|
||||
#if defined(OS_WIN)
|
||||
#include "net/ssl/client_cert_store_win.h"
|
||||
#include "sandbox/win/src/sandbox_policy.h"
|
||||
#endif
|
||||
|
||||
#if defined(USE_NSS_CERTS)
|
||||
#include "net/ssl/client_cert_store_nss.h"
|
||||
#endif
|
||||
|
||||
#if BUILDFLAG(HAS_SPELLCHECK_PANEL)
|
||||
#include "chrome/browser/spellchecker/spell_check_panel_host_impl.h"
|
||||
#endif
|
||||
@@ -208,22 +204,21 @@ class CefQuotaCallbackImpl : public CefRequestCallback {
|
||||
|
||||
class CefAllowCertificateErrorCallbackImpl : public CefRequestCallback {
|
||||
public:
|
||||
typedef base::OnceCallback<void(content::CertificateRequestResultType)>
|
||||
typedef base::Callback<void(content::CertificateRequestResultType)>
|
||||
CallbackType;
|
||||
|
||||
explicit CefAllowCertificateErrorCallbackImpl(CallbackType callback)
|
||||
: callback_(std::move(callback)) {}
|
||||
explicit CefAllowCertificateErrorCallbackImpl(const CallbackType& callback)
|
||||
: callback_(callback) {}
|
||||
|
||||
~CefAllowCertificateErrorCallbackImpl() {
|
||||
if (!callback_.is_null()) {
|
||||
// The callback is still pending. Cancel it now.
|
||||
if (CEF_CURRENTLY_ON_UIT()) {
|
||||
RunNow(std::move(callback_), false);
|
||||
RunNow(callback_, false);
|
||||
} else {
|
||||
CEF_POST_TASK(
|
||||
CEF_UIT,
|
||||
base::BindOnce(&CefAllowCertificateErrorCallbackImpl::RunNow,
|
||||
std::move(callback_), false));
|
||||
CEF_POST_TASK(CEF_UIT,
|
||||
base::Bind(&CefAllowCertificateErrorCallbackImpl::RunNow,
|
||||
callback_, false));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -231,7 +226,8 @@ class CefAllowCertificateErrorCallbackImpl : public CefRequestCallback {
|
||||
void Continue(bool allow) override {
|
||||
if (CEF_CURRENTLY_ON_UIT()) {
|
||||
if (!callback_.is_null()) {
|
||||
RunNow(std::move(callback_), allow);
|
||||
RunNow(callback_, allow);
|
||||
callback_.Reset();
|
||||
}
|
||||
} else {
|
||||
CEF_POST_TASK(CEF_UIT,
|
||||
@@ -242,14 +238,13 @@ class CefAllowCertificateErrorCallbackImpl : public CefRequestCallback {
|
||||
|
||||
void Cancel() override { Continue(false); }
|
||||
|
||||
CallbackType Disconnect() WARN_UNUSED_RESULT { return std::move(callback_); }
|
||||
void Disconnect() { callback_.Reset(); }
|
||||
|
||||
private:
|
||||
static void RunNow(CallbackType callback, bool allow) {
|
||||
static void RunNow(const CallbackType& callback, bool allow) {
|
||||
CEF_REQUIRE_UIT();
|
||||
std::move(callback).Run(
|
||||
allow ? content::CERTIFICATE_REQUEST_RESULT_TYPE_CONTINUE
|
||||
: content::CERTIFICATE_REQUEST_RESULT_TYPE_CANCEL);
|
||||
callback.Run(allow ? content::CERTIFICATE_REQUEST_RESULT_TYPE_CONTINUE
|
||||
: content::CERTIFICATE_REQUEST_RESULT_TYPE_CANCEL);
|
||||
}
|
||||
|
||||
CallbackType callback_;
|
||||
@@ -269,7 +264,7 @@ class CefSelectClientCertificateCallbackImpl
|
||||
// If Select has not been called, call it with NULL to continue without any
|
||||
// client certificate.
|
||||
if (delegate_)
|
||||
DoSelect(nullptr);
|
||||
DoSelect(NULL);
|
||||
}
|
||||
|
||||
void Select(CefRefPtr<CefX509Certificate> cert) override {
|
||||
@@ -398,7 +393,7 @@ int GetCrashSignalFD(const base::CommandLine& command_line) {
|
||||
|
||||
// Extensions have the same process type as renderers.
|
||||
if (command_line.HasSwitch(extensions::switches::kExtensionProcess)) {
|
||||
static breakpad::CrashHandlerHostLinux* crash_handler = nullptr;
|
||||
static breakpad::CrashHandlerHostLinux* crash_handler = NULL;
|
||||
if (!crash_handler)
|
||||
crash_handler = CreateCrashHandlerHost("extension");
|
||||
return crash_handler->GetDeathSignalSocket();
|
||||
@@ -408,21 +403,21 @@ int GetCrashSignalFD(const base::CommandLine& command_line) {
|
||||
command_line.GetSwitchValueASCII(switches::kProcessType);
|
||||
|
||||
if (process_type == switches::kRendererProcess) {
|
||||
static breakpad::CrashHandlerHostLinux* crash_handler = nullptr;
|
||||
static breakpad::CrashHandlerHostLinux* crash_handler = NULL;
|
||||
if (!crash_handler)
|
||||
crash_handler = CreateCrashHandlerHost(process_type);
|
||||
return crash_handler->GetDeathSignalSocket();
|
||||
}
|
||||
|
||||
if (process_type == switches::kPpapiPluginProcess) {
|
||||
static breakpad::CrashHandlerHostLinux* crash_handler = nullptr;
|
||||
static breakpad::CrashHandlerHostLinux* crash_handler = NULL;
|
||||
if (!crash_handler)
|
||||
crash_handler = CreateCrashHandlerHost(process_type);
|
||||
return crash_handler->GetDeathSignalSocket();
|
||||
}
|
||||
|
||||
if (process_type == switches::kGpuProcess) {
|
||||
static breakpad::CrashHandlerHostLinux* crash_handler = nullptr;
|
||||
static breakpad::CrashHandlerHostLinux* crash_handler = NULL;
|
||||
if (!crash_handler)
|
||||
crash_handler = CreateCrashHandlerHost(process_type);
|
||||
return crash_handler->GetDeathSignalSocket();
|
||||
@@ -506,8 +501,7 @@ void BindPluginInfoHost(
|
||||
|
||||
} // namespace
|
||||
|
||||
CefContentBrowserClient::CefContentBrowserClient()
|
||||
: browser_main_parts_(nullptr) {
|
||||
CefContentBrowserClient::CefContentBrowserClient() : browser_main_parts_(NULL) {
|
||||
plugin_service_filter_.reset(new CefPluginServiceFilter);
|
||||
content::PluginServiceImpl::GetInstance()->SetFilter(
|
||||
plugin_service_filter_.get());
|
||||
@@ -540,6 +534,7 @@ void CefContentBrowserClient::RenderProcessWillLaunch(
|
||||
|
||||
if (extensions::ExtensionsEnabled()) {
|
||||
host->AddFilter(new extensions::ExtensionMessageFilter(id, profile));
|
||||
host->AddFilter(new extensions::IOThreadExtensionMessageFilter());
|
||||
host->AddFilter(
|
||||
new extensions::ExtensionsGuestViewMessageFilter(id, profile));
|
||||
}
|
||||
@@ -717,6 +712,8 @@ base::Optional<service_manager::Manifest>
|
||||
CefContentBrowserClient::GetServiceManifestOverlay(base::StringPiece name) {
|
||||
if (name == content::mojom::kBrowserServiceName) {
|
||||
return GetCefContentBrowserOverlayManifest();
|
||||
} else if (name == content::mojom::kRendererServiceName) {
|
||||
return GetCefContentRendererOverlayManifest();
|
||||
}
|
||||
|
||||
return base::nullopt;
|
||||
@@ -838,7 +835,7 @@ void CefContentBrowserClient::AppendExtraCommandLineSwitches(
|
||||
CefRefPtr<CefCommandLineImpl> commandLinePtr(
|
||||
new CefCommandLineImpl(command_line, false, false));
|
||||
handler->OnBeforeChildProcessLaunch(commandLinePtr.get());
|
||||
commandLinePtr->Detach(nullptr);
|
||||
commandLinePtr->Detach(NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -891,7 +888,7 @@ void CefContentBrowserClient::GetQuotaSettings(
|
||||
const base::FilePath& cache_path = partition->GetPath();
|
||||
storage::GetNominalDynamicSettings(
|
||||
cache_path, cache_path.empty() /* is_incognito */,
|
||||
storage::GetDefaultDeviceInfoHelper(), std::move(callback));
|
||||
storage::GetDefaultDiskInfoHelper(), std::move(callback));
|
||||
}
|
||||
|
||||
content::MediaObserver* CefContentBrowserClient::GetMediaObserver() {
|
||||
@@ -905,7 +902,7 @@ CefContentBrowserClient::CreateSpeechRecognitionManagerDelegate() {
|
||||
if (command_line->HasSwitch(switches::kEnableSpeechInput))
|
||||
return new CefSpeechRecognitionManagerDelegate();
|
||||
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
content::GeneratedCodeCacheSettings
|
||||
@@ -926,14 +923,15 @@ void CefContentBrowserClient::AllowCertificateError(
|
||||
const GURL& request_url,
|
||||
bool is_main_frame_request,
|
||||
bool strict_enforcement,
|
||||
base::OnceCallback<void(content::CertificateRequestResultType)> callback) {
|
||||
const base::Callback<void(content::CertificateRequestResultType)>&
|
||||
callback) {
|
||||
CEF_REQUIRE_UIT();
|
||||
|
||||
if (!is_main_frame_request) {
|
||||
// A sub-resource has a certificate error. The user doesn't really
|
||||
// have a context for making the right decision, so block the request
|
||||
// hard.
|
||||
std::move(callback).Run(content::CERTIFICATE_REQUEST_RESULT_TYPE_CANCEL);
|
||||
callback.Run(content::CERTIFICATE_REQUEST_RESULT_TYPE_CANCEL);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -951,17 +949,14 @@ void CefContentBrowserClient::AllowCertificateError(
|
||||
CefRefPtr<CefSSLInfo> cef_ssl_info = new CefSSLInfoImpl(ssl_info);
|
||||
|
||||
CefRefPtr<CefAllowCertificateErrorCallbackImpl> callbackImpl(
|
||||
new CefAllowCertificateErrorCallbackImpl(std::move(callback)));
|
||||
new CefAllowCertificateErrorCallbackImpl(callback));
|
||||
|
||||
bool proceed = handler->OnCertificateError(
|
||||
browser.get(), static_cast<cef_errorcode_t>(cert_error),
|
||||
request_url.spec(), cef_ssl_info, callbackImpl.get());
|
||||
if (!proceed) {
|
||||
// |callback| may be null if the user executed it despite returning false.
|
||||
callback = callbackImpl->Disconnect();
|
||||
if (!callback.is_null()) {
|
||||
std::move(callback).Run(content::CERTIFICATE_REQUEST_RESULT_TYPE_CANCEL);
|
||||
}
|
||||
callbackImpl->Disconnect();
|
||||
callback.Run(content::CERTIFICATE_REQUEST_RESULT_TYPE_CANCEL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1168,19 +1163,11 @@ void CefContentBrowserClient::ExposeInterfacesToRenderer(
|
||||
|
||||
std::unique_ptr<net::ClientCertStore>
|
||||
CefContentBrowserClient::CreateClientCertStore(
|
||||
content::BrowserContext* browser_context) {
|
||||
// Match the logic in ProfileNetworkContextService::CreateClientCertStore.
|
||||
#if defined(USE_NSS_CERTS)
|
||||
// TODO: Add support for client implementation of crypto password dialog.
|
||||
return std::unique_ptr<net::ClientCertStore>(new net::ClientCertStoreNSS(
|
||||
net::ClientCertStoreNSS::PasswordDelegateFactory()));
|
||||
#elif defined(OS_WIN)
|
||||
return std::unique_ptr<net::ClientCertStore>(new net::ClientCertStoreWin());
|
||||
#elif defined(OS_MACOSX)
|
||||
return std::unique_ptr<net::ClientCertStore>(new net::ClientCertStoreMac());
|
||||
#else
|
||||
#error Unknown platform.
|
||||
#endif
|
||||
content::ResourceContext* resource_context) {
|
||||
if (!resource_context)
|
||||
return nullptr;
|
||||
return static_cast<CefResourceContext*>(resource_context)
|
||||
->CreateClientCertStore();
|
||||
}
|
||||
|
||||
std::unique_ptr<content::LoginDelegate>
|
||||
@@ -1269,12 +1256,10 @@ bool CefContentBrowserClient::WillCreateURLLoaderFactory(
|
||||
int render_process_id,
|
||||
URLLoaderFactoryType type,
|
||||
const url::Origin& request_initiator,
|
||||
base::Optional<int64_t> navigation_id,
|
||||
mojo::PendingReceiver<network::mojom::URLLoaderFactory>* factory_receiver,
|
||||
mojo::PendingRemote<network::mojom::TrustedURLLoaderHeaderClient>*
|
||||
header_client,
|
||||
bool* bypass_redirect_checks,
|
||||
network::mojom::URLLoaderFactoryOverridePtr* factory_override) {
|
||||
bool* bypass_redirect_checks) {
|
||||
auto request_handler = net_service::CreateInterceptedRequestHandler(
|
||||
browser_context, frame, render_process_id,
|
||||
type == URLLoaderFactoryType::kNavigation,
|
||||
@@ -1336,14 +1321,14 @@ CefContentBrowserClient::GetNetworkContextsParentDirectory() {
|
||||
|
||||
bool CefContentBrowserClient::HandleExternalProtocol(
|
||||
const GURL& url,
|
||||
base::OnceCallback<content::WebContents*()> web_contents_getter,
|
||||
base::Callback<content::WebContents*(void)> web_contents_getter,
|
||||
int child_id,
|
||||
content::NavigationUIData* navigation_data,
|
||||
bool is_main_frame,
|
||||
ui::PageTransition page_transition,
|
||||
bool has_user_gesture,
|
||||
const base::Optional<url::Origin>& initiating_origin,
|
||||
mojo::PendingRemote<network::mojom::URLLoaderFactory>* out_factory) {
|
||||
network::mojom::URLLoaderFactoryPtr* out_factory) {
|
||||
// Call the other HandleExternalProtocol variant.
|
||||
return false;
|
||||
}
|
||||
@@ -1353,34 +1338,32 @@ bool CefContentBrowserClient::HandleExternalProtocol(
|
||||
int frame_tree_node_id,
|
||||
content::NavigationUIData* navigation_data,
|
||||
const network::ResourceRequest& resource_request,
|
||||
mojo::PendingRemote<network::mojom::URLLoaderFactory>* out_factory) {
|
||||
mojo::PendingReceiver<network::mojom::URLLoaderFactory> receiver =
|
||||
out_factory->InitWithNewPipeAndPassReceiver();
|
||||
network::mojom::URLLoaderFactoryPtr* out_factory) {
|
||||
auto request = mojo::MakeRequest(out_factory);
|
||||
// CefBrowserPlatformDelegate::HandleExternalProtocol may be called if
|
||||
// nothing handles the request.
|
||||
if (CEF_CURRENTLY_ON_IOT()) {
|
||||
auto request_handler = net_service::CreateInterceptedRequestHandler(
|
||||
web_contents_getter, frame_tree_node_id, resource_request);
|
||||
net_service::ProxyURLLoaderFactory::CreateProxy(
|
||||
web_contents_getter, std::move(receiver), std::move(request_handler));
|
||||
web_contents_getter, std::move(request), std::move(request_handler));
|
||||
} else {
|
||||
auto request_handler = net_service::CreateInterceptedRequestHandler(
|
||||
web_contents_getter, frame_tree_node_id, resource_request);
|
||||
CEF_POST_TASK(
|
||||
CEF_IOT,
|
||||
base::BindOnce(
|
||||
[](mojo::PendingReceiver<network::mojom::URLLoaderFactory> receiver,
|
||||
std::unique_ptr<net_service::InterceptedRequestHandler>
|
||||
request_handler,
|
||||
content::WebContents::Getter web_contents_getter) {
|
||||
// Manages its own lifetime.
|
||||
CEF_POST_TASK(CEF_IOT,
|
||||
base::BindOnce(
|
||||
[](network::mojom::URLLoaderFactoryRequest request,
|
||||
std::unique_ptr<net_service::InterceptedRequestHandler>
|
||||
request_handler,
|
||||
content::WebContents::Getter web_contents_getter) {
|
||||
// Manages its own lifetime.
|
||||
|
||||
net_service::ProxyURLLoaderFactory::CreateProxy(
|
||||
web_contents_getter, std::move(receiver),
|
||||
std::move(request_handler));
|
||||
},
|
||||
std::move(receiver), std::move(request_handler),
|
||||
std::move(web_contents_getter)));
|
||||
net_service::ProxyURLLoaderFactory::CreateProxy(
|
||||
web_contents_getter, std::move(request),
|
||||
std::move(request_handler));
|
||||
},
|
||||
std::move(request), std::move(request_handler),
|
||||
std::move(web_contents_getter)));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -1397,33 +1380,6 @@ CefContentBrowserClient::CreateWindowForPictureInPicture(
|
||||
return content::OverlayWindow::Create(controller);
|
||||
}
|
||||
|
||||
void CefContentBrowserClient::RegisterBrowserInterfaceBindersForFrame(
|
||||
content::RenderFrameHost* render_frame_host,
|
||||
service_manager::BinderMapWithContext<content::RenderFrameHost*>* map) {
|
||||
if (!extensions::ExtensionsEnabled())
|
||||
return;
|
||||
|
||||
content::WebContents* web_contents =
|
||||
content::WebContents::FromRenderFrameHost(render_frame_host);
|
||||
if (!web_contents)
|
||||
return;
|
||||
|
||||
const GURL& site = render_frame_host->GetSiteInstance()->GetSiteURL();
|
||||
if (!site.SchemeIs(extensions::kExtensionScheme))
|
||||
return;
|
||||
|
||||
content::BrowserContext* browser_context =
|
||||
render_frame_host->GetProcess()->GetBrowserContext();
|
||||
auto* extension = extensions::ExtensionRegistry::Get(browser_context)
|
||||
->enabled_extensions()
|
||||
.GetByID(site.host());
|
||||
if (!extension)
|
||||
return;
|
||||
extensions::ExtensionsBrowserClient::Get()
|
||||
->RegisterBrowserInterfaceBindersForFrame(map, render_frame_host,
|
||||
extension);
|
||||
}
|
||||
|
||||
std::string CefContentBrowserClient::GetProduct() {
|
||||
// Match the logic in chrome_content_browser_client.cc GetProduct().
|
||||
return ::GetProduct();
|
||||
|
@@ -89,8 +89,8 @@ class CefContentBrowserClient : public content::ContentBrowserClient {
|
||||
const GURL& request_url,
|
||||
bool is_main_frame_request,
|
||||
bool strict_enforcement,
|
||||
base::OnceCallback<void(content::CertificateRequestResultType)> callback)
|
||||
override;
|
||||
const base::Callback<void(content::CertificateRequestResultType)>&
|
||||
callback) override;
|
||||
base::OnceClosure SelectClientCertificate(
|
||||
content::WebContents* web_contents,
|
||||
net::SSLCertRequestInfo* cert_request_info,
|
||||
@@ -144,7 +144,7 @@ class CefContentBrowserClient : public content::ContentBrowserClient {
|
||||
blink::AssociatedInterfaceRegistry* associated_registry,
|
||||
content::RenderProcessHost* render_process_host) override;
|
||||
std::unique_ptr<net::ClientCertStore> CreateClientCertStore(
|
||||
content::BrowserContext* browser_context) override;
|
||||
content::ResourceContext* resource_context) override;
|
||||
std::unique_ptr<content::LoginDelegate> CreateLoginDelegate(
|
||||
const net::AuthChallengeInfo& auth_info,
|
||||
content::WebContents* web_contents,
|
||||
@@ -167,12 +167,10 @@ class CefContentBrowserClient : public content::ContentBrowserClient {
|
||||
int render_process_id,
|
||||
URLLoaderFactoryType type,
|
||||
const url::Origin& request_initiator,
|
||||
base::Optional<int64_t> navigation_id,
|
||||
mojo::PendingReceiver<network::mojom::URLLoaderFactory>* factory_receiver,
|
||||
mojo::PendingRemote<network::mojom::TrustedURLLoaderHeaderClient>*
|
||||
header_client,
|
||||
bool* bypass_redirect_checks,
|
||||
network::mojom::URLLoaderFactoryOverridePtr* factory_override) override;
|
||||
bool* bypass_redirect_checks) override;
|
||||
void OnNetworkServiceCreated(
|
||||
network::mojom::NetworkService* network_service) override;
|
||||
mojo::Remote<network::mojom::NetworkContext> CreateNetworkContext(
|
||||
@@ -182,28 +180,22 @@ class CefContentBrowserClient : public content::ContentBrowserClient {
|
||||
std::vector<base::FilePath> GetNetworkContextsParentDirectory() override;
|
||||
bool HandleExternalProtocol(
|
||||
const GURL& url,
|
||||
base::OnceCallback<content::WebContents*()> web_contents_getter,
|
||||
base::Callback<content::WebContents*(void)> web_contents_getter,
|
||||
int child_id,
|
||||
content::NavigationUIData* navigation_data,
|
||||
bool is_main_frame,
|
||||
ui::PageTransition page_transition,
|
||||
bool has_user_gesture,
|
||||
const base::Optional<url::Origin>& initiating_origin,
|
||||
mojo::PendingRemote<network::mojom::URLLoaderFactory>* out_factory)
|
||||
override;
|
||||
network::mojom::URLLoaderFactoryPtr* out_factory) override;
|
||||
bool HandleExternalProtocol(
|
||||
content::WebContents::Getter web_contents_getter,
|
||||
int frame_tree_node_id,
|
||||
content::NavigationUIData* navigation_data,
|
||||
const network::ResourceRequest& request,
|
||||
mojo::PendingRemote<network::mojom::URLLoaderFactory>* out_factory)
|
||||
override;
|
||||
network::mojom::URLLoaderFactoryPtr* out_factory) override;
|
||||
std::unique_ptr<content::OverlayWindow> CreateWindowForPictureInPicture(
|
||||
content::PictureInPictureWindowController* controller) override;
|
||||
void RegisterBrowserInterfaceBindersForFrame(
|
||||
content::RenderFrameHost* render_frame_host,
|
||||
service_manager::BinderMapWithContext<content::RenderFrameHost*>* map)
|
||||
override;
|
||||
|
||||
std::string GetProduct() override;
|
||||
std::string GetChromeProduct() override;
|
||||
|
@@ -49,7 +49,7 @@
|
||||
|
||||
namespace {
|
||||
|
||||
CefContext* g_context = nullptr;
|
||||
CefContext* g_context = NULL;
|
||||
|
||||
#if DCHECK_IS_ON()
|
||||
// When the process terminates check if CefShutdown() has been called.
|
||||
@@ -201,7 +201,7 @@ int CefExecuteProcess(const CefMainArgs& args,
|
||||
// Execute the secondary process.
|
||||
#if defined(OS_WIN)
|
||||
sandbox::SandboxInterfaceInfo sandbox_info = {0};
|
||||
if (windows_sandbox_info == nullptr) {
|
||||
if (windows_sandbox_info == NULL) {
|
||||
content::InitializeSandboxInfo(&sandbox_info);
|
||||
windows_sandbox_info = &sandbox_info;
|
||||
}
|
||||
@@ -270,7 +270,7 @@ void CefShutdown() {
|
||||
|
||||
// Delete the global context object.
|
||||
delete g_context;
|
||||
g_context = nullptr;
|
||||
g_context = NULL;
|
||||
}
|
||||
|
||||
void CefDoMessageLoopWork() {
|
||||
@@ -391,7 +391,8 @@ bool CefContext::Initialize(const CefMainArgs& args,
|
||||
content::ContentMainParams params(main_delegate_.get());
|
||||
#if defined(OS_WIN)
|
||||
sandbox::SandboxInterfaceInfo sandbox_info = {0};
|
||||
if (windows_sandbox_info == nullptr) {
|
||||
if (windows_sandbox_info == NULL) {
|
||||
content::InitializeSandboxInfo(&sandbox_info);
|
||||
windows_sandbox_info = &sandbox_info;
|
||||
settings_.no_sandbox = true;
|
||||
}
|
||||
@@ -480,7 +481,7 @@ void CefContext::Shutdown() {
|
||||
FinalizeShutdown();
|
||||
} else {
|
||||
// Finish shutdown on the current thread, which should be the UI thread.
|
||||
FinishShutdownOnUIThread(nullptr);
|
||||
FinishShutdownOnUIThread(NULL);
|
||||
|
||||
FinalizeShutdown();
|
||||
}
|
||||
@@ -512,7 +513,7 @@ SkColor CefContext::GetBackgroundColor(
|
||||
CefTraceSubscriber* CefContext::GetTraceSubscriber() {
|
||||
CEF_REQUIRE_UIT();
|
||||
if (shutting_down_)
|
||||
return nullptr;
|
||||
return NULL;
|
||||
if (!trace_subscriber_.get())
|
||||
trace_subscriber_.reset(new CefTraceSubscriber());
|
||||
return trace_subscriber_.get();
|
||||
@@ -606,7 +607,7 @@ void CefContext::FinishShutdownOnUIThread(
|
||||
observer.OnContextDestroyed();
|
||||
|
||||
if (trace_subscriber_.get())
|
||||
trace_subscriber_.reset(nullptr);
|
||||
trace_subscriber_.reset(NULL);
|
||||
|
||||
static_cast<ChromeBrowserProcessStub*>(g_browser_process)->Shutdown();
|
||||
|
||||
@@ -630,11 +631,11 @@ void CefContext::FinalizeShutdown() {
|
||||
// Shut down the content runner.
|
||||
service_manager::MainShutdown(*sm_main_params_);
|
||||
|
||||
browser_info_manager_.reset(nullptr);
|
||||
sm_main_params_.reset(nullptr);
|
||||
sm_main_delegate_.reset(nullptr);
|
||||
main_delegate_.reset(nullptr);
|
||||
browser_info_manager_.reset(NULL);
|
||||
sm_main_params_.reset(NULL);
|
||||
sm_main_delegate_.reset(NULL);
|
||||
main_delegate_.reset(NULL);
|
||||
|
||||
delete g_browser_process;
|
||||
g_browser_process = nullptr;
|
||||
g_browser_process = NULL;
|
||||
}
|
||||
|
@@ -10,7 +10,7 @@ CefContextMenuParamsImpl::CefContextMenuParamsImpl(
|
||||
content::ContextMenuParams* value)
|
||||
: CefValueBase<CefContextMenuParams, content::ContextMenuParams>(
|
||||
value,
|
||||
nullptr,
|
||||
NULL,
|
||||
kOwnerNoDelete,
|
||||
true,
|
||||
new CefValueControllerNonThreadSafe()) {
|
||||
@@ -38,7 +38,7 @@ CefContextMenuParamsImpl::TypeFlags CefContextMenuParamsImpl::GetTypeFlags() {
|
||||
type_flags |= CM_TYPEFLAG_FRAME;
|
||||
if (!params.link_url.is_empty())
|
||||
type_flags |= CM_TYPEFLAG_LINK;
|
||||
if (params.media_type != blink::ContextMenuDataMediaType::kNone)
|
||||
if (params.media_type != blink::WebContextMenuData::kMediaTypeNone)
|
||||
type_flags |= CM_TYPEFLAG_MEDIA;
|
||||
if (!params.selection_text.empty())
|
||||
type_flags |= CM_TYPEFLAG_SELECTION;
|
||||
|
@@ -154,13 +154,12 @@ void CefDevToolsFileManager::FileSavedAs(const std::string& url,
|
||||
base::Value url_value(url);
|
||||
base::Value file_system_path_value(file_system_path);
|
||||
CallClientFunction("DevToolsAPI.savedURL", &url_value,
|
||||
&file_system_path_value, nullptr);
|
||||
&file_system_path_value, NULL);
|
||||
}
|
||||
|
||||
void CefDevToolsFileManager::CanceledFileSaveAs(const std::string& url) {
|
||||
base::Value url_value(url);
|
||||
CallClientFunction("DevToolsAPI.canceledSaveURL", &url_value, nullptr,
|
||||
nullptr);
|
||||
CallClientFunction("DevToolsAPI.canceledSaveURL", &url_value, NULL, NULL);
|
||||
}
|
||||
|
||||
void CefDevToolsFileManager::Append(const std::string& url,
|
||||
@@ -176,7 +175,7 @@ void CefDevToolsFileManager::Append(const std::string& url,
|
||||
|
||||
void CefDevToolsFileManager::AppendedTo(const std::string& url) {
|
||||
base::Value url_value(url);
|
||||
CallClientFunction("DevToolsAPI.appendedToURL", &url_value, nullptr, nullptr);
|
||||
CallClientFunction("DevToolsAPI.appendedToURL", &url_value, NULL, NULL);
|
||||
}
|
||||
|
||||
void CefDevToolsFileManager::CallClientFunction(
|
||||
|
@@ -209,7 +209,7 @@ void CefDevToolsFrontend::DisconnectFromTarget() {
|
||||
if (!agent_host_)
|
||||
return;
|
||||
agent_host_->DetachClient(this);
|
||||
agent_host_ = nullptr;
|
||||
agent_host_ = NULL;
|
||||
}
|
||||
|
||||
CefDevToolsFrontend::CefDevToolsFrontend(
|
||||
@@ -274,8 +274,8 @@ void CefDevToolsFrontend::WebContentsDestroyed() {
|
||||
void CefDevToolsFrontend::HandleMessageFromDevToolsFrontend(
|
||||
const std::string& message) {
|
||||
std::string method;
|
||||
base::ListValue* params = nullptr;
|
||||
base::DictionaryValue* dict = nullptr;
|
||||
base::ListValue* params = NULL;
|
||||
base::DictionaryValue* dict = NULL;
|
||||
base::Optional<base::Value> parsed_message = base::JSONReader::Read(message);
|
||||
if (!parsed_message || !parsed_message->GetAsDictionary(&dict) ||
|
||||
!dict->GetString("method", &method)) {
|
||||
|
@@ -12,7 +12,7 @@
|
||||
CefDownloadItemImpl::CefDownloadItemImpl(download::DownloadItem* value)
|
||||
: CefValueBase<CefDownloadItem, download::DownloadItem>(
|
||||
value,
|
||||
nullptr,
|
||||
NULL,
|
||||
kOwnerNoDelete,
|
||||
true,
|
||||
new CefValueControllerNonThreadSafe()) {
|
||||
|
@@ -34,7 +34,7 @@ CefRefPtr<CefDownloadHandler> GetDownloadHandler(
|
||||
CefRefPtr<CefClient> client = browser->GetClient();
|
||||
if (client.get())
|
||||
return client->GetDownloadHandler();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// CefBeforeDownloadCallback implementation.
|
||||
@@ -262,7 +262,7 @@ CefDownloadManagerDelegate::CefDownloadManagerDelegate(DownloadManager* manager)
|
||||
|
||||
CefDownloadManagerDelegate::~CefDownloadManagerDelegate() {
|
||||
if (manager_) {
|
||||
manager_->SetDelegate(nullptr);
|
||||
manager_->SetDelegate(NULL);
|
||||
manager_->RemoveObserver(this);
|
||||
}
|
||||
|
||||
@@ -284,7 +284,7 @@ void CefDownloadManagerDelegate::OnDownloadUpdated(DownloadItem* download) {
|
||||
|
||||
handler->OnDownloadUpdated(browser.get(), download_item.get(), callback);
|
||||
|
||||
download_item->Detach(nullptr);
|
||||
download_item->Detach(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -339,10 +339,10 @@ void CefDownloadManagerDelegate::OnDownloadCreated(DownloadManager* manager,
|
||||
|
||||
void CefDownloadManagerDelegate::ManagerGoingDown(DownloadManager* manager) {
|
||||
DCHECK_EQ(manager, manager_);
|
||||
manager->SetDelegate(nullptr);
|
||||
manager->SetDelegate(NULL);
|
||||
manager->RemoveObserver(this);
|
||||
manager_ptr_factory_.InvalidateWeakPtrs();
|
||||
manager_ = nullptr;
|
||||
manager_ = NULL;
|
||||
}
|
||||
|
||||
bool CefDownloadManagerDelegate::DetermineDownloadTarget(
|
||||
@@ -377,7 +377,7 @@ bool CefDownloadManagerDelegate::DetermineDownloadTarget(
|
||||
handler->OnBeforeDownload(browser.get(), download_item.get(),
|
||||
suggested_name.value(), callbackObj);
|
||||
|
||||
download_item->Detach(nullptr);
|
||||
download_item->Detach(NULL);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@@ -110,7 +110,7 @@ ExecuteCodeFunction::InitResult ExecuteCodeInTabFunction::Init() {
|
||||
return set_init_result(VALIDATION_FAILURE);
|
||||
|
||||
// |details| are not optional.
|
||||
base::DictionaryValue* details_value = nullptr;
|
||||
base::DictionaryValue* details_value = NULL;
|
||||
if (!args_->GetDictionary(1, &details_value))
|
||||
return set_init_result(VALIDATION_FAILURE);
|
||||
std::unique_ptr<InjectDetails> details(new InjectDetails());
|
||||
@@ -282,10 +282,9 @@ bool TabsSetZoomFunction::RunAsync() {
|
||||
|
||||
zoom::ZoomController* zoom_controller =
|
||||
zoom::ZoomController::FromWebContents(web_contents);
|
||||
double zoom_level =
|
||||
params->zoom_factor > 0
|
||||
? blink::PageZoomFactorToZoomLevel(params->zoom_factor)
|
||||
: zoom_controller->GetDefaultZoomLevel();
|
||||
double zoom_level = params->zoom_factor > 0
|
||||
? blink::PageZoomFactorToZoomLevel(params->zoom_factor)
|
||||
: zoom_controller->GetDefaultZoomLevel();
|
||||
|
||||
scoped_refptr<extensions::ExtensionZoomRequestClient> client(
|
||||
new extensions::ExtensionZoomRequestClient(extension()));
|
||||
@@ -385,9 +384,8 @@ bool TabsGetZoomSettingsFunction::RunAsync() {
|
||||
zoom::ZoomController::ZoomMode zoom_mode = zoom_controller->zoom_mode();
|
||||
api::tabs::ZoomSettings zoom_settings;
|
||||
ZoomModeToZoomSettings(zoom_mode, &zoom_settings);
|
||||
zoom_settings.default_zoom_factor.reset(
|
||||
new double(blink::PageZoomLevelToZoomFactor(
|
||||
zoom_controller->GetDefaultZoomLevel())));
|
||||
zoom_settings.default_zoom_factor.reset(new double(
|
||||
blink::PageZoomLevelToZoomFactor(zoom_controller->GetDefaultZoomLevel())));
|
||||
|
||||
results_ = api::tabs::GetZoomSettings::Results::Create(zoom_settings);
|
||||
SendResponse(true);
|
||||
|
@@ -42,7 +42,7 @@ content::WebContents* GetFullPageGuestForOwnerContents(
|
||||
if (plugin_guest)
|
||||
return plugin_guest->web_contents();
|
||||
}
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void GetAllGuestsForOwnerContents(content::WebContents* owner,
|
||||
@@ -58,10 +58,8 @@ content::WebContents* GetOwnerForGuestContents(content::WebContents* guest) {
|
||||
static_cast<content::WebContentsImpl*>(guest);
|
||||
content::BrowserPluginGuest* plugin_guest =
|
||||
guest_impl->GetBrowserPluginGuest();
|
||||
if (plugin_guest) {
|
||||
return content::WebContents::FromRenderFrameHost(
|
||||
plugin_guest->GetEmbedderFrame());
|
||||
}
|
||||
if (plugin_guest)
|
||||
return plugin_guest->embedder_web_contents();
|
||||
|
||||
// Maybe it's a print preview dialog.
|
||||
auto print_preview_controller =
|
||||
@@ -79,7 +77,7 @@ CefRefPtr<CefBrowserHostImpl> GetOwnerBrowserForFrameRoute(
|
||||
content::RenderFrameHost::FromID(render_process_id, render_routing_id);
|
||||
if (host)
|
||||
return GetOwnerBrowserForHost(host, is_guest_view);
|
||||
return nullptr;
|
||||
return NULL;
|
||||
} else {
|
||||
// Use the thread-safe approach.
|
||||
scoped_refptr<CefBrowserInfo> info =
|
||||
@@ -95,7 +93,7 @@ CefRefPtr<CefBrowserHostImpl> GetOwnerBrowserForFrameRoute(
|
||||
}
|
||||
return browser;
|
||||
}
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -52,28 +52,17 @@ void CefBrowserPlatformDelegateBackground::WasResized() {
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateBackground::SendKeyEvent(
|
||||
const CefKeyEvent& event) {
|
||||
const content::NativeWebKeyboardEvent& event) {
|
||||
// Nothing to do here.
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateBackground::SendMouseClickEvent(
|
||||
const CefMouseEvent& event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) {
|
||||
// Nothing to do here.
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateBackground::SendMouseMoveEvent(
|
||||
const CefMouseEvent& event,
|
||||
bool mouseLeave) {
|
||||
void CefBrowserPlatformDelegateBackground::SendMouseEvent(
|
||||
const blink::WebMouseEvent& event) {
|
||||
// Nothing to do here.
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateBackground::SendMouseWheelEvent(
|
||||
const CefMouseEvent& event,
|
||||
int deltaX,
|
||||
int deltaY) {
|
||||
const blink::WebMouseWheelEvent& event) {
|
||||
// Nothing to do here.
|
||||
}
|
||||
|
||||
@@ -102,6 +91,37 @@ bool CefBrowserPlatformDelegateBackground::HandleKeyboardEvent(
|
||||
return false;
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateBackground::TranslateKeyEvent(
|
||||
content::NativeWebKeyboardEvent& result,
|
||||
const CefKeyEvent& key_event) const {
|
||||
native_delegate_->TranslateKeyEvent(result, key_event);
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateBackground::TranslateClickEvent(
|
||||
blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) const {
|
||||
native_delegate_->TranslateClickEvent(result, mouse_event, type, mouseUp,
|
||||
clickCount);
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateBackground::TranslateMoveEvent(
|
||||
blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
bool mouseLeave) const {
|
||||
native_delegate_->TranslateMoveEvent(result, mouse_event, mouseLeave);
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateBackground::TranslateWheelEvent(
|
||||
blink::WebMouseWheelEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
int deltaX,
|
||||
int deltaY) const {
|
||||
native_delegate_->TranslateWheelEvent(result, mouse_event, deltaX, deltaY);
|
||||
}
|
||||
|
||||
CefEventHandle CefBrowserPlatformDelegateBackground::GetEventHandle(
|
||||
const content::NativeWebKeyboardEvent& event) const {
|
||||
return native_delegate_->GetEventHandle(event);
|
||||
|
@@ -25,21 +25,29 @@ class CefBrowserPlatformDelegateBackground
|
||||
bool CanUseSharedTexture() const override;
|
||||
bool CanUseExternalBeginFrame() const override;
|
||||
void WasResized() override;
|
||||
void SendKeyEvent(const CefKeyEvent& event) override;
|
||||
void SendMouseClickEvent(const CefMouseEvent& event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) override;
|
||||
void SendMouseMoveEvent(const CefMouseEvent& event, bool mouseLeave) override;
|
||||
void SendMouseWheelEvent(const CefMouseEvent& event,
|
||||
int deltaX,
|
||||
int deltaY) override;
|
||||
void SendKeyEvent(const content::NativeWebKeyboardEvent& event) override;
|
||||
void SendMouseEvent(const blink::WebMouseEvent& event) override;
|
||||
void SendMouseWheelEvent(const blink::WebMouseWheelEvent& event) override;
|
||||
void SendTouchEvent(const CefTouchEvent& event) override;
|
||||
void SendFocusEvent(bool setFocus) override;
|
||||
gfx::Point GetScreenPoint(const gfx::Point& view) const override;
|
||||
void ViewText(const std::string& text) override;
|
||||
bool HandleKeyboardEvent(
|
||||
const content::NativeWebKeyboardEvent& event) override;
|
||||
void TranslateKeyEvent(content::NativeWebKeyboardEvent& result,
|
||||
const CefKeyEvent& key_event) const override;
|
||||
void TranslateClickEvent(blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) const override;
|
||||
void TranslateMoveEvent(blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
bool mouseLeave) const override;
|
||||
void TranslateWheelEvent(blink::WebMouseWheelEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
int deltaX,
|
||||
int deltaY) const override;
|
||||
CefEventHandle GetEventHandle(
|
||||
const content::NativeWebKeyboardEvent& event) const override;
|
||||
std::unique_ptr<CefFileDialogRunner> CreateFileDialogRunner() override;
|
||||
|
@@ -50,28 +50,13 @@ CefComponentExtensionResourceManager::GetTemplateReplacementsForExtension(
|
||||
void CefComponentExtensionResourceManager::AddComponentResourceEntries(
|
||||
const GritResourceMap* entries,
|
||||
size_t size) {
|
||||
base::FilePath gen_folder_path = base::FilePath().AppendASCII(
|
||||
"@out_folder@/gen/chrome/browser/resources/");
|
||||
gen_folder_path = gen_folder_path.NormalizePathSeparators();
|
||||
|
||||
for (size_t i = 0; i < size; ++i) {
|
||||
base::FilePath resource_path =
|
||||
base::FilePath().AppendASCII(entries[i].name);
|
||||
resource_path = resource_path.NormalizePathSeparators();
|
||||
|
||||
if (!gen_folder_path.IsParent(resource_path)) {
|
||||
DCHECK(!base::Contains(path_to_resource_info_, resource_path));
|
||||
path_to_resource_info_[resource_path] = entries[i].value;
|
||||
} else {
|
||||
// If the resource is a generated file, strip the generated folder's path,
|
||||
// so that it can be served from a normal URL (as if it were not
|
||||
// generated).
|
||||
base::FilePath effective_path =
|
||||
base::FilePath().AppendASCII(resource_path.AsUTF8Unsafe().substr(
|
||||
gen_folder_path.value().length()));
|
||||
DCHECK(!base::Contains(path_to_resource_info_, effective_path));
|
||||
path_to_resource_info_[effective_path] = entries[i].value;
|
||||
}
|
||||
DCHECK(!base::Contains(path_to_resource_info_, resource_path));
|
||||
path_to_resource_info_[resource_path] = entries[i].value;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -373,7 +373,7 @@ base::DictionaryValue* CefExtensionFunctionDetails::OpenTab(
|
||||
create_params.window_info.reset(new CefWindowInfo);
|
||||
|
||||
#if defined(OS_WIN)
|
||||
create_params.window_info->SetAsPopup(nullptr, CefString());
|
||||
create_params.window_info->SetAsPopup(NULL, CefString());
|
||||
#endif
|
||||
|
||||
// Start with the active browser's settings.
|
||||
|
@@ -27,7 +27,7 @@ content::JavaScriptDialogManager*
|
||||
CefExtensionHostDelegate::GetJavaScriptDialogManager() {
|
||||
// Never routed here from CefBrowserHostImpl.
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void CefExtensionHostDelegate::CreateTab(
|
||||
@@ -59,6 +59,10 @@ bool CefExtensionHostDelegate::CheckMediaAccessPermission(
|
||||
return false;
|
||||
}
|
||||
|
||||
ExtensionHostQueue* CefExtensionHostDelegate::GetExtensionHostQueue() const {
|
||||
return CefExtensionsBrowserClient::Get()->GetExtensionHostQueue();
|
||||
}
|
||||
|
||||
content::PictureInPictureResult CefExtensionHostDelegate::EnterPictureInPicture(
|
||||
content::WebContents* web_contents,
|
||||
const viz::SurfaceId& surface_id,
|
||||
|
@@ -34,6 +34,7 @@ class CefExtensionHostDelegate : public ExtensionHostDelegate {
|
||||
const GURL& security_origin,
|
||||
blink::mojom::MediaStreamType type,
|
||||
const Extension* extension) override;
|
||||
ExtensionHostQueue* GetExtensionHostQueue() const override;
|
||||
content::PictureInPictureResult EnterPictureInPicture(
|
||||
content::WebContents* web_contents,
|
||||
const viz::SurfaceId& surface_id,
|
||||
|
@@ -63,12 +63,11 @@ namespace {
|
||||
std::unique_ptr<base::DictionaryValue> ParseManifest(
|
||||
const std::string& manifest_contents) {
|
||||
JSONStringValueDeserializer deserializer(manifest_contents);
|
||||
std::unique_ptr<base::Value> manifest(
|
||||
deserializer.Deserialize(nullptr, nullptr));
|
||||
std::unique_ptr<base::Value> manifest(deserializer.Deserialize(NULL, NULL));
|
||||
|
||||
if (!manifest.get() || !manifest->is_dict()) {
|
||||
LOG(ERROR) << "Failed to parse extension manifest.";
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
// Transfer ownership to the caller.
|
||||
return base::WrapUnique(
|
||||
@@ -185,78 +184,48 @@ void CefExtensionSystem::Init() {
|
||||
content::NotificationService::NoDetails());
|
||||
|
||||
// Add the internal PDF extension. PDF loading works as follows:
|
||||
// 1. The PDF PPAPI plugin is registered in libcef/common/content_client.cc
|
||||
// ComputeBuiltInPlugins to handle the kPDFPluginOutOfProcessMimeType.
|
||||
// 2. The PDF extension is registered by the below call to AddExtension and
|
||||
// associated with the "application/pdf" mime type.
|
||||
// 3. Web content running in the owner CefBrowser requests to load a PDF file
|
||||
// resource with the "application/pdf" mime type. This can be via a frame
|
||||
// (main frame/iframe) or object/embed tag.
|
||||
// 1. PDF PPAPI plugin is registered to handle kPDFPluginOutOfProcessMimeType
|
||||
// in libcef/common/content_client.cc ComputeBuiltInPlugins.
|
||||
// 2. PDF extension is registered and associated with the "application/pdf"
|
||||
// mime type by the below call to AddExtension.
|
||||
// 3. A page requests a resource with the "application/pdf" mime type. For
|
||||
// example, by loading a PDF file.
|
||||
// 4. PluginResponseInterceptorURLLoaderThrottle intercepts the PDF resource
|
||||
// load in the browser process and registers the PDF resource as a stream
|
||||
// via MimeHandlerStreamManager::AddStream.
|
||||
// 5. PluginResponseInterceptorURLLoaderThrottle::WillProcessResponse triggers
|
||||
// creation of a MimeHandlerViewEmbedder in the browser process via
|
||||
// MimeHandlerViewAttachHelper::OverrideBodyForInterceptedResponse.
|
||||
// 6. MimeHandlerViewEmbedder::ReadyToCommitNavigation is called and sends a
|
||||
// Mojo message to MimeHandlerViewContainerManager::SetInternalId in the
|
||||
// owner renderer process.
|
||||
// 7. The MimeHandlerViewContainerManager is created in the owner renderer
|
||||
// process via MimeHandlerViewContainerManager::BindReceiver and the
|
||||
// SetInternalId call arrives.
|
||||
// 8. HTMLPlugInElement::RequestObject is called in the owner renderer process
|
||||
// to handle the PDF file frame/object/embed tag. This results in calls to
|
||||
// ContentBrowserClient::GetPluginMimeTypesWithExternalHandlers (browser
|
||||
// process) and ContentRendererClient::IsPluginHandledExternally (owner
|
||||
// renderer process), and determines that the plugin should be handled
|
||||
// externally (handled_externally=true).
|
||||
// 9. MimeHandlerViewContainerManager::IsManagedByContainerManager sends a
|
||||
// Mojo message to MimeHandlerViewEmbedder::ReadyToCreateMimeHandlerView
|
||||
// in the browser process.
|
||||
// 10.MimeHandlerViewEmbedder::RenderFrameCreated triggers creation of a
|
||||
// MimeHandlerViewGuest and CefMimeHandlerViewGuestDelegate in the browser
|
||||
// process.
|
||||
// 11.MimeHandlerViewGuest::CreateWebContents creates a new guest WebContents
|
||||
// (is_guest_view=true) to host the PDF extension and the PDF resource
|
||||
// stream is retrieved via MimeHandlerStreamManager::ReleaseStream.
|
||||
// 12.MimeHandlerViewGuest::DidAttachToEmbedder calls
|
||||
// CefMimeHandlerViewGuestDelegate::OnGuestAttached to associate the guest
|
||||
// WebContents routing IDs with the owner CefBrowser. MimeHandlerViewGuest
|
||||
// then loads the extension URL (index.html) in the guest WebContents.
|
||||
// 13.Creation of the RenderFrame in the guest renderer process triggers a
|
||||
// sync IPC call from CefContentRendererClient::MaybeCreateBrowser to
|
||||
// CefBrowserInfoManager::GetBrowserInfo in the browser process to retrieve
|
||||
// the CefBrowser information, which will be immediately available due to
|
||||
// step 12.
|
||||
// 14.The PDF extension begins to load. Extension resource requests are
|
||||
// handled via ExtensionURLLoaderFactory::CreateLoaderAndStart in the
|
||||
// browser process. Access to PDF extension resources is checked by
|
||||
// CefExtensionsBrowserClient::AllowCrossRendererResourceLoad and
|
||||
// PDF extension resources are provided from bundle via
|
||||
// CefExtensionsBrowserClient::LoadResourceFromResourceBundle
|
||||
// and CefComponentExtensionResourceManager. Access to chrome://resources
|
||||
// is granted via CefExtensionWebContentsObserver::RenderViewCreated.
|
||||
// 15.The PDF extension calls chrome.mimeHandlerPrivate.getStreamInfo
|
||||
// (chrome/browser/resources/pdf/browser_api.js) to retrieve the PDF
|
||||
// resource stream. This API is implemented using Mojo as described in
|
||||
// load in the browser process, generates a
|
||||
// unique View ID that is associated with the resource request for later
|
||||
// retrieval via MimeHandlerStreamManager and the
|
||||
// chrome.mimeHandlerPrivate JS API (extensions/common/api/
|
||||
// mime_handler_private.idl), and returns the unique View ID via the
|
||||
// |payload| argument.
|
||||
// 5. The unique View ID arrives in the renderer process via
|
||||
// ResourceLoader::DidReceiveData and triggers creation of a new Document.
|
||||
// DOMImplementation::createDocument indirectly calls
|
||||
// RendererBlinkPlatformImpl::getPluginList to retrieve the list of
|
||||
// supported plugins from the browser process. If a plugin supports the
|
||||
// "application/pdf" mime type then a PluginDocument is created and
|
||||
// CefContentRendererClient::OverrideCreatePlugin is called. This then
|
||||
// indirectly calls CefContentRendererClient::CreateBrowserPluginDelegate
|
||||
// to create a MimeHandlerViewContainer.
|
||||
// 6. A MimeHandlerViewGuest and CefMimeHandlerViewGuestDelegate is created in
|
||||
// the browser process.
|
||||
// 7. MimeHandlerViewGuest navigates to the PDF extension URL.
|
||||
// 8. Access to PDF extension resources is checked by
|
||||
// CefExtensionsBrowserClient::AllowCrossRendererResourceLoad.
|
||||
// 9. PDF extension resources are provided from bundle via
|
||||
// CefExtensionsBrowserClient::LoadResourceFromResourceBundle,
|
||||
// CefContentBrowserClient::RegisterNonNetworkSubresourceURLLoaderFactories
|
||||
// and CefComponentExtensionResourceManager.
|
||||
// 10.The PDF extension (chrome/browser/resources/pdf/browser_api.js) calls
|
||||
// chrome.mimeHandlerPrivate.getStreamInfo to retrieve the PDF resource
|
||||
// stream. This API is implemented using Mojo as described in
|
||||
// libcef/common/extensions/api/README.txt.
|
||||
// 16.The PDF extension requests the PDF PPAPI plugin to handle
|
||||
// kPDFPluginOutOfProcessMimeType. Approval arrives in the guest renderer
|
||||
// process via ExtensionFrameHelper::OnExtensionResponse which calls
|
||||
// NativeExtensionBindingsSystem::HandleResponse. This triggers creation of
|
||||
// an HTMLPlugInElement via native V8 bindings to host the PDF plugin.
|
||||
// 17.HTMLPlugInElement::RequestObject is called in the guest renderer process
|
||||
// and determines that the PDF PPAPI plugin should be handled internally
|
||||
// (handled_externally=false). A PluginDocument is created and
|
||||
// CefContentRendererClient::OverrideCreatePlugin is called to create a
|
||||
// WebPlugin.
|
||||
// 18.The PDF extension and PDF plugin are now loaded. Print commands, if
|
||||
// any, are handled in the guest renderer process by ChromePDFPrintClient
|
||||
// and CefPrintRenderFrameHelperDelegate.
|
||||
// 19.When navigating away from the PDF file or closing the owner CefBrowser
|
||||
// the guest WebContents will be destroyed. This triggers a call to
|
||||
// CefMimeHandlerViewGuestDelegate::OnGuestDetached which removes the
|
||||
// routing ID association with the owner CefBrowser.
|
||||
// 11.The PDF extension requests a plugin to handle
|
||||
// kPDFPluginOutOfProcessMimeType which loads the PDF PPAPI plugin.
|
||||
// 12.Routing of print-related commands are handled by ChromePDFPrintClient
|
||||
// and CefPrintRenderFrameHelperDelegate in the renderer process.
|
||||
// 13.The PDF extension is granted access to chrome://resources via
|
||||
// CefExtensionWebContentsObserver::RenderViewCreated in the browser
|
||||
// process.
|
||||
if (PdfExtensionEnabled()) {
|
||||
LoadExtension(ParseManifest(pdf_extension_util::GetManifest()),
|
||||
base::FilePath(FILE_PATH_LITERAL("pdf")), true /* internal */,
|
||||
|
@@ -27,7 +27,7 @@ AppViewGuestDelegate* CefExtensionsAPIClient::CreateAppViewGuestDelegate()
|
||||
const {
|
||||
// TODO(extensions): Implement to support Apps.
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
std::unique_ptr<guest_view::GuestViewManagerDelegate>
|
||||
|
@@ -24,17 +24,14 @@
|
||||
#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/mime_handler_private/mime_handler_private.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_host_delegate.h"
|
||||
#include "extensions/browser/extensions_browser_interface_binders.h"
|
||||
#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h"
|
||||
#include "extensions/browser/mojo/interface_registration.h"
|
||||
#include "extensions/browser/serial_extension_host_queue.h"
|
||||
#include "extensions/browser/url_request_util.h"
|
||||
#include "extensions/common/api/mime_handler.mojom.h"
|
||||
#include "extensions/common/constants.h"
|
||||
|
||||
using content::BrowserContext;
|
||||
@@ -42,41 +39,6 @@ using content::BrowserThread;
|
||||
|
||||
namespace extensions {
|
||||
|
||||
namespace {
|
||||
|
||||
void BindMimeHandlerService(
|
||||
content::RenderFrameHost* frame_host,
|
||||
mojo::PendingReceiver<extensions::mime_handler::MimeHandlerService>
|
||||
receiver) {
|
||||
auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host);
|
||||
if (!web_contents)
|
||||
return;
|
||||
|
||||
auto* guest_view =
|
||||
extensions::MimeHandlerViewGuest::FromWebContents(web_contents);
|
||||
if (!guest_view)
|
||||
return;
|
||||
extensions::MimeHandlerServiceImpl::Create(guest_view->GetStreamWeakPtr(),
|
||||
std::move(receiver));
|
||||
}
|
||||
|
||||
void BindBeforeUnloadControl(
|
||||
content::RenderFrameHost* frame_host,
|
||||
mojo::PendingReceiver<extensions::mime_handler::BeforeUnloadControl>
|
||||
receiver) {
|
||||
auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host);
|
||||
if (!web_contents)
|
||||
return;
|
||||
|
||||
auto* guest_view =
|
||||
extensions::MimeHandlerViewGuest::FromWebContents(web_contents);
|
||||
if (!guest_view)
|
||||
return;
|
||||
guest_view->FuseBeforeUnloadControl(std::move(receiver));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
CefExtensionsBrowserClient::CefExtensionsBrowserClient()
|
||||
: api_client_(new CefExtensionsAPIClient),
|
||||
resource_manager_(new CefComponentExtensionResourceManager) {
|
||||
@@ -103,7 +65,7 @@ bool CefExtensionsBrowserClient::AreExtensionsDisabled(
|
||||
}
|
||||
|
||||
bool CefExtensionsBrowserClient::IsValidContext(BrowserContext* context) {
|
||||
return GetOriginalContext(context) != nullptr;
|
||||
return GetOriginalContext(context) != NULL;
|
||||
}
|
||||
|
||||
bool CefExtensionsBrowserClient::IsSameContext(BrowserContext* first,
|
||||
@@ -121,7 +83,7 @@ bool CefExtensionsBrowserClient::HasOffTheRecordContext(
|
||||
|
||||
BrowserContext* CefExtensionsBrowserClient::GetOffTheRecordContext(
|
||||
BrowserContext* context) {
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
BrowserContext* CefExtensionsBrowserClient::GetOriginalContext(
|
||||
@@ -155,11 +117,11 @@ base::FilePath CefExtensionsBrowserClient::GetBundleResourcePath(
|
||||
|
||||
void CefExtensionsBrowserClient::LoadResourceFromResourceBundle(
|
||||
const network::ResourceRequest& request,
|
||||
mojo::PendingReceiver<network::mojom::URLLoader> loader,
|
||||
network::mojom::URLLoaderRequest loader,
|
||||
const base::FilePath& resource_relative_path,
|
||||
const int resource_id,
|
||||
const std::string& content_security_policy,
|
||||
mojo::PendingRemote<network::mojom::URLLoaderClient> client,
|
||||
network::mojom::URLLoaderClientPtr client,
|
||||
bool send_cors_header) {
|
||||
chrome_url_request_util::LoadResourceFromResourceBundle(
|
||||
request, std::move(loader), resource_relative_path, resource_id,
|
||||
@@ -197,7 +159,7 @@ void CefExtensionsBrowserClient::GetEarlyExtensionPrefsObservers(
|
||||
|
||||
ProcessManagerDelegate* CefExtensionsBrowserClient::GetProcessManagerDelegate()
|
||||
const {
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
std::unique_ptr<ExtensionHostDelegate>
|
||||
@@ -295,18 +257,6 @@ CefExtensionsBrowserClient::GetExtensionSystemFactory() {
|
||||
return CefExtensionSystemFactory::GetInstance();
|
||||
}
|
||||
|
||||
void CefExtensionsBrowserClient::RegisterBrowserInterfaceBindersForFrame(
|
||||
service_manager::BinderMapWithContext<content::RenderFrameHost*>* map,
|
||||
content::RenderFrameHost* render_frame_host,
|
||||
const Extension* extension) const {
|
||||
PopulateExtensionFrameBinders(map, render_frame_host, extension);
|
||||
|
||||
map->Add<extensions::mime_handler::MimeHandlerService>(
|
||||
base::BindRepeating(&BindMimeHandlerService));
|
||||
map->Add<extensions::mime_handler::BeforeUnloadControl>(
|
||||
base::BindRepeating(&BindBeforeUnloadControl));
|
||||
}
|
||||
|
||||
void CefExtensionsBrowserClient::RegisterExtensionInterfaces(
|
||||
service_manager::BinderRegistryWithArgs<content::RenderFrameHost*>*
|
||||
registry,
|
||||
@@ -341,7 +291,7 @@ void CefExtensionsBrowserClient::BroadcastEventToRenderers(
|
||||
ExtensionCache* CefExtensionsBrowserClient::GetExtensionCache() {
|
||||
// Only used by Chrome via ExtensionService.
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool CefExtensionsBrowserClient::IsBackgroundUpdateAllowed() {
|
||||
@@ -361,7 +311,7 @@ CefExtensionsBrowserClient::GetExtensionWebContentsObserver(
|
||||
|
||||
KioskDelegate* CefExtensionsBrowserClient::GetKioskDelegate() {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool CefExtensionsBrowserClient::IsLockScreenContext(
|
||||
@@ -373,4 +323,10 @@ std::string CefExtensionsBrowserClient::GetApplicationLocale() {
|
||||
return g_browser_process->GetApplicationLocale();
|
||||
}
|
||||
|
||||
ExtensionHostQueue* CefExtensionsBrowserClient::GetExtensionHostQueue() {
|
||||
if (!extension_host_queue_)
|
||||
extension_host_queue_.reset(new SerialExtensionHostQueue);
|
||||
return extension_host_queue_.get();
|
||||
}
|
||||
|
||||
} // namespace extensions
|
||||
|
@@ -11,6 +11,7 @@
|
||||
|
||||
namespace extensions {
|
||||
|
||||
class ExtensionHostQueue;
|
||||
class ExtensionsAPIClient;
|
||||
|
||||
// An ExtensionsBrowserClient that supports a single content::BrowserContent
|
||||
@@ -48,11 +49,11 @@ class CefExtensionsBrowserClient : public ExtensionsBrowserClient {
|
||||
int* resource_id) const override;
|
||||
void LoadResourceFromResourceBundle(
|
||||
const network::ResourceRequest& request,
|
||||
mojo::PendingReceiver<network::mojom::URLLoader> loader,
|
||||
network::mojom::URLLoaderRequest loader,
|
||||
const base::FilePath& resource_relative_path,
|
||||
const int resource_id,
|
||||
const std::string& content_security_policy,
|
||||
mojo::PendingRemote<network::mojom::URLLoaderClient> client,
|
||||
network::mojom::URLLoaderClientPtr client,
|
||||
bool send_cors_header) override;
|
||||
bool AllowCrossRendererResourceLoad(const GURL& url,
|
||||
content::ResourceType resource_type,
|
||||
@@ -81,11 +82,6 @@ class CefExtensionsBrowserClient : public ExtensionsBrowserClient {
|
||||
bool IsAppModeForcedForApp(const ExtensionId& extension_id) override;
|
||||
bool IsLoggedInAsPublicAccount() override;
|
||||
ExtensionSystemProvider* GetExtensionSystemFactory() override;
|
||||
void RegisterBrowserInterfaceBindersForFrame(
|
||||
service_manager::BinderMapWithContext<content::RenderFrameHost*>*
|
||||
binder_map,
|
||||
content::RenderFrameHost* render_frame_host,
|
||||
const Extension* extension) const override;
|
||||
void RegisterExtensionInterfaces(service_manager::BinderRegistryWithArgs<
|
||||
content::RenderFrameHost*>* registry,
|
||||
content::RenderFrameHost* render_frame_host,
|
||||
@@ -108,6 +104,8 @@ class CefExtensionsBrowserClient : public ExtensionsBrowserClient {
|
||||
bool IsLockScreenContext(content::BrowserContext* context) override;
|
||||
std::string GetApplicationLocale() override;
|
||||
|
||||
ExtensionHostQueue* GetExtensionHostQueue();
|
||||
|
||||
private:
|
||||
// Support for extension APIs.
|
||||
std::unique_ptr<ExtensionsAPIClient> api_client_;
|
||||
@@ -115,6 +113,9 @@ class CefExtensionsBrowserClient : public ExtensionsBrowserClient {
|
||||
// Resource manager used to supply resources from pak files.
|
||||
std::unique_ptr<ComponentExtensionResourceManager> resource_manager_;
|
||||
|
||||
// Used to create deferred RenderViews for extensions.
|
||||
std::unique_ptr<ExtensionHostQueue> extension_host_queue_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(CefExtensionsBrowserClient);
|
||||
};
|
||||
|
||||
|
@@ -17,9 +17,22 @@
|
||||
|
||||
namespace extensions {
|
||||
|
||||
namespace {
|
||||
|
||||
CefRefPtr<CefBrowserHostImpl> GetOwnerBrowser(
|
||||
extensions::MimeHandlerViewGuest* guest) {
|
||||
content::WebContents* owner_web_contents = guest->owner_web_contents();
|
||||
CefRefPtr<CefBrowserHostImpl> owner_browser =
|
||||
CefBrowserHostImpl::GetBrowserForContents(owner_web_contents);
|
||||
DCHECK(owner_browser);
|
||||
return owner_browser;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
CefMimeHandlerViewGuestDelegate::CefMimeHandlerViewGuestDelegate(
|
||||
MimeHandlerViewGuest* guest)
|
||||
: guest_(guest), owner_web_contents_(guest_->owner_web_contents()) {}
|
||||
: guest_(guest) {}
|
||||
|
||||
CefMimeHandlerViewGuestDelegate::~CefMimeHandlerViewGuestDelegate() {}
|
||||
|
||||
@@ -27,10 +40,7 @@ void CefMimeHandlerViewGuestDelegate::OverrideWebContentsCreateParams(
|
||||
content::WebContents::CreateParams* params) {
|
||||
DCHECK(params->guest_delegate);
|
||||
|
||||
CefRefPtr<CefBrowserHostImpl> owner_browser =
|
||||
CefBrowserHostImpl::GetBrowserForContents(owner_web_contents_);
|
||||
DCHECK(owner_browser);
|
||||
|
||||
CefRefPtr<CefBrowserHostImpl> owner_browser = GetOwnerBrowser(guest_);
|
||||
if (owner_browser->IsWindowless()) {
|
||||
CefWebContentsViewOSR* view_osr = new CefWebContentsViewOSR(
|
||||
owner_browser->GetBackgroundColor(), false, false);
|
||||
@@ -39,29 +49,24 @@ void CefMimeHandlerViewGuestDelegate::OverrideWebContentsCreateParams(
|
||||
}
|
||||
}
|
||||
|
||||
void CefMimeHandlerViewGuestDelegate::OnGuestAttached() {
|
||||
void CefMimeHandlerViewGuestDelegate::OnGuestAttached(
|
||||
content::WebContentsView* parent_view) {
|
||||
content::WebContents* web_contents = guest_->web_contents();
|
||||
DCHECK(web_contents);
|
||||
|
||||
CefRefPtr<CefBrowserHostImpl> owner_browser =
|
||||
CefBrowserHostImpl::GetBrowserForContents(owner_web_contents_);
|
||||
DCHECK(owner_browser);
|
||||
|
||||
// Associate guest state information with the owner browser.
|
||||
owner_browser->browser_info()->MaybeCreateFrame(web_contents->GetMainFrame(),
|
||||
true /* is_guest_view */);
|
||||
GetOwnerBrowser(guest_)->browser_info()->MaybeCreateFrame(
|
||||
web_contents->GetMainFrame(), true /* is_guest_view */);
|
||||
}
|
||||
|
||||
void CefMimeHandlerViewGuestDelegate::OnGuestDetached() {
|
||||
void CefMimeHandlerViewGuestDelegate::OnGuestDetached(
|
||||
content::WebContentsView* parent_view) {
|
||||
content::WebContents* web_contents = guest_->web_contents();
|
||||
DCHECK(web_contents);
|
||||
|
||||
CefRefPtr<CefBrowserHostImpl> owner_browser =
|
||||
CefBrowserHostImpl::GetBrowserForContents(owner_web_contents_);
|
||||
DCHECK(owner_browser);
|
||||
|
||||
// Disassociate guest state information with the owner browser.
|
||||
owner_browser->browser_info()->RemoveFrame(web_contents->GetMainFrame());
|
||||
GetOwnerBrowser(guest_)->browser_info()->RemoveFrame(
|
||||
web_contents->GetMainFrame());
|
||||
}
|
||||
|
||||
bool CefMimeHandlerViewGuestDelegate::HandleContextMenu(
|
||||
@@ -78,11 +83,7 @@ bool CefMimeHandlerViewGuestDelegate::HandleContextMenu(
|
||||
new_params.x += guest_coordinates.x();
|
||||
new_params.y += guest_coordinates.y();
|
||||
|
||||
CefRefPtr<CefBrowserHostImpl> owner_browser =
|
||||
CefBrowserHostImpl::GetBrowserForContents(owner_web_contents_);
|
||||
DCHECK(owner_browser);
|
||||
|
||||
return owner_browser->HandleContextMenu(web_contents, new_params);
|
||||
return GetOwnerBrowser(guest_)->HandleContextMenu(web_contents, new_params);
|
||||
}
|
||||
|
||||
} // namespace extensions
|
||||
|
@@ -23,14 +23,13 @@ class CefMimeHandlerViewGuestDelegate : public MimeHandlerViewGuestDelegate {
|
||||
// MimeHandlerViewGuestDelegate methods.
|
||||
void OverrideWebContentsCreateParams(
|
||||
content::WebContents::CreateParams* params) override;
|
||||
void OnGuestAttached() override;
|
||||
void OnGuestDetached() override;
|
||||
void OnGuestAttached(content::WebContentsView* parent_view) override;
|
||||
void OnGuestDetached(content::WebContentsView* parent_view) override;
|
||||
bool HandleContextMenu(content::WebContents* web_contents,
|
||||
const content::ContextMenuParams& params) override;
|
||||
|
||||
private:
|
||||
MimeHandlerViewGuest* guest_; // Owns us.
|
||||
content::WebContents* owner_web_contents_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(CefMimeHandlerViewGuestDelegate);
|
||||
};
|
||||
|
@@ -4,8 +4,6 @@
|
||||
|
||||
#include "libcef/browser/extensions/pdf_web_contents_helper_client.h"
|
||||
|
||||
#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h"
|
||||
|
||||
namespace extensions {
|
||||
|
||||
CefPDFWebContentsHelperClient::CefPDFWebContentsHelperClient() {}
|
||||
@@ -23,11 +21,6 @@ void CefPDFWebContentsHelperClient::OnSaveURL(content::WebContents* contents) {}
|
||||
|
||||
void CefPDFWebContentsHelperClient::SetPluginCanSave(
|
||||
content::WebContents* contents,
|
||||
bool can_save) {
|
||||
auto* guest_view =
|
||||
extensions::MimeHandlerViewGuest::FromWebContents(contents);
|
||||
if (guest_view)
|
||||
guest_view->SetPluginCanSave(can_save);
|
||||
}
|
||||
bool can_save) {}
|
||||
|
||||
} // namespace extensions
|
||||
|
@@ -61,7 +61,7 @@ ValueStore::ReadResult CefValueStore::Get(
|
||||
auto settings = std::make_unique<base::DictionaryValue>();
|
||||
for (std::vector<std::string>::const_iterator it = keys.begin();
|
||||
it != keys.end(); ++it) {
|
||||
base::Value* value = nullptr;
|
||||
base::Value* value = NULL;
|
||||
if (storage_.GetWithoutPathExpansion(*it, &value)) {
|
||||
settings->SetWithoutPathExpansion(*it, value->CreateDeepCopy());
|
||||
}
|
||||
@@ -94,7 +94,7 @@ ValueStore::WriteResult CefValueStore::Set(
|
||||
std::unique_ptr<ValueStoreChangeList> changes(new ValueStoreChangeList());
|
||||
for (base::DictionaryValue::Iterator it(settings); !it.IsAtEnd();
|
||||
it.Advance()) {
|
||||
base::Value* old_value = nullptr;
|
||||
base::Value* old_value = NULL;
|
||||
if (!storage_.GetWithoutPathExpansion(it.key(), &old_value) ||
|
||||
!old_value->Equals(&it.value())) {
|
||||
changes->push_back(ValueStoreChange(
|
||||
|
@@ -156,7 +156,7 @@ CefFileDialogManager::~CefFileDialogManager() {}
|
||||
|
||||
void CefFileDialogManager::Destroy() {
|
||||
DCHECK(!file_chooser_pending_);
|
||||
runner_.reset(nullptr);
|
||||
runner_.reset(NULL);
|
||||
}
|
||||
|
||||
void CefFileDialogManager::RunFileDialog(
|
||||
|
@@ -158,13 +158,13 @@ void CefFrameHostImpl::GetText(CefRefPtr<CefStringVisitor> visitor) {
|
||||
}
|
||||
|
||||
void CefFrameHostImpl::LoadRequest(CefRefPtr<CefRequest> request) {
|
||||
CefNavigateParams params(GURL(), kPageTransitionExplicit);
|
||||
CefNavigateParams params(GURL(), ui::PAGE_TRANSITION_TYPED);
|
||||
static_cast<CefRequestImpl*>(request.get())->Get(params);
|
||||
Navigate(params);
|
||||
}
|
||||
|
||||
void CefFrameHostImpl::LoadURL(const CefString& url) {
|
||||
LoadURLWithExtras(url, content::Referrer(), kPageTransitionExplicit,
|
||||
LoadURLWithExtras(url, content::Referrer(), ui::PAGE_TRANSITION_TYPED,
|
||||
std::string());
|
||||
}
|
||||
|
||||
@@ -367,11 +367,6 @@ void CefFrameHostImpl::SendCommand(
|
||||
if (frame_id < CefFrameHostImpl::kMainFrameId)
|
||||
return;
|
||||
|
||||
if (!render_frame_host_ || !response_manager_) {
|
||||
// detached frame has no response_manager_
|
||||
return;
|
||||
}
|
||||
|
||||
TRACE_EVENT2("cef", "CefFrameHostImpl::SendCommand", "frame_id", frame_id,
|
||||
"needsResponse", responseHandler.get() ? 1 : 0);
|
||||
Cef_Request_Params params;
|
||||
@@ -412,11 +407,6 @@ void CefFrameHostImpl::SendCode(
|
||||
if (frame_id < CefFrameHostImpl::kMainFrameId)
|
||||
return;
|
||||
|
||||
if (!render_frame_host_ || !response_manager_) {
|
||||
// detached frame has no response_manager_
|
||||
return;
|
||||
}
|
||||
|
||||
TRACE_EVENT2("cef", "CefFrameHostImpl::SendCommand", "frame_id", frame_id,
|
||||
"needsResponse", responseHandler.get() ? 1 : 0);
|
||||
Cef_Request_Params params;
|
||||
@@ -474,6 +464,7 @@ bool CefFrameHostImpl::OnMessageReceived(const IPC::Message& message) {
|
||||
bool handled = true;
|
||||
IPC_BEGIN_MESSAGE_MAP(CefFrameHostImpl, message)
|
||||
IPC_MESSAGE_HANDLER(CefHostMsg_FrameAttached, OnAttached)
|
||||
IPC_MESSAGE_HANDLER(CefHostMsg_FrameFocused, OnFocused)
|
||||
IPC_MESSAGE_HANDLER(CefHostMsg_DidFinishLoad, OnDidFinishLoad)
|
||||
IPC_MESSAGE_HANDLER(CefHostMsg_UpdateDraggableRegions,
|
||||
OnUpdateDraggableRegions)
|
||||
@@ -543,11 +534,6 @@ const int64_t CefFrameHostImpl::kFocusedFrameId = -2;
|
||||
const int64_t CefFrameHostImpl::kUnspecifiedFrameId = -3;
|
||||
const int64_t CefFrameHostImpl::kInvalidFrameId = -4;
|
||||
|
||||
// This equates to (TT_EXPLICIT | TT_DIRECT_LOAD_FLAG).
|
||||
const ui::PageTransition CefFrameHostImpl::kPageTransitionExplicit =
|
||||
static_cast<ui::PageTransition>(ui::PAGE_TRANSITION_TYPED |
|
||||
ui::PAGE_TRANSITION_FROM_ADDRESS_BAR);
|
||||
|
||||
int64 CefFrameHostImpl::GetFrameId() const {
|
||||
base::AutoLock lock_scope(state_lock_);
|
||||
return is_main_frame_ ? kMainFrameId : frame_id_;
|
||||
@@ -570,6 +556,16 @@ void CefFrameHostImpl::OnAttached() {
|
||||
}
|
||||
}
|
||||
|
||||
void CefFrameHostImpl::OnFocused() {
|
||||
if (!IsFocused()) {
|
||||
// Calls back to SetFocused(true) after updating state on the previously
|
||||
// focused frame.
|
||||
auto browser = GetBrowserHostImpl();
|
||||
if (browser)
|
||||
browser->OnFrameFocused(this);
|
||||
}
|
||||
}
|
||||
|
||||
void CefFrameHostImpl::OnDidFinishLoad(const GURL& validated_url,
|
||||
int http_status_code) {
|
||||
auto browser = GetBrowserHostImpl();
|
||||
|
@@ -138,17 +138,13 @@ class CefFrameHostImpl : public CefFrame {
|
||||
static const int64_t kUnspecifiedFrameId;
|
||||
static const int64_t kInvalidFrameId;
|
||||
|
||||
// PageTransition type for explicit navigations. This must pass the check in
|
||||
// ContentBrowserClient::IsExplicitNavigation for debug URLs (HandleDebugURL)
|
||||
// to work as expected.
|
||||
static const ui::PageTransition kPageTransitionExplicit;
|
||||
|
||||
private:
|
||||
int64 GetFrameId() const;
|
||||
CefRefPtr<CefBrowserHostImpl> GetBrowserHostImpl() const;
|
||||
|
||||
// OnMessageReceived message handlers.
|
||||
void OnAttached();
|
||||
void OnFocused();
|
||||
void OnDidFinishLoad(const GURL& validated_url, int http_status_code);
|
||||
void OnUpdateDraggableRegions(
|
||||
const std::vector<Cef_DraggableRegion_Params>& regions);
|
||||
|
@@ -72,7 +72,7 @@ CefJavaScriptDialogManager::~CefJavaScriptDialogManager() {}
|
||||
|
||||
void CefJavaScriptDialogManager::Destroy() {
|
||||
if (runner_.get()) {
|
||||
runner_.reset(nullptr);
|
||||
runner_.reset(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -19,7 +19,7 @@ const blink::MediaStreamDevice* FindDefaultDeviceWithId(
|
||||
const blink::MediaStreamDevices& devices,
|
||||
const std::string& device_id) {
|
||||
if (devices.empty())
|
||||
return nullptr;
|
||||
return NULL;
|
||||
|
||||
blink::MediaStreamDevices::const_iterator iter = devices.begin();
|
||||
for (; iter != devices.end(); ++iter) {
|
||||
|
@@ -1,86 +0,0 @@
|
||||
// Copyright (c) 2020 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 "libcef/browser/media_router/media_route_impl.h"
|
||||
|
||||
#include "libcef/browser/media_router/media_router_manager.h"
|
||||
#include "libcef/browser/media_router/media_sink_impl.h"
|
||||
#include "libcef/browser/media_router/media_source_impl.h"
|
||||
#include "libcef/browser/thread_util.h"
|
||||
|
||||
namespace {
|
||||
|
||||
// Do not keep a reference to the object returned by this method.
|
||||
CefBrowserContext* GetBrowserContext(const CefBrowserContext::Getter& getter) {
|
||||
CEF_REQUIRE_UIT();
|
||||
DCHECK(!getter.is_null());
|
||||
|
||||
// Will return nullptr if the BrowserContext has been destroyed.
|
||||
return getter.Run();
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
CefMediaRouteImpl::CefMediaRouteImpl(
|
||||
const media_router::MediaRoute& route,
|
||||
const CefBrowserContext::Getter& browser_context_getter)
|
||||
: route_(route), browser_context_getter_(browser_context_getter) {
|
||||
CEF_REQUIRE_UIT();
|
||||
}
|
||||
|
||||
CefString CefMediaRouteImpl::GetId() {
|
||||
return route_.media_route_id();
|
||||
}
|
||||
|
||||
CefRefPtr<CefMediaSource> CefMediaRouteImpl::GetSource() {
|
||||
return new CefMediaSourceImpl(route_.media_source().id());
|
||||
}
|
||||
|
||||
CefRefPtr<CefMediaSink> CefMediaRouteImpl::GetSink() {
|
||||
// Note: The MediaRoute::media_sink_name() method is missing in this Chromium
|
||||
// verison, so we need to use an empty value.
|
||||
return new CefMediaSinkImpl(route_.media_sink_id(),
|
||||
std::string() /* sink_name */);
|
||||
}
|
||||
|
||||
void CefMediaRouteImpl::SendRouteMessage(const void* message,
|
||||
size_t message_size) {
|
||||
std::string message_str(reinterpret_cast<const char*>(message), message_size);
|
||||
|
||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
||||
CEF_POST_TASK(
|
||||
CEF_UIT,
|
||||
base::BindOnce(
|
||||
[](CefRefPtr<CefMediaRouteImpl> self, std::string message_str) {
|
||||
self->SendRouteMessageInternal(std::move(message_str));
|
||||
},
|
||||
CefRefPtr<CefMediaRouteImpl>(this), std::move(message_str)));
|
||||
return;
|
||||
}
|
||||
|
||||
SendRouteMessageInternal(std::move(message_str));
|
||||
}
|
||||
|
||||
void CefMediaRouteImpl::Terminate() {
|
||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
||||
CEF_POST_TASK(CEF_UIT, base::BindOnce(&CefMediaRouteImpl::Terminate, this));
|
||||
return;
|
||||
}
|
||||
|
||||
auto browser_context = GetBrowserContext(browser_context_getter_);
|
||||
if (!browser_context)
|
||||
return;
|
||||
|
||||
browser_context->GetMediaRouterManager()->TerminateRoute(
|
||||
route_.media_route_id());
|
||||
}
|
||||
|
||||
void CefMediaRouteImpl::SendRouteMessageInternal(std::string message) {
|
||||
auto browser_context = GetBrowserContext(browser_context_getter_);
|
||||
if (!browser_context)
|
||||
return;
|
||||
|
||||
browser_context->GetMediaRouterManager()->SendRouteMessage(
|
||||
route_.media_route_id(), message);
|
||||
}
|
@@ -1,40 +0,0 @@
|
||||
// Copyright (c) 2020 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.
|
||||
|
||||
#ifndef CEF_LIBCEF_BROWSER_MEDIA_ROUTER_MEDIA_ROUTE_IMPL_H_
|
||||
#define CEF_LIBCEF_BROWSER_MEDIA_ROUTER_MEDIA_ROUTE_IMPL_H_
|
||||
#pragma once
|
||||
|
||||
#include "include/cef_media_router.h"
|
||||
#include "libcef/browser/browser_context.h"
|
||||
|
||||
#include "chrome/common/media_router/media_route.h"
|
||||
|
||||
// Implementation of the CefMediaRoute interface. Only created on the UI thread.
|
||||
class CefMediaRouteImpl : public CefMediaRoute {
|
||||
public:
|
||||
CefMediaRouteImpl(const media_router::MediaRoute& route,
|
||||
const CefBrowserContext::Getter& browser_context_getter);
|
||||
|
||||
// CefMediaRoute methods.
|
||||
CefString GetId() override;
|
||||
CefRefPtr<CefMediaSource> GetSource() override;
|
||||
CefRefPtr<CefMediaSink> GetSink() override;
|
||||
void SendRouteMessage(const void* message, size_t message_size) override;
|
||||
void Terminate() override;
|
||||
|
||||
const media_router::MediaRoute& route() const { return route_; }
|
||||
|
||||
private:
|
||||
void SendRouteMessageInternal(std::string message);
|
||||
|
||||
// Read-only after creation.
|
||||
const media_router::MediaRoute route_;
|
||||
const CefBrowserContext::Getter browser_context_getter_;
|
||||
|
||||
IMPLEMENT_REFCOUNTING(CefMediaRouteImpl);
|
||||
DISALLOW_COPY_AND_ASSIGN(CefMediaRouteImpl);
|
||||
};
|
||||
|
||||
#endif // CEF_LIBCEF_BROWSER_MEDIA_ROUTER_MEDIA_ROUTE_IMPL_H_
|
@@ -1,290 +0,0 @@
|
||||
// Copyright (c) 2020 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 "libcef/browser/media_router/media_router_impl.h"
|
||||
|
||||
#include "libcef/browser/media_router/media_route_impl.h"
|
||||
#include "libcef/browser/media_router/media_router_manager.h"
|
||||
#include "libcef/browser/media_router/media_sink_impl.h"
|
||||
#include "libcef/browser/media_router/media_source_impl.h"
|
||||
#include "libcef/browser/thread_util.h"
|
||||
|
||||
namespace {
|
||||
|
||||
// Do not keep a reference to the object returned by this method.
|
||||
CefBrowserContext* GetBrowserContext(const CefBrowserContext::Getter& getter) {
|
||||
CEF_REQUIRE_UIT();
|
||||
DCHECK(!getter.is_null());
|
||||
|
||||
// Will return nullptr if the BrowserContext has been destroyed.
|
||||
return getter.Run();
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
class CefRegistrationImpl : public CefRegistration,
|
||||
public CefMediaRouterManager::Observer {
|
||||
public:
|
||||
explicit CefRegistrationImpl(CefRefPtr<CefMediaObserver> observer)
|
||||
: observer_(observer) {
|
||||
DCHECK(observer_);
|
||||
}
|
||||
|
||||
~CefRegistrationImpl() override {
|
||||
CEF_REQUIRE_UIT();
|
||||
|
||||
// May be null if OnMediaRouterDestroyed was called.
|
||||
if (browser_context_getter_.is_null())
|
||||
return;
|
||||
|
||||
auto browser_context = GetBrowserContext(browser_context_getter_);
|
||||
if (!browser_context)
|
||||
return;
|
||||
|
||||
browser_context->GetMediaRouterManager()->RemoveObserver(this);
|
||||
}
|
||||
|
||||
void Initialize(const CefBrowserContext::Getter& browser_context_getter) {
|
||||
CEF_REQUIRE_UIT();
|
||||
DCHECK(!browser_context_getter.is_null());
|
||||
DCHECK(browser_context_getter_.is_null());
|
||||
browser_context_getter_ = browser_context_getter;
|
||||
|
||||
auto browser_context = GetBrowserContext(browser_context_getter_);
|
||||
if (!browser_context)
|
||||
return;
|
||||
|
||||
browser_context->GetMediaRouterManager()->AddObserver(this);
|
||||
}
|
||||
|
||||
private:
|
||||
// CefMediaRouterManager::Observer methods:
|
||||
void OnMediaRouterDestroyed() override { browser_context_getter_.Reset(); }
|
||||
|
||||
void OnMediaSinks(
|
||||
const CefMediaRouterManager::MediaSinkVector& sinks) override {
|
||||
std::vector<CefRefPtr<CefMediaSink>> cef_sinks;
|
||||
for (const auto& sink : sinks) {
|
||||
cef_sinks.push_back(new CefMediaSinkImpl(sink.sink));
|
||||
}
|
||||
observer_->OnSinks(cef_sinks);
|
||||
}
|
||||
|
||||
void OnMediaRoutes(
|
||||
const CefMediaRouterManager::MediaRouteVector& routes) override {
|
||||
std::vector<CefRefPtr<CefMediaRoute>> cef_routes;
|
||||
for (const auto& route : routes) {
|
||||
cef_routes.push_back(MakeCefRoute(route));
|
||||
}
|
||||
observer_->OnRoutes(cef_routes);
|
||||
}
|
||||
|
||||
void OnMediaRouteMessages(
|
||||
const media_router::MediaRoute& route,
|
||||
const CefMediaRouterManager::MediaMessageVector& messages) override {
|
||||
CefRefPtr<CefMediaRoute> cef_route = MakeCefRoute(route);
|
||||
for (const auto& message : messages) {
|
||||
if (message->type == media_router::mojom::RouteMessage::Type::TEXT) {
|
||||
if (message->message.has_value()) {
|
||||
const std::string& str = *(message->message);
|
||||
observer_->OnRouteMessageReceived(cef_route, str.c_str(), str.size());
|
||||
}
|
||||
} else if (message->type ==
|
||||
media_router::mojom::RouteMessage::Type::BINARY) {
|
||||
if (message->data.has_value()) {
|
||||
const std::vector<uint8_t>& data = *(message->data);
|
||||
observer_->OnRouteMessageReceived(cef_route, data.data(),
|
||||
data.size());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void OnMediaRouteStateChange(
|
||||
const media_router::MediaRoute& route,
|
||||
const content::PresentationConnectionStateChangeInfo& info) override {
|
||||
observer_->OnRouteStateChanged(MakeCefRoute(route),
|
||||
ToConnectionState(info.state));
|
||||
}
|
||||
|
||||
CefRefPtr<CefMediaRoute> MakeCefRoute(const media_router::MediaRoute& route) {
|
||||
return new CefMediaRouteImpl(route, browser_context_getter_);
|
||||
}
|
||||
|
||||
static CefMediaObserver::ConnectionState ToConnectionState(
|
||||
blink::mojom::PresentationConnectionState state) {
|
||||
switch (state) {
|
||||
case blink::mojom::PresentationConnectionState::CONNECTING:
|
||||
return CEF_MRCS_CONNECTING;
|
||||
case blink::mojom::PresentationConnectionState::CONNECTED:
|
||||
return CEF_MRCS_CONNECTED;
|
||||
case blink::mojom::PresentationConnectionState::CLOSED:
|
||||
return CEF_MRCS_CLOSED;
|
||||
case blink::mojom::PresentationConnectionState::TERMINATED:
|
||||
return CEF_MRCS_TERMINATED;
|
||||
}
|
||||
NOTREACHED();
|
||||
return CEF_MRCS_UNKNOWN;
|
||||
}
|
||||
|
||||
CefRefPtr<CefMediaObserver> observer_;
|
||||
CefBrowserContext::Getter browser_context_getter_;
|
||||
|
||||
IMPLEMENT_REFCOUNTING_DELETE_ON_UIT(CefRegistrationImpl);
|
||||
DISALLOW_COPY_AND_ASSIGN(CefRegistrationImpl);
|
||||
};
|
||||
|
||||
CefMediaRouterImpl::CefMediaRouterImpl() {
|
||||
// Verify that our enum matches Chromium's values.
|
||||
static_assert(
|
||||
static_cast<int>(CEF_MRCR_TOTAL_COUNT) ==
|
||||
static_cast<int>(media_router::RouteRequestResult::TOTAL_COUNT),
|
||||
"enum mismatch");
|
||||
}
|
||||
|
||||
void CefMediaRouterImpl::Initialize(
|
||||
const CefBrowserContext::Getter& browser_context_getter) {
|
||||
CEF_REQUIRE_UIT();
|
||||
DCHECK(!browser_context_getter.is_null());
|
||||
DCHECK(browser_context_getter_.is_null());
|
||||
browser_context_getter_ = browser_context_getter;
|
||||
}
|
||||
|
||||
CefRefPtr<CefRegistration> CefMediaRouterImpl::AddObserver(
|
||||
CefRefPtr<CefMediaObserver> observer) {
|
||||
if (!observer)
|
||||
return nullptr;
|
||||
CefRefPtr<CefRegistrationImpl> registration =
|
||||
new CefRegistrationImpl(observer);
|
||||
InitializeRegistrationOnUIThread(registration);
|
||||
return registration.get();
|
||||
}
|
||||
|
||||
CefRefPtr<CefMediaSource> CefMediaRouterImpl::GetSource(const CefString& urn) {
|
||||
if (urn.empty())
|
||||
return nullptr;
|
||||
|
||||
// Check for a valid URL and supported Cast/DIAL schemes.
|
||||
GURL presentation_url(urn.ToString());
|
||||
if (!media_router::IsValidPresentationUrl(presentation_url)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (presentation_url.SchemeIsHTTPOrHTTPS()) {
|
||||
// We don't support tab/desktop mirroring, which is what Cast uses for
|
||||
// arbitrary HTTP/HTTPS URLs (see CastMediaSource).
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return new CefMediaSourceImpl(presentation_url);
|
||||
}
|
||||
|
||||
void CefMediaRouterImpl::NotifyCurrentSinks() {
|
||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
||||
CEF_POST_TASK(
|
||||
CEF_UIT, base::BindOnce(&CefMediaRouterImpl::NotifyCurrentSinks, this));
|
||||
return;
|
||||
}
|
||||
|
||||
auto browser_context = GetBrowserContext(browser_context_getter_);
|
||||
if (!browser_context)
|
||||
return;
|
||||
|
||||
browser_context->GetMediaRouterManager()->NotifyCurrentSinks();
|
||||
}
|
||||
|
||||
void CefMediaRouterImpl::CreateRoute(
|
||||
CefRefPtr<CefMediaSource> source,
|
||||
CefRefPtr<CefMediaSink> sink,
|
||||
CefRefPtr<CefMediaRouteCreateCallback> callback) {
|
||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
||||
CEF_POST_TASK(CEF_UIT, base::BindOnce(&CefMediaRouterImpl::CreateRoute,
|
||||
this, source, sink, callback));
|
||||
return;
|
||||
}
|
||||
|
||||
std::string error;
|
||||
|
||||
auto browser_context = GetBrowserContext(browser_context_getter_);
|
||||
if (!browser_context) {
|
||||
error = "Context has already been destroyed";
|
||||
} else if (!source || !source->IsValid()) {
|
||||
error = "Source is empty or invalid";
|
||||
} else if (!sink || !sink->IsValid()) {
|
||||
error = "Sink is empty or invalid";
|
||||
} else if (!sink->IsCompatibleWith(source)) {
|
||||
error = "Sink is not compatible with source";
|
||||
}
|
||||
|
||||
if (!error.empty()) {
|
||||
LOG(WARNING) << "Media route creation failed: " << error;
|
||||
if (callback) {
|
||||
callback->OnMediaRouteCreateFinished(CEF_MRCR_UNKNOWN_ERROR, error,
|
||||
nullptr);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
auto source_impl = static_cast<CefMediaSourceImpl*>(source.get());
|
||||
auto sink_impl = static_cast<CefMediaSinkImpl*>(sink.get());
|
||||
|
||||
browser_context->GetMediaRouterManager()->CreateRoute(
|
||||
source_impl->source().id(), sink_impl->sink().id(), url::Origin(),
|
||||
base::BindOnce(&CefMediaRouterImpl::CreateRouteCallback, this, callback));
|
||||
}
|
||||
|
||||
void CefMediaRouterImpl::NotifyCurrentRoutes() {
|
||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
||||
CEF_POST_TASK(CEF_UIT, base::BindOnce(
|
||||
&CefMediaRouterImpl::NotifyCurrentRoutes, this));
|
||||
return;
|
||||
}
|
||||
|
||||
auto browser_context = GetBrowserContext(browser_context_getter_);
|
||||
if (!browser_context)
|
||||
return;
|
||||
|
||||
browser_context->GetMediaRouterManager()->NotifyCurrentRoutes();
|
||||
}
|
||||
|
||||
void CefMediaRouterImpl::InitializeRegistrationOnUIThread(
|
||||
CefRefPtr<CefRegistrationImpl> registration) {
|
||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
||||
CEF_POST_TASK(
|
||||
CEF_UIT,
|
||||
base::BindOnce(&CefMediaRouterImpl::InitializeRegistrationOnUIThread,
|
||||
this, registration));
|
||||
return;
|
||||
}
|
||||
registration->Initialize(browser_context_getter_);
|
||||
}
|
||||
|
||||
void CefMediaRouterImpl::CreateRouteCallback(
|
||||
CefRefPtr<CefMediaRouteCreateCallback> callback,
|
||||
const media_router::RouteRequestResult& result) {
|
||||
CEF_REQUIRE_UIT();
|
||||
|
||||
if (result.result_code() != media_router::RouteRequestResult::OK) {
|
||||
LOG(WARNING) << "Media route creation failed: " << result.error() << " ("
|
||||
<< result.result_code() << ")";
|
||||
}
|
||||
|
||||
if (!callback)
|
||||
return;
|
||||
|
||||
CefRefPtr<CefMediaRoute> route;
|
||||
if (result.result_code() == media_router::RouteRequestResult::OK &&
|
||||
result.route()) {
|
||||
route = new CefMediaRouteImpl(*result.route(), browser_context_getter_);
|
||||
}
|
||||
|
||||
callback->OnMediaRouteCreateFinished(
|
||||
static_cast<cef_media_route_create_result_t>(result.result_code()),
|
||||
result.error(), route);
|
||||
}
|
||||
|
||||
// static
|
||||
CefRefPtr<CefMediaRouter> CefMediaRouter::GetGlobalMediaRouter() {
|
||||
return CefRequestContext::GetGlobalContext()->GetMediaRouter();
|
||||
}
|
@@ -1,49 +0,0 @@
|
||||
// Copyright (c) 2020 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.
|
||||
|
||||
#ifndef CEF_LIBCEF_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_IMPL_H_
|
||||
#define CEF_LIBCEF_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_IMPL_H_
|
||||
#pragma once
|
||||
|
||||
#include "include/cef_media_router.h"
|
||||
#include "libcef/browser/browser_context.h"
|
||||
|
||||
#include "chrome/common/media_router/mojom/media_router.mojom.h"
|
||||
|
||||
class CefRegistrationImpl;
|
||||
|
||||
// Implementation of the CefMediaRouter interface. May be created on any thread.
|
||||
class CefMediaRouterImpl : public CefMediaRouter {
|
||||
public:
|
||||
CefMediaRouterImpl();
|
||||
|
||||
// Called on the UI thread after object creation and before any other object
|
||||
// methods are executed on the UI thread.
|
||||
void Initialize(const CefBrowserContext::Getter& browser_context_getter);
|
||||
|
||||
// CefMediaRouter methods.
|
||||
CefRefPtr<CefRegistration> AddObserver(
|
||||
CefRefPtr<CefMediaObserver> observer) override;
|
||||
CefRefPtr<CefMediaSource> GetSource(const CefString& urn) override;
|
||||
void NotifyCurrentSinks() override;
|
||||
void CreateRoute(CefRefPtr<CefMediaSource> source,
|
||||
CefRefPtr<CefMediaSink> sink,
|
||||
CefRefPtr<CefMediaRouteCreateCallback> callback) override;
|
||||
void NotifyCurrentRoutes() override;
|
||||
|
||||
private:
|
||||
void InitializeRegistrationOnUIThread(
|
||||
CefRefPtr<CefRegistrationImpl> registration);
|
||||
|
||||
void CreateRouteCallback(CefRefPtr<CefMediaRouteCreateCallback> callback,
|
||||
const media_router::RouteRequestResult& result);
|
||||
|
||||
// Only accessed on the UI thread. Will be non-null after Initialize().
|
||||
CefBrowserContext::Getter browser_context_getter_;
|
||||
|
||||
IMPLEMENT_REFCOUNTING(CefMediaRouterImpl);
|
||||
DISALLOW_COPY_AND_ASSIGN(CefMediaRouterImpl);
|
||||
};
|
||||
|
||||
#endif // CEF_LIBCEF_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_IMPL_H_
|
@@ -1,292 +0,0 @@
|
||||
// Copyright (c) 2020 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 "libcef/browser/media_router/media_router_manager.h"
|
||||
|
||||
#include "libcef/browser/browser_context.h"
|
||||
#include "libcef/browser/thread_util.h"
|
||||
|
||||
#include "chrome/browser/media/router/media_router_factory.h"
|
||||
#include "chrome/browser/media/router/media_routes_observer.h"
|
||||
#include "chrome/browser/media/router/route_message_observer.h"
|
||||
#include "chrome/browser/media/router/route_message_util.h"
|
||||
|
||||
namespace {
|
||||
|
||||
const int kTimeoutMs = 5 * 1000;
|
||||
const char kDefaultPresentationUrl[] = "https://google.com";
|
||||
|
||||
} // namespace
|
||||
|
||||
class CefMediaRoutesObserver : public media_router::MediaRoutesObserver {
|
||||
public:
|
||||
explicit CefMediaRoutesObserver(CefMediaRouterManager* manager)
|
||||
: media_router::MediaRoutesObserver(manager->GetMediaRouter()),
|
||||
manager_(manager) {}
|
||||
|
||||
void OnRoutesUpdated(const std::vector<media_router::MediaRoute>& routes,
|
||||
const std::vector<media_router::MediaRoute::Id>&
|
||||
joinable_route_ids) override {
|
||||
manager_->routes_ = routes;
|
||||
manager_->NotifyCurrentRoutes();
|
||||
}
|
||||
|
||||
private:
|
||||
CefMediaRouterManager* const manager_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(CefMediaRoutesObserver);
|
||||
};
|
||||
|
||||
// Used to receive messages if PresentationConnection is not supported.
|
||||
class CefRouteMessageObserver : public media_router::RouteMessageObserver {
|
||||
public:
|
||||
CefRouteMessageObserver(CefMediaRouterManager* manager,
|
||||
const media_router::MediaRoute& route)
|
||||
: media_router::RouteMessageObserver(manager->GetMediaRouter(),
|
||||
route.media_route_id()),
|
||||
manager_(manager),
|
||||
route_(route) {}
|
||||
|
||||
void OnMessagesReceived(
|
||||
CefMediaRouterManager::MediaMessageVector messages) override {
|
||||
manager_->OnMessagesReceived(route_, messages);
|
||||
}
|
||||
|
||||
private:
|
||||
CefMediaRouterManager* const manager_;
|
||||
const media_router::MediaRoute route_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(CefRouteMessageObserver);
|
||||
};
|
||||
|
||||
// Used for messaging and route status notifications with Cast.
|
||||
class CefPresentationConnection : public blink::mojom::PresentationConnection {
|
||||
public:
|
||||
explicit CefPresentationConnection(
|
||||
CefMediaRouterManager* manager,
|
||||
const media_router::MediaRoute& route,
|
||||
media_router::mojom::RoutePresentationConnectionPtr connections)
|
||||
: manager_(manager),
|
||||
route_(route),
|
||||
connection_receiver_(this, std::move(connections->connection_receiver)),
|
||||
connection_remote_(std::move(connections->connection_remote)) {}
|
||||
|
||||
void OnMessage(
|
||||
blink::mojom::PresentationConnectionMessagePtr message) override {
|
||||
CefMediaRouterManager::MediaMessageVector messages;
|
||||
if (message->is_message()) {
|
||||
messages.push_back(media_router::message_util::RouteMessageFromString(
|
||||
message->get_message()));
|
||||
} else if (message->is_data()) {
|
||||
messages.push_back(media_router::message_util::RouteMessageFromData(
|
||||
message->get_data()));
|
||||
}
|
||||
if (!messages.empty()) {
|
||||
manager_->OnMessagesReceived(route_, messages);
|
||||
}
|
||||
}
|
||||
|
||||
void DidChangeState(
|
||||
blink::mojom::PresentationConnectionState state) override {
|
||||
// May result in |this| being deleted, so post async and allow the call
|
||||
// stack to unwind.
|
||||
CEF_POST_TASK(
|
||||
CEF_UIT,
|
||||
base::BindOnce(&CefMediaRouterManager::OnRouteStateChange,
|
||||
manager_->weak_ptr_factory_.GetWeakPtr(), route_,
|
||||
content::PresentationConnectionStateChangeInfo(state)));
|
||||
}
|
||||
|
||||
void DidClose(
|
||||
blink::mojom::PresentationConnectionCloseReason reason) override {
|
||||
DidChangeState(blink::mojom::PresentationConnectionState::CLOSED);
|
||||
}
|
||||
|
||||
void SendRouteMessage(const std::string& message) {
|
||||
connection_remote_->OnMessage(
|
||||
blink::mojom::PresentationConnectionMessage::NewMessage(message));
|
||||
}
|
||||
|
||||
private:
|
||||
CefMediaRouterManager* const manager_;
|
||||
const media_router::MediaRoute route_;
|
||||
|
||||
// Used to receive messages from the MRP.
|
||||
mojo::Receiver<blink::mojom::PresentationConnection> connection_receiver_;
|
||||
|
||||
// Used to send messages to the MRP.
|
||||
mojo::Remote<blink::mojom::PresentationConnection> connection_remote_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(CefPresentationConnection);
|
||||
};
|
||||
|
||||
CefMediaRouterManager::CefMediaRouterManager(CefBrowserContext* browser_context)
|
||||
: browser_context_(browser_context),
|
||||
query_result_manager_(GetMediaRouter()),
|
||||
weak_ptr_factory_(this) {
|
||||
// Perform initialization.
|
||||
GetMediaRouter()->OnUserGesture();
|
||||
|
||||
query_result_manager_.AddObserver(this);
|
||||
|
||||
// A non-empty presentation URL to required for discovery of Cast devices.
|
||||
query_result_manager_.SetSourcesForCastMode(
|
||||
media_router::MediaCastMode::PRESENTATION,
|
||||
{media_router::MediaSource::ForPresentationUrl(
|
||||
GURL(kDefaultPresentationUrl))},
|
||||
url::Origin());
|
||||
|
||||
routes_observer_ = std::make_unique<CefMediaRoutesObserver>(this);
|
||||
}
|
||||
|
||||
CefMediaRouterManager::~CefMediaRouterManager() {
|
||||
CEF_REQUIRE_UIT();
|
||||
for (auto& observer : observers_) {
|
||||
observers_.RemoveObserver(&observer);
|
||||
observer.OnMediaRouterDestroyed();
|
||||
}
|
||||
|
||||
query_result_manager_.RemoveObserver(this);
|
||||
}
|
||||
|
||||
void CefMediaRouterManager::AddObserver(Observer* observer) {
|
||||
CEF_REQUIRE_UIT();
|
||||
observers_.AddObserver(observer);
|
||||
}
|
||||
|
||||
void CefMediaRouterManager::RemoveObserver(Observer* observer) {
|
||||
CEF_REQUIRE_UIT();
|
||||
observers_.RemoveObserver(observer);
|
||||
}
|
||||
|
||||
void CefMediaRouterManager::NotifyCurrentSinks() {
|
||||
CEF_REQUIRE_UIT();
|
||||
for (auto& observer : observers_) {
|
||||
observer.OnMediaSinks(sinks_);
|
||||
}
|
||||
}
|
||||
|
||||
void CefMediaRouterManager::NotifyCurrentRoutes() {
|
||||
CEF_REQUIRE_UIT();
|
||||
for (auto& observer : observers_) {
|
||||
observer.OnMediaRoutes(routes_);
|
||||
}
|
||||
}
|
||||
|
||||
void CefMediaRouterManager::CreateRoute(
|
||||
const media_router::MediaSource::Id& source_id,
|
||||
const media_router::MediaSink::Id& sink_id,
|
||||
const url::Origin& origin,
|
||||
CreateRouteResultCallback callback) {
|
||||
GetMediaRouter()->CreateRoute(
|
||||
source_id, sink_id, origin, nullptr /* web_contents */,
|
||||
base::BindOnce(&CefMediaRouterManager::OnCreateRoute,
|
||||
weak_ptr_factory_.GetWeakPtr(), std::move(callback)),
|
||||
base::TimeDelta::FromMilliseconds(kTimeoutMs), false /* incognito */);
|
||||
}
|
||||
|
||||
void CefMediaRouterManager::SendRouteMessage(
|
||||
const media_router::MediaRoute::Id& route_id,
|
||||
const std::string& message) {
|
||||
// Must use PresentationConnection to send messages if it exists.
|
||||
auto state = GetRouteState(route_id);
|
||||
if (state && state->presentation_connection_) {
|
||||
state->presentation_connection_->SendRouteMessage(message);
|
||||
return;
|
||||
}
|
||||
|
||||
GetMediaRouter()->SendRouteMessage(route_id, message);
|
||||
}
|
||||
|
||||
void CefMediaRouterManager::TerminateRoute(
|
||||
const media_router::MediaRoute::Id& route_id) {
|
||||
GetMediaRouter()->TerminateRoute(route_id);
|
||||
}
|
||||
|
||||
void CefMediaRouterManager::OnResultsUpdated(const MediaSinkVector& sinks) {
|
||||
sinks_ = sinks;
|
||||
NotifyCurrentSinks();
|
||||
}
|
||||
|
||||
media_router::MediaRouter* CefMediaRouterManager::GetMediaRouter() const {
|
||||
CEF_REQUIRE_UIT();
|
||||
return media_router::MediaRouterFactory::GetApiForBrowserContext(
|
||||
browser_context_);
|
||||
}
|
||||
|
||||
void CefMediaRouterManager::OnCreateRoute(
|
||||
CreateRouteResultCallback callback,
|
||||
media_router::mojom::RoutePresentationConnectionPtr connection,
|
||||
const media_router::RouteRequestResult& result) {
|
||||
CEF_REQUIRE_UIT();
|
||||
if (result.route()) {
|
||||
CreateRouteState(*result.route(), std::move(connection));
|
||||
}
|
||||
|
||||
std::move(callback).Run(result);
|
||||
}
|
||||
|
||||
void CefMediaRouterManager::OnRouteStateChange(
|
||||
const media_router::MediaRoute& route,
|
||||
const content::PresentationConnectionStateChangeInfo& info) {
|
||||
CEF_REQUIRE_UIT();
|
||||
if (info.state == blink::mojom::PresentationConnectionState::CLOSED ||
|
||||
info.state == blink::mojom::PresentationConnectionState::TERMINATED) {
|
||||
RemoveRouteState(route.media_route_id());
|
||||
}
|
||||
|
||||
for (auto& observer : observers_) {
|
||||
observer.OnMediaRouteStateChange(route, info);
|
||||
}
|
||||
}
|
||||
|
||||
void CefMediaRouterManager::OnMessagesReceived(
|
||||
const media_router::MediaRoute& route,
|
||||
const MediaMessageVector& messages) {
|
||||
CEF_REQUIRE_UIT();
|
||||
for (auto& observer : observers_) {
|
||||
observer.OnMediaRouteMessages(route, messages);
|
||||
}
|
||||
}
|
||||
|
||||
void CefMediaRouterManager::CreateRouteState(
|
||||
const media_router::MediaRoute& route,
|
||||
media_router::mojom::RoutePresentationConnectionPtr connection) {
|
||||
const auto route_id = route.media_route_id();
|
||||
auto state = std::make_unique<RouteState>();
|
||||
|
||||
if (!connection.is_null()) {
|
||||
// PresentationConnection must be used for messaging and status
|
||||
// notifications if it exists.
|
||||
state->presentation_connection_ =
|
||||
std::make_unique<CefPresentationConnection>(this, route,
|
||||
std::move(connection));
|
||||
} else {
|
||||
// Fallback if PresentationConnection is not supported.
|
||||
state->message_observer_ =
|
||||
std::make_unique<CefRouteMessageObserver>(this, route);
|
||||
state->state_subscription_ =
|
||||
GetMediaRouter()->AddPresentationConnectionStateChangedCallback(
|
||||
route_id,
|
||||
base::BindRepeating(&CefMediaRouterManager::OnRouteStateChange,
|
||||
weak_ptr_factory_.GetWeakPtr(), route));
|
||||
}
|
||||
|
||||
route_state_map_.insert(std::make_pair(route_id, std::move(state)));
|
||||
}
|
||||
|
||||
CefMediaRouterManager::RouteState* CefMediaRouterManager::GetRouteState(
|
||||
const media_router::MediaRoute::Id& route_id) {
|
||||
const auto it = route_state_map_.find(route_id);
|
||||
if (it != route_state_map_.end())
|
||||
return it->second.get();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void CefMediaRouterManager::RemoveRouteState(
|
||||
const media_router::MediaRoute::Id& route_id) {
|
||||
auto it = route_state_map_.find(route_id);
|
||||
if (it != route_state_map_.end())
|
||||
route_state_map_.erase(it);
|
||||
}
|
@@ -1,125 +0,0 @@
|
||||
// Copyright (c) 2020 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.
|
||||
|
||||
#ifndef CEF_LIBCEF_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_MANAGER_H_
|
||||
#define CEF_LIBCEF_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_MANAGER_H_
|
||||
#pragma once
|
||||
|
||||
#include "include/cef_media_router.h"
|
||||
#include "libcef/browser/browser_context.h"
|
||||
|
||||
#include "base/memory/weak_ptr.h"
|
||||
#include "base/observer_list.h"
|
||||
#include "chrome/browser/media/router/media_router.h"
|
||||
#include "chrome/browser/ui/media_router/query_result_manager.h"
|
||||
#include "chrome/common/media_router/mojom/media_router.mojom.h"
|
||||
|
||||
class CefBrowserContext;
|
||||
class CefMediaRoutesObserver;
|
||||
class CefPresentationConnection;
|
||||
class CefRouteMessageObserver;
|
||||
|
||||
// Manages CEF usage of MediaRouter. Owned by CefBrowserContext and only
|
||||
// accessed on the UI thread.
|
||||
class CefMediaRouterManager
|
||||
: public media_router::QueryResultManager::Observer {
|
||||
public:
|
||||
using MediaRouteVector = std::vector<media_router::MediaRoute>;
|
||||
using MediaSinkVector = std::vector<media_router::MediaSinkWithCastModes>;
|
||||
using MediaMessageVector = std::vector<media_router::mojom::RouteMessagePtr>;
|
||||
|
||||
class Observer : public base::CheckedObserver {
|
||||
public:
|
||||
virtual void OnMediaRouterDestroyed() = 0;
|
||||
|
||||
virtual void OnMediaSinks(const MediaSinkVector& sinks) = 0;
|
||||
virtual void OnMediaRoutes(const MediaRouteVector& routes) = 0;
|
||||
|
||||
virtual void OnMediaRouteMessages(const media_router::MediaRoute& route,
|
||||
const MediaMessageVector& messages) = 0;
|
||||
virtual void OnMediaRouteStateChange(
|
||||
const media_router::MediaRoute& route,
|
||||
const content::PresentationConnectionStateChangeInfo& info) = 0;
|
||||
|
||||
protected:
|
||||
~Observer() override {}
|
||||
};
|
||||
|
||||
explicit CefMediaRouterManager(CefBrowserContext* browser_context);
|
||||
~CefMediaRouterManager() override;
|
||||
|
||||
// |observer| must outlive this object or be removed.
|
||||
void AddObserver(Observer* observer);
|
||||
void RemoveObserver(Observer* observer);
|
||||
|
||||
void NotifyCurrentSinks();
|
||||
void NotifyCurrentRoutes();
|
||||
|
||||
using CreateRouteResultCallback =
|
||||
base::OnceCallback<void(const media_router::RouteRequestResult& result)>;
|
||||
|
||||
void CreateRoute(const media_router::MediaSource::Id& source_id,
|
||||
const media_router::MediaSink::Id& sink_id,
|
||||
const url::Origin& origin,
|
||||
CreateRouteResultCallback callback);
|
||||
|
||||
void SendRouteMessage(const media_router::MediaRoute::Id& route_id,
|
||||
const std::string& message);
|
||||
void TerminateRoute(const media_router::MediaRoute::Id& route_id);
|
||||
|
||||
// QueryResultManager::Observer methods.
|
||||
void OnResultsUpdated(const MediaSinkVector& sinks) override;
|
||||
|
||||
private:
|
||||
friend class CefMediaRoutesObserver;
|
||||
friend class CefPresentationConnection;
|
||||
friend class CefRouteMessageObserver;
|
||||
|
||||
// Do not keep a reference to the object returned by this method.
|
||||
media_router::MediaRouter* GetMediaRouter() const;
|
||||
|
||||
void OnCreateRoute(
|
||||
CreateRouteResultCallback callback,
|
||||
media_router::mojom::RoutePresentationConnectionPtr connection,
|
||||
const media_router::RouteRequestResult& result);
|
||||
void OnRouteStateChange(
|
||||
const media_router::MediaRoute& route,
|
||||
const content::PresentationConnectionStateChangeInfo& info);
|
||||
void OnMessagesReceived(const media_router::MediaRoute& route,
|
||||
const MediaMessageVector& messages);
|
||||
|
||||
struct RouteState {
|
||||
std::unique_ptr<CefPresentationConnection> presentation_connection_;
|
||||
|
||||
// Used if there is no RoutePresentationConnectionPtr.
|
||||
std::unique_ptr<CefRouteMessageObserver> message_observer_;
|
||||
std::unique_ptr<media_router::PresentationConnectionStateSubscription>
|
||||
state_subscription_;
|
||||
};
|
||||
void CreateRouteState(
|
||||
const media_router::MediaRoute& route,
|
||||
media_router::mojom::RoutePresentationConnectionPtr connection);
|
||||
RouteState* GetRouteState(const media_router::MediaRoute::Id& route_id);
|
||||
void RemoveRouteState(const media_router::MediaRoute::Id& route_id);
|
||||
|
||||
CefBrowserContext* const browser_context_;
|
||||
|
||||
base::ObserverList<Observer> observers_;
|
||||
|
||||
media_router::QueryResultManager query_result_manager_;
|
||||
std::unique_ptr<CefMediaRoutesObserver> routes_observer_;
|
||||
|
||||
MediaRouteVector routes_;
|
||||
MediaSinkVector sinks_;
|
||||
|
||||
using RouteStateMap =
|
||||
std::map<media_router::MediaRoute::Id, std::unique_ptr<RouteState>>;
|
||||
RouteStateMap route_state_map_;
|
||||
|
||||
base::WeakPtrFactory<CefMediaRouterManager> weak_ptr_factory_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(CefMediaRouterManager);
|
||||
};
|
||||
|
||||
#endif // CEF_LIBCEF_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_MANAGER_H_
|
@@ -1,46 +0,0 @@
|
||||
// Copyright (c) 2020 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 "libcef/browser/media_router/media_sink_impl.h"
|
||||
|
||||
CefMediaSinkImpl::CefMediaSinkImpl(const media_router::MediaSink& sink)
|
||||
: sink_(sink) {}
|
||||
|
||||
CefMediaSinkImpl::CefMediaSinkImpl(const media_router::MediaSink::Id& sink_id,
|
||||
const std::string& sink_name)
|
||||
: sink_(sink_id, sink_name, media_router::SinkIconType::GENERIC) {}
|
||||
|
||||
CefString CefMediaSinkImpl::GetId() {
|
||||
return sink_.id();
|
||||
}
|
||||
|
||||
bool CefMediaSinkImpl::IsValid() {
|
||||
return true;
|
||||
}
|
||||
|
||||
CefString CefMediaSinkImpl::GetName() {
|
||||
return sink_.name();
|
||||
}
|
||||
|
||||
CefString CefMediaSinkImpl::GetDescription() {
|
||||
return sink_.description().value_or("");
|
||||
}
|
||||
|
||||
bool CefMediaSinkImpl::IsCastSink() {
|
||||
return sink_.provider_id() == media_router::CAST;
|
||||
}
|
||||
|
||||
bool CefMediaSinkImpl::IsDialSink() {
|
||||
return sink_.provider_id() == media_router::DIAL;
|
||||
}
|
||||
|
||||
bool CefMediaSinkImpl::IsCompatibleWith(CefRefPtr<CefMediaSource> source) {
|
||||
if (source) {
|
||||
if (IsCastSink())
|
||||
return source->IsCastSource();
|
||||
if (IsDialSink())
|
||||
return source->IsDialSource();
|
||||
}
|
||||
return false;
|
||||
}
|
@@ -1,39 +0,0 @@
|
||||
// Copyright (c) 2020 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.
|
||||
|
||||
#ifndef CEF_LIBCEF_BROWSER_MEDIA_ROUTER_MEDIA_SINK_IMPL_H_
|
||||
#define CEF_LIBCEF_BROWSER_MEDIA_ROUTER_MEDIA_SINK_IMPL_H_
|
||||
#pragma once
|
||||
|
||||
#include "include/cef_media_router.h"
|
||||
|
||||
#include "chrome/common/media_router/media_sink.h"
|
||||
|
||||
// Implementation of the CefMediaSink interface. May be created on any thread.
|
||||
class CefMediaSinkImpl : public CefMediaSink {
|
||||
public:
|
||||
explicit CefMediaSinkImpl(const media_router::MediaSink& sink);
|
||||
CefMediaSinkImpl(const media_router::MediaSink::Id& sink_id,
|
||||
const std::string& sink_name);
|
||||
|
||||
// CefMediaSink methods.
|
||||
CefString GetId() override;
|
||||
bool IsValid() override;
|
||||
CefString GetName() override;
|
||||
CefString GetDescription() override;
|
||||
bool IsCastSink() override;
|
||||
bool IsDialSink() override;
|
||||
bool IsCompatibleWith(CefRefPtr<CefMediaSource> source) override;
|
||||
|
||||
const media_router::MediaSink& sink() const { return sink_; }
|
||||
|
||||
private:
|
||||
// Read-only after creation.
|
||||
const media_router::MediaSink sink_;
|
||||
|
||||
IMPLEMENT_REFCOUNTING(CefMediaSinkImpl);
|
||||
DISALLOW_COPY_AND_ASSIGN(CefMediaSinkImpl);
|
||||
};
|
||||
|
||||
#endif // CEF_LIBCEF_BROWSER_MEDIA_ROUTER_MEDIA_SINK_IMPL_H_
|
@@ -1,28 +0,0 @@
|
||||
// Copyright (c) 2020 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 "libcef/browser/media_router/media_source_impl.h"
|
||||
|
||||
CefMediaSourceImpl::CefMediaSourceImpl(
|
||||
const media_router::MediaSource::Id& source_id)
|
||||
: source_(source_id) {}
|
||||
|
||||
CefMediaSourceImpl::CefMediaSourceImpl(const GURL& presentation_url)
|
||||
: source_(presentation_url) {}
|
||||
|
||||
CefString CefMediaSourceImpl::GetId() {
|
||||
return source_.id();
|
||||
}
|
||||
|
||||
bool CefMediaSourceImpl::IsValid() {
|
||||
return source_.IsValid();
|
||||
}
|
||||
|
||||
bool CefMediaSourceImpl::IsCastSource() {
|
||||
return !IsDialSource();
|
||||
}
|
||||
|
||||
bool CefMediaSourceImpl::IsDialSource() {
|
||||
return source_.IsDialSource();
|
||||
}
|
@@ -1,35 +0,0 @@
|
||||
// Copyright (c) 2020 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.
|
||||
|
||||
#ifndef CEF_LIBCEF_BROWSER_MEDIA_ROUTER_MEDIA_SOURCE_IMPL_H_
|
||||
#define CEF_LIBCEF_BROWSER_MEDIA_ROUTER_MEDIA_SOURCE_IMPL_H_
|
||||
#pragma once
|
||||
|
||||
#include "include/cef_media_router.h"
|
||||
|
||||
#include "chrome/common/media_router/media_source.h"
|
||||
|
||||
// Implementation of the CefMediaSource interface. May be created on any thread.
|
||||
class CefMediaSourceImpl : public CefMediaSource {
|
||||
public:
|
||||
explicit CefMediaSourceImpl(const media_router::MediaSource::Id& source_id);
|
||||
explicit CefMediaSourceImpl(const GURL& presentation_url);
|
||||
|
||||
// CefMediaSource methods.
|
||||
CefString GetId() override;
|
||||
bool IsValid() override;
|
||||
bool IsCastSource() override;
|
||||
bool IsDialSource() override;
|
||||
|
||||
const media_router::MediaSource& source() const { return source_; }
|
||||
|
||||
private:
|
||||
// Read-only after creation.
|
||||
const media_router::MediaSource source_;
|
||||
|
||||
IMPLEMENT_REFCOUNTING(CefMediaSourceImpl);
|
||||
DISALLOW_COPY_AND_ASSIGN(CefMediaSourceImpl);
|
||||
};
|
||||
|
||||
#endif // CEF_LIBCEF_BROWSER_MEDIA_ROUTER_MEDIA_SOURCE_IMPL_H_
|
@@ -91,7 +91,7 @@ CefMenuManager::CefMenuManager(CefBrowserHostImpl* browser,
|
||||
: content::WebContentsObserver(browser->web_contents()),
|
||||
browser_(browser),
|
||||
runner_(std::move(runner)),
|
||||
custom_menu_callback_(nullptr),
|
||||
custom_menu_callback_(NULL),
|
||||
weak_ptr_factory_(this) {
|
||||
DCHECK(web_contents());
|
||||
model_ = new CefMenuModelImpl(this, nullptr, false);
|
||||
@@ -100,13 +100,13 @@ CefMenuManager::CefMenuManager(CefBrowserHostImpl* browser,
|
||||
CefMenuManager::~CefMenuManager() {
|
||||
// The model may outlive the delegate if the context menu is visible when the
|
||||
// application is closed.
|
||||
model_->set_delegate(nullptr);
|
||||
model_->set_delegate(NULL);
|
||||
}
|
||||
|
||||
void CefMenuManager::Destroy() {
|
||||
CancelContextMenu();
|
||||
if (runner_)
|
||||
runner_.reset(nullptr);
|
||||
runner_.reset(NULL);
|
||||
}
|
||||
|
||||
bool CefMenuManager::IsShowingContextMenu() {
|
||||
@@ -166,13 +166,13 @@ bool CefMenuManager::CreateContextMenu(
|
||||
} else {
|
||||
// Callback should not be executed if the handler returns false.
|
||||
DCHECK(custom_menu_callback_);
|
||||
custom_menu_callback_ = nullptr;
|
||||
custom_menu_callback_ = NULL;
|
||||
callbackImpl->Disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
// Do not keep references to the parameters in the callback.
|
||||
paramsPtr->Detach(nullptr);
|
||||
paramsPtr->Detach(NULL);
|
||||
DCHECK(paramsPtr->HasOneRef());
|
||||
DCHECK(model_->VerifyRefCount());
|
||||
|
||||
@@ -214,7 +214,7 @@ void CefMenuManager::ExecuteCommand(CefRefPtr<CefMenuModelImpl> source,
|
||||
event_flags);
|
||||
|
||||
// Do not keep references to the parameters in the callback.
|
||||
paramsPtr->Detach(nullptr);
|
||||
paramsPtr->Detach(NULL);
|
||||
DCHECK(paramsPtr->HasOneRef());
|
||||
|
||||
if (handled)
|
||||
@@ -280,7 +280,7 @@ void CefMenuManager::ExecuteCommandCallback(int command_id,
|
||||
if (command_id != kInvalidCommandId)
|
||||
ExecuteCommand(model_, command_id, event_flags);
|
||||
MenuClosed(model_);
|
||||
custom_menu_callback_ = nullptr;
|
||||
custom_menu_callback_ = NULL;
|
||||
}
|
||||
|
||||
void CefMenuManager::CreateDefaultModel() {
|
||||
|
@@ -107,7 +107,7 @@ class CefSimpleMenuModel : public ui::MenuModel {
|
||||
bool GetIconAt(int index, gfx::Image* icon) const override { return false; }
|
||||
|
||||
ui::ButtonMenuItemModel* GetButtonMenuItemAt(int index) const override {
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool IsEnabledAt(int index) const override {
|
||||
@@ -128,7 +128,7 @@ class CefSimpleMenuModel : public ui::MenuModel {
|
||||
CefRefPtr<CefMenuModel> submenu = impl_->GetSubMenuAt(index);
|
||||
if (submenu.get())
|
||||
return static_cast<CefMenuModelImpl*>(submenu.get())->model();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void MouseOutsideMenu(const gfx::Point& screen_point) override {
|
||||
@@ -304,7 +304,7 @@ bool CefMenuModelImpl::AddRadioItem(int command_id,
|
||||
CefRefPtr<CefMenuModel> CefMenuModelImpl::AddSubMenu(int command_id,
|
||||
const CefString& label) {
|
||||
if (!VerifyContext())
|
||||
return nullptr;
|
||||
return NULL;
|
||||
|
||||
Item item(MENUITEMTYPE_SUBMENU, command_id, label, kInvalidGroupId);
|
||||
item.submenu_ = new CefMenuModelImpl(delegate_, menu_model_delegate_, true);
|
||||
@@ -360,7 +360,7 @@ CefRefPtr<CefMenuModel> CefMenuModelImpl::InsertSubMenuAt(
|
||||
int command_id,
|
||||
const CefString& label) {
|
||||
if (!VerifyContext())
|
||||
return nullptr;
|
||||
return NULL;
|
||||
|
||||
Item item(MENUITEMTYPE_SUBMENU, command_id, label, kInvalidGroupId);
|
||||
item.submenu_ = new CefMenuModelImpl(delegate_, menu_model_delegate_, true);
|
||||
@@ -490,11 +490,11 @@ CefRefPtr<CefMenuModel> CefMenuModelImpl::GetSubMenu(int command_id) {
|
||||
|
||||
CefRefPtr<CefMenuModel> CefMenuModelImpl::GetSubMenuAt(int index) {
|
||||
if (!VerifyContext())
|
||||
return nullptr;
|
||||
return NULL;
|
||||
|
||||
if (index >= 0 && index < static_cast<int>(items_.size()))
|
||||
return items_[index].submenu_.get();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool CefMenuModelImpl::IsVisible(int command_id) {
|
||||
|
@@ -8,7 +8,6 @@
|
||||
|
||||
#include "content/public/browser/render_view_host.h"
|
||||
#include "content/public/browser/render_widget_host.h"
|
||||
#include "third_party/blink/public/platform/web_mouse_event.h"
|
||||
|
||||
CefBrowserPlatformDelegateNative::CefBrowserPlatformDelegateNative(
|
||||
const CefWindowInfo& window_info,
|
||||
@@ -39,6 +38,30 @@ void CefBrowserPlatformDelegateNative::WasResized() {
|
||||
host->GetWidget()->SynchronizeVisualProperties();
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNative::SendKeyEvent(
|
||||
const content::NativeWebKeyboardEvent& event) {
|
||||
content::RenderViewHost* host = browser_->web_contents()->GetRenderViewHost();
|
||||
if (host)
|
||||
host->GetWidget()->ForwardKeyboardEvent(event);
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNative::SendMouseEvent(
|
||||
const blink::WebMouseEvent& event) {
|
||||
content::RenderViewHost* host = browser_->web_contents()->GetRenderViewHost();
|
||||
if (host)
|
||||
host->GetWidget()->ForwardMouseEvent(event);
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNative::SendMouseWheelEvent(
|
||||
const blink::WebMouseWheelEvent& event) {
|
||||
content::RenderViewHost* host = browser_->web_contents()->GetRenderViewHost();
|
||||
if (host)
|
||||
host->GetWidget()->ForwardWheelEvent(event);
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNative::SendTouchEvent(
|
||||
const CefTouchEvent& event) {}
|
||||
|
||||
bool CefBrowserPlatformDelegateNative::IsWindowless() const {
|
||||
return false;
|
||||
}
|
||||
|
@@ -29,44 +29,25 @@ class CefBrowserPlatformDelegateNative : public CefBrowserPlatformDelegate {
|
||||
bool CanUseExternalBeginFrame() const override;
|
||||
SkColor GetBackgroundColor() const override;
|
||||
void WasResized() override;
|
||||
void SendKeyEvent(const content::NativeWebKeyboardEvent& event) override;
|
||||
void SendMouseEvent(const blink::WebMouseEvent& event) override;
|
||||
void SendMouseWheelEvent(const blink::WebMouseWheelEvent& event) override;
|
||||
void SendTouchEvent(const CefTouchEvent& event) override;
|
||||
bool IsWindowless() const override;
|
||||
bool IsViewsHosted() const override;
|
||||
|
||||
// Translate CEF events to Chromium/Blink Web events.
|
||||
virtual content::NativeWebKeyboardEvent TranslateWebKeyEvent(
|
||||
const CefKeyEvent& key_event) const = 0;
|
||||
virtual blink::WebMouseEvent TranslateWebClickEvent(
|
||||
const CefMouseEvent& mouse_event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) const = 0;
|
||||
virtual blink::WebMouseEvent TranslateWebMoveEvent(
|
||||
const CefMouseEvent& mouse_event,
|
||||
bool mouseLeave) const = 0;
|
||||
virtual blink::WebMouseWheelEvent TranslateWebWheelEvent(
|
||||
const CefMouseEvent& mouse_event,
|
||||
int deltaX,
|
||||
int deltaY) const = 0;
|
||||
|
||||
const CefWindowInfo& window_info() const { return window_info_; }
|
||||
|
||||
protected:
|
||||
// Delegates that can wrap a native delegate.
|
||||
friend class CefBrowserPlatformDelegateBackground;
|
||||
friend class CefBrowserPlatformDelegateOsr;
|
||||
friend class CefBrowserPlatformDelegateViews;
|
||||
void set_windowless_handler(WindowlessHandler* handler) {
|
||||
windowless_handler_ = handler;
|
||||
}
|
||||
|
||||
protected:
|
||||
CefBrowserPlatformDelegateNative(const CefWindowInfo& window_info,
|
||||
SkColor background_color,
|
||||
bool use_shared_texture,
|
||||
bool use_external_begin_frame);
|
||||
|
||||
// Methods used by delegates that can wrap a native delegate.
|
||||
void set_windowless_handler(WindowlessHandler* handler) {
|
||||
windowless_handler_ = handler;
|
||||
}
|
||||
void set_browser(CefBrowserHostImpl* browser) { browser_ = browser; }
|
||||
|
||||
CefWindowInfo window_info_;
|
||||
const SkColor background_color_;
|
||||
const bool use_shared_texture_;
|
||||
|
@@ -1,235 +0,0 @@
|
||||
// Copyright 2020 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 "libcef/browser/native/browser_platform_delegate_native_aura.h"
|
||||
|
||||
#include "content/browser/renderer_host/render_widget_host_view_aura.h"
|
||||
#include "content/public/browser/render_view_host.h"
|
||||
#include "content/public/browser/render_widget_host.h"
|
||||
#include "ui/events/blink/blink_event_util.h"
|
||||
#include "ui/events/blink/web_input_event.h"
|
||||
#include "ui/gfx/geometry/vector2d.h"
|
||||
|
||||
CefBrowserPlatformDelegateNativeAura::CefBrowserPlatformDelegateNativeAura(
|
||||
const CefWindowInfo& window_info,
|
||||
SkColor background_color,
|
||||
bool use_shared_texture,
|
||||
bool use_external_begin_frame)
|
||||
: CefBrowserPlatformDelegateNative(window_info,
|
||||
background_color,
|
||||
use_shared_texture,
|
||||
use_external_begin_frame) {}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeAura::SendKeyEvent(
|
||||
const CefKeyEvent& event) {
|
||||
auto view = GetHostView();
|
||||
if (!view)
|
||||
return;
|
||||
|
||||
ui::KeyEvent ui_event = TranslateUiKeyEvent(event);
|
||||
view->OnKeyEvent(&ui_event);
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeAura::SendMouseClickEvent(
|
||||
const CefMouseEvent& event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) {
|
||||
auto view = GetHostView();
|
||||
if (!view)
|
||||
return;
|
||||
|
||||
ui::MouseEvent ui_event =
|
||||
TranslateUiClickEvent(event, type, mouseUp, clickCount);
|
||||
view->OnMouseEvent(&ui_event);
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeAura::SendMouseMoveEvent(
|
||||
const CefMouseEvent& event,
|
||||
bool mouseLeave) {
|
||||
auto view = GetHostView();
|
||||
if (!view)
|
||||
return;
|
||||
|
||||
ui::MouseEvent ui_event = TranslateUiMoveEvent(event, mouseLeave);
|
||||
view->OnMouseEvent(&ui_event);
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeAura::SendMouseWheelEvent(
|
||||
const CefMouseEvent& event,
|
||||
int deltaX,
|
||||
int deltaY) {
|
||||
auto view = GetHostView();
|
||||
if (!view)
|
||||
return;
|
||||
|
||||
ui::MouseWheelEvent ui_event = TranslateUiWheelEvent(event, deltaX, deltaY);
|
||||
view->OnMouseEvent(&ui_event);
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeAura::SendTouchEvent(
|
||||
const CefTouchEvent& event) {
|
||||
NOTIMPLEMENTED();
|
||||
}
|
||||
|
||||
content::NativeWebKeyboardEvent
|
||||
CefBrowserPlatformDelegateNativeAura::TranslateWebKeyEvent(
|
||||
const CefKeyEvent& key_event) const {
|
||||
return content::NativeWebKeyboardEvent(TranslateUiKeyEvent(key_event));
|
||||
}
|
||||
|
||||
blink::WebMouseEvent
|
||||
CefBrowserPlatformDelegateNativeAura::TranslateWebClickEvent(
|
||||
const CefMouseEvent& mouse_event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) const {
|
||||
return ui::MakeWebMouseEvent(
|
||||
TranslateUiClickEvent(mouse_event, type, mouseUp, clickCount));
|
||||
}
|
||||
|
||||
blink::WebMouseEvent
|
||||
CefBrowserPlatformDelegateNativeAura::TranslateWebMoveEvent(
|
||||
const CefMouseEvent& mouse_event,
|
||||
bool mouseLeave) const {
|
||||
return ui::MakeWebMouseEvent(TranslateUiMoveEvent(mouse_event, mouseLeave));
|
||||
}
|
||||
|
||||
blink::WebMouseWheelEvent
|
||||
CefBrowserPlatformDelegateNativeAura::TranslateWebWheelEvent(
|
||||
const CefMouseEvent& mouse_event,
|
||||
int deltaX,
|
||||
int deltaY) const {
|
||||
return ui::MakeWebMouseWheelEvent(
|
||||
TranslateUiWheelEvent(mouse_event, deltaX, deltaY));
|
||||
}
|
||||
|
||||
ui::MouseEvent CefBrowserPlatformDelegateNativeAura::TranslateUiClickEvent(
|
||||
const CefMouseEvent& mouse_event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) const {
|
||||
DCHECK_GE(clickCount, 1);
|
||||
|
||||
ui::EventType event_type =
|
||||
mouseUp ? ui::ET_MOUSE_RELEASED : ui::ET_MOUSE_PRESSED;
|
||||
gfx::PointF location(mouse_event.x, mouse_event.y);
|
||||
gfx::PointF root_location(
|
||||
GetScreenPoint(gfx::Point(mouse_event.x, mouse_event.y)));
|
||||
base::TimeTicks time_stamp = GetEventTimeStamp();
|
||||
int flags = TranslateUiEventModifiers(mouse_event.modifiers);
|
||||
|
||||
int changed_button_flags = 0;
|
||||
switch (type) {
|
||||
case MBT_LEFT:
|
||||
changed_button_flags |= ui::EF_LEFT_MOUSE_BUTTON;
|
||||
break;
|
||||
case MBT_MIDDLE:
|
||||
changed_button_flags |= ui::EF_MIDDLE_MOUSE_BUTTON;
|
||||
break;
|
||||
case MBT_RIGHT:
|
||||
changed_button_flags |= ui::EF_RIGHT_MOUSE_BUTTON;
|
||||
break;
|
||||
default:
|
||||
NOTREACHED();
|
||||
}
|
||||
|
||||
ui::MouseEvent result(event_type, location, root_location, time_stamp, flags,
|
||||
changed_button_flags);
|
||||
result.SetClickCount(clickCount);
|
||||
return result;
|
||||
}
|
||||
|
||||
ui::MouseEvent CefBrowserPlatformDelegateNativeAura::TranslateUiMoveEvent(
|
||||
const CefMouseEvent& mouse_event,
|
||||
bool mouseLeave) const {
|
||||
ui::EventType event_type =
|
||||
mouseLeave ? ui::ET_MOUSE_EXITED : ui::ET_MOUSE_MOVED;
|
||||
gfx::PointF location(mouse_event.x, mouse_event.y);
|
||||
gfx::PointF root_location(
|
||||
GetScreenPoint(gfx::Point(mouse_event.x, mouse_event.y)));
|
||||
base::TimeTicks time_stamp = GetEventTimeStamp();
|
||||
int flags = TranslateUiEventModifiers(mouse_event.modifiers);
|
||||
|
||||
int changed_button_flags = 0;
|
||||
if (!mouseLeave) {
|
||||
changed_button_flags = TranslateUiChangedButtonFlags(mouse_event.modifiers);
|
||||
}
|
||||
|
||||
return ui::MouseEvent(event_type, location, root_location, time_stamp, flags,
|
||||
changed_button_flags);
|
||||
}
|
||||
|
||||
ui::MouseWheelEvent CefBrowserPlatformDelegateNativeAura::TranslateUiWheelEvent(
|
||||
const CefMouseEvent& mouse_event,
|
||||
int deltaX,
|
||||
int deltaY) const {
|
||||
gfx::Vector2d offset(GetUiWheelEventOffset(deltaX, deltaY));
|
||||
DCHECK(!offset.IsZero());
|
||||
|
||||
gfx::PointF location(mouse_event.x, mouse_event.y);
|
||||
gfx::PointF root_location(
|
||||
GetScreenPoint(gfx::Point(mouse_event.x, mouse_event.y)));
|
||||
base::TimeTicks time_stamp = GetEventTimeStamp();
|
||||
int flags = TranslateUiEventModifiers(mouse_event.modifiers);
|
||||
int changed_button_flags =
|
||||
TranslateUiChangedButtonFlags(mouse_event.modifiers);
|
||||
|
||||
return ui::MouseWheelEvent(offset, location, root_location, time_stamp,
|
||||
(ui::EF_PRECISION_SCROLLING_DELTA | flags),
|
||||
changed_button_flags);
|
||||
}
|
||||
|
||||
gfx::Vector2d CefBrowserPlatformDelegateNativeAura::GetUiWheelEventOffset(
|
||||
int deltaX,
|
||||
int deltaY) const {
|
||||
return gfx::Vector2d(deltaX, deltaY);
|
||||
}
|
||||
|
||||
// static
|
||||
int CefBrowserPlatformDelegateNativeAura::TranslateUiEventModifiers(
|
||||
uint32 cef_modifiers) {
|
||||
int result = 0;
|
||||
// Set modifiers based on key state.
|
||||
if (cef_modifiers & EVENTFLAG_SHIFT_DOWN)
|
||||
result |= ui::EF_SHIFT_DOWN;
|
||||
if (cef_modifiers & EVENTFLAG_CONTROL_DOWN)
|
||||
result |= ui::EF_CONTROL_DOWN;
|
||||
if (cef_modifiers & EVENTFLAG_ALT_DOWN)
|
||||
result |= ui::EF_ALT_DOWN;
|
||||
if (cef_modifiers & EVENTFLAG_COMMAND_DOWN)
|
||||
result |= ui::EF_COMMAND_DOWN;
|
||||
if (cef_modifiers & EVENTFLAG_LEFT_MOUSE_BUTTON)
|
||||
result |= ui::EF_LEFT_MOUSE_BUTTON;
|
||||
if (cef_modifiers & EVENTFLAG_MIDDLE_MOUSE_BUTTON)
|
||||
result |= ui::EF_MIDDLE_MOUSE_BUTTON;
|
||||
if (cef_modifiers & EVENTFLAG_RIGHT_MOUSE_BUTTON)
|
||||
result |= ui::EF_RIGHT_MOUSE_BUTTON;
|
||||
if (cef_modifiers & EVENTFLAG_CAPS_LOCK_ON)
|
||||
result |= ui::EF_CAPS_LOCK_ON;
|
||||
if (cef_modifiers & EVENTFLAG_NUM_LOCK_ON)
|
||||
result |= ui::EF_NUM_LOCK_ON;
|
||||
if (cef_modifiers & EVENTFLAG_ALTGR_DOWN)
|
||||
result |= ui::EF_ALTGR_DOWN;
|
||||
return result;
|
||||
}
|
||||
|
||||
// static
|
||||
int CefBrowserPlatformDelegateNativeAura::TranslateUiChangedButtonFlags(
|
||||
uint32 cef_modifiers) {
|
||||
int result = 0;
|
||||
if (cef_modifiers & EVENTFLAG_LEFT_MOUSE_BUTTON)
|
||||
result |= ui::EF_LEFT_MOUSE_BUTTON;
|
||||
else if (cef_modifiers & EVENTFLAG_MIDDLE_MOUSE_BUTTON)
|
||||
result |= ui::EF_MIDDLE_MOUSE_BUTTON;
|
||||
else if (cef_modifiers & EVENTFLAG_RIGHT_MOUSE_BUTTON)
|
||||
result |= ui::EF_RIGHT_MOUSE_BUTTON;
|
||||
return result;
|
||||
}
|
||||
|
||||
content::RenderWidgetHostViewAura*
|
||||
CefBrowserPlatformDelegateNativeAura::GetHostView() const {
|
||||
return static_cast<content::RenderWidgetHostViewAura*>(
|
||||
browser_->web_contents()->GetRenderWidgetHostView());
|
||||
}
|
@@ -1,81 +0,0 @@
|
||||
// Copyright 2020 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.
|
||||
|
||||
#ifndef CEF_LIBCEF_BROWSER_NATIVE_BROWSER_PLATFORM_DELEGATE_NATIVE_AURA_H_
|
||||
#define CEF_LIBCEF_BROWSER_NATIVE_BROWSER_PLATFORM_DELEGATE_NATIVE_AURA_H_
|
||||
|
||||
#include "libcef/browser/native/browser_platform_delegate_native.h"
|
||||
|
||||
#include "ui/events/event.h"
|
||||
|
||||
namespace content {
|
||||
class RenderWidgetHostViewAura;
|
||||
}
|
||||
|
||||
namespace gfx {
|
||||
class Vector2d;
|
||||
}
|
||||
|
||||
// Windowed browser implementation for Aura platforms.
|
||||
class CefBrowserPlatformDelegateNativeAura
|
||||
: public CefBrowserPlatformDelegateNative {
|
||||
public:
|
||||
CefBrowserPlatformDelegateNativeAura(const CefWindowInfo& window_info,
|
||||
SkColor background_color,
|
||||
bool use_shared_texture,
|
||||
bool use_external_begin_frame);
|
||||
|
||||
// CefBrowserPlatformDelegate methods:
|
||||
void SendKeyEvent(const CefKeyEvent& event) override;
|
||||
void SendMouseClickEvent(const CefMouseEvent& event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) override;
|
||||
void SendMouseMoveEvent(const CefMouseEvent& event, bool mouseLeave) override;
|
||||
void SendMouseWheelEvent(const CefMouseEvent& event,
|
||||
int deltaX,
|
||||
int deltaY) override;
|
||||
void SendTouchEvent(const CefTouchEvent& event) override;
|
||||
|
||||
// CefBrowserPlatformDelegateNative methods:
|
||||
content::NativeWebKeyboardEvent TranslateWebKeyEvent(
|
||||
const CefKeyEvent& key_event) const override;
|
||||
blink::WebMouseEvent TranslateWebClickEvent(
|
||||
const CefMouseEvent& mouse_event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) const override;
|
||||
blink::WebMouseEvent TranslateWebMoveEvent(const CefMouseEvent& mouse_event,
|
||||
bool mouseLeave) const override;
|
||||
blink::WebMouseWheelEvent TranslateWebWheelEvent(
|
||||
const CefMouseEvent& mouse_event,
|
||||
int deltaX,
|
||||
int deltaY) const override;
|
||||
|
||||
// Translate CEF events to Chromium UI events.
|
||||
virtual ui::KeyEvent TranslateUiKeyEvent(
|
||||
const CefKeyEvent& key_event) const = 0;
|
||||
virtual ui::MouseEvent TranslateUiClickEvent(
|
||||
const CefMouseEvent& mouse_event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) const;
|
||||
virtual ui::MouseEvent TranslateUiMoveEvent(const CefMouseEvent& mouse_event,
|
||||
bool mouseLeave) const;
|
||||
virtual ui::MouseWheelEvent TranslateUiWheelEvent(
|
||||
const CefMouseEvent& mouse_event,
|
||||
int deltaX,
|
||||
int deltaY) const;
|
||||
virtual gfx::Vector2d GetUiWheelEventOffset(int deltaX, int deltaY) const;
|
||||
virtual base::TimeTicks GetEventTimeStamp() const = 0;
|
||||
|
||||
protected:
|
||||
static int TranslateUiEventModifiers(uint32 cef_modifiers);
|
||||
static int TranslateUiChangedButtonFlags(uint32 cef_modifiers);
|
||||
|
||||
private:
|
||||
content::RenderWidgetHostViewAura* GetHostView() const;
|
||||
};
|
||||
|
||||
#endif // CEF_LIBCEF_BROWSER_NATIVE_BROWSER_PLATFORM_DELEGATE_NATIVE_AURA_H_
|
@@ -46,10 +46,10 @@ CefBrowserPlatformDelegateNativeLinux::CefBrowserPlatformDelegateNativeLinux(
|
||||
const CefWindowInfo& window_info,
|
||||
SkColor background_color,
|
||||
bool use_external_begin_frame)
|
||||
: CefBrowserPlatformDelegateNativeAura(window_info,
|
||||
background_color,
|
||||
false,
|
||||
use_external_begin_frame),
|
||||
: CefBrowserPlatformDelegateNative(window_info,
|
||||
background_color,
|
||||
false,
|
||||
use_external_begin_frame),
|
||||
host_window_created_(false),
|
||||
window_widget_(nullptr) {}
|
||||
|
||||
@@ -256,10 +256,133 @@ bool CefBrowserPlatformDelegateNativeLinux::HandleKeyboardEvent(
|
||||
// static
|
||||
void CefBrowserPlatformDelegate::HandleExternalProtocol(const GURL& url) {}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeLinux::TranslateKeyEvent(
|
||||
content::NativeWebKeyboardEvent& result,
|
||||
const CefKeyEvent& key_event) const {
|
||||
result.windows_key_code = key_event.windows_key_code;
|
||||
result.native_key_code = key_event.native_key_code;
|
||||
result.is_system_key = key_event.is_system_key ? 1 : 0;
|
||||
switch (key_event.type) {
|
||||
case KEYEVENT_RAWKEYDOWN:
|
||||
case KEYEVENT_KEYDOWN:
|
||||
result.SetType(blink::WebInputEvent::kRawKeyDown);
|
||||
break;
|
||||
case KEYEVENT_KEYUP:
|
||||
result.SetType(blink::WebInputEvent::kKeyUp);
|
||||
break;
|
||||
case KEYEVENT_CHAR:
|
||||
result.SetType(blink::WebInputEvent::kChar);
|
||||
break;
|
||||
default:
|
||||
NOTREACHED();
|
||||
}
|
||||
|
||||
#if defined(USE_X11)
|
||||
// Populate DOM values that will be passed to JavaScript handlers via
|
||||
// KeyboardEvent.
|
||||
result.dom_code = static_cast<int>(
|
||||
ui::KeycodeConverter::NativeKeycodeToDomCode(key_event.native_key_code));
|
||||
int keysym = ui::XKeysymForWindowsKeyCode(
|
||||
static_cast<ui::KeyboardCode>(key_event.windows_key_code),
|
||||
!!(key_event.modifiers & EVENTFLAG_SHIFT_DOWN));
|
||||
base::char16 ch = ui::GetUnicodeCharacterFromXKeySym(keysym);
|
||||
result.dom_key = static_cast<int>(ui::XKeySymToDomKey(keysym, ch));
|
||||
|
||||
result.text[0] = key_event.character;
|
||||
result.unmodified_text[0] = key_event.unmodified_character;
|
||||
|
||||
result.SetModifiers(result.GetModifiers() |
|
||||
TranslateModifiers(key_event.modifiers));
|
||||
#endif // defined(USE_X11)
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeLinux::TranslateClickEvent(
|
||||
blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) const {
|
||||
TranslateMouseEvent(result, mouse_event);
|
||||
|
||||
switch (type) {
|
||||
case MBT_LEFT:
|
||||
result.SetType(mouseUp ? blink::WebInputEvent::kMouseUp
|
||||
: blink::WebInputEvent::kMouseDown);
|
||||
result.button = blink::WebMouseEvent::Button::kLeft;
|
||||
break;
|
||||
case MBT_MIDDLE:
|
||||
result.SetType(mouseUp ? blink::WebInputEvent::kMouseUp
|
||||
: blink::WebInputEvent::kMouseDown);
|
||||
result.button = blink::WebMouseEvent::Button::kMiddle;
|
||||
break;
|
||||
case MBT_RIGHT:
|
||||
result.SetType(mouseUp ? blink::WebInputEvent::kMouseUp
|
||||
: blink::WebInputEvent::kMouseDown);
|
||||
result.button = blink::WebMouseEvent::Button::kRight;
|
||||
break;
|
||||
default:
|
||||
NOTREACHED();
|
||||
}
|
||||
|
||||
result.click_count = clickCount;
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeLinux::TranslateMoveEvent(
|
||||
blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
bool mouseLeave) const {
|
||||
TranslateMouseEvent(result, mouse_event);
|
||||
|
||||
if (!mouseLeave) {
|
||||
result.SetType(blink::WebInputEvent::kMouseMove);
|
||||
if (mouse_event.modifiers & EVENTFLAG_LEFT_MOUSE_BUTTON)
|
||||
result.button = blink::WebMouseEvent::Button::kLeft;
|
||||
else if (mouse_event.modifiers & EVENTFLAG_MIDDLE_MOUSE_BUTTON)
|
||||
result.button = blink::WebMouseEvent::Button::kMiddle;
|
||||
else if (mouse_event.modifiers & EVENTFLAG_RIGHT_MOUSE_BUTTON)
|
||||
result.button = blink::WebMouseEvent::Button::kRight;
|
||||
else
|
||||
result.button = blink::WebMouseEvent::Button::kNoButton;
|
||||
} else {
|
||||
result.SetType(blink::WebInputEvent::kMouseLeave);
|
||||
result.button = blink::WebMouseEvent::Button::kNoButton;
|
||||
}
|
||||
|
||||
result.click_count = 0;
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeLinux::TranslateWheelEvent(
|
||||
blink::WebMouseWheelEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
int deltaX,
|
||||
int deltaY) const {
|
||||
result = blink::WebMouseWheelEvent();
|
||||
TranslateMouseEvent(result, mouse_event);
|
||||
|
||||
result.SetType(blink::WebInputEvent::kMouseWheel);
|
||||
|
||||
static const double scrollbarPixelsPerGtkTick = 40.0;
|
||||
result.delta_x = deltaX;
|
||||
result.delta_y = deltaY;
|
||||
result.wheel_ticks_x = deltaX / scrollbarPixelsPerGtkTick;
|
||||
result.wheel_ticks_y = deltaY / scrollbarPixelsPerGtkTick;
|
||||
result.delta_units =
|
||||
ui::input_types::ScrollGranularity::kScrollByPrecisePixel;
|
||||
|
||||
if (mouse_event.modifiers & EVENTFLAG_LEFT_MOUSE_BUTTON)
|
||||
result.button = blink::WebMouseEvent::Button::kLeft;
|
||||
else if (mouse_event.modifiers & EVENTFLAG_MIDDLE_MOUSE_BUTTON)
|
||||
result.button = blink::WebMouseEvent::Button::kMiddle;
|
||||
else if (mouse_event.modifiers & EVENTFLAG_RIGHT_MOUSE_BUTTON)
|
||||
result.button = blink::WebMouseEvent::Button::kRight;
|
||||
else
|
||||
result.button = blink::WebMouseEvent::Button::kNoButton;
|
||||
}
|
||||
|
||||
CefEventHandle CefBrowserPlatformDelegateNativeLinux::GetEventHandle(
|
||||
const content::NativeWebKeyboardEvent& event) const {
|
||||
if (!event.os_event)
|
||||
return nullptr;
|
||||
return NULL;
|
||||
return const_cast<CefEventHandle>(
|
||||
static_cast<CefEventHandle>(event.os_event->native_event()));
|
||||
}
|
||||
@@ -269,6 +392,27 @@ CefBrowserPlatformDelegateNativeLinux::CreateMenuRunner() {
|
||||
return base::WrapUnique(new CefMenuRunnerLinux);
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeLinux::TranslateMouseEvent(
|
||||
blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event) const {
|
||||
// position
|
||||
result.SetPositionInWidget(mouse_event.x, mouse_event.y);
|
||||
|
||||
const gfx::Point& screen_pt =
|
||||
GetScreenPoint(gfx::Point(mouse_event.x, mouse_event.y));
|
||||
result.SetPositionInScreen(screen_pt.x(), screen_pt.y());
|
||||
|
||||
// modifiers
|
||||
result.SetModifiers(result.GetModifiers() |
|
||||
TranslateModifiers(mouse_event.modifiers));
|
||||
|
||||
// timestamp
|
||||
result.SetTimeStamp(base::TimeTicks() +
|
||||
base::TimeDelta::FromSeconds(GetSystemUptime()));
|
||||
|
||||
result.pointer_type = blink::WebPointerProperties::PointerType::kMouse;
|
||||
}
|
||||
|
||||
gfx::Point CefBrowserPlatformDelegateNativeLinux::GetDialogPosition(
|
||||
const gfx::Size& size) {
|
||||
const gfx::Size& max_size = GetMaximumDialogSize();
|
||||
@@ -279,51 +423,3 @@ gfx::Point CefBrowserPlatformDelegateNativeLinux::GetDialogPosition(
|
||||
gfx::Size CefBrowserPlatformDelegateNativeLinux::GetMaximumDialogSize() {
|
||||
return GetWindowWidget()->GetWindowBoundsInScreen().size();
|
||||
}
|
||||
|
||||
ui::KeyEvent CefBrowserPlatformDelegateNativeLinux::TranslateUiKeyEvent(
|
||||
const CefKeyEvent& key_event) const {
|
||||
int flags = TranslateUiEventModifiers(key_event.modifiers);
|
||||
ui::KeyboardCode key_code =
|
||||
static_cast<ui::KeyboardCode>(key_event.windows_key_code);
|
||||
ui::DomCode dom_code =
|
||||
ui::KeycodeConverter::NativeKeycodeToDomCode(key_event.native_key_code);
|
||||
int keysym = ui::XKeysymForWindowsKeyCode(
|
||||
key_code, !!(key_event.modifiers & EVENTFLAG_SHIFT_DOWN));
|
||||
base::char16 character = ui::GetUnicodeCharacterFromXKeySym(keysym);
|
||||
base::TimeTicks time_stamp = GetEventTimeStamp();
|
||||
|
||||
if (key_event.type == KEYEVENT_CHAR) {
|
||||
return ui::KeyEvent(character, key_code, dom_code, flags, time_stamp);
|
||||
}
|
||||
|
||||
ui::EventType type = ui::ET_UNKNOWN;
|
||||
switch (key_event.type) {
|
||||
case KEYEVENT_RAWKEYDOWN:
|
||||
case KEYEVENT_KEYDOWN:
|
||||
type = ui::ET_KEY_PRESSED;
|
||||
break;
|
||||
case KEYEVENT_KEYUP:
|
||||
type = ui::ET_KEY_RELEASED;
|
||||
break;
|
||||
default:
|
||||
NOTREACHED();
|
||||
}
|
||||
|
||||
ui::DomKey dom_key = ui::XKeySymToDomKey(keysym, character);
|
||||
return ui::KeyEvent(type, key_code, dom_code, flags, dom_key, time_stamp);
|
||||
}
|
||||
|
||||
content::NativeWebKeyboardEvent
|
||||
CefBrowserPlatformDelegateNativeLinux::TranslateWebKeyEvent(
|
||||
const CefKeyEvent& key_event) const {
|
||||
ui::KeyEvent ui_event = TranslateUiKeyEvent(key_event);
|
||||
if (key_event.type == KEYEVENT_CHAR) {
|
||||
return content::NativeWebKeyboardEvent(ui_event, key_event.character);
|
||||
}
|
||||
return content::NativeWebKeyboardEvent(ui_event);
|
||||
}
|
||||
|
||||
base::TimeTicks CefBrowserPlatformDelegateNativeLinux::GetEventTimeStamp()
|
||||
const {
|
||||
return base::TimeTicks() + base::TimeDelta::FromSeconds(GetSystemUptime());
|
||||
}
|
||||
|
@@ -5,7 +5,7 @@
|
||||
#ifndef CEF_LIBCEF_BROWSER_NATIVE_BROWSER_PLATFORM_DELEGATE_NATIVE_LINUX_H_
|
||||
#define CEF_LIBCEF_BROWSER_NATIVE_BROWSER_PLATFORM_DELEGATE_NATIVE_LINUX_H_
|
||||
|
||||
#include "libcef/browser/native/browser_platform_delegate_native_aura.h"
|
||||
#include "libcef/browser/native/browser_platform_delegate_native.h"
|
||||
|
||||
#if defined(USE_X11)
|
||||
class CefWindowX11;
|
||||
@@ -13,7 +13,7 @@ class CefWindowX11;
|
||||
|
||||
// Windowed browser implementation for Linux.
|
||||
class CefBrowserPlatformDelegateNativeLinux
|
||||
: public CefBrowserPlatformDelegateNativeAura {
|
||||
: public CefBrowserPlatformDelegateNative {
|
||||
public:
|
||||
CefBrowserPlatformDelegateNativeLinux(const CefWindowInfo& window_info,
|
||||
SkColor background_color,
|
||||
@@ -32,19 +32,30 @@ class CefBrowserPlatformDelegateNativeLinux
|
||||
void ViewText(const std::string& text) override;
|
||||
bool HandleKeyboardEvent(
|
||||
const content::NativeWebKeyboardEvent& event) override;
|
||||
void TranslateKeyEvent(content::NativeWebKeyboardEvent& result,
|
||||
const CefKeyEvent& key_event) const override;
|
||||
void TranslateClickEvent(blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) const override;
|
||||
void TranslateMoveEvent(blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
bool mouseLeave) const override;
|
||||
void TranslateWheelEvent(blink::WebMouseWheelEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
int deltaX,
|
||||
int deltaY) const override;
|
||||
CefEventHandle GetEventHandle(
|
||||
const content::NativeWebKeyboardEvent& event) const override;
|
||||
std::unique_ptr<CefMenuRunner> CreateMenuRunner() override;
|
||||
gfx::Point GetDialogPosition(const gfx::Size& size) override;
|
||||
gfx::Size GetMaximumDialogSize() override;
|
||||
|
||||
// CefBrowserPlatformDelegateNativeAura methods:
|
||||
ui::KeyEvent TranslateUiKeyEvent(const CefKeyEvent& key_event) const override;
|
||||
content::NativeWebKeyboardEvent TranslateWebKeyEvent(
|
||||
const CefKeyEvent& key_event) const override;
|
||||
base::TimeTicks GetEventTimeStamp() const override;
|
||||
|
||||
private:
|
||||
void TranslateMouseEvent(blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event) const;
|
||||
|
||||
// True if the host window has been created.
|
||||
bool host_window_created_;
|
||||
|
||||
|
@@ -7,10 +7,6 @@
|
||||
|
||||
#include "libcef/browser/native/browser_platform_delegate_native.h"
|
||||
|
||||
namespace content {
|
||||
class RenderWidgetHostViewMac;
|
||||
}
|
||||
|
||||
// Windowed browser implementation for Mac OS X.
|
||||
class CefBrowserPlatformDelegateNativeMac
|
||||
: public CefBrowserPlatformDelegateNative {
|
||||
@@ -23,21 +19,25 @@ class CefBrowserPlatformDelegateNativeMac
|
||||
bool CreateHostWindow() override;
|
||||
void CloseHostWindow() override;
|
||||
CefWindowHandle GetHostWindowHandle() const override;
|
||||
void SendKeyEvent(const CefKeyEvent& event) override;
|
||||
void SendMouseClickEvent(const CefMouseEvent& event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) override;
|
||||
void SendMouseMoveEvent(const CefMouseEvent& event, bool mouseLeave) override;
|
||||
void SendMouseWheelEvent(const CefMouseEvent& event,
|
||||
int deltaX,
|
||||
int deltaY) override;
|
||||
void SendTouchEvent(const CefTouchEvent& event) override;
|
||||
void SendFocusEvent(bool setFocus) override;
|
||||
gfx::Point GetScreenPoint(const gfx::Point& view) const override;
|
||||
void ViewText(const std::string& text) override;
|
||||
bool HandleKeyboardEvent(
|
||||
const content::NativeWebKeyboardEvent& event) override;
|
||||
void TranslateKeyEvent(content::NativeWebKeyboardEvent& result,
|
||||
const CefKeyEvent& key_event) const override;
|
||||
void TranslateClickEvent(blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) const override;
|
||||
void TranslateMoveEvent(blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
bool mouseLeave) const override;
|
||||
void TranslateWheelEvent(blink::WebMouseWheelEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
int deltaX,
|
||||
int deltaY) const override;
|
||||
CefEventHandle GetEventHandle(
|
||||
const content::NativeWebKeyboardEvent& event) const override;
|
||||
std::unique_ptr<CefFileDialogRunner> CreateFileDialogRunner() override;
|
||||
@@ -47,26 +47,9 @@ class CefBrowserPlatformDelegateNativeMac
|
||||
gfx::Point GetDialogPosition(const gfx::Size& size) override;
|
||||
gfx::Size GetMaximumDialogSize() override;
|
||||
|
||||
// CefBrowserPlatformDelegateNative methods:
|
||||
content::NativeWebKeyboardEvent TranslateWebKeyEvent(
|
||||
const CefKeyEvent& key_event) const override;
|
||||
blink::WebMouseEvent TranslateWebClickEvent(
|
||||
const CefMouseEvent& mouse_event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) const override;
|
||||
blink::WebMouseEvent TranslateWebMoveEvent(const CefMouseEvent& mouse_event,
|
||||
bool mouseLeave) const override;
|
||||
blink::WebMouseWheelEvent TranslateWebWheelEvent(
|
||||
const CefMouseEvent& mouse_event,
|
||||
int deltaX,
|
||||
int deltaY) const override;
|
||||
|
||||
private:
|
||||
void TranslateWebMouseEvent(blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event) const;
|
||||
|
||||
content::RenderWidgetHostViewMac* GetHostView() const;
|
||||
void TranslateMouseEvent(blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event) const;
|
||||
|
||||
// True if the host window has been created.
|
||||
bool host_window_created_;
|
||||
|
@@ -17,7 +17,6 @@
|
||||
#include "base/mac/scoped_nsautorelease_pool.h"
|
||||
#include "base/memory/ptr_util.h"
|
||||
#include "base/threading/thread_restrictions.h"
|
||||
#include "content/browser/renderer_host/render_widget_host_view_mac.h"
|
||||
#include "content/public/browser/native_web_keyboard_event.h"
|
||||
#include "content/public/browser/render_widget_host_view.h"
|
||||
#include "content/public/browser/web_contents.h"
|
||||
@@ -26,7 +25,6 @@
|
||||
#include "third_party/blink/public/platform/web_mouse_wheel_event.h"
|
||||
#import "ui/base/cocoa/cocoa_base_utils.h"
|
||||
#import "ui/base/cocoa/underlay_opengl_hosting_window.h"
|
||||
#include "ui/events/base_event_utils.h"
|
||||
#include "ui/events/keycodes/keyboard_codes_posix.h"
|
||||
#include "ui/gfx/geometry/rect.h"
|
||||
|
||||
@@ -257,61 +255,9 @@ CefWindowHandle CefBrowserPlatformDelegateNativeMac::GetHostWindowHandle()
|
||||
return window_info_.view;
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeMac::SendKeyEvent(
|
||||
const CefKeyEvent& event) {
|
||||
auto view = GetHostView();
|
||||
if (!view)
|
||||
return;
|
||||
|
||||
content::NativeWebKeyboardEvent web_event = TranslateWebKeyEvent(event);
|
||||
view->ForwardKeyboardEvent(web_event, ui::LatencyInfo());
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeMac::SendMouseClickEvent(
|
||||
const CefMouseEvent& event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) {
|
||||
auto view = GetHostView();
|
||||
if (!view)
|
||||
return;
|
||||
|
||||
blink::WebMouseEvent web_event =
|
||||
TranslateWebClickEvent(event, type, mouseUp, clickCount);
|
||||
view->RouteOrProcessMouseEvent(web_event);
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeMac::SendMouseMoveEvent(
|
||||
const CefMouseEvent& event,
|
||||
bool mouseLeave) {
|
||||
auto view = GetHostView();
|
||||
if (!view)
|
||||
return;
|
||||
|
||||
blink::WebMouseEvent web_event = TranslateWebMoveEvent(event, mouseLeave);
|
||||
view->RouteOrProcessMouseEvent(web_event);
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeMac::SendMouseWheelEvent(
|
||||
const CefMouseEvent& event,
|
||||
int deltaX,
|
||||
int deltaY) {
|
||||
auto view = GetHostView();
|
||||
if (!view)
|
||||
return;
|
||||
|
||||
blink::WebMouseWheelEvent web_event =
|
||||
TranslateWebWheelEvent(event, deltaX, deltaY);
|
||||
view->RouteOrProcessMouseEvent(web_event);
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeMac::SendTouchEvent(
|
||||
const CefTouchEvent& event) {
|
||||
NOTIMPLEMENTED();
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeMac::SendFocusEvent(bool setFocus) {
|
||||
auto view = GetHostView();
|
||||
content::RenderWidgetHostView* view =
|
||||
browser_->web_contents()->GetRenderWidgetHostView();
|
||||
if (view) {
|
||||
view->SetActive(setFocus);
|
||||
|
||||
@@ -358,51 +304,15 @@ bool CefBrowserPlatformDelegateNativeMac::HandleKeyboardEvent(
|
||||
// static
|
||||
void CefBrowserPlatformDelegate::HandleExternalProtocol(const GURL& url) {}
|
||||
|
||||
CefEventHandle CefBrowserPlatformDelegateNativeMac::GetEventHandle(
|
||||
const content::NativeWebKeyboardEvent& event) const {
|
||||
return event.os_event;
|
||||
}
|
||||
|
||||
std::unique_ptr<CefFileDialogRunner>
|
||||
CefBrowserPlatformDelegateNativeMac::CreateFileDialogRunner() {
|
||||
return base::WrapUnique(new CefFileDialogRunnerMac);
|
||||
}
|
||||
|
||||
std::unique_ptr<CefJavaScriptDialogRunner>
|
||||
CefBrowserPlatformDelegateNativeMac::CreateJavaScriptDialogRunner() {
|
||||
return base::WrapUnique(new CefJavaScriptDialogRunnerMac);
|
||||
}
|
||||
|
||||
std::unique_ptr<CefMenuRunner>
|
||||
CefBrowserPlatformDelegateNativeMac::CreateMenuRunner() {
|
||||
return base::WrapUnique(new CefMenuRunnerMac);
|
||||
}
|
||||
|
||||
gfx::Point CefBrowserPlatformDelegateNativeMac::GetDialogPosition(
|
||||
const gfx::Size& size) {
|
||||
// Dialogs are always re-positioned by the constrained window sheet controller
|
||||
// so nothing interesting to return yet.
|
||||
return gfx::Point();
|
||||
}
|
||||
|
||||
gfx::Size CefBrowserPlatformDelegateNativeMac::GetMaximumDialogSize() {
|
||||
// The dialog should try to fit within the overlay for the web contents.
|
||||
// Note that, for things like print preview, this is just a suggested maximum.
|
||||
return browser_->web_contents()->GetContainerBounds().size();
|
||||
}
|
||||
|
||||
content::NativeWebKeyboardEvent
|
||||
CefBrowserPlatformDelegateNativeMac::TranslateWebKeyEvent(
|
||||
void CefBrowserPlatformDelegateNativeMac::TranslateKeyEvent(
|
||||
content::NativeWebKeyboardEvent& result,
|
||||
const CefKeyEvent& key_event) const {
|
||||
content::NativeWebKeyboardEvent result(blink::WebInputEvent::kUndefined,
|
||||
blink::WebInputEvent::kNoModifiers,
|
||||
ui::EventTimeForNow());
|
||||
|
||||
// Use a synthetic NSEvent in order to obtain the windowsKeyCode member from
|
||||
// the NativeWebKeyboardEvent constructor. This is the only member which can
|
||||
// not be easily translated (without hardcoding keyCodes)
|
||||
// Determining whether a modifier key is left or right seems to be done
|
||||
// through the key code as well.
|
||||
|
||||
NSEventType event_type;
|
||||
if (key_event.character == 0 && key_event.unmodified_character == 0) {
|
||||
// Check if both character and unmodified_characther are empty to determine
|
||||
@@ -447,18 +357,15 @@ CefBrowserPlatformDelegateNativeMac::TranslateWebKeyEvent(
|
||||
result.SetType(blink::WebInputEvent::kChar);
|
||||
|
||||
result.is_system_key = key_event.is_system_key;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
blink::WebMouseEvent
|
||||
CefBrowserPlatformDelegateNativeMac::TranslateWebClickEvent(
|
||||
void CefBrowserPlatformDelegateNativeMac::TranslateClickEvent(
|
||||
blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) const {
|
||||
blink::WebMouseEvent result;
|
||||
TranslateWebMouseEvent(result, mouse_event);
|
||||
TranslateMouseEvent(result, mouse_event);
|
||||
|
||||
switch (type) {
|
||||
case MBT_LEFT:
|
||||
@@ -481,15 +388,13 @@ CefBrowserPlatformDelegateNativeMac::TranslateWebClickEvent(
|
||||
}
|
||||
|
||||
result.click_count = clickCount;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
blink::WebMouseEvent CefBrowserPlatformDelegateNativeMac::TranslateWebMoveEvent(
|
||||
void CefBrowserPlatformDelegateNativeMac::TranslateMoveEvent(
|
||||
blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
bool mouseLeave) const {
|
||||
blink::WebMouseEvent result;
|
||||
TranslateWebMouseEvent(result, mouse_event);
|
||||
TranslateMouseEvent(result, mouse_event);
|
||||
|
||||
if (!mouseLeave) {
|
||||
result.SetType(blink::WebInputEvent::kMouseMove);
|
||||
@@ -507,17 +412,15 @@ blink::WebMouseEvent CefBrowserPlatformDelegateNativeMac::TranslateWebMoveEvent(
|
||||
}
|
||||
|
||||
result.click_count = 0;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
blink::WebMouseWheelEvent
|
||||
CefBrowserPlatformDelegateNativeMac::TranslateWebWheelEvent(
|
||||
void CefBrowserPlatformDelegateNativeMac::TranslateWheelEvent(
|
||||
blink::WebMouseWheelEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
int deltaX,
|
||||
int deltaY) const {
|
||||
blink::WebMouseWheelEvent result;
|
||||
TranslateWebMouseEvent(result, mouse_event);
|
||||
result = blink::WebMouseWheelEvent();
|
||||
TranslateMouseEvent(result, mouse_event);
|
||||
|
||||
result.SetType(blink::WebInputEvent::kMouseWheel);
|
||||
|
||||
@@ -526,8 +429,7 @@ CefBrowserPlatformDelegateNativeMac::TranslateWebWheelEvent(
|
||||
result.delta_y = deltaY;
|
||||
result.wheel_ticks_x = deltaX / scrollbarPixelsPerCocoaTick;
|
||||
result.wheel_ticks_y = deltaY / scrollbarPixelsPerCocoaTick;
|
||||
result.delta_units =
|
||||
ui::input_types::ScrollGranularity::kScrollByPrecisePixel;
|
||||
result.delta_units = ui::input_types::ScrollGranularity::kScrollByPrecisePixel;
|
||||
|
||||
if (mouse_event.modifiers & EVENTFLAG_LEFT_MOUSE_BUTTON)
|
||||
result.button = blink::WebMouseEvent::Button::kLeft;
|
||||
@@ -537,11 +439,29 @@ CefBrowserPlatformDelegateNativeMac::TranslateWebWheelEvent(
|
||||
result.button = blink::WebMouseEvent::Button::kRight;
|
||||
else
|
||||
result.button = blink::WebMouseEvent::Button::kNoButton;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeMac::TranslateWebMouseEvent(
|
||||
CefEventHandle CefBrowserPlatformDelegateNativeMac::GetEventHandle(
|
||||
const content::NativeWebKeyboardEvent& event) const {
|
||||
return event.os_event;
|
||||
}
|
||||
|
||||
std::unique_ptr<CefFileDialogRunner>
|
||||
CefBrowserPlatformDelegateNativeMac::CreateFileDialogRunner() {
|
||||
return base::WrapUnique(new CefFileDialogRunnerMac);
|
||||
}
|
||||
|
||||
std::unique_ptr<CefJavaScriptDialogRunner>
|
||||
CefBrowserPlatformDelegateNativeMac::CreateJavaScriptDialogRunner() {
|
||||
return base::WrapUnique(new CefJavaScriptDialogRunnerMac);
|
||||
}
|
||||
|
||||
std::unique_ptr<CefMenuRunner>
|
||||
CefBrowserPlatformDelegateNativeMac::CreateMenuRunner() {
|
||||
return base::WrapUnique(new CefMenuRunnerMac);
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeMac::TranslateMouseEvent(
|
||||
blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event) const {
|
||||
// position
|
||||
@@ -553,17 +473,24 @@ void CefBrowserPlatformDelegateNativeMac::TranslateWebMouseEvent(
|
||||
|
||||
// modifiers
|
||||
result.SetModifiers(result.GetModifiers() |
|
||||
TranslateWebEventModifiers(mouse_event.modifiers));
|
||||
TranslateModifiers(mouse_event.modifiers));
|
||||
|
||||
// timestamp
|
||||
// timestamp - Mac OSX specific
|
||||
result.SetTimeStamp(base::TimeTicks() +
|
||||
base::TimeDelta::FromSeconds(currentEventTimestamp()));
|
||||
|
||||
result.pointer_type = blink::WebPointerProperties::PointerType::kMouse;
|
||||
}
|
||||
|
||||
content::RenderWidgetHostViewMac*
|
||||
CefBrowserPlatformDelegateNativeMac::GetHostView() const {
|
||||
return static_cast<content::RenderWidgetHostViewMac*>(
|
||||
browser_->web_contents()->GetRenderWidgetHostView());
|
||||
gfx::Point CefBrowserPlatformDelegateNativeMac::GetDialogPosition(
|
||||
const gfx::Size& size) {
|
||||
// Dialogs are always re-positioned by the constrained window sheet controller
|
||||
// so nothing interesting to return yet.
|
||||
return gfx::Point();
|
||||
}
|
||||
|
||||
gfx::Size CefBrowserPlatformDelegateNativeMac::GetMaximumDialogSize() {
|
||||
// The dialog should try to fit within the overlay for the web contents.
|
||||
// Note that, for things like print preview, this is just a suggested maximum.
|
||||
return browser_->web_contents()->GetContainerBounds().size();
|
||||
}
|
||||
|
@@ -32,7 +32,6 @@
|
||||
#include "ui/events/keycodes/dom/keycode_converter.h"
|
||||
#include "ui/events/keycodes/keyboard_code_conversion_win.h"
|
||||
#include "ui/events/keycodes/platform_key_map_win.h"
|
||||
#include "ui/gfx/geometry/vector2d.h"
|
||||
#include "ui/gfx/win/hwnd_util.h"
|
||||
#include "ui/views/widget/desktop_aura/desktop_window_tree_host_win.h"
|
||||
#include "ui/views/widget/widget.h"
|
||||
@@ -129,10 +128,10 @@ CefBrowserPlatformDelegateNativeWin::CefBrowserPlatformDelegateNativeWin(
|
||||
SkColor background_color,
|
||||
bool use_shared_texture,
|
||||
bool use_external_begin_frame)
|
||||
: CefBrowserPlatformDelegateNativeAura(window_info,
|
||||
background_color,
|
||||
use_shared_texture,
|
||||
use_external_begin_frame),
|
||||
: CefBrowserPlatformDelegateNative(window_info,
|
||||
background_color,
|
||||
use_shared_texture,
|
||||
use_external_begin_frame),
|
||||
host_window_created_(false),
|
||||
window_widget_(nullptr) {}
|
||||
|
||||
@@ -405,6 +404,153 @@ void CefBrowserPlatformDelegate::HandleExternalProtocol(const GURL& url) {
|
||||
CEF_POST_USER_VISIBLE_TASK(base::Bind(ExecuteExternalProtocol, url));
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeWin::TranslateKeyEvent(
|
||||
content::NativeWebKeyboardEvent& result,
|
||||
const CefKeyEvent& key_event) const {
|
||||
result.windows_key_code = key_event.windows_key_code;
|
||||
result.native_key_code = key_event.native_key_code;
|
||||
result.is_system_key = key_event.is_system_key ? 1 : 0;
|
||||
switch (key_event.type) {
|
||||
case KEYEVENT_RAWKEYDOWN:
|
||||
case KEYEVENT_KEYDOWN:
|
||||
result.SetType(blink::WebInputEvent::kRawKeyDown);
|
||||
break;
|
||||
case KEYEVENT_KEYUP:
|
||||
result.SetType(blink::WebInputEvent::kKeyUp);
|
||||
break;
|
||||
case KEYEVENT_CHAR:
|
||||
result.SetType(blink::WebInputEvent::kChar);
|
||||
break;
|
||||
default:
|
||||
NOTREACHED();
|
||||
}
|
||||
|
||||
// Populate DOM values that will be passed to JavaScript handlers via
|
||||
// KeyboardEvent.
|
||||
result.dom_code = static_cast<int>(
|
||||
ui::KeycodeConverter::NativeKeycodeToDomCode(key_event.native_key_code));
|
||||
if (result.GetType() == blink::WebInputEvent::kChar) {
|
||||
result.dom_key = ui::DomKey::FromCharacter(key_event.windows_key_code);
|
||||
} else {
|
||||
// TODO(cef): CefKeyEvent does not currently pass extended key status (see
|
||||
// WM_KEYDOWN docs) which would be necessary to pass EF_IS_EXTENDED_KEY as
|
||||
// the |flags| parameter to DomKeyFromKeyboardCode().
|
||||
int flags = 0;
|
||||
result.dom_key = ui::PlatformKeyMap::DomKeyFromKeyboardCode(
|
||||
ui::KeyboardCodeForWindowsKeyCode(key_event.windows_key_code), &flags);
|
||||
}
|
||||
|
||||
if (result.GetType() == blink::WebInputEvent::kChar ||
|
||||
result.GetType() == blink::WebInputEvent::kRawKeyDown) {
|
||||
result.text[0] = result.windows_key_code;
|
||||
result.unmodified_text[0] = result.windows_key_code;
|
||||
}
|
||||
|
||||
result.SetModifiers(result.GetModifiers() |
|
||||
TranslateModifiers(key_event.modifiers));
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeWin::TranslateClickEvent(
|
||||
blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) const {
|
||||
TranslateMouseEvent(result, mouse_event);
|
||||
|
||||
switch (type) {
|
||||
case MBT_LEFT:
|
||||
result.SetType(mouseUp ? blink::WebInputEvent::kMouseUp
|
||||
: blink::WebInputEvent::kMouseDown);
|
||||
result.button = blink::WebMouseEvent::Button::kLeft;
|
||||
break;
|
||||
case MBT_MIDDLE:
|
||||
result.SetType(mouseUp ? blink::WebInputEvent::kMouseUp
|
||||
: blink::WebInputEvent::kMouseDown);
|
||||
result.button = blink::WebMouseEvent::Button::kMiddle;
|
||||
break;
|
||||
case MBT_RIGHT:
|
||||
result.SetType(mouseUp ? blink::WebInputEvent::kMouseUp
|
||||
: blink::WebInputEvent::kMouseDown);
|
||||
result.button = blink::WebMouseEvent::Button::kRight;
|
||||
break;
|
||||
default:
|
||||
NOTREACHED();
|
||||
}
|
||||
|
||||
result.click_count = clickCount;
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeWin::TranslateMoveEvent(
|
||||
blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
bool mouseLeave) const {
|
||||
TranslateMouseEvent(result, mouse_event);
|
||||
|
||||
if (!mouseLeave) {
|
||||
result.SetType(blink::WebInputEvent::kMouseMove);
|
||||
if (mouse_event.modifiers & EVENTFLAG_LEFT_MOUSE_BUTTON)
|
||||
result.button = blink::WebMouseEvent::Button::kLeft;
|
||||
else if (mouse_event.modifiers & EVENTFLAG_MIDDLE_MOUSE_BUTTON)
|
||||
result.button = blink::WebMouseEvent::Button::kMiddle;
|
||||
else if (mouse_event.modifiers & EVENTFLAG_RIGHT_MOUSE_BUTTON)
|
||||
result.button = blink::WebMouseEvent::Button::kRight;
|
||||
else
|
||||
result.button = blink::WebMouseEvent::Button::kNoButton;
|
||||
} else {
|
||||
result.SetType(blink::WebInputEvent::kMouseLeave);
|
||||
result.button = blink::WebMouseEvent::Button::kNoButton;
|
||||
}
|
||||
|
||||
result.click_count = 0;
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeWin::TranslateWheelEvent(
|
||||
blink::WebMouseWheelEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
int deltaX,
|
||||
int deltaY) const {
|
||||
TranslateMouseEvent(result, mouse_event);
|
||||
|
||||
result.SetType(blink::WebInputEvent::kMouseWheel);
|
||||
result.button = blink::WebMouseEvent::Button::kNoButton;
|
||||
|
||||
float wheelDelta;
|
||||
bool horizontalScroll = false;
|
||||
|
||||
wheelDelta = static_cast<float>(deltaY ? deltaY : deltaX);
|
||||
|
||||
horizontalScroll = (deltaY == 0);
|
||||
|
||||
static const ULONG defaultScrollCharsPerWheelDelta = 1;
|
||||
static const FLOAT scrollbarPixelsPerLine = 100.0f / 3.0f;
|
||||
static const ULONG defaultScrollLinesPerWheelDelta = 3;
|
||||
wheelDelta /= WHEEL_DELTA;
|
||||
float scrollDelta = wheelDelta;
|
||||
if (horizontalScroll) {
|
||||
ULONG scrollChars = defaultScrollCharsPerWheelDelta;
|
||||
SystemParametersInfo(SPI_GETWHEELSCROLLCHARS, 0, &scrollChars, 0);
|
||||
scrollDelta *= static_cast<FLOAT>(scrollChars) * scrollbarPixelsPerLine;
|
||||
} else {
|
||||
ULONG scrollLines = defaultScrollLinesPerWheelDelta;
|
||||
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, &scrollLines, 0);
|
||||
if (scrollLines == WHEEL_PAGESCROLL)
|
||||
result.delta_units = ui::input_types::ScrollGranularity::kScrollByPage;
|
||||
if (result.delta_units != ui::input_types::ScrollGranularity::kScrollByPage)
|
||||
scrollDelta *= static_cast<FLOAT>(scrollLines) * scrollbarPixelsPerLine;
|
||||
}
|
||||
|
||||
// Set scroll amount based on above calculations. WebKit expects positive
|
||||
// deltaY to mean "scroll up" and positive deltaX to mean "scroll left".
|
||||
if (horizontalScroll) {
|
||||
result.delta_x = scrollDelta;
|
||||
result.wheel_ticks_x = wheelDelta;
|
||||
} else {
|
||||
result.delta_y = scrollDelta;
|
||||
result.wheel_ticks_y = wheelDelta;
|
||||
}
|
||||
}
|
||||
|
||||
CefEventHandle CefBrowserPlatformDelegateNativeWin::GetEventHandle(
|
||||
const content::NativeWebKeyboardEvent& event) const {
|
||||
if (!event.os_event)
|
||||
@@ -427,6 +573,27 @@ CefBrowserPlatformDelegateNativeWin::CreateMenuRunner() {
|
||||
return base::WrapUnique(new CefMenuRunnerWin);
|
||||
}
|
||||
|
||||
void CefBrowserPlatformDelegateNativeWin::TranslateMouseEvent(
|
||||
blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event) const {
|
||||
// position
|
||||
result.SetPositionInWidget(mouse_event.x, mouse_event.y);
|
||||
|
||||
const gfx::Point& screen_pt =
|
||||
GetScreenPoint(gfx::Point(mouse_event.x, mouse_event.y));
|
||||
result.SetPositionInScreen(screen_pt.x(), screen_pt.y());
|
||||
|
||||
// modifiers
|
||||
result.SetModifiers(result.GetModifiers() |
|
||||
TranslateModifiers(mouse_event.modifiers));
|
||||
|
||||
// timestamp
|
||||
result.SetTimeStamp(base::TimeTicks() +
|
||||
base::TimeDelta::FromMilliseconds(GetMessageTime()));
|
||||
|
||||
result.pointer_type = blink::WebPointerProperties::PointerType::kMouse;
|
||||
}
|
||||
|
||||
gfx::Point CefBrowserPlatformDelegateNativeWin::GetDialogPosition(
|
||||
const gfx::Size& size) {
|
||||
const gfx::Size& max_size = GetMaximumDialogSize();
|
||||
@@ -438,66 +605,6 @@ gfx::Size CefBrowserPlatformDelegateNativeWin::GetMaximumDialogSize() {
|
||||
return GetWindowWidget()->GetWindowBoundsInScreen().size();
|
||||
}
|
||||
|
||||
ui::KeyEvent CefBrowserPlatformDelegateNativeWin::TranslateUiKeyEvent(
|
||||
const CefKeyEvent& key_event) const {
|
||||
int flags = TranslateUiEventModifiers(key_event.modifiers);
|
||||
ui::KeyboardCode key_code =
|
||||
ui::KeyboardCodeForWindowsKeyCode(key_event.windows_key_code);
|
||||
ui::DomCode dom_code =
|
||||
ui::KeycodeConverter::NativeKeycodeToDomCode(key_event.native_key_code);
|
||||
base::TimeTicks time_stamp = GetEventTimeStamp();
|
||||
|
||||
if (key_event.type == KEYEVENT_CHAR) {
|
||||
return ui::KeyEvent(key_event.windows_key_code /* character */, key_code,
|
||||
dom_code, flags, time_stamp);
|
||||
}
|
||||
|
||||
ui::EventType type = ui::ET_UNKNOWN;
|
||||
switch (key_event.type) {
|
||||
case KEYEVENT_RAWKEYDOWN:
|
||||
case KEYEVENT_KEYDOWN:
|
||||
type = ui::ET_KEY_PRESSED;
|
||||
break;
|
||||
case KEYEVENT_KEYUP:
|
||||
type = ui::ET_KEY_RELEASED;
|
||||
break;
|
||||
default:
|
||||
NOTREACHED();
|
||||
}
|
||||
|
||||
ui::DomKey dom_key =
|
||||
ui::PlatformKeyMap::DomKeyFromKeyboardCode(key_code, &flags);
|
||||
return ui::KeyEvent(type, key_code, dom_code, flags, dom_key, time_stamp);
|
||||
}
|
||||
|
||||
gfx::Vector2d CefBrowserPlatformDelegateNativeWin::GetUiWheelEventOffset(
|
||||
int deltaX,
|
||||
int deltaY) const {
|
||||
static const ULONG defaultScrollCharsPerWheelDelta = 1;
|
||||
static const FLOAT scrollbarPixelsPerLine = 100.0f / 3.0f;
|
||||
static const ULONG defaultScrollLinesPerWheelDelta = 3;
|
||||
|
||||
float wheelDeltaX = float(deltaX) / WHEEL_DELTA;
|
||||
float wheelDeltaY = float(deltaY) / WHEEL_DELTA;
|
||||
float scrollDeltaX = wheelDeltaX;
|
||||
float scrollDeltaY = wheelDeltaY;
|
||||
|
||||
ULONG scrollChars = defaultScrollCharsPerWheelDelta;
|
||||
SystemParametersInfo(SPI_GETWHEELSCROLLCHARS, 0, &scrollChars, 0);
|
||||
scrollDeltaX *= static_cast<FLOAT>(scrollChars) * scrollbarPixelsPerLine;
|
||||
|
||||
ULONG scrollLines = defaultScrollLinesPerWheelDelta;
|
||||
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, &scrollLines, 0);
|
||||
scrollDeltaY *= static_cast<FLOAT>(scrollLines) * scrollbarPixelsPerLine;
|
||||
|
||||
return gfx::Vector2d(scrollDeltaX, scrollDeltaY);
|
||||
}
|
||||
|
||||
base::TimeTicks CefBrowserPlatformDelegateNativeWin::GetEventTimeStamp() const {
|
||||
return base::TimeTicks() +
|
||||
base::TimeDelta::FromMilliseconds(GetMessageTime());
|
||||
}
|
||||
|
||||
// static
|
||||
void CefBrowserPlatformDelegateNativeWin::RegisterWindowClass() {
|
||||
static bool registered = false;
|
||||
|
@@ -7,11 +7,11 @@
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#include "libcef/browser/native/browser_platform_delegate_native_aura.h"
|
||||
#include "libcef/browser/native/browser_platform_delegate_native.h"
|
||||
|
||||
// Windowed browser implementation for Windows.
|
||||
class CefBrowserPlatformDelegateNativeWin
|
||||
: public CefBrowserPlatformDelegateNativeAura {
|
||||
: public CefBrowserPlatformDelegateNative {
|
||||
public:
|
||||
CefBrowserPlatformDelegateNativeWin(const CefWindowInfo& window_info,
|
||||
SkColor background_color,
|
||||
@@ -31,6 +31,20 @@ class CefBrowserPlatformDelegateNativeWin
|
||||
void ViewText(const std::string& text) override;
|
||||
bool HandleKeyboardEvent(
|
||||
const content::NativeWebKeyboardEvent& event) override;
|
||||
void TranslateKeyEvent(content::NativeWebKeyboardEvent& result,
|
||||
const CefKeyEvent& key_event) const override;
|
||||
void TranslateClickEvent(blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
CefBrowserHost::MouseButtonType type,
|
||||
bool mouseUp,
|
||||
int clickCount) const override;
|
||||
void TranslateMoveEvent(blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
bool mouseLeave) const override;
|
||||
void TranslateWheelEvent(blink::WebMouseWheelEvent& result,
|
||||
const CefMouseEvent& mouse_event,
|
||||
int deltaX,
|
||||
int deltaY) const override;
|
||||
CefEventHandle GetEventHandle(
|
||||
const content::NativeWebKeyboardEvent& event) const override;
|
||||
std::unique_ptr<CefFileDialogRunner> CreateFileDialogRunner() override;
|
||||
@@ -40,12 +54,10 @@ class CefBrowserPlatformDelegateNativeWin
|
||||
gfx::Point GetDialogPosition(const gfx::Size& size) override;
|
||||
gfx::Size GetMaximumDialogSize() override;
|
||||
|
||||
// CefBrowserPlatformDelegateNativeAura methods:
|
||||
ui::KeyEvent TranslateUiKeyEvent(const CefKeyEvent& key_event) const override;
|
||||
gfx::Vector2d GetUiWheelEventOffset(int deltaX, int deltaY) const override;
|
||||
base::TimeTicks GetEventTimeStamp() const override;
|
||||
|
||||
private:
|
||||
void TranslateMouseEvent(blink::WebMouseEvent& result,
|
||||
const CefMouseEvent& mouse_event) const;
|
||||
|
||||
static void RegisterWindowClass();
|
||||
static LPCTSTR GetWndClass();
|
||||
static LRESULT CALLBACK WndProc(HWND hwnd,
|
||||
|
@@ -32,7 +32,7 @@ void Menu2::CancelMenu() {
|
||||
}
|
||||
|
||||
void Menu2::Rebuild() {
|
||||
wrapper_->Rebuild(nullptr);
|
||||
wrapper_->Rebuild(NULL);
|
||||
}
|
||||
|
||||
void Menu2::UpdateStates() {
|
||||
|
@@ -26,7 +26,7 @@ bool CefMenuRunnerLinux::RunContextMenu(
|
||||
if (!browser->IsWindowless())
|
||||
parent_widget = browser->GetWindowWidget();
|
||||
|
||||
menu_->RunMenuAt(parent_widget, nullptr, gfx::Rect(screen_point, gfx::Size()),
|
||||
menu_->RunMenuAt(parent_widget, NULL, gfx::Rect(screen_point, gfx::Size()),
|
||||
views::MenuAnchorPosition::kTopRight, ui::MENU_SOURCE_NONE);
|
||||
|
||||
return true;
|
||||
|
@@ -18,8 +18,8 @@ bool CefMenuRunnerWin::RunContextMenu(
|
||||
CefMenuModelImpl* model,
|
||||
const content::ContextMenuParams& params) {
|
||||
// Create a menu based on the model.
|
||||
menu_.reset(new views::CefNativeMenuWin(model->model(), nullptr));
|
||||
menu_->Rebuild(nullptr);
|
||||
menu_.reset(new views::CefNativeMenuWin(model->model(), NULL));
|
||||
menu_->Rebuild(NULL);
|
||||
|
||||
// Make sure events can be pumped while the menu is up.
|
||||
base::MessageLoopCurrent::ScopedNestableTaskAllower allow;
|
||||
|
@@ -401,7 +401,7 @@ class CefNativeMenuWin::MenuHostWindow {
|
||||
|
||||
struct CefNativeMenuWin::HighlightedMenuItemInfo {
|
||||
HighlightedMenuItemInfo()
|
||||
: has_parent(false), has_submenu(false), menu(nullptr), position(-1) {}
|
||||
: has_parent(false), has_submenu(false), menu(NULL), position(-1) {}
|
||||
|
||||
bool has_parent;
|
||||
bool has_submenu;
|
||||
@@ -420,16 +420,16 @@ const wchar_t* CefNativeMenuWin::MenuHostWindow::kWindowClassName =
|
||||
|
||||
CefNativeMenuWin::CefNativeMenuWin(ui::MenuModel* model, HWND system_menu_for)
|
||||
: model_(model),
|
||||
menu_(nullptr),
|
||||
menu_(NULL),
|
||||
owner_draw_(l10n_util::NeedOverrideDefaultUIFont(NULL, NULL) &&
|
||||
!system_menu_for),
|
||||
system_menu_for_(system_menu_for),
|
||||
first_item_index_(0),
|
||||
menu_action_(MENU_ACTION_NONE),
|
||||
menu_to_select_(nullptr),
|
||||
menu_to_select_(NULL),
|
||||
position_to_select_(-1),
|
||||
parent_(nullptr),
|
||||
destroyed_flag_(nullptr),
|
||||
parent_(NULL),
|
||||
destroyed_flag_(NULL),
|
||||
menu_to_select_factory_(this) {}
|
||||
|
||||
CefNativeMenuWin::~CefNativeMenuWin() {
|
||||
@@ -458,7 +458,7 @@ void CefNativeMenuWin::RunMenuAt(const gfx::Point& point, int alignment) {
|
||||
|
||||
// Command dispatch is done through WM_MENUCOMMAND, handled by the host
|
||||
// window.
|
||||
menu_to_select_ = nullptr;
|
||||
menu_to_select_ = NULL;
|
||||
position_to_select_ = -1;
|
||||
menu_to_select_factory_.InvalidateWeakPtrs();
|
||||
bool destroyed = false;
|
||||
@@ -467,10 +467,10 @@ void CefNativeMenuWin::RunMenuAt(const gfx::Point& point, int alignment) {
|
||||
TrackPopupMenu(menu_, flags, point.x(), point.y(), 0, host_window_->hwnd(),
|
||||
NULL);
|
||||
UnhookWindowsHookEx(hhook);
|
||||
open_native_menu_win_ = nullptr;
|
||||
open_native_menu_win_ = NULL;
|
||||
if (destroyed)
|
||||
return;
|
||||
destroyed_flag_ = nullptr;
|
||||
destroyed_flag_ = NULL;
|
||||
if (menu_to_select_) {
|
||||
// Folks aren't too happy if we notify immediately. In particular, notifying
|
||||
// the delegate can cause destruction leaving the stack in a weird
|
||||
@@ -542,7 +542,7 @@ void CefNativeMenuWin::SetMinimumWidth(int width) {
|
||||
// CefNativeMenuWin, private:
|
||||
|
||||
// static
|
||||
CefNativeMenuWin* CefNativeMenuWin::open_native_menu_win_ = nullptr;
|
||||
CefNativeMenuWin* CefNativeMenuWin::open_native_menu_win_ = NULL;
|
||||
|
||||
void CefNativeMenuWin::DelayedSelect() {
|
||||
if (menu_to_select_)
|
||||
|
@@ -17,7 +17,7 @@ CefWindowDelegateView::CefWindowDelegateView(
|
||||
bool always_on_top,
|
||||
base::RepeatingClosure on_bounds_changed)
|
||||
: background_color_(background_color),
|
||||
web_view_(nullptr),
|
||||
web_view_(NULL),
|
||||
always_on_top_(always_on_top),
|
||||
on_bounds_changed_(on_bounds_changed) {}
|
||||
|
||||
@@ -43,7 +43,7 @@ void CefWindowDelegateView::Init(gfx::AcceleratedWidget parent_widget,
|
||||
// Set the WS_VISIBLE flag.
|
||||
params.type = views::Widget::InitParams::TYPE_CONTROL;
|
||||
// Don't set the WS_EX_COMPOSITED flag.
|
||||
params.opacity = views::Widget::InitParams::WindowOpacity::kOpaque;
|
||||
params.opacity = views::Widget::InitParams::OPAQUE_WINDOW;
|
||||
// Tell Aura not to draw the window frame on resize.
|
||||
params.remove_standard_frame = true;
|
||||
// Cause WidgetDelegate::CanActivate to return true. See comments in
|
||||
|
@@ -53,7 +53,7 @@ const char kUTF8String[] = "UTF8_STRING";
|
||||
::Window top_level_window = window;
|
||||
::Window root = x11::None;
|
||||
::Window parent = x11::None;
|
||||
::Window* children = nullptr;
|
||||
::Window* children = NULL;
|
||||
unsigned int nchildren = 0;
|
||||
// Enumerate all parents of "window" to find the highest level window
|
||||
// that either:
|
||||
@@ -77,7 +77,7 @@ const char kUTF8String[] = "UTF8_STRING";
|
||||
|
||||
CEF_EXPORT XDisplay* cef_get_xdisplay() {
|
||||
if (!CEF_CURRENTLY_ON(CEF_UIT))
|
||||
return nullptr;
|
||||
return NULL;
|
||||
return gfx::GetXDisplay();
|
||||
}
|
||||
|
||||
@@ -284,7 +284,7 @@ views::DesktopWindowTreeHostX11* CefWindowX11::GetHost() {
|
||||
views::DesktopWindowTreeHostLinux::GetHostForWidget(child));
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool CefWindowX11::CanDispatchEvent(const ui::PlatformEvent& event) {
|
||||
|
@@ -13,7 +13,7 @@
|
||||
CefNavigationEntryImpl::CefNavigationEntryImpl(content::NavigationEntry* value)
|
||||
: CefValueBase<CefNavigationEntry, content::NavigationEntry>(
|
||||
value,
|
||||
nullptr,
|
||||
NULL,
|
||||
kOwnerNoDelete,
|
||||
false,
|
||||
new CefValueControllerNonThreadSafe()) {
|
||||
|
@@ -465,10 +465,10 @@ class CefURLDataSource : public content::URLDataSource {
|
||||
std::string GetSource() override { return host_; }
|
||||
|
||||
void StartDataRequest(
|
||||
const GURL& path,
|
||||
const std::string& path,
|
||||
const content::WebContents::Getter& wc_getter,
|
||||
content::URLDataSource::GotDataCallback callback) override {
|
||||
std::move(callback).Run(output_);
|
||||
const content::URLDataSource::GotDataCallback& callback) override {
|
||||
callback.Run(output_);
|
||||
}
|
||||
|
||||
std::string GetMimeType(const std::string& path) override {
|
||||
|
@@ -32,9 +32,9 @@ class Delegate : public InternalHandlerDelegate {
|
||||
if (path.length() > 0)
|
||||
path = path.substr(1);
|
||||
|
||||
action->bytes =
|
||||
content::DevToolsFrontendHost::GetFrontendResourceBytes(path);
|
||||
return !!action->bytes;
|
||||
action->string_piece =
|
||||
content::DevToolsFrontendHost::GetFrontendResource(path);
|
||||
return !action->string_piece.empty();
|
||||
}
|
||||
};
|
||||
|
||||
|
@@ -157,21 +157,21 @@ class InternalHandlerFactory : public CefSchemeHandlerFactory {
|
||||
if (action.mime_type.empty())
|
||||
action.mime_type = GetMimeType(url.path());
|
||||
|
||||
if (!action.bytes && action.resource_id >= 0) {
|
||||
action.bytes =
|
||||
CefContentClient::Get()->GetDataResourceBytes(action.resource_id);
|
||||
if (!action.bytes) {
|
||||
if (action.string_piece.empty() && action.resource_id >= 0) {
|
||||
action.string_piece = CefContentClient::Get()->GetDataResource(
|
||||
action.resource_id, ui::SCALE_FACTOR_NONE);
|
||||
if (action.string_piece.empty()) {
|
||||
NOTREACHED() << "Failed to load internal resource for id: "
|
||||
<< action.resource_id << " URL: " << url.spec().c_str();
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (action.bytes) {
|
||||
if (!action.string_piece.empty()) {
|
||||
action.stream = CefStreamReader::CreateForData(
|
||||
const_cast<unsigned char*>(action.bytes->data()),
|
||||
action.bytes->size());
|
||||
action.stream_size = action.bytes->size();
|
||||
const_cast<char*>(action.string_piece.data()),
|
||||
action.string_piece.size());
|
||||
action.stream_size = action.string_piece.size();
|
||||
}
|
||||
|
||||
if (action.stream.get()) {
|
||||
@@ -180,7 +180,7 @@ class InternalHandlerFactory : public CefSchemeHandlerFactory {
|
||||
}
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
private:
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user