mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Compare commits
46 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
cd6cbe008b | ||
|
3e94ebf031 | ||
|
364460420a | ||
|
18f6db50fc | ||
|
b045a6e974 | ||
|
01947ac530 | ||
|
7de12437b5 | ||
|
acfac2f56b | ||
|
d7ff3589e4 | ||
|
e768eb7c36 | ||
|
8e08b6c202 | ||
|
3b2f416731 | ||
|
1306235098 | ||
|
c5d55d4b5c | ||
|
fb115c6aec | ||
|
5445ef53a0 | ||
|
6a7969fa1c | ||
|
02028168ae | ||
|
17bc62666b | ||
|
37773afcc4 | ||
|
1119d2723c | ||
|
4c3785756f | ||
|
ee4e036af8 | ||
|
e12dc09620 | ||
|
d042c3a577 | ||
|
3bde5d25e9 | ||
|
3f0eaa53b7 | ||
|
5b78afcf54 | ||
|
94efef25d9 | ||
|
48ac1d640e | ||
|
082e6dc106 | ||
|
9a28c1fdf6 | ||
|
a0532bbb72 | ||
|
19c0e69125 | ||
|
f0c9073dc0 | ||
|
da5bb13369 | ||
|
bcf4f6bc92 | ||
|
989b0078e4 | ||
|
a49878faee | ||
|
2c0ba41a10 | ||
|
a177ba96e5 | ||
|
9fb5d763a8 | ||
|
4bd2755a6e | ||
|
b0a4097775 | ||
|
ee3ed79da3 | ||
|
b672bd9235 |
112
BUILD.gn
112
BUILD.gn
@@ -122,8 +122,8 @@ if (is_linux) {
|
|||||||
import("//third_party/fontconfig/fontconfig.gni")
|
import("//third_party/fontconfig/fontconfig.gni")
|
||||||
}
|
}
|
||||||
if (is_mac) {
|
if (is_mac) {
|
||||||
import("//build/apple/tweak_info_plist.gni")
|
|
||||||
import("//build/config/mac/rules.gni")
|
import("//build/config/mac/rules.gni")
|
||||||
|
import("//build/mac/tweak_info_plist.gni")
|
||||||
import("//build/util/version.gni")
|
import("//build/util/version.gni")
|
||||||
import("//media/cdm/library_cdm/cdm_paths.gni")
|
import("//media/cdm/library_cdm/cdm_paths.gni")
|
||||||
import("//build/config/mac/base_rules.gni")
|
import("//build/config/mac/base_rules.gni")
|
||||||
@@ -409,8 +409,6 @@ static_library("libcef_static") {
|
|||||||
gypi_paths.autogen_cpp_includes + [
|
gypi_paths.autogen_cpp_includes + [
|
||||||
"libcef/browser/alloy/alloy_browser_context.cc",
|
"libcef/browser/alloy/alloy_browser_context.cc",
|
||||||
"libcef/browser/alloy/alloy_browser_context.h",
|
"libcef/browser/alloy/alloy_browser_context.h",
|
||||||
"libcef/browser/alloy/alloy_browser_host_impl.cc",
|
|
||||||
"libcef/browser/alloy/alloy_browser_host_impl.h",
|
|
||||||
"libcef/browser/alloy/alloy_browser_main.cc",
|
"libcef/browser/alloy/alloy_browser_main.cc",
|
||||||
"libcef/browser/alloy/alloy_browser_main.h",
|
"libcef/browser/alloy/alloy_browser_main.h",
|
||||||
"libcef/browser/alloy/browser_platform_delegate_alloy.cc",
|
"libcef/browser/alloy/browser_platform_delegate_alloy.cc",
|
||||||
@@ -425,15 +423,12 @@ static_library("libcef_static") {
|
|||||||
"libcef/browser/alloy/alloy_content_browser_client.h",
|
"libcef/browser/alloy/alloy_content_browser_client.h",
|
||||||
"libcef/browser/audio_capturer.cc",
|
"libcef/browser/audio_capturer.cc",
|
||||||
"libcef/browser/audio_capturer.h",
|
"libcef/browser/audio_capturer.h",
|
||||||
"libcef/browser/browser_contents_delegate.cc",
|
|
||||||
"libcef/browser/browser_contents_delegate.h",
|
|
||||||
"libcef/browser/browser_context.cc",
|
"libcef/browser/browser_context.cc",
|
||||||
"libcef/browser/browser_context.h",
|
"libcef/browser/browser_context.h",
|
||||||
"libcef/browser/browser_context_keyed_service_factories.cc",
|
"libcef/browser/browser_context_keyed_service_factories.cc",
|
||||||
"libcef/browser/browser_context_keyed_service_factories.h",
|
"libcef/browser/browser_context_keyed_service_factories.h",
|
||||||
"libcef/browser/browser_host_base.cc",
|
"libcef/browser/browser_host_impl.cc",
|
||||||
"libcef/browser/browser_host_base.h",
|
"libcef/browser/browser_host_impl.h",
|
||||||
"libcef/browser/browser_host_create.cc",
|
|
||||||
"libcef/browser/browser_info.cc",
|
"libcef/browser/browser_info.cc",
|
||||||
"libcef/browser/browser_info.h",
|
"libcef/browser/browser_info.h",
|
||||||
"libcef/browser/browser_info_manager.cc",
|
"libcef/browser/browser_info_manager.cc",
|
||||||
@@ -447,15 +442,10 @@ static_library("libcef_static") {
|
|||||||
"libcef/browser/browser_platform_delegate_create.cc",
|
"libcef/browser/browser_platform_delegate_create.cc",
|
||||||
"libcef/browser/browser_util.cc",
|
"libcef/browser/browser_util.cc",
|
||||||
"libcef/browser/browser_util.h",
|
"libcef/browser/browser_util.h",
|
||||||
"libcef/browser/chrome/browser_delegate.h",
|
|
||||||
"libcef/browser/chrome/browser_platform_delegate_chrome.cc",
|
"libcef/browser/chrome/browser_platform_delegate_chrome.cc",
|
||||||
"libcef/browser/chrome/browser_platform_delegate_chrome.h",
|
"libcef/browser/chrome/browser_platform_delegate_chrome.h",
|
||||||
"libcef/browser/chrome/chrome_browser_context.cc",
|
"libcef/browser/chrome/chrome_browser_context.cc",
|
||||||
"libcef/browser/chrome/chrome_browser_context.h",
|
"libcef/browser/chrome/chrome_browser_context.h",
|
||||||
"libcef/browser/chrome/chrome_browser_delegate.cc",
|
|
||||||
"libcef/browser/chrome/chrome_browser_delegate.h",
|
|
||||||
"libcef/browser/chrome/chrome_browser_host_impl.cc",
|
|
||||||
"libcef/browser/chrome/chrome_browser_host_impl.h",
|
|
||||||
"libcef/browser/chrome/chrome_browser_main_extra_parts_cef.cc",
|
"libcef/browser/chrome/chrome_browser_main_extra_parts_cef.cc",
|
||||||
"libcef/browser/chrome/chrome_browser_main_extra_parts_cef.h",
|
"libcef/browser/chrome/chrome_browser_main_extra_parts_cef.h",
|
||||||
"libcef/browser/chrome/chrome_content_browser_client_cef.cc",
|
"libcef/browser/chrome/chrome_content_browser_client_cef.cc",
|
||||||
@@ -556,8 +546,6 @@ static_library("libcef_static") {
|
|||||||
"libcef/browser/menu_runner.h",
|
"libcef/browser/menu_runner.h",
|
||||||
"libcef/browser/native/browser_platform_delegate_native.cc",
|
"libcef/browser/native/browser_platform_delegate_native.cc",
|
||||||
"libcef/browser/native/browser_platform_delegate_native.h",
|
"libcef/browser/native/browser_platform_delegate_native.h",
|
||||||
"libcef/browser/native/cursor_util.h",
|
|
||||||
"libcef/browser/native/cursor_util.cc",
|
|
||||||
"libcef/browser/navigate_params.cc",
|
"libcef/browser/navigate_params.cc",
|
||||||
"libcef/browser/navigate_params.h",
|
"libcef/browser/navigate_params.h",
|
||||||
"libcef/browser/navigation_entry_impl.cc",
|
"libcef/browser/navigation_entry_impl.cc",
|
||||||
@@ -571,8 +559,6 @@ static_library("libcef_static") {
|
|||||||
"libcef/browser/net/internal_scheme_handler.h",
|
"libcef/browser/net/internal_scheme_handler.h",
|
||||||
"libcef/browser/net/scheme_handler.cc",
|
"libcef/browser/net/scheme_handler.cc",
|
||||||
"libcef/browser/net/scheme_handler.h",
|
"libcef/browser/net/scheme_handler.h",
|
||||||
"libcef/browser/net/throttle_handler.cc",
|
|
||||||
"libcef/browser/net/throttle_handler.h",
|
|
||||||
"libcef/browser/net_service/browser_urlrequest_impl.cc",
|
"libcef/browser/net_service/browser_urlrequest_impl.cc",
|
||||||
"libcef/browser/net_service/browser_urlrequest_impl.h",
|
"libcef/browser/net_service/browser_urlrequest_impl.h",
|
||||||
"libcef/browser/net_service/cookie_helper.cc",
|
"libcef/browser/net_service/cookie_helper.cc",
|
||||||
@@ -765,18 +751,8 @@ static_library("libcef_static") {
|
|||||||
"libcef/features/runtime_checks.h",
|
"libcef/features/runtime_checks.h",
|
||||||
"libcef/renderer/alloy/alloy_content_renderer_client.cc",
|
"libcef/renderer/alloy/alloy_content_renderer_client.cc",
|
||||||
"libcef/renderer/alloy/alloy_content_renderer_client.h",
|
"libcef/renderer/alloy/alloy_content_renderer_client.h",
|
||||||
"libcef/renderer/alloy/alloy_render_frame_observer.cc",
|
|
||||||
"libcef/renderer/alloy/alloy_render_frame_observer.h",
|
|
||||||
"libcef/renderer/alloy/alloy_render_thread_observer.cc",
|
|
||||||
"libcef/renderer/alloy/alloy_render_thread_observer.h",
|
|
||||||
"libcef/renderer/alloy/url_loader_throttle_provider_impl.cc",
|
|
||||||
"libcef/renderer/alloy/url_loader_throttle_provider_impl.h",
|
|
||||||
"libcef/renderer/browser_impl.cc",
|
"libcef/renderer/browser_impl.cc",
|
||||||
"libcef/renderer/browser_impl.h",
|
"libcef/renderer/browser_impl.h",
|
||||||
"libcef/renderer/browser_manager.cc",
|
|
||||||
"libcef/renderer/browser_manager.h",
|
|
||||||
"libcef/renderer/chrome/chrome_content_renderer_client_cef.cc",
|
|
||||||
"libcef/renderer/chrome/chrome_content_renderer_client_cef.h",
|
|
||||||
"libcef/renderer/dom_document_impl.cc",
|
"libcef/renderer/dom_document_impl.cc",
|
||||||
"libcef/renderer/dom_document_impl.h",
|
"libcef/renderer/dom_document_impl.h",
|
||||||
"libcef/renderer/dom_node_impl.cc",
|
"libcef/renderer/dom_node_impl.cc",
|
||||||
@@ -798,6 +774,8 @@ static_library("libcef_static") {
|
|||||||
"libcef/renderer/render_urlrequest_impl.cc",
|
"libcef/renderer/render_urlrequest_impl.cc",
|
||||||
"libcef/renderer/render_urlrequest_impl.h",
|
"libcef/renderer/render_urlrequest_impl.h",
|
||||||
"libcef/renderer/thread_util.h",
|
"libcef/renderer/thread_util.h",
|
||||||
|
"libcef/renderer/url_loader_throttle_provider_impl.cc",
|
||||||
|
"libcef/renderer/url_loader_throttle_provider_impl.h",
|
||||||
"libcef/renderer/v8_impl.cc",
|
"libcef/renderer/v8_impl.cc",
|
||||||
"libcef/renderer/v8_impl.h",
|
"libcef/renderer/v8_impl.h",
|
||||||
|
|
||||||
@@ -830,6 +808,7 @@ static_library("libcef_static") {
|
|||||||
|
|
||||||
deps = [
|
deps = [
|
||||||
":cef_make_headers",
|
":cef_make_headers",
|
||||||
|
":cef_service_manifests",
|
||||||
|
|
||||||
":libcef_static_unittested",
|
":libcef_static_unittested",
|
||||||
|
|
||||||
@@ -861,9 +840,8 @@ static_library("libcef_static") {
|
|||||||
"//components/google/core/common",
|
"//components/google/core/common",
|
||||||
"//components/keyed_service/content:content",
|
"//components/keyed_service/content:content",
|
||||||
"//components/keyed_service/core:core",
|
"//components/keyed_service/core:core",
|
||||||
"//components/media_router/common/mojom:media_router",
|
|
||||||
"//components/navigation_interception",
|
"//components/navigation_interception",
|
||||||
"//components/network_session_configurator/common",
|
"//components/network_session_configurator/browser",
|
||||||
"//components/pdf/browser",
|
"//components/pdf/browser",
|
||||||
"//components/pdf/renderer",
|
"//components/pdf/renderer",
|
||||||
"//components/plugins/renderer",
|
"//components/plugins/renderer",
|
||||||
@@ -909,6 +887,7 @@ static_library("libcef_static") {
|
|||||||
"//printing/buildflags",
|
"//printing/buildflags",
|
||||||
"//services/network:network_service",
|
"//services/network:network_service",
|
||||||
"//services/network/public/cpp",
|
"//services/network/public/cpp",
|
||||||
|
"//services/service_manager/embedder",
|
||||||
"//services/service_manager/public/cpp",
|
"//services/service_manager/public/cpp",
|
||||||
"//skia",
|
"//skia",
|
||||||
"//storage/browser",
|
"//storage/browser",
|
||||||
@@ -940,7 +919,6 @@ static_library("libcef_static") {
|
|||||||
"libcef/browser/alloy/alloy_browser_main_win.cc",
|
"libcef/browser/alloy/alloy_browser_main_win.cc",
|
||||||
"libcef/browser/native/browser_platform_delegate_native_win.cc",
|
"libcef/browser/native/browser_platform_delegate_native_win.cc",
|
||||||
"libcef/browser/native/browser_platform_delegate_native_win.h",
|
"libcef/browser/native/browser_platform_delegate_native_win.h",
|
||||||
"libcef/browser/native/cursor_util_win.cc",
|
|
||||||
"libcef/browser/native/file_dialog_runner_win.cc",
|
"libcef/browser/native/file_dialog_runner_win.cc",
|
||||||
"libcef/browser/native/file_dialog_runner_win.h",
|
"libcef/browser/native/file_dialog_runner_win.h",
|
||||||
"libcef/browser/native/javascript_dialog_runner_win.cc",
|
"libcef/browser/native/javascript_dialog_runner_win.cc",
|
||||||
@@ -954,6 +932,7 @@ static_library("libcef_static") {
|
|||||||
"libcef/browser/native/native_menu_win.h",
|
"libcef/browser/native/native_menu_win.h",
|
||||||
"libcef/browser/osr/browser_platform_delegate_osr_win.cc",
|
"libcef/browser/osr/browser_platform_delegate_osr_win.cc",
|
||||||
"libcef/browser/osr/browser_platform_delegate_osr_win.h",
|
"libcef/browser/osr/browser_platform_delegate_osr_win.h",
|
||||||
|
"libcef/browser/osr/render_widget_host_view_osr_win.cc",
|
||||||
|
|
||||||
# Part of //chrome/utility.
|
# Part of //chrome/utility.
|
||||||
"//chrome/utility/printing_handler.cc",
|
"//chrome/utility/printing_handler.cc",
|
||||||
@@ -984,11 +963,11 @@ static_library("libcef_static") {
|
|||||||
sources += includes_linux + [
|
sources += includes_linux + [
|
||||||
"libcef/browser/native/browser_platform_delegate_native_linux.cc",
|
"libcef/browser/native/browser_platform_delegate_native_linux.cc",
|
||||||
"libcef/browser/native/browser_platform_delegate_native_linux.h",
|
"libcef/browser/native/browser_platform_delegate_native_linux.h",
|
||||||
"libcef/browser/native/cursor_util_linux.cc",
|
|
||||||
"libcef/browser/native/menu_runner_linux.cc",
|
"libcef/browser/native/menu_runner_linux.cc",
|
||||||
"libcef/browser/native/menu_runner_linux.h",
|
"libcef/browser/native/menu_runner_linux.h",
|
||||||
"libcef/browser/osr/browser_platform_delegate_osr_linux.cc",
|
"libcef/browser/osr/browser_platform_delegate_osr_linux.cc",
|
||||||
"libcef/browser/osr/browser_platform_delegate_osr_linux.h",
|
"libcef/browser/osr/browser_platform_delegate_osr_linux.h",
|
||||||
|
"libcef/browser/osr/render_widget_host_view_osr_linux.cc",
|
||||||
"libcef/browser/printing/print_dialog_linux.cc",
|
"libcef/browser/printing/print_dialog_linux.cc",
|
||||||
"libcef/browser/printing/print_dialog_linux.h",
|
"libcef/browser/printing/print_dialog_linux.h",
|
||||||
]
|
]
|
||||||
@@ -1188,6 +1167,8 @@ static_library("libcef_static") {
|
|||||||
sources += [
|
sources += [
|
||||||
# Support for UI input events.
|
# Support for UI input events.
|
||||||
# Part of //ui/aura:test_support which is testingonly.
|
# Part of //ui/aura:test_support which is testingonly.
|
||||||
|
"//ui/aura/test/ui_controls_factory_aurax11.cc",
|
||||||
|
"//ui/aura/test/x11_event_sender.cc",
|
||||||
"//ui/aura/test/x11_event_sender.h",
|
"//ui/aura/test/x11_event_sender.h",
|
||||||
# Part of //ui/views:test_support which is testingonly.
|
# Part of //ui/views:test_support which is testingonly.
|
||||||
"//ui/views/test/ui_controls_factory_desktop_aurax11.cc",
|
"//ui/views/test/ui_controls_factory_desktop_aurax11.cc",
|
||||||
@@ -1258,7 +1239,7 @@ if (is_win) {
|
|||||||
sources = [ "libcef_dll/sandbox/sandbox_win.cc" ]
|
sources = [ "libcef_dll/sandbox/sandbox_win.cc" ]
|
||||||
# CEF sources use include paths relative to the CEF root directory.
|
# CEF sources use include paths relative to the CEF root directory.
|
||||||
include_dirs = [ "." ]
|
include_dirs = [ "." ]
|
||||||
deps = [ "libcef/features", "//sandbox" ]
|
deps = [ "//sandbox" ]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1267,13 +1248,60 @@ if (is_mac) {
|
|||||||
sources = [ "libcef_dll/sandbox/sandbox_mac.mm" ]
|
sources = [ "libcef_dll/sandbox/sandbox_mac.mm" ]
|
||||||
# CEF sources use include paths relative to the CEF root directory.
|
# CEF sources use include paths relative to the CEF root directory.
|
||||||
include_dirs = [ "." ]
|
include_dirs = [ "." ]
|
||||||
deps = [
|
deps = [ "//sandbox/mac:seatbelt" ]
|
||||||
"//build/config:executable_deps",
|
|
||||||
"//sandbox/mac:seatbelt"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Service manifests.
|
||||||
|
#
|
||||||
|
|
||||||
|
source_set("cef_content_browser_overlay_manifest") {
|
||||||
|
sources = [
|
||||||
|
"libcef/common/service_manifests/cef_content_browser_overlay_manifest.cc",
|
||||||
|
"libcef/common/service_manifests/cef_content_browser_overlay_manifest.h",
|
||||||
|
]
|
||||||
|
|
||||||
|
configs += [
|
||||||
|
"libcef/features:config"
|
||||||
|
]
|
||||||
|
|
||||||
|
deps = [
|
||||||
|
"//base",
|
||||||
|
"//extensions/buildflags",
|
||||||
|
"//extensions/common:mojom",
|
||||||
|
"//extensions/common/api:mojom",
|
||||||
|
"//services/service_manager/public/cpp",
|
||||||
|
"//third_party/blink/public/common",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
source_set("cef_content_renderer_overlay_manifest") {
|
||||||
|
sources = [
|
||||||
|
"libcef/common/service_manifests/cef_content_renderer_overlay_manifest.h",
|
||||||
|
]
|
||||||
|
|
||||||
|
configs += [
|
||||||
|
"libcef/features:config"
|
||||||
|
]
|
||||||
|
|
||||||
|
deps = [
|
||||||
|
"//base",
|
||||||
|
"//components/subresource_filter/content/mojom",
|
||||||
|
"//extensions/buildflags",
|
||||||
|
"//extensions/common:mojom",
|
||||||
|
"//services/service_manager/public/cpp",
|
||||||
|
"//third_party/blink/public/common",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
source_set("cef_service_manifests") {
|
||||||
|
public_deps = [
|
||||||
|
":cef_content_browser_overlay_manifest",
|
||||||
|
":cef_content_renderer_overlay_manifest",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Resource grit/pack targets.
|
# Resource grit/pack targets.
|
||||||
#
|
#
|
||||||
@@ -1635,7 +1663,7 @@ if (is_mac) {
|
|||||||
]
|
]
|
||||||
public_deps += [ "//v8" ]
|
public_deps += [ "//v8" ]
|
||||||
if (use_v8_context_snapshot) {
|
if (use_v8_context_snapshot) {
|
||||||
sources += [ "$root_out_dir/$v8_context_snapshot_filename" ]
|
sources += [ "$root_out_dir/v8_context_snapshot.bin" ]
|
||||||
public_deps += [ "//tools/v8_context_snapshot" ]
|
public_deps += [ "//tools/v8_context_snapshot" ]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1911,8 +1939,8 @@ if (is_mac) {
|
|||||||
deps += invoker.deps
|
deps += invoker.deps
|
||||||
}
|
}
|
||||||
|
|
||||||
if (defined(invoker.frameworks)) {
|
if (defined(invoker.libs)) {
|
||||||
frameworks = invoker.frameworks
|
libs = invoker.libs
|
||||||
}
|
}
|
||||||
|
|
||||||
if (defined(invoker.defines)) {
|
if (defined(invoker.defines)) {
|
||||||
@@ -1996,7 +2024,7 @@ if (is_mac) {
|
|||||||
":cefclient_resources_bundle_data_english",
|
":cefclient_resources_bundle_data_english",
|
||||||
":cefclient_xibs",
|
":cefclient_xibs",
|
||||||
]
|
]
|
||||||
frameworks = [
|
libs = [
|
||||||
"AppKit.framework",
|
"AppKit.framework",
|
||||||
"OpenGL.framework",
|
"OpenGL.framework",
|
||||||
]
|
]
|
||||||
@@ -2060,7 +2088,7 @@ if (is_mac) {
|
|||||||
":cefsimple_resources_bundle_data_english",
|
":cefsimple_resources_bundle_data_english",
|
||||||
":cefsimple_xibs",
|
":cefsimple_xibs",
|
||||||
]
|
]
|
||||||
frameworks = [
|
libs = [
|
||||||
"AppKit.framework",
|
"AppKit.framework",
|
||||||
]
|
]
|
||||||
defines = [
|
defines = [
|
||||||
@@ -2131,7 +2159,7 @@ if (is_mac) {
|
|||||||
":ceftests_xibs",
|
":ceftests_xibs",
|
||||||
"//testing/gtest",
|
"//testing/gtest",
|
||||||
]
|
]
|
||||||
frameworks = [
|
libs = [
|
||||||
"AppKit.framework",
|
"AppKit.framework",
|
||||||
]
|
]
|
||||||
defines = [
|
defines = [
|
||||||
|
@@ -7,6 +7,6 @@
|
|||||||
# https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding
|
# https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding
|
||||||
|
|
||||||
{
|
{
|
||||||
'chromium_checkout': 'refs/tags/87.0.4280.141',
|
'chromium_checkout': 'refs/tags/85.0.4183.121',
|
||||||
'depot_tools_checkout': '39d870e1f0'
|
'depot_tools_checkout': '233589f2e7'
|
||||||
}
|
}
|
||||||
|
@@ -27,6 +27,8 @@
|
|||||||
# Files in the chromium/src directory that should be evaluated for changes.
|
# Files in the chromium/src directory that should be evaluated for changes.
|
||||||
# Similar changes may need to be applied to the CEF source code.
|
# Similar changes may need to be applied to the CEF source code.
|
||||||
'files': [
|
'files': [
|
||||||
|
'chrome/app/chrome_*_manifest.*',
|
||||||
|
'chrome/app/chrome_*_manifests.*',
|
||||||
'chrome/browser/browser_process.h',
|
'chrome/browser/browser_process.h',
|
||||||
'chrome/browser/extensions/api/tabs/tabs_api.*',
|
'chrome/browser/extensions/api/tabs/tabs_api.*',
|
||||||
'chrome/browser/extensions/chrome_component_extension_resource_manager.*',
|
'chrome/browser/extensions/chrome_component_extension_resource_manager.*',
|
||||||
|
@@ -12,7 +12,7 @@
|
|||||||
# distribution include:
|
# distribution include:
|
||||||
#
|
#
|
||||||
# Linux: Ninja, Unix Makefiles
|
# Linux: Ninja, Unix Makefiles
|
||||||
# MacOS: Ninja, Xcode 8+ (x64) or Xcode 12.2+ (ARM64)
|
# MacOS: Ninja, Xcode 8+
|
||||||
# Windows: Ninja, Visual Studio 2015+
|
# Windows: Ninja, Visual Studio 2015+
|
||||||
#
|
#
|
||||||
# Ninja is a cross-platform open-source tool for running fast builds using
|
# Ninja is a cross-platform open-source tool for running fast builds using
|
||||||
@@ -53,8 +53,8 @@
|
|||||||
# installed. Only 64-bit builds are supported.
|
# installed. Only 64-bit builds are supported.
|
||||||
#
|
#
|
||||||
# - Windows requirements:
|
# - Windows requirements:
|
||||||
# Visual Studio 2015 Update 2 or newer building on Windows 7 or newer. Visual
|
# Visual Studio 2015 or newer building on Windows 7 or newer. Visual Studio
|
||||||
# Studio 2019 and Windows 10 64-bit are recommended.
|
# 2019 and Windows 10 64-bit are recommended.
|
||||||
#
|
#
|
||||||
# BUILD EXAMPLES
|
# BUILD EXAMPLES
|
||||||
#
|
#
|
||||||
@@ -84,15 +84,6 @@
|
|||||||
# > cmake -G "Ninja" -DPROJECT_ARCH="x86_64" -DCMAKE_BUILD_TYPE=Debug ..
|
# > cmake -G "Ninja" -DPROJECT_ARCH="x86_64" -DCMAKE_BUILD_TYPE=Debug ..
|
||||||
# > ninja cefclient cefsimple
|
# > ninja cefclient cefsimple
|
||||||
#
|
#
|
||||||
# To perform a MacOS build using an ARM64 CEF binary distribution:
|
|
||||||
# Using the Xcode IDE:
|
|
||||||
# > cmake -G "Xcode" -DPROJECT_ARCH="arm64" ..
|
|
||||||
# Open build\cef.xcodeproj in Xcode and select Product > Build.
|
|
||||||
#
|
|
||||||
# Using Ninja:
|
|
||||||
# > cmake -G "Ninja" -DPROJECT_ARCH="arm64" -DCMAKE_BUILD_TYPE=Debug ..
|
|
||||||
# > ninja cefclient cefsimple
|
|
||||||
#
|
|
||||||
# To perform a Windows build using a 32-bit CEF binary distribution:
|
# To perform a Windows build using a 32-bit CEF binary distribution:
|
||||||
# Using the Visual Studio 2019 IDE:
|
# Using the Visual Studio 2019 IDE:
|
||||||
# > cmake -G "Visual Studio 16" -A Win32 ..
|
# > cmake -G "Visual Studio 16" -A Win32 ..
|
||||||
|
@@ -25,7 +25,7 @@ macro(PRINT_CEF_CONFIG)
|
|||||||
|
|
||||||
message(STATUS "Binary distribution root: ${_CEF_ROOT}")
|
message(STATUS "Binary distribution root: ${_CEF_ROOT}")
|
||||||
|
|
||||||
if(OS_MAC)
|
if(OS_MACOSX)
|
||||||
message(STATUS "Base SDK: ${CMAKE_OSX_SYSROOT}")
|
message(STATUS "Base SDK: ${CMAKE_OSX_SYSROOT}")
|
||||||
message(STATUS "Target SDK: ${CEF_TARGET_SDK}")
|
message(STATUS "Target SDK: ${CEF_TARGET_SDK}")
|
||||||
endif()
|
endif()
|
||||||
@@ -75,8 +75,8 @@ macro(APPEND_PLATFORM_SOURCES name_of_list)
|
|||||||
if(OS_WINDOWS AND ${name_of_list}_WINDOWS)
|
if(OS_WINDOWS AND ${name_of_list}_WINDOWS)
|
||||||
list(APPEND ${name_of_list} ${${name_of_list}_WINDOWS})
|
list(APPEND ${name_of_list} ${${name_of_list}_WINDOWS})
|
||||||
endif()
|
endif()
|
||||||
if(OS_MAC AND ${name_of_list}_MAC)
|
if(OS_MACOSX AND ${name_of_list}_MACOSX)
|
||||||
list(APPEND ${name_of_list} ${${name_of_list}_MAC})
|
list(APPEND ${name_of_list} ${${name_of_list}_MACOSX})
|
||||||
endif()
|
endif()
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
@@ -184,10 +184,10 @@ endif(OS_LINUX)
|
|||||||
# Mac OS X macros.
|
# Mac OS X macros.
|
||||||
#
|
#
|
||||||
|
|
||||||
if(OS_MAC)
|
if(OS_MACOSX)
|
||||||
|
|
||||||
# Manually process and copy over resource files.
|
# Manually process and copy over resource files.
|
||||||
macro(COPY_MAC_RESOURCES resource_list prefix_list target source_dir app_path)
|
macro(COPY_MACOSX_RESOURCES resource_list prefix_list target source_dir app_path)
|
||||||
foreach(FILENAME ${resource_list})
|
foreach(FILENAME ${resource_list})
|
||||||
# Remove one or more prefixes from the source paths.
|
# Remove one or more prefixes from the source paths.
|
||||||
set(TARGET_FILENAME "${FILENAME}")
|
set(TARGET_FILENAME "${FILENAME}")
|
||||||
@@ -229,7 +229,7 @@ macro(COPY_MAC_RESOURCES resource_list prefix_list target source_dir app_path)
|
|||||||
endforeach()
|
endforeach()
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
endif(OS_MAC)
|
endif(OS_MACOSX)
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -298,7 +298,7 @@ macro(SET_COMMON_TARGET_PROPERTIES target)
|
|||||||
set_property(TARGET ${target} PROPERTY LINK_FLAGS_RELEASE ${_flags_str})
|
set_property(TARGET ${target} PROPERTY LINK_FLAGS_RELEASE ${_flags_str})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(OS_MAC)
|
if(OS_MACOSX)
|
||||||
# Set Xcode target properties.
|
# Set Xcode target properties.
|
||||||
set_target_properties(${target} PROPERTIES
|
set_target_properties(${target} PROPERTIES
|
||||||
XCODE_ATTRIBUTE_ALWAYS_SEARCH_USER_PATHS NO
|
XCODE_ATTRIBUTE_ALWAYS_SEARCH_USER_PATHS NO
|
||||||
|
@@ -14,8 +14,7 @@ endif()
|
|||||||
|
|
||||||
# Determine the platform.
|
# Determine the platform.
|
||||||
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
|
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
|
||||||
set(OS_MAC 1)
|
set(OS_MACOSX 1)
|
||||||
set(OS_MACOSX 1) # For backwards compatibility.
|
|
||||||
set(OS_POSIX 1)
|
set(OS_POSIX 1)
|
||||||
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
|
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
|
||||||
set(OS_LINUX 1)
|
set(OS_LINUX 1)
|
||||||
@@ -32,7 +31,7 @@ if(NOT DEFINED PROJECT_ARCH)
|
|||||||
set(PROJECT_ARCH "x86")
|
set(PROJECT_ARCH "x86")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(OS_MAC)
|
if(OS_MACOSX)
|
||||||
# PROJECT_ARCH should be specified on Mac OS X.
|
# PROJECT_ARCH should be specified on Mac OS X.
|
||||||
message(WARNING "No PROJECT_ARCH value specified, using ${PROJECT_ARCH}")
|
message(WARNING "No PROJECT_ARCH value specified, using ${PROJECT_ARCH}")
|
||||||
endif()
|
endif()
|
||||||
@@ -247,7 +246,7 @@ endif()
|
|||||||
# Mac OS X configuration.
|
# Mac OS X configuration.
|
||||||
#
|
#
|
||||||
|
|
||||||
if(OS_MAC)
|
if(OS_MACOSX)
|
||||||
# Platform-specific compiler/linker flags.
|
# Platform-specific compiler/linker flags.
|
||||||
# See also Xcode target properties in cef_macros.cmake.
|
# See also Xcode target properties in cef_macros.cmake.
|
||||||
set(CEF_LIBTYPE SHARED)
|
set(CEF_LIBTYPE SHARED)
|
||||||
@@ -328,8 +327,6 @@ if(OS_MAC)
|
|||||||
# Target architecture.
|
# Target architecture.
|
||||||
if(PROJECT_ARCH STREQUAL "x86_64")
|
if(PROJECT_ARCH STREQUAL "x86_64")
|
||||||
set(CMAKE_OSX_ARCHITECTURES "x86_64")
|
set(CMAKE_OSX_ARCHITECTURES "x86_64")
|
||||||
elseif(PROJECT_ARCH STREQUAL "arm64")
|
|
||||||
set(CMAKE_OSX_ARCHITECTURES "arm64")
|
|
||||||
else()
|
else()
|
||||||
set(CMAKE_OSX_ARCHITECTURES "i386")
|
set(CMAKE_OSX_ARCHITECTURES "i386")
|
||||||
endif()
|
endif()
|
||||||
|
@@ -180,7 +180,7 @@ Atomic64 Release_Load(volatile const Atomic64* ptr);
|
|||||||
#include "include/base/internal/cef_atomicops_x86_msvc.h"
|
#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) || defined(_M_ARM64))
|
||||||
#include "include/base/internal/cef_atomicops_arm64_msvc.h"
|
#include "include/base/internal/cef_atomicops_arm64_msvc.h"
|
||||||
#elif defined(OS_MAC)
|
#elif defined(OS_MACOSX)
|
||||||
#include "include/base/internal/cef_atomicops_mac.h"
|
#include "include/base/internal/cef_atomicops_mac.h"
|
||||||
#elif defined(COMPILER_GCC) && defined(ARCH_CPU_X86_FAMILY)
|
#elif defined(COMPILER_GCC) && defined(ARCH_CPU_X86_FAMILY)
|
||||||
#include "include/base/internal/cef_atomicops_x86_gcc.h"
|
#include "include/base/internal/cef_atomicops_x86_gcc.h"
|
||||||
@@ -194,7 +194,7 @@ Atomic64 Release_Load(volatile const Atomic64* ptr);
|
|||||||
|
|
||||||
// On some platforms we need additional declarations to make
|
// On some platforms we need additional declarations to make
|
||||||
// AtomicWord compatible with our other Atomic* types.
|
// AtomicWord compatible with our other Atomic* types.
|
||||||
#if defined(OS_MAC) || defined(OS_OPENBSD)
|
#if defined(OS_MACOSX) || defined(OS_OPENBSD)
|
||||||
#include "include/base/internal/cef_atomicops_atomicword_compat.h"
|
#include "include/base/internal/cef_atomicops_atomicword_compat.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -42,7 +42,7 @@
|
|||||||
//
|
//
|
||||||
// On Mac OS X, |long long| is used for 64-bit types for compatibility with
|
// On Mac OS X, |long long| is used for 64-bit types for compatibility with
|
||||||
// <inttypes.h> format macros even in the LP64 model.
|
// <inttypes.h> format macros even in the LP64 model.
|
||||||
#if defined(__LP64__) && !defined(OS_MAC) && !defined(OS_OPENBSD)
|
#if defined(__LP64__) && !defined(OS_MACOSX) && !defined(OS_OPENBSD)
|
||||||
typedef long int64;
|
typedef long int64;
|
||||||
typedef unsigned long uint64;
|
typedef unsigned long uint64;
|
||||||
#else
|
#else
|
||||||
|
@@ -44,14 +44,6 @@
|
|||||||
#define OS_WIN 1
|
#define OS_WIN 1
|
||||||
#endif
|
#endif
|
||||||
#elif defined(__APPLE__)
|
#elif defined(__APPLE__)
|
||||||
// New platform defines after https://crbug.com/1105907.
|
|
||||||
#ifndef OS_MAC
|
|
||||||
#define OS_MAC 1
|
|
||||||
#endif
|
|
||||||
#ifndef OS_APPLE
|
|
||||||
#define OS_APPLE 1
|
|
||||||
#endif
|
|
||||||
// Old platform defines retained for backwards compatibility.
|
|
||||||
#ifndef OS_MACOSX
|
#ifndef OS_MACOSX
|
||||||
#define OS_MACOSX 1
|
#define OS_MACOSX 1
|
||||||
#endif
|
#endif
|
||||||
@@ -65,7 +57,7 @@
|
|||||||
|
|
||||||
// For access to standard POSIXish features, use OS_POSIX instead of a
|
// For access to standard POSIXish features, use OS_POSIX instead of a
|
||||||
// more specific macro.
|
// more specific macro.
|
||||||
#if defined(OS_MAC) || defined(OS_LINUX)
|
#if defined(OS_MACOSX) || defined(OS_LINUX)
|
||||||
#ifndef OS_POSIX
|
#ifndef OS_POSIX
|
||||||
#define OS_POSIX 1
|
#define OS_POSIX 1
|
||||||
#endif
|
#endif
|
||||||
|
@@ -250,11 +250,11 @@ class WeakPtr : public cef_internal::WeakPtrBase {
|
|||||||
T* get() const { return ref_.is_valid() ? ptr_ : NULL; }
|
T* get() const { return ref_.is_valid() ? ptr_ : NULL; }
|
||||||
|
|
||||||
T& operator*() const {
|
T& operator*() const {
|
||||||
CHECK(ref_.is_valid());
|
DCHECK(get() != NULL);
|
||||||
return *get();
|
return *get();
|
||||||
}
|
}
|
||||||
T* operator->() const {
|
T* operator->() const {
|
||||||
CHECK(ref_.is_valid());
|
DCHECK(get() != NULL);
|
||||||
return get();
|
return get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -33,7 +33,7 @@
|
|||||||
// by hand. See the translator.README.txt file in the tools directory for
|
// by hand. See the translator.README.txt file in the tools directory for
|
||||||
// more information.
|
// more information.
|
||||||
//
|
//
|
||||||
// $hash=965eb2e55afec0a4618a7acd9478b9c1215be29d$
|
// $hash=6cb00a0fa3631a46903abb3a783f315895511db2$
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef CEF_INCLUDE_CAPI_CEF_BROWSER_CAPI_H_
|
#ifndef CEF_INCLUDE_CAPI_CEF_BROWSER_CAPI_H_
|
||||||
@@ -562,6 +562,19 @@ typedef struct _cef_browser_host_t {
|
|||||||
struct _cef_navigation_entry_visitor_t* visitor,
|
struct _cef_navigation_entry_visitor_t* visitor,
|
||||||
int current_only);
|
int current_only);
|
||||||
|
|
||||||
|
///
|
||||||
|
// Set whether mouse cursor change is disabled.
|
||||||
|
///
|
||||||
|
void(CEF_CALLBACK* set_mouse_cursor_change_disabled)(
|
||||||
|
struct _cef_browser_host_t* self,
|
||||||
|
int disabled);
|
||||||
|
|
||||||
|
///
|
||||||
|
// Returns true (1) if mouse cursor change is disabled.
|
||||||
|
///
|
||||||
|
int(CEF_CALLBACK* is_mouse_cursor_change_disabled)(
|
||||||
|
struct _cef_browser_host_t* self);
|
||||||
|
|
||||||
///
|
///
|
||||||
// If a misspelled word is currently selected in an editable node calling this
|
// If a misspelled word is currently selected in an editable node calling this
|
||||||
// function will replace it with the specified |word|.
|
// function will replace it with the specified |word|.
|
||||||
|
@@ -33,7 +33,7 @@
|
|||||||
// by hand. See the translator.README.txt file in the tools directory for
|
// by hand. See the translator.README.txt file in the tools directory for
|
||||||
// more information.
|
// more information.
|
||||||
//
|
//
|
||||||
// $hash=d56cbf83d6faefa9f716c7308bf7007dad98697d$
|
// $hash=306236316b35037523ca566068d133755bce48fd$
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef CEF_INCLUDE_CAPI_CEF_BROWSER_PROCESS_HANDLER_CAPI_H_
|
#ifndef CEF_INCLUDE_CAPI_CEF_BROWSER_PROCESS_HANDLER_CAPI_H_
|
||||||
@@ -41,7 +41,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "include/capi/cef_base_capi.h"
|
#include "include/capi/cef_base_capi.h"
|
||||||
#include "include/capi/cef_client_capi.h"
|
|
||||||
#include "include/capi/cef_command_line_capi.h"
|
#include "include/capi/cef_command_line_capi.h"
|
||||||
#include "include/capi/cef_print_handler_capi.h"
|
#include "include/capi/cef_print_handler_capi.h"
|
||||||
#include "include/capi/cef_values_capi.h"
|
#include "include/capi/cef_values_capi.h"
|
||||||
@@ -61,25 +60,6 @@ typedef struct _cef_browser_process_handler_t {
|
|||||||
///
|
///
|
||||||
cef_base_ref_counted_t base;
|
cef_base_ref_counted_t base;
|
||||||
|
|
||||||
///
|
|
||||||
// Called on the browser process UI thread to retrieve the list of schemes
|
|
||||||
// that should support cookies. If |include_defaults| is true (1) the default
|
|
||||||
// schemes ("http", "https", "ws" and "wss") will also be supported. Providing
|
|
||||||
// an NULL |schemes| value and setting |include_defaults| to false (0) will
|
|
||||||
// disable all loading and saving of cookies.
|
|
||||||
//
|
|
||||||
// This state will apply to the cef_cookie_manager_t associated with the
|
|
||||||
// global cef_request_context_t. It will also be used as the initial state for
|
|
||||||
// any new cef_request_context_ts created by the client. After creating a new
|
|
||||||
// cef_request_context_t the cef_cookie_manager_t::SetSupportedSchemes
|
|
||||||
// function may be called on the associated cef_cookie_manager_t to futher
|
|
||||||
// override these values.
|
|
||||||
///
|
|
||||||
void(CEF_CALLBACK* get_cookieable_schemes)(
|
|
||||||
struct _cef_browser_process_handler_t* self,
|
|
||||||
cef_string_list_t schemes,
|
|
||||||
int* include_defaults);
|
|
||||||
|
|
||||||
///
|
///
|
||||||
// Called on the browser process UI thread immediately after the CEF context
|
// Called on the browser process UI thread immediately after the CEF context
|
||||||
// has been initialized.
|
// has been initialized.
|
||||||
@@ -121,16 +101,6 @@ typedef struct _cef_browser_process_handler_t {
|
|||||||
void(CEF_CALLBACK* on_schedule_message_pump_work)(
|
void(CEF_CALLBACK* on_schedule_message_pump_work)(
|
||||||
struct _cef_browser_process_handler_t* self,
|
struct _cef_browser_process_handler_t* self,
|
||||||
int64 delay_ms);
|
int64 delay_ms);
|
||||||
|
|
||||||
///
|
|
||||||
// Return the default client for use with a newly created browser window. If
|
|
||||||
// null is returned the browser will be unmanaged (no callbacks will be
|
|
||||||
// executed for that browser) and application shutdown will be blocked until
|
|
||||||
// the browser window is closed manually. This function is currently only used
|
|
||||||
// with the chrome runtime.
|
|
||||||
///
|
|
||||||
struct _cef_client_t*(CEF_CALLBACK* get_default_client)(
|
|
||||||
struct _cef_browser_process_handler_t* self);
|
|
||||||
} cef_browser_process_handler_t;
|
} cef_browser_process_handler_t;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@@ -33,7 +33,7 @@
|
|||||||
// by hand. See the translator.README.txt file in the tools directory for
|
// by hand. See the translator.README.txt file in the tools directory for
|
||||||
// more information.
|
// more information.
|
||||||
//
|
//
|
||||||
// $hash=eada7e92085d96497f4e69f3e8a7e8aa6746b175$
|
// $hash=951c936c8070dbf9bd246cc766b81cdfe06a3d81$
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef CEF_INCLUDE_CAPI_CEF_DISPLAY_HANDLER_CAPI_H_
|
#ifndef CEF_INCLUDE_CAPI_CEF_DISPLAY_HANDLER_CAPI_H_
|
||||||
@@ -141,19 +141,6 @@ typedef struct _cef_display_handler_t {
|
|||||||
struct _cef_display_handler_t* self,
|
struct _cef_display_handler_t* self,
|
||||||
struct _cef_browser_t* browser,
|
struct _cef_browser_t* browser,
|
||||||
double progress);
|
double progress);
|
||||||
|
|
||||||
///
|
|
||||||
// Called when the browser's cursor has changed. If |type| is CT_CUSTOM then
|
|
||||||
// |custom_cursor_info| will be populated with the custom cursor information.
|
|
||||||
// Return true (1) if the cursor change was handled or false (0) for default
|
|
||||||
// handling.
|
|
||||||
///
|
|
||||||
int(CEF_CALLBACK* on_cursor_change)(
|
|
||||||
struct _cef_display_handler_t* self,
|
|
||||||
struct _cef_browser_t* browser,
|
|
||||||
cef_cursor_handle_t cursor,
|
|
||||||
cef_cursor_type_t type,
|
|
||||||
const struct _cef_cursor_info_t* custom_cursor_info);
|
|
||||||
} cef_display_handler_t;
|
} cef_display_handler_t;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@@ -33,7 +33,7 @@
|
|||||||
// by hand. See the translator.README.txt file in the tools directory for
|
// by hand. See the translator.README.txt file in the tools directory for
|
||||||
// more information.
|
// more information.
|
||||||
//
|
//
|
||||||
// $hash=19337a70a13352e70452be7fcc25ef2de4b1ae4c$
|
// $hash=14cf03e02d8ca3416e65f756470afd8185c7bc78$
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef CEF_INCLUDE_CAPI_CEF_PARSER_CAPI_H_
|
#ifndef CEF_INCLUDE_CAPI_CEF_PARSER_CAPI_H_
|
||||||
@@ -153,11 +153,13 @@ CEF_EXPORT struct _cef_value_t* cef_parse_json_buffer(
|
|||||||
///
|
///
|
||||||
// Parses the specified |json_string| and returns a dictionary or list
|
// Parses the specified |json_string| and returns a dictionary or list
|
||||||
// representation. If JSON parsing fails this function returns NULL and
|
// representation. If JSON parsing fails this function returns NULL and
|
||||||
// populates |error_msg_out| with a formatted error message.
|
// populates |error_code_out| and |error_msg_out| with an error code and a
|
||||||
|
// formatted error message respectively.
|
||||||
///
|
///
|
||||||
CEF_EXPORT struct _cef_value_t* cef_parse_jsonand_return_error(
|
CEF_EXPORT struct _cef_value_t* cef_parse_jsonand_return_error(
|
||||||
const cef_string_t* json_string,
|
const cef_string_t* json_string,
|
||||||
cef_json_parser_options_t options,
|
cef_json_parser_options_t options,
|
||||||
|
cef_json_parser_error_t* error_code_out,
|
||||||
cef_string_t* error_msg_out);
|
cef_string_t* error_msg_out);
|
||||||
|
|
||||||
///
|
///
|
||||||
|
@@ -33,7 +33,7 @@
|
|||||||
// by hand. See the translator.README.txt file in the tools directory for
|
// by hand. See the translator.README.txt file in the tools directory for
|
||||||
// more information.
|
// more information.
|
||||||
//
|
//
|
||||||
// $hash=f9806cd79f33b6a762fff25edd4189ae42bc8fd2$
|
// $hash=e642fc1fe3b97a90c0eae7f0fc0a5cfd385e3e17$
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef CEF_INCLUDE_CAPI_CEF_RENDER_HANDLER_CAPI_H_
|
#ifndef CEF_INCLUDE_CAPI_CEF_RENDER_HANDLER_CAPI_H_
|
||||||
@@ -159,6 +159,17 @@ typedef struct _cef_render_handler_t {
|
|||||||
cef_rect_t const* dirtyRects,
|
cef_rect_t const* dirtyRects,
|
||||||
void* shared_handle);
|
void* shared_handle);
|
||||||
|
|
||||||
|
///
|
||||||
|
// Called when the browser's cursor has changed. If |type| is CT_CUSTOM then
|
||||||
|
// |custom_cursor_info| will be populated with the custom cursor information.
|
||||||
|
///
|
||||||
|
void(CEF_CALLBACK* on_cursor_change)(
|
||||||
|
struct _cef_render_handler_t* self,
|
||||||
|
struct _cef_browser_t* browser,
|
||||||
|
cef_cursor_handle_t cursor,
|
||||||
|
cef_cursor_type_t type,
|
||||||
|
const struct _cef_cursor_info_t* custom_cursor_info);
|
||||||
|
|
||||||
///
|
///
|
||||||
// Called when the user starts dragging content in the web view. Contextual
|
// Called when the user starts dragging content in the web view. Contextual
|
||||||
// information about the dragged content is supplied by |drag_data|. (|x|,
|
// information about the dragged content is supplied by |drag_data|. (|x|,
|
||||||
|
@@ -33,7 +33,7 @@
|
|||||||
// by hand. See the translator.README.txt file in the tools directory for
|
// by hand. See the translator.README.txt file in the tools directory for
|
||||||
// more information.
|
// more information.
|
||||||
//
|
//
|
||||||
// $hash=d443c0990241554b548bc946f46f35582445e818$
|
// $hash=370cdeaa3252a9ed0e1a627d858dcab23af24ee1$
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef CEF_INCLUDE_CAPI_CEF_THREAD_CAPI_H_
|
#ifndef CEF_INCLUDE_CAPI_CEF_THREAD_CAPI_H_
|
||||||
@@ -98,8 +98,8 @@ typedef struct _cef_thread_t {
|
|||||||
// identify the thread. |priority| is the thread execution priority.
|
// identify the thread. |priority| is the thread execution priority.
|
||||||
// |message_loop_type| indicates the set of asynchronous events that the thread
|
// |message_loop_type| indicates the set of asynchronous events that the thread
|
||||||
// can process. If |stoppable| is true (1) the thread will stopped and joined on
|
// can process. If |stoppable| is true (1) the thread will stopped and joined on
|
||||||
// destruction or when stop() is called; otherwise, the thread cannot be stopped
|
// destruction or when stop() is called; otherwise, the the thread cannot be
|
||||||
// and will be leaked on shutdown. On Windows the |com_init_mode| value
|
// stopped and will be leaked on shutdown. On Windows the |com_init_mode| value
|
||||||
// specifies how COM will be initialized for the thread. If |com_init_mode| is
|
// specifies how COM will be initialized for the thread. If |com_init_mode| is
|
||||||
// set to COM_INIT_MODE_STA then |message_loop_type| must be set to ML_TYPE_UI.
|
// set to COM_INIT_MODE_STA then |message_loop_type| must be set to ML_TYPE_UI.
|
||||||
///
|
///
|
||||||
|
@@ -33,7 +33,7 @@
|
|||||||
// by hand. See the translator.README.txt file in the tools directory for
|
// by hand. See the translator.README.txt file in the tools directory for
|
||||||
// more information.
|
// more information.
|
||||||
//
|
//
|
||||||
// $hash=75f4f7a9ff628a6ae699a697722caa5d49546784$
|
// $hash=63d875f5a922dd2c2e1efaaf0ddaa20475f79ef8$
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef CEF_INCLUDE_CAPI_CEF_URLREQUEST_CAPI_H_
|
#ifndef CEF_INCLUDE_CAPI_CEF_URLREQUEST_CAPI_H_
|
||||||
@@ -115,13 +115,20 @@ typedef struct _cef_urlrequest_t {
|
|||||||
// Create a new URL request that is not associated with a specific browser or
|
// Create a new URL request that is not associated with a specific browser or
|
||||||
// frame. Use cef_frame_t::CreateURLRequest instead if you want the request to
|
// frame. Use cef_frame_t::CreateURLRequest instead if you want the request to
|
||||||
// have this association, in which case it may be handled differently (see
|
// have this association, in which case it may be handled differently (see
|
||||||
// documentation on that function). A request created with this function may
|
// documentation on that function). Requests may originate from the both browser
|
||||||
// only originate from the browser process, and will behave as follows:
|
// process and the render process.
|
||||||
|
//
|
||||||
|
// For requests originating from the browser process:
|
||||||
// - It may be intercepted by the client via CefResourceRequestHandler or
|
// - It may be intercepted by the client via CefResourceRequestHandler or
|
||||||
// CefSchemeHandlerFactory.
|
// CefSchemeHandlerFactory.
|
||||||
// - POST data may only contain only a single element of type PDE_TYPE_FILE
|
// - POST data may only contain only a single element of type PDE_TYPE_FILE
|
||||||
// or PDE_TYPE_BYTES.
|
// or PDE_TYPE_BYTES.
|
||||||
// - If |request_context| is empty the global request context will be used.
|
// - If |request_context| is empty the global request context will be used.
|
||||||
|
// For requests originating from the render process:
|
||||||
|
// - It cannot be intercepted by the client so only http(s) and blob schemes
|
||||||
|
// are supported.
|
||||||
|
// - POST data may only contain a single element of type PDE_TYPE_BYTES.
|
||||||
|
// - The |request_context| parameter must be NULL.
|
||||||
//
|
//
|
||||||
// The |request| object will be marked as read-only after calling this function.
|
// The |request| object will be marked as read-only after calling this function.
|
||||||
///
|
///
|
||||||
|
@@ -42,13 +42,13 @@
|
|||||||
// way that may cause binary incompatibility with other builds. The universal
|
// way that may cause binary incompatibility with other builds. The universal
|
||||||
// hash value will change if any platform is affected whereas the platform hash
|
// hash value will change if any platform is affected whereas the platform hash
|
||||||
// values will change only if that particular platform is affected.
|
// values will change only if that particular platform is affected.
|
||||||
#define CEF_API_HASH_UNIVERSAL "7f349b7262bfe13bda037370004f56a6081e543b"
|
#define CEF_API_HASH_UNIVERSAL "09d3d4f08869644fe3baa7a751de537f3446525b"
|
||||||
#if defined(OS_WIN)
|
#if defined(OS_WIN)
|
||||||
#define CEF_API_HASH_PLATFORM "8a5523fec15255e2fb1de64deaa15dc3554b91e5"
|
#define CEF_API_HASH_PLATFORM "3022db6736af26cc38158d38e22f74a51312a5c9"
|
||||||
#elif defined(OS_MAC)
|
#elif defined(OS_MACOSX)
|
||||||
#define CEF_API_HASH_PLATFORM "f572c8f7d3aee3cd3b85bd398b0ba43eb7fe79a0"
|
#define CEF_API_HASH_PLATFORM "13e2e2451c2320f0d16b35ba53b3295409888dd8"
|
||||||
#elif defined(OS_LINUX)
|
#elif defined(OS_LINUX)
|
||||||
#define CEF_API_HASH_PLATFORM "abf4cc6ff102e5cd019aaf51f13eb30f9bfeae45"
|
#define CEF_API_HASH_PLATFORM "d781b815150795b0bce95d72ce967b508c9a04d5"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@@ -35,7 +35,7 @@
|
|||||||
#include "include/cef_base.h"
|
#include "include/cef_base.h"
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|
||||||
#if defined(OS_MAC) && defined(__OBJC__)
|
#if defined(OS_MACOSX) && defined(__OBJC__)
|
||||||
|
|
||||||
#ifdef USING_CHROMIUM_INCLUDES
|
#ifdef USING_CHROMIUM_INCLUDES
|
||||||
|
|
||||||
@@ -105,6 +105,6 @@ class CefScopedSendingEvent {
|
|||||||
|
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|
||||||
#endif // defined(OS_MAC) && defined(__OBJC__)
|
#endif // defined(OS_MACOSX) && defined(__OBJC__)
|
||||||
|
|
||||||
#endif // CEF_INCLUDE_CEF_APPLICATION_MAC_H_
|
#endif // CEF_INCLUDE_CEF_APPLICATION_MAC_H_
|
||||||
|
@@ -40,7 +40,7 @@
|
|||||||
#include "include/internal/cef_types_wrappers.h"
|
#include "include/internal/cef_types_wrappers.h"
|
||||||
#if defined(OS_WIN)
|
#if defined(OS_WIN)
|
||||||
#include "include/internal/cef_win.h"
|
#include "include/internal/cef_win.h"
|
||||||
#elif defined(OS_MAC)
|
#elif defined(OS_MACOSX)
|
||||||
#include "include/internal/cef_mac.h"
|
#include "include/internal/cef_mac.h"
|
||||||
#elif defined(OS_LINUX)
|
#elif defined(OS_LINUX)
|
||||||
#include "include/internal/cef_linux.h"
|
#include "include/internal/cef_linux.h"
|
||||||
|
@@ -592,6 +592,18 @@ class CefBrowserHost : public virtual CefBaseRefCounted {
|
|||||||
CefRefPtr<CefNavigationEntryVisitor> visitor,
|
CefRefPtr<CefNavigationEntryVisitor> visitor,
|
||||||
bool current_only) = 0;
|
bool current_only) = 0;
|
||||||
|
|
||||||
|
///
|
||||||
|
// Set whether mouse cursor change is disabled.
|
||||||
|
///
|
||||||
|
/*--cef()--*/
|
||||||
|
virtual void SetMouseCursorChangeDisabled(bool disabled) = 0;
|
||||||
|
|
||||||
|
///
|
||||||
|
// Returns true if mouse cursor change is disabled.
|
||||||
|
///
|
||||||
|
/*--cef()--*/
|
||||||
|
virtual bool IsMouseCursorChangeDisabled() = 0;
|
||||||
|
|
||||||
///
|
///
|
||||||
// If a misspelled word is currently selected in an editable node calling
|
// If a misspelled word is currently selected in an editable node calling
|
||||||
// this method will replace it with the specified |word|.
|
// this method will replace it with the specified |word|.
|
||||||
|
@@ -39,7 +39,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "include/cef_base.h"
|
#include "include/cef_base.h"
|
||||||
#include "include/cef_client.h"
|
|
||||||
#include "include/cef_command_line.h"
|
#include "include/cef_command_line.h"
|
||||||
#include "include/cef_print_handler.h"
|
#include "include/cef_print_handler.h"
|
||||||
#include "include/cef_values.h"
|
#include "include/cef_values.h"
|
||||||
@@ -51,23 +50,6 @@
|
|||||||
/*--cef(source=client,no_debugct_check)--*/
|
/*--cef(source=client,no_debugct_check)--*/
|
||||||
class CefBrowserProcessHandler : public virtual CefBaseRefCounted {
|
class CefBrowserProcessHandler : public virtual CefBaseRefCounted {
|
||||||
public:
|
public:
|
||||||
///
|
|
||||||
// Called on the browser process UI thread to retrieve the list of schemes
|
|
||||||
// that should support cookies. If |include_defaults| is true the default
|
|
||||||
// schemes ("http", "https", "ws" and "wss") will also be supported. Providing
|
|
||||||
// an empty |schemes| value and setting |include_defaults| to false will
|
|
||||||
// disable all loading and saving of cookies.
|
|
||||||
//
|
|
||||||
// This state will apply to the CefCookieManager associated with the global
|
|
||||||
// CefRequestContext. It will also be used as the initial state for any new
|
|
||||||
// CefRequestContexts created by the client. After creating a new
|
|
||||||
// CefRequestContext the CefCookieManager::SetSupportedSchemes method may be
|
|
||||||
// called on the associated CefCookieManager to futher override these values.
|
|
||||||
///
|
|
||||||
/*--cef()--*/
|
|
||||||
virtual void GetCookieableSchemes(std::vector<CefString>& schemes,
|
|
||||||
bool& include_defaults) {}
|
|
||||||
|
|
||||||
///
|
///
|
||||||
// Called on the browser process UI thread immediately after the CEF context
|
// Called on the browser process UI thread immediately after the CEF context
|
||||||
// has been initialized.
|
// has been initialized.
|
||||||
@@ -108,16 +90,6 @@ class CefBrowserProcessHandler : public virtual CefBaseRefCounted {
|
|||||||
///
|
///
|
||||||
/*--cef()--*/
|
/*--cef()--*/
|
||||||
virtual void OnScheduleMessagePumpWork(int64 delay_ms) {}
|
virtual void OnScheduleMessagePumpWork(int64 delay_ms) {}
|
||||||
|
|
||||||
///
|
|
||||||
// Return the default client for use with a newly created browser window. If
|
|
||||||
// null is returned the browser will be unmanaged (no callbacks will be
|
|
||||||
// executed for that browser) and application shutdown will be blocked until
|
|
||||||
// the browser window is closed manually. This method is currently only used
|
|
||||||
// with the chrome runtime.
|
|
||||||
///
|
|
||||||
/*--cef()--*/
|
|
||||||
virtual CefRefPtr<CefClient> GetDefaultClient() { return nullptr; }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CEF_INCLUDE_CEF_BROWSER_PROCESS_HANDLER_H_
|
#endif // CEF_INCLUDE_CEF_BROWSER_PROCESS_HANDLER_H_
|
||||||
|
@@ -135,19 +135,6 @@ class CefDisplayHandler : public virtual CefBaseRefCounted {
|
|||||||
/*--cef()--*/
|
/*--cef()--*/
|
||||||
virtual void OnLoadingProgressChange(CefRefPtr<CefBrowser> browser,
|
virtual void OnLoadingProgressChange(CefRefPtr<CefBrowser> browser,
|
||||||
double progress) {}
|
double progress) {}
|
||||||
|
|
||||||
///
|
|
||||||
// Called when the browser's cursor has changed. If |type| is CT_CUSTOM then
|
|
||||||
// |custom_cursor_info| will be populated with the custom cursor information.
|
|
||||||
// Return true if the cursor change was handled or false for default handling.
|
|
||||||
///
|
|
||||||
/*--cef()--*/
|
|
||||||
virtual bool OnCursorChange(CefRefPtr<CefBrowser> browser,
|
|
||||||
CefCursorHandle cursor,
|
|
||||||
cef_cursor_type_t type,
|
|
||||||
const CefCursorInfo& custom_cursor_info) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CEF_INCLUDE_CEF_DISPLAY_HANDLER_H_
|
#endif // CEF_INCLUDE_CEF_DISPLAY_HANDLER_H_
|
||||||
|
@@ -146,12 +146,14 @@ CefRefPtr<CefValue> CefParseJSON(const void* json,
|
|||||||
///
|
///
|
||||||
// Parses the specified |json_string| and returns a dictionary or list
|
// Parses the specified |json_string| and returns a dictionary or list
|
||||||
// representation. If JSON parsing fails this method returns NULL and populates
|
// representation. If JSON parsing fails this method returns NULL and populates
|
||||||
// |error_msg_out| with a formatted error message.
|
// |error_code_out| and |error_msg_out| with an error code and a formatted error
|
||||||
|
// message respectively.
|
||||||
///
|
///
|
||||||
/*--cef()--*/
|
/*--cef()--*/
|
||||||
CefRefPtr<CefValue> CefParseJSONAndReturnError(
|
CefRefPtr<CefValue> CefParseJSONAndReturnError(
|
||||||
const CefString& json_string,
|
const CefString& json_string,
|
||||||
cef_json_parser_options_t options,
|
cef_json_parser_options_t options,
|
||||||
|
cef_json_parser_error_t& error_code_out,
|
||||||
CefString& error_msg_out);
|
CefString& error_msg_out);
|
||||||
|
|
||||||
///
|
///
|
||||||
|
@@ -52,6 +52,7 @@
|
|||||||
/*--cef(source=client)--*/
|
/*--cef(source=client)--*/
|
||||||
class CefRenderHandler : public virtual CefBaseRefCounted {
|
class CefRenderHandler : public virtual CefBaseRefCounted {
|
||||||
public:
|
public:
|
||||||
|
typedef cef_cursor_type_t CursorType;
|
||||||
typedef cef_drag_operations_mask_t DragOperation;
|
typedef cef_drag_operations_mask_t DragOperation;
|
||||||
typedef cef_drag_operations_mask_t DragOperationsMask;
|
typedef cef_drag_operations_mask_t DragOperationsMask;
|
||||||
typedef cef_paint_element_type_t PaintElementType;
|
typedef cef_paint_element_type_t PaintElementType;
|
||||||
@@ -161,6 +162,16 @@ class CefRenderHandler : public virtual CefBaseRefCounted {
|
|||||||
const RectList& dirtyRects,
|
const RectList& dirtyRects,
|
||||||
void* shared_handle) {}
|
void* shared_handle) {}
|
||||||
|
|
||||||
|
///
|
||||||
|
// Called when the browser's cursor has changed. If |type| is CT_CUSTOM then
|
||||||
|
// |custom_cursor_info| will be populated with the custom cursor information.
|
||||||
|
///
|
||||||
|
/*--cef()--*/
|
||||||
|
virtual void OnCursorChange(CefRefPtr<CefBrowser> browser,
|
||||||
|
CefCursorHandle cursor,
|
||||||
|
CursorType type,
|
||||||
|
const CefCursorInfo& custom_cursor_info) {}
|
||||||
|
|
||||||
///
|
///
|
||||||
// Called when the user starts dragging content in the web view. Contextual
|
// Called when the user starts dragging content in the web view. Contextual
|
||||||
// information about the dragged content is supplied by |drag_data|.
|
// information about the dragged content is supplied by |drag_data|.
|
||||||
|
@@ -34,7 +34,7 @@
|
|||||||
#include "include/base/cef_build.h"
|
#include "include/base/cef_build.h"
|
||||||
#include "include/internal/cef_export.h"
|
#include "include/internal/cef_export.h"
|
||||||
|
|
||||||
#if defined(OS_MAC)
|
#if defined(OS_MACOSX)
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -83,6 +83,6 @@ class CEF_EXPORT CefScopedSandboxContext {
|
|||||||
};
|
};
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|
||||||
#endif // defined(OS_MAC)
|
#endif // defined(OS_MACOSX)
|
||||||
|
|
||||||
#endif // CEF_INCLUDE_CEF_SANDBOX_MAC_H_
|
#endif // CEF_INCLUDE_CEF_SANDBOX_MAC_H_
|
||||||
|
@@ -61,7 +61,7 @@ class CefThread : public CefBaseRefCounted {
|
|||||||
// to identify the thread. |priority| is the thread execution priority.
|
// to identify the thread. |priority| is the thread execution priority.
|
||||||
// |message_loop_type| indicates the set of asynchronous events that the
|
// |message_loop_type| indicates the set of asynchronous events that the
|
||||||
// thread can process. If |stoppable| is true the thread will stopped and
|
// thread can process. If |stoppable| is true the thread will stopped and
|
||||||
// joined on destruction or when Stop() is called; otherwise, the thread
|
// joined on destruction or when Stop() is called; otherwise, the the thread
|
||||||
// cannot be stopped and will be leaked on shutdown. On Windows the
|
// cannot be stopped and will be leaked on shutdown. On Windows the
|
||||||
// |com_init_mode| value specifies how COM will be initialized for the thread.
|
// |com_init_mode| value specifies how COM will be initialized for the thread.
|
||||||
// If |com_init_mode| is set to COM_INIT_MODE_STA then |message_loop_type|
|
// If |com_init_mode| is set to COM_INIT_MODE_STA then |message_loop_type|
|
||||||
|
@@ -63,13 +63,20 @@ class CefURLRequest : public virtual CefBaseRefCounted {
|
|||||||
// Create a new URL request that is not associated with a specific browser or
|
// Create a new URL request that is not associated with a specific browser or
|
||||||
// frame. Use CefFrame::CreateURLRequest instead if you want the request to
|
// frame. Use CefFrame::CreateURLRequest instead if you want the request to
|
||||||
// have this association, in which case it may be handled differently (see
|
// have this association, in which case it may be handled differently (see
|
||||||
// documentation on that method). A request created with this method may only
|
// documentation on that method). Requests may originate from the both browser
|
||||||
// originate from the browser process, and will behave as follows:
|
// process and the render process.
|
||||||
|
//
|
||||||
|
// For requests originating from the browser process:
|
||||||
// - It may be intercepted by the client via CefResourceRequestHandler or
|
// - It may be intercepted by the client via CefResourceRequestHandler or
|
||||||
// CefSchemeHandlerFactory.
|
// CefSchemeHandlerFactory.
|
||||||
// - POST data may only contain only a single element of type PDE_TYPE_FILE
|
// - POST data may only contain only a single element of type PDE_TYPE_FILE
|
||||||
// or PDE_TYPE_BYTES.
|
// or PDE_TYPE_BYTES.
|
||||||
// - If |request_context| is empty the global request context will be used.
|
// - If |request_context| is empty the global request context will be used.
|
||||||
|
// For requests originating from the render process:
|
||||||
|
// - It cannot be intercepted by the client so only http(s) and blob schemes
|
||||||
|
// are supported.
|
||||||
|
// - POST data may only contain a single element of type PDE_TYPE_BYTES.
|
||||||
|
// - The |request_context| parameter must be NULL.
|
||||||
//
|
//
|
||||||
// The |request| object will be marked as read-only after calling this method.
|
// The |request| object will be marked as read-only after calling this method.
|
||||||
///
|
///
|
||||||
|
@@ -39,7 +39,7 @@
|
|||||||
// Bring in platform-specific definitions.
|
// Bring in platform-specific definitions.
|
||||||
#if defined(OS_WIN)
|
#if defined(OS_WIN)
|
||||||
#include "include/internal/cef_types_win.h"
|
#include "include/internal/cef_types_win.h"
|
||||||
#elif defined(OS_MAC)
|
#elif defined(OS_MACOSX)
|
||||||
#include "include/internal/cef_types_mac.h"
|
#include "include/internal/cef_types_mac.h"
|
||||||
#elif defined(OS_LINUX)
|
#elif defined(OS_LINUX)
|
||||||
#include "include/internal/cef_types_linux.h"
|
#include "include/internal/cef_types_linux.h"
|
||||||
@@ -2367,6 +2367,22 @@ typedef enum {
|
|||||||
JSON_PARSER_ALLOW_TRAILING_COMMAS = 1 << 0,
|
JSON_PARSER_ALLOW_TRAILING_COMMAS = 1 << 0,
|
||||||
} cef_json_parser_options_t;
|
} cef_json_parser_options_t;
|
||||||
|
|
||||||
|
///
|
||||||
|
// Error codes that can be returned from CefParseJSONAndReturnError.
|
||||||
|
///
|
||||||
|
typedef enum {
|
||||||
|
JSON_NO_ERROR = 0,
|
||||||
|
JSON_INVALID_ESCAPE,
|
||||||
|
JSON_SYNTAX_ERROR,
|
||||||
|
JSON_UNEXPECTED_TOKEN,
|
||||||
|
JSON_TRAILING_COMMA,
|
||||||
|
JSON_TOO_MUCH_NESTING,
|
||||||
|
JSON_UNEXPECTED_DATA_AFTER_ROOT,
|
||||||
|
JSON_UNSUPPORTED_ENCODING,
|
||||||
|
JSON_UNQUOTED_DICTIONARY_KEY,
|
||||||
|
JSON_PARSE_ERROR_COUNT
|
||||||
|
} cef_json_parser_error_t;
|
||||||
|
|
||||||
///
|
///
|
||||||
// Options that can be passed to CefWriteJSON.
|
// Options that can be passed to CefWriteJSON.
|
||||||
///
|
///
|
||||||
|
@@ -33,7 +33,7 @@
|
|||||||
|
|
||||||
#include "include/base/cef_build.h"
|
#include "include/base/cef_build.h"
|
||||||
|
|
||||||
#if defined(OS_MAC)
|
#if defined(OS_MACOSX)
|
||||||
#include "include/internal/cef_string.h"
|
#include "include/internal/cef_string.h"
|
||||||
|
|
||||||
// Handle types.
|
// Handle types.
|
||||||
@@ -137,6 +137,6 @@ typedef struct _cef_window_info_t {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // OS_MAC
|
#endif // OS_MACOSX
|
||||||
|
|
||||||
#endif // CEF_INCLUDE_INTERNAL_CEF_TYPES_MAC_H_
|
#endif // CEF_INCLUDE_INTERNAL_CEF_TYPES_MAC_H_
|
||||||
|
@@ -56,7 +56,7 @@ int cef_unload_library();
|
|||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(OS_MAC)
|
#if defined(OS_MACOSX)
|
||||||
|
|
||||||
///
|
///
|
||||||
// Scoped helper for loading and unloading the CEF framework library at
|
// Scoped helper for loading and unloading the CEF framework library at
|
||||||
@@ -122,7 +122,7 @@ class CefScopedLibraryLoader {
|
|||||||
DISALLOW_COPY_AND_ASSIGN(CefScopedLibraryLoader);
|
DISALLOW_COPY_AND_ASSIGN(CefScopedLibraryLoader);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // defined(OS_MAC)
|
#endif // defined(OS_MACOSX)
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|
||||||
#endif // CEF_INCLUDE_WRAPPER_CEF_LIBRARY_LOADER_H_
|
#endif // CEF_INCLUDE_WRAPPER_CEF_LIBRARY_LOADER_H_
|
||||||
|
@@ -285,6 +285,10 @@ bool AlloyBrowserContext::IsPrintPreviewSupported() const {
|
|||||||
return !GetPrefs()->GetBoolean(prefs::kPrintPreviewDisabled);
|
return !GetPrefs()->GetBoolean(prefs::kPrintPreviewDisabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AlloyBrowserContext::AddVisitedURLs(const std::vector<GURL>& urls) {
|
||||||
|
visitedlink_master_->AddURLs(urls);
|
||||||
|
}
|
||||||
|
|
||||||
content::ResourceContext* AlloyBrowserContext::GetResourceContext() {
|
content::ResourceContext* AlloyBrowserContext::GetResourceContext() {
|
||||||
if (!resource_context_) {
|
if (!resource_context_) {
|
||||||
resource_context_ = std::make_unique<content::ResourceContext>();
|
resource_context_ = std::make_unique<content::ResourceContext>();
|
||||||
@@ -450,7 +454,3 @@ DownloadPrefs* AlloyBrowserContext::GetDownloadPrefs() {
|
|||||||
}
|
}
|
||||||
return download_prefs_.get();
|
return download_prefs_.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AlloyBrowserContext::AddVisitedURLs(const std::vector<GURL>& urls) {
|
|
||||||
visitedlink_master_->AddURLs(urls);
|
|
||||||
}
|
|
||||||
|
@@ -53,6 +53,7 @@ class AlloyBrowserContext : public ChromeProfileAlloy,
|
|||||||
CefRefPtr<CefExtension> GetExtension(const CefString& extension_id) override;
|
CefRefPtr<CefExtension> GetExtension(const CefString& extension_id) override;
|
||||||
bool UnloadExtension(const CefString& extension_id) override;
|
bool UnloadExtension(const CefString& extension_id) override;
|
||||||
bool IsPrintPreviewSupported() const override;
|
bool IsPrintPreviewSupported() const override;
|
||||||
|
void AddVisitedURLs(const std::vector<GURL>& urls) override;
|
||||||
|
|
||||||
// content::BrowserContext overrides.
|
// content::BrowserContext overrides.
|
||||||
content::ResourceContext* GetResourceContext() override;
|
content::ResourceContext* GetResourceContext() override;
|
||||||
@@ -97,12 +98,15 @@ class AlloyBrowserContext : public ChromeProfileAlloy,
|
|||||||
|
|
||||||
// Values checked in ProfileNetworkContextService::CreateNetworkContextParams
|
// Values checked in ProfileNetworkContextService::CreateNetworkContextParams
|
||||||
// when creating the NetworkContext.
|
// when creating the NetworkContext.
|
||||||
bool ShouldRestoreOldSessionCookies() const override {
|
bool ShouldRestoreOldSessionCookies() override {
|
||||||
return ShouldPersistSessionCookies();
|
return ShouldPersistSessionCookies();
|
||||||
}
|
}
|
||||||
bool ShouldPersistSessionCookies() const override {
|
bool ShouldPersistSessionCookies() override {
|
||||||
return !!settings_.persist_session_cookies;
|
return !!settings_.persist_session_cookies;
|
||||||
}
|
}
|
||||||
|
base::Optional<std::vector<std::string>> GetCookieableSchemes() override {
|
||||||
|
return cookieable_schemes();
|
||||||
|
}
|
||||||
|
|
||||||
// visitedlink::VisitedLinkDelegate methods.
|
// visitedlink::VisitedLinkDelegate methods.
|
||||||
void RebuildTable(const scoped_refptr<URLEnumerator>& enumerator) override;
|
void RebuildTable(const scoped_refptr<URLEnumerator>& enumerator) override;
|
||||||
@@ -112,10 +116,6 @@ class AlloyBrowserContext : public ChromeProfileAlloy,
|
|||||||
return extension_system_;
|
return extension_system_;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Called from AlloyBrowserHostImpl::DidFinishNavigation to update the table
|
|
||||||
// of visited links.
|
|
||||||
void AddVisitedURLs(const std::vector<GURL>& urls);
|
|
||||||
|
|
||||||
// Called from DownloadPrefs::FromBrowserContext.
|
// Called from DownloadPrefs::FromBrowserContext.
|
||||||
DownloadPrefs* GetDownloadPrefs();
|
DownloadPrefs* GetDownloadPrefs();
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -27,16 +27,15 @@
|
|||||||
#include "base/strings/string_number_conversions.h"
|
#include "base/strings/string_number_conversions.h"
|
||||||
#include "base/task/post_task.h"
|
#include "base/task/post_task.h"
|
||||||
#include "chrome/browser/browser_process.h"
|
#include "chrome/browser/browser_process.h"
|
||||||
#include "chrome/browser/media/router/chrome_media_router_factory.h"
|
|
||||||
#include "chrome/browser/net/system_network_context_manager.h"
|
#include "chrome/browser/net/system_network_context_manager.h"
|
||||||
#include "chrome/browser/plugins/plugin_finder.h"
|
#include "chrome/browser/plugins/plugin_finder.h"
|
||||||
#include "components/constrained_window/constrained_window_views.h"
|
#include "components/constrained_window/constrained_window_views.h"
|
||||||
#include "content/public/browser/gpu_data_manager.h"
|
#include "content/public/browser/gpu_data_manager.h"
|
||||||
#include "content/public/browser/network_service_instance.h"
|
#include "content/public/browser/network_service_instance.h"
|
||||||
#include "content/public/common/result_codes.h"
|
|
||||||
#include "extensions/browser/extension_system.h"
|
#include "extensions/browser/extension_system.h"
|
||||||
#include "extensions/common/constants.h"
|
#include "extensions/common/constants.h"
|
||||||
#include "net/base/net_module.h"
|
#include "net/base/net_module.h"
|
||||||
|
#include "services/service_manager/embedder/result_codes.h"
|
||||||
#include "ui/base/resource/resource_bundle.h"
|
#include "ui/base/resource/resource_bundle.h"
|
||||||
|
|
||||||
#if defined(USE_AURA) && defined(USE_X11)
|
#if defined(USE_AURA) && defined(USE_X11)
|
||||||
@@ -58,7 +57,7 @@
|
|||||||
#endif // defined(USE_AURA)
|
#endif // defined(USE_AURA)
|
||||||
|
|
||||||
#if defined(TOOLKIT_VIEWS)
|
#if defined(TOOLKIT_VIEWS)
|
||||||
#if defined(OS_MAC)
|
#if defined(OS_MACOSX)
|
||||||
#include "chrome/browser/ui/views/chrome_layout_provider.h"
|
#include "chrome/browser/ui/views/chrome_layout_provider.h"
|
||||||
#include "chrome/browser/ui/views/chrome_views_delegate.h"
|
#include "chrome/browser/ui/views/chrome_views_delegate.h"
|
||||||
#else
|
#else
|
||||||
@@ -89,7 +88,7 @@ int AlloyBrowserMainParts::PreEarlyInitialization() {
|
|||||||
ui::InitializeInputMethodForTesting();
|
ui::InitializeInputMethodForTesting();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return content::RESULT_CODE_NORMAL_EXIT;
|
return service_manager::RESULT_CODE_NORMAL_EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AlloyBrowserMainParts::ToolkitInitialized() {
|
void AlloyBrowserMainParts::ToolkitInitialized() {
|
||||||
@@ -106,7 +105,7 @@ void AlloyBrowserMainParts::ToolkitInitialized() {
|
|||||||
#endif // defined(USE_AURA)
|
#endif // defined(USE_AURA)
|
||||||
|
|
||||||
#if defined(TOOLKIT_VIEWS)
|
#if defined(TOOLKIT_VIEWS)
|
||||||
#if defined(OS_MAC)
|
#if defined(OS_MACOSX)
|
||||||
views_delegate_ = std::make_unique<ChromeViewsDelegate>();
|
views_delegate_ = std::make_unique<ChromeViewsDelegate>();
|
||||||
layout_provider_ = ChromeLayoutProvider::CreateLayoutProvider();
|
layout_provider_ = ChromeLayoutProvider::CreateLayoutProvider();
|
||||||
#else
|
#else
|
||||||
@@ -131,8 +130,6 @@ void AlloyBrowserMainParts::PreMainMessageLoopStart() {
|
|||||||
// setup.exe. In Chrome, these strings are in the locale files.
|
// setup.exe. In Chrome, these strings are in the locale files.
|
||||||
ChromeBrowserMainPartsWin::SetupInstallerUtilStrings();
|
ChromeBrowserMainPartsWin::SetupInstallerUtilStrings();
|
||||||
#endif // defined(OS_WIN)
|
#endif // defined(OS_WIN)
|
||||||
|
|
||||||
media_router::ChromeMediaRouterFactory::DoPlatformInit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AlloyBrowserMainParts::PostMainMessageLoopStart() {
|
void AlloyBrowserMainParts::PostMainMessageLoopStart() {
|
||||||
@@ -233,7 +230,7 @@ void AlloyBrowserMainParts::PostDestroyThreads() {
|
|||||||
|
|
||||||
#if defined(TOOLKIT_VIEWS)
|
#if defined(TOOLKIT_VIEWS)
|
||||||
views_delegate_.reset();
|
views_delegate_.reset();
|
||||||
#if defined(OS_MAC)
|
#if defined(OS_MACOSX)
|
||||||
layout_provider_.reset();
|
layout_provider_.reset();
|
||||||
#endif
|
#endif
|
||||||
#endif // defined(TOOLKIT_VIEWS)
|
#endif // defined(TOOLKIT_VIEWS)
|
||||||
|
@@ -32,7 +32,7 @@ class WMState;
|
|||||||
#if defined(TOOLKIT_VIEWS)
|
#if defined(TOOLKIT_VIEWS)
|
||||||
namespace views {
|
namespace views {
|
||||||
class ViewsDelegate;
|
class ViewsDelegate;
|
||||||
#if defined(OS_MAC)
|
#if defined(OS_MACOSX)
|
||||||
class LayoutProvider;
|
class LayoutProvider;
|
||||||
#endif
|
#endif
|
||||||
} // namespace views
|
} // namespace views
|
||||||
@@ -96,7 +96,7 @@ class AlloyBrowserMainParts : public content::BrowserMainParts {
|
|||||||
|
|
||||||
#if defined(TOOLKIT_VIEWS)
|
#if defined(TOOLKIT_VIEWS)
|
||||||
std::unique_ptr<views::ViewsDelegate> views_delegate_;
|
std::unique_ptr<views::ViewsDelegate> views_delegate_;
|
||||||
#if defined(OS_MAC)
|
#if defined(OS_MACOSX)
|
||||||
std::unique_ptr<views::LayoutProvider> layout_provider_;
|
std::unique_ptr<views::LayoutProvider> layout_provider_;
|
||||||
#endif
|
#endif
|
||||||
#endif // defined(TOOLKIT_VIEWS)
|
#endif // defined(TOOLKIT_VIEWS)
|
||||||
|
@@ -9,9 +9,9 @@
|
|||||||
|
|
||||||
#include "include/cef_version.h"
|
#include "include/cef_version.h"
|
||||||
#include "libcef/browser/alloy/alloy_browser_context.h"
|
#include "libcef/browser/alloy/alloy_browser_context.h"
|
||||||
#include "libcef/browser/alloy/alloy_browser_host_impl.h"
|
|
||||||
#include "libcef/browser/alloy/alloy_browser_main.h"
|
#include "libcef/browser/alloy/alloy_browser_main.h"
|
||||||
#include "libcef/browser/browser_context.h"
|
#include "libcef/browser/browser_context.h"
|
||||||
|
#include "libcef/browser/browser_host_impl.h"
|
||||||
#include "libcef/browser/browser_info.h"
|
#include "libcef/browser/browser_info.h"
|
||||||
#include "libcef/browser/browser_info_manager.h"
|
#include "libcef/browser/browser_info_manager.h"
|
||||||
#include "libcef/browser/browser_message_filter.h"
|
#include "libcef/browser/browser_message_filter.h"
|
||||||
@@ -22,8 +22,6 @@
|
|||||||
#include "libcef/browser/extensions/extension_web_contents_observer.h"
|
#include "libcef/browser/extensions/extension_web_contents_observer.h"
|
||||||
#include "libcef/browser/media_capture_devices_dispatcher.h"
|
#include "libcef/browser/media_capture_devices_dispatcher.h"
|
||||||
#include "libcef/browser/net/chrome_scheme_handler.h"
|
#include "libcef/browser/net/chrome_scheme_handler.h"
|
||||||
#include "libcef/browser/net/throttle_handler.h"
|
|
||||||
#include "libcef/browser/net_service/cookie_manager_impl.h"
|
|
||||||
#include "libcef/browser/net_service/login_delegate.h"
|
#include "libcef/browser/net_service/login_delegate.h"
|
||||||
#include "libcef/browser/net_service/proxy_url_loader_factory.h"
|
#include "libcef/browser/net_service/proxy_url_loader_factory.h"
|
||||||
#include "libcef/browser/net_service/resource_request_handler_wrapper.h"
|
#include "libcef/browser/net_service/resource_request_handler_wrapper.h"
|
||||||
@@ -42,6 +40,7 @@
|
|||||||
#include "libcef/common/extensions/extensions_util.h"
|
#include "libcef/common/extensions/extensions_util.h"
|
||||||
#include "libcef/common/net/scheme_registration.h"
|
#include "libcef/common/net/scheme_registration.h"
|
||||||
#include "libcef/common/request_impl.h"
|
#include "libcef/common/request_impl.h"
|
||||||
|
#include "libcef/common/service_manifests/cef_content_browser_overlay_manifest.h"
|
||||||
|
|
||||||
#include "base/base_switches.h"
|
#include "base/base_switches.h"
|
||||||
#include "base/command_line.h"
|
#include "base/command_line.h"
|
||||||
@@ -73,10 +72,13 @@
|
|||||||
#include "chrome/grit/generated_resources.h"
|
#include "chrome/grit/generated_resources.h"
|
||||||
#include "chrome/services/printing/printing_service.h"
|
#include "chrome/services/printing/printing_service.h"
|
||||||
#include "components/content_settings/core/browser/cookie_settings.h"
|
#include "components/content_settings/core/browser/cookie_settings.h"
|
||||||
|
#include "components/navigation_interception/intercept_navigation_throttle.h"
|
||||||
|
#include "components/navigation_interception/navigation_params.h"
|
||||||
#include "components/spellcheck/common/spellcheck.mojom.h"
|
#include "components/spellcheck/common/spellcheck.mojom.h"
|
||||||
|
#include "components/variations/variations_http_header_provider.h"
|
||||||
#include "components/version_info/version_info.h"
|
#include "components/version_info/version_info.h"
|
||||||
|
#include "content/browser/frame_host/render_frame_host_impl.h"
|
||||||
#include "content/browser/plugin_service_impl.h"
|
#include "content/browser/plugin_service_impl.h"
|
||||||
#include "content/browser/renderer_host/render_frame_host_impl.h"
|
|
||||||
#include "content/public/browser/browser_context.h"
|
#include "content/public/browser/browser_context.h"
|
||||||
#include "content/public/browser/browser_ppapi_host.h"
|
#include "content/public/browser/browser_ppapi_host.h"
|
||||||
#include "content/public/browser/browser_thread.h"
|
#include "content/public/browser/browser_thread.h"
|
||||||
@@ -97,14 +99,13 @@
|
|||||||
#include "content/public/common/storage_quota_params.h"
|
#include "content/public/common/storage_quota_params.h"
|
||||||
#include "content/public/common/url_constants.h"
|
#include "content/public/common/url_constants.h"
|
||||||
#include "content/public/common/user_agent.h"
|
#include "content/public/common/user_agent.h"
|
||||||
|
#include "content/public/common/web_preferences.h"
|
||||||
#include "extensions/browser/extension_message_filter.h"
|
#include "extensions/browser/extension_message_filter.h"
|
||||||
#include "extensions/browser/extension_protocols.h"
|
#include "extensions/browser/extension_protocols.h"
|
||||||
#include "extensions/browser/extension_registry.h"
|
#include "extensions/browser/extension_registry.h"
|
||||||
#include "extensions/browser/extensions_browser_client.h"
|
#include "extensions/browser/extensions_browser_client.h"
|
||||||
#include "extensions/browser/guest_view/extensions_guest_view_message_filter.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/guest_view/web_view/web_view_guest.h"
|
||||||
#include "extensions/browser/info_map.h"
|
|
||||||
#include "extensions/browser/process_map.h"
|
|
||||||
#include "extensions/browser/url_loader_factory_manager.h"
|
#include "extensions/browser/url_loader_factory_manager.h"
|
||||||
#include "extensions/common/constants.h"
|
#include "extensions/common/constants.h"
|
||||||
#include "extensions/common/switches.h"
|
#include "extensions/common/switches.h"
|
||||||
@@ -113,12 +114,12 @@
|
|||||||
#include "net/base/auth.h"
|
#include "net/base/auth.h"
|
||||||
#include "net/ssl/ssl_cert_request_info.h"
|
#include "net/ssl/ssl_cert_request_info.h"
|
||||||
#include "ppapi/host/ppapi_host.h"
|
#include "ppapi/host/ppapi_host.h"
|
||||||
#include "sandbox/policy/switches.h"
|
|
||||||
#include "services/network/public/cpp/network_switches.h"
|
#include "services/network/public/cpp/network_switches.h"
|
||||||
#include "services/proxy_resolver/public/mojom/proxy_resolver.mojom.h"
|
#include "services/proxy_resolver/public/mojom/proxy_resolver.mojom.h"
|
||||||
|
#include "services/service_manager/embedder/switches.h"
|
||||||
#include "services/service_manager/public/mojom/connector.mojom.h"
|
#include "services/service_manager/public/mojom/connector.mojom.h"
|
||||||
|
#include "services/service_manager/sandbox/switches.h"
|
||||||
#include "storage/browser/quota/quota_settings.h"
|
#include "storage/browser/quota/quota_settings.h"
|
||||||
#include "third_party/blink/public/common/web_preferences/web_preferences.h"
|
|
||||||
#include "third_party/blink/public/mojom/insecure_input/insecure_input_service.mojom.h"
|
#include "third_party/blink/public/mojom/insecure_input/insecure_input_service.mojom.h"
|
||||||
#include "third_party/blink/public/mojom/prerender/prerender.mojom.h"
|
#include "third_party/blink/public/mojom/prerender/prerender.mojom.h"
|
||||||
#include "third_party/blink/public/web/web_window_features.h"
|
#include "third_party/blink/public/web/web_window_features.h"
|
||||||
@@ -132,7 +133,7 @@
|
|||||||
#include "libcef/common/widevine_loader.h"
|
#include "libcef/common/widevine_loader.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(OS_POSIX) && !defined(OS_MAC)
|
#if defined(OS_POSIX) && !defined(OS_MACOSX)
|
||||||
#include "base/debug/leak_annotations.h"
|
#include "base/debug/leak_annotations.h"
|
||||||
#include "chrome/common/chrome_paths.h"
|
#include "chrome/common/chrome_paths.h"
|
||||||
#include "components/crash/content/browser/crash_handler_host_linux.h"
|
#include "components/crash/content/browser/crash_handler_host_linux.h"
|
||||||
@@ -140,7 +141,7 @@
|
|||||||
#include "content/public/common/content_descriptors.h"
|
#include "content/public/common/content_descriptors.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(OS_MAC)
|
#if defined(OS_MACOSX)
|
||||||
#include "net/ssl/client_cert_store_mac.h"
|
#include "net/ssl/client_cert_store_mac.h"
|
||||||
#include "services/video_capture/public/mojom/constants.mojom.h"
|
#include "services/video_capture/public/mojom/constants.mojom.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -348,9 +349,9 @@ class CefQuotaPermissionContext : public content::QuotaPermissionContext {
|
|||||||
|
|
||||||
bool handled = false;
|
bool handled = false;
|
||||||
|
|
||||||
CefRefPtr<AlloyBrowserHostImpl> browser =
|
CefRefPtr<CefBrowserHostImpl> browser =
|
||||||
AlloyBrowserHostImpl::GetBrowserForFrameRoute(render_process_id,
|
CefBrowserHostImpl::GetBrowserForFrameRoute(render_process_id,
|
||||||
params.render_frame_id);
|
params.render_frame_id);
|
||||||
if (browser.get()) {
|
if (browser.get()) {
|
||||||
CefRefPtr<CefClient> client = browser->GetClient();
|
CefRefPtr<CefClient> client = browser->GetClient();
|
||||||
if (client.get()) {
|
if (client.get()) {
|
||||||
@@ -382,7 +383,7 @@ class CefQuotaPermissionContext : public content::QuotaPermissionContext {
|
|||||||
DISALLOW_COPY_AND_ASSIGN(CefQuotaPermissionContext);
|
DISALLOW_COPY_AND_ASSIGN(CefQuotaPermissionContext);
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(OS_POSIX) && !defined(OS_MAC)
|
#if defined(OS_POSIX) && !defined(OS_MACOSX)
|
||||||
breakpad::CrashHandlerHostLinux* CreateCrashHandlerHost(
|
breakpad::CrashHandlerHostLinux* CreateCrashHandlerHost(
|
||||||
const std::string& process_type) {
|
const std::string& process_type) {
|
||||||
base::FilePath dumps_path;
|
base::FilePath dumps_path;
|
||||||
@@ -437,7 +438,74 @@ int GetCrashSignalFD(const base::CommandLine& command_line) {
|
|||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#endif // defined(OS_POSIX) && !defined(OS_MAC)
|
#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
|
||||||
|
|
||||||
|
// TODO(cef): We can't currently trust NavigationParams::is_main_frame() because
|
||||||
|
// it's always set to true in
|
||||||
|
// InterceptNavigationThrottle::CheckIfShouldIgnoreNavigation. Remove the
|
||||||
|
// |is_main_frame| argument once this problem is fixed.
|
||||||
|
bool NavigationOnUIThread(
|
||||||
|
bool is_main_frame,
|
||||||
|
int64_t frame_id,
|
||||||
|
int64_t parent_frame_id,
|
||||||
|
int frame_tree_node_id,
|
||||||
|
content::WebContents* source,
|
||||||
|
const navigation_interception::NavigationParams& params) {
|
||||||
|
CEF_REQUIRE_UIT();
|
||||||
|
|
||||||
|
content::OpenURLParams open_params(
|
||||||
|
params.url(), params.referrer(), WindowOpenDisposition::CURRENT_TAB,
|
||||||
|
params.transition_type(), params.is_renderer_initiated());
|
||||||
|
open_params.user_gesture = params.has_user_gesture();
|
||||||
|
open_params.initiator_origin = params.initiator_origin();
|
||||||
|
|
||||||
|
CefRefPtr<CefBrowserHostImpl> browser;
|
||||||
|
if (!CefBrowserInfoManager::GetInstance()->MaybeAllowNavigation(
|
||||||
|
source->GetMainFrame(), open_params, browser)) {
|
||||||
|
// Cancel the navigation.
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ignore_navigation = false;
|
||||||
|
|
||||||
|
if (browser.get()) {
|
||||||
|
CefRefPtr<CefClient> client = browser->GetClient();
|
||||||
|
if (client.get()) {
|
||||||
|
CefRefPtr<CefRequestHandler> handler = client->GetRequestHandler();
|
||||||
|
if (handler.get()) {
|
||||||
|
CefRefPtr<CefFrame> frame;
|
||||||
|
if (is_main_frame) {
|
||||||
|
frame = browser->GetMainFrame();
|
||||||
|
} else if (frame_id >= 0) {
|
||||||
|
frame = browser->GetFrame(frame_id);
|
||||||
|
}
|
||||||
|
if (!frame && frame_tree_node_id >= 0) {
|
||||||
|
frame = browser->GetFrameForFrameTreeNode(frame_tree_node_id);
|
||||||
|
}
|
||||||
|
if (!frame) {
|
||||||
|
// Create a temporary frame object for navigation of sub-frames that
|
||||||
|
// don't yet exist.
|
||||||
|
frame = browser->browser_info()->CreateTempSubFrame(parent_frame_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
CefRefPtr<CefRequestImpl> request = new CefRequestImpl();
|
||||||
|
request->Set(params, is_main_frame);
|
||||||
|
request->SetReadOnly(true);
|
||||||
|
|
||||||
|
// Initiating a new navigation in OnBeforeBrowse will delete the
|
||||||
|
// InterceptNavigationThrottle that currently owns this callback,
|
||||||
|
// resulting in a crash. Use the lock to prevent that.
|
||||||
|
std::unique_ptr<CefBrowserHostImpl::NavigationLock> navigation_lock =
|
||||||
|
browser->CreateNavigationLock();
|
||||||
|
ignore_navigation = handler->OnBeforeBrowse(
|
||||||
|
browser.get(), frame, request.get(), params.has_user_gesture(),
|
||||||
|
params.is_redirect());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ignore_navigation;
|
||||||
|
}
|
||||||
|
|
||||||
// From chrome/browser/plugins/chrome_content_browser_client_plugins_part.cc.
|
// From chrome/browser/plugins/chrome_content_browser_client_plugins_part.cc.
|
||||||
void BindPluginInfoHost(
|
void BindPluginInfoHost(
|
||||||
@@ -631,6 +699,12 @@ void AlloyContentBrowserClient::SiteInstanceGotProcess(
|
|||||||
extensions::ProcessMap::Get(browser_context)
|
extensions::ProcessMap::Get(browser_context)
|
||||||
->Insert(extension->id(), site_instance->GetProcess()->GetID(),
|
->Insert(extension->id(), site_instance->GetProcess()->GetID(),
|
||||||
site_instance->GetId());
|
site_instance->GetId());
|
||||||
|
|
||||||
|
CEF_POST_TASK(
|
||||||
|
CEF_IOT, base::Bind(&extensions::InfoMap::RegisterExtensionProcess,
|
||||||
|
browser_context->extension_system()->info_map(),
|
||||||
|
extension->id(), site_instance->GetProcess()->GetID(),
|
||||||
|
site_instance->GetId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void AlloyContentBrowserClient::SiteInstanceDeleting(
|
void AlloyContentBrowserClient::SiteInstanceDeleting(
|
||||||
@@ -657,6 +731,12 @@ void AlloyContentBrowserClient::SiteInstanceDeleting(
|
|||||||
extensions::ProcessMap::Get(browser_context)
|
extensions::ProcessMap::Get(browser_context)
|
||||||
->Remove(extension->id(), site_instance->GetProcess()->GetID(),
|
->Remove(extension->id(), site_instance->GetProcess()->GetID(),
|
||||||
site_instance->GetId());
|
site_instance->GetId());
|
||||||
|
|
||||||
|
CEF_POST_TASK(
|
||||||
|
CEF_IOT, base::Bind(&extensions::InfoMap::UnregisterExtensionProcess,
|
||||||
|
browser_context->extension_system()->info_map(),
|
||||||
|
extension->id(), site_instance->GetProcess()->GetID(),
|
||||||
|
site_instance->GetId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void AlloyContentBrowserClient::BindHostReceiverForRenderer(
|
void AlloyContentBrowserClient::BindHostReceiverForRenderer(
|
||||||
@@ -678,6 +758,15 @@ void AlloyContentBrowserClient::BindHostReceiverForRenderer(
|
|||||||
#endif // BUILDFLAG(HAS_SPELLCHECK_PANEL)
|
#endif // BUILDFLAG(HAS_SPELLCHECK_PANEL)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
base::Optional<service_manager::Manifest>
|
||||||
|
AlloyContentBrowserClient::GetServiceManifestOverlay(base::StringPiece name) {
|
||||||
|
if (name == content::mojom::kBrowserServiceName) {
|
||||||
|
return GetCefContentBrowserOverlayManifest();
|
||||||
|
}
|
||||||
|
|
||||||
|
return base::nullopt;
|
||||||
|
}
|
||||||
|
|
||||||
void AlloyContentBrowserClient::AppendExtraCommandLineSwitches(
|
void AlloyContentBrowserClient::AppendExtraCommandLineSwitches(
|
||||||
base::CommandLine* command_line,
|
base::CommandLine* command_line,
|
||||||
int child_process_id) {
|
int child_process_id) {
|
||||||
@@ -688,7 +777,7 @@ void AlloyContentBrowserClient::AppendExtraCommandLineSwitches(
|
|||||||
// associated values) if present in the browser command line.
|
// associated values) if present in the browser command line.
|
||||||
static const char* const kSwitchNames[] = {
|
static const char* const kSwitchNames[] = {
|
||||||
switches::kDisablePackLoading,
|
switches::kDisablePackLoading,
|
||||||
#if defined(OS_MAC)
|
#if defined(OS_MACOSX)
|
||||||
switches::kFrameworkDirPath,
|
switches::kFrameworkDirPath,
|
||||||
switches::kMainBundlePath,
|
switches::kMainBundlePath,
|
||||||
#endif
|
#endif
|
||||||
@@ -757,7 +846,7 @@ void AlloyContentBrowserClient::AppendExtraCommandLineSwitches(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(OS_LINUX)
|
#if defined(OS_LINUX)
|
||||||
if (process_type == switches::kZygoteProcess) {
|
if (process_type == service_manager::switches::kZygoteProcess) {
|
||||||
// Propagate the following switches to the zygote command line (along with
|
// Propagate the following switches to the zygote command line (along with
|
||||||
// any associated values) if present in the browser command line.
|
// any associated values) if present in the browser command line.
|
||||||
static const char* const kSwitchNames[] = {
|
static const char* const kSwitchNames[] = {
|
||||||
@@ -768,7 +857,7 @@ void AlloyContentBrowserClient::AppendExtraCommandLineSwitches(
|
|||||||
base::size(kSwitchNames));
|
base::size(kSwitchNames));
|
||||||
|
|
||||||
#if BUILDFLAG(ENABLE_WIDEVINE) && BUILDFLAG(ENABLE_LIBRARY_CDMS)
|
#if BUILDFLAG(ENABLE_WIDEVINE) && BUILDFLAG(ENABLE_LIBRARY_CDMS)
|
||||||
if (!browser_cmd->HasSwitch(sandbox::policy::switches::kNoSandbox)) {
|
if (!browser_cmd->HasSwitch(service_manager::switches::kNoSandbox)) {
|
||||||
// Pass the Widevine CDM path to the Zygote process. See comments in
|
// Pass the Widevine CDM path to the Zygote process. See comments in
|
||||||
// CefWidevineLoader::AddContentDecryptionModules.
|
// CefWidevineLoader::AddContentDecryptionModules.
|
||||||
const base::FilePath& cdm_path = CefWidevineLoader::GetInstance()->path();
|
const base::FilePath& cdm_path = CefWidevineLoader::GetInstance()->path();
|
||||||
@@ -872,8 +961,8 @@ void AlloyContentBrowserClient::AllowCertificateError(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
CefRefPtr<AlloyBrowserHostImpl> browser =
|
CefRefPtr<CefBrowserHostImpl> browser =
|
||||||
AlloyBrowserHostImpl::GetBrowserForContents(web_contents);
|
CefBrowserHostImpl::GetBrowserForContents(web_contents);
|
||||||
if (!browser.get())
|
if (!browser.get())
|
||||||
return;
|
return;
|
||||||
CefRefPtr<CefClient> client = browser->GetClient();
|
CefRefPtr<CefClient> client = browser->GetClient();
|
||||||
@@ -908,8 +997,8 @@ base::OnceClosure AlloyContentBrowserClient::SelectClientCertificate(
|
|||||||
CEF_REQUIRE_UIT();
|
CEF_REQUIRE_UIT();
|
||||||
|
|
||||||
CefRefPtr<CefRequestHandler> handler;
|
CefRefPtr<CefRequestHandler> handler;
|
||||||
CefRefPtr<AlloyBrowserHostImpl> browser =
|
CefRefPtr<CefBrowserHostImpl> browser =
|
||||||
AlloyBrowserHostImpl::GetBrowserForContents(web_contents);
|
CefBrowserHostImpl::GetBrowserForContents(web_contents);
|
||||||
if (browser.get()) {
|
if (browser.get()) {
|
||||||
CefRefPtr<CefClient> client = browser->GetClient();
|
CefRefPtr<CefClient> client = browser->GetClient();
|
||||||
if (client.get())
|
if (client.get())
|
||||||
@@ -965,7 +1054,7 @@ bool AlloyContentBrowserClient::CanCreateWindow(
|
|||||||
|
|
||||||
void AlloyContentBrowserClient::OverrideWebkitPrefs(
|
void AlloyContentBrowserClient::OverrideWebkitPrefs(
|
||||||
content::RenderViewHost* rvh,
|
content::RenderViewHost* rvh,
|
||||||
blink::web_pref::WebPreferences* prefs) {
|
content::WebPreferences* prefs) {
|
||||||
// Using RVH instead of RFH here because rvh->GetMainFrame() may be nullptr
|
// Using RVH instead of RFH here because rvh->GetMainFrame() may be nullptr
|
||||||
// when this method is called.
|
// when this method is called.
|
||||||
renderer_prefs::PopulateWebPreferences(rvh, *prefs);
|
renderer_prefs::PopulateWebPreferences(rvh, *prefs);
|
||||||
@@ -976,13 +1065,6 @@ void AlloyContentBrowserClient::OverrideWebkitPrefs(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AlloyContentBrowserClient::OverrideWebPreferencesAfterNavigation(
|
|
||||||
content::WebContents* web_contents,
|
|
||||||
blink::web_pref::WebPreferences* prefs) {
|
|
||||||
return renderer_prefs::PopulateWebPreferencesAfterNavigation(web_contents,
|
|
||||||
*prefs);
|
|
||||||
}
|
|
||||||
|
|
||||||
void AlloyContentBrowserClient::BrowserURLHandlerCreated(
|
void AlloyContentBrowserClient::BrowserURLHandlerCreated(
|
||||||
content::BrowserURLHandler* handler) {
|
content::BrowserURLHandler* handler) {
|
||||||
scheme::BrowserURLHandlerCreated(handler);
|
scheme::BrowserURLHandlerCreated(handler);
|
||||||
@@ -1007,8 +1089,33 @@ AlloyContentBrowserClient::GetDevToolsManagerDelegate() {
|
|||||||
std::vector<std::unique_ptr<content::NavigationThrottle>>
|
std::vector<std::unique_ptr<content::NavigationThrottle>>
|
||||||
AlloyContentBrowserClient::CreateThrottlesForNavigation(
|
AlloyContentBrowserClient::CreateThrottlesForNavigation(
|
||||||
content::NavigationHandle* navigation_handle) {
|
content::NavigationHandle* navigation_handle) {
|
||||||
throttle::NavigationThrottleList throttles;
|
CEF_REQUIRE_UIT();
|
||||||
throttle::CreateThrottlesForNavigation(navigation_handle, throttles);
|
|
||||||
|
std::vector<std::unique_ptr<content::NavigationThrottle>> throttles;
|
||||||
|
|
||||||
|
const bool is_main_frame = navigation_handle->IsInMainFrame();
|
||||||
|
|
||||||
|
// Identify the RenderFrameHost that originated the navigation.
|
||||||
|
const int64_t parent_frame_id =
|
||||||
|
!is_main_frame
|
||||||
|
? CefFrameHostImpl::MakeFrameId(navigation_handle->GetParentFrame())
|
||||||
|
: CefFrameHostImpl::kInvalidFrameId;
|
||||||
|
|
||||||
|
const int64_t frame_id = !is_main_frame && navigation_handle->HasCommitted()
|
||||||
|
? CefFrameHostImpl::MakeFrameId(
|
||||||
|
navigation_handle->GetRenderFrameHost())
|
||||||
|
: CefFrameHostImpl::kInvalidFrameId;
|
||||||
|
|
||||||
|
// Must use SynchronyMode::kSync to ensure that OnBeforeBrowse is always
|
||||||
|
// called before OnBeforeResourceLoad.
|
||||||
|
std::unique_ptr<content::NavigationThrottle> throttle =
|
||||||
|
std::make_unique<navigation_interception::InterceptNavigationThrottle>(
|
||||||
|
navigation_handle,
|
||||||
|
base::Bind(&NavigationOnUIThread, is_main_frame, frame_id,
|
||||||
|
parent_frame_id, navigation_handle->GetFrameTreeNodeId()),
|
||||||
|
navigation_interception::SynchronyMode::kSync);
|
||||||
|
throttles.push_back(std::move(throttle));
|
||||||
|
|
||||||
return throttles;
|
return throttles;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1044,7 +1151,7 @@ void AlloyContentBrowserClient::GetAdditionalMappedFilesForChildProcess(
|
|||||||
content::PosixFileDescriptorInfo* mappings) {
|
content::PosixFileDescriptorInfo* mappings) {
|
||||||
int crash_signal_fd = GetCrashSignalFD(command_line);
|
int crash_signal_fd = GetCrashSignalFD(command_line);
|
||||||
if (crash_signal_fd >= 0) {
|
if (crash_signal_fd >= 0) {
|
||||||
mappings->Share(kCrashDumpSignal, crash_signal_fd);
|
mappings->Share(service_manager::kCrashDumpSignal, crash_signal_fd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // defined(OS_LINUX)
|
#endif // defined(OS_LINUX)
|
||||||
@@ -1074,7 +1181,7 @@ AlloyContentBrowserClient::CreateClientCertStore(
|
|||||||
net::ClientCertStoreNSS::PasswordDelegateFactory()));
|
net::ClientCertStoreNSS::PasswordDelegateFactory()));
|
||||||
#elif defined(OS_WIN)
|
#elif defined(OS_WIN)
|
||||||
return std::unique_ptr<net::ClientCertStore>(new net::ClientCertStoreWin());
|
return std::unique_ptr<net::ClientCertStore>(new net::ClientCertStoreWin());
|
||||||
#elif defined(OS_MAC)
|
#elif defined(OS_MACOSX)
|
||||||
return std::unique_ptr<net::ClientCertStore>(new net::ClientCertStoreMac());
|
return std::unique_ptr<net::ClientCertStore>(new net::ClientCertStoreMac());
|
||||||
#else
|
#else
|
||||||
#error Unknown platform.
|
#error Unknown platform.
|
||||||
@@ -1098,8 +1205,6 @@ AlloyContentBrowserClient::CreateLoginDelegate(
|
|||||||
|
|
||||||
void AlloyContentBrowserClient::RegisterNonNetworkNavigationURLLoaderFactories(
|
void AlloyContentBrowserClient::RegisterNonNetworkNavigationURLLoaderFactories(
|
||||||
int frame_tree_node_id,
|
int frame_tree_node_id,
|
||||||
base::UkmSourceId ukm_source_id,
|
|
||||||
NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
|
|
||||||
NonNetworkURLLoaderFactoryMap* factories) {
|
NonNetworkURLLoaderFactoryMap* factories) {
|
||||||
if (!extensions::ExtensionsEnabled())
|
if (!extensions::ExtensionsEnabled())
|
||||||
return;
|
return;
|
||||||
@@ -1109,14 +1214,13 @@ void AlloyContentBrowserClient::RegisterNonNetworkNavigationURLLoaderFactories(
|
|||||||
factories->emplace(
|
factories->emplace(
|
||||||
extensions::kExtensionScheme,
|
extensions::kExtensionScheme,
|
||||||
extensions::CreateExtensionNavigationURLLoaderFactory(
|
extensions::CreateExtensionNavigationURLLoaderFactory(
|
||||||
web_contents->GetBrowserContext(), ukm_source_id,
|
web_contents->GetBrowserContext(),
|
||||||
!!extensions::WebViewGuest::FromWebContents(web_contents)));
|
!!extensions::WebViewGuest::FromWebContents(web_contents)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void AlloyContentBrowserClient::RegisterNonNetworkSubresourceURLLoaderFactories(
|
void AlloyContentBrowserClient::RegisterNonNetworkSubresourceURLLoaderFactories(
|
||||||
int render_process_id,
|
int render_process_id,
|
||||||
int render_frame_id,
|
int render_frame_id,
|
||||||
NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
|
|
||||||
NonNetworkURLLoaderFactoryMap* factories) {
|
NonNetworkURLLoaderFactoryMap* factories) {
|
||||||
if (!extensions::ExtensionsEnabled())
|
if (!extensions::ExtensionsEnabled())
|
||||||
return;
|
return;
|
||||||
@@ -1158,10 +1262,10 @@ void AlloyContentBrowserClient::RegisterNonNetworkSubresourceURLLoaderFactories(
|
|||||||
allowed_webui_hosts.emplace_back(chrome::kChromeUIThemeHost);
|
allowed_webui_hosts.emplace_back(chrome::kChromeUIThemeHost);
|
||||||
}
|
}
|
||||||
if (!allowed_webui_hosts.empty()) {
|
if (!allowed_webui_hosts.empty()) {
|
||||||
factories->emplace(content::kChromeUIScheme,
|
factories->emplace(
|
||||||
content::CreateWebUIURLLoaderFactory(
|
content::kChromeUIScheme,
|
||||||
frame_host, content::kChromeUIScheme,
|
content::CreateWebUIURLLoader(frame_host, content::kChromeUIScheme,
|
||||||
std::move(allowed_webui_hosts)));
|
std::move(allowed_webui_hosts)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1172,7 +1276,6 @@ bool AlloyContentBrowserClient::WillCreateURLLoaderFactory(
|
|||||||
URLLoaderFactoryType type,
|
URLLoaderFactoryType type,
|
||||||
const url::Origin& request_initiator,
|
const url::Origin& request_initiator,
|
||||||
base::Optional<int64_t> navigation_id,
|
base::Optional<int64_t> navigation_id,
|
||||||
base::UkmSourceId ukm_source_id,
|
|
||||||
mojo::PendingReceiver<network::mojom::URLLoaderFactory>* factory_receiver,
|
mojo::PendingReceiver<network::mojom::URLLoaderFactory>* factory_receiver,
|
||||||
mojo::PendingRemote<network::mojom::TrustedURLLoaderHeaderClient>*
|
mojo::PendingRemote<network::mojom::TrustedURLLoaderHeaderClient>*
|
||||||
header_client,
|
header_client,
|
||||||
@@ -1217,16 +1320,10 @@ void AlloyContentBrowserClient::ConfigureNetworkContextParams(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto cef_context = CefBrowserContext::FromBrowserContext(context);
|
Profile* profile = Profile::FromBrowserContext(context);
|
||||||
|
|
||||||
Profile* profile = cef_context->AsProfile();
|
|
||||||
profile->ConfigureNetworkContextParams(in_memory, relative_partition_path,
|
profile->ConfigureNetworkContextParams(in_memory, relative_partition_path,
|
||||||
network_context_params,
|
network_context_params,
|
||||||
cert_verifier_creation_params);
|
cert_verifier_creation_params);
|
||||||
|
|
||||||
network_context_params->cookieable_schemes =
|
|
||||||
cef_context->GetCookieableSchemes();
|
|
||||||
|
|
||||||
// TODO(cef): Remove this and add required NetworkIsolationKeys,
|
// TODO(cef): Remove this and add required NetworkIsolationKeys,
|
||||||
// this is currently not the case and this was not required pre M84.
|
// this is currently not the case and this was not required pre M84.
|
||||||
network_context_params->require_network_isolation_key = false;
|
network_context_params->require_network_isolation_key = false;
|
||||||
@@ -1253,7 +1350,7 @@ AlloyContentBrowserClient::GetNetworkContextsParentDirectory() {
|
|||||||
|
|
||||||
bool AlloyContentBrowserClient::HandleExternalProtocol(
|
bool AlloyContentBrowserClient::HandleExternalProtocol(
|
||||||
const GURL& url,
|
const GURL& url,
|
||||||
content::WebContents::OnceGetter web_contents_getter,
|
base::OnceCallback<content::WebContents*()> web_contents_getter,
|
||||||
int child_id,
|
int child_id,
|
||||||
content::NavigationUIData* navigation_data,
|
content::NavigationUIData* navigation_data,
|
||||||
bool is_main_frame,
|
bool is_main_frame,
|
||||||
@@ -1273,16 +1370,32 @@ bool AlloyContentBrowserClient::HandleExternalProtocol(
|
|||||||
mojo::PendingRemote<network::mojom::URLLoaderFactory>* out_factory) {
|
mojo::PendingRemote<network::mojom::URLLoaderFactory>* out_factory) {
|
||||||
mojo::PendingReceiver<network::mojom::URLLoaderFactory> receiver =
|
mojo::PendingReceiver<network::mojom::URLLoaderFactory> receiver =
|
||||||
out_factory->InitWithNewPipeAndPassReceiver();
|
out_factory->InitWithNewPipeAndPassReceiver();
|
||||||
|
|
||||||
// CefBrowserPlatformDelegate::HandleExternalProtocol may be called if
|
// CefBrowserPlatformDelegate::HandleExternalProtocol may be called if
|
||||||
// nothing handles the request.
|
// nothing handles the request.
|
||||||
auto request_handler = net_service::CreateInterceptedRequestHandler(
|
if (CEF_CURRENTLY_ON_IOT()) {
|
||||||
web_contents_getter, frame_tree_node_id, resource_request,
|
auto request_handler = net_service::CreateInterceptedRequestHandler(
|
||||||
base::Bind(CefBrowserPlatformDelegate::HandleExternalProtocol,
|
web_contents_getter, frame_tree_node_id, resource_request);
|
||||||
resource_request.url));
|
net_service::ProxyURLLoaderFactory::CreateProxy(
|
||||||
|
web_contents_getter, std::move(receiver), 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.
|
||||||
|
|
||||||
net_service::ProxyURLLoaderFactory::CreateProxy(
|
net_service::ProxyURLLoaderFactory::CreateProxy(
|
||||||
web_contents_getter, std::move(receiver), std::move(request_handler));
|
web_contents_getter, std::move(receiver),
|
||||||
|
std::move(request_handler));
|
||||||
|
},
|
||||||
|
std::move(receiver), std::move(request_handler),
|
||||||
|
std::move(web_contents_getter)));
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -61,6 +61,8 @@ class AlloyContentBrowserClient : public content::ContentBrowserClient {
|
|||||||
void BindHostReceiverForRenderer(
|
void BindHostReceiverForRenderer(
|
||||||
content::RenderProcessHost* render_process_host,
|
content::RenderProcessHost* render_process_host,
|
||||||
mojo::GenericPendingReceiver receiver) override;
|
mojo::GenericPendingReceiver receiver) override;
|
||||||
|
base::Optional<service_manager::Manifest> GetServiceManifestOverlay(
|
||||||
|
base::StringPiece name) override;
|
||||||
void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
|
void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
|
||||||
int child_process_id) override;
|
int child_process_id) override;
|
||||||
std::string GetApplicationLocale() override;
|
std::string GetApplicationLocale() override;
|
||||||
@@ -102,10 +104,7 @@ class AlloyContentBrowserClient : public content::ContentBrowserClient {
|
|||||||
bool opener_suppressed,
|
bool opener_suppressed,
|
||||||
bool* no_javascript_access) override;
|
bool* no_javascript_access) override;
|
||||||
void OverrideWebkitPrefs(content::RenderViewHost* rvh,
|
void OverrideWebkitPrefs(content::RenderViewHost* rvh,
|
||||||
blink::web_pref::WebPreferences* prefs) override;
|
content::WebPreferences* prefs) override;
|
||||||
bool OverrideWebPreferencesAfterNavigation(
|
|
||||||
content::WebContents* web_contents,
|
|
||||||
blink::web_pref::WebPreferences* prefs) override;
|
|
||||||
void BrowserURLHandlerCreated(content::BrowserURLHandler* handler) override;
|
void BrowserURLHandlerCreated(content::BrowserURLHandler* handler) override;
|
||||||
std::string GetDefaultDownloadName() override;
|
std::string GetDefaultDownloadName() override;
|
||||||
void DidCreatePpapiPlugin(content::BrowserPpapiHost* browser_host) override;
|
void DidCreatePpapiPlugin(content::BrowserPpapiHost* browser_host) override;
|
||||||
@@ -150,13 +149,10 @@ class AlloyContentBrowserClient : public content::ContentBrowserClient {
|
|||||||
LoginAuthRequiredCallback auth_required_callback) override;
|
LoginAuthRequiredCallback auth_required_callback) override;
|
||||||
void RegisterNonNetworkNavigationURLLoaderFactories(
|
void RegisterNonNetworkNavigationURLLoaderFactories(
|
||||||
int frame_tree_node_id,
|
int frame_tree_node_id,
|
||||||
base::UkmSourceId ukm_source_id,
|
|
||||||
NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
|
|
||||||
NonNetworkURLLoaderFactoryMap* factories) override;
|
NonNetworkURLLoaderFactoryMap* factories) override;
|
||||||
void RegisterNonNetworkSubresourceURLLoaderFactories(
|
void RegisterNonNetworkSubresourceURLLoaderFactories(
|
||||||
int render_process_id,
|
int render_process_id,
|
||||||
int render_frame_id,
|
int render_frame_id,
|
||||||
NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
|
|
||||||
NonNetworkURLLoaderFactoryMap* factories) override;
|
NonNetworkURLLoaderFactoryMap* factories) override;
|
||||||
bool WillCreateURLLoaderFactory(
|
bool WillCreateURLLoaderFactory(
|
||||||
content::BrowserContext* browser_context,
|
content::BrowserContext* browser_context,
|
||||||
@@ -165,7 +161,6 @@ class AlloyContentBrowserClient : public content::ContentBrowserClient {
|
|||||||
URLLoaderFactoryType type,
|
URLLoaderFactoryType type,
|
||||||
const url::Origin& request_initiator,
|
const url::Origin& request_initiator,
|
||||||
base::Optional<int64_t> navigation_id,
|
base::Optional<int64_t> navigation_id,
|
||||||
base::UkmSourceId ukm_source_id,
|
|
||||||
mojo::PendingReceiver<network::mojom::URLLoaderFactory>* factory_receiver,
|
mojo::PendingReceiver<network::mojom::URLLoaderFactory>* factory_receiver,
|
||||||
mojo::PendingRemote<network::mojom::TrustedURLLoaderHeaderClient>*
|
mojo::PendingRemote<network::mojom::TrustedURLLoaderHeaderClient>*
|
||||||
header_client,
|
header_client,
|
||||||
@@ -184,7 +179,7 @@ class AlloyContentBrowserClient : public content::ContentBrowserClient {
|
|||||||
std::vector<base::FilePath> GetNetworkContextsParentDirectory() override;
|
std::vector<base::FilePath> GetNetworkContextsParentDirectory() override;
|
||||||
bool HandleExternalProtocol(
|
bool HandleExternalProtocol(
|
||||||
const GURL& url,
|
const GURL& url,
|
||||||
content::WebContents::OnceGetter web_contents_getter,
|
base::OnceCallback<content::WebContents*()> web_contents_getter,
|
||||||
int child_id,
|
int child_id,
|
||||||
content::NavigationUIData* navigation_data,
|
content::NavigationUIData* navigation_data,
|
||||||
bool is_main_frame,
|
bool is_main_frame,
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#include "libcef/browser/alloy/browser_platform_delegate_alloy.h"
|
#include "libcef/browser/alloy/browser_platform_delegate_alloy.h"
|
||||||
|
|
||||||
#include "libcef/browser/alloy/alloy_browser_host_impl.h"
|
#include "libcef/browser/browser_host_impl.h"
|
||||||
#include "libcef/browser/extensions/browser_extensions_util.h"
|
#include "libcef/browser/extensions/browser_extensions_util.h"
|
||||||
#include "libcef/browser/extensions/extension_background_host.h"
|
#include "libcef/browser/extensions/extension_background_host.h"
|
||||||
#include "libcef/browser/extensions/extension_system.h"
|
#include "libcef/browser/extensions/extension_system.h"
|
||||||
@@ -12,7 +12,6 @@
|
|||||||
#include "libcef/browser/extensions/extension_web_contents_observer.h"
|
#include "libcef/browser/extensions/extension_web_contents_observer.h"
|
||||||
#include "libcef/browser/printing/print_view_manager.h"
|
#include "libcef/browser/printing/print_view_manager.h"
|
||||||
#include "libcef/common/extensions/extensions_util.h"
|
#include "libcef/common/extensions/extensions_util.h"
|
||||||
#include "libcef/features/runtime_checks.h"
|
|
||||||
|
|
||||||
#include "base/logging.h"
|
#include "base/logging.h"
|
||||||
#include "chrome/browser/printing/print_view_manager.h"
|
#include "chrome/browser/printing/print_view_manager.h"
|
||||||
@@ -25,24 +24,12 @@
|
|||||||
#include "extensions/browser/process_manager.h"
|
#include "extensions/browser/process_manager.h"
|
||||||
#include "third_party/blink/public/mojom/frame/find_in_page.mojom.h"
|
#include "third_party/blink/public/mojom/frame/find_in_page.mojom.h"
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
printing::CefPrintViewManager* GetPrintViewManager(
|
|
||||||
content::WebContents* web_contents) {
|
|
||||||
return printing::CefPrintViewManager::FromWebContents(web_contents);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
CefBrowserPlatformDelegateAlloy::CefBrowserPlatformDelegateAlloy()
|
CefBrowserPlatformDelegateAlloy::CefBrowserPlatformDelegateAlloy()
|
||||||
: weak_ptr_factory_(this) {}
|
: weak_ptr_factory_(this) {}
|
||||||
|
|
||||||
content::WebContents* CefBrowserPlatformDelegateAlloy::CreateWebContents(
|
content::WebContents* CefBrowserPlatformDelegateAlloy::CreateWebContents(
|
||||||
CefBrowserCreateParams& create_params,
|
CefBrowserHostImpl::CreateParams& create_params,
|
||||||
bool& own_web_contents) {
|
bool& own_web_contents) {
|
||||||
REQUIRE_ALLOY_RUNTIME();
|
|
||||||
DCHECK(primary_);
|
|
||||||
|
|
||||||
// Get or create the request context and browser context.
|
// Get or create the request context and browser context.
|
||||||
CefRefPtr<CefRequestContextImpl> request_context_impl =
|
CefRefPtr<CefRequestContextImpl> request_context_impl =
|
||||||
CefRequestContextImpl::GetOrCreateForRequestContext(
|
CefRequestContextImpl::GetOrCreateForRequestContext(
|
||||||
@@ -118,11 +105,8 @@ void CefBrowserPlatformDelegateAlloy::AddNewContents(
|
|||||||
const gfx::Rect& initial_rect,
|
const gfx::Rect& initial_rect,
|
||||||
bool user_gesture,
|
bool user_gesture,
|
||||||
bool* was_blocked) {
|
bool* was_blocked) {
|
||||||
REQUIRE_ALLOY_RUNTIME();
|
CefRefPtr<CefBrowserHostImpl> owner =
|
||||||
DCHECK(primary_);
|
CefBrowserHostImpl::GetBrowserForContents(new_contents.get());
|
||||||
|
|
||||||
CefRefPtr<AlloyBrowserHostImpl> owner =
|
|
||||||
AlloyBrowserHostImpl::GetBrowserForContents(new_contents.get());
|
|
||||||
if (owner) {
|
if (owner) {
|
||||||
// Taking ownership of |new_contents|.
|
// Taking ownership of |new_contents|.
|
||||||
static_cast<CefBrowserPlatformDelegateAlloy*>(
|
static_cast<CefBrowserPlatformDelegateAlloy*>(
|
||||||
@@ -159,15 +143,10 @@ void CefBrowserPlatformDelegateAlloy::RenderViewReady() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CefBrowserPlatformDelegateAlloy::BrowserCreated(
|
void CefBrowserPlatformDelegateAlloy::BrowserCreated(
|
||||||
CefBrowserHostBase* browser) {
|
CefBrowserHostImpl* browser) {
|
||||||
CefBrowserPlatformDelegate::BrowserCreated(browser);
|
CefBrowserPlatformDelegate::BrowserCreated(browser);
|
||||||
|
|
||||||
// Only register WebContents delegate/observers if we're the primary delegate.
|
web_contents_->SetDelegate(browser);
|
||||||
if (!primary_)
|
|
||||||
return;
|
|
||||||
|
|
||||||
DCHECK(!web_contents_->GetDelegate());
|
|
||||||
web_contents_->SetDelegate(static_cast<AlloyBrowserHostImpl*>(browser));
|
|
||||||
|
|
||||||
PrefsTabHelper::CreateForWebContents(web_contents_);
|
PrefsTabHelper::CreateForWebContents(web_contents_);
|
||||||
printing::CefPrintViewManager::CreateForWebContents(web_contents_);
|
printing::CefPrintViewManager::CreateForWebContents(web_contents_);
|
||||||
@@ -190,29 +169,24 @@ void CefBrowserPlatformDelegateAlloy::CreateExtensionHost(
|
|||||||
const extensions::Extension* extension,
|
const extensions::Extension* extension,
|
||||||
const GURL& url,
|
const GURL& url,
|
||||||
extensions::ViewType host_type) {
|
extensions::ViewType host_type) {
|
||||||
REQUIRE_ALLOY_RUNTIME();
|
|
||||||
DCHECK(primary_);
|
|
||||||
|
|
||||||
// Should get WebContentsCreated and BrowserCreated calls first.
|
// Should get WebContentsCreated and BrowserCreated calls first.
|
||||||
DCHECK(web_contents_);
|
DCHECK(web_contents_);
|
||||||
DCHECK(browser_);
|
DCHECK(browser_);
|
||||||
DCHECK(!extension_host_);
|
DCHECK(!extension_host_);
|
||||||
|
|
||||||
auto alloy_browser = static_cast<AlloyBrowserHostImpl*>(browser_);
|
|
||||||
|
|
||||||
if (host_type == extensions::VIEW_TYPE_EXTENSION_DIALOG ||
|
if (host_type == extensions::VIEW_TYPE_EXTENSION_DIALOG ||
|
||||||
host_type == extensions::VIEW_TYPE_EXTENSION_POPUP) {
|
host_type == extensions::VIEW_TYPE_EXTENSION_POPUP) {
|
||||||
// Create an extension host that we own.
|
// Create an extension host that we own.
|
||||||
extension_host_ = new extensions::CefExtensionViewHost(
|
extension_host_ = new extensions::CefExtensionViewHost(
|
||||||
alloy_browser, extension, web_contents_, url, host_type);
|
browser_, extension, web_contents_, url, host_type);
|
||||||
// Trigger load of the extension URL.
|
// Trigger load of the extension URL.
|
||||||
extension_host_->CreateRenderViewSoon();
|
extension_host_->CreateRenderViewSoon();
|
||||||
} else if (host_type == extensions::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE) {
|
} else if (host_type == extensions::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE) {
|
||||||
is_background_host_ = true;
|
is_background_host_ = true;
|
||||||
alloy_browser->is_background_host_ = true;
|
browser_->is_background_host_ = true;
|
||||||
// Create an extension host that will be owned by ProcessManager.
|
// Create an extension host that will be owned by ProcessManager.
|
||||||
extension_host_ = new extensions::CefExtensionBackgroundHost(
|
extension_host_ = new extensions::CefExtensionBackgroundHost(
|
||||||
alloy_browser,
|
browser_,
|
||||||
base::BindOnce(&CefBrowserPlatformDelegateAlloy::OnExtensionHostDeleted,
|
base::BindOnce(&CefBrowserPlatformDelegateAlloy::OnExtensionHostDeleted,
|
||||||
weak_ptr_factory_.GetWeakPtr()),
|
weak_ptr_factory_.GetWeakPtr()),
|
||||||
extension, web_contents_, url, host_type);
|
extension, web_contents_, url, host_type);
|
||||||
@@ -228,11 +202,9 @@ extensions::ExtensionHost* CefBrowserPlatformDelegateAlloy::GetExtensionHost()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CefBrowserPlatformDelegateAlloy::BrowserDestroyed(
|
void CefBrowserPlatformDelegateAlloy::BrowserDestroyed(
|
||||||
CefBrowserHostBase* browser) {
|
CefBrowserHostImpl* browser) {
|
||||||
if (primary_) {
|
DestroyExtensionHost();
|
||||||
DestroyExtensionHost();
|
owned_web_contents_.reset();
|
||||||
owned_web_contents_.reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
CefBrowserPlatformDelegate::BrowserDestroyed(browser);
|
CefBrowserPlatformDelegate::BrowserDestroyed(browser);
|
||||||
}
|
}
|
||||||
@@ -250,7 +222,7 @@ void CefBrowserPlatformDelegateAlloy::SendCaptureLostEvent() {
|
|||||||
widget->LostCapture();
|
widget->LostCapture();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(OS_WIN) || (defined(OS_POSIX) && !defined(OS_MAC))
|
#if defined(OS_WIN) || (defined(OS_POSIX) && !defined(OS_MACOSX))
|
||||||
void CefBrowserPlatformDelegateAlloy::NotifyMoveOrResizeStarted() {
|
void CefBrowserPlatformDelegateAlloy::NotifyMoveOrResizeStarted() {
|
||||||
if (!web_contents_)
|
if (!web_contents_)
|
||||||
return;
|
return;
|
||||||
@@ -331,8 +303,6 @@ void CefBrowserPlatformDelegateAlloy::SetAccessibilityState(
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool CefBrowserPlatformDelegateAlloy::IsPrintPreviewSupported() const {
|
bool CefBrowserPlatformDelegateAlloy::IsPrintPreviewSupported() const {
|
||||||
REQUIRE_ALLOY_RUNTIME();
|
|
||||||
|
|
||||||
auto actionable_contents = GetActionableWebContents();
|
auto actionable_contents = GetActionableWebContents();
|
||||||
if (!actionable_contents)
|
if (!actionable_contents)
|
||||||
return false;
|
return false;
|
||||||
@@ -348,8 +318,6 @@ bool CefBrowserPlatformDelegateAlloy::IsPrintPreviewSupported() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CefBrowserPlatformDelegateAlloy::Print() {
|
void CefBrowserPlatformDelegateAlloy::Print() {
|
||||||
REQUIRE_ALLOY_RUNTIME();
|
|
||||||
|
|
||||||
auto actionable_contents = GetActionableWebContents();
|
auto actionable_contents = GetActionableWebContents();
|
||||||
if (!actionable_contents)
|
if (!actionable_contents)
|
||||||
return;
|
return;
|
||||||
@@ -357,9 +325,11 @@ void CefBrowserPlatformDelegateAlloy::Print() {
|
|||||||
auto rfh = actionable_contents->GetMainFrame();
|
auto rfh = actionable_contents->GetMainFrame();
|
||||||
|
|
||||||
if (IsPrintPreviewSupported()) {
|
if (IsPrintPreviewSupported()) {
|
||||||
GetPrintViewManager(actionable_contents)->PrintPreviewNow(rfh, false);
|
printing::CefPrintViewManager::FromWebContents(actionable_contents)
|
||||||
|
->PrintPreviewNow(rfh, false);
|
||||||
} else {
|
} else {
|
||||||
GetPrintViewManager(actionable_contents)->PrintNow(rfh);
|
printing::PrintViewManager::FromWebContents(actionable_contents)
|
||||||
|
->PrintNow(rfh);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -367,8 +337,6 @@ void CefBrowserPlatformDelegateAlloy::PrintToPDF(
|
|||||||
const CefString& path,
|
const CefString& path,
|
||||||
const CefPdfPrintSettings& settings,
|
const CefPdfPrintSettings& settings,
|
||||||
CefRefPtr<CefPdfPrintCallback> callback) {
|
CefRefPtr<CefPdfPrintCallback> callback) {
|
||||||
REQUIRE_ALLOY_RUNTIME();
|
|
||||||
|
|
||||||
content::WebContents* actionable_contents = GetActionableWebContents();
|
content::WebContents* actionable_contents = GetActionableWebContents();
|
||||||
if (!actionable_contents)
|
if (!actionable_contents)
|
||||||
return;
|
return;
|
||||||
@@ -377,7 +345,7 @@ void CefBrowserPlatformDelegateAlloy::PrintToPDF(
|
|||||||
pdf_callback = base::Bind(&CefPdfPrintCallback::OnPdfPrintFinished,
|
pdf_callback = base::Bind(&CefPdfPrintCallback::OnPdfPrintFinished,
|
||||||
callback.get(), path);
|
callback.get(), path);
|
||||||
}
|
}
|
||||||
GetPrintViewManager(actionable_contents)
|
printing::CefPrintViewManager::FromWebContents(actionable_contents)
|
||||||
->PrintToPDF(actionable_contents->GetMainFrame(), base::FilePath(path),
|
->PrintToPDF(actionable_contents->GetMainFrame(), base::FilePath(path),
|
||||||
settings, pdf_callback);
|
settings, pdf_callback);
|
||||||
}
|
}
|
||||||
@@ -401,7 +369,7 @@ void CefBrowserPlatformDelegateAlloy::Find(int identifier,
|
|||||||
auto options = blink::mojom::FindOptions::New();
|
auto options = blink::mojom::FindOptions::New();
|
||||||
options->forward = forward;
|
options->forward = forward;
|
||||||
options->match_case = matchCase;
|
options->match_case = matchCase;
|
||||||
options->find_match = findNext;
|
options->find_next_if_selection_matches = findNext;
|
||||||
web_contents_->Find(identifier, searchText, std::move(options));
|
web_contents_->Find(identifier, searchText, std::move(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -437,8 +405,6 @@ CefBrowserPlatformDelegateAlloy::GetActionableWebContents() const {
|
|||||||
|
|
||||||
void CefBrowserPlatformDelegateAlloy::SetOwnedWebContents(
|
void CefBrowserPlatformDelegateAlloy::SetOwnedWebContents(
|
||||||
content::WebContents* owned_contents) {
|
content::WebContents* owned_contents) {
|
||||||
DCHECK(primary_);
|
|
||||||
|
|
||||||
// Should not currently own a WebContents.
|
// Should not currently own a WebContents.
|
||||||
CHECK(!owned_web_contents_);
|
CHECK(!owned_web_contents_);
|
||||||
owned_web_contents_.reset(owned_contents);
|
owned_web_contents_.reset(owned_contents);
|
||||||
|
@@ -10,14 +10,13 @@
|
|||||||
#include "libcef/browser/web_contents_dialog_helper.h"
|
#include "libcef/browser/web_contents_dialog_helper.h"
|
||||||
|
|
||||||
#include "base/memory/weak_ptr.h"
|
#include "base/memory/weak_ptr.h"
|
||||||
#include "content/public/browser/web_contents.h"
|
|
||||||
#include "ui/gfx/geometry/size.h"
|
|
||||||
|
|
||||||
// Implementation of Alloy-based browser functionality.
|
// Implementation of Alloy-based browser functionality.
|
||||||
class CefBrowserPlatformDelegateAlloy : public CefBrowserPlatformDelegate {
|
class CefBrowserPlatformDelegateAlloy : public CefBrowserPlatformDelegate {
|
||||||
public:
|
public:
|
||||||
content::WebContents* CreateWebContents(CefBrowserCreateParams& create_params,
|
content::WebContents* CreateWebContents(
|
||||||
bool& own_web_contents) override;
|
CefBrowserHostImpl::CreateParams& create_params,
|
||||||
|
bool& own_web_contents) override;
|
||||||
void WebContentsCreated(content::WebContents* web_contents,
|
void WebContentsCreated(content::WebContents* web_contents,
|
||||||
bool owned) override;
|
bool owned) override;
|
||||||
void AddNewContents(content::WebContents* source,
|
void AddNewContents(content::WebContents* source,
|
||||||
@@ -30,14 +29,14 @@ class CefBrowserPlatformDelegateAlloy : public CefBrowserPlatformDelegate {
|
|||||||
bool ShouldTransferNavigation(bool is_main_frame_navigation) override;
|
bool ShouldTransferNavigation(bool is_main_frame_navigation) override;
|
||||||
void RenderViewCreated(content::RenderViewHost* render_view_host) override;
|
void RenderViewCreated(content::RenderViewHost* render_view_host) override;
|
||||||
void RenderViewReady() override;
|
void RenderViewReady() override;
|
||||||
void BrowserCreated(CefBrowserHostBase* browser) override;
|
void BrowserCreated(CefBrowserHostImpl* browser) override;
|
||||||
void CreateExtensionHost(const extensions::Extension* extension,
|
void CreateExtensionHost(const extensions::Extension* extension,
|
||||||
const GURL& url,
|
const GURL& url,
|
||||||
extensions::ViewType host_type) override;
|
extensions::ViewType host_type) override;
|
||||||
extensions::ExtensionHost* GetExtensionHost() const override;
|
extensions::ExtensionHost* GetExtensionHost() const override;
|
||||||
void BrowserDestroyed(CefBrowserHostBase* browser) override;
|
void BrowserDestroyed(CefBrowserHostImpl* browser) override;
|
||||||
void SendCaptureLostEvent() override;
|
void SendCaptureLostEvent() override;
|
||||||
#if defined(OS_WIN) || (defined(OS_POSIX) && !defined(OS_MAC))
|
#if defined(OS_WIN) || (defined(OS_POSIX) && !defined(OS_MACOSX))
|
||||||
void NotifyMoveOrResizeStarted() override;
|
void NotifyMoveOrResizeStarted() override;
|
||||||
#endif
|
#endif
|
||||||
bool PreHandleGestureEvent(content::WebContents* source,
|
bool PreHandleGestureEvent(content::WebContents* source,
|
||||||
@@ -70,9 +69,6 @@ class CefBrowserPlatformDelegateAlloy : public CefBrowserPlatformDelegate {
|
|||||||
// Otherwise, the browser's WebContents will be returned.
|
// Otherwise, the browser's WebContents will be returned.
|
||||||
content::WebContents* GetActionableWebContents() const;
|
content::WebContents* GetActionableWebContents() const;
|
||||||
|
|
||||||
// Called from BrowserPlatformDelegateNative::set_windowless_handler().
|
|
||||||
void set_as_secondary() { primary_ = false; }
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void SetOwnedWebContents(content::WebContents* owned_contents);
|
void SetOwnedWebContents(content::WebContents* owned_contents);
|
||||||
|
|
||||||
@@ -102,10 +98,6 @@ class CefBrowserPlatformDelegateAlloy : public CefBrowserPlatformDelegate {
|
|||||||
gfx::Size auto_resize_min_;
|
gfx::Size auto_resize_min_;
|
||||||
gfx::Size auto_resize_max_;
|
gfx::Size auto_resize_max_;
|
||||||
|
|
||||||
// True if this is the primary platform delegate, in which case it will
|
|
||||||
// register WebContents delegate/observers.
|
|
||||||
bool primary_ = true;
|
|
||||||
|
|
||||||
base::WeakPtrFactory<CefBrowserPlatformDelegateAlloy> weak_ptr_factory_;
|
base::WeakPtrFactory<CefBrowserPlatformDelegateAlloy> weak_ptr_factory_;
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(CefBrowserPlatformDelegateAlloy);
|
DISALLOW_COPY_AND_ASSIGN(CefBrowserPlatformDelegateAlloy);
|
||||||
|
@@ -325,12 +325,6 @@ ChromeBrowserProcessAlloy::floc_blocklist_service() {
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
federated_learning::FlocSortingLshClustersService*
|
|
||||||
ChromeBrowserProcessAlloy::floc_sorting_lsh_clusters_service() {
|
|
||||||
NOTREACHED();
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
optimization_guide::OptimizationGuideService*
|
optimization_guide::OptimizationGuideService*
|
||||||
ChromeBrowserProcessAlloy::optimization_guide_service() {
|
ChromeBrowserProcessAlloy::optimization_guide_service() {
|
||||||
NOTREACHED();
|
NOTREACHED();
|
||||||
|
@@ -83,8 +83,6 @@ class ChromeBrowserProcessAlloy : public BrowserProcess {
|
|||||||
subresource_filter::RulesetService* subresource_filter_ruleset_service()
|
subresource_filter::RulesetService* subresource_filter_ruleset_service()
|
||||||
override;
|
override;
|
||||||
federated_learning::FlocBlocklistService* floc_blocklist_service() override;
|
federated_learning::FlocBlocklistService* floc_blocklist_service() override;
|
||||||
federated_learning::FlocSortingLshClustersService*
|
|
||||||
floc_sorting_lsh_clusters_service() override;
|
|
||||||
optimization_guide::OptimizationGuideService* optimization_guide_service()
|
optimization_guide::OptimizationGuideService* optimization_guide_service()
|
||||||
override;
|
override;
|
||||||
StartupData* startup_data() override;
|
StartupData* startup_data() override;
|
||||||
|
@@ -5,9 +5,8 @@
|
|||||||
|
|
||||||
#include "libcef/browser/alloy/chrome_profile_alloy.h"
|
#include "libcef/browser/alloy/chrome_profile_alloy.h"
|
||||||
|
|
||||||
#include "base/no_destructor.h"
|
|
||||||
#include "components/variations/variations_client.h"
|
#include "components/variations/variations_client.h"
|
||||||
#include "components/variations/variations_ids_provider.h"
|
#include "components/variations/variations_http_header_provider.h"
|
||||||
#include "net/url_request/url_request_context.h"
|
#include "net/url_request/url_request_context.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
@@ -23,10 +22,9 @@ class CefVariationsClient : public variations::VariationsClient {
|
|||||||
return browser_context_->IsOffTheRecord();
|
return browser_context_->IsOffTheRecord();
|
||||||
}
|
}
|
||||||
|
|
||||||
variations::mojom::VariationsHeadersPtr GetVariationsHeaders()
|
std::string GetVariationsHeader() const override {
|
||||||
const override {
|
return variations::VariationsHttpHeaderProvider::GetInstance()
|
||||||
return variations::VariationsIdsProvider::GetInstance()
|
->GetClientDataHeader(false /* is_signed_in */);
|
||||||
->GetClientDataHeaders(false /* is_signed_in */);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -159,7 +157,7 @@ void ChromeProfileAlloy::SetExitType(ExitType exit_type) {
|
|||||||
NOTREACHED();
|
NOTREACHED();
|
||||||
}
|
}
|
||||||
|
|
||||||
Profile::ExitType ChromeProfileAlloy::GetLastSessionExitType() const {
|
Profile::ExitType ChromeProfileAlloy::GetLastSessionExitType() {
|
||||||
NOTREACHED();
|
NOTREACHED();
|
||||||
return EXIT_NORMAL;
|
return EXIT_NORMAL;
|
||||||
}
|
}
|
||||||
@@ -172,7 +170,3 @@ base::Time ChromeProfileAlloy::GetCreationTime() const {
|
|||||||
void ChromeProfileAlloy::SetCreationTimeForTesting(base::Time creation_time) {
|
void ChromeProfileAlloy::SetCreationTimeForTesting(base::Time creation_time) {
|
||||||
NOTREACHED();
|
NOTREACHED();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChromeProfileAlloy::RecordMainFrameNavigation() {
|
|
||||||
NOTREACHED();
|
|
||||||
}
|
|
||||||
|
@@ -47,10 +47,9 @@ class ChromeProfileAlloy : public Profile {
|
|||||||
GURL GetHomePage() override;
|
GURL GetHomePage() override;
|
||||||
bool WasCreatedByVersionOrLater(const std::string& version) override;
|
bool WasCreatedByVersionOrLater(const std::string& version) override;
|
||||||
void SetExitType(ExitType exit_type) override;
|
void SetExitType(ExitType exit_type) override;
|
||||||
ExitType GetLastSessionExitType() const override;
|
ExitType GetLastSessionExitType() override;
|
||||||
base::Time GetCreationTime() const override;
|
base::Time GetCreationTime() const override;
|
||||||
void SetCreationTimeForTesting(base::Time creation_time) override;
|
void SetCreationTimeForTesting(base::Time creation_time) override;
|
||||||
void RecordMainFrameNavigation() override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<variations::VariationsClient> variations_client_;
|
std::unique_ptr<variations::VariationsClient> variations_client_;
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
#include "libcef/browser/audio_capturer.h"
|
#include "libcef/browser/audio_capturer.h"
|
||||||
#include "libcef/browser/alloy/alloy_browser_host_impl.h"
|
#include "libcef/browser/browser_host_impl.h"
|
||||||
|
|
||||||
#include "components/mirroring/service/captured_audio_input.h"
|
#include "components/mirroring/service/captured_audio_input.h"
|
||||||
#include "content/public/browser/audio_loopback_stream_creator.h"
|
#include "content/public/browser/audio_loopback_stream_creator.h"
|
||||||
@@ -51,7 +51,7 @@ void StreamCreatorHelper(
|
|||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
CefAudioCapturer::CefAudioCapturer(const CefAudioParameters& params,
|
CefAudioCapturer::CefAudioCapturer(const CefAudioParameters& params,
|
||||||
CefRefPtr<AlloyBrowserHostImpl> browser,
|
CefRefPtr<CefBrowserHostImpl> browser,
|
||||||
CefRefPtr<CefAudioHandler> audio_handler)
|
CefRefPtr<CefAudioHandler> audio_handler)
|
||||||
: params_(params),
|
: params_(params),
|
||||||
browser_(browser),
|
browser_(browser),
|
||||||
|
@@ -21,12 +21,12 @@ class AudioInputDevice;
|
|||||||
} // namespace media
|
} // namespace media
|
||||||
|
|
||||||
class CefAudioHandler;
|
class CefAudioHandler;
|
||||||
class AlloyBrowserHostImpl;
|
class CefBrowserHostImpl;
|
||||||
|
|
||||||
class CefAudioCapturer : public media::AudioCapturerSource::CaptureCallback {
|
class CefAudioCapturer : public media::AudioCapturerSource::CaptureCallback {
|
||||||
public:
|
public:
|
||||||
CefAudioCapturer(const CefAudioParameters& params,
|
CefAudioCapturer(const CefAudioParameters& params,
|
||||||
CefRefPtr<AlloyBrowserHostImpl> browser,
|
CefRefPtr<CefBrowserHostImpl> browser,
|
||||||
CefRefPtr<CefAudioHandler> audio_handler);
|
CefRefPtr<CefAudioHandler> audio_handler);
|
||||||
~CefAudioCapturer() override;
|
~CefAudioCapturer() override;
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@ class CefAudioCapturer : public media::AudioCapturerSource::CaptureCallback {
|
|||||||
void StopStream();
|
void StopStream();
|
||||||
|
|
||||||
CefAudioParameters params_;
|
CefAudioParameters params_;
|
||||||
CefRefPtr<AlloyBrowserHostImpl> browser_;
|
CefRefPtr<CefBrowserHostImpl> browser_;
|
||||||
CefRefPtr<CefAudioHandler> audio_handler_;
|
CefRefPtr<CefAudioHandler> audio_handler_;
|
||||||
std::unique_ptr<content::AudioLoopbackStreamCreator> audio_stream_creator_;
|
std::unique_ptr<content::AudioLoopbackStreamCreator> audio_stream_creator_;
|
||||||
scoped_refptr<media::AudioInputDevice> audio_input_device_;
|
scoped_refptr<media::AudioInputDevice> audio_input_device_;
|
||||||
|
@@ -1,616 +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/browser_contents_delegate.h"
|
|
||||||
|
|
||||||
#include "libcef/browser/browser_host_base.h"
|
|
||||||
#include "libcef/browser/browser_platform_delegate.h"
|
|
||||||
#include "libcef/browser/browser_util.h"
|
|
||||||
|
|
||||||
#include "content/public/browser/keyboard_event_processing_result.h"
|
|
||||||
#include "content/public/browser/native_web_keyboard_event.h"
|
|
||||||
#include "content/public/browser/navigation_entry.h"
|
|
||||||
#include "content/public/browser/navigation_handle.h"
|
|
||||||
#include "content/public/browser/notification_details.h"
|
|
||||||
#include "content/public/browser/notification_source.h"
|
|
||||||
#include "content/public/browser/notification_types.h"
|
|
||||||
#include "content/public/browser/render_view_host.h"
|
|
||||||
|
|
||||||
using content::KeyboardEventProcessingResult;
|
|
||||||
|
|
||||||
CefBrowserContentsDelegate::CefBrowserContentsDelegate(
|
|
||||||
scoped_refptr<CefBrowserInfo> browser_info)
|
|
||||||
: browser_info_(browser_info) {
|
|
||||||
DCHECK(browser_info_->browser());
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::ObserveWebContents(
|
|
||||||
content::WebContents* new_contents) {
|
|
||||||
WebContentsObserver::Observe(new_contents);
|
|
||||||
|
|
||||||
if (new_contents) {
|
|
||||||
registrar_.reset(new content::NotificationRegistrar);
|
|
||||||
|
|
||||||
// When navigating through the history, the restored NavigationEntry's title
|
|
||||||
// will be used. If the entry ends up having the same title after we return
|
|
||||||
// to it, as will usually be the case, the
|
|
||||||
// NOTIFICATION_WEB_CONTENTS_TITLE_UPDATED will then be suppressed, since
|
|
||||||
// the NavigationEntry's title hasn't changed.
|
|
||||||
registrar_->Add(this, content::NOTIFICATION_LOAD_STOP,
|
|
||||||
content::Source<content::NavigationController>(
|
|
||||||
&new_contents->GetController()));
|
|
||||||
|
|
||||||
// Make sure RenderViewCreated is called at least one time.
|
|
||||||
RenderViewCreated(new_contents->GetRenderViewHost());
|
|
||||||
|
|
||||||
// Create the frame representation before OnAfterCreated is called for a new
|
|
||||||
// browser. Additionally, RenderFrameCreated is otherwise not called at all
|
|
||||||
// for new popup browsers.
|
|
||||||
RenderFrameCreated(new_contents->GetMainFrame());
|
|
||||||
} else {
|
|
||||||
registrar_.reset();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::AddObserver(Observer* observer) {
|
|
||||||
observers_.AddObserver(observer);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::RemoveObserver(Observer* observer) {
|
|
||||||
observers_.RemoveObserver(observer);
|
|
||||||
}
|
|
||||||
|
|
||||||
// |source| may be NULL for navigations in the current tab, or if the
|
|
||||||
// navigation originates from a guest view via MaybeAllowNavigation.
|
|
||||||
content::WebContents* CefBrowserContentsDelegate::OpenURLFromTab(
|
|
||||||
content::WebContents* source,
|
|
||||||
const content::OpenURLParams& params) {
|
|
||||||
bool cancel = false;
|
|
||||||
|
|
||||||
if (auto c = client()) {
|
|
||||||
if (auto handler = c->GetRequestHandler()) {
|
|
||||||
cancel = handler->OnOpenURLFromTab(
|
|
||||||
browser(), browser()->GetFrame(params.frame_tree_node_id),
|
|
||||||
params.url.spec(),
|
|
||||||
static_cast<cef_window_open_disposition_t>(params.disposition),
|
|
||||||
params.user_gesture);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returning nullptr will cancel the navigation.
|
|
||||||
return cancel ? nullptr : web_contents();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::LoadingStateChanged(
|
|
||||||
content::WebContents* source,
|
|
||||||
bool to_different_document) {
|
|
||||||
const int current_index =
|
|
||||||
source->GetController().GetLastCommittedEntryIndex();
|
|
||||||
const int max_index = source->GetController().GetEntryCount() - 1;
|
|
||||||
|
|
||||||
const bool is_loading = source->IsLoading();
|
|
||||||
const bool can_go_back = (current_index > 0);
|
|
||||||
const bool can_go_forward = (current_index < max_index);
|
|
||||||
|
|
||||||
// This method may be called multiple times in a row with |is_loading|
|
|
||||||
// true as a result of https://crrev.com/5e750ad0. Ignore the 2nd+ times.
|
|
||||||
if (is_loading_ == is_loading && can_go_back_ == can_go_back &&
|
|
||||||
can_go_forward_ == can_go_forward) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
is_loading_ = is_loading;
|
|
||||||
can_go_back_ = can_go_back;
|
|
||||||
can_go_forward_ = can_go_forward;
|
|
||||||
OnStateChanged(State::kNavigation);
|
|
||||||
|
|
||||||
if (auto c = client()) {
|
|
||||||
if (auto handler = c->GetLoadHandler()) {
|
|
||||||
handler->OnLoadingStateChange(browser(), is_loading, can_go_back,
|
|
||||||
can_go_forward);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::UpdateTargetURL(content::WebContents* source,
|
|
||||||
const GURL& url) {
|
|
||||||
if (auto c = client()) {
|
|
||||||
if (auto handler = c->GetDisplayHandler()) {
|
|
||||||
handler->OnStatusMessage(browser(), url.spec());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CefBrowserContentsDelegate::DidAddMessageToConsole(
|
|
||||||
content::WebContents* source,
|
|
||||||
blink::mojom::ConsoleMessageLevel log_level,
|
|
||||||
const base::string16& message,
|
|
||||||
int32_t line_no,
|
|
||||||
const base::string16& source_id) {
|
|
||||||
if (auto c = client()) {
|
|
||||||
if (auto handler = c->GetDisplayHandler()) {
|
|
||||||
// Use LOGSEVERITY_DEBUG for unrecognized |level| values.
|
|
||||||
cef_log_severity_t cef_level = LOGSEVERITY_DEBUG;
|
|
||||||
switch (log_level) {
|
|
||||||
case blink::mojom::ConsoleMessageLevel::kVerbose:
|
|
||||||
cef_level = LOGSEVERITY_DEBUG;
|
|
||||||
break;
|
|
||||||
case blink::mojom::ConsoleMessageLevel::kInfo:
|
|
||||||
cef_level = LOGSEVERITY_INFO;
|
|
||||||
break;
|
|
||||||
case blink::mojom::ConsoleMessageLevel::kWarning:
|
|
||||||
cef_level = LOGSEVERITY_WARNING;
|
|
||||||
break;
|
|
||||||
case blink::mojom::ConsoleMessageLevel::kError:
|
|
||||||
cef_level = LOGSEVERITY_ERROR;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return handler->OnConsoleMessage(browser(), cef_level, message, source_id,
|
|
||||||
line_no);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::DidNavigateMainFramePostCommit(
|
|
||||||
content::WebContents* web_contents) {
|
|
||||||
has_document_ = false;
|
|
||||||
OnStateChanged(State::kDocument);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::EnterFullscreenModeForTab(
|
|
||||||
content::RenderFrameHost* requesting_frame,
|
|
||||||
const blink::mojom::FullscreenOptions& options) {
|
|
||||||
OnFullscreenModeChange(/*fullscreen=*/true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::ExitFullscreenModeForTab(
|
|
||||||
content::WebContents* web_contents) {
|
|
||||||
OnFullscreenModeChange(/*fullscreen=*/false);
|
|
||||||
}
|
|
||||||
|
|
||||||
KeyboardEventProcessingResult
|
|
||||||
CefBrowserContentsDelegate::PreHandleKeyboardEvent(
|
|
||||||
content::WebContents* source,
|
|
||||||
const content::NativeWebKeyboardEvent& event) {
|
|
||||||
if (auto delegate = platform_delegate()) {
|
|
||||||
if (auto c = client()) {
|
|
||||||
if (auto handler = c->GetKeyboardHandler()) {
|
|
||||||
CefKeyEvent cef_event;
|
|
||||||
if (browser_util::GetCefKeyEvent(event, cef_event)) {
|
|
||||||
cef_event.focus_on_editable_field = focus_on_editable_field_;
|
|
||||||
|
|
||||||
auto event_handle = delegate->GetEventHandle(event);
|
|
||||||
bool is_keyboard_shortcut = false;
|
|
||||||
bool result = handler->OnPreKeyEvent(
|
|
||||||
browser(), cef_event, event_handle, &is_keyboard_shortcut);
|
|
||||||
if (result) {
|
|
||||||
return KeyboardEventProcessingResult::HANDLED;
|
|
||||||
} else if (is_keyboard_shortcut) {
|
|
||||||
return KeyboardEventProcessingResult::NOT_HANDLED_IS_SHORTCUT;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return KeyboardEventProcessingResult::NOT_HANDLED;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CefBrowserContentsDelegate::HandleKeyboardEvent(
|
|
||||||
content::WebContents* source,
|
|
||||||
const content::NativeWebKeyboardEvent& event) {
|
|
||||||
// Check to see if event should be ignored.
|
|
||||||
if (event.skip_in_browser)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (auto delegate = platform_delegate()) {
|
|
||||||
if (auto c = client()) {
|
|
||||||
if (auto handler = c->GetKeyboardHandler()) {
|
|
||||||
CefKeyEvent cef_event;
|
|
||||||
if (browser_util::GetCefKeyEvent(event, cef_event)) {
|
|
||||||
cef_event.focus_on_editable_field = focus_on_editable_field_;
|
|
||||||
|
|
||||||
auto event_handle = delegate->GetEventHandle(event);
|
|
||||||
if (handler->OnKeyEvent(browser(), cef_event, event_handle)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::RenderFrameCreated(
|
|
||||||
content::RenderFrameHost* render_frame_host) {
|
|
||||||
browser_info_->MaybeCreateFrame(render_frame_host, false /* is_guest_view */);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::RenderFrameHostChanged(
|
|
||||||
content::RenderFrameHost* old_host,
|
|
||||||
content::RenderFrameHost* new_host) {
|
|
||||||
// Just in case RenderFrameCreated wasn't called for some reason.
|
|
||||||
RenderFrameCreated(new_host);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::RenderFrameDeleted(
|
|
||||||
content::RenderFrameHost* render_frame_host) {
|
|
||||||
const auto frame_id = CefFrameHostImpl::MakeFrameId(render_frame_host);
|
|
||||||
browser_info_->RemoveFrame(render_frame_host);
|
|
||||||
|
|
||||||
if (focused_frame_ && focused_frame_->GetIdentifier() == frame_id) {
|
|
||||||
focused_frame_ = nullptr;
|
|
||||||
OnStateChanged(State::kFocusedFrame);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::RenderViewCreated(
|
|
||||||
content::RenderViewHost* render_view_host) {
|
|
||||||
// May be already registered if the renderer crashed previously.
|
|
||||||
if (!registrar_->IsRegistered(
|
|
||||||
this, content::NOTIFICATION_FOCUS_CHANGED_IN_PAGE,
|
|
||||||
content::Source<content::RenderViewHost>(render_view_host))) {
|
|
||||||
registrar_->Add(this, content::NOTIFICATION_FOCUS_CHANGED_IN_PAGE,
|
|
||||||
content::Source<content::RenderViewHost>(render_view_host));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::RenderViewDeleted(
|
|
||||||
content::RenderViewHost* render_view_host) {
|
|
||||||
if (registrar_->IsRegistered(
|
|
||||||
this, content::NOTIFICATION_FOCUS_CHANGED_IN_PAGE,
|
|
||||||
content::Source<content::RenderViewHost>(render_view_host))) {
|
|
||||||
registrar_->Remove(
|
|
||||||
this, content::NOTIFICATION_FOCUS_CHANGED_IN_PAGE,
|
|
||||||
content::Source<content::RenderViewHost>(render_view_host));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::RenderViewReady() {
|
|
||||||
if (auto c = client()) {
|
|
||||||
if (auto handler = c->GetRequestHandler()) {
|
|
||||||
handler->OnRenderViewReady(browser());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::RenderProcessGone(
|
|
||||||
base::TerminationStatus status) {
|
|
||||||
cef_termination_status_t ts = TS_ABNORMAL_TERMINATION;
|
|
||||||
if (status == base::TERMINATION_STATUS_PROCESS_WAS_KILLED)
|
|
||||||
ts = TS_PROCESS_WAS_KILLED;
|
|
||||||
else if (status == base::TERMINATION_STATUS_PROCESS_CRASHED)
|
|
||||||
ts = TS_PROCESS_CRASHED;
|
|
||||||
else if (status == base::TERMINATION_STATUS_OOM)
|
|
||||||
ts = TS_PROCESS_OOM;
|
|
||||||
else if (status != base::TERMINATION_STATUS_ABNORMAL_TERMINATION)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (auto c = client()) {
|
|
||||||
if (auto handler = c->GetRequestHandler()) {
|
|
||||||
auto navigation_lock = browser_info_->CreateNavigationLock();
|
|
||||||
handler->OnRenderProcessTerminated(browser(), ts);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::OnFrameFocused(
|
|
||||||
content::RenderFrameHost* render_frame_host) {
|
|
||||||
CefRefPtr<CefFrameHostImpl> frame = static_cast<CefFrameHostImpl*>(
|
|
||||||
browser_info_->GetFrameForHost(render_frame_host).get());
|
|
||||||
if (!frame || frame->IsFocused())
|
|
||||||
return;
|
|
||||||
|
|
||||||
CefRefPtr<CefFrameHostImpl> 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
OnStateChanged(State::kFocusedFrame);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::DocumentAvailableInMainFrame() {
|
|
||||||
has_document_ = true;
|
|
||||||
OnStateChanged(State::kDocument);
|
|
||||||
|
|
||||||
if (auto c = client()) {
|
|
||||||
if (auto handler = c->GetRequestHandler()) {
|
|
||||||
handler->OnDocumentAvailableInMainFrame(browser());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::LoadProgressChanged(double progress) {
|
|
||||||
if (auto c = client()) {
|
|
||||||
if (auto handler = c->GetDisplayHandler()) {
|
|
||||||
handler->OnLoadingProgressChange(browser(), progress);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::DidStopLoading() {
|
|
||||||
// Notify all renderers that loading has stopped. We used to use
|
|
||||||
// RenderFrameObserver::DidStopLoading in the renderer process but that was
|
|
||||||
// removed in https://crrev.com/3e37dd0ead. However, that callback wasn't
|
|
||||||
// necessarily accurate because it wasn't called in all of the cases where
|
|
||||||
// RenderFrameImpl sends the FrameHostMsg_DidStopLoading message. This adds
|
|
||||||
// an additional round trip but should provide the same or improved
|
|
||||||
// functionality.
|
|
||||||
for (const auto& frame : browser_info_->GetAllFrames()) {
|
|
||||||
frame->MaybeSendDidStopLoading();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::DidFinishNavigation(
|
|
||||||
content::NavigationHandle* navigation_handle) {
|
|
||||||
const net::Error error_code = navigation_handle->GetNetErrorCode();
|
|
||||||
|
|
||||||
// Skip calls where the navigation has not yet committed and there is no
|
|
||||||
// error code. For example, when creating a browser without loading a URL.
|
|
||||||
if (!navigation_handle->HasCommitted() && error_code == net::OK)
|
|
||||||
return;
|
|
||||||
|
|
||||||
const bool is_main_frame = navigation_handle->IsInMainFrame();
|
|
||||||
const GURL& url =
|
|
||||||
(error_code == net::OK ? navigation_handle->GetURL() : GURL());
|
|
||||||
|
|
||||||
auto browser_info = browser_info_;
|
|
||||||
|
|
||||||
// May return NULL when starting a new navigation if the previous navigation
|
|
||||||
// caused the renderer process to crash during load.
|
|
||||||
CefRefPtr<CefFrameHostImpl> frame = browser_info->GetFrameForFrameTreeNode(
|
|
||||||
navigation_handle->GetFrameTreeNodeId());
|
|
||||||
if (!frame) {
|
|
||||||
if (is_main_frame) {
|
|
||||||
frame = browser_info->GetMainFrame();
|
|
||||||
} else {
|
|
||||||
frame =
|
|
||||||
browser_info->CreateTempSubFrame(CefFrameHostImpl::kInvalidFrameId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
frame->RefreshAttributes();
|
|
||||||
|
|
||||||
if (error_code == net::OK) {
|
|
||||||
// The navigation has been committed and there is no error.
|
|
||||||
DCHECK(navigation_handle->HasCommitted());
|
|
||||||
|
|
||||||
// Don't call OnLoadStart for same page navigations (fragments,
|
|
||||||
// history state).
|
|
||||||
if (!navigation_handle->IsSameDocument()) {
|
|
||||||
OnLoadStart(frame.get(), navigation_handle->GetPageTransition());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_main_frame) {
|
|
||||||
OnAddressChange(url);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// The navigation failed with an error. This may happen before commit
|
|
||||||
// (e.g. network error) or after commit (e.g. response filter error).
|
|
||||||
// If the error happened before commit then this call will originate from
|
|
||||||
// RenderFrameHostImpl::OnDidFailProvisionalLoadWithError.
|
|
||||||
// OnLoadStart/OnLoadEnd will not be called.
|
|
||||||
OnLoadError(frame.get(), navigation_handle->GetURL(), error_code);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::DidFailLoad(
|
|
||||||
content::RenderFrameHost* render_frame_host,
|
|
||||||
const GURL& validated_url,
|
|
||||||
int error_code) {
|
|
||||||
// The navigation failed after commit. OnLoadStart was called so we also
|
|
||||||
// call OnLoadEnd.
|
|
||||||
auto frame = browser_info_->GetFrameForHost(render_frame_host);
|
|
||||||
frame->RefreshAttributes();
|
|
||||||
OnLoadError(frame, validated_url, error_code);
|
|
||||||
OnLoadEnd(frame, validated_url, error_code);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CefBrowserContentsDelegate::OnMessageReceived(
|
|
||||||
const IPC::Message& message,
|
|
||||||
content::RenderFrameHost* render_frame_host) {
|
|
||||||
// Messages may arrive after a frame is detached. Ignore those messages.
|
|
||||||
auto frame = browser_info_->GetFrameForHost(render_frame_host);
|
|
||||||
if (frame) {
|
|
||||||
return static_cast<CefFrameHostImpl*>(frame.get())
|
|
||||||
->OnMessageReceived(message);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::TitleWasSet(content::NavigationEntry* entry) {
|
|
||||||
// |entry| may be NULL if a popup is created via window.open and never
|
|
||||||
// navigated.
|
|
||||||
if (entry)
|
|
||||||
OnTitleChange(entry->GetTitle());
|
|
||||||
else if (web_contents())
|
|
||||||
OnTitleChange(web_contents()->GetTitle());
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::PluginCrashed(
|
|
||||||
const base::FilePath& plugin_path,
|
|
||||||
base::ProcessId plugin_pid) {
|
|
||||||
if (auto c = client()) {
|
|
||||||
if (auto handler = c->GetRequestHandler()) {
|
|
||||||
handler->OnPluginCrashed(browser(), plugin_path.value());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::DidUpdateFaviconURL(
|
|
||||||
content::RenderFrameHost* render_frame_host,
|
|
||||||
const std::vector<blink::mojom::FaviconURLPtr>& candidates) {
|
|
||||||
if (auto c = client()) {
|
|
||||||
if (auto handler = c->GetDisplayHandler()) {
|
|
||||||
std::vector<CefString> icon_urls;
|
|
||||||
for (const auto& icon : candidates) {
|
|
||||||
if (icon->icon_type == blink::mojom::FaviconIconType::kFavicon) {
|
|
||||||
icon_urls.push_back(icon->icon_url.spec());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!icon_urls.empty()) {
|
|
||||||
handler->OnFaviconURLChange(browser(), icon_urls);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::OnWebContentsFocused(
|
|
||||||
content::RenderWidgetHost* render_widget_host) {
|
|
||||||
if (auto c = client()) {
|
|
||||||
if (auto handler = c->GetFocusHandler()) {
|
|
||||||
handler->OnGotFocus(browser());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::WebContentsDestroyed() {
|
|
||||||
auto wc = web_contents();
|
|
||||||
ObserveWebContents(nullptr);
|
|
||||||
for (auto& observer : observers_) {
|
|
||||||
observer.OnWebContentsDestroyed(wc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::Observe(
|
|
||||||
int type,
|
|
||||||
const content::NotificationSource& source,
|
|
||||||
const content::NotificationDetails& details) {
|
|
||||||
DCHECK(type == content::NOTIFICATION_LOAD_STOP ||
|
|
||||||
type == content::NOTIFICATION_FOCUS_CHANGED_IN_PAGE);
|
|
||||||
|
|
||||||
if (type == content::NOTIFICATION_LOAD_STOP) {
|
|
||||||
content::NavigationController* controller =
|
|
||||||
content::Source<content::NavigationController>(source).ptr();
|
|
||||||
OnTitleChange(controller->GetWebContents()->GetTitle());
|
|
||||||
} else if (type == content::NOTIFICATION_FOCUS_CHANGED_IN_PAGE) {
|
|
||||||
focus_on_editable_field_ = *content::Details<bool>(details).ptr();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::OnLoadEnd(CefRefPtr<CefFrame> frame,
|
|
||||||
const GURL& url,
|
|
||||||
int http_status_code) {
|
|
||||||
if (auto c = client()) {
|
|
||||||
if (auto handler = c->GetLoadHandler()) {
|
|
||||||
handler->OnLoadEnd(browser(), frame, http_status_code);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CefBrowserContentsDelegate::OnSetFocus(cef_focus_source_t source) {
|
|
||||||
// SetFocus() might be called while inside the OnSetFocus() callback. If
|
|
||||||
// so, don't re-enter the callback.
|
|
||||||
if (is_in_onsetfocus_)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (auto c = client()) {
|
|
||||||
if (auto handler = c->GetFocusHandler()) {
|
|
||||||
is_in_onsetfocus_ = true;
|
|
||||||
bool handled = handler->OnSetFocus(browser(), source);
|
|
||||||
is_in_onsetfocus_ = false;
|
|
||||||
|
|
||||||
return handled;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
CefRefPtr<CefClient> CefBrowserContentsDelegate::client() const {
|
|
||||||
if (auto b = browser()) {
|
|
||||||
return b->GetHost()->GetClient();
|
|
||||||
}
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
CefRefPtr<CefBrowser> CefBrowserContentsDelegate::browser() const {
|
|
||||||
return browser_info_->browser();
|
|
||||||
}
|
|
||||||
|
|
||||||
CefBrowserPlatformDelegate* CefBrowserContentsDelegate::platform_delegate()
|
|
||||||
const {
|
|
||||||
auto browser = browser_info_->browser();
|
|
||||||
if (browser)
|
|
||||||
return browser->platform_delegate();
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::OnAddressChange(const GURL& url) {
|
|
||||||
if (auto c = client()) {
|
|
||||||
if (auto handler = c->GetDisplayHandler()) {
|
|
||||||
// On the handler of an address change.
|
|
||||||
handler->OnAddressChange(browser(), browser_info_->GetMainFrame(),
|
|
||||||
url.spec());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::OnLoadStart(
|
|
||||||
CefRefPtr<CefFrame> frame,
|
|
||||||
ui::PageTransition transition_type) {
|
|
||||||
if (auto c = client()) {
|
|
||||||
if (auto handler = c->GetLoadHandler()) {
|
|
||||||
// On the handler that loading has started.
|
|
||||||
handler->OnLoadStart(browser(), frame,
|
|
||||||
static_cast<cef_transition_type_t>(transition_type));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::OnLoadError(CefRefPtr<CefFrame> frame,
|
|
||||||
const GURL& url,
|
|
||||||
int error_code) {
|
|
||||||
if (auto c = client()) {
|
|
||||||
if (auto handler = c->GetLoadHandler()) {
|
|
||||||
auto navigation_lock = browser_info_->CreateNavigationLock();
|
|
||||||
// On the handler that loading has failed.
|
|
||||||
handler->OnLoadError(browser(), frame,
|
|
||||||
static_cast<cef_errorcode_t>(error_code),
|
|
||||||
net::ErrorToShortString(error_code), url.spec());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::OnTitleChange(const base::string16& title) {
|
|
||||||
if (auto c = client()) {
|
|
||||||
if (auto handler = c->GetDisplayHandler()) {
|
|
||||||
handler->OnTitleChange(browser(), title);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::OnFullscreenModeChange(bool fullscreen) {
|
|
||||||
if (fullscreen == is_fullscreen_)
|
|
||||||
return;
|
|
||||||
|
|
||||||
is_fullscreen_ = fullscreen;
|
|
||||||
OnStateChanged(State::kFullscreen);
|
|
||||||
|
|
||||||
if (auto c = client()) {
|
|
||||||
if (auto handler = c->GetDisplayHandler()) {
|
|
||||||
handler->OnFullscreenModeChange(browser(), fullscreen);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserContentsDelegate::OnStateChanged(State state_changed) {
|
|
||||||
for (auto& observer : observers_) {
|
|
||||||
observer.OnStateChanged(state_changed);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,198 +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_BROWSER_CONTENTS_DELEGATE_H_
|
|
||||||
#define CEF_LIBCEF_BROWSER_BROWSER_CONTENTS_DELEGATE_H_
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
#include "libcef/browser/frame_host_impl.h"
|
|
||||||
|
|
||||||
#include "base/observer_list.h"
|
|
||||||
#include "content/public/browser/notification_observer.h"
|
|
||||||
#include "content/public/browser/notification_registrar.h"
|
|
||||||
#include "content/public/browser/web_contents_delegate.h"
|
|
||||||
#include "content/public/browser/web_contents_observer.h"
|
|
||||||
|
|
||||||
class CefBrowser;
|
|
||||||
class CefBrowserInfo;
|
|
||||||
class CefBrowserPlatformDelegate;
|
|
||||||
class CefClient;
|
|
||||||
|
|
||||||
// Flags that represent which states have changed.
|
|
||||||
enum class CefBrowserContentsState : uint8_t {
|
|
||||||
kNone = 0,
|
|
||||||
kNavigation = (1 << 0),
|
|
||||||
kDocument = (1 << 1),
|
|
||||||
kFullscreen = (1 << 2),
|
|
||||||
kFocusedFrame = (1 << 3),
|
|
||||||
};
|
|
||||||
|
|
||||||
constexpr inline CefBrowserContentsState operator&(
|
|
||||||
CefBrowserContentsState lhs,
|
|
||||||
CefBrowserContentsState rhs) {
|
|
||||||
return static_cast<CefBrowserContentsState>(static_cast<int>(lhs) &
|
|
||||||
static_cast<int>(rhs));
|
|
||||||
}
|
|
||||||
|
|
||||||
constexpr inline CefBrowserContentsState operator|(
|
|
||||||
CefBrowserContentsState lhs,
|
|
||||||
CefBrowserContentsState rhs) {
|
|
||||||
return static_cast<CefBrowserContentsState>(static_cast<int>(lhs) |
|
|
||||||
static_cast<int>(rhs));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tracks state and executes client callbacks based on WebContents callbacks.
|
|
||||||
// Includes functionality that is shared by the alloy and chrome runtimes.
|
|
||||||
// Only accessed on the UI thread.
|
|
||||||
class CefBrowserContentsDelegate : public content::WebContentsDelegate,
|
|
||||||
public content::WebContentsObserver,
|
|
||||||
public content::NotificationObserver {
|
|
||||||
public:
|
|
||||||
using State = CefBrowserContentsState;
|
|
||||||
|
|
||||||
// Interface to implement for observers that wish to be informed of changes
|
|
||||||
// to the delegate. All methods will be called on the UI thread.
|
|
||||||
class Observer : public base::CheckedObserver {
|
|
||||||
public:
|
|
||||||
// Called after state has changed and before the associated CefClient
|
|
||||||
// callback is executed.
|
|
||||||
virtual void OnStateChanged(State state_changed) = 0;
|
|
||||||
|
|
||||||
// Called when the associated WebContents is destroyed.
|
|
||||||
virtual void OnWebContentsDestroyed(content::WebContents* web_contents) = 0;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
~Observer() override {}
|
|
||||||
};
|
|
||||||
|
|
||||||
explicit CefBrowserContentsDelegate(
|
|
||||||
scoped_refptr<CefBrowserInfo> browser_info);
|
|
||||||
|
|
||||||
void ObserveWebContents(content::WebContents* new_contents);
|
|
||||||
|
|
||||||
// Manage observer objects. The observer must either outlive this object or
|
|
||||||
// be removed before destruction.
|
|
||||||
void AddObserver(Observer* observer);
|
|
||||||
void RemoveObserver(Observer* observer);
|
|
||||||
|
|
||||||
// WebContentsDelegate methods:
|
|
||||||
content::WebContents* OpenURLFromTab(
|
|
||||||
content::WebContents* source,
|
|
||||||
const content::OpenURLParams& params) override;
|
|
||||||
void LoadingStateChanged(content::WebContents* source,
|
|
||||||
bool to_different_document) override;
|
|
||||||
void UpdateTargetURL(content::WebContents* source, const GURL& url) override;
|
|
||||||
bool DidAddMessageToConsole(content::WebContents* source,
|
|
||||||
blink::mojom::ConsoleMessageLevel log_level,
|
|
||||||
const base::string16& message,
|
|
||||||
int32_t line_no,
|
|
||||||
const base::string16& source_id) override;
|
|
||||||
void DidNavigateMainFramePostCommit(
|
|
||||||
content::WebContents* web_contents) override;
|
|
||||||
void EnterFullscreenModeForTab(
|
|
||||||
content::RenderFrameHost* requesting_frame,
|
|
||||||
const blink::mojom::FullscreenOptions& options) override;
|
|
||||||
void ExitFullscreenModeForTab(content::WebContents* web_contents) override;
|
|
||||||
content::KeyboardEventProcessingResult PreHandleKeyboardEvent(
|
|
||||||
content::WebContents* source,
|
|
||||||
const content::NativeWebKeyboardEvent& event) override;
|
|
||||||
bool HandleKeyboardEvent(
|
|
||||||
content::WebContents* source,
|
|
||||||
const content::NativeWebKeyboardEvent& event) override;
|
|
||||||
|
|
||||||
// WebContentsObserver methods:
|
|
||||||
void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override;
|
|
||||||
void RenderFrameHostChanged(content::RenderFrameHost* old_host,
|
|
||||||
content::RenderFrameHost* new_host) override;
|
|
||||||
void RenderFrameDeleted(content::RenderFrameHost* render_frame_host) override;
|
|
||||||
void RenderViewCreated(content::RenderViewHost* render_view_host) override;
|
|
||||||
void RenderViewDeleted(content::RenderViewHost* render_view_host) override;
|
|
||||||
void RenderViewReady() override;
|
|
||||||
void RenderProcessGone(base::TerminationStatus status) override;
|
|
||||||
void OnFrameFocused(content::RenderFrameHost* render_frame_host) override;
|
|
||||||
void DocumentAvailableInMainFrame() override;
|
|
||||||
void LoadProgressChanged(double progress) override;
|
|
||||||
void DidStopLoading() override;
|
|
||||||
void DidFinishNavigation(
|
|
||||||
content::NavigationHandle* navigation_handle) override;
|
|
||||||
void DidFailLoad(content::RenderFrameHost* render_frame_host,
|
|
||||||
const GURL& validated_url,
|
|
||||||
int error_code) override;
|
|
||||||
bool OnMessageReceived(const IPC::Message& message,
|
|
||||||
content::RenderFrameHost* render_frame_host) override;
|
|
||||||
void TitleWasSet(content::NavigationEntry* entry) override;
|
|
||||||
void PluginCrashed(const base::FilePath& plugin_path,
|
|
||||||
base::ProcessId plugin_pid) override;
|
|
||||||
void DidUpdateFaviconURL(
|
|
||||||
content::RenderFrameHost* render_frame_host,
|
|
||||||
const std::vector<blink::mojom::FaviconURLPtr>& candidates) override;
|
|
||||||
void OnWebContentsFocused(
|
|
||||||
content::RenderWidgetHost* render_widget_host) override;
|
|
||||||
void WebContentsDestroyed() override;
|
|
||||||
|
|
||||||
// NotificationObserver methods.
|
|
||||||
void Observe(int type,
|
|
||||||
const content::NotificationSource& source,
|
|
||||||
const content::NotificationDetails& details) override;
|
|
||||||
|
|
||||||
// Accessors for state information. Changes will be signaled to
|
|
||||||
// Observer::OnStateChanged.
|
|
||||||
bool is_loading() const { return is_loading_; }
|
|
||||||
bool can_go_back() const { return can_go_back_; }
|
|
||||||
bool can_go_forward() const { return can_go_forward_; }
|
|
||||||
bool has_document() const { return has_document_; }
|
|
||||||
bool is_fullscreen() const { return is_fullscreen_; }
|
|
||||||
CefRefPtr<CefFrameHostImpl> focused_frame() const { return focused_frame_; }
|
|
||||||
|
|
||||||
// Helpers for executing client callbacks.
|
|
||||||
// TODO(cef): Make this private if/when possible.
|
|
||||||
void OnLoadEnd(CefRefPtr<CefFrame> frame,
|
|
||||||
const GURL& url,
|
|
||||||
int http_status_code);
|
|
||||||
bool OnSetFocus(cef_focus_source_t source);
|
|
||||||
|
|
||||||
private:
|
|
||||||
CefRefPtr<CefClient> client() const;
|
|
||||||
CefRefPtr<CefBrowser> browser() const;
|
|
||||||
CefBrowserPlatformDelegate* platform_delegate() const;
|
|
||||||
|
|
||||||
// Helpers for executing client callbacks.
|
|
||||||
void OnAddressChange(const GURL& url);
|
|
||||||
void OnLoadStart(CefRefPtr<CefFrame> frame,
|
|
||||||
ui::PageTransition transition_type);
|
|
||||||
void OnLoadError(CefRefPtr<CefFrame> frame, const GURL& url, int error_code);
|
|
||||||
void OnTitleChange(const base::string16& title);
|
|
||||||
void OnFullscreenModeChange(bool fullscreen);
|
|
||||||
|
|
||||||
void OnStateChanged(State state_changed);
|
|
||||||
|
|
||||||
scoped_refptr<CefBrowserInfo> browser_info_;
|
|
||||||
|
|
||||||
bool is_loading_ = false;
|
|
||||||
bool can_go_back_ = false;
|
|
||||||
bool can_go_forward_ = false;
|
|
||||||
bool has_document_ = false;
|
|
||||||
bool is_fullscreen_ = false;
|
|
||||||
|
|
||||||
// The currently focused frame, or nullptr if the main frame is focused.
|
|
||||||
CefRefPtr<CefFrameHostImpl> focused_frame_;
|
|
||||||
|
|
||||||
// True if currently in the OnSetFocus callback.
|
|
||||||
bool is_in_onsetfocus_ = false;
|
|
||||||
|
|
||||||
// Observers that want to be notified of changes to this object.
|
|
||||||
base::ObserverList<Observer> observers_;
|
|
||||||
|
|
||||||
// Used for managing notification subscriptions.
|
|
||||||
std::unique_ptr<content::NotificationRegistrar> registrar_;
|
|
||||||
|
|
||||||
// True if the focus is currently on an editable field on the page.
|
|
||||||
bool focus_on_editable_field_ = false;
|
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(CefBrowserContentsDelegate);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // CEF_LIBCEF_BROWSER_BROWSER_CONTENTS_DELEGATE_H_
|
|
@@ -456,6 +456,8 @@ bool CefBrowserContext::IsPrintPreviewSupported() const {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CefBrowserContext::AddVisitedURLs(const std::vector<GURL>& urls) {}
|
||||||
|
|
||||||
network::mojom::NetworkContext* CefBrowserContext::GetNetworkContext() {
|
network::mojom::NetworkContext* CefBrowserContext::GetNetworkContext() {
|
||||||
CEF_REQUIRE_UIT();
|
CEF_REQUIRE_UIT();
|
||||||
auto browser_context = AsBrowserContext();
|
auto browser_context = AsBrowserContext();
|
||||||
@@ -470,12 +472,3 @@ CefMediaRouterManager* CefBrowserContext::GetMediaRouterManager() {
|
|||||||
}
|
}
|
||||||
return media_router_manager_.get();
|
return media_router_manager_.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
CefBrowserContext::CookieableSchemes CefBrowserContext::GetCookieableSchemes()
|
|
||||||
const {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
if (cookieable_schemes_)
|
|
||||||
return cookieable_schemes_;
|
|
||||||
|
|
||||||
return CefCookieManagerImpl::GetGlobalCookieableSchemes();
|
|
||||||
}
|
|
||||||
|
@@ -27,7 +27,7 @@
|
|||||||
// Content API representation of a browser. Created by BHI or the system (for
|
// Content API representation of a browser. Created by BHI or the system (for
|
||||||
// popups) and owned by BHI. Keeps a pointer to the content::BrowserContext.
|
// popups) and owned by BHI. Keeps a pointer to the content::BrowserContext.
|
||||||
//
|
//
|
||||||
// BHI = AlloyBrowserHostImpl
|
// BHI = CefBrowserHostImpl
|
||||||
// Implements the CefBrowser and CefBrowserHost interfaces which are exposed
|
// Implements the CefBrowser and CefBrowserHost interfaces which are exposed
|
||||||
// to clients. References an RCI instance. Owns a WC. Lifespan is controlled
|
// to clients. References an RCI instance. Owns a WC. Lifespan is controlled
|
||||||
// by client references and CefBrowserInfoManager (until the browser has
|
// by client references and CefBrowserInfoManager (until the browser has
|
||||||
@@ -62,9 +62,9 @@
|
|||||||
//
|
//
|
||||||
//
|
//
|
||||||
// How shutdown works:
|
// How shutdown works:
|
||||||
// 1. AlloyBrowserHostImpl::DestroyBrowser is called on the UI thread after the
|
// 1. CefBrowserHostImpl::DestroyBrowser is called on the UI thread after the
|
||||||
// browser is closed and deletes the WebContents.
|
// browser is closed and deletes the WebContents.
|
||||||
// 1. AlloyBrowserHostImpl is destroyed on any thread when the last reference
|
// 1. CefBrowserHostImpl is destroyed on any thread when the last reference
|
||||||
// is released.
|
// is released.
|
||||||
// 2. CefRequestContextImpl is destroyed (possibly asynchronously) on the UI
|
// 2. CefRequestContextImpl is destroyed (possibly asynchronously) on the UI
|
||||||
// thread when the last reference is released.
|
// thread when the last reference is released.
|
||||||
@@ -85,7 +85,7 @@ class Profile;
|
|||||||
|
|
||||||
// Main entry point for configuring behavior on a per-RequestContext basis. The
|
// Main entry point for configuring behavior on a per-RequestContext basis. The
|
||||||
// content::BrowserContext represented by this class is passed to
|
// content::BrowserContext represented by this class is passed to
|
||||||
// WebContents::Create in AlloyBrowserHostImpl::CreateInternal. Only accessed on
|
// WebContents::Create in CefBrowserHostImpl::CreateInternal. Only accessed on
|
||||||
// the UI thread unless otherwise indicated.
|
// the UI thread unless otherwise indicated.
|
||||||
class CefBrowserContext {
|
class CefBrowserContext {
|
||||||
public:
|
public:
|
||||||
@@ -188,20 +188,19 @@ class CefBrowserContext {
|
|||||||
// Returns true if this context supports print preview.
|
// Returns true if this context supports print preview.
|
||||||
virtual bool IsPrintPreviewSupported() const;
|
virtual bool IsPrintPreviewSupported() const;
|
||||||
|
|
||||||
|
// Called from CefBrowserHostImpl::DidNavigateAnyFrame to update the table of
|
||||||
|
// visited links.
|
||||||
|
virtual void AddVisitedURLs(const std::vector<GURL>& urls);
|
||||||
|
|
||||||
network::mojom::NetworkContext* GetNetworkContext();
|
network::mojom::NetworkContext* GetNetworkContext();
|
||||||
|
|
||||||
CefMediaRouterManager* GetMediaRouterManager();
|
CefMediaRouterManager* GetMediaRouterManager();
|
||||||
|
|
||||||
using CookieableSchemes = base::Optional<std::vector<std::string>>;
|
using CookieableSchemes = base::Optional<std::vector<std::string>>;
|
||||||
|
|
||||||
// Returns the schemes associated with this context specifically, or the
|
|
||||||
// global configuration if unset.
|
|
||||||
CookieableSchemes GetCookieableSchemes() const;
|
|
||||||
|
|
||||||
// Set the schemes associated with this context specifically.
|
|
||||||
void set_cookieable_schemes(const CookieableSchemes& schemes) {
|
void set_cookieable_schemes(const CookieableSchemes& schemes) {
|
||||||
cookieable_schemes_ = schemes;
|
cookieable_schemes_ = schemes;
|
||||||
}
|
}
|
||||||
|
CookieableSchemes cookieable_schemes() const { return cookieable_schemes_; }
|
||||||
|
|
||||||
// These accessors are safe to call from any thread because the values don't
|
// These accessors are safe to call from any thread because the values don't
|
||||||
// change during this object's lifespan.
|
// change during this object's lifespan.
|
||||||
|
@@ -6,7 +6,6 @@
|
|||||||
#include "libcef/common/extensions/extensions_util.h"
|
#include "libcef/common/extensions/extensions_util.h"
|
||||||
|
|
||||||
#include "chrome/browser/content_settings/cookie_settings_factory.h"
|
#include "chrome/browser/content_settings/cookie_settings_factory.h"
|
||||||
#include "chrome/browser/media/router/chrome_media_router_factory.h"
|
|
||||||
#include "chrome/browser/plugins/plugin_prefs_factory.h"
|
#include "chrome/browser/plugins/plugin_prefs_factory.h"
|
||||||
#include "chrome/browser/profiles/renderer_updater_factory.h"
|
#include "chrome/browser/profiles/renderer_updater_factory.h"
|
||||||
#include "chrome/browser/spellchecker/spellcheck_factory.h"
|
#include "chrome/browser/spellchecker/spellcheck_factory.h"
|
||||||
@@ -20,7 +19,6 @@ namespace cef {
|
|||||||
|
|
||||||
void EnsureBrowserContextKeyedServiceFactoriesBuilt() {
|
void EnsureBrowserContextKeyedServiceFactoriesBuilt() {
|
||||||
CookieSettingsFactory::GetInstance();
|
CookieSettingsFactory::GetInstance();
|
||||||
media_router::ChromeMediaRouterFactory::GetInstance();
|
|
||||||
PluginPrefsFactory::GetInstance();
|
PluginPrefsFactory::GetInstance();
|
||||||
PrefsTabHelper::GetServiceInstance();
|
PrefsTabHelper::GetServiceInstance();
|
||||||
RendererUpdaterFactory::GetInstance();
|
RendererUpdaterFactory::GetInstance();
|
||||||
|
@@ -1,789 +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/browser_host_base.h"
|
|
||||||
|
|
||||||
#include "libcef/browser/browser_info_manager.h"
|
|
||||||
#include "libcef/browser/browser_platform_delegate.h"
|
|
||||||
#include "libcef/browser/image_impl.h"
|
|
||||||
#include "libcef/browser/navigation_entry_impl.h"
|
|
||||||
#include "libcef/browser/net/scheme_handler.h"
|
|
||||||
#include "libcef/browser/thread_util.h"
|
|
||||||
|
|
||||||
#include "base/logging.h"
|
|
||||||
#include "chrome/browser/spellchecker/spellcheck_factory.h"
|
|
||||||
#include "chrome/browser/spellchecker/spellcheck_service.h"
|
|
||||||
#include "components/favicon/core/favicon_url.h"
|
|
||||||
#include "components/spellcheck/common/spellcheck_features.h"
|
|
||||||
#include "content/public/browser/browser_context.h"
|
|
||||||
#include "content/public/browser/download_manager.h"
|
|
||||||
#include "content/public/browser/download_request_utils.h"
|
|
||||||
#include "content/public/browser/navigation_entry.h"
|
|
||||||
#include "ui/gfx/image/image_skia.h"
|
|
||||||
|
|
||||||
#if defined(OS_MAC)
|
|
||||||
#include "components/spellcheck/browser/spellcheck_platform.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
// Associates a CefBrowserHostBase instance with a WebContents. This object will
|
|
||||||
// be deleted automatically when the WebContents is destroyed.
|
|
||||||
class WebContentsUserDataAdapter : public base::SupportsUserData::Data {
|
|
||||||
public:
|
|
||||||
static void Register(CefRefPtr<CefBrowserHostBase> browser) {
|
|
||||||
new WebContentsUserDataAdapter(browser);
|
|
||||||
}
|
|
||||||
|
|
||||||
static CefRefPtr<CefBrowserHostBase> Get(
|
|
||||||
const content::WebContents* web_contents) {
|
|
||||||
WebContentsUserDataAdapter* adapter =
|
|
||||||
static_cast<WebContentsUserDataAdapter*>(
|
|
||||||
web_contents->GetUserData(UserDataKey()));
|
|
||||||
if (adapter)
|
|
||||||
return adapter->browser_;
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
WebContentsUserDataAdapter(CefRefPtr<CefBrowserHostBase> browser)
|
|
||||||
: browser_(browser) {
|
|
||||||
auto web_contents = browser->GetWebContents();
|
|
||||||
DCHECK(web_contents);
|
|
||||||
web_contents->SetUserData(UserDataKey(), base::WrapUnique(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void* UserDataKey() {
|
|
||||||
// We just need a unique constant. Use the address of a static that
|
|
||||||
// COMDAT folding won't touch in an optimizing linker.
|
|
||||||
static int data_key = 0;
|
|
||||||
return reinterpret_cast<void*>(&data_key);
|
|
||||||
}
|
|
||||||
|
|
||||||
CefRefPtr<CefBrowserHostBase> browser_;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
// static
|
|
||||||
CefRefPtr<CefBrowserHostBase> CefBrowserHostBase::GetBrowserForHost(
|
|
||||||
const content::RenderViewHost* host) {
|
|
||||||
DCHECK(host);
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
content::WebContents* web_contents = content::WebContents::FromRenderViewHost(
|
|
||||||
const_cast<content::RenderViewHost*>(host));
|
|
||||||
if (web_contents)
|
|
||||||
return GetBrowserForContents(web_contents);
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
CefRefPtr<CefBrowserHostBase> CefBrowserHostBase::GetBrowserForHost(
|
|
||||||
const content::RenderFrameHost* host) {
|
|
||||||
DCHECK(host);
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
content::WebContents* web_contents =
|
|
||||||
content::WebContents::FromRenderFrameHost(
|
|
||||||
const_cast<content::RenderFrameHost*>(host));
|
|
||||||
if (web_contents)
|
|
||||||
return GetBrowserForContents(web_contents);
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
CefRefPtr<CefBrowserHostBase> CefBrowserHostBase::GetBrowserForContents(
|
|
||||||
const content::WebContents* contents) {
|
|
||||||
DCHECK(contents);
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
return WebContentsUserDataAdapter::Get(contents);
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
CefRefPtr<CefBrowserHostBase> CefBrowserHostBase::GetBrowserForFrameTreeNode(
|
|
||||||
int frame_tree_node_id) {
|
|
||||||
// Use the thread-safe approach.
|
|
||||||
auto info =
|
|
||||||
CefBrowserInfoManager::GetInstance()->GetBrowserInfoForFrameTreeNode(
|
|
||||||
frame_tree_node_id);
|
|
||||||
if (info) {
|
|
||||||
auto browser = info->browser();
|
|
||||||
if (!browser) {
|
|
||||||
LOG(WARNING) << "Found browser id " << info->browser_id()
|
|
||||||
<< " but no browser object matching frame tree node id "
|
|
||||||
<< frame_tree_node_id;
|
|
||||||
}
|
|
||||||
return browser;
|
|
||||||
}
|
|
||||||
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
CefRefPtr<CefBrowserHostBase> CefBrowserHostBase::GetBrowserForFrameRoute(
|
|
||||||
int render_process_id,
|
|
||||||
int render_routing_id) {
|
|
||||||
if (render_process_id == -1 || render_routing_id == MSG_ROUTING_NONE)
|
|
||||||
return nullptr;
|
|
||||||
|
|
||||||
if (CEF_CURRENTLY_ON_UIT()) {
|
|
||||||
// Use the non-thread-safe but potentially faster approach.
|
|
||||||
content::RenderFrameHost* render_frame_host =
|
|
||||||
content::RenderFrameHost::FromID(render_process_id, render_routing_id);
|
|
||||||
if (!render_frame_host)
|
|
||||||
return nullptr;
|
|
||||||
return GetBrowserForHost(render_frame_host);
|
|
||||||
} else {
|
|
||||||
// Use the thread-safe approach.
|
|
||||||
bool is_guest_view = false;
|
|
||||||
auto info =
|
|
||||||
CefBrowserInfoManager::GetInstance()->GetBrowserInfoForFrameRoute(
|
|
||||||
render_process_id, render_routing_id, &is_guest_view);
|
|
||||||
if (info && !is_guest_view) {
|
|
||||||
auto browser = info->browser();
|
|
||||||
if (!browser) {
|
|
||||||
LOG(WARNING) << "Found browser id " << info->browser_id()
|
|
||||||
<< " but no browser object matching frame process id "
|
|
||||||
<< render_process_id << " and routing id "
|
|
||||||
<< render_routing_id;
|
|
||||||
}
|
|
||||||
return browser;
|
|
||||||
}
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CefBrowserHostBase::CefBrowserHostBase(
|
|
||||||
const CefBrowserSettings& settings,
|
|
||||||
CefRefPtr<CefClient> client,
|
|
||||||
std::unique_ptr<CefBrowserPlatformDelegate> platform_delegate,
|
|
||||||
scoped_refptr<CefBrowserInfo> browser_info,
|
|
||||||
CefRefPtr<CefRequestContextImpl> request_context)
|
|
||||||
: settings_(settings),
|
|
||||||
client_(client),
|
|
||||||
platform_delegate_(std::move(platform_delegate)),
|
|
||||||
browser_info_(browser_info),
|
|
||||||
request_context_(request_context) {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
DCHECK(!browser_info_->browser().get());
|
|
||||||
browser_info_->SetBrowser(this);
|
|
||||||
|
|
||||||
contents_delegate_ =
|
|
||||||
std::make_unique<CefBrowserContentsDelegate>(browser_info_);
|
|
||||||
contents_delegate_->AddObserver(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::InitializeBrowser() {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
|
|
||||||
// Associate the WebContents with this browser object.
|
|
||||||
DCHECK(GetWebContents());
|
|
||||||
WebContentsUserDataAdapter::Register(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::DestroyBrowser() {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
|
|
||||||
platform_delegate_.reset(nullptr);
|
|
||||||
|
|
||||||
contents_delegate_->RemoveObserver(this);
|
|
||||||
contents_delegate_->ObserveWebContents(nullptr);
|
|
||||||
|
|
||||||
CefBrowserInfoManager::GetInstance()->RemoveBrowserInfo(browser_info_);
|
|
||||||
browser_info_->SetBrowser(nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
CefRefPtr<CefBrowser> CefBrowserHostBase::GetBrowser() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
CefRefPtr<CefClient> CefBrowserHostBase::GetClient() {
|
|
||||||
return client_;
|
|
||||||
}
|
|
||||||
|
|
||||||
CefRefPtr<CefRequestContext> CefBrowserHostBase::GetRequestContext() {
|
|
||||||
return request_context_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::StartDownload(const CefString& url) {
|
|
||||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
|
||||||
CEF_POST_TASK(
|
|
||||||
CEF_UIT, base::BindOnce(&CefBrowserHostBase::StartDownload, this, url));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
GURL gurl = GURL(url.ToString());
|
|
||||||
if (gurl.is_empty() || !gurl.is_valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
auto web_contents = GetWebContents();
|
|
||||||
if (!web_contents)
|
|
||||||
return;
|
|
||||||
|
|
||||||
auto browser_context = web_contents->GetBrowserContext();
|
|
||||||
if (!browser_context)
|
|
||||||
return;
|
|
||||||
|
|
||||||
content::DownloadManager* manager =
|
|
||||||
content::BrowserContext::GetDownloadManager(browser_context);
|
|
||||||
if (!manager)
|
|
||||||
return;
|
|
||||||
|
|
||||||
std::unique_ptr<download::DownloadUrlParameters> params(
|
|
||||||
content::DownloadRequestUtils::CreateDownloadForWebContentsMainFrame(
|
|
||||||
web_contents, gurl, MISSING_TRAFFIC_ANNOTATION));
|
|
||||||
manager->DownloadUrl(std::move(params));
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::DownloadImage(
|
|
||||||
const CefString& image_url,
|
|
||||||
bool is_favicon,
|
|
||||||
uint32 max_image_size,
|
|
||||||
bool bypass_cache,
|
|
||||||
CefRefPtr<CefDownloadImageCallback> callback) {
|
|
||||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
|
||||||
CEF_POST_TASK(
|
|
||||||
CEF_UIT,
|
|
||||||
base::BindOnce(&CefBrowserHostBase::DownloadImage, this, image_url,
|
|
||||||
is_favicon, max_image_size, bypass_cache, callback));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!callback)
|
|
||||||
return;
|
|
||||||
|
|
||||||
GURL gurl = GURL(image_url.ToString());
|
|
||||||
if (gurl.is_empty() || !gurl.is_valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
auto web_contents = GetWebContents();
|
|
||||||
if (!web_contents)
|
|
||||||
return;
|
|
||||||
|
|
||||||
web_contents->DownloadImage(
|
|
||||||
gurl, is_favicon, max_image_size,
|
|
||||||
max_image_size * gfx::ImageSkia::GetMaxSupportedScale(), bypass_cache,
|
|
||||||
base::BindOnce(
|
|
||||||
[](uint32 max_image_size,
|
|
||||||
CefRefPtr<CefDownloadImageCallback> callback, int id,
|
|
||||||
int http_status_code, const GURL& image_url,
|
|
||||||
const std::vector<SkBitmap>& bitmaps,
|
|
||||||
const std::vector<gfx::Size>& sizes) {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
|
|
||||||
CefRefPtr<CefImageImpl> image_impl;
|
|
||||||
|
|
||||||
if (!bitmaps.empty()) {
|
|
||||||
image_impl = new CefImageImpl();
|
|
||||||
image_impl->AddBitmaps(max_image_size, bitmaps);
|
|
||||||
}
|
|
||||||
|
|
||||||
callback->OnDownloadImageFinished(
|
|
||||||
image_url.spec(), http_status_code, image_impl.get());
|
|
||||||
},
|
|
||||||
max_image_size, callback));
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::GetNavigationEntries(
|
|
||||||
CefRefPtr<CefNavigationEntryVisitor> visitor,
|
|
||||||
bool current_only) {
|
|
||||||
DCHECK(visitor.get());
|
|
||||||
if (!visitor.get())
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
|
||||||
CEF_POST_TASK(
|
|
||||||
CEF_UIT, base::BindOnce(&CefBrowserHostBase::GetNavigationEntries, this,
|
|
||||||
visitor, current_only));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto web_contents = GetWebContents();
|
|
||||||
if (!web_contents)
|
|
||||||
return;
|
|
||||||
|
|
||||||
content::NavigationController& controller = web_contents->GetController();
|
|
||||||
const int total = controller.GetEntryCount();
|
|
||||||
const int current = controller.GetCurrentEntryIndex();
|
|
||||||
|
|
||||||
if (current_only) {
|
|
||||||
// Visit only the current entry.
|
|
||||||
CefRefPtr<CefNavigationEntryImpl> entry =
|
|
||||||
new CefNavigationEntryImpl(controller.GetEntryAtIndex(current));
|
|
||||||
visitor->Visit(entry.get(), true, current, total);
|
|
||||||
entry->Detach(nullptr);
|
|
||||||
} else {
|
|
||||||
// Visit all entries.
|
|
||||||
bool cont = true;
|
|
||||||
for (int i = 0; i < total && cont; ++i) {
|
|
||||||
CefRefPtr<CefNavigationEntryImpl> entry =
|
|
||||||
new CefNavigationEntryImpl(controller.GetEntryAtIndex(i));
|
|
||||||
cont = visitor->Visit(entry.get(), (i == current), i, total);
|
|
||||||
entry->Detach(nullptr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CefRefPtr<CefNavigationEntry> CefBrowserHostBase::GetVisibleNavigationEntry() {
|
|
||||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
|
||||||
NOTREACHED() << "called on invalid thread";
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
content::NavigationEntry* entry = nullptr;
|
|
||||||
auto web_contents = GetWebContents();
|
|
||||||
if (web_contents)
|
|
||||||
entry = web_contents->GetController().GetVisibleEntry();
|
|
||||||
|
|
||||||
if (!entry)
|
|
||||||
return nullptr;
|
|
||||||
|
|
||||||
return new CefNavigationEntryImpl(entry);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::ReplaceMisspelling(const CefString& word) {
|
|
||||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
|
||||||
CEF_POST_TASK(
|
|
||||||
CEF_UIT,
|
|
||||||
base::BindOnce(&CefBrowserHostBase::ReplaceMisspelling, this, word));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto web_contents = GetWebContents();
|
|
||||||
if (web_contents)
|
|
||||||
web_contents->ReplaceMisspelling(word);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::AddWordToDictionary(const CefString& word) {
|
|
||||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
|
||||||
CEF_POST_TASK(
|
|
||||||
CEF_UIT,
|
|
||||||
base::BindOnce(&CefBrowserHostBase::AddWordToDictionary, this, word));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto web_contents = GetWebContents();
|
|
||||||
if (!web_contents)
|
|
||||||
return;
|
|
||||||
|
|
||||||
SpellcheckService* spellcheck = nullptr;
|
|
||||||
content::BrowserContext* browser_context = web_contents->GetBrowserContext();
|
|
||||||
if (browser_context) {
|
|
||||||
spellcheck = SpellcheckServiceFactory::GetForContext(browser_context);
|
|
||||||
if (spellcheck)
|
|
||||||
spellcheck->GetCustomDictionary()->AddWord(word);
|
|
||||||
}
|
|
||||||
#if defined(OS_MAC)
|
|
||||||
if (spellcheck && spellcheck::UseBrowserSpellChecker()) {
|
|
||||||
spellcheck_platform::AddWord(spellcheck->platform_spell_checker(), word);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::SendKeyEvent(const CefKeyEvent& event) {
|
|
||||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
|
||||||
CEF_POST_TASK(CEF_UIT, base::BindOnce(&CefBrowserHostBase::SendKeyEvent,
|
|
||||||
this, event));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (platform_delegate_)
|
|
||||||
platform_delegate_->SendKeyEvent(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::SendMouseClickEvent(const CefMouseEvent& event,
|
|
||||||
MouseButtonType type,
|
|
||||||
bool mouseUp,
|
|
||||||
int clickCount) {
|
|
||||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
|
||||||
CEF_POST_TASK(CEF_UIT,
|
|
||||||
base::BindOnce(&CefBrowserHostBase::SendMouseClickEvent, this,
|
|
||||||
event, type, mouseUp, clickCount));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (platform_delegate_) {
|
|
||||||
platform_delegate_->SendMouseClickEvent(event, type, mouseUp, clickCount);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::SendMouseMoveEvent(const CefMouseEvent& event,
|
|
||||||
bool mouseLeave) {
|
|
||||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
|
||||||
CEF_POST_TASK(CEF_UIT,
|
|
||||||
base::BindOnce(&CefBrowserHostBase::SendMouseMoveEvent, this,
|
|
||||||
event, mouseLeave));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (platform_delegate_) {
|
|
||||||
platform_delegate_->SendMouseMoveEvent(event, mouseLeave);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::SendMouseWheelEvent(const CefMouseEvent& event,
|
|
||||||
int deltaX,
|
|
||||||
int deltaY) {
|
|
||||||
if (deltaX == 0 && deltaY == 0) {
|
|
||||||
// Nothing to do.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
|
||||||
CEF_POST_TASK(CEF_UIT,
|
|
||||||
base::BindOnce(&CefBrowserHostBase::SendMouseWheelEvent, this,
|
|
||||||
event, deltaX, deltaY));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (platform_delegate_) {
|
|
||||||
platform_delegate_->SendMouseWheelEvent(event, deltaX, deltaY);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CefRefPtr<CefBrowserHost> CefBrowserHostBase::GetHost() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CefBrowserHostBase::CanGoBack() {
|
|
||||||
base::AutoLock lock_scope(state_lock_);
|
|
||||||
return can_go_back_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::GoBack() {
|
|
||||||
auto callback = base::BindOnce(&CefBrowserHostBase::GoBack, this);
|
|
||||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
|
||||||
CEF_POST_TASK(CEF_UIT, std::move(callback));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (browser_info_->IsNavigationLocked(std::move(callback))) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto wc = GetWebContents();
|
|
||||||
if (wc && wc->GetController().CanGoBack()) {
|
|
||||||
wc->GetController().GoBack();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CefBrowserHostBase::CanGoForward() {
|
|
||||||
base::AutoLock lock_scope(state_lock_);
|
|
||||||
return can_go_forward_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::GoForward() {
|
|
||||||
auto callback = base::BindOnce(&CefBrowserHostBase::GoForward, this);
|
|
||||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
|
||||||
CEF_POST_TASK(CEF_UIT, std::move(callback));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (browser_info_->IsNavigationLocked(std::move(callback))) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto wc = GetWebContents();
|
|
||||||
if (wc && wc->GetController().CanGoForward()) {
|
|
||||||
wc->GetController().GoForward();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CefBrowserHostBase::IsLoading() {
|
|
||||||
base::AutoLock lock_scope(state_lock_);
|
|
||||||
return is_loading_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::Reload() {
|
|
||||||
auto callback = base::BindOnce(&CefBrowserHostBase::Reload, this);
|
|
||||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
|
||||||
CEF_POST_TASK(CEF_UIT, std::move(callback));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (browser_info_->IsNavigationLocked(std::move(callback))) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto wc = GetWebContents();
|
|
||||||
if (wc) {
|
|
||||||
wc->GetController().Reload(content::ReloadType::NORMAL, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::ReloadIgnoreCache() {
|
|
||||||
auto callback = base::BindOnce(&CefBrowserHostBase::ReloadIgnoreCache, this);
|
|
||||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
|
||||||
CEF_POST_TASK(CEF_UIT, std::move(callback));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (browser_info_->IsNavigationLocked(std::move(callback))) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto wc = GetWebContents();
|
|
||||||
if (wc) {
|
|
||||||
wc->GetController().Reload(content::ReloadType::BYPASSING_CACHE, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::StopLoad() {
|
|
||||||
auto callback = base::BindOnce(&CefBrowserHostBase::StopLoad, this);
|
|
||||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
|
||||||
CEF_POST_TASK(CEF_UIT, std::move(callback));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (browser_info_->IsNavigationLocked(std::move(callback))) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto wc = GetWebContents();
|
|
||||||
if (wc) {
|
|
||||||
wc->Stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int CefBrowserHostBase::GetIdentifier() {
|
|
||||||
return browser_id();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CefBrowserHostBase::IsSame(CefRefPtr<CefBrowser> that) {
|
|
||||||
auto impl = static_cast<CefBrowserHostBase*>(that.get());
|
|
||||||
return (impl == this);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CefBrowserHostBase::HasDocument() {
|
|
||||||
base::AutoLock lock_scope(state_lock_);
|
|
||||||
return has_document_;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CefBrowserHostBase::IsPopup() {
|
|
||||||
return browser_info_->is_popup();
|
|
||||||
}
|
|
||||||
|
|
||||||
CefRefPtr<CefFrame> CefBrowserHostBase::GetMainFrame() {
|
|
||||||
return GetFrame(CefFrameHostImpl::kMainFrameId);
|
|
||||||
}
|
|
||||||
|
|
||||||
CefRefPtr<CefFrame> CefBrowserHostBase::GetFocusedFrame() {
|
|
||||||
return GetFrame(CefFrameHostImpl::kFocusedFrameId);
|
|
||||||
}
|
|
||||||
|
|
||||||
CefRefPtr<CefFrame> CefBrowserHostBase::GetFrame(int64 identifier) {
|
|
||||||
if (identifier == CefFrameHostImpl::kInvalidFrameId) {
|
|
||||||
return nullptr;
|
|
||||||
} else if (identifier == CefFrameHostImpl::kMainFrameId) {
|
|
||||||
return browser_info_->GetMainFrame();
|
|
||||||
} else if (identifier == CefFrameHostImpl::kFocusedFrameId) {
|
|
||||||
base::AutoLock lock_scope(state_lock_);
|
|
||||||
if (!focused_frame_) {
|
|
||||||
// The main frame is focused by default.
|
|
||||||
return browser_info_->GetMainFrame();
|
|
||||||
}
|
|
||||||
return focused_frame_;
|
|
||||||
}
|
|
||||||
|
|
||||||
return browser_info_->GetFrameForId(identifier);
|
|
||||||
}
|
|
||||||
|
|
||||||
CefRefPtr<CefFrame> CefBrowserHostBase::GetFrame(const CefString& name) {
|
|
||||||
for (const auto& frame : browser_info_->GetAllFrames()) {
|
|
||||||
if (frame->GetName() == name)
|
|
||||||
return frame;
|
|
||||||
}
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t CefBrowserHostBase::GetFrameCount() {
|
|
||||||
return browser_info_->GetAllFrames().size();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::GetFrameIdentifiers(std::vector<int64>& identifiers) {
|
|
||||||
if (identifiers.size() > 0)
|
|
||||||
identifiers.clear();
|
|
||||||
|
|
||||||
const auto frames = browser_info_->GetAllFrames();
|
|
||||||
if (frames.empty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
identifiers.reserve(frames.size());
|
|
||||||
for (const auto& frame : frames) {
|
|
||||||
identifiers.push_back(frame->GetIdentifier());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::GetFrameNames(std::vector<CefString>& names) {
|
|
||||||
if (names.size() > 0)
|
|
||||||
names.clear();
|
|
||||||
|
|
||||||
const auto frames = browser_info_->GetAllFrames();
|
|
||||||
if (frames.empty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
names.reserve(frames.size());
|
|
||||||
for (const auto& frame : frames) {
|
|
||||||
names.push_back(frame->GetName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::OnStateChanged(CefBrowserContentsState state_changed) {
|
|
||||||
// Make sure that CefBrowser state is consistent before the associated
|
|
||||||
// CefClient callback is executed.
|
|
||||||
base::AutoLock lock_scope(state_lock_);
|
|
||||||
if ((state_changed & CefBrowserContentsState::kNavigation) ==
|
|
||||||
CefBrowserContentsState::kNavigation) {
|
|
||||||
is_loading_ = contents_delegate_->is_loading();
|
|
||||||
can_go_back_ = contents_delegate_->can_go_back();
|
|
||||||
can_go_forward_ = contents_delegate_->can_go_forward();
|
|
||||||
}
|
|
||||||
if ((state_changed & CefBrowserContentsState::kDocument) ==
|
|
||||||
CefBrowserContentsState::kDocument) {
|
|
||||||
has_document_ = contents_delegate_->has_document();
|
|
||||||
}
|
|
||||||
if ((state_changed & CefBrowserContentsState::kFullscreen) ==
|
|
||||||
CefBrowserContentsState::kFullscreen) {
|
|
||||||
is_fullscreen_ = contents_delegate_->is_fullscreen();
|
|
||||||
}
|
|
||||||
if ((state_changed & CefBrowserContentsState::kFocusedFrame) ==
|
|
||||||
CefBrowserContentsState::kFocusedFrame) {
|
|
||||||
focused_frame_ = contents_delegate_->focused_frame();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::OnWebContentsDestroyed(
|
|
||||||
content::WebContents* web_contents) {}
|
|
||||||
|
|
||||||
CefRefPtr<CefFrame> CefBrowserHostBase::GetFrameForHost(
|
|
||||||
const content::RenderFrameHost* host) {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
if (!host)
|
|
||||||
return nullptr;
|
|
||||||
|
|
||||||
return browser_info_->GetFrameForHost(host);
|
|
||||||
}
|
|
||||||
|
|
||||||
CefRefPtr<CefFrame> CefBrowserHostBase::GetFrameForFrameTreeNode(
|
|
||||||
int frame_tree_node_id) {
|
|
||||||
return browser_info_->GetFrameForFrameTreeNode(frame_tree_node_id, nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::AddObserver(Observer* observer) {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
observers_.AddObserver(observer);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::RemoveObserver(Observer* observer) {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
observers_.RemoveObserver(observer);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CefBrowserHostBase::HasObserver(Observer* observer) const {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
return observers_.HasObserver(observer);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::LoadMainFrameURL(
|
|
||||||
const content::OpenURLParams& params) {
|
|
||||||
if (!params.url.is_valid()) {
|
|
||||||
LOG(ERROR) << "Invalid URL: " << params.url.spec();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto callback =
|
|
||||||
base::BindOnce(&CefBrowserHostBase::LoadMainFrameURL, this, params);
|
|
||||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
|
||||||
CEF_POST_TASK(CEF_UIT, std::move(callback));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (browser_info_->IsNavigationLocked(std::move(callback))) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Navigate(params)) {
|
|
||||||
OnSetFocus(FOCUS_SOURCE_NAVIGATION);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CefBrowserHostBase::Navigate(const content::OpenURLParams& params) {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
auto web_contents = GetWebContents();
|
|
||||||
if (web_contents) {
|
|
||||||
web_contents->GetController().LoadURL(
|
|
||||||
params.url, params.referrer, params.transition, params.extra_headers);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::OnDidFinishLoad(CefRefPtr<CefFrameHostImpl> frame,
|
|
||||||
const GURL& validated_url,
|
|
||||||
int http_status_code) {
|
|
||||||
frame->RefreshAttributes();
|
|
||||||
|
|
||||||
// Give internal scheme handlers an opportunity to update content.
|
|
||||||
scheme::DidFinishLoad(frame, validated_url);
|
|
||||||
|
|
||||||
contents_delegate_->OnLoadEnd(frame, validated_url, http_status_code);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::ViewText(const std::string& text) {
|
|
||||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
|
||||||
CEF_POST_TASK(CEF_UIT,
|
|
||||||
base::BindOnce(&CefBrowserHostBase::ViewText, this, text));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (platform_delegate_)
|
|
||||||
platform_delegate_->ViewText(text);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CefBrowserHostBase::MaybeAllowNavigation(
|
|
||||||
content::RenderFrameHost* opener,
|
|
||||||
bool is_guest_view,
|
|
||||||
const content::OpenURLParams& params) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::OnAfterCreated() {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
if (client_) {
|
|
||||||
if (auto handler = client_->GetLifeSpanHandler()) {
|
|
||||||
handler->OnAfterCreated(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::OnBeforeClose() {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
if (client_) {
|
|
||||||
if (auto handler = client_->GetLifeSpanHandler()) {
|
|
||||||
handler->OnBeforeClose(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserHostBase::OnBrowserDestroyed() {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
for (auto& observer : observers_)
|
|
||||||
observer.OnBrowserDestroyed(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
int CefBrowserHostBase::browser_id() const {
|
|
||||||
return browser_info_->browser_id();
|
|
||||||
}
|
|
||||||
|
|
||||||
content::WebContents* CefBrowserHostBase::GetWebContents() const {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
return contents_delegate_->web_contents();
|
|
||||||
}
|
|
||||||
|
|
||||||
content::BrowserContext* CefBrowserHostBase::GetBrowserContext() const {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
auto web_contents = GetWebContents();
|
|
||||||
if (web_contents)
|
|
||||||
return web_contents->GetBrowserContext();
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
@@ -1,268 +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_BROWSER_HOST_BASE_H_
|
|
||||||
#define CEF_LIBCEF_BROWSER_BROWSER_HOST_BASE_H_
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "include/cef_browser.h"
|
|
||||||
#include "include/cef_client.h"
|
|
||||||
#include "include/views/cef_browser_view.h"
|
|
||||||
#include "libcef/browser/browser_contents_delegate.h"
|
|
||||||
#include "libcef/browser/browser_info.h"
|
|
||||||
#include "libcef/browser/browser_platform_delegate.h"
|
|
||||||
#include "libcef/browser/frame_host_impl.h"
|
|
||||||
#include "libcef/browser/request_context_impl.h"
|
|
||||||
|
|
||||||
#include "base/observer_list.h"
|
|
||||||
#include "base/synchronization/lock.h"
|
|
||||||
#include "extensions/common/view_type.h"
|
|
||||||
|
|
||||||
namespace extensions {
|
|
||||||
class Extension;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parameters that are passed to the runtime-specific Create methods.
|
|
||||||
struct CefBrowserCreateParams {
|
|
||||||
CefBrowserCreateParams() {}
|
|
||||||
|
|
||||||
// Copy constructor used with the chrome runtime only.
|
|
||||||
CefBrowserCreateParams(const CefBrowserCreateParams& that) {
|
|
||||||
operator=(that);
|
|
||||||
}
|
|
||||||
CefBrowserCreateParams& operator=(const CefBrowserCreateParams& that) {
|
|
||||||
// Not all parameters can be copied.
|
|
||||||
client = that.client;
|
|
||||||
url = that.url;
|
|
||||||
settings = that.settings;
|
|
||||||
request_context = that.request_context;
|
|
||||||
extra_info = that.extra_info;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Platform-specific window creation info. Will be nullptr when creating a
|
|
||||||
// views-hosted browser. Currently used with the alloy runtime only.
|
|
||||||
std::unique_ptr<CefWindowInfo> window_info;
|
|
||||||
|
|
||||||
#if defined(USE_AURA)
|
|
||||||
// The BrowserView that will own a views-hosted browser. Will be nullptr for
|
|
||||||
// popup browsers (the BrowserView will be created later in that case).
|
|
||||||
// Currently used with the alloy runtime only.
|
|
||||||
CefRefPtr<CefBrowserView> browser_view;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Client implementation. May be nullptr.
|
|
||||||
CefRefPtr<CefClient> client;
|
|
||||||
|
|
||||||
// Initial URL to load. May be empty. If this is a valid extension URL then
|
|
||||||
// the browser will be created as an app view extension host.
|
|
||||||
GURL url;
|
|
||||||
|
|
||||||
// Browser settings.
|
|
||||||
CefBrowserSettings settings;
|
|
||||||
|
|
||||||
// Other browser that opened this DevTools browser. Will be nullptr for non-
|
|
||||||
// DevTools browsers. Currently used with the alloy runtime only.
|
|
||||||
CefRefPtr<CefBrowserHostBase> devtools_opener;
|
|
||||||
|
|
||||||
// Request context to use when creating the browser. If nullptr the global
|
|
||||||
// request context will be used.
|
|
||||||
CefRefPtr<CefRequestContext> request_context;
|
|
||||||
|
|
||||||
// Extra information that will be passed to
|
|
||||||
// CefRenderProcessHandler::OnBrowserCreated.
|
|
||||||
CefRefPtr<CefDictionaryValue> extra_info;
|
|
||||||
|
|
||||||
// Used when explicitly creating the browser as an extension host via
|
|
||||||
// ProcessManager::CreateBackgroundHost. Currently used with the alloy
|
|
||||||
// runtime only.
|
|
||||||
const extensions::Extension* extension = nullptr;
|
|
||||||
extensions::ViewType extension_host_type = extensions::VIEW_TYPE_INVALID;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Base class for CefBrowserHost implementations. Includes functionality that is
|
|
||||||
// shared by the alloy and chrome runtimes. All methods are thread-safe unless
|
|
||||||
// otherwise indicated.
|
|
||||||
class CefBrowserHostBase : public CefBrowserHost,
|
|
||||||
public CefBrowser,
|
|
||||||
public CefBrowserContentsDelegate::Observer {
|
|
||||||
public:
|
|
||||||
// Interface to implement for observers that wish to be informed of changes
|
|
||||||
// to the CefBrowserHostBase. All methods will be called on the UI thread.
|
|
||||||
class Observer : public base::CheckedObserver {
|
|
||||||
public:
|
|
||||||
// Called before |browser| is destroyed. Any references to |browser| should
|
|
||||||
// be cleared when this method is called.
|
|
||||||
virtual void OnBrowserDestroyed(CefBrowserHostBase* browser) = 0;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual ~Observer() {}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Returns the browser associated with the specified RenderViewHost.
|
|
||||||
static CefRefPtr<CefBrowserHostBase> GetBrowserForHost(
|
|
||||||
const content::RenderViewHost* host);
|
|
||||||
// Returns the browser associated with the specified RenderFrameHost.
|
|
||||||
static CefRefPtr<CefBrowserHostBase> GetBrowserForHost(
|
|
||||||
const content::RenderFrameHost* host);
|
|
||||||
// Returns the browser associated with the specified WebContents.
|
|
||||||
static CefRefPtr<CefBrowserHostBase> GetBrowserForContents(
|
|
||||||
const content::WebContents* contents);
|
|
||||||
// Returns the browser associated with the specified FrameTreeNode ID.
|
|
||||||
static CefRefPtr<CefBrowserHostBase> GetBrowserForFrameTreeNode(
|
|
||||||
int frame_tree_node_id);
|
|
||||||
// Returns the browser associated with the specified frame routing IDs.
|
|
||||||
static CefRefPtr<CefBrowserHostBase> GetBrowserForFrameRoute(
|
|
||||||
int render_process_id,
|
|
||||||
int render_routing_id);
|
|
||||||
|
|
||||||
CefBrowserHostBase(
|
|
||||||
const CefBrowserSettings& settings,
|
|
||||||
CefRefPtr<CefClient> client,
|
|
||||||
std::unique_ptr<CefBrowserPlatformDelegate> platform_delegate,
|
|
||||||
scoped_refptr<CefBrowserInfo> browser_info,
|
|
||||||
CefRefPtr<CefRequestContextImpl> request_context);
|
|
||||||
|
|
||||||
// Called on the UI thread after the associated WebContents is created.
|
|
||||||
virtual void InitializeBrowser();
|
|
||||||
|
|
||||||
// Called on the UI thread after the associated WebContents is destroyed.
|
|
||||||
// Also called from CefBrowserInfoManager::DestroyAllBrowsers if the browser
|
|
||||||
// was not properly shut down.
|
|
||||||
virtual void DestroyBrowser();
|
|
||||||
|
|
||||||
// CefBrowserHost methods:
|
|
||||||
CefRefPtr<CefBrowser> GetBrowser() override;
|
|
||||||
CefRefPtr<CefClient> GetClient() override;
|
|
||||||
CefRefPtr<CefRequestContext> GetRequestContext() override;
|
|
||||||
void StartDownload(const CefString& url) override;
|
|
||||||
void DownloadImage(const CefString& image_url,
|
|
||||||
bool is_favicon,
|
|
||||||
uint32 max_image_size,
|
|
||||||
bool bypass_cache,
|
|
||||||
CefRefPtr<CefDownloadImageCallback> callback) override;
|
|
||||||
void ReplaceMisspelling(const CefString& word) override;
|
|
||||||
void AddWordToDictionary(const CefString& word) override;
|
|
||||||
void SendKeyEvent(const CefKeyEvent& event) override;
|
|
||||||
void SendMouseClickEvent(const CefMouseEvent& event,
|
|
||||||
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 GetNavigationEntries(CefRefPtr<CefNavigationEntryVisitor> visitor,
|
|
||||||
bool current_only) override;
|
|
||||||
CefRefPtr<CefNavigationEntry> GetVisibleNavigationEntry() override;
|
|
||||||
|
|
||||||
// CefBrowser methods:
|
|
||||||
CefRefPtr<CefBrowserHost> GetHost() override;
|
|
||||||
bool CanGoBack() override;
|
|
||||||
void GoBack() override;
|
|
||||||
bool CanGoForward() override;
|
|
||||||
void GoForward() override;
|
|
||||||
bool IsLoading() override;
|
|
||||||
void Reload() override;
|
|
||||||
void ReloadIgnoreCache() override;
|
|
||||||
void StopLoad() override;
|
|
||||||
int GetIdentifier() override;
|
|
||||||
bool IsSame(CefRefPtr<CefBrowser> that) override;
|
|
||||||
bool HasDocument() override;
|
|
||||||
bool IsPopup() override;
|
|
||||||
CefRefPtr<CefFrame> GetMainFrame() override;
|
|
||||||
CefRefPtr<CefFrame> GetFocusedFrame() override;
|
|
||||||
CefRefPtr<CefFrame> GetFrame(int64 identifier) override;
|
|
||||||
CefRefPtr<CefFrame> GetFrame(const CefString& name) override;
|
|
||||||
size_t GetFrameCount() override;
|
|
||||||
void GetFrameIdentifiers(std::vector<int64>& identifiers) override;
|
|
||||||
void GetFrameNames(std::vector<CefString>& names) override;
|
|
||||||
|
|
||||||
// CefBrowserContentsDelegate::Observer methods:
|
|
||||||
void OnStateChanged(CefBrowserContentsState state_changed) override;
|
|
||||||
void OnWebContentsDestroyed(content::WebContents* web_contents) override;
|
|
||||||
|
|
||||||
// Returns the frame associated with the specified RenderFrameHost.
|
|
||||||
CefRefPtr<CefFrame> GetFrameForHost(const content::RenderFrameHost* host);
|
|
||||||
|
|
||||||
// Returns the frame associated with the specified FrameTreeNode ID.
|
|
||||||
CefRefPtr<CefFrame> GetFrameForFrameTreeNode(int frame_tree_node_id);
|
|
||||||
|
|
||||||
// Manage observer objects. The observer must either outlive this object or
|
|
||||||
// be removed before destruction. Must be called on the UI thread.
|
|
||||||
void AddObserver(Observer* observer);
|
|
||||||
void RemoveObserver(Observer* observer);
|
|
||||||
bool HasObserver(Observer* observer) const;
|
|
||||||
|
|
||||||
// Methods called from CefFrameHostImpl.
|
|
||||||
void LoadMainFrameURL(const content::OpenURLParams& params);
|
|
||||||
void OnDidFinishLoad(CefRefPtr<CefFrameHostImpl> frame,
|
|
||||||
const GURL& validated_url,
|
|
||||||
int http_status_code);
|
|
||||||
virtual void OnSetFocus(cef_focus_source_t source) = 0;
|
|
||||||
void ViewText(const std::string& text);
|
|
||||||
|
|
||||||
// Called from CefBrowserInfoManager::MaybeAllowNavigation.
|
|
||||||
virtual bool MaybeAllowNavigation(content::RenderFrameHost* opener,
|
|
||||||
bool is_guest_view,
|
|
||||||
const content::OpenURLParams& params);
|
|
||||||
|
|
||||||
// Helpers for executing client callbacks. Must be called on the UI thread.
|
|
||||||
void OnAfterCreated();
|
|
||||||
void OnBeforeClose();
|
|
||||||
void OnBrowserDestroyed();
|
|
||||||
|
|
||||||
// Thread-safe accessors.
|
|
||||||
const CefBrowserSettings& settings() const { return settings_; }
|
|
||||||
CefRefPtr<CefClient> client() const { return client_; }
|
|
||||||
scoped_refptr<CefBrowserInfo> browser_info() const { return browser_info_; }
|
|
||||||
int browser_id() const;
|
|
||||||
CefRefPtr<CefRequestContextImpl> request_context() const {
|
|
||||||
return request_context_;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Accessors that must be called on the UI thread.
|
|
||||||
content::WebContents* GetWebContents() const;
|
|
||||||
content::BrowserContext* GetBrowserContext() const;
|
|
||||||
CefBrowserPlatformDelegate* platform_delegate() const {
|
|
||||||
return platform_delegate_.get();
|
|
||||||
}
|
|
||||||
CefBrowserContentsDelegate* contents_delegate() const {
|
|
||||||
return contents_delegate_.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
// Called from LoadMainFrameURL to perform the actual navigation.
|
|
||||||
virtual bool Navigate(const content::OpenURLParams& params);
|
|
||||||
|
|
||||||
// Thread-safe members.
|
|
||||||
CefBrowserSettings settings_;
|
|
||||||
CefRefPtr<CefClient> client_;
|
|
||||||
std::unique_ptr<CefBrowserPlatformDelegate> platform_delegate_;
|
|
||||||
scoped_refptr<CefBrowserInfo> browser_info_;
|
|
||||||
CefRefPtr<CefRequestContextImpl> request_context_;
|
|
||||||
|
|
||||||
// Only accessed on the UI thread.
|
|
||||||
std::unique_ptr<CefBrowserContentsDelegate> contents_delegate_;
|
|
||||||
|
|
||||||
// Observers that want to be notified of changes to this object.
|
|
||||||
// Only accessed on the UI thread.
|
|
||||||
base::ObserverList<Observer> observers_;
|
|
||||||
|
|
||||||
// Volatile state accessed from multiple threads. All access must be protected
|
|
||||||
// by |state_lock_|.
|
|
||||||
base::Lock state_lock_;
|
|
||||||
bool is_loading_ = false;
|
|
||||||
bool can_go_back_ = false;
|
|
||||||
bool can_go_forward_ = false;
|
|
||||||
bool has_document_ = false;
|
|
||||||
bool is_fullscreen_ = false;
|
|
||||||
CefRefPtr<CefFrameHostImpl> focused_frame_;
|
|
||||||
|
|
||||||
private:
|
|
||||||
IMPLEMENT_REFCOUNTING(CefBrowserHostBase);
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(CefBrowserHostBase);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // CEF_LIBCEF_BROWSER_BROWSER_HOST_BASE_H_
|
|
@@ -1,144 +0,0 @@
|
|||||||
// Copyright (c) 2012 The Chromium Embedded Framework Authors.
|
|
||||||
// Portions copyright (c) 2011 The Chromium Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
#include "include/cef_browser.h"
|
|
||||||
#include "libcef/browser/alloy/alloy_browser_host_impl.h"
|
|
||||||
#include "libcef/browser/chrome/chrome_browser_host_impl.h"
|
|
||||||
#include "libcef/browser/context.h"
|
|
||||||
#include "libcef/browser/thread_util.h"
|
|
||||||
#include "libcef/features/runtime.h"
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
class CreateBrowserHelper {
|
|
||||||
public:
|
|
||||||
CreateBrowserHelper(const CefWindowInfo& windowInfo,
|
|
||||||
CefRefPtr<CefClient> client,
|
|
||||||
const CefString& url,
|
|
||||||
const CefBrowserSettings& settings,
|
|
||||||
CefRefPtr<CefDictionaryValue> extra_info,
|
|
||||||
CefRefPtr<CefRequestContext> request_context)
|
|
||||||
: window_info_(windowInfo),
|
|
||||||
client_(client),
|
|
||||||
url_(url),
|
|
||||||
settings_(settings),
|
|
||||||
extra_info_(extra_info),
|
|
||||||
request_context_(request_context) {}
|
|
||||||
|
|
||||||
CefWindowInfo window_info_;
|
|
||||||
CefRefPtr<CefClient> client_;
|
|
||||||
CefString url_;
|
|
||||||
CefBrowserSettings settings_;
|
|
||||||
CefRefPtr<CefDictionaryValue> extra_info_;
|
|
||||||
CefRefPtr<CefRequestContext> request_context_;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
// static
|
|
||||||
bool CefBrowserHost::CreateBrowser(
|
|
||||||
const CefWindowInfo& windowInfo,
|
|
||||||
CefRefPtr<CefClient> client,
|
|
||||||
const CefString& url,
|
|
||||||
const CefBrowserSettings& settings,
|
|
||||||
CefRefPtr<CefDictionaryValue> extra_info,
|
|
||||||
CefRefPtr<CefRequestContext> request_context) {
|
|
||||||
// Verify that the context is in a valid state.
|
|
||||||
if (!CONTEXT_STATE_VALID()) {
|
|
||||||
NOTREACHED() << "context not valid";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Verify that the settings structure is a valid size.
|
|
||||||
if (settings.size != sizeof(cef_browser_settings_t)) {
|
|
||||||
NOTREACHED() << "invalid CefBrowserSettings structure size";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Verify windowless rendering requirements.
|
|
||||||
if (windowInfo.windowless_rendering_enabled &&
|
|
||||||
!client->GetRenderHandler().get()) {
|
|
||||||
NOTREACHED() << "CefRenderHandler implementation is required";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (windowInfo.windowless_rendering_enabled &&
|
|
||||||
!CefContext::Get()->settings().windowless_rendering_enabled) {
|
|
||||||
LOG(ERROR) << "Creating a windowless browser without setting "
|
|
||||||
"CefSettings.windowless_rendering_enabled may result in "
|
|
||||||
"reduced performance or runtime errors.";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create the browser on the UI thread.
|
|
||||||
CreateBrowserHelper* helper = new CreateBrowserHelper(
|
|
||||||
windowInfo, client, url, settings, extra_info, request_context);
|
|
||||||
CEF_POST_TASK(CEF_UIT, base::BindOnce(
|
|
||||||
[](CreateBrowserHelper* helper) {
|
|
||||||
CefBrowserHost::CreateBrowserSync(
|
|
||||||
helper->window_info_, helper->client_,
|
|
||||||
helper->url_, helper->settings_,
|
|
||||||
helper->extra_info_,
|
|
||||||
helper->request_context_);
|
|
||||||
delete helper;
|
|
||||||
},
|
|
||||||
helper));
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
CefRefPtr<CefBrowser> CefBrowserHost::CreateBrowserSync(
|
|
||||||
const CefWindowInfo& windowInfo,
|
|
||||||
CefRefPtr<CefClient> client,
|
|
||||||
const CefString& url,
|
|
||||||
const CefBrowserSettings& settings,
|
|
||||||
CefRefPtr<CefDictionaryValue> extra_info,
|
|
||||||
CefRefPtr<CefRequestContext> request_context) {
|
|
||||||
// Verify that the context is in a valid state.
|
|
||||||
if (!CONTEXT_STATE_VALID()) {
|
|
||||||
NOTREACHED() << "context not valid";
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Verify that the settings structure is a valid size.
|
|
||||||
if (settings.size != sizeof(cef_browser_settings_t)) {
|
|
||||||
NOTREACHED() << "invalid CefBrowserSettings structure size";
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Verify that this method is being called on the UI thread.
|
|
||||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
|
||||||
NOTREACHED() << "called on invalid thread";
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Verify windowless rendering requirements.
|
|
||||||
if (windowInfo.windowless_rendering_enabled &&
|
|
||||||
!client->GetRenderHandler().get()) {
|
|
||||||
NOTREACHED() << "CefRenderHandler implementation is required";
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
CefBrowserCreateParams create_params;
|
|
||||||
create_params.window_info.reset(new CefWindowInfo(windowInfo));
|
|
||||||
create_params.client = client;
|
|
||||||
create_params.url = GURL(url.ToString());
|
|
||||||
if (!url.empty() && !create_params.url.is_valid() &&
|
|
||||||
!create_params.url.has_scheme()) {
|
|
||||||
std::string new_url = std::string("http://") + url.ToString();
|
|
||||||
create_params.url = GURL(new_url);
|
|
||||||
}
|
|
||||||
create_params.settings = settings;
|
|
||||||
create_params.extra_info = extra_info;
|
|
||||||
create_params.request_context = request_context;
|
|
||||||
|
|
||||||
if (cef::IsChromeRuntimeEnabled()) {
|
|
||||||
auto browser = ChromeBrowserHostImpl::Create(create_params);
|
|
||||||
return browser.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto browser = AlloyBrowserHostImpl::Create(create_params);
|
|
||||||
return browser.get();
|
|
||||||
}
|
|
2995
libcef/browser/browser_host_impl.cc
Normal file
2995
libcef/browser/browser_host_impl.cc
Normal file
File diff suppressed because it is too large
Load Diff
@@ -3,8 +3,8 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
#ifndef CEF_LIBCEF_BROWSER_ALLOY_ALLOY_BROWSER_HOST_IMPL_H_
|
#ifndef CEF_LIBCEF_BROWSER_BROWSER_HOST_IMPL_H_
|
||||||
#define CEF_LIBCEF_BROWSER_ALLOY_ALLOY_BROWSER_HOST_IMPL_H_
|
#define CEF_LIBCEF_BROWSER_BROWSER_HOST_IMPL_H_
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
#include "include/cef_browser.h"
|
#include "include/cef_browser.h"
|
||||||
#include "include/cef_client.h"
|
#include "include/cef_client.h"
|
||||||
#include "include/cef_frame.h"
|
#include "include/cef_frame.h"
|
||||||
#include "libcef/browser/browser_host_base.h"
|
#include "include/views/cef_browser_view.h"
|
||||||
#include "libcef/browser/browser_info.h"
|
#include "libcef/browser/browser_info.h"
|
||||||
#include "libcef/browser/file_dialog_manager.h"
|
#include "libcef/browser/file_dialog_manager.h"
|
||||||
#include "libcef/browser/frame_host_impl.h"
|
#include "libcef/browser/frame_host_impl.h"
|
||||||
@@ -22,36 +22,62 @@
|
|||||||
#include "libcef/browser/menu_manager.h"
|
#include "libcef/browser/menu_manager.h"
|
||||||
#include "libcef/browser/request_context_impl.h"
|
#include "libcef/browser/request_context_impl.h"
|
||||||
|
|
||||||
|
#include "base/observer_list.h"
|
||||||
#include "base/strings/string16.h"
|
#include "base/strings/string16.h"
|
||||||
#include "base/synchronization/lock.h"
|
#include "base/synchronization/lock.h"
|
||||||
|
#include "content/public/browser/notification_observer.h"
|
||||||
|
#include "content/public/browser/notification_registrar.h"
|
||||||
#include "content/public/browser/web_contents.h"
|
#include "content/public/browser/web_contents.h"
|
||||||
#include "content/public/browser/web_contents_delegate.h"
|
#include "content/public/browser/web_contents_delegate.h"
|
||||||
#include "content/public/browser/web_contents_observer.h"
|
#include "content/public/browser/web_contents_observer.h"
|
||||||
#include "extensions/common/view_type.h"
|
#include "extensions/common/view_type.h"
|
||||||
|
|
||||||
|
namespace content {
|
||||||
|
struct DragEventSourceInfo;
|
||||||
|
class RenderWidgetHostImpl;
|
||||||
|
} // namespace content
|
||||||
|
|
||||||
|
namespace extensions {
|
||||||
|
class Extension;
|
||||||
|
class ExtensionHost;
|
||||||
|
} // namespace extensions
|
||||||
|
|
||||||
|
namespace gfx {
|
||||||
|
class ImageSkia;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(USE_AURA)
|
||||||
|
namespace views {
|
||||||
|
class Widget;
|
||||||
|
}
|
||||||
|
#endif // defined(USE_AURA)
|
||||||
|
|
||||||
class CefAudioCapturer;
|
class CefAudioCapturer;
|
||||||
class CefBrowserInfo;
|
class CefBrowserInfo;
|
||||||
|
class CefBrowserPlatformDelegate;
|
||||||
class CefDevToolsManager;
|
class CefDevToolsManager;
|
||||||
class SiteInstance;
|
class SiteInstance;
|
||||||
|
|
||||||
// CefBrowser implementation for the alloy runtime. Method calls are delegated
|
// Implementation of CefBrowser.
|
||||||
// to the CefPlatformDelegate or the WebContents as appropriate. All methods are
|
|
||||||
// thread-safe unless otherwise indicated.
|
|
||||||
//
|
//
|
||||||
// WebContentsDelegate: Interface for handling WebContents delegations. There is
|
// WebContentsDelegate: Interface for handling WebContents delegations. There is
|
||||||
// a one-to-one relationship between AlloyBrowserHostImpl and WebContents
|
// a one-to-one relationship between CefBrowserHostImpl and WebContents
|
||||||
// instances.
|
// instances.
|
||||||
//
|
//
|
||||||
// WebContentsObserver: Interface for observing WebContents notifications and
|
// WebContentsObserver: Interface for observing WebContents notifications and
|
||||||
// IPC messages. There is a one-to-one relationship between WebContents and
|
// IPC messages. There is a one-to-one relationship between WebContents and
|
||||||
// RenderViewHost instances. IPC messages received by the RenderViewHost will be
|
// RenderViewHost instances. IPC messages received by the RenderViewHost will be
|
||||||
// forwarded to this WebContentsObserver implementation via WebContents. IPC
|
// forwarded to this WebContentsObserver implementation via WebContents. IPC
|
||||||
// messages sent using AlloyBrowserHostImpl::Send() will be forwarded to the
|
// messages sent using CefBrowserHostImpl::Send() will be forwarded to the
|
||||||
// RenderViewHost (after posting to the UI thread if necessary). Use
|
// RenderViewHost (after posting to the UI thread if necessary). Use
|
||||||
// WebContentsObserver::routing_id() when sending IPC messages.
|
// WebContentsObserver::routing_id() when sending IPC messages.
|
||||||
class AlloyBrowserHostImpl : public CefBrowserHostBase,
|
//
|
||||||
public content::WebContentsDelegate,
|
// NotificationObserver: Interface for observing post-processed notifications.
|
||||||
public content::WebContentsObserver {
|
class CefBrowserHostImpl : public CefBrowserHost,
|
||||||
|
public CefBrowser,
|
||||||
|
public content::WebContentsDelegate,
|
||||||
|
public content::WebContentsObserver,
|
||||||
|
public content::NotificationObserver {
|
||||||
public:
|
public:
|
||||||
// Used for handling the response to command messages.
|
// Used for handling the response to command messages.
|
||||||
class CommandResponseHandler : public virtual CefBaseRefCounted {
|
class CommandResponseHandler : public virtual CefBaseRefCounted {
|
||||||
@@ -59,36 +85,87 @@ class AlloyBrowserHostImpl : public CefBrowserHostBase,
|
|||||||
virtual void OnResponse(const std::string& response) = 0;
|
virtual void OnResponse(const std::string& response) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
~AlloyBrowserHostImpl() override;
|
// Interface to implement for observers that wish to be informed of changes
|
||||||
|
// to the CefBrowserHostImpl. All methods will be called on the UI thread.
|
||||||
|
class Observer {
|
||||||
|
public:
|
||||||
|
// Called before |browser| is destroyed. Any references to |browser| should
|
||||||
|
// be cleared when this method is called.
|
||||||
|
virtual void OnBrowserDestroyed(CefBrowserHostImpl* browser) = 0;
|
||||||
|
|
||||||
// Create a new AlloyBrowserHostImpl instance with owned WebContents.
|
protected:
|
||||||
static CefRefPtr<AlloyBrowserHostImpl> Create(
|
virtual ~Observer() {}
|
||||||
CefBrowserCreateParams& create_params);
|
};
|
||||||
|
|
||||||
|
~CefBrowserHostImpl() override;
|
||||||
|
|
||||||
|
struct CreateParams {
|
||||||
|
// Platform-specific window creation info. Will be nullptr when creating a
|
||||||
|
// views-hosted browser.
|
||||||
|
std::unique_ptr<CefWindowInfo> window_info;
|
||||||
|
|
||||||
|
#if defined(USE_AURA)
|
||||||
|
// The BrowserView that will own a views-hosted browser. Will be nullptr for
|
||||||
|
// popup browsers (the BrowserView will be created later in that case).
|
||||||
|
CefRefPtr<CefBrowserView> browser_view;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Client implementation. May be nullptr.
|
||||||
|
CefRefPtr<CefClient> client;
|
||||||
|
|
||||||
|
// Initial URL to load. May be empty. If this is a valid extension URL then
|
||||||
|
// the browser will be created as an app view extension host.
|
||||||
|
GURL url;
|
||||||
|
|
||||||
|
// Browser settings.
|
||||||
|
CefBrowserSettings settings;
|
||||||
|
|
||||||
|
// Other browser that opened this DevTools browser. Will be nullptr for non-
|
||||||
|
// DevTools browsers.
|
||||||
|
CefRefPtr<CefBrowserHostImpl> devtools_opener;
|
||||||
|
|
||||||
|
// Request context to use when creating the browser. If nullptr the global
|
||||||
|
// request context will be used.
|
||||||
|
CefRefPtr<CefRequestContext> request_context;
|
||||||
|
|
||||||
|
CefRefPtr<CefDictionaryValue> extra_info;
|
||||||
|
|
||||||
|
// Used when explicitly creating the browser as an extension host via
|
||||||
|
// ProcessManager::CreateBackgroundHost.
|
||||||
|
const extensions::Extension* extension = nullptr;
|
||||||
|
extensions::ViewType extension_host_type = extensions::VIEW_TYPE_INVALID;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Create a new CefBrowserHostImpl instance.
|
||||||
|
static CefRefPtr<CefBrowserHostImpl> Create(CreateParams& create_params);
|
||||||
|
|
||||||
// Returns the browser associated with the specified RenderViewHost.
|
// Returns the browser associated with the specified RenderViewHost.
|
||||||
static CefRefPtr<AlloyBrowserHostImpl> GetBrowserForHost(
|
static CefRefPtr<CefBrowserHostImpl> GetBrowserForHost(
|
||||||
const content::RenderViewHost* host);
|
const content::RenderViewHost* host);
|
||||||
// Returns the browser associated with the specified RenderFrameHost.
|
// Returns the browser associated with the specified RenderFrameHost.
|
||||||
static CefRefPtr<AlloyBrowserHostImpl> GetBrowserForHost(
|
static CefRefPtr<CefBrowserHostImpl> GetBrowserForHost(
|
||||||
const content::RenderFrameHost* host);
|
const content::RenderFrameHost* host);
|
||||||
// Returns the browser associated with the specified WebContents.
|
// Returns the browser associated with the specified WebContents.
|
||||||
static CefRefPtr<AlloyBrowserHostImpl> GetBrowserForContents(
|
static CefRefPtr<CefBrowserHostImpl> GetBrowserForContents(
|
||||||
const content::WebContents* contents);
|
const content::WebContents* contents);
|
||||||
// Returns the browser associated with the specified FrameTreeNode ID.
|
// Returns the browser associated with the specified FrameTreeNode ID.
|
||||||
static CefRefPtr<AlloyBrowserHostImpl> GetBrowserForFrameTreeNode(
|
static CefRefPtr<CefBrowserHostImpl> GetBrowserForFrameTreeNode(
|
||||||
int frame_tree_node_id);
|
int frame_tree_node_id);
|
||||||
// Returns the browser associated with the specified frame routing IDs.
|
// Returns the browser associated with the specified frame routing IDs.
|
||||||
static CefRefPtr<AlloyBrowserHostImpl> GetBrowserForFrameRoute(
|
static CefRefPtr<CefBrowserHostImpl> GetBrowserForFrameRoute(
|
||||||
int render_process_id,
|
int render_process_id,
|
||||||
int render_routing_id);
|
int render_routing_id);
|
||||||
|
|
||||||
// CefBrowserHost methods.
|
// CefBrowserHost methods.
|
||||||
|
CefRefPtr<CefBrowser> GetBrowser() override;
|
||||||
void CloseBrowser(bool force_close) override;
|
void CloseBrowser(bool force_close) override;
|
||||||
bool TryCloseBrowser() override;
|
bool TryCloseBrowser() override;
|
||||||
void SetFocus(bool focus) override;
|
void SetFocus(bool focus) override;
|
||||||
CefWindowHandle GetWindowHandle() override;
|
CefWindowHandle GetWindowHandle() override;
|
||||||
CefWindowHandle GetOpenerWindowHandle() override;
|
CefWindowHandle GetOpenerWindowHandle() override;
|
||||||
bool HasView() override;
|
bool HasView() override;
|
||||||
|
CefRefPtr<CefClient> GetClient() override;
|
||||||
|
CefRefPtr<CefRequestContext> GetRequestContext() override;
|
||||||
double GetZoomLevel() override;
|
double GetZoomLevel() override;
|
||||||
void SetZoomLevel(double zoomLevel) override;
|
void SetZoomLevel(double zoomLevel) override;
|
||||||
void RunFileDialog(FileDialogMode mode,
|
void RunFileDialog(FileDialogMode mode,
|
||||||
@@ -97,6 +174,12 @@ class AlloyBrowserHostImpl : public CefBrowserHostBase,
|
|||||||
const std::vector<CefString>& accept_filters,
|
const std::vector<CefString>& accept_filters,
|
||||||
int selected_accept_filter,
|
int selected_accept_filter,
|
||||||
CefRefPtr<CefRunFileDialogCallback> callback) override;
|
CefRefPtr<CefRunFileDialogCallback> callback) override;
|
||||||
|
void StartDownload(const CefString& url) override;
|
||||||
|
void DownloadImage(const CefString& image_url,
|
||||||
|
bool is_favicon,
|
||||||
|
uint32 max_image_size,
|
||||||
|
bool bypass_cache,
|
||||||
|
CefRefPtr<CefDownloadImageCallback> callback) override;
|
||||||
void Print() override;
|
void Print() override;
|
||||||
void PrintToPDF(const CefString& path,
|
void PrintToPDF(const CefString& path,
|
||||||
const CefPdfPrintSettings& settings,
|
const CefPdfPrintSettings& settings,
|
||||||
@@ -119,12 +202,27 @@ class AlloyBrowserHostImpl : public CefBrowserHostBase,
|
|||||||
CefRefPtr<CefDictionaryValue> params) override;
|
CefRefPtr<CefDictionaryValue> params) override;
|
||||||
CefRefPtr<CefRegistration> AddDevToolsMessageObserver(
|
CefRefPtr<CefRegistration> AddDevToolsMessageObserver(
|
||||||
CefRefPtr<CefDevToolsMessageObserver> observer) override;
|
CefRefPtr<CefDevToolsMessageObserver> observer) override;
|
||||||
|
void GetNavigationEntries(CefRefPtr<CefNavigationEntryVisitor> visitor,
|
||||||
|
bool current_only) override;
|
||||||
|
void SetMouseCursorChangeDisabled(bool disabled) override;
|
||||||
|
bool IsMouseCursorChangeDisabled() override;
|
||||||
bool IsWindowRenderingDisabled() override;
|
bool IsWindowRenderingDisabled() override;
|
||||||
|
void ReplaceMisspelling(const CefString& word) override;
|
||||||
|
void AddWordToDictionary(const CefString& word) override;
|
||||||
void WasResized() override;
|
void WasResized() override;
|
||||||
void WasHidden(bool hidden) override;
|
void WasHidden(bool hidden) override;
|
||||||
void NotifyScreenInfoChanged() override;
|
void NotifyScreenInfoChanged() override;
|
||||||
void Invalidate(PaintElementType type) override;
|
void Invalidate(PaintElementType type) override;
|
||||||
void SendExternalBeginFrame() override;
|
void SendExternalBeginFrame() override;
|
||||||
|
void SendKeyEvent(const CefKeyEvent& event) override;
|
||||||
|
void SendMouseClickEvent(const CefMouseEvent& event,
|
||||||
|
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 SendTouchEvent(const CefTouchEvent& event) override;
|
||||||
void SendFocusEvent(bool setFocus) override;
|
void SendFocusEvent(bool setFocus) override;
|
||||||
void SendCaptureLostEvent() override;
|
void SendCaptureLostEvent() override;
|
||||||
@@ -151,6 +249,7 @@ class AlloyBrowserHostImpl : public CefBrowserHostBase,
|
|||||||
void DragSourceEndedAt(int x, int y, DragOperationsMask op) override;
|
void DragSourceEndedAt(int x, int y, DragOperationsMask op) override;
|
||||||
void SetAudioMuted(bool mute) override;
|
void SetAudioMuted(bool mute) override;
|
||||||
bool IsAudioMuted() override;
|
bool IsAudioMuted() override;
|
||||||
|
CefRefPtr<CefNavigationEntry> GetVisibleNavigationEntry() override;
|
||||||
void SetAccessibilityState(cef_state_t accessibility_state) override;
|
void SetAccessibilityState(cef_state_t accessibility_state) override;
|
||||||
void SetAutoResizeEnabled(bool enabled,
|
void SetAutoResizeEnabled(bool enabled,
|
||||||
const CefSize& min_size,
|
const CefSize& min_size,
|
||||||
@@ -158,6 +257,28 @@ class AlloyBrowserHostImpl : public CefBrowserHostBase,
|
|||||||
CefRefPtr<CefExtension> GetExtension() override;
|
CefRefPtr<CefExtension> GetExtension() override;
|
||||||
bool IsBackgroundHost() override;
|
bool IsBackgroundHost() override;
|
||||||
|
|
||||||
|
// CefBrowser methods.
|
||||||
|
CefRefPtr<CefBrowserHost> GetHost() override;
|
||||||
|
bool CanGoBack() override;
|
||||||
|
void GoBack() override;
|
||||||
|
bool CanGoForward() override;
|
||||||
|
void GoForward() override;
|
||||||
|
bool IsLoading() override;
|
||||||
|
void Reload() override;
|
||||||
|
void ReloadIgnoreCache() override;
|
||||||
|
void StopLoad() override;
|
||||||
|
int GetIdentifier() override;
|
||||||
|
bool IsSame(CefRefPtr<CefBrowser> that) override;
|
||||||
|
bool IsPopup() override;
|
||||||
|
bool HasDocument() override;
|
||||||
|
CefRefPtr<CefFrame> GetMainFrame() override;
|
||||||
|
CefRefPtr<CefFrame> GetFocusedFrame() override;
|
||||||
|
CefRefPtr<CefFrame> GetFrame(int64 identifier) override;
|
||||||
|
CefRefPtr<CefFrame> GetFrame(const CefString& name) override;
|
||||||
|
size_t GetFrameCount() override;
|
||||||
|
void GetFrameIdentifiers(std::vector<int64>& identifiers) override;
|
||||||
|
void GetFrameNames(std::vector<CefString>& names) override;
|
||||||
|
|
||||||
// Returns true if windowless rendering is enabled.
|
// Returns true if windowless rendering is enabled.
|
||||||
bool IsWindowless() const;
|
bool IsWindowless() const;
|
||||||
|
|
||||||
@@ -172,7 +293,7 @@ class AlloyBrowserHostImpl : public CefBrowserHostBase,
|
|||||||
|
|
||||||
// Destroy the browser members. This method should only be called after the
|
// Destroy the browser members. This method should only be called after the
|
||||||
// native browser window is not longer processing messages.
|
// native browser window is not longer processing messages.
|
||||||
void DestroyBrowser() override;
|
void DestroyBrowser();
|
||||||
|
|
||||||
// Cancel display of the context menu, if any.
|
// Cancel display of the context menu, if any.
|
||||||
void CancelContextMenu();
|
void CancelContextMenu();
|
||||||
@@ -187,29 +308,53 @@ class AlloyBrowserHostImpl : public CefBrowserHostBase,
|
|||||||
CefRefPtr<CefBrowserView> GetBrowserView() const;
|
CefRefPtr<CefBrowserView> GetBrowserView() const;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool MaybeAllowNavigation(content::RenderFrameHost* opener,
|
// Returns the frame associated with the specified RenderFrameHost.
|
||||||
bool is_guest_view,
|
CefRefPtr<CefFrame> GetFrameForHost(const content::RenderFrameHost* host);
|
||||||
const content::OpenURLParams& params) override;
|
|
||||||
|
// Returns the frame associated with the specified FrameTreeNode ID.
|
||||||
|
CefRefPtr<CefFrame> GetFrameForFrameTreeNode(int frame_tree_node_id);
|
||||||
|
|
||||||
|
// Load the specified URL in the main frame.
|
||||||
|
void LoadMainFrameURL(const std::string& url,
|
||||||
|
const content::Referrer& referrer,
|
||||||
|
ui::PageTransition transition,
|
||||||
|
const std::string& extra_headers);
|
||||||
|
|
||||||
|
// Called from CefFrameHostImpl.
|
||||||
|
void OnDidFinishLoad(CefRefPtr<CefFrameHostImpl> frame,
|
||||||
|
const GURL& validated_url,
|
||||||
|
int http_status_code);
|
||||||
|
|
||||||
|
// Open the specified text in the default text editor.
|
||||||
|
void ViewText(const std::string& text);
|
||||||
|
|
||||||
// Convert from view coordinates to screen coordinates. Potential display
|
// Convert from view coordinates to screen coordinates. Potential display
|
||||||
// scaling will be applied to the result.
|
// scaling will be applied to the result.
|
||||||
gfx::Point GetScreenPoint(const gfx::Point& view) const;
|
gfx::Point GetScreenPoint(const gfx::Point& view) const;
|
||||||
|
|
||||||
void StartDragging(const content::DropData& drop_data,
|
void StartDragging(const content::DropData& drop_data,
|
||||||
blink::DragOperationsMask allowed_ops,
|
blink::WebDragOperationsMask allowed_ops,
|
||||||
const gfx::ImageSkia& image,
|
const gfx::ImageSkia& image,
|
||||||
const gfx::Vector2d& image_offset,
|
const gfx::Vector2d& image_offset,
|
||||||
const blink::mojom::DragEventSourceInfo& event_info,
|
const content::DragEventSourceInfo& event_info,
|
||||||
content::RenderWidgetHostImpl* source_rwh);
|
content::RenderWidgetHostImpl* source_rwh);
|
||||||
void UpdateDragCursor(blink::DragOperation operation);
|
void UpdateDragCursor(blink::WebDragOperation operation);
|
||||||
|
|
||||||
// Thread safe accessors.
|
// Thread safe accessors.
|
||||||
|
const CefBrowserSettings& settings() const { return settings_; }
|
||||||
SkColor GetBackgroundColor() const;
|
SkColor GetBackgroundColor() const;
|
||||||
|
CefRefPtr<CefClient> client() const { return client_; }
|
||||||
|
scoped_refptr<CefBrowserInfo> browser_info() const { return browser_info_; }
|
||||||
|
int browser_id() const;
|
||||||
|
CefRefPtr<CefRequestContextImpl> request_context() const {
|
||||||
|
return request_context_;
|
||||||
|
}
|
||||||
|
|
||||||
// Accessors that must be called on the UI thread.
|
// Accessors that must be called on the UI thread.
|
||||||
|
content::BrowserContext* GetBrowserContext() const;
|
||||||
extensions::ExtensionHost* GetExtensionHost() const;
|
extensions::ExtensionHost* GetExtensionHost() const;
|
||||||
|
|
||||||
void OnSetFocus(cef_focus_source_t source) override;
|
void OnSetFocus(cef_focus_source_t source);
|
||||||
|
|
||||||
// Run the file chooser dialog specified by |params|. Only a single dialog may
|
// Run the file chooser dialog specified by |params|. Only a single dialog may
|
||||||
// be pending at any given time. |callback| will be executed asynchronously
|
// be pending at any given time. |callback| will be executed asynchronously
|
||||||
@@ -242,6 +387,7 @@ class AlloyBrowserHostImpl : public CefBrowserHostBase,
|
|||||||
bool* was_blocked) override;
|
bool* was_blocked) override;
|
||||||
void LoadingStateChanged(content::WebContents* source,
|
void LoadingStateChanged(content::WebContents* source,
|
||||||
bool to_different_document) override;
|
bool to_different_document) override;
|
||||||
|
void LoadProgressChanged(double progress) override;
|
||||||
void CloseContents(content::WebContents* source) override;
|
void CloseContents(content::WebContents* source) override;
|
||||||
void UpdateTargetURL(content::WebContents* source, const GURL& url) override;
|
void UpdateTargetURL(content::WebContents* source, const GURL& url) override;
|
||||||
bool DidAddMessageToConsole(content::WebContents* source,
|
bool DidAddMessageToConsole(content::WebContents* source,
|
||||||
@@ -265,7 +411,7 @@ class AlloyBrowserHostImpl : public CefBrowserHostBase,
|
|||||||
const blink::WebGestureEvent& event) override;
|
const blink::WebGestureEvent& event) override;
|
||||||
bool CanDragEnter(content::WebContents* source,
|
bool CanDragEnter(content::WebContents* source,
|
||||||
const content::DropData& data,
|
const content::DropData& data,
|
||||||
blink::DragOperationsMask operations_allowed) override;
|
blink::WebDragOperationsMask operations_allowed) override;
|
||||||
void GetCustomWebContentsView(
|
void GetCustomWebContentsView(
|
||||||
content::WebContents* web_contents,
|
content::WebContents* web_contents,
|
||||||
const GURL& target_url,
|
const GURL& target_url,
|
||||||
@@ -284,7 +430,7 @@ class AlloyBrowserHostImpl : public CefBrowserHostBase,
|
|||||||
content::JavaScriptDialogManager* GetJavaScriptDialogManager(
|
content::JavaScriptDialogManager* GetJavaScriptDialogManager(
|
||||||
content::WebContents* source) override;
|
content::WebContents* source) override;
|
||||||
void RunFileChooser(content::RenderFrameHost* render_frame_host,
|
void RunFileChooser(content::RenderFrameHost* render_frame_host,
|
||||||
scoped_refptr<content::FileSelectListener> listener,
|
std::unique_ptr<content::FileSelectListener> listener,
|
||||||
const blink::mojom::FileChooserParams& params) override;
|
const blink::mojom::FileChooserParams& params) override;
|
||||||
bool EmbedsFullscreenWidget() override;
|
bool EmbedsFullscreenWidget() override;
|
||||||
void EnterFullscreenModeForTab(
|
void EnterFullscreenModeForTab(
|
||||||
@@ -321,39 +467,87 @@ class AlloyBrowserHostImpl : public CefBrowserHostBase,
|
|||||||
|
|
||||||
// content::WebContentsObserver methods.
|
// content::WebContentsObserver methods.
|
||||||
using content::WebContentsObserver::BeforeUnloadFired;
|
using content::WebContentsObserver::BeforeUnloadFired;
|
||||||
|
void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override;
|
||||||
|
void RenderFrameHostChanged(content::RenderFrameHost* old_host,
|
||||||
|
content::RenderFrameHost* new_host) override;
|
||||||
|
void RenderFrameDeleted(content::RenderFrameHost* render_frame_host) override;
|
||||||
void RenderViewCreated(content::RenderViewHost* render_view_host) override;
|
void RenderViewCreated(content::RenderViewHost* render_view_host) override;
|
||||||
|
void RenderViewDeleted(content::RenderViewHost* render_view_host) override;
|
||||||
void RenderViewReady() override;
|
void RenderViewReady() override;
|
||||||
|
void RenderProcessGone(base::TerminationStatus status) override;
|
||||||
void DidFinishNavigation(
|
void DidFinishNavigation(
|
||||||
content::NavigationHandle* navigation_handle) override;
|
content::NavigationHandle* navigation_handle) override;
|
||||||
|
void DidStopLoading() override;
|
||||||
|
void DocumentAvailableInMainFrame() override;
|
||||||
|
void DidFailLoad(content::RenderFrameHost* render_frame_host,
|
||||||
|
const GURL& validated_url,
|
||||||
|
int error_code) override;
|
||||||
|
void TitleWasSet(content::NavigationEntry* entry) override;
|
||||||
|
void PluginCrashed(const base::FilePath& plugin_path,
|
||||||
|
base::ProcessId plugin_pid) override;
|
||||||
|
void DidUpdateFaviconURL(
|
||||||
|
content::RenderFrameHost* render_frame_host,
|
||||||
|
const std::vector<blink::mojom::FaviconURLPtr>& candidates) override;
|
||||||
void OnAudioStateChanged(bool audible) override;
|
void OnAudioStateChanged(bool audible) override;
|
||||||
|
bool OnMessageReceived(const IPC::Message& message,
|
||||||
|
content::RenderFrameHost* render_frame_host) override;
|
||||||
|
void OnFrameFocused(content::RenderFrameHost* render_frame_host) override;
|
||||||
void AccessibilityEventReceived(
|
void AccessibilityEventReceived(
|
||||||
const content::AXEventNotificationDetails& content_event_bundle) override;
|
const content::AXEventNotificationDetails& content_event_bundle) override;
|
||||||
void AccessibilityLocationChangesReceived(
|
void AccessibilityLocationChangesReceived(
|
||||||
const std::vector<content::AXLocationChangeNotificationDetails>& locData)
|
const std::vector<content::AXLocationChangeNotificationDetails>& locData)
|
||||||
override;
|
override;
|
||||||
|
void OnWebContentsFocused(
|
||||||
|
content::RenderWidgetHost* render_widget_host) override;
|
||||||
void WebContentsDestroyed() override;
|
void WebContentsDestroyed() override;
|
||||||
|
|
||||||
|
// Manage observer objects. The observer must either outlive this object or
|
||||||
|
// remove itself before destruction. These methods can only be called on the
|
||||||
|
// UI thread.
|
||||||
|
void AddObserver(Observer* observer);
|
||||||
|
void RemoveObserver(Observer* observer);
|
||||||
|
bool HasObserver(Observer* observer) const;
|
||||||
|
|
||||||
|
class NavigationLock final {
|
||||||
|
private:
|
||||||
|
friend class CefBrowserHostImpl;
|
||||||
|
friend std::unique_ptr<NavigationLock>::deleter_type;
|
||||||
|
|
||||||
|
explicit NavigationLock(CefRefPtr<CefBrowserHostImpl> browser);
|
||||||
|
~NavigationLock();
|
||||||
|
|
||||||
|
CefRefPtr<CefBrowserHostImpl> browser_;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Block navigation-related events on NavigationLock life span.
|
||||||
|
std::unique_ptr<NavigationLock> CreateNavigationLock();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend class CefBrowserPlatformDelegateAlloy;
|
friend class CefBrowserPlatformDelegateAlloy;
|
||||||
|
|
||||||
static CefRefPtr<AlloyBrowserHostImpl> CreateInternal(
|
static CefRefPtr<CefBrowserHostImpl> CreateInternal(
|
||||||
const CefBrowserSettings& settings,
|
const CefBrowserSettings& settings,
|
||||||
CefRefPtr<CefClient> client,
|
CefRefPtr<CefClient> client,
|
||||||
content::WebContents* web_contents,
|
content::WebContents* web_contents,
|
||||||
bool own_web_contents,
|
bool own_web_contents,
|
||||||
scoped_refptr<CefBrowserInfo> browser_info,
|
scoped_refptr<CefBrowserInfo> browser_info,
|
||||||
CefRefPtr<AlloyBrowserHostImpl> opener,
|
CefRefPtr<CefBrowserHostImpl> opener,
|
||||||
bool is_devtools_popup,
|
bool is_devtools_popup,
|
||||||
CefRefPtr<CefRequestContextImpl> request_context,
|
CefRefPtr<CefRequestContextImpl> request_context,
|
||||||
std::unique_ptr<CefBrowserPlatformDelegate> platform_delegate,
|
std::unique_ptr<CefBrowserPlatformDelegate> platform_delegate,
|
||||||
CefRefPtr<CefExtension> extension);
|
CefRefPtr<CefExtension> extension);
|
||||||
|
|
||||||
AlloyBrowserHostImpl(
|
// content::NotificationObserver methods.
|
||||||
|
void Observe(int type,
|
||||||
|
const content::NotificationSource& source,
|
||||||
|
const content::NotificationDetails& details) override;
|
||||||
|
|
||||||
|
CefBrowserHostImpl(
|
||||||
const CefBrowserSettings& settings,
|
const CefBrowserSettings& settings,
|
||||||
CefRefPtr<CefClient> client,
|
CefRefPtr<CefClient> client,
|
||||||
content::WebContents* web_contents,
|
content::WebContents* web_contents,
|
||||||
scoped_refptr<CefBrowserInfo> browser_info,
|
scoped_refptr<CefBrowserInfo> browser_info,
|
||||||
CefRefPtr<AlloyBrowserHostImpl> opener,
|
CefRefPtr<CefBrowserHostImpl> opener,
|
||||||
CefRefPtr<CefRequestContextImpl> request_context,
|
CefRefPtr<CefRequestContextImpl> request_context,
|
||||||
std::unique_ptr<CefBrowserPlatformDelegate> platform_delegate,
|
std::unique_ptr<CefBrowserPlatformDelegate> platform_delegate,
|
||||||
CefRefPtr<CefExtension> extension);
|
CefRefPtr<CefExtension> extension);
|
||||||
@@ -361,6 +555,21 @@ class AlloyBrowserHostImpl : public CefBrowserHostBase,
|
|||||||
// Give the platform delegate an opportunity to create the host window.
|
// Give the platform delegate an opportunity to create the host window.
|
||||||
bool CreateHostWindow();
|
bool CreateHostWindow();
|
||||||
|
|
||||||
|
// Returns true if navigation actions are currently locked.
|
||||||
|
bool navigation_locked() const;
|
||||||
|
// Action to be executed once the navigation lock is released.
|
||||||
|
void set_pending_navigation_action(base::OnceClosure action);
|
||||||
|
|
||||||
|
void OnAddressChange(const GURL& url);
|
||||||
|
void OnLoadStart(CefRefPtr<CefFrame> frame,
|
||||||
|
ui::PageTransition transition_type);
|
||||||
|
void OnLoadError(CefRefPtr<CefFrame> frame, const GURL& url, int error_code);
|
||||||
|
void OnLoadEnd(CefRefPtr<CefFrame> frame,
|
||||||
|
const GURL& url,
|
||||||
|
int http_status_code);
|
||||||
|
void OnFullscreenModeChange(bool fullscreen);
|
||||||
|
void OnTitleChange(const base::string16& title);
|
||||||
|
|
||||||
// Create the CefFileDialogManager if it doesn't already exist.
|
// Create the CefFileDialogManager if it doesn't already exist.
|
||||||
void EnsureFileDialogManager();
|
void EnsureFileDialogManager();
|
||||||
|
|
||||||
@@ -371,23 +580,57 @@ class AlloyBrowserHostImpl : public CefBrowserHostBase,
|
|||||||
void InitializeDevToolsRegistrationOnUIThread(
|
void InitializeDevToolsRegistrationOnUIThread(
|
||||||
CefRefPtr<CefRegistration> registration);
|
CefRefPtr<CefRegistration> registration);
|
||||||
|
|
||||||
void SetFocusInternal(bool focus);
|
CefBrowserSettings settings_;
|
||||||
|
CefRefPtr<CefClient> client_;
|
||||||
|
scoped_refptr<CefBrowserInfo> browser_info_;
|
||||||
CefWindowHandle opener_;
|
CefWindowHandle opener_;
|
||||||
|
CefRefPtr<CefRequestContextImpl> request_context_;
|
||||||
|
std::unique_ptr<CefBrowserPlatformDelegate> platform_delegate_;
|
||||||
const bool is_windowless_;
|
const bool is_windowless_;
|
||||||
const bool is_views_hosted_;
|
const bool is_views_hosted_;
|
||||||
CefWindowHandle host_window_handle_ = kNullWindowHandle;
|
CefWindowHandle host_window_handle_ = kNullWindowHandle;
|
||||||
CefRefPtr<CefExtension> extension_;
|
CefRefPtr<CefExtension> extension_;
|
||||||
bool is_background_host_ = false;
|
bool is_background_host_ = false;
|
||||||
|
|
||||||
|
// Volatile state information. All access must be protected by the state lock.
|
||||||
|
base::Lock state_lock_;
|
||||||
|
bool is_loading_ = false;
|
||||||
|
bool can_go_back_ = false;
|
||||||
|
bool can_go_forward_ = false;
|
||||||
|
bool has_document_ = false;
|
||||||
|
bool is_fullscreen_ = false;
|
||||||
|
|
||||||
|
// The currently focused frame, or nullptr if the main frame is focused.
|
||||||
|
CefRefPtr<CefFrameHostImpl> focused_frame_;
|
||||||
|
|
||||||
// Represents the current browser destruction state. Only accessed on the UI
|
// Represents the current browser destruction state. Only accessed on the UI
|
||||||
// thread.
|
// thread.
|
||||||
DestructionState destruction_state_ = DESTRUCTION_STATE_NONE;
|
DestructionState destruction_state_ = DESTRUCTION_STATE_NONE;
|
||||||
|
|
||||||
|
// Navigation will not occur while |navigation_lock_count_| > 0.
|
||||||
|
// |pending_navigation_action_| will be executed when the lock is released.
|
||||||
|
// Only accessed on the UI thread.
|
||||||
|
int navigation_lock_count_ = 0;
|
||||||
|
base::OnceClosure pending_navigation_action_;
|
||||||
|
|
||||||
// True if the OS window hosting the browser has been destroyed. Only accessed
|
// True if the OS window hosting the browser has been destroyed. Only accessed
|
||||||
// on the UI thread.
|
// on the UI thread.
|
||||||
bool window_destroyed_ = false;
|
bool window_destroyed_ = false;
|
||||||
|
|
||||||
|
// True if currently in the OnSetFocus callback. Only accessed on the UI
|
||||||
|
// thread.
|
||||||
|
bool is_in_onsetfocus_ = false;
|
||||||
|
|
||||||
|
// True if the focus is currently on an editable field on the page. Only
|
||||||
|
// accessed on the UI thread.
|
||||||
|
bool focus_on_editable_field_ = false;
|
||||||
|
|
||||||
|
// True if mouse cursor change is disabled.
|
||||||
|
bool mouse_cursor_change_disabled_ = false;
|
||||||
|
|
||||||
|
// Used for managing notification subscriptions.
|
||||||
|
std::unique_ptr<content::NotificationRegistrar> registrar_;
|
||||||
|
|
||||||
// Used for creating and managing file dialogs.
|
// Used for creating and managing file dialogs.
|
||||||
std::unique_ptr<CefFileDialogManager> file_dialog_manager_;
|
std::unique_ptr<CefFileDialogManager> file_dialog_manager_;
|
||||||
|
|
||||||
@@ -400,6 +643,9 @@ class AlloyBrowserHostImpl : public CefBrowserHostBase,
|
|||||||
// Used for creating and managing DevTools instances.
|
// Used for creating and managing DevTools instances.
|
||||||
std::unique_ptr<CefDevToolsManager> devtools_manager_;
|
std::unique_ptr<CefDevToolsManager> devtools_manager_;
|
||||||
|
|
||||||
|
// Observers that want to be notified of changes to this object.
|
||||||
|
base::ObserverList<Observer>::Unchecked observers_;
|
||||||
|
|
||||||
// Used for capturing audio for CefAudioHandler.
|
// Used for capturing audio for CefAudioHandler.
|
||||||
std::unique_ptr<CefAudioCapturer> audio_capturer_;
|
std::unique_ptr<CefAudioCapturer> audio_capturer_;
|
||||||
|
|
||||||
@@ -407,6 +653,9 @@ class AlloyBrowserHostImpl : public CefBrowserHostBase,
|
|||||||
// starts running when a tab stops being audible, and is canceled if it starts
|
// starts running when a tab stops being audible, and is canceled if it starts
|
||||||
// being audible again before it fires.
|
// being audible again before it fires.
|
||||||
base::OneShotTimer recently_audible_timer_;
|
base::OneShotTimer recently_audible_timer_;
|
||||||
|
|
||||||
|
IMPLEMENT_REFCOUNTING(CefBrowserHostImpl);
|
||||||
|
DISALLOW_COPY_AND_ASSIGN(CefBrowserHostImpl);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CEF_LIBCEF_BROWSER_ALLOY_ALLOY_BROWSER_HOST_IMPL_H_
|
#endif // CEF_LIBCEF_BROWSER_BROWSER_HOST_IMPL_H_
|
@@ -4,13 +4,13 @@
|
|||||||
|
|
||||||
#include "libcef/browser/browser_info.h"
|
#include "libcef/browser/browser_info.h"
|
||||||
|
|
||||||
#include "libcef/browser/browser_host_base.h"
|
#include "libcef/browser/browser_host_impl.h"
|
||||||
#include "libcef/browser/thread_util.h"
|
#include "libcef/browser/thread_util.h"
|
||||||
#include "libcef/common/values_impl.h"
|
#include "libcef/common/values_impl.h"
|
||||||
|
|
||||||
#include "base/logging.h"
|
#include "base/logging.h"
|
||||||
#include "content/browser/renderer_host/frame_tree_node.h"
|
#include "content/browser/frame_host/frame_tree_node.h"
|
||||||
#include "content/browser/renderer_host/render_frame_host_impl.h"
|
#include "content/browser/frame_host/render_frame_host_impl.h"
|
||||||
#include "content/public/browser/render_process_host.h"
|
#include "content/public/browser/render_process_host.h"
|
||||||
#include "ipc/ipc_message.h"
|
#include "ipc/ipc_message.h"
|
||||||
|
|
||||||
@@ -34,12 +34,12 @@ CefBrowserInfo::CefBrowserInfo(int browser_id,
|
|||||||
|
|
||||||
CefBrowserInfo::~CefBrowserInfo() {}
|
CefBrowserInfo::~CefBrowserInfo() {}
|
||||||
|
|
||||||
CefRefPtr<CefBrowserHostBase> CefBrowserInfo::browser() const {
|
CefRefPtr<CefBrowserHostImpl> CefBrowserInfo::browser() const {
|
||||||
base::AutoLock lock_scope(lock_);
|
base::AutoLock lock_scope(lock_);
|
||||||
return browser_;
|
return browser_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CefBrowserInfo::SetBrowser(CefRefPtr<CefBrowserHostBase> browser) {
|
void CefBrowserInfo::SetBrowser(CefRefPtr<CefBrowserHostImpl> browser) {
|
||||||
base::AutoLock lock_scope(lock_);
|
base::AutoLock lock_scope(lock_);
|
||||||
browser_ = browser;
|
browser_ = browser;
|
||||||
|
|
||||||
@@ -297,37 +297,6 @@ CefBrowserInfo::FrameHostList CefBrowserInfo::GetAllFrames() const {
|
|||||||
return frames;
|
return frames;
|
||||||
}
|
}
|
||||||
|
|
||||||
CefBrowserInfo::NavigationLock::NavigationLock() : weak_ptr_factory_(this) {}
|
|
||||||
|
|
||||||
CefBrowserInfo::NavigationLock::~NavigationLock() {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
if (pending_action_) {
|
|
||||||
CEF_POST_TASK(CEF_UIT, std::move(pending_action_));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
scoped_refptr<CefBrowserInfo::NavigationLock>
|
|
||||||
CefBrowserInfo::CreateNavigationLock() {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
scoped_refptr<NavigationLock> lock;
|
|
||||||
if (!navigation_lock_) {
|
|
||||||
lock = new NavigationLock();
|
|
||||||
navigation_lock_ = lock->weak_ptr_factory_.GetWeakPtr();
|
|
||||||
} else {
|
|
||||||
lock = navigation_lock_.get();
|
|
||||||
}
|
|
||||||
return lock;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CefBrowserInfo::IsNavigationLocked(base::OnceClosure pending_action) {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
if (navigation_lock_) {
|
|
||||||
navigation_lock_->pending_action_ = std::move(pending_action);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserInfo::MaybeUpdateFrameTreeNodeIdMap(FrameInfo* info) {
|
void CefBrowserInfo::MaybeUpdateFrameTreeNodeIdMap(FrameInfo* info) {
|
||||||
lock_.AssertAcquired();
|
lock_.AssertAcquired();
|
||||||
|
|
||||||
|
@@ -12,10 +12,8 @@
|
|||||||
#include "include/internal/cef_ptr.h"
|
#include "include/internal/cef_ptr.h"
|
||||||
#include "libcef/common/values_impl.h"
|
#include "libcef/common/values_impl.h"
|
||||||
|
|
||||||
#include "base/callback.h"
|
|
||||||
#include "base/containers/unique_ptr_adapters.h"
|
#include "base/containers/unique_ptr_adapters.h"
|
||||||
#include "base/memory/ref_counted.h"
|
#include "base/memory/ref_counted.h"
|
||||||
#include "base/memory/weak_ptr.h"
|
|
||||||
#include "base/synchronization/lock.h"
|
#include "base/synchronization/lock.h"
|
||||||
#include "base/values.h"
|
#include "base/values.h"
|
||||||
|
|
||||||
@@ -23,12 +21,12 @@ namespace content {
|
|||||||
class RenderFrameHost;
|
class RenderFrameHost;
|
||||||
}
|
}
|
||||||
|
|
||||||
class CefBrowserHostBase;
|
class CefBrowserHostImpl;
|
||||||
class CefFrameHostImpl;
|
class CefFrameHostImpl;
|
||||||
|
|
||||||
// CefBrowserInfo is used to associate a browser ID and render view/process
|
// CefBrowserInfo is used to associate a browser ID and render view/process
|
||||||
// IDs with a particular CefBrowserHostBase. Render view/process IDs may change
|
// IDs with a particular CefBrowserHostImpl. Render view/process IDs may change
|
||||||
// during the lifetime of a single CefBrowserHostBase.
|
// during the lifetime of a single CefBrowserHostImpl.
|
||||||
//
|
//
|
||||||
// CefBrowserInfo objects are managed by CefBrowserInfoManager and should not be
|
// CefBrowserInfo objects are managed by CefBrowserInfoManager and should not be
|
||||||
// created directly.
|
// created directly.
|
||||||
@@ -46,24 +44,23 @@ class CefBrowserInfo : public base::RefCountedThreadSafe<CefBrowserInfo> {
|
|||||||
|
|
||||||
// May return NULL if the browser has not yet been created or if the browser
|
// May return NULL if the browser has not yet been created or if the browser
|
||||||
// has been destroyed.
|
// has been destroyed.
|
||||||
CefRefPtr<CefBrowserHostBase> browser() const;
|
CefRefPtr<CefBrowserHostImpl> browser() const;
|
||||||
|
|
||||||
// Set or clear the browser. Called from CefBrowserHostBase InitializeBrowser
|
// Set or clear the browser. Called from the CefBrowserHostImpl constructor
|
||||||
// (to set) and DestroyBrowser (to clear).
|
// (to set) and DestroyBrowser (to clear).
|
||||||
void SetBrowser(CefRefPtr<CefBrowserHostBase> browser);
|
void SetBrowser(CefRefPtr<CefBrowserHostImpl> browser);
|
||||||
|
|
||||||
// Ensure that a frame record exists for |host|. Called for the main frame
|
// Ensure that a frame record exists for |host|. Called for the main frame
|
||||||
// when the RenderView is created, or for a sub-frame when the associated
|
// when the RenderView is created, or for a sub-frame when the associated
|
||||||
// RenderFrame is created in the renderer process.
|
// RenderFrame is created in the renderer process.
|
||||||
// Called from CefBrowserContentsDelegate::RenderFrameCreated (is_guest_view =
|
// Called from CefBrowserHostImpl::RenderFrameCreated (is_guest_view = false)
|
||||||
// false) or CefMimeHandlerViewGuestDelegate::OnGuestAttached (is_guest_view =
|
// or CefMimeHandlerViewGuestDelegate::OnGuestAttached (is_guest_view = true).
|
||||||
// true).
|
|
||||||
void MaybeCreateFrame(content::RenderFrameHost* host, bool is_guest_view);
|
void MaybeCreateFrame(content::RenderFrameHost* host, bool is_guest_view);
|
||||||
|
|
||||||
// Remove the frame record for |host|. Called for the main frame when the
|
// Remove the frame record for |host|. Called for the main frame when the
|
||||||
// RenderView is destroyed, or for a sub-frame when the associated RenderFrame
|
// RenderView is destroyed, or for a sub-frame when the associated RenderFrame
|
||||||
// is destroyed in the renderer process.
|
// is destroyed in the renderer process.
|
||||||
// Called from CefBrowserContentsDelegate::RenderFrameDeleted or
|
// Called from CefBrowserHostImpl::FrameDeleted or
|
||||||
// CefMimeHandlerViewGuestDelegate::OnGuestDetached.
|
// CefMimeHandlerViewGuestDelegate::OnGuestDetached.
|
||||||
void RemoveFrame(content::RenderFrameHost* host);
|
void RemoveFrame(content::RenderFrameHost* host);
|
||||||
|
|
||||||
@@ -124,28 +121,6 @@ class CefBrowserInfo : public base::RefCountedThreadSafe<CefBrowserInfo> {
|
|||||||
typedef std::set<CefRefPtr<CefFrameHostImpl>> FrameHostList;
|
typedef std::set<CefRefPtr<CefFrameHostImpl>> FrameHostList;
|
||||||
FrameHostList GetAllFrames() const;
|
FrameHostList GetAllFrames() const;
|
||||||
|
|
||||||
class NavigationLock final : public base::RefCounted<NavigationLock> {
|
|
||||||
private:
|
|
||||||
friend class CefBrowserInfo;
|
|
||||||
friend class base::RefCounted<NavigationLock>;
|
|
||||||
|
|
||||||
NavigationLock();
|
|
||||||
~NavigationLock();
|
|
||||||
|
|
||||||
base::OnceClosure pending_action_;
|
|
||||||
base::WeakPtrFactory<NavigationLock> weak_ptr_factory_;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Block navigation actions on NavigationLock life span. Must be called on the
|
|
||||||
// UI thread.
|
|
||||||
scoped_refptr<NavigationLock> CreateNavigationLock();
|
|
||||||
|
|
||||||
// Returns true if navigation actions are currently blocked. If this method
|
|
||||||
// returns true the most recent |pending_action| will be executed on the UI
|
|
||||||
// thread once the navigation lock is released. Must be called on the UI
|
|
||||||
// thread.
|
|
||||||
bool IsNavigationLocked(base::OnceClosure pending_action);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend class base::RefCountedThreadSafe<CefBrowserInfo>;
|
friend class base::RefCountedThreadSafe<CefBrowserInfo>;
|
||||||
|
|
||||||
@@ -176,15 +151,11 @@ class CefBrowserInfo : public base::RefCountedThreadSafe<CefBrowserInfo> {
|
|||||||
bool is_windowless_;
|
bool is_windowless_;
|
||||||
CefRefPtr<CefDictionaryValue> extra_info_;
|
CefRefPtr<CefDictionaryValue> extra_info_;
|
||||||
|
|
||||||
// Navigation will be blocked while |navigation_lock_| exists.
|
|
||||||
// Only accessed on the UI thread.
|
|
||||||
base::WeakPtr<NavigationLock> navigation_lock_;
|
|
||||||
|
|
||||||
mutable base::Lock lock_;
|
mutable base::Lock lock_;
|
||||||
|
|
||||||
// The below members must be protected by |lock_|.
|
// The below members must be protected by |lock_|.
|
||||||
|
|
||||||
CefRefPtr<CefBrowserHostBase> browser_;
|
CefRefPtr<CefBrowserHostImpl> browser_;
|
||||||
|
|
||||||
// Owner of FrameInfo structs.
|
// Owner of FrameInfo structs.
|
||||||
typedef std::set<std::unique_ptr<FrameInfo>, base::UniquePtrComparator>
|
typedef std::set<std::unique_ptr<FrameInfo>, base::UniquePtrComparator>
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include "libcef/browser/browser_host_base.h"
|
#include "libcef/browser/browser_host_impl.h"
|
||||||
#include "libcef/browser/browser_platform_delegate.h"
|
#include "libcef/browser/browser_platform_delegate.h"
|
||||||
#include "libcef/browser/extensions/browser_extensions_util.h"
|
#include "libcef/browser/extensions/browser_extensions_util.h"
|
||||||
#include "libcef/browser/thread_util.h"
|
#include "libcef/browser/thread_util.h"
|
||||||
@@ -14,7 +14,6 @@
|
|||||||
#include "libcef/common/cef_switches.h"
|
#include "libcef/common/cef_switches.h"
|
||||||
#include "libcef/common/extensions/extensions_util.h"
|
#include "libcef/common/extensions/extensions_util.h"
|
||||||
#include "libcef/common/values_impl.h"
|
#include "libcef/common/values_impl.h"
|
||||||
#include "libcef/features/runtime_checks.h"
|
|
||||||
|
|
||||||
#include "base/command_line.h"
|
#include "base/command_line.h"
|
||||||
#include "base/logging.h"
|
#include "base/logging.h"
|
||||||
@@ -24,6 +23,7 @@
|
|||||||
#include "content/public/browser/web_contents.h"
|
#include "content/public/browser/web_contents.h"
|
||||||
#include "content/public/common/child_process_host.h"
|
#include "content/public/common/child_process_host.h"
|
||||||
#include "content/public/common/url_constants.h"
|
#include "content/public/common/url_constants.h"
|
||||||
|
#include "extensions/common/constants.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
@@ -122,7 +122,7 @@ bool CefBrowserInfoManager::CanCreateWindow(
|
|||||||
/*is_renderer_initiated=*/true);
|
/*is_renderer_initiated=*/true);
|
||||||
params.user_gesture = user_gesture;
|
params.user_gesture = user_gesture;
|
||||||
|
|
||||||
CefRefPtr<CefBrowserHostBase> browser;
|
CefRefPtr<CefBrowserHostImpl> browser;
|
||||||
if (!MaybeAllowNavigation(opener, params, browser) || !browser) {
|
if (!MaybeAllowNavigation(opener, params, browser) || !browser) {
|
||||||
// Cancel the popup.
|
// Cancel the popup.
|
||||||
return false;
|
return false;
|
||||||
@@ -157,7 +157,7 @@ bool CefBrowserInfoManager::CanCreateWindow(
|
|||||||
CefPopupFeatures cef_features;
|
CefPopupFeatures cef_features;
|
||||||
TranslatePopupFeatures(features, cef_features);
|
TranslatePopupFeatures(features, cef_features);
|
||||||
|
|
||||||
#if (defined(OS_WIN) || defined(OS_MAC))
|
#if (defined(OS_WIN) || defined(OS_MACOSX))
|
||||||
// Default to the size from the popup features.
|
// Default to the size from the popup features.
|
||||||
if (cef_features.xSet)
|
if (cef_features.xSet)
|
||||||
window_info->x = cef_features.x;
|
window_info->x = cef_features.x;
|
||||||
@@ -180,9 +180,9 @@ bool CefBrowserInfoManager::CanCreateWindow(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (allow) {
|
if (allow) {
|
||||||
CefBrowserCreateParams create_params;
|
CefBrowserHostImpl::CreateParams create_params;
|
||||||
|
|
||||||
if (!browser->HasView())
|
if (!browser->IsViewsHosted())
|
||||||
create_params.window_info = std::move(window_info);
|
create_params.window_info = std::move(window_info);
|
||||||
|
|
||||||
create_params.settings = pending_popup->settings;
|
create_params.settings = pending_popup->settings;
|
||||||
@@ -213,7 +213,6 @@ void CefBrowserInfoManager::GetCustomWebContentsView(
|
|||||||
content::WebContentsView** view,
|
content::WebContentsView** view,
|
||||||
content::RenderViewHostDelegateView** delegate_view) {
|
content::RenderViewHostDelegateView** delegate_view) {
|
||||||
CEF_REQUIRE_UIT();
|
CEF_REQUIRE_UIT();
|
||||||
REQUIRE_ALLOY_RUNTIME();
|
|
||||||
|
|
||||||
std::unique_ptr<CefBrowserInfoManager::PendingPopup> pending_popup =
|
std::unique_ptr<CefBrowserInfoManager::PendingPopup> pending_popup =
|
||||||
PopPendingPopup(CefBrowserInfoManager::PendingPopup::CAN_CREATE_WINDOW,
|
PopPendingPopup(CefBrowserInfoManager::PendingPopup::CAN_CREATE_WINDOW,
|
||||||
@@ -242,15 +241,10 @@ void CefBrowserInfoManager::WebContentsCreated(
|
|||||||
CefRefPtr<CefDictionaryValue>& extra_info) {
|
CefRefPtr<CefDictionaryValue>& extra_info) {
|
||||||
CEF_REQUIRE_UIT();
|
CEF_REQUIRE_UIT();
|
||||||
|
|
||||||
// GET_CUSTOM_WEB_CONTENTS_VIEW is only used with the alloy runtime.
|
|
||||||
const auto previous_step =
|
|
||||||
cef::IsAlloyRuntimeEnabled()
|
|
||||||
? CefBrowserInfoManager::PendingPopup::GET_CUSTOM_WEB_CONTENTS_VIEW
|
|
||||||
: CefBrowserInfoManager::PendingPopup::CAN_CREATE_WINDOW;
|
|
||||||
|
|
||||||
std::unique_ptr<CefBrowserInfoManager::PendingPopup> pending_popup =
|
std::unique_ptr<CefBrowserInfoManager::PendingPopup> pending_popup =
|
||||||
PopPendingPopup(previous_step, opener_render_process_id,
|
PopPendingPopup(
|
||||||
opener_render_routing_id, target_url);
|
CefBrowserInfoManager::PendingPopup::GET_CUSTOM_WEB_CONTENTS_VIEW,
|
||||||
|
opener_render_process_id, opener_render_routing_id, target_url);
|
||||||
DCHECK(pending_popup.get());
|
DCHECK(pending_popup.get());
|
||||||
DCHECK(pending_popup->platform_delegate.get());
|
DCHECK(pending_popup->platform_delegate.get());
|
||||||
|
|
||||||
@@ -338,7 +332,7 @@ void CefBrowserInfoManager::DestroyAllBrowsers() {
|
|||||||
if (!list.empty()) {
|
if (!list.empty()) {
|
||||||
BrowserInfoList::iterator it = list.begin();
|
BrowserInfoList::iterator it = list.begin();
|
||||||
for (; it != list.end(); ++it) {
|
for (; it != list.end(); ++it) {
|
||||||
CefRefPtr<CefBrowserHostBase> browser = (*it)->browser();
|
CefRefPtr<CefBrowserHostImpl> browser = (*it)->browser();
|
||||||
DCHECK(browser.get());
|
DCHECK(browser.get());
|
||||||
if (browser.get()) {
|
if (browser.get()) {
|
||||||
// DestroyBrowser will call RemoveBrowserInfo.
|
// DestroyBrowser will call RemoveBrowserInfo.
|
||||||
@@ -367,18 +361,28 @@ CefBrowserInfoManager::GetBrowserInfoForFrameRoute(int render_process_id,
|
|||||||
bool CefBrowserInfoManager::MaybeAllowNavigation(
|
bool CefBrowserInfoManager::MaybeAllowNavigation(
|
||||||
content::RenderFrameHost* opener,
|
content::RenderFrameHost* opener,
|
||||||
const content::OpenURLParams& params,
|
const content::OpenURLParams& params,
|
||||||
CefRefPtr<CefBrowserHostBase>& browser_out) const {
|
CefRefPtr<CefBrowserHostImpl>& browser_out) const {
|
||||||
CEF_REQUIRE_UIT();
|
CEF_REQUIRE_UIT();
|
||||||
|
|
||||||
bool is_guest_view = false;
|
bool is_guest_view = false;
|
||||||
auto browser = extensions::GetOwnerBrowserForHost(opener, &is_guest_view);
|
CefRefPtr<CefBrowserHostImpl> browser =
|
||||||
|
extensions::GetOwnerBrowserForHost(opener, &is_guest_view);
|
||||||
if (!browser) {
|
if (!browser) {
|
||||||
// Print preview uses a modal dialog where we don't own the WebContents.
|
// Print preview uses a modal dialog where we don't own the WebContents.
|
||||||
// Allow that navigation to proceed.
|
// Allow that navigation to proceed.
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!browser->MaybeAllowNavigation(opener, is_guest_view, params)) {
|
if (is_guest_view && !params.url.SchemeIs(extensions::kExtensionScheme) &&
|
||||||
|
!params.url.SchemeIs(content::kChromeUIScheme)) {
|
||||||
|
// The PDF viewer will load the PDF extension in the guest view, and print
|
||||||
|
// preview will load chrome://print in the guest view. All other navigations
|
||||||
|
// are passed to the owner browser.
|
||||||
|
CEF_POST_TASK(
|
||||||
|
CEF_UIT,
|
||||||
|
base::Bind(base::IgnoreResult(&CefBrowserHostImpl::OpenURLFromTab),
|
||||||
|
browser.get(), nullptr, params));
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -37,7 +37,6 @@ namespace IPC {
|
|||||||
class Message;
|
class Message;
|
||||||
}
|
}
|
||||||
|
|
||||||
class CefBrowserHostBase;
|
|
||||||
class CefBrowserPlatformDelegate;
|
class CefBrowserPlatformDelegate;
|
||||||
|
|
||||||
// Singleton object for managing BrowserInfo instances.
|
// Singleton object for managing BrowserInfo instances.
|
||||||
@@ -49,14 +48,14 @@ class CefBrowserInfoManager : public content::RenderProcessHostObserver {
|
|||||||
// Returns this singleton instance of this class.
|
// Returns this singleton instance of this class.
|
||||||
static CefBrowserInfoManager* GetInstance();
|
static CefBrowserInfoManager* GetInstance();
|
||||||
|
|
||||||
// Called immediately before a new CefBrowserHost implementation is created
|
// Called from CefBrowserHostImpl::Create when a new browser is being created
|
||||||
// directly. In this case |is_popup| will be true only for DevTools browsers.
|
// directly. In this case |is_popup| will be true only for DevTools browsers.
|
||||||
scoped_refptr<CefBrowserInfo> CreateBrowserInfo(
|
scoped_refptr<CefBrowserInfo> CreateBrowserInfo(
|
||||||
bool is_popup,
|
bool is_popup,
|
||||||
bool is_windowless,
|
bool is_windowless,
|
||||||
CefRefPtr<CefDictionaryValue> extra_info);
|
CefRefPtr<CefDictionaryValue> extra_info);
|
||||||
|
|
||||||
// Called from WebContentsDelegate::WebContentsCreated when a new browser is
|
// Called from CefBrowserHostImpl::WebContentsCreated when a new browser is
|
||||||
// being created for a traditional popup (e.g. window.open() or targeted
|
// being created for a traditional popup (e.g. window.open() or targeted
|
||||||
// link). If any OnGetNewBrowserInfo requests are pending for the popup the
|
// link). If any OnGetNewBrowserInfo requests are pending for the popup the
|
||||||
// response will be sent when this method is called.
|
// response will be sent when this method is called.
|
||||||
@@ -65,7 +64,7 @@ class CefBrowserInfoManager : public content::RenderProcessHostObserver {
|
|||||||
bool is_windowless,
|
bool is_windowless,
|
||||||
CefRefPtr<CefDictionaryValue> extra_info);
|
CefRefPtr<CefDictionaryValue> extra_info);
|
||||||
|
|
||||||
// Called from ContentBrowserClient::CanCreateWindow. See comments on
|
// Called from AlloyContentBrowserClient::CanCreateWindow. See comments on
|
||||||
// PendingPopup for more information.
|
// PendingPopup for more information.
|
||||||
bool CanCreateWindow(content::RenderFrameHost* opener,
|
bool CanCreateWindow(content::RenderFrameHost* opener,
|
||||||
const GURL& target_url,
|
const GURL& target_url,
|
||||||
@@ -77,8 +76,8 @@ class CefBrowserInfoManager : public content::RenderProcessHostObserver {
|
|||||||
bool opener_suppressed,
|
bool opener_suppressed,
|
||||||
bool* no_javascript_access);
|
bool* no_javascript_access);
|
||||||
|
|
||||||
// Called from WebContentsDelegate::GetCustomWebContentsView (alloy runtime
|
// Called from CefBrowserHostImpl::GetCustomWebContentsView. See comments on
|
||||||
// only). See comments on PendingPopup for more information.
|
// PendingPopup for more information.
|
||||||
void GetCustomWebContentsView(
|
void GetCustomWebContentsView(
|
||||||
const GURL& target_url,
|
const GURL& target_url,
|
||||||
int opener_render_process_id,
|
int opener_render_process_id,
|
||||||
@@ -86,7 +85,7 @@ class CefBrowserInfoManager : public content::RenderProcessHostObserver {
|
|||||||
content::WebContentsView** view,
|
content::WebContentsView** view,
|
||||||
content::RenderViewHostDelegateView** delegate_view);
|
content::RenderViewHostDelegateView** delegate_view);
|
||||||
|
|
||||||
// Called from WebContentsDelegate::WebContentsCreated. See comments on
|
// Called from CefBrowserHostImpl::WebContentsCreated. See comments on
|
||||||
// PendingPopup for more information.
|
// PendingPopup for more information.
|
||||||
void WebContentsCreated(
|
void WebContentsCreated(
|
||||||
const GURL& target_url,
|
const GURL& target_url,
|
||||||
@@ -108,7 +107,7 @@ class CefBrowserInfoManager : public content::RenderProcessHostObserver {
|
|||||||
int render_routing_id,
|
int render_routing_id,
|
||||||
IPC::Message* reply_msg);
|
IPC::Message* reply_msg);
|
||||||
|
|
||||||
// Called from CefBrowserHostBase::DestroyBrowser() when a browser is
|
// Called from CefBrowserHostImpl::DestroyBrowser() when a browser is
|
||||||
// destroyed.
|
// destroyed.
|
||||||
void RemoveBrowserInfo(scoped_refptr<CefBrowserInfo> browser_info);
|
void RemoveBrowserInfo(scoped_refptr<CefBrowserInfo> browser_info);
|
||||||
|
|
||||||
@@ -117,7 +116,7 @@ class CefBrowserInfoManager : public content::RenderProcessHostObserver {
|
|||||||
|
|
||||||
// Returns the CefBrowserInfo matching the specified IDs or nullptr if no
|
// Returns the CefBrowserInfo matching the specified IDs or nullptr if no
|
||||||
// match is found. It is allowed to add new callers of this method but
|
// match is found. It is allowed to add new callers of this method but
|
||||||
// consider using CefBrowserHostBase::GetBrowserForFrameRoute() or
|
// consider using CefBrowserHostImpl::GetBrowserForFrameRoute() or
|
||||||
// extensions::GetOwnerBrowserForFrameRoute() instead. If |is_guest_view| is
|
// extensions::GetOwnerBrowserForFrameRoute() instead. If |is_guest_view| is
|
||||||
// non-nullptr it will be set to true if the IDs match a guest view associated
|
// non-nullptr it will be set to true if the IDs match a guest view associated
|
||||||
// with the returned browser info instead of the browser itself.
|
// with the returned browser info instead of the browser itself.
|
||||||
@@ -128,7 +127,7 @@ class CefBrowserInfoManager : public content::RenderProcessHostObserver {
|
|||||||
|
|
||||||
// Returns the CefBrowserInfo matching the specified ID or nullptr if no match
|
// Returns the CefBrowserInfo matching the specified ID or nullptr if no match
|
||||||
// is found. It is allowed to add new callers of this method but consider
|
// is found. It is allowed to add new callers of this method but consider
|
||||||
// using CefBrowserHostBase::GetBrowserForFrameTreeNode() instead. If
|
// using CefBrowserHostImpl::GetBrowserForFrameTreeNode() instead. If
|
||||||
// |is_guest_view| is non-nullptr it will be set to true if the IDs match a
|
// |is_guest_view| is non-nullptr it will be set to true if the IDs match a
|
||||||
// guest view associated with the returned browser info instead of the browser
|
// guest view associated with the returned browser info instead of the browser
|
||||||
// itself.
|
// itself.
|
||||||
@@ -145,24 +144,23 @@ class CefBrowserInfoManager : public content::RenderProcessHostObserver {
|
|||||||
// |browser| will be set to the target browser if any.
|
// |browser| will be set to the target browser if any.
|
||||||
bool MaybeAllowNavigation(content::RenderFrameHost* opener,
|
bool MaybeAllowNavigation(content::RenderFrameHost* opener,
|
||||||
const content::OpenURLParams& params,
|
const content::OpenURLParams& params,
|
||||||
CefRefPtr<CefBrowserHostBase>& browser) const;
|
CefRefPtr<CefBrowserHostImpl>& browser) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// RenderProcessHostObserver methods:
|
// RenderProcessHostObserver methods:
|
||||||
void RenderProcessHostDestroyed(content::RenderProcessHost* host) override;
|
void RenderProcessHostDestroyed(content::RenderProcessHost* host) override;
|
||||||
|
|
||||||
// Store state information about pending popups. Call order is:
|
// Store state information about pending popups. Call order is:
|
||||||
// - CanCreateWindow (UIT):
|
// - AlloyContentBrowserClient::CanCreateWindow (UIT)
|
||||||
// Provides an opportunity to cancel the popup (calls OnBeforePopup) and
|
// Provides an opportunity to cancel the popup (calls OnBeforePopup) and
|
||||||
// creates the new platform delegate for the popup. If the popup owner is
|
// creates the new platform delegate for the popup. If the popup owner is
|
||||||
// an extension guest view then the popup is canceled and
|
// an extension guest view then the popup is canceled and
|
||||||
// WebContentsDelegate::OpenURLFromTab is called via the
|
// CefBrowserHostImpl::OpenURLFromTab is called.
|
||||||
// CefBrowserHostBase::MaybeAllowNavigation implementation.
|
|
||||||
// And then the following calls may occur at the same time:
|
// And then the following calls may occur at the same time:
|
||||||
// - GetCustomWebContentsView (UIT) (alloy runtime only):
|
// - CefBrowserHostImpl::GetCustomWebContentsView (UIT)
|
||||||
// Creates the OSR views for windowless popups.
|
// Creates the OSR views for windowless popups.
|
||||||
// - WebContentsCreated (UIT):
|
// - CefBrowserHostImpl::WebContentsCreated (UIT)
|
||||||
// Creates the CefBrowserHost representation for the popup.
|
// Creates the CefBrowserHostImpl representation for the popup.
|
||||||
// - CefBrowserMessageFilter::OnGetNewBrowserInfo (IOT)
|
// - CefBrowserMessageFilter::OnGetNewBrowserInfo (IOT)
|
||||||
// Passes information about the popup to the renderer process.
|
// Passes information about the popup to the renderer process.
|
||||||
struct PendingPopup {
|
struct PendingPopup {
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
#include "base/message_loop/message_pump.h"
|
#include "base/message_loop/message_pump.h"
|
||||||
#include "base/message_loop/message_pump_for_ui.h"
|
#include "base/message_loop/message_pump_for_ui.h"
|
||||||
|
|
||||||
#if defined(OS_MAC)
|
#if defined(OS_MACOSX)
|
||||||
#include "base/mac/scoped_nsautorelease_pool.h"
|
#include "base/mac/scoped_nsautorelease_pool.h"
|
||||||
#include "base/message_loop/message_pump_mac.h"
|
#include "base/message_loop/message_pump_mac.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -29,7 +29,7 @@ class MessagePumpExternal : public base::MessagePumpForUI {
|
|||||||
void Run(Delegate* delegate) override {
|
void Run(Delegate* delegate) override {
|
||||||
base::TimeTicks start = base::TimeTicks::Now();
|
base::TimeTicks start = base::TimeTicks::Now();
|
||||||
while (true) {
|
while (true) {
|
||||||
#if defined(OS_MAC)
|
#if defined(OS_MACOSX)
|
||||||
base::mac::ScopedNSAutoreleasePool autorelease_pool;
|
base::mac::ScopedNSAutoreleasePool autorelease_pool;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -108,7 +108,7 @@ std::unique_ptr<base::MessagePump> MessagePumpFactoryForUI() {
|
|||||||
return std::make_unique<MessagePumpExternal>(0.01f, handler);
|
return std::make_unique<MessagePumpExternal>(0.01f, handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(OS_MAC)
|
#if defined(OS_MACOSX)
|
||||||
return base::MessagePumpMac::Create();
|
return base::MessagePumpMac::Create();
|
||||||
#else
|
#else
|
||||||
return std::make_unique<base::MessagePumpForUI>();
|
return std::make_unique<base::MessagePumpForUI>();
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#include "libcef/browser/browser_platform_delegate.h"
|
#include "libcef/browser/browser_platform_delegate.h"
|
||||||
|
|
||||||
#include "libcef/browser/alloy/alloy_browser_host_impl.h"
|
#include "libcef/browser/browser_host_impl.h"
|
||||||
|
|
||||||
#include "base/logging.h"
|
#include "base/logging.h"
|
||||||
|
|
||||||
@@ -14,13 +14,6 @@ CefBrowserPlatformDelegate::~CefBrowserPlatformDelegate() {
|
|||||||
DCHECK(!browser_);
|
DCHECK(!browser_);
|
||||||
}
|
}
|
||||||
|
|
||||||
content::WebContents* CefBrowserPlatformDelegate::CreateWebContents(
|
|
||||||
CefBrowserCreateParams& create_params,
|
|
||||||
bool& own_web_contents) {
|
|
||||||
NOTREACHED();
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserPlatformDelegate::CreateViewForWebContents(
|
void CefBrowserPlatformDelegate::CreateViewForWebContents(
|
||||||
content::WebContentsView** view,
|
content::WebContentsView** view,
|
||||||
content::RenderViewHostDelegateView** delegate_view) {
|
content::RenderViewHostDelegateView** delegate_view) {
|
||||||
@@ -64,7 +57,7 @@ void CefBrowserPlatformDelegate::RenderViewCreated(
|
|||||||
|
|
||||||
void CefBrowserPlatformDelegate::RenderViewReady() {}
|
void CefBrowserPlatformDelegate::RenderViewReady() {}
|
||||||
|
|
||||||
void CefBrowserPlatformDelegate::BrowserCreated(CefBrowserHostBase* browser) {
|
void CefBrowserPlatformDelegate::BrowserCreated(CefBrowserHostImpl* browser) {
|
||||||
// We should have an associated WebContents at this point.
|
// We should have an associated WebContents at this point.
|
||||||
DCHECK(web_contents_);
|
DCHECK(web_contents_);
|
||||||
|
|
||||||
@@ -90,7 +83,7 @@ void CefBrowserPlatformDelegate::NotifyBrowserCreated() {}
|
|||||||
|
|
||||||
void CefBrowserPlatformDelegate::NotifyBrowserDestroyed() {}
|
void CefBrowserPlatformDelegate::NotifyBrowserDestroyed() {}
|
||||||
|
|
||||||
void CefBrowserPlatformDelegate::BrowserDestroyed(CefBrowserHostBase* browser) {
|
void CefBrowserPlatformDelegate::BrowserDestroyed(CefBrowserHostImpl* browser) {
|
||||||
// WebContentsDestroyed should already be called.
|
// WebContentsDestroyed should already be called.
|
||||||
DCHECK(!web_contents_);
|
DCHECK(!web_contents_);
|
||||||
|
|
||||||
@@ -107,11 +100,6 @@ void CefBrowserPlatformDelegate::CloseHostWindow() {
|
|||||||
NOTREACHED();
|
NOTREACHED();
|
||||||
}
|
}
|
||||||
|
|
||||||
CefWindowHandle CefBrowserPlatformDelegate::GetHostWindowHandle() const {
|
|
||||||
NOTREACHED();
|
|
||||||
return kNullWindowHandle;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(USE_AURA)
|
#if defined(USE_AURA)
|
||||||
views::Widget* CefBrowserPlatformDelegate::GetWindowWidget() const {
|
views::Widget* CefBrowserPlatformDelegate::GetWindowWidget() const {
|
||||||
NOTREACHED();
|
NOTREACHED();
|
||||||
@@ -132,75 +120,19 @@ void CefBrowserPlatformDelegate::PopupWebContentsCreated(
|
|||||||
bool is_devtools) {}
|
bool is_devtools) {}
|
||||||
|
|
||||||
void CefBrowserPlatformDelegate::PopupBrowserCreated(
|
void CefBrowserPlatformDelegate::PopupBrowserCreated(
|
||||||
CefBrowserHostBase* new_browser,
|
CefBrowserHostImpl* new_browser,
|
||||||
bool is_devtools) {}
|
bool is_devtools) {}
|
||||||
|
|
||||||
SkColor CefBrowserPlatformDelegate::GetBackgroundColor() const {
|
|
||||||
NOTREACHED();
|
|
||||||
return SkColor();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserPlatformDelegate::WasResized() {
|
|
||||||
NOTREACHED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserPlatformDelegate::SendKeyEvent(const CefKeyEvent& event) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserPlatformDelegate::SendMouseClickEvent(
|
|
||||||
const CefMouseEvent& event,
|
|
||||||
CefBrowserHost::MouseButtonType type,
|
|
||||||
bool mouseUp,
|
|
||||||
int clickCount) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserPlatformDelegate::SendMouseMoveEvent(const CefMouseEvent& event,
|
|
||||||
bool mouseLeave) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserPlatformDelegate::SendMouseWheelEvent(const CefMouseEvent& event,
|
|
||||||
int deltaX,
|
|
||||||
int deltaY) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserPlatformDelegate::SendTouchEvent(const CefTouchEvent& event) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserPlatformDelegate::SendFocusEvent(bool setFocus) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserPlatformDelegate::SendCaptureLostEvent() {
|
void CefBrowserPlatformDelegate::SendCaptureLostEvent() {
|
||||||
NOTIMPLEMENTED();
|
NOTIMPLEMENTED();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(OS_WIN) || (defined(OS_POSIX) && !defined(OS_MAC))
|
#if defined(OS_WIN) || (defined(OS_POSIX) && !defined(OS_MACOSX))
|
||||||
void CefBrowserPlatformDelegate::NotifyMoveOrResizeStarted() {}
|
void CefBrowserPlatformDelegate::NotifyMoveOrResizeStarted() {}
|
||||||
|
|
||||||
void CefBrowserPlatformDelegate::SizeTo(int width, int height) {}
|
void CefBrowserPlatformDelegate::SizeTo(int width, int height) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
gfx::Point CefBrowserPlatformDelegate::GetScreenPoint(
|
|
||||||
const gfx::Point& view) const {
|
|
||||||
NOTREACHED();
|
|
||||||
return gfx::Point();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserPlatformDelegate::ViewText(const std::string& text) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CefBrowserPlatformDelegate::HandleKeyboardEvent(
|
|
||||||
const content::NativeWebKeyboardEvent& event) {
|
|
||||||
NOTREACHED();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CefBrowserPlatformDelegate::PreHandleGestureEvent(
|
bool CefBrowserPlatformDelegate::PreHandleGestureEvent(
|
||||||
content::WebContents* source,
|
content::WebContents* source,
|
||||||
const blink::WebGestureEvent& event) {
|
const blink::WebGestureEvent& event) {
|
||||||
@@ -212,12 +144,6 @@ bool CefBrowserPlatformDelegate::IsNeverComposited(
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
CefEventHandle CefBrowserPlatformDelegate::GetEventHandle(
|
|
||||||
const content::NativeWebKeyboardEvent& event) const {
|
|
||||||
NOTREACHED();
|
|
||||||
return kNullEventHandle;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::unique_ptr<CefFileDialogRunner>
|
std::unique_ptr<CefFileDialogRunner>
|
||||||
CefBrowserPlatformDelegate::CreateFileDialogRunner() {
|
CefBrowserPlatformDelegate::CreateFileDialogRunner() {
|
||||||
NOTIMPLEMENTED();
|
NOTIMPLEMENTED();
|
||||||
@@ -230,19 +156,6 @@ CefBrowserPlatformDelegate::CreateJavaScriptDialogRunner() {
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<CefMenuRunner> CefBrowserPlatformDelegate::CreateMenuRunner() {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CefBrowserPlatformDelegate::IsWindowless() const {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CefBrowserPlatformDelegate::IsViewsHosted() const {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserPlatformDelegate::WasHidden(bool hidden) {
|
void CefBrowserPlatformDelegate::WasHidden(bool hidden) {
|
||||||
NOTREACHED();
|
NOTREACHED();
|
||||||
}
|
}
|
||||||
@@ -309,16 +222,16 @@ void CefBrowserPlatformDelegate::DragTargetDrop(const CefMouseEvent& event) {
|
|||||||
|
|
||||||
void CefBrowserPlatformDelegate::StartDragging(
|
void CefBrowserPlatformDelegate::StartDragging(
|
||||||
const content::DropData& drop_data,
|
const content::DropData& drop_data,
|
||||||
blink::DragOperationsMask allowed_ops,
|
blink::WebDragOperationsMask allowed_ops,
|
||||||
const gfx::ImageSkia& image,
|
const gfx::ImageSkia& image,
|
||||||
const gfx::Vector2d& image_offset,
|
const gfx::Vector2d& image_offset,
|
||||||
const blink::mojom::DragEventSourceInfo& event_info,
|
const content::DragEventSourceInfo& event_info,
|
||||||
content::RenderWidgetHostImpl* source_rwh) {
|
content::RenderWidgetHostImpl* source_rwh) {
|
||||||
NOTREACHED();
|
NOTREACHED();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CefBrowserPlatformDelegate::UpdateDragCursor(
|
void CefBrowserPlatformDelegate::UpdateDragCursor(
|
||||||
blink::DragOperation operation) {
|
blink::WebDragOperation operation) {
|
||||||
NOTREACHED();
|
NOTREACHED();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -13,18 +13,12 @@
|
|||||||
#include "include/cef_drag_data.h"
|
#include "include/cef_drag_data.h"
|
||||||
#include "include/internal/cef_types.h"
|
#include "include/internal/cef_types.h"
|
||||||
#include "include/views/cef_browser_view.h"
|
#include "include/views/cef_browser_view.h"
|
||||||
|
#include "libcef/browser/browser_host_impl.h"
|
||||||
|
|
||||||
#include "base/callback_forward.h"
|
#include "base/callback_forward.h"
|
||||||
#include "extensions/common/view_type.h"
|
#include "content/public/browser/web_contents.h"
|
||||||
#include "third_party/blink/public/common/page/drag_operation.h"
|
|
||||||
#include "third_party/blink/public/mojom/page/drag.mojom-forward.h"
|
|
||||||
#include "third_party/skia/include/core/SkColor.h"
|
|
||||||
#include "ui/base/window_open_disposition.h"
|
|
||||||
|
|
||||||
class GURL;
|
|
||||||
|
|
||||||
namespace blink {
|
namespace blink {
|
||||||
class WebGestureEvent;
|
|
||||||
class WebMouseEvent;
|
class WebMouseEvent;
|
||||||
class WebMouseWheelEvent;
|
class WebMouseWheelEvent;
|
||||||
class WebInputEvent;
|
class WebInputEvent;
|
||||||
@@ -32,29 +26,15 @@ class WebTouchEvent;
|
|||||||
} // namespace blink
|
} // namespace blink
|
||||||
|
|
||||||
namespace content {
|
namespace content {
|
||||||
struct AXEventNotificationDetails;
|
|
||||||
struct AXLocationChangeNotificationDetails;
|
|
||||||
struct DropData;
|
|
||||||
struct NativeWebKeyboardEvent;
|
struct NativeWebKeyboardEvent;
|
||||||
class RenderViewHost;
|
class RenderViewHost;
|
||||||
class RenderViewHostDelegateView;
|
class RenderViewHostDelegateView;
|
||||||
class RenderWidgetHostImpl;
|
|
||||||
class WebContents;
|
|
||||||
class WebContentsView;
|
class WebContentsView;
|
||||||
} // namespace content
|
} // namespace content
|
||||||
|
|
||||||
namespace extensions {
|
namespace extensions {
|
||||||
class Extension;
|
|
||||||
class ExtensionHost;
|
class ExtensionHost;
|
||||||
} // namespace extensions
|
}
|
||||||
|
|
||||||
namespace gfx {
|
|
||||||
class ImageSkia;
|
|
||||||
class Point;
|
|
||||||
class Rect;
|
|
||||||
class Size;
|
|
||||||
class Vector2d;
|
|
||||||
} // namespace gfx
|
|
||||||
|
|
||||||
#if defined(USE_AURA)
|
#if defined(USE_AURA)
|
||||||
namespace views {
|
namespace views {
|
||||||
@@ -62,8 +42,6 @@ class Widget;
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct CefBrowserCreateParams;
|
|
||||||
class CefBrowserHostBase;
|
|
||||||
class CefFileDialogRunner;
|
class CefFileDialogRunner;
|
||||||
class CefJavaScriptDialogRunner;
|
class CefJavaScriptDialogRunner;
|
||||||
class CefMenuRunner;
|
class CefMenuRunner;
|
||||||
@@ -76,14 +54,14 @@ class CefBrowserPlatformDelegate {
|
|||||||
// Create a new CefBrowserPlatformDelegate instance. May be called on multiple
|
// Create a new CefBrowserPlatformDelegate instance. May be called on multiple
|
||||||
// threads.
|
// threads.
|
||||||
static std::unique_ptr<CefBrowserPlatformDelegate> Create(
|
static std::unique_ptr<CefBrowserPlatformDelegate> Create(
|
||||||
const CefBrowserCreateParams& create_params);
|
CefBrowserHostImpl::CreateParams& create_params);
|
||||||
|
|
||||||
// Called from AlloyBrowserHostImpl::Create.
|
// Called from CefBrowserHostImpl::Create.
|
||||||
// Wait for the call to WebContentsCreated(owned=true) before taking ownership
|
// Wait for the call to WebContentsCreated(owned=true) before taking ownership
|
||||||
// of the resulting WebContents object.
|
// of the resulting WebContents object.
|
||||||
virtual content::WebContents* CreateWebContents(
|
virtual content::WebContents* CreateWebContents(
|
||||||
CefBrowserCreateParams& create_params,
|
CefBrowserHostImpl::CreateParams& create_params,
|
||||||
bool& own_web_contents);
|
bool& own_web_contents) = 0;
|
||||||
|
|
||||||
// Called to create the view objects for a new WebContents. Will only be
|
// Called to create the view objects for a new WebContents. Will only be
|
||||||
// called a single time per instance. May be called on multiple threads. Only
|
// called a single time per instance. May be called on multiple threads. Only
|
||||||
@@ -125,12 +103,12 @@ class CefBrowserPlatformDelegate {
|
|||||||
// See WebContentsObserver documentation.
|
// See WebContentsObserver documentation.
|
||||||
virtual void RenderViewReady();
|
virtual void RenderViewReady();
|
||||||
|
|
||||||
// Called after the owning AlloyBrowserHostImpl is created. Will only be
|
// Called after the owning CefBrowserHostImpl is created. Will only be called
|
||||||
// called a single time per instance. Do not send any client notifications
|
// a single time per instance. Do not send any client notifications from this
|
||||||
// from this method.
|
// method.
|
||||||
virtual void BrowserCreated(CefBrowserHostBase* browser);
|
virtual void BrowserCreated(CefBrowserHostImpl* browser);
|
||||||
|
|
||||||
// Called from AlloyBrowserHostImpl::Create.
|
// Called from CefBrowserHostImpl::Create.
|
||||||
virtual void CreateExtensionHost(const extensions::Extension* extension,
|
virtual void CreateExtensionHost(const extensions::Extension* extension,
|
||||||
const GURL& url,
|
const GURL& url,
|
||||||
extensions::ViewType host_type);
|
extensions::ViewType host_type);
|
||||||
@@ -146,11 +124,11 @@ class CefBrowserPlatformDelegate {
|
|||||||
// BrowserDestroyed().
|
// BrowserDestroyed().
|
||||||
virtual void NotifyBrowserDestroyed();
|
virtual void NotifyBrowserDestroyed();
|
||||||
|
|
||||||
// Called before the owning AlloyBrowserHostImpl is destroyed. Will only be
|
// Called before the owning CefBrowserHostImpl is destroyed. Will only be
|
||||||
// called a single time per instance. All references to the
|
// called a single time per instance. All references to the CefBrowserHostImpl
|
||||||
// AlloyBrowserHostImpl and WebContents should be cleared when this method is
|
// and WebContents should be cleared when this method is called. Do not send
|
||||||
// called. Do not send any client notifications from this method.
|
// any client notifications from this method.
|
||||||
virtual void BrowserDestroyed(CefBrowserHostBase* browser);
|
virtual void BrowserDestroyed(CefBrowserHostImpl* browser);
|
||||||
|
|
||||||
// Create the window that hosts the browser. Will only be called a single time
|
// Create the window that hosts the browser. Will only be called a single time
|
||||||
// per instance. Only used with windowed rendering.
|
// per instance. Only used with windowed rendering.
|
||||||
@@ -165,7 +143,7 @@ class CefBrowserPlatformDelegate {
|
|||||||
// rendering this will return the most immediate parent window handle. For
|
// rendering this will return the most immediate parent window handle. For
|
||||||
// windowless rendering this will return the parent window handle specified by
|
// windowless rendering this will return the parent window handle specified by
|
||||||
// the client, which may be NULL. May be called on multiple threads.
|
// the client, which may be NULL. May be called on multiple threads.
|
||||||
virtual CefWindowHandle GetHostWindowHandle() const;
|
virtual CefWindowHandle GetHostWindowHandle() const = 0;
|
||||||
|
|
||||||
#if defined(USE_AURA)
|
#if defined(USE_AURA)
|
||||||
// Returns the Widget owner for the browser window. Only used with windowed
|
// Returns the Widget owner for the browser window. Only used with windowed
|
||||||
@@ -178,7 +156,7 @@ class CefBrowserPlatformDelegate {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Called after the WebContents have been created for a new popup browser
|
// Called after the WebContents have been created for a new popup browser
|
||||||
// parented to this browser but before the AlloyBrowserHostImpl is created for
|
// parented to this browser but before the CefBrowserHostImpl is created for
|
||||||
// the popup. |is_devtools| will be true if the popup will host DevTools. This
|
// the popup. |is_devtools| will be true if the popup will host DevTools. This
|
||||||
// method will be called before WebContentsCreated() is called on
|
// method will be called before WebContentsCreated() is called on
|
||||||
// |new_platform_delegate|. Do not make the new browser visible in this
|
// |new_platform_delegate|. Do not make the new browser visible in this
|
||||||
@@ -190,13 +168,13 @@ class CefBrowserPlatformDelegate {
|
|||||||
CefBrowserPlatformDelegate* new_platform_delegate,
|
CefBrowserPlatformDelegate* new_platform_delegate,
|
||||||
bool is_devtools);
|
bool is_devtools);
|
||||||
|
|
||||||
// Called after the AlloyBrowserHostImpl is created for a new popup browser
|
// Called after the CefBrowserHostImpl is created for a new popup browser
|
||||||
// parented to this browser. |is_devtools| will be true if the popup will host
|
// parented to this browser. |is_devtools| will be true if the popup will host
|
||||||
// DevTools. This method will be called immediately after
|
// DevTools. This method will be called immediately after
|
||||||
// CefLifeSpanHandler::OnAfterCreated() for the popup browser. It is safe to
|
// CefLifeSpanHandler::OnAfterCreated() for the popup browser. It is safe to
|
||||||
// make the new browser visible in this callback (for example, add the browser
|
// make the new browser visible in this callback (for example, add the browser
|
||||||
// to a window and show it).
|
// to a window and show it).
|
||||||
virtual void PopupBrowserCreated(CefBrowserHostBase* new_browser,
|
virtual void PopupBrowserCreated(CefBrowserHostImpl* new_browser,
|
||||||
bool is_devtools);
|
bool is_devtools);
|
||||||
|
|
||||||
// Returns the background color for the browser. The alpha component will be
|
// Returns the background color for the browser. The alpha component will be
|
||||||
@@ -204,31 +182,32 @@ class CefBrowserPlatformDelegate {
|
|||||||
// fully opaque). SK_AlphaOPAQUE will always be returned for windowed
|
// fully opaque). SK_AlphaOPAQUE will always be returned for windowed
|
||||||
// browsers. SK_ColorTRANSPARENT may be returned for windowless browsers to
|
// browsers. SK_ColorTRANSPARENT may be returned for windowless browsers to
|
||||||
// enable transparency.
|
// enable transparency.
|
||||||
virtual SkColor GetBackgroundColor() const;
|
virtual SkColor GetBackgroundColor() const = 0;
|
||||||
|
|
||||||
// Notify the window that it was resized.
|
// Notify the window that it was resized.
|
||||||
virtual void WasResized();
|
virtual void WasResized() = 0;
|
||||||
|
|
||||||
// Send input events.
|
// Send input events.
|
||||||
virtual void SendKeyEvent(const CefKeyEvent& event);
|
virtual void SendKeyEvent(const CefKeyEvent& event) = 0;
|
||||||
virtual void SendMouseClickEvent(const CefMouseEvent& event,
|
virtual void SendMouseClickEvent(const CefMouseEvent& event,
|
||||||
CefBrowserHost::MouseButtonType type,
|
CefBrowserHost::MouseButtonType type,
|
||||||
bool mouseUp,
|
bool mouseUp,
|
||||||
int clickCount);
|
int clickCount) = 0;
|
||||||
virtual void SendMouseMoveEvent(const CefMouseEvent& event, bool mouseLeave);
|
virtual void SendMouseMoveEvent(const CefMouseEvent& event,
|
||||||
|
bool mouseLeave) = 0;
|
||||||
virtual void SendMouseWheelEvent(const CefMouseEvent& event,
|
virtual void SendMouseWheelEvent(const CefMouseEvent& event,
|
||||||
int deltaX,
|
int deltaX,
|
||||||
int deltaY);
|
int deltaY) = 0;
|
||||||
virtual void SendTouchEvent(const CefTouchEvent& event);
|
virtual void SendTouchEvent(const CefTouchEvent& event) = 0;
|
||||||
|
|
||||||
// Send focus event. The browser's WebContents may be NULL when this method is
|
// Send focus event. The browser's WebContents may be NULL when this method is
|
||||||
// called.
|
// called.
|
||||||
virtual void SendFocusEvent(bool setFocus);
|
virtual void SendFocusEvent(bool setFocus) = 0;
|
||||||
|
|
||||||
// Send capture lost event.
|
// Send capture lost event.
|
||||||
virtual void SendCaptureLostEvent();
|
virtual void SendCaptureLostEvent();
|
||||||
|
|
||||||
#if defined(OS_WIN) || (defined(OS_POSIX) && !defined(OS_MAC))
|
#if defined(OS_WIN) || (defined(OS_POSIX) && !defined(OS_MACOSX))
|
||||||
// The window hosting the browser is about to be moved or resized. Only used
|
// The window hosting the browser is about to be moved or resized. Only used
|
||||||
// on Windows and Linux.
|
// on Windows and Linux.
|
||||||
virtual void NotifyMoveOrResizeStarted();
|
virtual void NotifyMoveOrResizeStarted();
|
||||||
@@ -240,15 +219,15 @@ class CefBrowserPlatformDelegate {
|
|||||||
|
|
||||||
// Convert from view coordinates to screen coordinates. Potential display
|
// Convert from view coordinates to screen coordinates. Potential display
|
||||||
// scaling will be applied to the result.
|
// scaling will be applied to the result.
|
||||||
virtual gfx::Point GetScreenPoint(const gfx::Point& view) const;
|
virtual gfx::Point GetScreenPoint(const gfx::Point& view) const = 0;
|
||||||
|
|
||||||
// Open the specified text in the default text editor.
|
// Open the specified text in the default text editor.
|
||||||
virtual void ViewText(const std::string& text);
|
virtual void ViewText(const std::string& text) = 0;
|
||||||
|
|
||||||
// Forward the keyboard event to the application or frame window to allow
|
// Forward the keyboard event to the application or frame window to allow
|
||||||
// processing of shortcut keys.
|
// processing of shortcut keys.
|
||||||
virtual bool HandleKeyboardEvent(
|
virtual bool HandleKeyboardEvent(
|
||||||
const content::NativeWebKeyboardEvent& event);
|
const content::NativeWebKeyboardEvent& event) = 0;
|
||||||
|
|
||||||
// See WebContentsDelegate documentation.
|
// See WebContentsDelegate documentation.
|
||||||
virtual bool PreHandleGestureEvent(content::WebContents* source,
|
virtual bool PreHandleGestureEvent(content::WebContents* source,
|
||||||
@@ -262,7 +241,7 @@ class CefBrowserPlatformDelegate {
|
|||||||
|
|
||||||
// Returns the OS event handle, if any, associated with |event|.
|
// Returns the OS event handle, if any, associated with |event|.
|
||||||
virtual CefEventHandle GetEventHandle(
|
virtual CefEventHandle GetEventHandle(
|
||||||
const content::NativeWebKeyboardEvent& event) const;
|
const content::NativeWebKeyboardEvent& event) const = 0;
|
||||||
|
|
||||||
// Create the platform-specific file dialog runner.
|
// Create the platform-specific file dialog runner.
|
||||||
virtual std::unique_ptr<CefFileDialogRunner> CreateFileDialogRunner();
|
virtual std::unique_ptr<CefFileDialogRunner> CreateFileDialogRunner();
|
||||||
@@ -272,15 +251,15 @@ class CefBrowserPlatformDelegate {
|
|||||||
CreateJavaScriptDialogRunner();
|
CreateJavaScriptDialogRunner();
|
||||||
|
|
||||||
// Create the platform-specific menu runner.
|
// Create the platform-specific menu runner.
|
||||||
virtual std::unique_ptr<CefMenuRunner> CreateMenuRunner();
|
virtual std::unique_ptr<CefMenuRunner> CreateMenuRunner() = 0;
|
||||||
|
|
||||||
// Returns true if this delegate implements windowless rendering. May be
|
// Returns true if this delegate implements windowless rendering. May be
|
||||||
// called on multiple threads.
|
// called on multiple threads.
|
||||||
virtual bool IsWindowless() const;
|
virtual bool IsWindowless() const = 0;
|
||||||
|
|
||||||
// Returns true if this delegate implements views-hosted browser handling. May
|
// Returns true if this delegate implements views-hosted browser handling. May
|
||||||
// be called on multiple threads.
|
// be called on multiple threads.
|
||||||
virtual bool IsViewsHosted() const;
|
virtual bool IsViewsHosted() const = 0;
|
||||||
|
|
||||||
// Notify the browser that it was hidden. Only used with windowless rendering.
|
// Notify the browser that it was hidden. Only used with windowless rendering.
|
||||||
virtual void WasHidden(bool hidden);
|
virtual void WasHidden(bool hidden);
|
||||||
@@ -320,14 +299,13 @@ class CefBrowserPlatformDelegate {
|
|||||||
cef_drag_operations_mask_t allowed_ops);
|
cef_drag_operations_mask_t allowed_ops);
|
||||||
virtual void DragTargetDragLeave();
|
virtual void DragTargetDragLeave();
|
||||||
virtual void DragTargetDrop(const CefMouseEvent& event);
|
virtual void DragTargetDrop(const CefMouseEvent& event);
|
||||||
virtual void StartDragging(
|
virtual void StartDragging(const content::DropData& drop_data,
|
||||||
const content::DropData& drop_data,
|
blink::WebDragOperationsMask allowed_ops,
|
||||||
blink::DragOperationsMask allowed_ops,
|
const gfx::ImageSkia& image,
|
||||||
const gfx::ImageSkia& image,
|
const gfx::Vector2d& image_offset,
|
||||||
const gfx::Vector2d& image_offset,
|
const content::DragEventSourceInfo& event_info,
|
||||||
const blink::mojom::DragEventSourceInfo& event_info,
|
content::RenderWidgetHostImpl* source_rwh);
|
||||||
content::RenderWidgetHostImpl* source_rwh);
|
virtual void UpdateDragCursor(blink::WebDragOperation operation);
|
||||||
virtual void UpdateDragCursor(blink::DragOperation operation);
|
|
||||||
virtual void DragSourceEndedAt(int x, int y, cef_drag_operations_mask_t op);
|
virtual void DragSourceEndedAt(int x, int y, cef_drag_operations_mask_t op);
|
||||||
virtual void DragSourceSystemDragEnded();
|
virtual void DragSourceSystemDragEnded();
|
||||||
virtual void AccessibilityEventReceived(
|
virtual void AccessibilityEventReceived(
|
||||||
@@ -365,7 +343,7 @@ class CefBrowserPlatformDelegate {
|
|||||||
|
|
||||||
// Not owned by this object.
|
// Not owned by this object.
|
||||||
content::WebContents* web_contents_ = nullptr;
|
content::WebContents* web_contents_ = nullptr;
|
||||||
CefBrowserHostBase* browser_ = nullptr;
|
CefBrowserHostImpl* browser_ = nullptr;
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(CefBrowserPlatformDelegate);
|
DISALLOW_COPY_AND_ASSIGN(CefBrowserPlatformDelegate);
|
||||||
};
|
};
|
||||||
|
@@ -11,7 +11,6 @@
|
|||||||
#include "base/memory/ptr_util.h"
|
#include "base/memory/ptr_util.h"
|
||||||
#include "build/build_config.h"
|
#include "build/build_config.h"
|
||||||
|
|
||||||
#include "libcef/browser/browser_host_base.h"
|
|
||||||
#include "libcef/browser/chrome/browser_platform_delegate_chrome.h"
|
#include "libcef/browser/chrome/browser_platform_delegate_chrome.h"
|
||||||
#include "libcef/browser/extensions/browser_platform_delegate_background.h"
|
#include "libcef/browser/extensions/browser_platform_delegate_background.h"
|
||||||
#include "libcef/features/runtime_checks.h"
|
#include "libcef/features/runtime_checks.h"
|
||||||
@@ -19,7 +18,7 @@
|
|||||||
#if defined(OS_WIN)
|
#if defined(OS_WIN)
|
||||||
#include "libcef/browser/native/browser_platform_delegate_native_win.h"
|
#include "libcef/browser/native/browser_platform_delegate_native_win.h"
|
||||||
#include "libcef/browser/osr/browser_platform_delegate_osr_win.h"
|
#include "libcef/browser/osr/browser_platform_delegate_osr_win.h"
|
||||||
#elif defined(OS_MAC)
|
#elif defined(OS_MACOSX)
|
||||||
#include "libcef/browser/native/browser_platform_delegate_native_mac.h"
|
#include "libcef/browser/native/browser_platform_delegate_native_mac.h"
|
||||||
#include "libcef/browser/osr/browser_platform_delegate_osr_mac.h"
|
#include "libcef/browser/osr/browser_platform_delegate_osr_mac.h"
|
||||||
#elif defined(OS_LINUX)
|
#elif defined(OS_LINUX)
|
||||||
@@ -41,7 +40,7 @@ std::unique_ptr<CefBrowserPlatformDelegateNative> CreateNativeDelegate(
|
|||||||
#if defined(OS_WIN)
|
#if defined(OS_WIN)
|
||||||
return std::make_unique<CefBrowserPlatformDelegateNativeWin>(
|
return std::make_unique<CefBrowserPlatformDelegateNativeWin>(
|
||||||
window_info, background_color);
|
window_info, background_color);
|
||||||
#elif defined(OS_MAC)
|
#elif defined(OS_MACOSX)
|
||||||
return std::make_unique<CefBrowserPlatformDelegateNativeMac>(
|
return std::make_unique<CefBrowserPlatformDelegateNativeMac>(
|
||||||
window_info, background_color);
|
window_info, background_color);
|
||||||
#elif defined(OS_LINUX)
|
#elif defined(OS_LINUX)
|
||||||
@@ -57,7 +56,7 @@ std::unique_ptr<CefBrowserPlatformDelegateOsr> CreateOSRDelegate(
|
|||||||
#if defined(OS_WIN)
|
#if defined(OS_WIN)
|
||||||
return std::make_unique<CefBrowserPlatformDelegateOsrWin>(
|
return std::make_unique<CefBrowserPlatformDelegateOsrWin>(
|
||||||
std::move(native_delegate), use_shared_texture, use_external_begin_frame);
|
std::move(native_delegate), use_shared_texture, use_external_begin_frame);
|
||||||
#elif defined(OS_MAC)
|
#elif defined(OS_MACOSX)
|
||||||
return std::make_unique<CefBrowserPlatformDelegateOsrMac>(
|
return std::make_unique<CefBrowserPlatformDelegateOsrMac>(
|
||||||
std::move(native_delegate));
|
std::move(native_delegate));
|
||||||
#elif defined(OS_LINUX)
|
#elif defined(OS_LINUX)
|
||||||
@@ -70,7 +69,7 @@ std::unique_ptr<CefBrowserPlatformDelegateOsr> CreateOSRDelegate(
|
|||||||
|
|
||||||
// static
|
// static
|
||||||
std::unique_ptr<CefBrowserPlatformDelegate> CefBrowserPlatformDelegate::Create(
|
std::unique_ptr<CefBrowserPlatformDelegate> CefBrowserPlatformDelegate::Create(
|
||||||
const CefBrowserCreateParams& create_params) {
|
CefBrowserHostImpl::CreateParams& create_params) {
|
||||||
const bool is_windowless =
|
const bool is_windowless =
|
||||||
create_params.window_info &&
|
create_params.window_info &&
|
||||||
create_params.window_info->windowless_rendering_enabled &&
|
create_params.window_info->windowless_rendering_enabled &&
|
||||||
@@ -79,11 +78,7 @@ std::unique_ptr<CefBrowserPlatformDelegate> CefBrowserPlatformDelegate::Create(
|
|||||||
&create_params.settings, is_windowless ? STATE_ENABLED : STATE_DISABLED);
|
&create_params.settings, is_windowless ? STATE_ENABLED : STATE_DISABLED);
|
||||||
|
|
||||||
if (cef::IsChromeRuntimeEnabled()) {
|
if (cef::IsChromeRuntimeEnabled()) {
|
||||||
// CefWindowInfo is not used in this case.
|
return std::make_unique<CefBrowserPlatformDelegateChrome>(background_color);
|
||||||
std::unique_ptr<CefBrowserPlatformDelegateNative> native_delegate =
|
|
||||||
CreateNativeDelegate(CefWindowInfo(), background_color);
|
|
||||||
return std::make_unique<CefBrowserPlatformDelegateChrome>(
|
|
||||||
std::move(native_delegate));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (create_params.window_info) {
|
if (create_params.window_info) {
|
||||||
|
@@ -1,48 +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_CHROME_BROWSER_DELEGATE_H_
|
|
||||||
#define CEF_LIBCEF_BROWSER_CHROME_BROWSER_DELEGATE_H_
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
#include "base/memory/scoped_refptr.h"
|
|
||||||
#include "content/public/browser/web_contents_delegate.h"
|
|
||||||
|
|
||||||
class Browser;
|
|
||||||
|
|
||||||
namespace cef {
|
|
||||||
|
|
||||||
// Delegate for the chrome Browser object. Lifespan is controlled by the Browser
|
|
||||||
// object. See the ChromeBrowserDelegate documentation for additional details.
|
|
||||||
// Only accessed on the UI thread.
|
|
||||||
class BrowserDelegate : public content::WebContentsDelegate {
|
|
||||||
public:
|
|
||||||
// Opaque ref-counted base class for CEF-specific parameters passed via
|
|
||||||
// Browser::CreateParams::cef_params and possibly shared by multiple Browser
|
|
||||||
// instances.
|
|
||||||
class CreateParams : public base::RefCounted<CreateParams> {
|
|
||||||
public:
|
|
||||||
virtual ~CreateParams() {}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Called from the Browser constructor to create a new delegate.
|
|
||||||
static std::unique_ptr<BrowserDelegate> Create(
|
|
||||||
Browser* browser,
|
|
||||||
scoped_refptr<CreateParams> cef_params);
|
|
||||||
|
|
||||||
~BrowserDelegate() override {}
|
|
||||||
|
|
||||||
// Called immediately after |new_contents| is created.
|
|
||||||
virtual void OnWebContentsCreated(content::WebContents* new_contents) = 0;
|
|
||||||
|
|
||||||
// Add or remove ownership of the WebContents.
|
|
||||||
virtual void SetAsDelegate(content::WebContents* web_contents,
|
|
||||||
bool set_delegate) = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace cef
|
|
||||||
|
|
||||||
#endif // CEF_LIBCEF_BROWSER_CHROME_BROWSER_DELEGATE_H_
|
|
@@ -4,98 +4,135 @@
|
|||||||
|
|
||||||
#include "libcef/browser/chrome/browser_platform_delegate_chrome.h"
|
#include "libcef/browser/chrome/browser_platform_delegate_chrome.h"
|
||||||
|
|
||||||
|
#include "base/logging.h"
|
||||||
#include "chrome/browser/ui/browser.h"
|
#include "chrome/browser/ui/browser.h"
|
||||||
|
#include "chrome/browser/ui/browser_tabstrip.h"
|
||||||
#include "chrome/browser/ui/browser_window.h"
|
#include "chrome/browser/ui/browser_window.h"
|
||||||
#include "ui/display/screen.h"
|
#include "chrome/browser/ui/tabs/tab_strip_model.h"
|
||||||
#include "ui/gfx/geometry/point.h"
|
|
||||||
|
|
||||||
CefBrowserPlatformDelegateChrome::CefBrowserPlatformDelegateChrome(
|
CefBrowserPlatformDelegateChrome::CefBrowserPlatformDelegateChrome(
|
||||||
std::unique_ptr<CefBrowserPlatformDelegateNative> native_delegate)
|
SkColor background_color)
|
||||||
: native_delegate_(std::move(native_delegate)) {
|
: background_color_(background_color) {}
|
||||||
native_delegate_->set_windowless_handler(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserPlatformDelegateChrome::WebContentsCreated(
|
content::WebContents* CefBrowserPlatformDelegateChrome::CreateWebContents(
|
||||||
content::WebContents* web_contents,
|
CefBrowserHostImpl::CreateParams& create_params,
|
||||||
bool owned) {
|
bool& own_web_contents) {
|
||||||
CefBrowserPlatformDelegate::WebContentsCreated(web_contents, owned);
|
// Get or create the request context and profile.
|
||||||
native_delegate_->WebContentsCreated(web_contents, /*owned=*/false);
|
CefRefPtr<CefRequestContextImpl> request_context_impl =
|
||||||
|
CefRequestContextImpl::GetOrCreateForRequestContext(
|
||||||
|
create_params.request_context);
|
||||||
|
CHECK(request_context_impl);
|
||||||
|
auto cef_browser_context = request_context_impl->GetBrowserContext();
|
||||||
|
CHECK(cef_browser_context);
|
||||||
|
auto profile = cef_browser_context->AsProfile();
|
||||||
|
|
||||||
|
if (!create_params.request_context) {
|
||||||
|
// Using the global request context.
|
||||||
|
create_params.request_context = request_context_impl.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a Browser.
|
||||||
|
Browser::CreateParams params =
|
||||||
|
Browser::CreateParams(profile, /*user_gesture=*/false);
|
||||||
|
chrome_browser_ = new Browser(params);
|
||||||
|
|
||||||
|
chrome::AddTabAt(chrome_browser_, create_params.url, /*idx=*/-1,
|
||||||
|
/*foreground=*/true);
|
||||||
|
|
||||||
|
auto web_contents =
|
||||||
|
chrome_browser_->tab_strip_model()->GetActiveWebContents();
|
||||||
|
CHECK(web_contents);
|
||||||
|
|
||||||
|
own_web_contents = false;
|
||||||
|
return web_contents;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CefBrowserPlatformDelegateChrome::WebContentsDestroyed(
|
void CefBrowserPlatformDelegateChrome::WebContentsDestroyed(
|
||||||
content::WebContents* web_contents) {
|
content::WebContents* web_contents) {
|
||||||
CefBrowserPlatformDelegate::WebContentsDestroyed(web_contents);
|
CefBrowserPlatformDelegate::WebContentsDestroyed(web_contents);
|
||||||
native_delegate_->WebContentsDestroyed(web_contents);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserPlatformDelegateChrome::BrowserCreated(
|
// TODO(chrome-runtime): Find a better way to be notified of Browser
|
||||||
CefBrowserHostBase* browser) {
|
// destruction.
|
||||||
CefBrowserPlatformDelegate::BrowserCreated(browser);
|
browser_->WindowDestroyed();
|
||||||
native_delegate_->BrowserCreated(browser);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CefBrowserPlatformDelegateChrome::BrowserDestroyed(
|
void CefBrowserPlatformDelegateChrome::BrowserDestroyed(
|
||||||
CefBrowserHostBase* browser) {
|
CefBrowserHostImpl* browser) {
|
||||||
CefBrowserPlatformDelegate::BrowserDestroyed(browser);
|
CefBrowserPlatformDelegate::BrowserDestroyed(browser);
|
||||||
native_delegate_->BrowserDestroyed(browser);
|
|
||||||
|
// Release the reference added in CreateHostWindow.
|
||||||
|
browser->Release();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CefBrowserPlatformDelegateChrome::CreateHostWindow() {
|
||||||
|
// Keep a reference to the CEF browser.
|
||||||
|
browser_->AddRef();
|
||||||
|
|
||||||
|
chrome_browser_->window()->Show();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CefBrowserPlatformDelegateChrome::CloseHostWindow() {}
|
||||||
|
|
||||||
|
CefWindowHandle CefBrowserPlatformDelegateChrome::GetHostWindowHandle() const {
|
||||||
|
return kNullWindowHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
SkColor CefBrowserPlatformDelegateChrome::GetBackgroundColor() const {
|
SkColor CefBrowserPlatformDelegateChrome::GetBackgroundColor() const {
|
||||||
return native_delegate_->GetBackgroundColor();
|
return background_color_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CefBrowserPlatformDelegateChrome::SendKeyEvent(const CefKeyEvent& event) {
|
void CefBrowserPlatformDelegateChrome::WasResized() {}
|
||||||
native_delegate_->SendKeyEvent(event);
|
|
||||||
}
|
void CefBrowserPlatformDelegateChrome::SendKeyEvent(const CefKeyEvent& event) {}
|
||||||
|
|
||||||
void CefBrowserPlatformDelegateChrome::SendMouseClickEvent(
|
void CefBrowserPlatformDelegateChrome::SendMouseClickEvent(
|
||||||
const CefMouseEvent& event,
|
const CefMouseEvent& event,
|
||||||
CefBrowserHost::MouseButtonType type,
|
CefBrowserHost::MouseButtonType type,
|
||||||
bool mouseUp,
|
bool mouseUp,
|
||||||
int clickCount) {
|
int clickCount) {}
|
||||||
native_delegate_->SendMouseClickEvent(event, type, mouseUp, clickCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserPlatformDelegateChrome::SendMouseMoveEvent(
|
void CefBrowserPlatformDelegateChrome::SendMouseMoveEvent(
|
||||||
const CefMouseEvent& event,
|
const CefMouseEvent& event,
|
||||||
bool mouseLeave) {
|
bool mouseLeave) {}
|
||||||
native_delegate_->SendMouseMoveEvent(event, mouseLeave);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CefBrowserPlatformDelegateChrome::SendMouseWheelEvent(
|
void CefBrowserPlatformDelegateChrome::SendMouseWheelEvent(
|
||||||
const CefMouseEvent& event,
|
const CefMouseEvent& event,
|
||||||
int deltaX,
|
int deltaX,
|
||||||
int deltaY) {
|
int deltaY) {}
|
||||||
native_delegate_->SendMouseWheelEvent(event, deltaX, deltaY);
|
|
||||||
}
|
void CefBrowserPlatformDelegateChrome::SendTouchEvent(
|
||||||
|
const CefTouchEvent& event) {}
|
||||||
|
|
||||||
|
void CefBrowserPlatformDelegateChrome::SendFocusEvent(bool setFocus) {}
|
||||||
|
|
||||||
gfx::Point CefBrowserPlatformDelegateChrome::GetScreenPoint(
|
gfx::Point CefBrowserPlatformDelegateChrome::GetScreenPoint(
|
||||||
const gfx::Point& view) const {
|
const gfx::Point& view) const {
|
||||||
auto screen = display::Screen::GetScreen();
|
return view;
|
||||||
|
|
||||||
gfx::NativeWindow native_window =
|
|
||||||
chrome_browser_ ? chrome_browser_->window()->GetNativeWindow() : nullptr;
|
|
||||||
|
|
||||||
// Returns screen pixel coordinates.
|
|
||||||
auto screen_rect = screen->DIPToScreenRectInWindow(
|
|
||||||
native_window, gfx::Rect(view, gfx::Size(0, 0)));
|
|
||||||
return screen_rect.origin();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CefBrowserPlatformDelegateChrome::ViewText(const std::string& text) {
|
void CefBrowserPlatformDelegateChrome::ViewText(const std::string& text) {}
|
||||||
native_delegate_->ViewText(text);
|
|
||||||
|
bool CefBrowserPlatformDelegateChrome::HandleKeyboardEvent(
|
||||||
|
const content::NativeWebKeyboardEvent& event) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
CefWindowHandle CefBrowserPlatformDelegateChrome::GetParentWindowHandle()
|
CefEventHandle CefBrowserPlatformDelegateChrome::GetEventHandle(
|
||||||
const {
|
const content::NativeWebKeyboardEvent& event) const {
|
||||||
return GetHostWindowHandle();
|
return kNullEventHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
gfx::Point CefBrowserPlatformDelegateChrome::GetParentScreenPoint(
|
std::unique_ptr<CefMenuRunner>
|
||||||
const gfx::Point& view) const {
|
CefBrowserPlatformDelegateChrome::CreateMenuRunner() {
|
||||||
return GetScreenPoint(view);
|
NOTIMPLEMENTED();
|
||||||
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CefBrowserPlatformDelegateChrome::set_chrome_browser(Browser* browser) {
|
bool CefBrowserPlatformDelegateChrome::IsWindowless() const {
|
||||||
chrome_browser_ = browser;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CefBrowserPlatformDelegateChrome::IsViewsHosted() const {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -6,25 +6,25 @@
|
|||||||
#define CEF_LIBCEF_BROWSER_CHROME_BROWSER_PLATFORM_DELEGATE_CHROME_H_
|
#define CEF_LIBCEF_BROWSER_CHROME_BROWSER_PLATFORM_DELEGATE_CHROME_H_
|
||||||
|
|
||||||
#include "libcef/browser/browser_platform_delegate.h"
|
#include "libcef/browser/browser_platform_delegate.h"
|
||||||
#include "libcef/browser/native/browser_platform_delegate_native.h"
|
|
||||||
|
|
||||||
class Browser;
|
class Browser;
|
||||||
|
|
||||||
// Implementation of Chrome-based browser functionality.
|
// Implementation of Chrome-based browser functionality.
|
||||||
class CefBrowserPlatformDelegateChrome
|
class CefBrowserPlatformDelegateChrome : public CefBrowserPlatformDelegate {
|
||||||
: public CefBrowserPlatformDelegate,
|
|
||||||
public CefBrowserPlatformDelegateNative::WindowlessHandler {
|
|
||||||
public:
|
public:
|
||||||
explicit CefBrowserPlatformDelegateChrome(
|
explicit CefBrowserPlatformDelegateChrome(SkColor background_color);
|
||||||
std::unique_ptr<CefBrowserPlatformDelegateNative> native_delegate);
|
|
||||||
|
|
||||||
// CefBrowserPlatformDelegate overrides.
|
// CefBrowserPlatformDelegate overrides.
|
||||||
void WebContentsCreated(content::WebContents* web_contents,
|
content::WebContents* CreateWebContents(
|
||||||
bool owned) override;
|
CefBrowserHostImpl::CreateParams& create_params,
|
||||||
|
bool& own_web_contents) override;
|
||||||
void WebContentsDestroyed(content::WebContents* web_contents) override;
|
void WebContentsDestroyed(content::WebContents* web_contents) override;
|
||||||
void BrowserCreated(CefBrowserHostBase* browser) override;
|
void BrowserDestroyed(CefBrowserHostImpl* browser) override;
|
||||||
void BrowserDestroyed(CefBrowserHostBase* browser) override;
|
bool CreateHostWindow() override;
|
||||||
|
void CloseHostWindow() override;
|
||||||
|
CefWindowHandle GetHostWindowHandle() const override;
|
||||||
SkColor GetBackgroundColor() const override;
|
SkColor GetBackgroundColor() const override;
|
||||||
|
void WasResized() override;
|
||||||
void SendKeyEvent(const CefKeyEvent& event) override;
|
void SendKeyEvent(const CefKeyEvent& event) override;
|
||||||
void SendMouseClickEvent(const CefMouseEvent& event,
|
void SendMouseClickEvent(const CefMouseEvent& event,
|
||||||
CefBrowserHost::MouseButtonType type,
|
CefBrowserHost::MouseButtonType type,
|
||||||
@@ -34,19 +34,22 @@ class CefBrowserPlatformDelegateChrome
|
|||||||
void SendMouseWheelEvent(const CefMouseEvent& event,
|
void SendMouseWheelEvent(const CefMouseEvent& event,
|
||||||
int deltaX,
|
int deltaX,
|
||||||
int deltaY) override;
|
int deltaY) override;
|
||||||
|
void SendTouchEvent(const CefTouchEvent& event) override;
|
||||||
|
void SendFocusEvent(bool setFocus) override;
|
||||||
gfx::Point GetScreenPoint(const gfx::Point& view) const override;
|
gfx::Point GetScreenPoint(const gfx::Point& view) const override;
|
||||||
void ViewText(const std::string& text) override;
|
void ViewText(const std::string& text) override;
|
||||||
|
bool HandleKeyboardEvent(
|
||||||
// CefBrowserPlatformDelegateNative::WindowlessHandler methods:
|
const content::NativeWebKeyboardEvent& event) override;
|
||||||
CefWindowHandle GetParentWindowHandle() const override;
|
CefEventHandle GetEventHandle(
|
||||||
gfx::Point GetParentScreenPoint(const gfx::Point& view) const override;
|
const content::NativeWebKeyboardEvent& event) const override;
|
||||||
|
std::unique_ptr<CefMenuRunner> CreateMenuRunner() override;
|
||||||
void set_chrome_browser(Browser* browser);
|
bool IsWindowless() const override;
|
||||||
|
bool IsViewsHosted() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<CefBrowserPlatformDelegateNative> native_delegate_;
|
const SkColor background_color_;
|
||||||
|
|
||||||
Browser* chrome_browser_ = nullptr;
|
Browser* chrome_browser_;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CEF_LIBCEF_BROWSER_CHROME_BROWSER_PLATFORM_DELEGATE_CHROME_H_
|
#endif // CEF_LIBCEF_BROWSER_CHROME_BROWSER_PLATFORM_DELEGATE_CHROME_H_
|
||||||
|
@@ -4,8 +4,6 @@
|
|||||||
|
|
||||||
#include "libcef/browser/chrome/chrome_browser_context.h"
|
#include "libcef/browser/chrome/chrome_browser_context.h"
|
||||||
|
|
||||||
#include "libcef/browser/prefs/browser_prefs.h"
|
|
||||||
|
|
||||||
#include "chrome/browser/profiles/profile_manager.h"
|
#include "chrome/browser/profiles/profile_manager.h"
|
||||||
|
|
||||||
ChromeBrowserContext::ChromeBrowserContext(
|
ChromeBrowserContext::ChromeBrowserContext(
|
||||||
@@ -30,8 +28,6 @@ void ChromeBrowserContext::Initialize() {
|
|||||||
// The global ProfileManager instance can be retrieved via
|
// The global ProfileManager instance can be retrieved via
|
||||||
// |g_browser_process->profile_manager()|.
|
// |g_browser_process->profile_manager()|.
|
||||||
profile_ = ProfileManager::GetLastUsedProfileAllowedByPolicy();
|
profile_ = ProfileManager::GetLastUsedProfileAllowedByPolicy();
|
||||||
|
|
||||||
browser_prefs::SetLanguagePrefs(profile_);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChromeBrowserContext::Shutdown() {
|
void ChromeBrowserContext::Shutdown() {
|
||||||
|
@@ -1,260 +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 <memory>
|
|
||||||
|
|
||||||
#include "libcef/browser/chrome/chrome_browser_delegate.h"
|
|
||||||
|
|
||||||
#include "libcef/browser/browser_contents_delegate.h"
|
|
||||||
#include "libcef/browser/browser_host_base.h"
|
|
||||||
#include "libcef/browser/browser_info_manager.h"
|
|
||||||
#include "libcef/browser/browser_platform_delegate.h"
|
|
||||||
#include "libcef/browser/chrome/chrome_browser_host_impl.h"
|
|
||||||
#include "libcef/browser/request_context_impl.h"
|
|
||||||
#include "libcef/common/app_manager.h"
|
|
||||||
|
|
||||||
#include "chrome/browser/profiles/profile.h"
|
|
||||||
#include "chrome/browser/ui/browser.h"
|
|
||||||
#include "content/public/browser/keyboard_event_processing_result.h"
|
|
||||||
#include "content/public/browser/native_web_keyboard_event.h"
|
|
||||||
|
|
||||||
using content::KeyboardEventProcessingResult;
|
|
||||||
|
|
||||||
ChromeBrowserDelegate::ChromeBrowserDelegate(
|
|
||||||
Browser* browser,
|
|
||||||
const CefBrowserCreateParams& create_params)
|
|
||||||
: browser_(browser), create_params_(create_params) {
|
|
||||||
DCHECK(browser_);
|
|
||||||
}
|
|
||||||
|
|
||||||
ChromeBrowserDelegate::~ChromeBrowserDelegate() = default;
|
|
||||||
|
|
||||||
void ChromeBrowserDelegate::OnWebContentsCreated(
|
|
||||||
content::WebContents* new_contents) {
|
|
||||||
// Necessary to receive LoadingStateChanged calls during initial navigation.
|
|
||||||
// This will be called again in Browser::SetAsDelegate, which should be fine.
|
|
||||||
new_contents->SetDelegate(browser_);
|
|
||||||
|
|
||||||
SetAsDelegate(new_contents, /*set_delegate=*/true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserDelegate::SetAsDelegate(content::WebContents* web_contents,
|
|
||||||
bool set_delegate) {
|
|
||||||
DCHECK(web_contents);
|
|
||||||
auto browser_host =
|
|
||||||
ChromeBrowserHostImpl::GetBrowserForContents(web_contents);
|
|
||||||
|
|
||||||
// |set_delegate=false| only makes sense if we already have a browser host.
|
|
||||||
DCHECK(browser_host || set_delegate);
|
|
||||||
|
|
||||||
if (browser_host) {
|
|
||||||
// We already have a browser host, so just change the associated Browser.
|
|
||||||
browser_host->SetBrowser(set_delegate ? browser_ : nullptr);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto platform_delegate = CefBrowserPlatformDelegate::Create(create_params_);
|
|
||||||
CHECK(platform_delegate);
|
|
||||||
|
|
||||||
auto browser_info = CefBrowserInfoManager::GetInstance()->CreateBrowserInfo(
|
|
||||||
/*is_popup=*/false, /*is_windowless=*/false, create_params_.extra_info);
|
|
||||||
|
|
||||||
auto request_context_impl =
|
|
||||||
CefRequestContextImpl::GetOrCreateForRequestContext(
|
|
||||||
create_params_.request_context);
|
|
||||||
|
|
||||||
CreateBrowser(web_contents, create_params_.settings, create_params_.client,
|
|
||||||
std::move(platform_delegate), browser_info,
|
|
||||||
request_context_impl);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserDelegate::WebContentsCreated(
|
|
||||||
content::WebContents* source_contents,
|
|
||||||
int opener_render_process_id,
|
|
||||||
int opener_render_frame_id,
|
|
||||||
const std::string& frame_name,
|
|
||||||
const GURL& target_url,
|
|
||||||
content::WebContents* new_contents) {
|
|
||||||
CefBrowserSettings settings;
|
|
||||||
CefRefPtr<CefClient> client;
|
|
||||||
std::unique_ptr<CefBrowserPlatformDelegate> platform_delegate;
|
|
||||||
CefRefPtr<CefDictionaryValue> extra_info;
|
|
||||||
|
|
||||||
CefBrowserInfoManager::GetInstance()->WebContentsCreated(
|
|
||||||
target_url, opener_render_process_id, opener_render_frame_id, settings,
|
|
||||||
client, platform_delegate, extra_info);
|
|
||||||
|
|
||||||
auto opener = ChromeBrowserHostImpl::GetBrowserForContents(source_contents);
|
|
||||||
if (!opener) {
|
|
||||||
LOG(ERROR) << "No opener found for chrome popup browser";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto browser_info =
|
|
||||||
CefBrowserInfoManager::GetInstance()->CreatePopupBrowserInfo(
|
|
||||||
new_contents, /*is_windowless=*/false, extra_info);
|
|
||||||
CHECK(browser_info->is_popup());
|
|
||||||
|
|
||||||
// Popups must share the same RequestContext as the parent.
|
|
||||||
auto request_context_impl = opener->request_context();
|
|
||||||
CHECK(request_context_impl);
|
|
||||||
|
|
||||||
// We don't officially own |new_contents| until AddNewContents() is called.
|
|
||||||
// However, we need to install observers/delegates here.
|
|
||||||
CreateBrowser(new_contents, settings, client, std::move(platform_delegate),
|
|
||||||
browser_info, request_context_impl);
|
|
||||||
}
|
|
||||||
|
|
||||||
content::WebContents* ChromeBrowserDelegate::OpenURLFromTab(
|
|
||||||
content::WebContents* source,
|
|
||||||
const content::OpenURLParams& params) {
|
|
||||||
// Return nullptr to cancel the navigation. Otherwise, proceed with default
|
|
||||||
// chrome handling.
|
|
||||||
if (auto delegate = GetDelegateForWebContents(source)) {
|
|
||||||
return delegate->OpenURLFromTab(source, params);
|
|
||||||
}
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserDelegate::LoadingStateChanged(content::WebContents* source,
|
|
||||||
bool to_different_document) {
|
|
||||||
if (auto delegate = GetDelegateForWebContents(source)) {
|
|
||||||
delegate->LoadingStateChanged(source, to_different_document);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserDelegate::UpdateTargetURL(content::WebContents* source,
|
|
||||||
const GURL& url) {
|
|
||||||
if (auto delegate = GetDelegateForWebContents(source)) {
|
|
||||||
delegate->UpdateTargetURL(source, url);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ChromeBrowserDelegate::DidAddMessageToConsole(
|
|
||||||
content::WebContents* source,
|
|
||||||
blink::mojom::ConsoleMessageLevel log_level,
|
|
||||||
const base::string16& message,
|
|
||||||
int32_t line_no,
|
|
||||||
const base::string16& source_id) {
|
|
||||||
if (auto delegate = GetDelegateForWebContents(source)) {
|
|
||||||
return delegate->DidAddMessageToConsole(source, log_level, message, line_no,
|
|
||||||
source_id);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserDelegate::DidNavigateMainFramePostCommit(
|
|
||||||
content::WebContents* web_contents) {
|
|
||||||
if (auto delegate = GetDelegateForWebContents(web_contents)) {
|
|
||||||
delegate->DidNavigateMainFramePostCommit(web_contents);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserDelegate::EnterFullscreenModeForTab(
|
|
||||||
content::RenderFrameHost* requesting_frame,
|
|
||||||
const blink::mojom::FullscreenOptions& options) {
|
|
||||||
auto web_contents =
|
|
||||||
content::WebContents::FromRenderFrameHost(requesting_frame);
|
|
||||||
if (!web_contents)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (auto delegate = GetDelegateForWebContents(web_contents)) {
|
|
||||||
delegate->EnterFullscreenModeForTab(requesting_frame, options);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserDelegate::ExitFullscreenModeForTab(
|
|
||||||
content::WebContents* web_contents) {
|
|
||||||
if (auto delegate = GetDelegateForWebContents(web_contents)) {
|
|
||||||
delegate->ExitFullscreenModeForTab(web_contents);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
KeyboardEventProcessingResult ChromeBrowserDelegate::PreHandleKeyboardEvent(
|
|
||||||
content::WebContents* source,
|
|
||||||
const content::NativeWebKeyboardEvent& event) {
|
|
||||||
if (auto delegate = GetDelegateForWebContents(source)) {
|
|
||||||
return delegate->PreHandleKeyboardEvent(source, event);
|
|
||||||
}
|
|
||||||
return KeyboardEventProcessingResult::NOT_HANDLED;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ChromeBrowserDelegate::HandleKeyboardEvent(
|
|
||||||
content::WebContents* source,
|
|
||||||
const content::NativeWebKeyboardEvent& event) {
|
|
||||||
if (auto delegate = GetDelegateForWebContents(source)) {
|
|
||||||
return delegate->HandleKeyboardEvent(source, event);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserDelegate::CreateBrowser(
|
|
||||||
content::WebContents* web_contents,
|
|
||||||
CefBrowserSettings settings,
|
|
||||||
CefRefPtr<CefClient> client,
|
|
||||||
std::unique_ptr<CefBrowserPlatformDelegate> platform_delegate,
|
|
||||||
scoped_refptr<CefBrowserInfo> browser_info,
|
|
||||||
CefRefPtr<CefRequestContextImpl> request_context_impl) {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
DCHECK(web_contents);
|
|
||||||
DCHECK(platform_delegate);
|
|
||||||
DCHECK(browser_info);
|
|
||||||
DCHECK(request_context_impl);
|
|
||||||
|
|
||||||
if (!client) {
|
|
||||||
if (auto app = CefAppManager::Get()->GetApplication()) {
|
|
||||||
if (auto bph = app->GetBrowserProcessHandler()) {
|
|
||||||
client = bph->GetDefaultClient();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!client) {
|
|
||||||
LOG(WARNING) << "Creating a chrome browser without a client";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if chrome and CEF are using the same browser context.
|
|
||||||
// TODO(chrome-runtime): Verify if/when this might occur.
|
|
||||||
auto chrome_browser_context =
|
|
||||||
CefBrowserContext::FromBrowserContext(browser_->create_params().profile);
|
|
||||||
if (chrome_browser_context != request_context_impl->GetBrowserContext()) {
|
|
||||||
LOG(WARNING) << "Creating a chrome browser with mismatched context";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remains alive until the associated WebContents is destroyed.
|
|
||||||
CefRefPtr<ChromeBrowserHostImpl> browser_host =
|
|
||||||
new ChromeBrowserHostImpl(settings, client, std::move(platform_delegate),
|
|
||||||
browser_info, request_context_impl);
|
|
||||||
browser_host->Attach(browser_, web_contents);
|
|
||||||
}
|
|
||||||
|
|
||||||
CefBrowserContentsDelegate* ChromeBrowserDelegate::GetDelegateForWebContents(
|
|
||||||
content::WebContents* web_contents) {
|
|
||||||
auto browser_host =
|
|
||||||
ChromeBrowserHostImpl::GetBrowserForContents(web_contents);
|
|
||||||
if (browser_host)
|
|
||||||
return browser_host->contents_delegate();
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace cef {
|
|
||||||
|
|
||||||
// static
|
|
||||||
std::unique_ptr<BrowserDelegate> BrowserDelegate::Create(
|
|
||||||
Browser* browser,
|
|
||||||
scoped_refptr<CreateParams> cef_params) {
|
|
||||||
CefBrowserCreateParams create_params;
|
|
||||||
|
|
||||||
// Parameters from ChromeBrowserHostImpl::Create, or nullptr if the Browser
|
|
||||||
// was created from somewhere else.
|
|
||||||
auto params = static_cast<ChromeBrowserHostImpl::DelegateCreateParams*>(
|
|
||||||
cef_params.get());
|
|
||||||
if (params) {
|
|
||||||
create_params = params->create_params_;
|
|
||||||
}
|
|
||||||
|
|
||||||
return std::make_unique<ChromeBrowserDelegate>(browser, create_params);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace cef
|
|
@@ -1,104 +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_CHROME_CHROME_BROWSER_DELEGATE_H_
|
|
||||||
#define CEF_LIBCEF_BROWSER_CHROME_CHROME_BROWSER_DELEGATE_H_
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
#include "libcef/browser/browser_host_base.h"
|
|
||||||
#include "libcef/browser/browser_info.h"
|
|
||||||
#include "libcef/browser/chrome/browser_delegate.h"
|
|
||||||
|
|
||||||
#include "base/optional.h"
|
|
||||||
|
|
||||||
class CefBrowserContentsDelegate;
|
|
||||||
class CefRequestContextImpl;
|
|
||||||
class ChromeBrowserHostImpl;
|
|
||||||
|
|
||||||
// Implementation of the cef::BrowserDelegate interface. Lifespan is controlled
|
|
||||||
// by the Browser object. Only accessed on the UI thread.
|
|
||||||
//
|
|
||||||
// The Browser object represents the top-level Chrome browser window. One or
|
|
||||||
// more tabs (WebContents) are then owned by the Browser object via
|
|
||||||
// TabStripModel. A new Browser object can be created programmatically using
|
|
||||||
// "new Browser" or Browser::Create, or as a result of user action such as
|
|
||||||
// dragging a tab out of an existing window. New or existing tabs can also be
|
|
||||||
// added to an already existing Browser object.
|
|
||||||
//
|
|
||||||
// The Browser object acts as the WebContentsDelegate for all attached tabs. CEF
|
|
||||||
// integration requires WebContentsDelegate callbacks and notification of tab
|
|
||||||
// attach/detach. To support this integration a cef::BrowserDelegate
|
|
||||||
// (ChromeBrowserDelegate) member is created in the Browser constructor and
|
|
||||||
// receives delegation for the Browser callbacks. ChromeBrowserDelegate creates
|
|
||||||
// a new ChromeBrowserHostImpl when a tab is added to a Browser for the first
|
|
||||||
// time, and that ChromeBrowserHostImpl continues to exist until the tab's
|
|
||||||
// WebContents is destroyed. The associated WebContents object does not change,
|
|
||||||
// but the Browser object will change when the tab is dragged between windows.
|
|
||||||
class ChromeBrowserDelegate : public cef::BrowserDelegate {
|
|
||||||
public:
|
|
||||||
ChromeBrowserDelegate(Browser* browser,
|
|
||||||
const CefBrowserCreateParams& create_params);
|
|
||||||
~ChromeBrowserDelegate() override;
|
|
||||||
|
|
||||||
// cef::BrowserDelegate methods:
|
|
||||||
void OnWebContentsCreated(content::WebContents* new_contents) override;
|
|
||||||
void SetAsDelegate(content::WebContents* web_contents,
|
|
||||||
bool set_delegate) override;
|
|
||||||
|
|
||||||
// WebContentsDelegate methods:
|
|
||||||
void WebContentsCreated(content::WebContents* source_contents,
|
|
||||||
int opener_render_process_id,
|
|
||||||
int opener_render_frame_id,
|
|
||||||
const std::string& frame_name,
|
|
||||||
const GURL& target_url,
|
|
||||||
content::WebContents* new_contents) override;
|
|
||||||
content::WebContents* OpenURLFromTab(
|
|
||||||
content::WebContents* source,
|
|
||||||
const content::OpenURLParams& params) override;
|
|
||||||
void LoadingStateChanged(content::WebContents* source,
|
|
||||||
bool to_different_document) override;
|
|
||||||
void UpdateTargetURL(content::WebContents* source, const GURL& url) override;
|
|
||||||
bool DidAddMessageToConsole(content::WebContents* source,
|
|
||||||
blink::mojom::ConsoleMessageLevel log_level,
|
|
||||||
const base::string16& message,
|
|
||||||
int32_t line_no,
|
|
||||||
const base::string16& source_id) override;
|
|
||||||
void DidNavigateMainFramePostCommit(
|
|
||||||
content::WebContents* web_contents) override;
|
|
||||||
void EnterFullscreenModeForTab(
|
|
||||||
content::RenderFrameHost* requesting_frame,
|
|
||||||
const blink::mojom::FullscreenOptions& options) override;
|
|
||||||
void ExitFullscreenModeForTab(content::WebContents* web_contents) override;
|
|
||||||
content::KeyboardEventProcessingResult PreHandleKeyboardEvent(
|
|
||||||
content::WebContents* source,
|
|
||||||
const content::NativeWebKeyboardEvent& event) override;
|
|
||||||
bool HandleKeyboardEvent(
|
|
||||||
content::WebContents* source,
|
|
||||||
const content::NativeWebKeyboardEvent& event) override;
|
|
||||||
|
|
||||||
Browser* browser() const { return browser_; }
|
|
||||||
|
|
||||||
private:
|
|
||||||
void CreateBrowser(
|
|
||||||
content::WebContents* web_contents,
|
|
||||||
CefBrowserSettings settings,
|
|
||||||
CefRefPtr<CefClient> client,
|
|
||||||
std::unique_ptr<CefBrowserPlatformDelegate> platform_delegate,
|
|
||||||
scoped_refptr<CefBrowserInfo> browser_info,
|
|
||||||
CefRefPtr<CefRequestContextImpl> request_context_impl);
|
|
||||||
|
|
||||||
CefBrowserContentsDelegate* GetDelegateForWebContents(
|
|
||||||
content::WebContents* web_contents);
|
|
||||||
|
|
||||||
Browser* const browser_;
|
|
||||||
|
|
||||||
// Used when creating a new browser host.
|
|
||||||
const CefBrowserCreateParams create_params_;
|
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(ChromeBrowserDelegate);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // CEF_LIBCEF_BROWSER_CHROME_CHROME_BROWSER_DELEGATE_H_
|
|
@@ -1,502 +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/chrome/chrome_browser_host_impl.h"
|
|
||||||
|
|
||||||
#include "libcef/browser/browser_platform_delegate.h"
|
|
||||||
#include "libcef/browser/chrome/browser_platform_delegate_chrome.h"
|
|
||||||
#include "libcef/browser/thread_util.h"
|
|
||||||
#include "libcef/features/runtime_checks.h"
|
|
||||||
|
|
||||||
#include "base/logging.h"
|
|
||||||
#include "base/notreached.h"
|
|
||||||
#include "chrome/browser/printing/print_view_manager_common.h"
|
|
||||||
#include "chrome/browser/profiles/profile.h"
|
|
||||||
#include "chrome/browser/ui/browser.h"
|
|
||||||
#include "chrome/browser/ui/browser_commands.h"
|
|
||||||
#include "chrome/browser/ui/browser_navigator.h"
|
|
||||||
#include "chrome/browser/ui/browser_tabstrip.h"
|
|
||||||
#include "chrome/browser/ui/browser_window.h"
|
|
||||||
#include "chrome/browser/ui/tabs/tab_strip_model.h"
|
|
||||||
#include "chrome/common/pref_names.h"
|
|
||||||
#include "url/url_constants.h"
|
|
||||||
|
|
||||||
// static
|
|
||||||
CefRefPtr<ChromeBrowserHostImpl> ChromeBrowserHostImpl::Create(
|
|
||||||
const CefBrowserCreateParams& params) {
|
|
||||||
// Get or create the request context and profile.
|
|
||||||
CefRefPtr<CefRequestContextImpl> request_context_impl =
|
|
||||||
CefRequestContextImpl::GetOrCreateForRequestContext(
|
|
||||||
params.request_context);
|
|
||||||
CHECK(request_context_impl);
|
|
||||||
auto cef_browser_context = request_context_impl->GetBrowserContext();
|
|
||||||
CHECK(cef_browser_context);
|
|
||||||
auto profile = cef_browser_context->AsProfile();
|
|
||||||
|
|
||||||
Browser::CreateParams chrome_params =
|
|
||||||
Browser::CreateParams(profile, /*user_gesture=*/false);
|
|
||||||
|
|
||||||
// Pass |params| to cef::BrowserDelegate::Create from the Browser constructor.
|
|
||||||
chrome_params.cef_params = base::MakeRefCounted<DelegateCreateParams>(params);
|
|
||||||
|
|
||||||
// Create the Browser. This will indirectly create the ChomeBrowserDelegate.
|
|
||||||
// The same params will be used to create a new Browser if the tab is dragged
|
|
||||||
// out of the existing Browser.
|
|
||||||
auto browser = new Browser(chrome_params);
|
|
||||||
|
|
||||||
GURL url = params.url;
|
|
||||||
if (url.is_empty()) {
|
|
||||||
// Chrome will navigate to kChromeUINewTabURL by default. We want to keep
|
|
||||||
// the current CEF behavior of not navigating at all. Use a special URL that
|
|
||||||
// will be recognized in HandleNonNavigationAboutURL.
|
|
||||||
url = GURL("chrome://ignore/");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add a new tab. This will indirectly create a new tab WebContents and
|
|
||||||
// call ChromeBrowserDelegate::OnWebContentsCreated to create the associated
|
|
||||||
// ChromeBrowserHostImpl.
|
|
||||||
chrome::AddTabAt(browser, url, /*idx=*/-1, /*foreground=*/true);
|
|
||||||
|
|
||||||
// The new tab WebContents.
|
|
||||||
auto web_contents = browser->tab_strip_model()->GetActiveWebContents();
|
|
||||||
CHECK(web_contents);
|
|
||||||
|
|
||||||
// The associated ChromeBrowserHostImpl.
|
|
||||||
auto browser_host =
|
|
||||||
ChromeBrowserHostImpl::GetBrowserForContents(web_contents);
|
|
||||||
CHECK(browser_host);
|
|
||||||
|
|
||||||
browser->window()->Show();
|
|
||||||
|
|
||||||
return browser_host;
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
CefRefPtr<ChromeBrowserHostImpl> ChromeBrowserHostImpl::GetBrowserForHost(
|
|
||||||
const content::RenderViewHost* host) {
|
|
||||||
REQUIRE_CHROME_RUNTIME();
|
|
||||||
auto browser = CefBrowserHostBase::GetBrowserForHost(host);
|
|
||||||
return static_cast<ChromeBrowserHostImpl*>(browser.get());
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
CefRefPtr<ChromeBrowserHostImpl> ChromeBrowserHostImpl::GetBrowserForHost(
|
|
||||||
const content::RenderFrameHost* host) {
|
|
||||||
REQUIRE_CHROME_RUNTIME();
|
|
||||||
auto browser = CefBrowserHostBase::GetBrowserForHost(host);
|
|
||||||
return static_cast<ChromeBrowserHostImpl*>(browser.get());
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
CefRefPtr<ChromeBrowserHostImpl> ChromeBrowserHostImpl::GetBrowserForContents(
|
|
||||||
const content::WebContents* contents) {
|
|
||||||
REQUIRE_CHROME_RUNTIME();
|
|
||||||
auto browser = CefBrowserHostBase::GetBrowserForContents(contents);
|
|
||||||
return static_cast<ChromeBrowserHostImpl*>(browser.get());
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
CefRefPtr<ChromeBrowserHostImpl>
|
|
||||||
ChromeBrowserHostImpl::GetBrowserForFrameTreeNode(int frame_tree_node_id) {
|
|
||||||
REQUIRE_CHROME_RUNTIME();
|
|
||||||
auto browser =
|
|
||||||
CefBrowserHostBase::GetBrowserForFrameTreeNode(frame_tree_node_id);
|
|
||||||
return static_cast<ChromeBrowserHostImpl*>(browser.get());
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
CefRefPtr<ChromeBrowserHostImpl> ChromeBrowserHostImpl::GetBrowserForFrameRoute(
|
|
||||||
int render_process_id,
|
|
||||||
int render_routing_id) {
|
|
||||||
REQUIRE_CHROME_RUNTIME();
|
|
||||||
auto browser = CefBrowserHostBase::GetBrowserForFrameRoute(render_process_id,
|
|
||||||
render_routing_id);
|
|
||||||
return static_cast<ChromeBrowserHostImpl*>(browser.get());
|
|
||||||
}
|
|
||||||
|
|
||||||
ChromeBrowserHostImpl::~ChromeBrowserHostImpl() = default;
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::OnWebContentsDestroyed(
|
|
||||||
content::WebContents* web_contents) {
|
|
||||||
platform_delegate_->WebContentsDestroyed(web_contents);
|
|
||||||
DestroyBrowser();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::OnSetFocus(cef_focus_source_t source) {
|
|
||||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
|
||||||
CEF_POST_TASK(CEF_UIT, base::BindOnce(&ChromeBrowserHostImpl::OnSetFocus,
|
|
||||||
this, source));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (contents_delegate_->OnSetFocus(source))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (browser_) {
|
|
||||||
const int tab_index = GetCurrentTabIndex();
|
|
||||||
if (tab_index != TabStripModel::kNoTab) {
|
|
||||||
chrome::SelectNumberedTab(browser_, tab_index);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::CloseBrowser(bool force_close) {
|
|
||||||
// Always do this asynchronously because TabStripModel is not re-entrant.
|
|
||||||
CEF_POST_TASK(CEF_UIT, base::BindOnce(&ChromeBrowserHostImpl::DoCloseBrowser,
|
|
||||||
this, force_close));
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ChromeBrowserHostImpl::TryCloseBrowser() {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::SetFocus(bool focus) {
|
|
||||||
if (focus) {
|
|
||||||
OnSetFocus(FOCUS_SOURCE_SYSTEM);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CefWindowHandle ChromeBrowserHostImpl::GetWindowHandle() {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
return kNullWindowHandle;
|
|
||||||
}
|
|
||||||
|
|
||||||
CefWindowHandle ChromeBrowserHostImpl::GetOpenerWindowHandle() {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
return kNullWindowHandle;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ChromeBrowserHostImpl::HasView() {
|
|
||||||
// TODO(chrome-runtime): Support Views-hosted browsers.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
double ChromeBrowserHostImpl::GetZoomLevel() {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
return 0.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::SetZoomLevel(double zoomLevel) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::RunFileDialog(
|
|
||||||
FileDialogMode mode,
|
|
||||||
const CefString& title,
|
|
||||||
const CefString& default_file_path,
|
|
||||||
const std::vector<CefString>& accept_filters,
|
|
||||||
int selected_accept_filter,
|
|
||||||
CefRefPtr<CefRunFileDialogCallback> callback) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
callback->OnFileDialogDismissed(0, {});
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::Print() {
|
|
||||||
if (!CEF_CURRENTLY_ON_UIT()) {
|
|
||||||
CEF_POST_TASK(CEF_UIT, base::BindOnce(&ChromeBrowserHostImpl::Print, this));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (browser_) {
|
|
||||||
// Like chrome::Print() but specifying the WebContents.
|
|
||||||
printing::StartPrint(GetWebContents(),
|
|
||||||
/*print_renderer=*/mojo::NullAssociatedRemote(),
|
|
||||||
browser_->profile()->GetPrefs()->GetBoolean(
|
|
||||||
prefs::kPrintPreviewDisabled),
|
|
||||||
/*has_selection=*/false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::PrintToPDF(
|
|
||||||
const CefString& path,
|
|
||||||
const CefPdfPrintSettings& settings,
|
|
||||||
CefRefPtr<CefPdfPrintCallback> callback) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
callback->OnPdfPrintFinished(CefString(), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::Find(int identifier,
|
|
||||||
const CefString& searchText,
|
|
||||||
bool forward,
|
|
||||||
bool matchCase,
|
|
||||||
bool findNext) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::StopFinding(bool clearSelection) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::ShowDevTools(const CefWindowInfo& windowInfo,
|
|
||||||
CefRefPtr<CefClient> client,
|
|
||||||
const CefBrowserSettings& settings,
|
|
||||||
const CefPoint& inspect_element_at) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::CloseDevTools() {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ChromeBrowserHostImpl::HasDevTools() {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ChromeBrowserHostImpl::SendDevToolsMessage(const void* message,
|
|
||||||
size_t message_size) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int ChromeBrowserHostImpl::ExecuteDevToolsMethod(
|
|
||||||
int message_id,
|
|
||||||
const CefString& method,
|
|
||||||
CefRefPtr<CefDictionaryValue> params) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
CefRefPtr<CefRegistration> ChromeBrowserHostImpl::AddDevToolsMessageObserver(
|
|
||||||
CefRefPtr<CefDevToolsMessageObserver> observer) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ChromeBrowserHostImpl::IsWindowRenderingDisabled() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::WasResized() {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::WasHidden(bool hidden) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::NotifyScreenInfoChanged() {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::Invalidate(PaintElementType type) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::SendExternalBeginFrame() {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::SendTouchEvent(const CefTouchEvent& event) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::SendFocusEvent(bool setFocus) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::SendCaptureLostEvent() {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::NotifyMoveOrResizeStarted() {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
int ChromeBrowserHostImpl::GetWindowlessFrameRate() {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::SetWindowlessFrameRate(int frame_rate) {}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::ImeSetComposition(
|
|
||||||
const CefString& text,
|
|
||||||
const std::vector<CefCompositionUnderline>& underlines,
|
|
||||||
const CefRange& replacement_range,
|
|
||||||
const CefRange& selection_range) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::ImeCommitText(const CefString& text,
|
|
||||||
const CefRange& replacement_range,
|
|
||||||
int relative_cursor_pos) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
void ChromeBrowserHostImpl::ImeFinishComposingText(bool keep_selection) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::ImeCancelComposition() {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::DragTargetDragEnter(
|
|
||||||
CefRefPtr<CefDragData> drag_data,
|
|
||||||
const CefMouseEvent& event,
|
|
||||||
DragOperationsMask allowed_ops) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::DragTargetDragOver(const CefMouseEvent& event,
|
|
||||||
DragOperationsMask allowed_ops) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::DragTargetDragLeave() {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::DragTargetDrop(const CefMouseEvent& event) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::DragSourceSystemDragEnded() {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::DragSourceEndedAt(int x,
|
|
||||||
int y,
|
|
||||||
DragOperationsMask op) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::SetAudioMuted(bool mute) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ChromeBrowserHostImpl::IsAudioMuted() {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::SetAccessibilityState(
|
|
||||||
cef_state_t accessibility_state) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::SetAutoResizeEnabled(bool enabled,
|
|
||||||
const CefSize& min_size,
|
|
||||||
const CefSize& max_size) {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
CefRefPtr<CefExtension> ChromeBrowserHostImpl::GetExtension() {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ChromeBrowserHostImpl::IsBackgroundHost() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ChromeBrowserHostImpl::Navigate(const content::OpenURLParams& params) {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
if (GetCurrentTabIndex() == TabStripModel::kNoTab) {
|
|
||||||
// We can't navigate via the Browser because we don't have a current tab.
|
|
||||||
return CefBrowserHostBase::Navigate(params);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (browser_) {
|
|
||||||
// This is generally equivalent to calling Browser::OpenURL, except:
|
|
||||||
// 1. It doesn't trigger a call to CefRequestHandler::OnOpenURLFromTab, and
|
|
||||||
// 2. It navigates in this CefBrowserHost's WebContents instead of
|
|
||||||
// (a) creating a new WebContents, or (b) using the Browser's active
|
|
||||||
// WebContents (which may not be the same), and
|
|
||||||
// 3. There is no risk of triggering chrome's popup blocker.
|
|
||||||
NavigateParams nav_params(browser_, params.url, params.transition);
|
|
||||||
nav_params.FillNavigateParamsFromOpenURLParams(params);
|
|
||||||
|
|
||||||
// Always navigate in the current tab.
|
|
||||||
nav_params.disposition = WindowOpenDisposition::CURRENT_TAB;
|
|
||||||
nav_params.source_contents = GetWebContents();
|
|
||||||
|
|
||||||
nav_params.tabstrip_add_types = TabStripModel::ADD_NONE;
|
|
||||||
if (params.user_gesture)
|
|
||||||
nav_params.window_action = NavigateParams::SHOW_WINDOW;
|
|
||||||
::Navigate(&nav_params);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
ChromeBrowserHostImpl::ChromeBrowserHostImpl(
|
|
||||||
const CefBrowserSettings& settings,
|
|
||||||
CefRefPtr<CefClient> client,
|
|
||||||
std::unique_ptr<CefBrowserPlatformDelegate> platform_delegate,
|
|
||||||
scoped_refptr<CefBrowserInfo> browser_info,
|
|
||||||
CefRefPtr<CefRequestContextImpl> request_context)
|
|
||||||
: CefBrowserHostBase(settings,
|
|
||||||
client,
|
|
||||||
std::move(platform_delegate),
|
|
||||||
browser_info,
|
|
||||||
request_context) {}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::Attach(Browser* browser,
|
|
||||||
content::WebContents* web_contents) {
|
|
||||||
DCHECK(browser);
|
|
||||||
DCHECK(web_contents);
|
|
||||||
|
|
||||||
platform_delegate_->WebContentsCreated(web_contents,
|
|
||||||
/*own_web_contents=*/false);
|
|
||||||
|
|
||||||
SetBrowser(browser);
|
|
||||||
contents_delegate_->ObserveWebContents(web_contents);
|
|
||||||
InitializeBrowser();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::SetBrowser(Browser* browser) {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
browser_ = browser;
|
|
||||||
static_cast<CefBrowserPlatformDelegateChrome*>(platform_delegate_.get())
|
|
||||||
->set_chrome_browser(browser);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::InitializeBrowser() {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
DCHECK(browser_);
|
|
||||||
|
|
||||||
// Associate the platform delegate with this browser.
|
|
||||||
platform_delegate_->BrowserCreated(this);
|
|
||||||
|
|
||||||
CefBrowserHostBase::InitializeBrowser();
|
|
||||||
|
|
||||||
// The WebContents won't be added to the Browser's TabStripModel until later
|
|
||||||
// in the current call stack. Block navigation until that time.
|
|
||||||
auto navigation_lock = browser_info_->CreateNavigationLock();
|
|
||||||
OnAfterCreated();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::DestroyBrowser() {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
browser_ = nullptr;
|
|
||||||
|
|
||||||
OnBeforeClose();
|
|
||||||
OnBrowserDestroyed();
|
|
||||||
|
|
||||||
// Disassociate the platform delegate from this browser.
|
|
||||||
platform_delegate_->BrowserDestroyed(this);
|
|
||||||
|
|
||||||
CefBrowserHostBase::DestroyBrowser();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeBrowserHostImpl::DoCloseBrowser(bool force_close) {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
if (browser_) {
|
|
||||||
// Like chrome::CloseTab() but specifying the WebContents.
|
|
||||||
const int tab_index = GetCurrentTabIndex();
|
|
||||||
if (tab_index != TabStripModel::kNoTab) {
|
|
||||||
browser_->tab_strip_model()->CloseWebContentsAt(
|
|
||||||
tab_index, TabStripModel::CLOSE_CREATE_HISTORICAL_TAB |
|
|
||||||
TabStripModel::CLOSE_USER_GESTURE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int ChromeBrowserHostImpl::GetCurrentTabIndex() const {
|
|
||||||
CEF_REQUIRE_UIT();
|
|
||||||
if (browser_) {
|
|
||||||
return browser_->tab_strip_model()->GetIndexOfWebContents(GetWebContents());
|
|
||||||
}
|
|
||||||
return TabStripModel::kNoTab;
|
|
||||||
}
|
|
@@ -1,174 +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_CHROME_CHROME_BROWSER_HOST_IMPL_H_
|
|
||||||
#define CEF_LIBCEF_BROWSER_CHROME_CHROME_BROWSER_HOST_IMPL_H_
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
#include "libcef/browser/browser_host_base.h"
|
|
||||||
#include "libcef/browser/chrome/browser_delegate.h"
|
|
||||||
|
|
||||||
class Browser;
|
|
||||||
class ChromeBrowserDelegate;
|
|
||||||
|
|
||||||
// CefBrowser implementation for the chrome runtime. Method calls are delegated
|
|
||||||
// to the chrome Browser object or the WebContents as appropriate. See the
|
|
||||||
// ChromeBrowserDelegate documentation for additional details. All methods are
|
|
||||||
// thread-safe unless otherwise indicated.
|
|
||||||
class ChromeBrowserHostImpl : public CefBrowserHostBase {
|
|
||||||
public:
|
|
||||||
// CEF-specific parameters passed via Browser::CreateParams::cef_params and
|
|
||||||
// possibly shared by multiple Browser instances.
|
|
||||||
class DelegateCreateParams : public cef::BrowserDelegate::CreateParams {
|
|
||||||
public:
|
|
||||||
DelegateCreateParams(const CefBrowserCreateParams& create_params)
|
|
||||||
: create_params_(create_params) {}
|
|
||||||
|
|
||||||
CefBrowserCreateParams create_params_;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Create a new Browser with a single tab (WebContents) and associated
|
|
||||||
// ChromeBrowserHostImpl instance.
|
|
||||||
static CefRefPtr<ChromeBrowserHostImpl> Create(
|
|
||||||
const CefBrowserCreateParams& params);
|
|
||||||
|
|
||||||
// Returns the browser associated with the specified RenderViewHost.
|
|
||||||
static CefRefPtr<ChromeBrowserHostImpl> GetBrowserForHost(
|
|
||||||
const content::RenderViewHost* host);
|
|
||||||
// Returns the browser associated with the specified RenderFrameHost.
|
|
||||||
static CefRefPtr<ChromeBrowserHostImpl> GetBrowserForHost(
|
|
||||||
const content::RenderFrameHost* host);
|
|
||||||
// Returns the browser associated with the specified WebContents.
|
|
||||||
static CefRefPtr<ChromeBrowserHostImpl> GetBrowserForContents(
|
|
||||||
const content::WebContents* contents);
|
|
||||||
// Returns the browser associated with the specified FrameTreeNode ID.
|
|
||||||
static CefRefPtr<ChromeBrowserHostImpl> GetBrowserForFrameTreeNode(
|
|
||||||
int frame_tree_node_id);
|
|
||||||
// Returns the browser associated with the specified frame routing IDs.
|
|
||||||
static CefRefPtr<ChromeBrowserHostImpl> GetBrowserForFrameRoute(
|
|
||||||
int render_process_id,
|
|
||||||
int render_routing_id);
|
|
||||||
|
|
||||||
~ChromeBrowserHostImpl() override;
|
|
||||||
|
|
||||||
// CefBrowserContentsDelegate::Observer methods:
|
|
||||||
void OnWebContentsDestroyed(content::WebContents* web_contents) override;
|
|
||||||
|
|
||||||
// CefBrowserHostBase methods called from CefFrameHostImpl:
|
|
||||||
void OnSetFocus(cef_focus_source_t source) override;
|
|
||||||
|
|
||||||
// CefBrowserHost methods:
|
|
||||||
void CloseBrowser(bool force_close) override;
|
|
||||||
bool TryCloseBrowser() override;
|
|
||||||
void SetFocus(bool focus) override;
|
|
||||||
CefWindowHandle GetWindowHandle() override;
|
|
||||||
CefWindowHandle GetOpenerWindowHandle() override;
|
|
||||||
bool HasView() override;
|
|
||||||
double GetZoomLevel() override;
|
|
||||||
void SetZoomLevel(double zoomLevel) override;
|
|
||||||
void RunFileDialog(FileDialogMode mode,
|
|
||||||
const CefString& title,
|
|
||||||
const CefString& default_file_path,
|
|
||||||
const std::vector<CefString>& accept_filters,
|
|
||||||
int selected_accept_filter,
|
|
||||||
CefRefPtr<CefRunFileDialogCallback> callback) override;
|
|
||||||
void Print() override;
|
|
||||||
void PrintToPDF(const CefString& path,
|
|
||||||
const CefPdfPrintSettings& settings,
|
|
||||||
CefRefPtr<CefPdfPrintCallback> callback) override;
|
|
||||||
void Find(int identifier,
|
|
||||||
const CefString& searchText,
|
|
||||||
bool forward,
|
|
||||||
bool matchCase,
|
|
||||||
bool findNext) override;
|
|
||||||
void StopFinding(bool clearSelection) override;
|
|
||||||
void ShowDevTools(const CefWindowInfo& windowInfo,
|
|
||||||
CefRefPtr<CefClient> client,
|
|
||||||
const CefBrowserSettings& settings,
|
|
||||||
const CefPoint& inspect_element_at) override;
|
|
||||||
void CloseDevTools() override;
|
|
||||||
bool HasDevTools() override;
|
|
||||||
bool SendDevToolsMessage(const void* message, size_t message_size) override;
|
|
||||||
int ExecuteDevToolsMethod(int message_id,
|
|
||||||
const CefString& method,
|
|
||||||
CefRefPtr<CefDictionaryValue> params) override;
|
|
||||||
CefRefPtr<CefRegistration> AddDevToolsMessageObserver(
|
|
||||||
CefRefPtr<CefDevToolsMessageObserver> observer) override;
|
|
||||||
bool IsWindowRenderingDisabled() override;
|
|
||||||
void WasResized() override;
|
|
||||||
void WasHidden(bool hidden) override;
|
|
||||||
void NotifyScreenInfoChanged() override;
|
|
||||||
void Invalidate(PaintElementType type) override;
|
|
||||||
void SendExternalBeginFrame() override;
|
|
||||||
void SendTouchEvent(const CefTouchEvent& event) override;
|
|
||||||
void SendFocusEvent(bool setFocus) override;
|
|
||||||
void SendCaptureLostEvent() override;
|
|
||||||
void NotifyMoveOrResizeStarted() override;
|
|
||||||
int GetWindowlessFrameRate() override;
|
|
||||||
void SetWindowlessFrameRate(int frame_rate) override;
|
|
||||||
void ImeSetComposition(const CefString& text,
|
|
||||||
const std::vector<CefCompositionUnderline>& underlines,
|
|
||||||
const CefRange& replacement_range,
|
|
||||||
const CefRange& selection_range) override;
|
|
||||||
void ImeCommitText(const CefString& text,
|
|
||||||
const CefRange& replacement_range,
|
|
||||||
int relative_cursor_pos) override;
|
|
||||||
void ImeFinishComposingText(bool keep_selection) override;
|
|
||||||
void ImeCancelComposition() override;
|
|
||||||
void DragTargetDragEnter(CefRefPtr<CefDragData> drag_data,
|
|
||||||
const CefMouseEvent& event,
|
|
||||||
DragOperationsMask allowed_ops) override;
|
|
||||||
void DragTargetDragOver(const CefMouseEvent& event,
|
|
||||||
DragOperationsMask allowed_ops) override;
|
|
||||||
void DragTargetDragLeave() override;
|
|
||||||
void DragTargetDrop(const CefMouseEvent& event) override;
|
|
||||||
void DragSourceSystemDragEnded() override;
|
|
||||||
void DragSourceEndedAt(int x, int y, DragOperationsMask op) override;
|
|
||||||
void SetAudioMuted(bool mute) override;
|
|
||||||
bool IsAudioMuted() override;
|
|
||||||
void SetAccessibilityState(cef_state_t accessibility_state) override;
|
|
||||||
void SetAutoResizeEnabled(bool enabled,
|
|
||||||
const CefSize& min_size,
|
|
||||||
const CefSize& max_size) override;
|
|
||||||
CefRefPtr<CefExtension> GetExtension() override;
|
|
||||||
bool IsBackgroundHost() override;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
bool Navigate(const content::OpenURLParams& params) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
friend class ChromeBrowserDelegate;
|
|
||||||
|
|
||||||
ChromeBrowserHostImpl(
|
|
||||||
const CefBrowserSettings& settings,
|
|
||||||
CefRefPtr<CefClient> client,
|
|
||||||
std::unique_ptr<CefBrowserPlatformDelegate> platform_delegate,
|
|
||||||
scoped_refptr<CefBrowserInfo> browser_info,
|
|
||||||
CefRefPtr<CefRequestContextImpl> request_context);
|
|
||||||
|
|
||||||
// Called from ChromeBrowserDelegate::SetAsDelegate when this object is first
|
|
||||||
// created. Must be called on the UI thread.
|
|
||||||
void Attach(Browser* browser, content::WebContents* web_contents);
|
|
||||||
|
|
||||||
// Called from ChromeBrowserDelegate::SetAsDelegate when this object changes
|
|
||||||
// Browser ownership (e.g. dragging between windows). The old Browser will be
|
|
||||||
// cleared before the new Browser is added. Must be called on the UI thread.
|
|
||||||
void SetBrowser(Browser* browser);
|
|
||||||
|
|
||||||
// CefBrowserHostBase methods:
|
|
||||||
void InitializeBrowser() override;
|
|
||||||
void DestroyBrowser() override;
|
|
||||||
|
|
||||||
void DoCloseBrowser(bool force_close);
|
|
||||||
|
|
||||||
// Returns the current tab index for the associated WebContents, or
|
|
||||||
// TabStripModel::kNoTab if not found.
|
|
||||||
int GetCurrentTabIndex() const;
|
|
||||||
|
|
||||||
Browser* browser_ = nullptr;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // CEF_LIBCEF_BROWSER_CHROME_CHROME_BROWSER_HOST_IMPL_H_
|
|
@@ -21,7 +21,7 @@ void ChromeBrowserMainExtraPartsCef::PostProfileInit() {
|
|||||||
CefRequestContextImpl::CreateGlobalRequestContext(settings);
|
CefRequestContextImpl::CreateGlobalRequestContext(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChromeBrowserMainExtraPartsCef::PreMainMessageLoopRun() {
|
void ChromeBrowserMainExtraPartsCef::PostMainMessageLoopRun() {
|
||||||
background_task_runner_ = base::CreateSingleThreadTaskRunner(
|
background_task_runner_ = base::CreateSingleThreadTaskRunner(
|
||||||
{base::ThreadPool(), base::TaskPriority::BEST_EFFORT,
|
{base::ThreadPool(), base::TaskPriority::BEST_EFFORT,
|
||||||
base::TaskShutdownBehavior::BLOCK_SHUTDOWN, base::MayBlock()});
|
base::TaskShutdownBehavior::BLOCK_SHUTDOWN, base::MayBlock()});
|
||||||
|
@@ -37,7 +37,7 @@ class ChromeBrowserMainExtraPartsCef : public ChromeBrowserMainExtraParts {
|
|||||||
private:
|
private:
|
||||||
// ChromeBrowserMainExtraParts overrides.
|
// ChromeBrowserMainExtraParts overrides.
|
||||||
void PostProfileInit() override;
|
void PostProfileInit() override;
|
||||||
void PreMainMessageLoopRun() override;
|
void PostMainMessageLoopRun() override;
|
||||||
|
|
||||||
CefRefPtr<CefRequestContextImpl> global_request_context_;
|
CefRefPtr<CefRequestContextImpl> global_request_context_;
|
||||||
|
|
||||||
|
@@ -5,48 +5,14 @@
|
|||||||
|
|
||||||
#include "libcef/browser/chrome/chrome_content_browser_client_cef.h"
|
#include "libcef/browser/chrome/chrome_content_browser_client_cef.h"
|
||||||
|
|
||||||
#include "libcef/browser/browser_info_manager.h"
|
|
||||||
#include "libcef/browser/browser_message_filter.h"
|
|
||||||
#include "libcef/browser/chrome/chrome_browser_main_extra_parts_cef.h"
|
#include "libcef/browser/chrome/chrome_browser_main_extra_parts_cef.h"
|
||||||
#include "libcef/browser/net/throttle_handler.h"
|
|
||||||
#include "libcef/browser/net_service/cookie_manager_impl.h"
|
|
||||||
#include "libcef/browser/net_service/login_delegate.h"
|
|
||||||
#include "libcef/browser/net_service/proxy_url_loader_factory.h"
|
|
||||||
#include "libcef/browser/net_service/resource_request_handler_wrapper.h"
|
|
||||||
#include "libcef/common/app_manager.h"
|
|
||||||
#include "libcef/common/cef_switches.h"
|
#include "libcef/common/cef_switches.h"
|
||||||
#include "libcef/common/command_line_impl.h"
|
|
||||||
|
|
||||||
#include "base/command_line.h"
|
#include "base/command_line.h"
|
||||||
#include "base/path_service.h"
|
#include "base/path_service.h"
|
||||||
#include "chrome/browser/chrome_browser_main.h"
|
#include "chrome/browser/chrome_browser_main.h"
|
||||||
#include "chrome/common/chrome_paths.h"
|
#include "chrome/common/chrome_paths.h"
|
||||||
#include "chrome/common/chrome_switches.h"
|
#include "chrome/common/chrome_switches.h"
|
||||||
#include "content/public/browser/navigation_throttle.h"
|
|
||||||
#include "content/public/browser/render_process_host.h"
|
|
||||||
#include "content/public/common/content_switches.h"
|
|
||||||
#include "third_party/blink/public/mojom/loader/resource_load_info.mojom-shared.h"
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
void HandleExternalProtocolHelper(
|
|
||||||
ChromeContentBrowserClientCef* self,
|
|
||||||
content::WebContents::OnceGetter web_contents_getter,
|
|
||||||
content::NavigationUIData* navigation_data,
|
|
||||||
const network::ResourceRequest& resource_request) {
|
|
||||||
// Match the logic of the original call in
|
|
||||||
// NavigationURLLoaderImpl::PrepareForNonInterceptedRequest.
|
|
||||||
self->HandleExternalProtocol(
|
|
||||||
resource_request.url, std::move(web_contents_getter),
|
|
||||||
content::ChildProcessHost::kInvalidUniqueID, navigation_data,
|
|
||||||
resource_request.resource_type ==
|
|
||||||
static_cast<int>(blink::mojom::ResourceType::kMainFrame),
|
|
||||||
static_cast<ui::PageTransition>(resource_request.transition_type),
|
|
||||||
resource_request.has_user_gesture, resource_request.request_initiator,
|
|
||||||
nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
ChromeContentBrowserClientCef::ChromeContentBrowserClientCef(
|
ChromeContentBrowserClientCef::ChromeContentBrowserClientCef(
|
||||||
StartupData* startup_data)
|
StartupData* startup_data)
|
||||||
@@ -60,8 +26,7 @@ ChromeContentBrowserClientCef::CreateBrowserMainParts(
|
|||||||
ChromeContentBrowserClient::CreateBrowserMainParts(parameters);
|
ChromeContentBrowserClient::CreateBrowserMainParts(parameters);
|
||||||
browser_main_parts_ = new ChromeBrowserMainExtraPartsCef;
|
browser_main_parts_ = new ChromeBrowserMainExtraPartsCef;
|
||||||
static_cast<ChromeBrowserMainParts*>(main_parts.get())
|
static_cast<ChromeBrowserMainParts*>(main_parts.get())
|
||||||
->AddParts(
|
->AddParts(browser_main_parts_);
|
||||||
base::WrapUnique<ChromeBrowserMainExtraParts>(browser_main_parts_));
|
|
||||||
return main_parts;
|
return main_parts;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,200 +45,6 @@ void ChromeContentBrowserClientCef::AppendExtraCommandLineSwitches(
|
|||||||
if (base::PathService::Get(chrome::DIR_USER_DATA, &user_data_dir)) {
|
if (base::PathService::Get(chrome::DIR_USER_DATA, &user_data_dir)) {
|
||||||
command_line->AppendSwitchPath(switches::kUserDataDir, user_data_dir);
|
command_line->AppendSwitchPath(switches::kUserDataDir, user_data_dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
const base::CommandLine* browser_cmd = base::CommandLine::ForCurrentProcess();
|
|
||||||
|
|
||||||
const std::string& process_type =
|
|
||||||
command_line->GetSwitchValueASCII(switches::kProcessType);
|
|
||||||
if (process_type == switches::kRendererProcess) {
|
|
||||||
// Propagate the following switches to the renderer command line (along with
|
|
||||||
// any associated values) if present in the browser command line.
|
|
||||||
static const char* const kSwitchNames[] = {
|
|
||||||
switches::kUncaughtExceptionStackSize,
|
|
||||||
};
|
|
||||||
command_line->CopySwitchesFrom(*browser_cmd, kSwitchNames,
|
|
||||||
base::size(kSwitchNames));
|
|
||||||
}
|
|
||||||
|
|
||||||
CefRefPtr<CefApp> app = CefAppManager::Get()->GetApplication();
|
|
||||||
if (app.get()) {
|
|
||||||
CefRefPtr<CefBrowserProcessHandler> handler =
|
|
||||||
app->GetBrowserProcessHandler();
|
|
||||||
if (handler.get()) {
|
|
||||||
CefRefPtr<CefCommandLineImpl> commandLinePtr(
|
|
||||||
new CefCommandLineImpl(command_line, false, false));
|
|
||||||
handler->OnBeforeChildProcessLaunch(commandLinePtr.get());
|
|
||||||
commandLinePtr->Detach(nullptr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeContentBrowserClientCef::RenderProcessWillLaunch(
|
|
||||||
content::RenderProcessHost* host) {
|
|
||||||
const int id = host->GetID();
|
|
||||||
host->AddFilter(new CefBrowserMessageFilter(id));
|
|
||||||
|
|
||||||
// If the renderer process crashes then the host may already have
|
|
||||||
// CefBrowserInfoManager as an observer. Try to remove it first before adding
|
|
||||||
// to avoid DCHECKs.
|
|
||||||
host->RemoveObserver(CefBrowserInfoManager::GetInstance());
|
|
||||||
host->AddObserver(CefBrowserInfoManager::GetInstance());
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ChromeContentBrowserClientCef::CanCreateWindow(
|
|
||||||
content::RenderFrameHost* opener,
|
|
||||||
const GURL& opener_url,
|
|
||||||
const GURL& opener_top_level_frame_url,
|
|
||||||
const url::Origin& source_origin,
|
|
||||||
content::mojom::WindowContainerType container_type,
|
|
||||||
const GURL& target_url,
|
|
||||||
const content::Referrer& referrer,
|
|
||||||
const std::string& frame_name,
|
|
||||||
WindowOpenDisposition disposition,
|
|
||||||
const blink::mojom::WindowFeatures& features,
|
|
||||||
bool user_gesture,
|
|
||||||
bool opener_suppressed,
|
|
||||||
bool* no_javascript_access) {
|
|
||||||
// The chrome layer has popup blocker, extensions, etc.
|
|
||||||
if (!ChromeContentBrowserClient::CanCreateWindow(
|
|
||||||
opener, opener_url, opener_top_level_frame_url, source_origin,
|
|
||||||
container_type, target_url, referrer, frame_name, disposition,
|
|
||||||
features, user_gesture, opener_suppressed, no_javascript_access)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return CefBrowserInfoManager::GetInstance()->CanCreateWindow(
|
|
||||||
opener, target_url, referrer, frame_name, disposition, features,
|
|
||||||
user_gesture, opener_suppressed, no_javascript_access);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ChromeContentBrowserClientCef::WillCreateURLLoaderFactory(
|
|
||||||
content::BrowserContext* browser_context,
|
|
||||||
content::RenderFrameHost* frame,
|
|
||||||
int render_process_id,
|
|
||||||
URLLoaderFactoryType type,
|
|
||||||
const url::Origin& request_initiator,
|
|
||||||
base::Optional<int64_t> navigation_id,
|
|
||||||
base::UkmSourceId ukm_source_id,
|
|
||||||
mojo::PendingReceiver<network::mojom::URLLoaderFactory>* factory_receiver,
|
|
||||||
mojo::PendingRemote<network::mojom::TrustedURLLoaderHeaderClient>*
|
|
||||||
header_client,
|
|
||||||
bool* bypass_redirect_checks,
|
|
||||||
bool* disable_secure_dns,
|
|
||||||
network::mojom::URLLoaderFactoryOverridePtr* factory_override) {
|
|
||||||
bool use_proxy = ChromeContentBrowserClient::WillCreateURLLoaderFactory(
|
|
||||||
browser_context, frame, render_process_id, type, request_initiator,
|
|
||||||
navigation_id, ukm_source_id, factory_receiver, header_client,
|
|
||||||
bypass_redirect_checks, disable_secure_dns, factory_override);
|
|
||||||
if (use_proxy) {
|
|
||||||
// The chrome layer will handle the request.
|
|
||||||
return use_proxy;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto request_handler = net_service::CreateInterceptedRequestHandler(
|
|
||||||
browser_context, frame, render_process_id,
|
|
||||||
type == URLLoaderFactoryType::kNavigation,
|
|
||||||
type == URLLoaderFactoryType::kDownload, request_initiator);
|
|
||||||
|
|
||||||
net_service::ProxyURLLoaderFactory::CreateProxy(
|
|
||||||
browser_context, factory_receiver, header_client,
|
|
||||||
std::move(request_handler));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ChromeContentBrowserClientCef::HandleExternalProtocol(
|
|
||||||
const GURL& url,
|
|
||||||
content::WebContents::OnceGetter 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) {
|
|
||||||
// |out_factory| will be non-nullptr when this method is initially called
|
|
||||||
// from NavigationURLLoaderImpl::PrepareForNonInterceptedRequest.
|
|
||||||
if (out_factory) {
|
|
||||||
// Let the other HandleExternalProtocol variant handle the request.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The request was unhandled and we've recieved a callback from
|
|
||||||
// HandleExternalProtocolHelper. Forward to the chrome layer for default
|
|
||||||
// handling.
|
|
||||||
return ChromeContentBrowserClient::HandleExternalProtocol(
|
|
||||||
url, std::move(web_contents_getter), child_id, navigation_data,
|
|
||||||
is_main_frame, page_transition, has_user_gesture, initiating_origin,
|
|
||||||
nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ChromeContentBrowserClientCef::HandleExternalProtocol(
|
|
||||||
content::WebContents::Getter web_contents_getter,
|
|
||||||
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();
|
|
||||||
|
|
||||||
// HandleExternalProtocolHelper may be called if nothing handles the request.
|
|
||||||
auto request_handler = net_service::CreateInterceptedRequestHandler(
|
|
||||||
web_contents_getter, frame_tree_node_id, resource_request,
|
|
||||||
base::Bind(HandleExternalProtocolHelper, base::Unretained(this),
|
|
||||||
web_contents_getter, navigation_data, resource_request));
|
|
||||||
|
|
||||||
net_service::ProxyURLLoaderFactory::CreateProxy(
|
|
||||||
web_contents_getter, std::move(receiver), std::move(request_handler));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<std::unique_ptr<content::NavigationThrottle>>
|
|
||||||
ChromeContentBrowserClientCef::CreateThrottlesForNavigation(
|
|
||||||
content::NavigationHandle* navigation_handle) {
|
|
||||||
auto throttles = ChromeContentBrowserClient::CreateThrottlesForNavigation(
|
|
||||||
navigation_handle);
|
|
||||||
throttle::CreateThrottlesForNavigation(navigation_handle, throttles);
|
|
||||||
return throttles;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeContentBrowserClientCef::ConfigureNetworkContextParams(
|
|
||||||
content::BrowserContext* context,
|
|
||||||
bool in_memory,
|
|
||||||
const base::FilePath& relative_partition_path,
|
|
||||||
network::mojom::NetworkContextParams* network_context_params,
|
|
||||||
network::mojom::CertVerifierCreationParams* cert_verifier_creation_params) {
|
|
||||||
ChromeContentBrowserClient::ConfigureNetworkContextParams(
|
|
||||||
context, in_memory, relative_partition_path, network_context_params,
|
|
||||||
cert_verifier_creation_params);
|
|
||||||
|
|
||||||
auto cef_context = CefBrowserContext::FromBrowserContext(context);
|
|
||||||
network_context_params->cookieable_schemes =
|
|
||||||
cef_context ? cef_context->GetCookieableSchemes()
|
|
||||||
: CefCookieManagerImpl::GetGlobalCookieableSchemes();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::unique_ptr<content::LoginDelegate>
|
|
||||||
ChromeContentBrowserClientCef::CreateLoginDelegate(
|
|
||||||
const net::AuthChallengeInfo& auth_info,
|
|
||||||
content::WebContents* web_contents,
|
|
||||||
const content::GlobalRequestID& request_id,
|
|
||||||
bool is_request_for_main_frame,
|
|
||||||
const GURL& url,
|
|
||||||
scoped_refptr<net::HttpResponseHeaders> response_headers,
|
|
||||||
bool first_auth_attempt,
|
|
||||||
LoginAuthRequiredCallback auth_required_callback) {
|
|
||||||
// |web_contents| is nullptr for CefURLRequests without an associated frame.
|
|
||||||
if (!web_contents || base::CommandLine::ForCurrentProcess()->HasSwitch(
|
|
||||||
switches::kDisableChromeLoginPrompt)) {
|
|
||||||
// Delegate auth callbacks to GetAuthCredentials.
|
|
||||||
return std::make_unique<net_service::LoginDelegate>(
|
|
||||||
auth_info, web_contents, request_id, url,
|
|
||||||
std::move(auth_required_callback));
|
|
||||||
}
|
|
||||||
|
|
||||||
return ChromeContentBrowserClient::CreateLoginDelegate(
|
|
||||||
auth_info, web_contents, request_id, is_request_for_main_frame, url,
|
|
||||||
response_headers, first_auth_attempt, std::move(auth_required_callback));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CefRefPtr<CefRequestContextImpl>
|
CefRefPtr<CefRequestContextImpl>
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
class ChromeBrowserMainExtraPartsCef;
|
class ChromeBrowserMainExtraPartsCef;
|
||||||
|
|
||||||
// CEF override of ChromeContentBrowserClient.
|
// CEF override of ChromeContentBrowserClient
|
||||||
class ChromeContentBrowserClientCef : public ChromeContentBrowserClient {
|
class ChromeContentBrowserClientCef : public ChromeContentBrowserClient {
|
||||||
public:
|
public:
|
||||||
explicit ChromeContentBrowserClientCef(StartupData* startup_data = nullptr);
|
explicit ChromeContentBrowserClientCef(StartupData* startup_data = nullptr);
|
||||||
@@ -26,71 +26,6 @@ class ChromeContentBrowserClientCef : public ChromeContentBrowserClient {
|
|||||||
const content::MainFunctionParams& parameters) override;
|
const content::MainFunctionParams& parameters) override;
|
||||||
void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
|
void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
|
||||||
int child_process_id) override;
|
int child_process_id) override;
|
||||||
void RenderProcessWillLaunch(content::RenderProcessHost* host) override;
|
|
||||||
bool CanCreateWindow(content::RenderFrameHost* opener,
|
|
||||||
const GURL& opener_url,
|
|
||||||
const GURL& opener_top_level_frame_url,
|
|
||||||
const url::Origin& source_origin,
|
|
||||||
content::mojom::WindowContainerType container_type,
|
|
||||||
const GURL& target_url,
|
|
||||||
const content::Referrer& referrer,
|
|
||||||
const std::string& frame_name,
|
|
||||||
WindowOpenDisposition disposition,
|
|
||||||
const blink::mojom::WindowFeatures& features,
|
|
||||||
bool user_gesture,
|
|
||||||
bool opener_suppressed,
|
|
||||||
bool* no_javascript_access) override;
|
|
||||||
bool WillCreateURLLoaderFactory(
|
|
||||||
content::BrowserContext* browser_context,
|
|
||||||
content::RenderFrameHost* frame,
|
|
||||||
int render_process_id,
|
|
||||||
URLLoaderFactoryType type,
|
|
||||||
const url::Origin& request_initiator,
|
|
||||||
base::Optional<int64_t> navigation_id,
|
|
||||||
base::UkmSourceId ukm_source_id,
|
|
||||||
mojo::PendingReceiver<network::mojom::URLLoaderFactory>* factory_receiver,
|
|
||||||
mojo::PendingRemote<network::mojom::TrustedURLLoaderHeaderClient>*
|
|
||||||
header_client,
|
|
||||||
bool* bypass_redirect_checks,
|
|
||||||
bool* disable_secure_dns,
|
|
||||||
network::mojom::URLLoaderFactoryOverridePtr* factory_override) override;
|
|
||||||
bool HandleExternalProtocol(
|
|
||||||
const GURL& url,
|
|
||||||
content::WebContents::OnceGetter 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;
|
|
||||||
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;
|
|
||||||
std::vector<std::unique_ptr<content::NavigationThrottle>>
|
|
||||||
CreateThrottlesForNavigation(
|
|
||||||
content::NavigationHandle* navigation_handle) override;
|
|
||||||
void ConfigureNetworkContextParams(
|
|
||||||
content::BrowserContext* context,
|
|
||||||
bool in_memory,
|
|
||||||
const base::FilePath& relative_partition_path,
|
|
||||||
network::mojom::NetworkContextParams* network_context_params,
|
|
||||||
network::mojom::CertVerifierCreationParams* cert_verifier_creation_params)
|
|
||||||
override;
|
|
||||||
std::unique_ptr<content::LoginDelegate> CreateLoginDelegate(
|
|
||||||
const net::AuthChallengeInfo& auth_info,
|
|
||||||
content::WebContents* web_contents,
|
|
||||||
const content::GlobalRequestID& request_id,
|
|
||||||
bool is_request_for_main_frame,
|
|
||||||
const GURL& url,
|
|
||||||
scoped_refptr<net::HttpResponseHeaders> response_headers,
|
|
||||||
bool first_auth_attempt,
|
|
||||||
LoginAuthRequiredCallback auth_required_callback) override;
|
|
||||||
|
|
||||||
CefRefPtr<CefRequestContextImpl> request_context() const;
|
CefRefPtr<CefRequestContextImpl> request_context() const;
|
||||||
|
|
||||||
|
@@ -5,11 +5,11 @@
|
|||||||
|
|
||||||
#include "build/build_config.h"
|
#include "build/build_config.h"
|
||||||
|
|
||||||
#if defined(OS_MAC)
|
#if defined(OS_MACOSX)
|
||||||
|
|
||||||
#include "chrome/app/chrome_crash_reporter_client.h"
|
#include "chrome/app/chrome_crash_reporter_client.h"
|
||||||
|
|
||||||
// Required due to https://crrev.com/1c9f89a06f
|
// Required due to https://crrev.com/1c9f89a06f
|
||||||
void ChromeCrashReporterClient::Create() {}
|
void ChromeCrashReporterClient::Create() {}
|
||||||
|
|
||||||
#endif // defined(OS_MAC)
|
#endif // defined(OS_MACOSX)
|
||||||
|
@@ -11,8 +11,8 @@
|
|||||||
|
|
||||||
#include "base/bind.h"
|
#include "base/bind.h"
|
||||||
#include "base/files/file_util.h"
|
#include "base/files/file_util.h"
|
||||||
|
#include "base/message_loop/message_loop_current.h"
|
||||||
#include "base/run_loop.h"
|
#include "base/run_loop.h"
|
||||||
#include "base/task/current_thread.h"
|
|
||||||
#include "base/threading/thread_restrictions.h"
|
#include "base/threading/thread_restrictions.h"
|
||||||
#include "components/network_session_configurator/common/network_switches.h"
|
#include "components/network_session_configurator/common/network_switches.h"
|
||||||
#include "content/public/browser/notification_service.h"
|
#include "content/public/browser/notification_service.h"
|
||||||
@@ -294,7 +294,7 @@ void CefSetOSModalLoop(bool osModalLoop) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (CEF_CURRENTLY_ON_UIT())
|
if (CEF_CURRENTLY_ON_UIT())
|
||||||
base::CurrentThread::Get()->set_os_modal_loop(osModalLoop);
|
base::MessageLoopCurrent::Get()->set_os_modal_loop(osModalLoop);
|
||||||
else
|
else
|
||||||
CEF_POST_TASK(CEF_UIT, base::Bind(CefSetOSModalLoop, osModalLoop));
|
CEF_POST_TASK(CEF_UIT, base::Bind(CefSetOSModalLoop, osModalLoop));
|
||||||
#endif // defined(OS_WIN)
|
#endif // defined(OS_WIN)
|
||||||
|
@@ -17,11 +17,14 @@
|
|||||||
#include "base/threading/platform_thread.h"
|
#include "base/threading/platform_thread.h"
|
||||||
#include "third_party/skia/include/core/SkColor.h"
|
#include "third_party/skia/include/core/SkColor.h"
|
||||||
|
|
||||||
|
class CefBrowserHostImpl;
|
||||||
class CefBrowserInfoManager;
|
class CefBrowserInfoManager;
|
||||||
class CefTraceSubscriber;
|
class CefTraceSubscriber;
|
||||||
|
|
||||||
class CefContext {
|
class CefContext {
|
||||||
public:
|
public:
|
||||||
|
typedef std::list<CefRefPtr<CefBrowserHostImpl>> BrowserList;
|
||||||
|
|
||||||
// Interface to implement for observers that wish to be informed of changes
|
// Interface to implement for observers that wish to be informed of changes
|
||||||
// to the context. All methods will be called on the UI thread.
|
// to the context. All methods will be called on the UI thread.
|
||||||
class Observer {
|
class Observer {
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#include "libcef/browser/devtools/devtools_file_manager.h"
|
#include "libcef/browser/devtools/devtools_file_manager.h"
|
||||||
|
|
||||||
#include "libcef/browser/alloy/alloy_browser_host_impl.h"
|
#include "libcef/browser/browser_host_impl.h"
|
||||||
|
|
||||||
#include "base/bind.h"
|
#include "base/bind.h"
|
||||||
#include "base/callback.h"
|
#include "base/callback.h"
|
||||||
@@ -39,9 +39,8 @@ void AppendToFile(const base::FilePath& path, const std::string& content) {
|
|||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
CefDevToolsFileManager::CefDevToolsFileManager(
|
CefDevToolsFileManager::CefDevToolsFileManager(CefBrowserHostImpl* browser_impl,
|
||||||
AlloyBrowserHostImpl* browser_impl,
|
PrefService* prefs)
|
||||||
PrefService* prefs)
|
|
||||||
: browser_impl_(browser_impl),
|
: browser_impl_(browser_impl),
|
||||||
prefs_(prefs),
|
prefs_(prefs),
|
||||||
file_task_runner_(base::CreateSequencedTaskRunner(
|
file_task_runner_(base::CreateSequencedTaskRunner(
|
||||||
|
@@ -18,7 +18,7 @@ class SequencedTaskRunner;
|
|||||||
class Value;
|
class Value;
|
||||||
} // namespace base
|
} // namespace base
|
||||||
|
|
||||||
class AlloyBrowserHostImpl;
|
class CefBrowserHostImpl;
|
||||||
class PrefService;
|
class PrefService;
|
||||||
|
|
||||||
// File management helper for DevTools.
|
// File management helper for DevTools.
|
||||||
@@ -26,8 +26,7 @@ class PrefService;
|
|||||||
// chrome/browser/devtools/devtools_file_helper.cc.
|
// chrome/browser/devtools/devtools_file_helper.cc.
|
||||||
class CefDevToolsFileManager {
|
class CefDevToolsFileManager {
|
||||||
public:
|
public:
|
||||||
CefDevToolsFileManager(AlloyBrowserHostImpl* browser_impl,
|
CefDevToolsFileManager(CefBrowserHostImpl* browser_impl, PrefService* prefs);
|
||||||
PrefService* prefs);
|
|
||||||
|
|
||||||
void SaveToFile(const std::string& url,
|
void SaveToFile(const std::string& url,
|
||||||
const std::string& content,
|
const std::string& content,
|
||||||
@@ -69,7 +68,7 @@ class CefDevToolsFileManager {
|
|||||||
const base::Value* arg3);
|
const base::Value* arg3);
|
||||||
|
|
||||||
// Guaranteed to outlive this object.
|
// Guaranteed to outlive this object.
|
||||||
AlloyBrowserHostImpl* browser_impl_;
|
CefBrowserHostImpl* browser_impl_;
|
||||||
PrefService* prefs_;
|
PrefService* prefs_;
|
||||||
|
|
||||||
typedef std::map<std::string, base::FilePath> PathsMap;
|
typedef std::map<std::string, base::FilePath> PathsMap;
|
||||||
|
@@ -25,7 +25,6 @@
|
|||||||
#include "base/macros.h"
|
#include "base/macros.h"
|
||||||
#include "base/memory/ptr_util.h"
|
#include "base/memory/ptr_util.h"
|
||||||
#include "base/strings/string_number_conversions.h"
|
#include "base/strings/string_number_conversions.h"
|
||||||
#include "base/strings/string_util.h"
|
|
||||||
#include "base/strings/stringprintf.h"
|
#include "base/strings/stringprintf.h"
|
||||||
#include "base/strings/utf_string_conversions.h"
|
#include "base/strings/utf_string_conversions.h"
|
||||||
#include "base/task/post_task.h"
|
#include "base/task/post_task.h"
|
||||||
@@ -54,7 +53,6 @@
|
|||||||
#include "net/traffic_annotation/network_traffic_annotation.h"
|
#include "net/traffic_annotation/network_traffic_annotation.h"
|
||||||
#include "services/network/public/cpp/simple_url_loader.h"
|
#include "services/network/public/cpp/simple_url_loader.h"
|
||||||
#include "services/network/public/cpp/simple_url_loader_stream_consumer.h"
|
#include "services/network/public/cpp/simple_url_loader_stream_consumer.h"
|
||||||
#include "services/network/public/cpp/wrapper_shared_url_loader_factory.h"
|
|
||||||
#include "services/network/public/mojom/url_response_head.mojom.h"
|
#include "services/network/public/mojom/url_response_head.mojom.h"
|
||||||
#include "storage/browser/file_system/native_file_util.h"
|
#include "storage/browser/file_system/native_file_util.h"
|
||||||
|
|
||||||
@@ -236,7 +234,7 @@ const size_t kMaxMessageChunkSize = IPC::Channel::kMaximumMessageSize / 4;
|
|||||||
|
|
||||||
// static
|
// static
|
||||||
CefDevToolsFrontend* CefDevToolsFrontend::Show(
|
CefDevToolsFrontend* CefDevToolsFrontend::Show(
|
||||||
AlloyBrowserHostImpl* inspected_browser,
|
CefBrowserHostImpl* inspected_browser,
|
||||||
const CefWindowInfo& windowInfo,
|
const CefWindowInfo& windowInfo,
|
||||||
CefRefPtr<CefClient> client,
|
CefRefPtr<CefClient> client,
|
||||||
const CefBrowserSettings& settings,
|
const CefBrowserSettings& settings,
|
||||||
@@ -250,7 +248,7 @@ CefDevToolsFrontend* CefDevToolsFrontend::Show(
|
|||||||
new_settings.background_color = SK_ColorWHITE;
|
new_settings.background_color = SK_ColorWHITE;
|
||||||
}
|
}
|
||||||
|
|
||||||
CefBrowserCreateParams create_params;
|
CefBrowserHostImpl::CreateParams create_params;
|
||||||
if (!inspected_browser->IsViewsHosted())
|
if (!inspected_browser->IsViewsHosted())
|
||||||
create_params.window_info.reset(new CefWindowInfo(windowInfo));
|
create_params.window_info.reset(new CefWindowInfo(windowInfo));
|
||||||
create_params.client = client;
|
create_params.client = client;
|
||||||
@@ -259,15 +257,15 @@ CefDevToolsFrontend* CefDevToolsFrontend::Show(
|
|||||||
create_params.request_context = inspected_browser->GetRequestContext();
|
create_params.request_context = inspected_browser->GetRequestContext();
|
||||||
create_params.extra_info = inspected_browser->browser_info()->extra_info();
|
create_params.extra_info = inspected_browser->browser_info()->extra_info();
|
||||||
|
|
||||||
CefRefPtr<AlloyBrowserHostImpl> frontend_browser =
|
CefRefPtr<CefBrowserHostImpl> frontend_browser =
|
||||||
AlloyBrowserHostImpl::Create(create_params);
|
CefBrowserHostImpl::Create(create_params);
|
||||||
|
|
||||||
content::WebContents* inspected_contents = inspected_browser->web_contents();
|
content::WebContents* inspected_contents = inspected_browser->web_contents();
|
||||||
|
|
||||||
// CefDevToolsFrontend will delete itself when the frontend WebContents is
|
// CefDevToolsFrontend will delete itself when the frontend WebContents is
|
||||||
// destroyed.
|
// destroyed.
|
||||||
CefDevToolsFrontend* devtools_frontend = new CefDevToolsFrontend(
|
CefDevToolsFrontend* devtools_frontend = new CefDevToolsFrontend(
|
||||||
static_cast<AlloyBrowserHostImpl*>(frontend_browser.get()),
|
static_cast<CefBrowserHostImpl*>(frontend_browser.get()),
|
||||||
inspected_contents, inspect_element_at,
|
inspected_contents, inspect_element_at,
|
||||||
std::move(frontend_destroyed_callback));
|
std::move(frontend_destroyed_callback));
|
||||||
|
|
||||||
@@ -294,12 +292,12 @@ void CefDevToolsFrontend::InspectElementAt(int x, int y) {
|
|||||||
|
|
||||||
void CefDevToolsFrontend::Close() {
|
void CefDevToolsFrontend::Close() {
|
||||||
base::PostTask(FROM_HERE, {content::BrowserThread::UI},
|
base::PostTask(FROM_HERE, {content::BrowserThread::UI},
|
||||||
base::Bind(&AlloyBrowserHostImpl::CloseBrowser,
|
base::Bind(&CefBrowserHostImpl::CloseBrowser,
|
||||||
frontend_browser_.get(), true));
|
frontend_browser_.get(), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
CefDevToolsFrontend::CefDevToolsFrontend(
|
CefDevToolsFrontend::CefDevToolsFrontend(
|
||||||
AlloyBrowserHostImpl* frontend_browser,
|
CefBrowserHostImpl* frontend_browser,
|
||||||
content::WebContents* inspected_contents,
|
content::WebContents* inspected_contents,
|
||||||
const CefPoint& inspect_element_at,
|
const CefPoint& inspect_element_at,
|
||||||
base::OnceClosure frontend_destroyed_callback)
|
base::OnceClosure frontend_destroyed_callback)
|
||||||
@@ -446,15 +444,15 @@ void CefDevToolsFrontend::HandleMessageFromDevToolsFrontend(
|
|||||||
resource_request->site_for_cookies = net::SiteForCookies::FromUrl(gurl);
|
resource_request->site_for_cookies = net::SiteForCookies::FromUrl(gurl);
|
||||||
resource_request->headers.AddHeadersFromString(headers);
|
resource_request->headers.AddHeadersFromString(headers);
|
||||||
|
|
||||||
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory;
|
std::unique_ptr<network::mojom::URLLoaderFactory> file_url_loader_factory;
|
||||||
|
scoped_refptr<network::SharedURLLoaderFactory> network_url_loader_factory;
|
||||||
|
std::unique_ptr<network::mojom::URLLoaderFactory> webui_url_loader_factory;
|
||||||
|
network::mojom::URLLoaderFactory* url_loader_factory;
|
||||||
if (gurl.SchemeIsFile()) {
|
if (gurl.SchemeIsFile()) {
|
||||||
mojo::PendingRemote<network::mojom::URLLoaderFactory> pending_remote =
|
file_url_loader_factory = content::CreateFileURLLoaderFactory(
|
||||||
content::CreateFileURLLoaderFactory(
|
base::FilePath() /* profile_path */,
|
||||||
base::FilePath() /* profile_path */,
|
nullptr /* shared_cors_origin_access_list */);
|
||||||
nullptr /* shared_cors_origin_access_list */);
|
url_loader_factory = file_url_loader_factory.get();
|
||||||
url_loader_factory = network::SharedURLLoaderFactory::Create(
|
|
||||||
std::make_unique<network::WrapperPendingSharedURLLoaderFactory>(
|
|
||||||
std::move(pending_remote)));
|
|
||||||
} else if (content::HasWebUIScheme(gurl)) {
|
} else if (content::HasWebUIScheme(gurl)) {
|
||||||
base::DictionaryValue response;
|
base::DictionaryValue response;
|
||||||
response.SetInteger("statusCode", 403);
|
response.SetInteger("statusCode", 403);
|
||||||
@@ -463,13 +461,15 @@ void CefDevToolsFrontend::HandleMessageFromDevToolsFrontend(
|
|||||||
} else {
|
} else {
|
||||||
auto* partition = content::BrowserContext::GetStoragePartitionForSite(
|
auto* partition = content::BrowserContext::GetStoragePartitionForSite(
|
||||||
web_contents()->GetBrowserContext(), gurl);
|
web_contents()->GetBrowserContext(), gurl);
|
||||||
url_loader_factory = partition->GetURLLoaderFactoryForBrowserProcess();
|
network_url_loader_factory =
|
||||||
|
partition->GetURLLoaderFactoryForBrowserProcess();
|
||||||
|
url_loader_factory = network_url_loader_factory.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto simple_url_loader = network::SimpleURLLoader::Create(
|
auto simple_url_loader = network::SimpleURLLoader::Create(
|
||||||
std::move(resource_request), traffic_annotation);
|
std::move(resource_request), traffic_annotation);
|
||||||
auto resource_loader = std::make_unique<NetworkResourceLoader>(
|
auto resource_loader = std::make_unique<NetworkResourceLoader>(
|
||||||
stream_id, this, std::move(simple_url_loader), url_loader_factory.get(),
|
stream_id, this, std::move(simple_url_loader), url_loader_factory,
|
||||||
request_id);
|
request_id);
|
||||||
loaders_.insert(std::move(resource_loader));
|
loaders_.insert(std::move(resource_loader));
|
||||||
return;
|
return;
|
||||||
@@ -538,7 +538,7 @@ void CefDevToolsFrontend::DispatchProtocolMessage(
|
|||||||
if (ProtocolLoggingEnabled()) {
|
if (ProtocolLoggingEnabled()) {
|
||||||
// Quick check to avoid parsing the JSON object. Events begin with a
|
// Quick check to avoid parsing the JSON object. Events begin with a
|
||||||
// "method" value whereas method results begin with an "id" value.
|
// "method" value whereas method results begin with an "id" value.
|
||||||
LogProtocolMessage(base::StartsWith(str_message, "{\"method\":")
|
LogProtocolMessage(str_message.starts_with("{\"method\":")
|
||||||
? ProtocolMessageType::EVENT
|
? ProtocolMessageType::EVENT
|
||||||
: ProtocolMessageType::RESULT,
|
: ProtocolMessageType::RESULT,
|
||||||
str_message);
|
str_message);
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
#include "libcef/browser/alloy/alloy_browser_host_impl.h"
|
#include "libcef/browser/browser_host_impl.h"
|
||||||
#include "libcef/browser/devtools/devtools_file_manager.h"
|
#include "libcef/browser/devtools/devtools_file_manager.h"
|
||||||
|
|
||||||
#include "base/compiler_specific.h"
|
#include "base/compiler_specific.h"
|
||||||
@@ -42,7 +42,7 @@ class CefDevToolsFrontend : public content::WebContentsObserver,
|
|||||||
public content::DevToolsAgentHostClient {
|
public content::DevToolsAgentHostClient {
|
||||||
public:
|
public:
|
||||||
static CefDevToolsFrontend* Show(
|
static CefDevToolsFrontend* Show(
|
||||||
AlloyBrowserHostImpl* inspected_browser,
|
CefBrowserHostImpl* inspected_browser,
|
||||||
const CefWindowInfo& windowInfo,
|
const CefWindowInfo& windowInfo,
|
||||||
CefRefPtr<CefClient> client,
|
CefRefPtr<CefClient> client,
|
||||||
const CefBrowserSettings& settings,
|
const CefBrowserSettings& settings,
|
||||||
@@ -60,7 +60,7 @@ class CefDevToolsFrontend : public content::WebContentsObserver,
|
|||||||
const base::Value* arg3);
|
const base::Value* arg3);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CefDevToolsFrontend(AlloyBrowserHostImpl* frontend_browser,
|
CefDevToolsFrontend(CefBrowserHostImpl* frontend_browser,
|
||||||
content::WebContents* inspected_contents,
|
content::WebContents* inspected_contents,
|
||||||
const CefPoint& inspect_element_at,
|
const CefPoint& inspect_element_at,
|
||||||
base::OnceClosure destroyed_callback);
|
base::OnceClosure destroyed_callback);
|
||||||
@@ -87,7 +87,7 @@ class CefDevToolsFrontend : public content::WebContentsObserver,
|
|||||||
|
|
||||||
PrefService* GetPrefs() const;
|
PrefService* GetPrefs() const;
|
||||||
|
|
||||||
CefRefPtr<AlloyBrowserHostImpl> frontend_browser_;
|
CefRefPtr<CefBrowserHostImpl> frontend_browser_;
|
||||||
content::WebContents* inspected_contents_;
|
content::WebContents* inspected_contents_;
|
||||||
scoped_refptr<content::DevToolsAgentHost> agent_host_;
|
scoped_refptr<content::DevToolsAgentHost> agent_host_;
|
||||||
CefPoint inspect_element_at_;
|
CefPoint inspect_element_at_;
|
||||||
|
@@ -31,7 +31,7 @@ class CefDevToolsRegistrationImpl : public CefRegistration,
|
|||||||
controller_->RemoveObserver(this);
|
controller_->RemoveObserver(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Initialize(AlloyBrowserHostImpl* browser,
|
void Initialize(CefBrowserHostImpl* browser,
|
||||||
base::WeakPtr<CefDevToolsController> controller) {
|
base::WeakPtr<CefDevToolsController> controller) {
|
||||||
CEF_REQUIRE_UIT();
|
CEF_REQUIRE_UIT();
|
||||||
DCHECK(browser && controller);
|
DCHECK(browser && controller);
|
||||||
@@ -83,7 +83,7 @@ class CefDevToolsRegistrationImpl : public CefRegistration,
|
|||||||
|
|
||||||
CefRefPtr<CefDevToolsMessageObserver> observer_;
|
CefRefPtr<CefDevToolsMessageObserver> observer_;
|
||||||
|
|
||||||
AlloyBrowserHostImpl* browser_ = nullptr;
|
CefBrowserHostImpl* browser_ = nullptr;
|
||||||
base::WeakPtr<CefDevToolsController> controller_;
|
base::WeakPtr<CefDevToolsController> controller_;
|
||||||
|
|
||||||
IMPLEMENT_REFCOUNTING_DELETE_ON_UIT(CefDevToolsRegistrationImpl);
|
IMPLEMENT_REFCOUNTING_DELETE_ON_UIT(CefDevToolsRegistrationImpl);
|
||||||
@@ -92,7 +92,7 @@ class CefDevToolsRegistrationImpl : public CefRegistration,
|
|||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
CefDevToolsManager::CefDevToolsManager(AlloyBrowserHostImpl* inspected_browser)
|
CefDevToolsManager::CefDevToolsManager(CefBrowserHostImpl* inspected_browser)
|
||||||
: inspected_browser_(inspected_browser), weak_ptr_factory_(this) {
|
: inspected_browser_(inspected_browser), weak_ptr_factory_(this) {
|
||||||
CEF_REQUIRE_UIT();
|
CEF_REQUIRE_UIT();
|
||||||
}
|
}
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
#include "base/memory/weak_ptr.h"
|
#include "base/memory/weak_ptr.h"
|
||||||
|
|
||||||
class AlloyBrowserHostImpl;
|
class CefBrowserHostImpl;
|
||||||
class CefDevToolsController;
|
class CefDevToolsController;
|
||||||
class CefDevToolsFrontend;
|
class CefDevToolsFrontend;
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ class WebContents;
|
|||||||
class CefDevToolsManager {
|
class CefDevToolsManager {
|
||||||
public:
|
public:
|
||||||
// |inspected_browser| will outlive this object.
|
// |inspected_browser| will outlive this object.
|
||||||
explicit CefDevToolsManager(AlloyBrowserHostImpl* inspected_browser);
|
explicit CefDevToolsManager(CefBrowserHostImpl* inspected_browser);
|
||||||
~CefDevToolsManager();
|
~CefDevToolsManager();
|
||||||
|
|
||||||
// See CefBrowserHost methods of the same name for documentation.
|
// See CefBrowserHost methods of the same name for documentation.
|
||||||
@@ -52,7 +52,7 @@ class CefDevToolsManager {
|
|||||||
|
|
||||||
bool EnsureController();
|
bool EnsureController();
|
||||||
|
|
||||||
AlloyBrowserHostImpl* const inspected_browser_;
|
CefBrowserHostImpl* const inspected_browser_;
|
||||||
|
|
||||||
// CefDevToolsFrontend will delete itself when the frontend WebContents is
|
// CefDevToolsFrontend will delete itself when the frontend WebContents is
|
||||||
// destroyed.
|
// destroyed.
|
||||||
|
@@ -8,6 +8,8 @@
|
|||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include "libcef/browser/browser_host_impl.h"
|
||||||
|
|
||||||
#include "base/atomicops.h"
|
#include "base/atomicops.h"
|
||||||
#include "base/bind.h"
|
#include "base/bind.h"
|
||||||
#include "base/command_line.h"
|
#include "base/command_line.h"
|
||||||
|
@@ -5,7 +5,6 @@
|
|||||||
#include "libcef/browser/devtools/devtools_util.h"
|
#include "libcef/browser/devtools/devtools_util.h"
|
||||||
|
|
||||||
#include "base/strings/string_number_conversions.h"
|
#include "base/strings/string_number_conversions.h"
|
||||||
#include "base/strings/string_util.h"
|
|
||||||
|
|
||||||
namespace devtools_util {
|
namespace devtools_util {
|
||||||
|
|
||||||
@@ -25,7 +24,7 @@ bool ParseEvent(const base::StringPiece& message,
|
|||||||
static const char kMethodEnd[] = "\"";
|
static const char kMethodEnd[] = "\"";
|
||||||
static const char kParamsStart[] = ",\"params\":";
|
static const char kParamsStart[] = ",\"params\":";
|
||||||
|
|
||||||
if (!base::StartsWith(message, kMethodStart))
|
if (!message.starts_with(kMethodStart))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
const size_t method_start = sizeof(kMethodStart) - 1;
|
const size_t method_start = sizeof(kMethodStart) - 1;
|
||||||
@@ -42,7 +41,7 @@ bool ParseEvent(const base::StringPiece& message,
|
|||||||
params = base::StringPiece();
|
params = base::StringPiece();
|
||||||
} else {
|
} else {
|
||||||
const base::StringPiece& remainder = message.substr(remainder_start);
|
const base::StringPiece& remainder = message.substr(remainder_start);
|
||||||
if (base::StartsWith(remainder, kParamsStart)) {
|
if (remainder.starts_with(kParamsStart)) {
|
||||||
// Stop immediately before the message closing bracket.
|
// Stop immediately before the message closing bracket.
|
||||||
remainder_start += sizeof(kParamsStart) - 1;
|
remainder_start += sizeof(kParamsStart) - 1;
|
||||||
params =
|
params =
|
||||||
@@ -72,7 +71,7 @@ bool ParseResult(const base::StringPiece& message,
|
|||||||
static const char kResultStart[] = "\"result\":";
|
static const char kResultStart[] = "\"result\":";
|
||||||
static const char kErrorStart[] = "\"error\":";
|
static const char kErrorStart[] = "\"error\":";
|
||||||
|
|
||||||
if (!base::StartsWith(message, kIdStart))
|
if (!message.starts_with(kIdStart))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
const size_t id_start = sizeof(kIdStart) - 1;
|
const size_t id_start = sizeof(kIdStart) - 1;
|
||||||
@@ -85,13 +84,13 @@ bool ParseResult(const base::StringPiece& message,
|
|||||||
|
|
||||||
size_t remainder_start = id_end + sizeof(kIdEnd) - 1;
|
size_t remainder_start = id_end + sizeof(kIdEnd) - 1;
|
||||||
const base::StringPiece& remainder = message.substr(remainder_start);
|
const base::StringPiece& remainder = message.substr(remainder_start);
|
||||||
if (base::StartsWith(remainder, kResultStart)) {
|
if (remainder.starts_with(kResultStart)) {
|
||||||
// Stop immediately before the message closing bracket.
|
// Stop immediately before the message closing bracket.
|
||||||
remainder_start += sizeof(kResultStart) - 1;
|
remainder_start += sizeof(kResultStart) - 1;
|
||||||
result =
|
result =
|
||||||
message.substr(remainder_start, message.size() - 1 - remainder_start);
|
message.substr(remainder_start, message.size() - 1 - remainder_start);
|
||||||
success = true;
|
success = true;
|
||||||
} else if (base::StartsWith(remainder, kErrorStart)) {
|
} else if (remainder.starts_with(kErrorStart)) {
|
||||||
// Stop immediately before the message closing bracket.
|
// Stop immediately before the message closing bracket.
|
||||||
remainder_start += sizeof(kErrorStart) - 1;
|
remainder_start += sizeof(kErrorStart) - 1;
|
||||||
result =
|
result =
|
||||||
|
@@ -5,7 +5,6 @@
|
|||||||
#include "libcef/browser/download_manager_delegate.h"
|
#include "libcef/browser/download_manager_delegate.h"
|
||||||
|
|
||||||
#include "include/cef_download_handler.h"
|
#include "include/cef_download_handler.h"
|
||||||
#include "libcef/browser/alloy/alloy_browser_host_impl.h"
|
|
||||||
#include "libcef/browser/context.h"
|
#include "libcef/browser/context.h"
|
||||||
#include "libcef/browser/download_item_impl.h"
|
#include "libcef/browser/download_item_impl.h"
|
||||||
#include "libcef/browser/thread_util.h"
|
#include "libcef/browser/thread_util.h"
|
||||||
@@ -31,7 +30,7 @@ namespace {
|
|||||||
|
|
||||||
// Helper function to retrieve the CefDownloadHandler.
|
// Helper function to retrieve the CefDownloadHandler.
|
||||||
CefRefPtr<CefDownloadHandler> GetDownloadHandler(
|
CefRefPtr<CefDownloadHandler> GetDownloadHandler(
|
||||||
CefRefPtr<AlloyBrowserHostImpl> browser) {
|
CefRefPtr<CefBrowserHostImpl> browser) {
|
||||||
CefRefPtr<CefClient> client = browser->GetClient();
|
CefRefPtr<CefClient> client = browser->GetClient();
|
||||||
if (client.get())
|
if (client.get())
|
||||||
return client->GetDownloadHandler();
|
return client->GetDownloadHandler();
|
||||||
@@ -125,8 +124,8 @@ class CefBeforeDownloadCallbackImpl : public CefBeforeDownloadCallback {
|
|||||||
if (show_dialog) {
|
if (show_dialog) {
|
||||||
WebContents* web_contents =
|
WebContents* web_contents =
|
||||||
content::DownloadItemUtils::GetWebContents(item);
|
content::DownloadItemUtils::GetWebContents(item);
|
||||||
CefRefPtr<AlloyBrowserHostImpl> browser =
|
CefRefPtr<CefBrowserHostImpl> browser =
|
||||||
AlloyBrowserHostImpl::GetBrowserForContents(web_contents);
|
CefBrowserHostImpl::GetBrowserForContents(web_contents);
|
||||||
if (browser.get()) {
|
if (browser.get()) {
|
||||||
handled = true;
|
handled = true;
|
||||||
|
|
||||||
@@ -276,7 +275,7 @@ CefDownloadManagerDelegate::~CefDownloadManagerDelegate() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CefDownloadManagerDelegate::OnDownloadUpdated(DownloadItem* download) {
|
void CefDownloadManagerDelegate::OnDownloadUpdated(DownloadItem* download) {
|
||||||
CefRefPtr<AlloyBrowserHostImpl> browser = GetBrowser(download);
|
CefRefPtr<CefBrowserHostImpl> browser = GetBrowser(download);
|
||||||
CefRefPtr<CefDownloadHandler> handler;
|
CefRefPtr<CefDownloadHandler> handler;
|
||||||
if (browser.get())
|
if (browser.get())
|
||||||
handler = GetDownloadHandler(browser);
|
handler = GetDownloadHandler(browser);
|
||||||
@@ -296,7 +295,7 @@ void CefDownloadManagerDelegate::OnDownloadUpdated(DownloadItem* download) {
|
|||||||
void CefDownloadManagerDelegate::OnDownloadDestroyed(DownloadItem* item) {
|
void CefDownloadManagerDelegate::OnDownloadDestroyed(DownloadItem* item) {
|
||||||
item->RemoveObserver(this);
|
item->RemoveObserver(this);
|
||||||
|
|
||||||
AlloyBrowserHostImpl* browser = nullptr;
|
CefBrowserHostImpl* browser = nullptr;
|
||||||
|
|
||||||
ItemBrowserMap::iterator it = item_browser_map_.find(item);
|
ItemBrowserMap::iterator it = item_browser_map_.find(item);
|
||||||
DCHECK(it != item_browser_map_.end());
|
DCHECK(it != item_browser_map_.end());
|
||||||
@@ -326,7 +325,7 @@ void CefDownloadManagerDelegate::OnDownloadCreated(DownloadManager* manager,
|
|||||||
DownloadItem* item) {
|
DownloadItem* item) {
|
||||||
// This callback may arrive after DetermineDownloadTarget, so we allow
|
// This callback may arrive after DetermineDownloadTarget, so we allow
|
||||||
// association from either method.
|
// association from either method.
|
||||||
CefRefPtr<AlloyBrowserHostImpl> browser = GetOrAssociateBrowser(item);
|
CefRefPtr<CefBrowserHostImpl> browser = GetOrAssociateBrowser(item);
|
||||||
if (!browser) {
|
if (!browser) {
|
||||||
// If the download is rejected (e.g. ALT+click on an invalid protocol link)
|
// If the download is rejected (e.g. ALT+click on an invalid protocol link)
|
||||||
// then an "interrupted" download will be started via DownloadManagerImpl::
|
// then an "interrupted" download will be started via DownloadManagerImpl::
|
||||||
@@ -365,7 +364,7 @@ bool CefDownloadManagerDelegate::DetermineDownloadTarget(
|
|||||||
|
|
||||||
// This callback may arrive before OnDownloadCreated, so we allow association
|
// This callback may arrive before OnDownloadCreated, so we allow association
|
||||||
// from either method.
|
// from either method.
|
||||||
CefRefPtr<AlloyBrowserHostImpl> browser = GetOrAssociateBrowser(item);
|
CefRefPtr<CefBrowserHostImpl> browser = GetOrAssociateBrowser(item);
|
||||||
CefRefPtr<CefDownloadHandler> handler;
|
CefRefPtr<CefDownloadHandler> handler;
|
||||||
if (browser.get())
|
if (browser.get())
|
||||||
handler = GetDownloadHandler(browser);
|
handler = GetDownloadHandler(browser);
|
||||||
@@ -406,7 +405,7 @@ std::string CefDownloadManagerDelegate::ApplicationClientIdForFileScanning() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CefDownloadManagerDelegate::OnBrowserDestroyed(
|
void CefDownloadManagerDelegate::OnBrowserDestroyed(
|
||||||
CefBrowserHostBase* browser) {
|
CefBrowserHostImpl* browser) {
|
||||||
ItemBrowserMap::iterator it = item_browser_map_.begin();
|
ItemBrowserMap::iterator it = item_browser_map_.begin();
|
||||||
for (; it != item_browser_map_.end(); ++it) {
|
for (; it != item_browser_map_.end(); ++it) {
|
||||||
if (it->second == browser) {
|
if (it->second == browser) {
|
||||||
@@ -418,17 +417,17 @@ void CefDownloadManagerDelegate::OnBrowserDestroyed(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AlloyBrowserHostImpl* CefDownloadManagerDelegate::GetOrAssociateBrowser(
|
CefBrowserHostImpl* CefDownloadManagerDelegate::GetOrAssociateBrowser(
|
||||||
download::DownloadItem* item) {
|
download::DownloadItem* item) {
|
||||||
ItemBrowserMap::const_iterator it = item_browser_map_.find(item);
|
ItemBrowserMap::const_iterator it = item_browser_map_.find(item);
|
||||||
if (it != item_browser_map_.end())
|
if (it != item_browser_map_.end())
|
||||||
return it->second;
|
return it->second;
|
||||||
|
|
||||||
AlloyBrowserHostImpl* browser = nullptr;
|
CefBrowserHostImpl* browser = nullptr;
|
||||||
content::WebContents* contents =
|
content::WebContents* contents =
|
||||||
content::DownloadItemUtils::GetWebContents(item);
|
content::DownloadItemUtils::GetWebContents(item);
|
||||||
if (contents) {
|
if (contents) {
|
||||||
browser = AlloyBrowserHostImpl::GetBrowserForContents(contents).get();
|
browser = CefBrowserHostImpl::GetBrowserForContents(contents).get();
|
||||||
DCHECK(browser);
|
DCHECK(browser);
|
||||||
}
|
}
|
||||||
if (!browser)
|
if (!browser)
|
||||||
@@ -446,8 +445,7 @@ AlloyBrowserHostImpl* CefDownloadManagerDelegate::GetOrAssociateBrowser(
|
|||||||
return browser;
|
return browser;
|
||||||
}
|
}
|
||||||
|
|
||||||
AlloyBrowserHostImpl* CefDownloadManagerDelegate::GetBrowser(
|
CefBrowserHostImpl* CefDownloadManagerDelegate::GetBrowser(DownloadItem* item) {
|
||||||
DownloadItem* item) {
|
|
||||||
ItemBrowserMap::const_iterator it = item_browser_map_.find(item);
|
ItemBrowserMap::const_iterator it = item_browser_map_.find(item);
|
||||||
if (it != item_browser_map_.end())
|
if (it != item_browser_map_.end())
|
||||||
return it->second;
|
return it->second;
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
#include "libcef/browser/browser_host_base.h"
|
#include "libcef/browser/browser_host_impl.h"
|
||||||
|
|
||||||
#include "base/compiler_specific.h"
|
#include "base/compiler_specific.h"
|
||||||
#include "base/memory/weak_ptr.h"
|
#include "base/memory/weak_ptr.h"
|
||||||
@@ -16,12 +16,10 @@
|
|||||||
#include "content/public/browser/download_manager.h"
|
#include "content/public/browser/download_manager.h"
|
||||||
#include "content/public/browser/download_manager_delegate.h"
|
#include "content/public/browser/download_manager_delegate.h"
|
||||||
|
|
||||||
class AlloyBrowserHostImpl;
|
|
||||||
|
|
||||||
class CefDownloadManagerDelegate : public download::DownloadItem::Observer,
|
class CefDownloadManagerDelegate : public download::DownloadItem::Observer,
|
||||||
public content::DownloadManager::Observer,
|
public content::DownloadManager::Observer,
|
||||||
public content::DownloadManagerDelegate,
|
public content::DownloadManagerDelegate,
|
||||||
public CefBrowserHostBase::Observer {
|
public CefBrowserHostImpl::Observer {
|
||||||
public:
|
public:
|
||||||
explicit CefDownloadManagerDelegate(content::DownloadManager* manager);
|
explicit CefDownloadManagerDelegate(content::DownloadManager* manager);
|
||||||
~CefDownloadManagerDelegate() override;
|
~CefDownloadManagerDelegate() override;
|
||||||
@@ -43,20 +41,19 @@ class CefDownloadManagerDelegate : public download::DownloadItem::Observer,
|
|||||||
void GetNextId(content::DownloadIdCallback callback) override;
|
void GetNextId(content::DownloadIdCallback callback) override;
|
||||||
std::string ApplicationClientIdForFileScanning() override;
|
std::string ApplicationClientIdForFileScanning() override;
|
||||||
|
|
||||||
// CefBrowserHostBase::Observer methods.
|
// CefBrowserHostImpl::Observer methods.
|
||||||
void OnBrowserDestroyed(CefBrowserHostBase* browser) override;
|
void OnBrowserDestroyed(CefBrowserHostImpl* browser) override;
|
||||||
|
|
||||||
AlloyBrowserHostImpl* GetOrAssociateBrowser(download::DownloadItem* item);
|
CefBrowserHostImpl* GetOrAssociateBrowser(download::DownloadItem* item);
|
||||||
AlloyBrowserHostImpl* GetBrowser(download::DownloadItem* item);
|
CefBrowserHostImpl* GetBrowser(download::DownloadItem* item);
|
||||||
|
|
||||||
content::DownloadManager* manager_;
|
content::DownloadManager* manager_;
|
||||||
base::WeakPtrFactory<content::DownloadManager> manager_ptr_factory_;
|
base::WeakPtrFactory<content::DownloadManager> manager_ptr_factory_;
|
||||||
|
|
||||||
// Map of DownloadItem to originating AlloyBrowserHostImpl. Maintaining this
|
// Map of DownloadItem to originating CefBrowserHostImpl. Maintaining this
|
||||||
// map is necessary because DownloadItem::GetWebContents() may return NULL if
|
// map is necessary because DownloadItem::GetWebContents() may return NULL if
|
||||||
// the browser navigates while the download is in progress.
|
// the browser navigates while the download is in progress.
|
||||||
typedef std::map<download::DownloadItem*, AlloyBrowserHostImpl*>
|
typedef std::map<download::DownloadItem*, CefBrowserHostImpl*> ItemBrowserMap;
|
||||||
ItemBrowserMap;
|
|
||||||
ItemBrowserMap item_browser_map_;
|
ItemBrowserMap item_browser_map_;
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(CefDownloadManagerDelegate);
|
DISALLOW_COPY_AND_ASSIGN(CefDownloadManagerDelegate);
|
||||||
|
@@ -119,7 +119,7 @@ ExecuteCodeFunction::InitResult ExecuteCodeInTabFunction::Init() {
|
|||||||
|
|
||||||
// Find a browser that we can access, or fail with error.
|
// Find a browser that we can access, or fail with error.
|
||||||
std::string error;
|
std::string error;
|
||||||
CefRefPtr<AlloyBrowserHostImpl> browser =
|
CefRefPtr<CefBrowserHostImpl> browser =
|
||||||
cef_details_.GetBrowserForTabIdFirstTime(tab_id, &error);
|
cef_details_.GetBrowserForTabIdFirstTime(tab_id, &error);
|
||||||
if (!browser)
|
if (!browser)
|
||||||
return set_init_result_error(error);
|
return set_init_result_error(error);
|
||||||
@@ -130,18 +130,10 @@ ExecuteCodeFunction::InitResult ExecuteCodeInTabFunction::Init() {
|
|||||||
return set_init_result(SUCCESS);
|
return set_init_result(SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ExecuteCodeInTabFunction::ShouldInsertCSS() const {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ExecuteCodeInTabFunction::ShouldRemoveCSS() const {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ExecuteCodeInTabFunction::CanExecuteScriptOnPage(std::string* error) {
|
bool ExecuteCodeInTabFunction::CanExecuteScriptOnPage(std::string* error) {
|
||||||
CHECK_GE(execute_tab_id_, 0);
|
CHECK_GE(execute_tab_id_, 0);
|
||||||
|
|
||||||
CefRefPtr<AlloyBrowserHostImpl> browser =
|
CefRefPtr<CefBrowserHostImpl> browser =
|
||||||
cef_details_.GetBrowserForTabIdAgain(execute_tab_id_, error);
|
cef_details_.GetBrowserForTabIdAgain(execute_tab_id_, error);
|
||||||
if (!browser)
|
if (!browser)
|
||||||
return false;
|
return false;
|
||||||
@@ -196,7 +188,7 @@ ScriptExecutor* ExecuteCodeInTabFunction::GetScriptExecutor(
|
|||||||
std::string* error) {
|
std::string* error) {
|
||||||
CHECK_GE(execute_tab_id_, 0);
|
CHECK_GE(execute_tab_id_, 0);
|
||||||
|
|
||||||
CefRefPtr<AlloyBrowserHostImpl> browser =
|
CefRefPtr<CefBrowserHostImpl> browser =
|
||||||
cef_details_.GetBrowserForTabIdAgain(execute_tab_id_, error);
|
cef_details_.GetBrowserForTabIdAgain(execute_tab_id_, error);
|
||||||
if (!browser)
|
if (!browser)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@@ -233,11 +225,11 @@ void ExecuteCodeInTabFunction::LoadFileComplete(
|
|||||||
DidLoadAndLocalizeFile(file, success, std::move(data));
|
DidLoadAndLocalizeFile(file, success, std::move(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TabsInsertCSSFunction::ShouldInsertCSS() const {
|
bool TabsExecuteScriptFunction::ShouldInsertCSS() const {
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TabsRemoveCSSFunction::ShouldRemoveCSS() const {
|
bool TabsInsertCSSFunction::ShouldInsertCSS() const {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -245,7 +237,7 @@ ZoomAPIFunction::ZoomAPIFunction() : cef_details_(this) {}
|
|||||||
|
|
||||||
content::WebContents* ZoomAPIFunction::GetWebContents(int tab_id) {
|
content::WebContents* ZoomAPIFunction::GetWebContents(int tab_id) {
|
||||||
// Find a browser that we can access, or set |error_| and return nullptr.
|
// Find a browser that we can access, or set |error_| and return nullptr.
|
||||||
CefRefPtr<AlloyBrowserHostImpl> browser =
|
CefRefPtr<CefBrowserHostImpl> browser =
|
||||||
cef_details_.GetBrowserForTabIdFirstTime(tab_id, &error_);
|
cef_details_.GetBrowserForTabIdFirstTime(tab_id, &error_);
|
||||||
if (!browser)
|
if (!browser)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@@ -42,7 +42,7 @@ class TabsCreateFunction : public ExtensionFunction {
|
|||||||
const CefExtensionFunctionDetails cef_details_;
|
const CefExtensionFunctionDetails cef_details_;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Implement API calls tabs.executeScript, tabs.insertCSS, and tabs.removeCSS.
|
// Implement API call tabs.executeScript and tabs.insertCSS.
|
||||||
class ExecuteCodeInTabFunction : public ExecuteCodeFunction {
|
class ExecuteCodeInTabFunction : public ExecuteCodeFunction {
|
||||||
public:
|
public:
|
||||||
ExecuteCodeInTabFunction();
|
ExecuteCodeInTabFunction();
|
||||||
@@ -52,8 +52,6 @@ class ExecuteCodeInTabFunction : public ExecuteCodeFunction {
|
|||||||
|
|
||||||
// Initializes |execute_tab_id_| and |details_|.
|
// Initializes |execute_tab_id_| and |details_|.
|
||||||
InitResult Init() override;
|
InitResult Init() override;
|
||||||
bool ShouldInsertCSS() const override;
|
|
||||||
bool ShouldRemoveCSS() const override;
|
|
||||||
bool CanExecuteScriptOnPage(std::string* error) override;
|
bool CanExecuteScriptOnPage(std::string* error) override;
|
||||||
ScriptExecutor* GetScriptExecutor(std::string* error) override;
|
ScriptExecutor* GetScriptExecutor(std::string* error) override;
|
||||||
bool IsWebView() const override;
|
bool IsWebView() const override;
|
||||||
@@ -71,6 +69,9 @@ class ExecuteCodeInTabFunction : public ExecuteCodeFunction {
|
|||||||
};
|
};
|
||||||
|
|
||||||
class TabsExecuteScriptFunction : public ExecuteCodeInTabFunction {
|
class TabsExecuteScriptFunction : public ExecuteCodeInTabFunction {
|
||||||
|
protected:
|
||||||
|
bool ShouldInsertCSS() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
~TabsExecuteScriptFunction() override {}
|
~TabsExecuteScriptFunction() override {}
|
||||||
|
|
||||||
@@ -86,15 +87,6 @@ class TabsInsertCSSFunction : public ExecuteCodeInTabFunction {
|
|||||||
DECLARE_EXTENSION_FUNCTION("tabs.insertCSS", TABS_INSERTCSS)
|
DECLARE_EXTENSION_FUNCTION("tabs.insertCSS", TABS_INSERTCSS)
|
||||||
};
|
};
|
||||||
|
|
||||||
class TabsRemoveCSSFunction : public ExecuteCodeInTabFunction {
|
|
||||||
private:
|
|
||||||
~TabsRemoveCSSFunction() override {}
|
|
||||||
|
|
||||||
bool ShouldRemoveCSS() const override;
|
|
||||||
|
|
||||||
DECLARE_EXTENSION_FUNCTION("tabs.removeCSS", TABS_INSERTCSS)
|
|
||||||
};
|
|
||||||
|
|
||||||
// Based on ChromeAsyncExtensionFunction.
|
// Based on ChromeAsyncExtensionFunction.
|
||||||
class ZoomAPIFunction : public ExtensionFunction {
|
class ZoomAPIFunction : public ExtensionFunction {
|
||||||
public:
|
public:
|
||||||
|
@@ -4,13 +4,10 @@
|
|||||||
|
|
||||||
#include "libcef/browser/extensions/browser_extensions_util.h"
|
#include "libcef/browser/extensions/browser_extensions_util.h"
|
||||||
|
|
||||||
#include "libcef/browser/alloy/alloy_browser_host_impl.h"
|
|
||||||
#include "libcef/browser/browser_context.h"
|
#include "libcef/browser/browser_context.h"
|
||||||
#include "libcef/browser/browser_host_base.h"
|
|
||||||
#include "libcef/browser/browser_info_manager.h"
|
#include "libcef/browser/browser_info_manager.h"
|
||||||
#include "libcef/browser/thread_util.h"
|
#include "libcef/browser/thread_util.h"
|
||||||
#include "libcef/common/extensions/extensions_util.h"
|
#include "libcef/common/extensions/extensions_util.h"
|
||||||
#include "libcef/features/runtime_checks.h"
|
|
||||||
|
|
||||||
#include "chrome/browser/browser_process.h"
|
#include "chrome/browser/browser_process.h"
|
||||||
#include "chrome/browser/printing/print_preview_dialog_controller.h"
|
#include "chrome/browser/printing/print_preview_dialog_controller.h"
|
||||||
@@ -19,8 +16,6 @@
|
|||||||
#include "content/browser/web_contents/web_contents_impl.h"
|
#include "content/browser/web_contents/web_contents_impl.h"
|
||||||
#include "content/public/browser/browser_context.h"
|
#include "content/public/browser/browser_context.h"
|
||||||
#include "content/public/browser/browser_plugin_guest_manager.h"
|
#include "content/public/browser/browser_plugin_guest_manager.h"
|
||||||
#include "content/public/browser/render_frame_host.h"
|
|
||||||
#include "content/public/browser/render_view_host.h"
|
|
||||||
#include "extensions/browser/extension_registry.h"
|
#include "extensions/browser/extension_registry.h"
|
||||||
|
|
||||||
namespace extensions {
|
namespace extensions {
|
||||||
@@ -64,7 +59,8 @@ content::WebContents* GetOwnerForGuestContents(content::WebContents* guest) {
|
|||||||
content::BrowserPluginGuest* plugin_guest =
|
content::BrowserPluginGuest* plugin_guest =
|
||||||
guest_impl->GetBrowserPluginGuest();
|
guest_impl->GetBrowserPluginGuest();
|
||||||
if (plugin_guest) {
|
if (plugin_guest) {
|
||||||
return plugin_guest->owner_web_contents();
|
return content::WebContents::FromRenderFrameHost(
|
||||||
|
plugin_guest->GetEmbedderFrame());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Maybe it's a print preview dialog.
|
// Maybe it's a print preview dialog.
|
||||||
@@ -73,7 +69,7 @@ content::WebContents* GetOwnerForGuestContents(content::WebContents* guest) {
|
|||||||
return print_preview_controller->GetInitiator(guest);
|
return print_preview_controller->GetInitiator(guest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CefRefPtr<CefBrowserHostBase> GetOwnerBrowserForFrameRoute(
|
CefRefPtr<CefBrowserHostImpl> GetOwnerBrowserForFrameRoute(
|
||||||
int render_process_id,
|
int render_process_id,
|
||||||
int render_routing_id,
|
int render_routing_id,
|
||||||
bool* is_guest_view) {
|
bool* is_guest_view) {
|
||||||
@@ -90,7 +86,7 @@ CefRefPtr<CefBrowserHostBase> GetOwnerBrowserForFrameRoute(
|
|||||||
CefBrowserInfoManager::GetInstance()->GetBrowserInfoForFrameRoute(
|
CefBrowserInfoManager::GetInstance()->GetBrowserInfoForFrameRoute(
|
||||||
render_process_id, render_routing_id, is_guest_view);
|
render_process_id, render_routing_id, is_guest_view);
|
||||||
if (info.get()) {
|
if (info.get()) {
|
||||||
CefRefPtr<CefBrowserHostBase> browser = info->browser();
|
CefRefPtr<CefBrowserHostImpl> browser = info->browser();
|
||||||
if (!browser.get()) {
|
if (!browser.get()) {
|
||||||
LOG(WARNING) << "Found browser id " << info->browser_id()
|
LOG(WARNING) << "Found browser id " << info->browser_id()
|
||||||
<< " but no browser object matching view process id "
|
<< " but no browser object matching view process id "
|
||||||
@@ -103,20 +99,20 @@ CefRefPtr<CefBrowserHostBase> GetOwnerBrowserForFrameRoute(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CefRefPtr<CefBrowserHostBase> GetOwnerBrowserForHost(
|
CefRefPtr<CefBrowserHostImpl> GetOwnerBrowserForHost(
|
||||||
content::RenderViewHost* host,
|
content::RenderViewHost* host,
|
||||||
bool* is_guest_view) {
|
bool* is_guest_view) {
|
||||||
if (is_guest_view)
|
if (is_guest_view)
|
||||||
*is_guest_view = false;
|
*is_guest_view = false;
|
||||||
|
|
||||||
CefRefPtr<CefBrowserHostBase> browser =
|
CefRefPtr<CefBrowserHostImpl> browser =
|
||||||
CefBrowserHostBase::GetBrowserForHost(host);
|
CefBrowserHostImpl::GetBrowserForHost(host);
|
||||||
if (!browser.get() && ExtensionsEnabled()) {
|
if (!browser.get() && ExtensionsEnabled()) {
|
||||||
// Retrieve the owner browser, if any.
|
// Retrieve the owner browser, if any.
|
||||||
content::WebContents* owner = GetOwnerForGuestContents(
|
content::WebContents* owner = GetOwnerForGuestContents(
|
||||||
content::WebContents::FromRenderViewHost(host));
|
content::WebContents::FromRenderViewHost(host));
|
||||||
if (owner) {
|
if (owner) {
|
||||||
browser = CefBrowserHostBase::GetBrowserForContents(owner);
|
browser = CefBrowserHostImpl::GetBrowserForContents(owner);
|
||||||
if (browser.get() && is_guest_view)
|
if (browser.get() && is_guest_view)
|
||||||
*is_guest_view = true;
|
*is_guest_view = true;
|
||||||
}
|
}
|
||||||
@@ -124,20 +120,20 @@ CefRefPtr<CefBrowserHostBase> GetOwnerBrowserForHost(
|
|||||||
return browser;
|
return browser;
|
||||||
}
|
}
|
||||||
|
|
||||||
CefRefPtr<CefBrowserHostBase> GetOwnerBrowserForHost(
|
CefRefPtr<CefBrowserHostImpl> GetOwnerBrowserForHost(
|
||||||
content::RenderFrameHost* host,
|
content::RenderFrameHost* host,
|
||||||
bool* is_guest_view) {
|
bool* is_guest_view) {
|
||||||
if (is_guest_view)
|
if (is_guest_view)
|
||||||
*is_guest_view = false;
|
*is_guest_view = false;
|
||||||
|
|
||||||
CefRefPtr<CefBrowserHostBase> browser =
|
CefRefPtr<CefBrowserHostImpl> browser =
|
||||||
CefBrowserHostBase::GetBrowserForHost(host);
|
CefBrowserHostImpl::GetBrowserForHost(host);
|
||||||
if (!browser.get() && ExtensionsEnabled()) {
|
if (!browser.get() && ExtensionsEnabled()) {
|
||||||
// Retrieve the owner browser, if any.
|
// Retrieve the owner browser, if any.
|
||||||
content::WebContents* owner = GetOwnerForGuestContents(
|
content::WebContents* owner = GetOwnerForGuestContents(
|
||||||
content::WebContents::FromRenderFrameHost(host));
|
content::WebContents::FromRenderFrameHost(host));
|
||||||
if (owner) {
|
if (owner) {
|
||||||
browser = CefBrowserHostBase::GetBrowserForContents(owner);
|
browser = CefBrowserHostImpl::GetBrowserForContents(owner);
|
||||||
if (browser.get() && is_guest_view)
|
if (browser.get() && is_guest_view)
|
||||||
*is_guest_view = true;
|
*is_guest_view = true;
|
||||||
}
|
}
|
||||||
@@ -145,10 +141,9 @@ CefRefPtr<CefBrowserHostBase> GetOwnerBrowserForHost(
|
|||||||
return browser;
|
return browser;
|
||||||
}
|
}
|
||||||
|
|
||||||
CefRefPtr<AlloyBrowserHostImpl> GetBrowserForTabId(
|
CefRefPtr<CefBrowserHostImpl> GetBrowserForTabId(
|
||||||
int tab_id,
|
int tab_id,
|
||||||
content::BrowserContext* browser_context) {
|
content::BrowserContext* browser_context) {
|
||||||
REQUIRE_ALLOY_RUNTIME();
|
|
||||||
CEF_REQUIRE_UIT();
|
CEF_REQUIRE_UIT();
|
||||||
DCHECK(browser_context);
|
DCHECK(browser_context);
|
||||||
if (tab_id < 0 || !browser_context)
|
if (tab_id < 0 || !browser_context)
|
||||||
@@ -159,8 +154,7 @@ CefRefPtr<AlloyBrowserHostImpl> GetBrowserForTabId(
|
|||||||
|
|
||||||
for (const auto& browser_info :
|
for (const auto& browser_info :
|
||||||
CefBrowserInfoManager::GetInstance()->GetBrowserInfoList()) {
|
CefBrowserInfoManager::GetInstance()->GetBrowserInfoList()) {
|
||||||
CefRefPtr<AlloyBrowserHostImpl> current_browser =
|
CefRefPtr<CefBrowserHostImpl> current_browser = browser_info->browser();
|
||||||
static_cast<AlloyBrowserHostImpl*>(browser_info->browser().get());
|
|
||||||
if (current_browser && current_browser->GetIdentifier() == tab_id) {
|
if (current_browser && current_browser->GetIdentifier() == tab_id) {
|
||||||
// Make sure we're operating in the same CefBrowserContext.
|
// Make sure we're operating in the same CefBrowserContext.
|
||||||
if (CefBrowserContext::FromBrowserContext(
|
if (CefBrowserContext::FromBrowserContext(
|
||||||
|
@@ -7,20 +7,16 @@
|
|||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "include/internal/cef_ptr.h"
|
#include "libcef/browser/browser_host_impl.h"
|
||||||
|
|
||||||
#include "url/gurl.h"
|
#include "url/gurl.h"
|
||||||
|
|
||||||
namespace content {
|
namespace content {
|
||||||
class BrowserContext;
|
class BrowserContext;
|
||||||
class RenderFrameHost;
|
|
||||||
class RenderViewHost;
|
class RenderViewHost;
|
||||||
class WebContents;
|
class WebContents;
|
||||||
} // namespace content
|
} // namespace content
|
||||||
|
|
||||||
class CefBrowserHostBase;
|
|
||||||
class AlloyBrowserHostImpl;
|
|
||||||
|
|
||||||
namespace extensions {
|
namespace extensions {
|
||||||
|
|
||||||
class Extension;
|
class Extension;
|
||||||
@@ -36,31 +32,31 @@ void GetAllGuestsForOwnerContents(content::WebContents* owner,
|
|||||||
// Returns the WebContents that owns the specified |guest|, if any.
|
// Returns the WebContents that owns the specified |guest|, if any.
|
||||||
content::WebContents* GetOwnerForGuestContents(content::WebContents* guest);
|
content::WebContents* GetOwnerForGuestContents(content::WebContents* guest);
|
||||||
|
|
||||||
// Returns the CefBrowserHostBase that owns the host identified by the specified
|
// Returns the CefBrowserHostImpl that owns the host identified by the specified
|
||||||
// routing IDs, if any. |is_guest_view| will be set to true if the IDs
|
// routing IDs, if any. |is_guest_view| will be set to true if the IDs
|
||||||
// match a guest view associated with the returned browser instead of the
|
// match a guest view associated with the returned browser instead of the
|
||||||
// browser itself.
|
// browser itself.
|
||||||
CefRefPtr<CefBrowserHostBase> GetOwnerBrowserForFrameRoute(
|
CefRefPtr<CefBrowserHostImpl> GetOwnerBrowserForFrameRoute(
|
||||||
int render_process_id,
|
int render_process_id,
|
||||||
int render_routing_id,
|
int render_routing_id,
|
||||||
bool* is_guest_view);
|
bool* is_guest_view);
|
||||||
|
|
||||||
// Returns the CefBrowserHostBase that owns the specified |host|, if any.
|
// Returns the CefBrowserHostImpl that owns the specified |host|, if any.
|
||||||
// |is_guest_view| will be set to true if the host matches a guest view
|
// |is_guest_view| will be set to true if the host matches a guest view
|
||||||
// associated with the returned browser instead of the browser itself.
|
// associated with the returned browser instead of the browser itself.
|
||||||
// TODO(cef): Delete the RVH variant once the remaining use case
|
// TODO(cef): Delete the RVH variant once the remaining use case
|
||||||
// (via AlloyContentBrowserClient::OverrideWebkitPrefs) has been removed.
|
// (via AlloyContentBrowserClient::OverrideWebkitPrefs) has been removed.
|
||||||
CefRefPtr<CefBrowserHostBase> GetOwnerBrowserForHost(
|
CefRefPtr<CefBrowserHostImpl> GetOwnerBrowserForHost(
|
||||||
content::RenderViewHost* host,
|
content::RenderViewHost* host,
|
||||||
bool* is_guest_view);
|
bool* is_guest_view);
|
||||||
CefRefPtr<CefBrowserHostBase> GetOwnerBrowserForHost(
|
CefRefPtr<CefBrowserHostImpl> GetOwnerBrowserForHost(
|
||||||
content::RenderFrameHost* host,
|
content::RenderFrameHost* host,
|
||||||
bool* is_guest_view);
|
bool* is_guest_view);
|
||||||
|
|
||||||
// Returns the browser matching |tab_id| and |browser_context|. Returns false if
|
// Returns the browser matching |tab_id| and |browser_context|. Returns false if
|
||||||
// |tab_id| is < 0 or a matching browser cannot be found within
|
// |tab_id| is < 0 or a matching browser cannot be found within
|
||||||
// |browser_context|. Similar in concept to ExtensionTabUtil::GetTabById.
|
// |browser_context|. Similar in concept to ExtensionTabUtil::GetTabById.
|
||||||
CefRefPtr<AlloyBrowserHostImpl> GetBrowserForTabId(
|
CefRefPtr<CefBrowserHostImpl> GetBrowserForTabId(
|
||||||
int tab_id,
|
int tab_id,
|
||||||
content::BrowserContext* browser_context);
|
content::BrowserContext* browser_context);
|
||||||
|
|
||||||
|
@@ -6,9 +6,8 @@
|
|||||||
|
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include "libcef/browser/alloy/alloy_browser_host_impl.h"
|
#include "libcef/browser/browser_host_impl.h"
|
||||||
#include "libcef/browser/thread_util.h"
|
#include "libcef/browser/thread_util.h"
|
||||||
#include "libcef/features/runtime_checks.h"
|
|
||||||
|
|
||||||
#include "content/public/browser/render_view_host.h"
|
#include "content/public/browser/render_view_host.h"
|
||||||
#include "content/public/browser/render_widget_host.h"
|
#include "content/public/browser/render_widget_host.h"
|
||||||
@@ -16,7 +15,6 @@
|
|||||||
CefBrowserPlatformDelegateBackground::CefBrowserPlatformDelegateBackground(
|
CefBrowserPlatformDelegateBackground::CefBrowserPlatformDelegateBackground(
|
||||||
std::unique_ptr<CefBrowserPlatformDelegateNative> native_delegate)
|
std::unique_ptr<CefBrowserPlatformDelegateNative> native_delegate)
|
||||||
: native_delegate_(std::move(native_delegate)) {
|
: native_delegate_(std::move(native_delegate)) {
|
||||||
REQUIRE_ALLOY_RUNTIME();
|
|
||||||
native_delegate_->set_windowless_handler(this);
|
native_delegate_->set_windowless_handler(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -29,8 +27,7 @@ void CefBrowserPlatformDelegateBackground::CloseHostWindow() {
|
|||||||
// No host window, so continue browser destruction now. Do it asynchronously
|
// No host window, so continue browser destruction now. Do it asynchronously
|
||||||
// so the call stack has a chance to unwind.
|
// so the call stack has a chance to unwind.
|
||||||
CEF_POST_TASK(CEF_UIT,
|
CEF_POST_TASK(CEF_UIT,
|
||||||
base::Bind(&AlloyBrowserHostImpl::WindowDestroyed,
|
base::Bind(&CefBrowserHostImpl::WindowDestroyed, browser_));
|
||||||
static_cast<AlloyBrowserHostImpl*>(browser_)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CefWindowHandle CefBrowserPlatformDelegateBackground::GetHostWindowHandle()
|
CefWindowHandle CefBrowserPlatformDelegateBackground::GetHostWindowHandle()
|
||||||
@@ -118,6 +115,14 @@ CefBrowserPlatformDelegateBackground::CreateMenuRunner() {
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CefBrowserPlatformDelegateBackground::IsWindowless() const {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CefBrowserPlatformDelegateBackground::IsViewsHosted() const {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
CefWindowHandle CefBrowserPlatformDelegateBackground::GetParentWindowHandle()
|
CefWindowHandle CefBrowserPlatformDelegateBackground::GetParentWindowHandle()
|
||||||
const {
|
const {
|
||||||
return GetHostWindowHandle();
|
return GetHostWindowHandle();
|
||||||
|
@@ -44,6 +44,8 @@ class CefBrowserPlatformDelegateBackground
|
|||||||
std::unique_ptr<CefJavaScriptDialogRunner> CreateJavaScriptDialogRunner()
|
std::unique_ptr<CefJavaScriptDialogRunner> CreateJavaScriptDialogRunner()
|
||||||
override;
|
override;
|
||||||
std::unique_ptr<CefMenuRunner> CreateMenuRunner() override;
|
std::unique_ptr<CefMenuRunner> CreateMenuRunner() override;
|
||||||
|
bool IsWindowless() const override;
|
||||||
|
bool IsViewsHosted() const override;
|
||||||
|
|
||||||
// CefBrowserPlatformDelegateNative::WindowlessHandler methods:
|
// CefBrowserPlatformDelegateNative::WindowlessHandler methods:
|
||||||
CefWindowHandle GetParentWindowHandle() const override;
|
CefWindowHandle GetParentWindowHandle() const override;
|
||||||
|
@@ -53,7 +53,6 @@ const char* const kSupportedAPIs[] = {
|
|||||||
EXTENSION_FUNCTION_NAME(cefimpl::TabsCreateFunction),
|
EXTENSION_FUNCTION_NAME(cefimpl::TabsCreateFunction),
|
||||||
EXTENSION_FUNCTION_NAME(cefimpl::TabsExecuteScriptFunction),
|
EXTENSION_FUNCTION_NAME(cefimpl::TabsExecuteScriptFunction),
|
||||||
EXTENSION_FUNCTION_NAME(cefimpl::TabsInsertCSSFunction),
|
EXTENSION_FUNCTION_NAME(cefimpl::TabsInsertCSSFunction),
|
||||||
EXTENSION_FUNCTION_NAME(cefimpl::TabsRemoveCSSFunction),
|
|
||||||
EXTENSION_FUNCTION_NAME(cefimpl::TabsSetZoomFunction),
|
EXTENSION_FUNCTION_NAME(cefimpl::TabsSetZoomFunction),
|
||||||
EXTENSION_FUNCTION_NAME(cefimpl::TabsGetZoomFunction),
|
EXTENSION_FUNCTION_NAME(cefimpl::TabsGetZoomFunction),
|
||||||
EXTENSION_FUNCTION_NAME(cefimpl::TabsSetZoomSettingsFunction),
|
EXTENSION_FUNCTION_NAME(cefimpl::TabsSetZoomSettingsFunction),
|
||||||
@@ -92,7 +91,6 @@ void ChromeFunctionRegistry::RegisterAll(ExtensionFunctionRegistry* registry) {
|
|||||||
registry->RegisterFunction<StorageStorageAreaGetBytesInUseFunction>();
|
registry->RegisterFunction<StorageStorageAreaGetBytesInUseFunction>();
|
||||||
registry->RegisterFunction<cefimpl::TabsExecuteScriptFunction>();
|
registry->RegisterFunction<cefimpl::TabsExecuteScriptFunction>();
|
||||||
registry->RegisterFunction<cefimpl::TabsInsertCSSFunction>();
|
registry->RegisterFunction<cefimpl::TabsInsertCSSFunction>();
|
||||||
registry->RegisterFunction<cefimpl::TabsRemoveCSSFunction>();
|
|
||||||
registry->RegisterFunction<cefimpl::TabsGetFunction>();
|
registry->RegisterFunction<cefimpl::TabsGetFunction>();
|
||||||
registry->RegisterFunction<cefimpl::TabsCreateFunction>();
|
registry->RegisterFunction<cefimpl::TabsCreateFunction>();
|
||||||
registry->RegisterFunction<cefimpl::TabsSetZoomFunction>();
|
registry->RegisterFunction<cefimpl::TabsSetZoomFunction>();
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#include "libcef/browser/extensions/extension_background_host.h"
|
#include "libcef/browser/extensions/extension_background_host.h"
|
||||||
|
|
||||||
#include "libcef/browser/alloy/alloy_browser_host_impl.h"
|
#include "libcef/browser/browser_host_impl.h"
|
||||||
#include "libcef/browser/extensions/extension_host_delegate.h"
|
#include "libcef/browser/extensions/extension_host_delegate.h"
|
||||||
|
|
||||||
#include "base/callback.h"
|
#include "base/callback.h"
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
namespace extensions {
|
namespace extensions {
|
||||||
|
|
||||||
CefExtensionBackgroundHost::CefExtensionBackgroundHost(
|
CefExtensionBackgroundHost::CefExtensionBackgroundHost(
|
||||||
AlloyBrowserHostImpl* browser,
|
CefBrowserHostImpl* browser,
|
||||||
base::OnceClosure deleted_callback,
|
base::OnceClosure deleted_callback,
|
||||||
const Extension* extension,
|
const Extension* extension,
|
||||||
content::WebContents* host_contents,
|
content::WebContents* host_contents,
|
||||||
|
@@ -11,7 +11,7 @@
|
|||||||
#include "base/macros.h"
|
#include "base/macros.h"
|
||||||
#include "extensions/browser/extension_host.h"
|
#include "extensions/browser/extension_host.h"
|
||||||
|
|
||||||
class AlloyBrowserHostImpl;
|
class CefBrowserHostImpl;
|
||||||
|
|
||||||
namespace content {
|
namespace content {
|
||||||
class WebContents;
|
class WebContents;
|
||||||
@@ -24,7 +24,7 @@ namespace extensions {
|
|||||||
// is managed by ProcessManager.
|
// is managed by ProcessManager.
|
||||||
class CefExtensionBackgroundHost : public ExtensionHost {
|
class CefExtensionBackgroundHost : public ExtensionHost {
|
||||||
public:
|
public:
|
||||||
CefExtensionBackgroundHost(AlloyBrowserHostImpl* browser,
|
CefExtensionBackgroundHost(CefBrowserHostImpl* browser,
|
||||||
base::OnceClosure deleted_callback,
|
base::OnceClosure deleted_callback,
|
||||||
const Extension* extension,
|
const Extension* extension,
|
||||||
content::WebContents* host_contents,
|
content::WebContents* host_contents,
|
||||||
|
@@ -143,18 +143,18 @@ Profile* CefExtensionFunctionDetails::GetProfile() const {
|
|||||||
return Profile::FromBrowserContext(function_->browser_context());
|
return Profile::FromBrowserContext(function_->browser_context());
|
||||||
}
|
}
|
||||||
|
|
||||||
CefRefPtr<AlloyBrowserHostImpl> CefExtensionFunctionDetails::GetSenderBrowser()
|
CefRefPtr<CefBrowserHostImpl> CefExtensionFunctionDetails::GetSenderBrowser()
|
||||||
const {
|
const {
|
||||||
content::WebContents* web_contents = function_->GetSenderWebContents();
|
content::WebContents* web_contents = function_->GetSenderWebContents();
|
||||||
if (web_contents)
|
if (web_contents)
|
||||||
return AlloyBrowserHostImpl::GetBrowserForContents(web_contents);
|
return CefBrowserHostImpl::GetBrowserForContents(web_contents);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
CefRefPtr<AlloyBrowserHostImpl> CefExtensionFunctionDetails::GetCurrentBrowser()
|
CefRefPtr<CefBrowserHostImpl> CefExtensionFunctionDetails::GetCurrentBrowser()
|
||||||
const {
|
const {
|
||||||
// Start with the browser hosting the extension.
|
// Start with the browser hosting the extension.
|
||||||
CefRefPtr<AlloyBrowserHostImpl> browser = GetSenderBrowser();
|
CefRefPtr<CefBrowserHostImpl> browser = GetSenderBrowser();
|
||||||
if (browser && browser->client()) {
|
if (browser && browser->client()) {
|
||||||
CefRefPtr<CefExtensionHandler> handler = GetCefExtension()->GetHandler();
|
CefRefPtr<CefExtensionHandler> handler = GetCefExtension()->GetHandler();
|
||||||
if (handler) {
|
if (handler) {
|
||||||
@@ -163,8 +163,8 @@ CefRefPtr<AlloyBrowserHostImpl> CefExtensionFunctionDetails::GetCurrentBrowser()
|
|||||||
handler->GetActiveBrowser(GetCefExtension(), browser.get(),
|
handler->GetActiveBrowser(GetCefExtension(), browser.get(),
|
||||||
function_->include_incognito_information());
|
function_->include_incognito_information());
|
||||||
if (active_browser && active_browser != browser) {
|
if (active_browser && active_browser != browser) {
|
||||||
CefRefPtr<AlloyBrowserHostImpl> active_browser_impl =
|
CefRefPtr<CefBrowserHostImpl> active_browser_impl =
|
||||||
static_cast<AlloyBrowserHostImpl*>(active_browser.get());
|
static_cast<CefBrowserHostImpl*>(active_browser.get());
|
||||||
|
|
||||||
// Make sure we're operating in the same CefBrowserContext.
|
// Make sure we're operating in the same CefBrowserContext.
|
||||||
if (CefBrowserContext::FromBrowserContext(
|
if (CefBrowserContext::FromBrowserContext(
|
||||||
@@ -187,11 +187,11 @@ CefRefPtr<AlloyBrowserHostImpl> CefExtensionFunctionDetails::GetCurrentBrowser()
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool CefExtensionFunctionDetails::CanAccessBrowser(
|
bool CefExtensionFunctionDetails::CanAccessBrowser(
|
||||||
CefRefPtr<AlloyBrowserHostImpl> target) const {
|
CefRefPtr<CefBrowserHostImpl> target) const {
|
||||||
DCHECK(target);
|
DCHECK(target);
|
||||||
|
|
||||||
// Start with the browser hosting the extension.
|
// Start with the browser hosting the extension.
|
||||||
CefRefPtr<AlloyBrowserHostImpl> browser = GetSenderBrowser();
|
CefRefPtr<CefBrowserHostImpl> browser = GetSenderBrowser();
|
||||||
if (browser == target) {
|
if (browser == target) {
|
||||||
// A sender can always access itself.
|
// A sender can always access itself.
|
||||||
return true;
|
return true;
|
||||||
@@ -210,14 +210,14 @@ bool CefExtensionFunctionDetails::CanAccessBrowser(
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
CefRefPtr<AlloyBrowserHostImpl>
|
CefRefPtr<CefBrowserHostImpl>
|
||||||
CefExtensionFunctionDetails::GetBrowserForTabIdFirstTime(
|
CefExtensionFunctionDetails::GetBrowserForTabIdFirstTime(
|
||||||
int tab_id,
|
int tab_id,
|
||||||
std::string* error_message) const {
|
std::string* error_message) const {
|
||||||
DCHECK(!get_browser_called_first_time_);
|
DCHECK(!get_browser_called_first_time_);
|
||||||
get_browser_called_first_time_ = true;
|
get_browser_called_first_time_ = true;
|
||||||
|
|
||||||
CefRefPtr<AlloyBrowserHostImpl> browser;
|
CefRefPtr<CefBrowserHostImpl> browser;
|
||||||
|
|
||||||
if (tab_id >= 0) {
|
if (tab_id >= 0) {
|
||||||
// May be an invalid tabId or in the wrong BrowserContext.
|
// May be an invalid tabId or in the wrong BrowserContext.
|
||||||
@@ -243,7 +243,7 @@ CefExtensionFunctionDetails::GetBrowserForTabIdFirstTime(
|
|||||||
return browser;
|
return browser;
|
||||||
}
|
}
|
||||||
|
|
||||||
CefRefPtr<AlloyBrowserHostImpl>
|
CefRefPtr<CefBrowserHostImpl>
|
||||||
CefExtensionFunctionDetails::GetBrowserForTabIdAgain(
|
CefExtensionFunctionDetails::GetBrowserForTabIdAgain(
|
||||||
int tab_id,
|
int tab_id,
|
||||||
std::string* error_message) const {
|
std::string* error_message) const {
|
||||||
@@ -251,7 +251,7 @@ CefExtensionFunctionDetails::GetBrowserForTabIdAgain(
|
|||||||
DCHECK(get_browser_called_first_time_);
|
DCHECK(get_browser_called_first_time_);
|
||||||
|
|
||||||
// May return NULL during shutdown.
|
// May return NULL during shutdown.
|
||||||
CefRefPtr<AlloyBrowserHostImpl> browser =
|
CefRefPtr<CefBrowserHostImpl> browser =
|
||||||
GetBrowserForTabId(tab_id, function_->browser_context());
|
GetBrowserForTabId(tab_id, function_->browser_context());
|
||||||
if (!browser || !browser->web_contents()) {
|
if (!browser || !browser->web_contents()) {
|
||||||
if (error_message) {
|
if (error_message) {
|
||||||
@@ -265,7 +265,7 @@ CefExtensionFunctionDetails::GetBrowserForTabIdAgain(
|
|||||||
bool CefExtensionFunctionDetails::LoadFile(const std::string& file,
|
bool CefExtensionFunctionDetails::LoadFile(const std::string& file,
|
||||||
LoadFileCallback callback) const {
|
LoadFileCallback callback) const {
|
||||||
// Start with the browser hosting the extension.
|
// Start with the browser hosting the extension.
|
||||||
CefRefPtr<AlloyBrowserHostImpl> browser = GetSenderBrowser();
|
CefRefPtr<CefBrowserHostImpl> browser = GetSenderBrowser();
|
||||||
if (browser && browser->client()) {
|
if (browser && browser->client()) {
|
||||||
CefRefPtr<CefExtensionHandler> handler = GetCefExtension()->GetHandler();
|
CefRefPtr<CefExtensionHandler> handler = GetCefExtension()->GetHandler();
|
||||||
if (handler) {
|
if (handler) {
|
||||||
@@ -290,7 +290,7 @@ base::DictionaryValue* CefExtensionFunctionDetails::OpenTab(
|
|||||||
const OpenTabParams& params,
|
const OpenTabParams& params,
|
||||||
bool user_gesture,
|
bool user_gesture,
|
||||||
std::string* error_message) const {
|
std::string* error_message) const {
|
||||||
CefRefPtr<AlloyBrowserHostImpl> sender_browser = GetSenderBrowser();
|
CefRefPtr<CefBrowserHostImpl> sender_browser = GetSenderBrowser();
|
||||||
if (!sender_browser)
|
if (!sender_browser)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
@@ -301,7 +301,7 @@ base::DictionaryValue* CefExtensionFunctionDetails::OpenTab(
|
|||||||
|
|
||||||
// CEF doesn't have the concept of windows containing tab strips so we'll
|
// CEF doesn't have the concept of windows containing tab strips so we'll
|
||||||
// select an "active browser" for BrowserContext sharing instead.
|
// select an "active browser" for BrowserContext sharing instead.
|
||||||
CefRefPtr<AlloyBrowserHostImpl> active_browser =
|
CefRefPtr<CefBrowserHostImpl> active_browser =
|
||||||
GetBrowserForTabIdFirstTime(window_id, error_message);
|
GetBrowserForTabIdFirstTime(window_id, error_message);
|
||||||
if (!active_browser)
|
if (!active_browser)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@@ -365,7 +365,7 @@ base::DictionaryValue* CefExtensionFunctionDetails::OpenTab(
|
|||||||
if (!request_context)
|
if (!request_context)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
CefBrowserCreateParams create_params;
|
CefBrowserHostImpl::CreateParams create_params;
|
||||||
create_params.url = url;
|
create_params.url = url;
|
||||||
create_params.request_context = request_context;
|
create_params.request_context = request_context;
|
||||||
create_params.window_info.reset(new CefWindowInfo);
|
create_params.window_info.reset(new CefWindowInfo);
|
||||||
@@ -394,8 +394,8 @@ base::DictionaryValue* CefExtensionFunctionDetails::OpenTab(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Browser creation may fail under certain rare circumstances.
|
// Browser creation may fail under certain rare circumstances.
|
||||||
CefRefPtr<AlloyBrowserHostImpl> new_browser =
|
CefRefPtr<CefBrowserHostImpl> new_browser =
|
||||||
AlloyBrowserHostImpl::Create(create_params);
|
CefBrowserHostImpl::Create(create_params);
|
||||||
if (!new_browser)
|
if (!new_browser)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
@@ -412,7 +412,7 @@ base::DictionaryValue* CefExtensionFunctionDetails::OpenTab(
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<api::tabs::Tab> CefExtensionFunctionDetails::CreateTabObject(
|
std::unique_ptr<api::tabs::Tab> CefExtensionFunctionDetails::CreateTabObject(
|
||||||
CefRefPtr<AlloyBrowserHostImpl> new_browser,
|
CefRefPtr<CefBrowserHostImpl> new_browser,
|
||||||
int opener_browser_id,
|
int opener_browser_id,
|
||||||
bool active,
|
bool active,
|
||||||
int index) const {
|
int index) const {
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
#ifndef CEF_LIBCEF_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_DETAILS_H_
|
#ifndef CEF_LIBCEF_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_DETAILS_H_
|
||||||
#define CEF_LIBCEF_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_DETAILS_H_
|
#define CEF_LIBCEF_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_DETAILS_H_
|
||||||
|
|
||||||
#include "libcef/browser/alloy/alloy_browser_host_impl.h"
|
#include "libcef/browser/browser_host_impl.h"
|
||||||
|
|
||||||
#include "include/cef_extension.h"
|
#include "include/cef_extension.h"
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ class CefExtensionFunctionDetails {
|
|||||||
|
|
||||||
// Get the "sender" browser that is hosting the extension. May return NULL
|
// Get the "sender" browser that is hosting the extension. May return NULL
|
||||||
// during startup/shutdown.
|
// during startup/shutdown.
|
||||||
CefRefPtr<AlloyBrowserHostImpl> GetSenderBrowser() const;
|
CefRefPtr<CefBrowserHostImpl> GetSenderBrowser() const;
|
||||||
|
|
||||||
// Get the "current" browser that will be acted on by this extension function,
|
// Get the "current" browser that will be acted on by this extension function,
|
||||||
// if any. When mapping from a tabId use the GetBrowserForTabId* methods
|
// if any. When mapping from a tabId use the GetBrowserForTabId* methods
|
||||||
@@ -57,12 +57,12 @@ class CefExtensionFunctionDetails {
|
|||||||
// This method can return NULL if there is no matching browser, which can
|
// This method can return NULL if there is no matching browser, which can
|
||||||
// happen if only incognito windows are open, or early in startup or shutdown
|
// happen if only incognito windows are open, or early in startup or shutdown
|
||||||
// shutdown when there are no active windows.
|
// shutdown when there are no active windows.
|
||||||
CefRefPtr<AlloyBrowserHostImpl> GetCurrentBrowser() const;
|
CefRefPtr<CefBrowserHostImpl> GetCurrentBrowser() const;
|
||||||
|
|
||||||
// Returns true if the sender browser can access |target|. When mapping from a
|
// Returns true if the sender browser can access |target|. When mapping from a
|
||||||
// tabId use the GetBrowserForTabId* methods instead of calling this method
|
// tabId use the GetBrowserForTabId* methods instead of calling this method
|
||||||
// directly.
|
// directly.
|
||||||
bool CanAccessBrowser(CefRefPtr<AlloyBrowserHostImpl> target) const;
|
bool CanAccessBrowser(CefRefPtr<CefBrowserHostImpl> target) const;
|
||||||
|
|
||||||
// Returns the browser matching |tab_id| or NULL if the browser cannot be
|
// Returns the browser matching |tab_id| or NULL if the browser cannot be
|
||||||
// found or does not have a WebContents. If |tab_id| is < 0 the "current"
|
// found or does not have a WebContents. If |tab_id| is < 0 the "current"
|
||||||
@@ -70,7 +70,7 @@ class CefExtensionFunctionDetails {
|
|||||||
// will be set with an appropriate message on error. This method should only
|
// will be set with an appropriate message on error. This method should only
|
||||||
// be called one time per extension function and will check all necessary
|
// be called one time per extension function and will check all necessary
|
||||||
// client permissions.
|
// client permissions.
|
||||||
CefRefPtr<AlloyBrowserHostImpl> GetBrowserForTabIdFirstTime(
|
CefRefPtr<CefBrowserHostImpl> GetBrowserForTabIdFirstTime(
|
||||||
int tab_id,
|
int tab_id,
|
||||||
std::string* error_message) const;
|
std::string* error_message) const;
|
||||||
|
|
||||||
@@ -79,7 +79,7 @@ class CefExtensionFunctionDetails {
|
|||||||
// |error_message| can optionally be passed in and will be set with an
|
// |error_message| can optionally be passed in and will be set with an
|
||||||
// appropriate message on error. This method should be called only after
|
// appropriate message on error. This method should be called only after
|
||||||
// GetBrowserForTabIdFirstTime() has succeeded for the same |tab_id|.
|
// GetBrowserForTabIdFirstTime() has succeeded for the same |tab_id|.
|
||||||
CefRefPtr<AlloyBrowserHostImpl> GetBrowserForTabIdAgain(
|
CefRefPtr<CefBrowserHostImpl> GetBrowserForTabIdAgain(
|
||||||
int tab_id,
|
int tab_id,
|
||||||
std::string* error_message) const;
|
std::string* error_message) const;
|
||||||
|
|
||||||
@@ -114,7 +114,7 @@ class CefExtensionFunctionDetails {
|
|||||||
// permissions of the extension, the object may or may not include sensitive
|
// permissions of the extension, the object may or may not include sensitive
|
||||||
// data such as the tab's URL.
|
// data such as the tab's URL.
|
||||||
std::unique_ptr<api::tabs::Tab> CreateTabObject(
|
std::unique_ptr<api::tabs::Tab> CreateTabObject(
|
||||||
CefRefPtr<AlloyBrowserHostImpl> new_browser,
|
CefRefPtr<CefBrowserHostImpl> new_browser,
|
||||||
int opener_browser_id,
|
int opener_browser_id,
|
||||||
bool active,
|
bool active,
|
||||||
int index) const;
|
int index) const;
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user