mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Compare commits
25 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
ebf5d6ab43 | ||
|
491d2383ef | ||
|
4eb0508671 | ||
|
49cae3707a | ||
|
3215aaebef | ||
|
1b83ff6471 | ||
|
870da3087f | ||
|
f6de0344cb | ||
|
6926287894 | ||
|
0d4c466645 | ||
|
1b930decca | ||
|
80b61f0417 | ||
|
a7a5eee369 | ||
|
e9397c53ff | ||
|
eb023d18e0 | ||
|
f98481d327 | ||
|
0d82c3ffc0 | ||
|
fb44f128e9 | ||
|
565ad7bb99 | ||
|
d4c8104ca8 | ||
|
b7ba0b9a66 | ||
|
719fe7691b | ||
|
82dc13a870 | ||
|
371f7f3409 | ||
|
01fe00c6fd |
4
BUILD.gn
4
BUILD.gn
@@ -1145,6 +1145,10 @@ source_set("libcef_static") {
|
|||||||
"libcef/browser/native/menu_runner_mac.mm",
|
"libcef/browser/native/menu_runner_mac.mm",
|
||||||
"libcef/browser/osr/browser_platform_delegate_osr_mac.h",
|
"libcef/browser/osr/browser_platform_delegate_osr_mac.h",
|
||||||
"libcef/browser/osr/browser_platform_delegate_osr_mac.mm",
|
"libcef/browser/osr/browser_platform_delegate_osr_mac.mm",
|
||||||
|
"libcef/browser/views/native_widget_mac.h",
|
||||||
|
"libcef/browser/views/native_widget_mac.mm",
|
||||||
|
"libcef/browser/views/ns_window.h",
|
||||||
|
"libcef/browser/views/ns_window.mm",
|
||||||
"libcef/browser/views/view_util_mac.mm",
|
"libcef/browser/views/view_util_mac.mm",
|
||||||
"libcef/common/util_mac.h",
|
"libcef/common/util_mac.h",
|
||||||
"libcef/common/util_mac.mm",
|
"libcef/common/util_mac.mm",
|
||||||
|
@@ -7,5 +7,6 @@
|
|||||||
# https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding
|
# https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding
|
||||||
|
|
||||||
{
|
{
|
||||||
'chromium_checkout': 'refs/tags/111.0.5563.0'
|
'chromium_checkout': 'refs/tags/111.0.5563.148',
|
||||||
|
'depot_tools_checkout': '963e01c76c'
|
||||||
}
|
}
|
||||||
|
@@ -9,6 +9,7 @@ The Chromium Embedded Framework (CEF) is a simple framework for embedding Chromi
|
|||||||
* Branches and Building - https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding
|
* Branches and Building - https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding
|
||||||
* Announcements - https://groups.google.com/forum/#!forum/cef-announce
|
* Announcements - https://groups.google.com/forum/#!forum/cef-announce
|
||||||
* Support Forum - http://www.magpcss.org/ceforum/
|
* Support Forum - http://www.magpcss.org/ceforum/
|
||||||
|
* Issue Tracker - https://github.com/chromiumembedded/cef/issues
|
||||||
* C++ API Docs - [Stable release docs](https://cef-builds.spotifycdn.com/docs/stable.html) / [Beta release docs](https://cef-builds.spotifycdn.com/docs/beta.html)
|
* C++ API Docs - [Stable release docs](https://cef-builds.spotifycdn.com/docs/stable.html) / [Beta release docs](https://cef-builds.spotifycdn.com/docs/beta.html)
|
||||||
* Downloads - https://cef-builds.spotifycdn.com/index.html
|
* Downloads - https://cef-builds.spotifycdn.com/index.html
|
||||||
* Donations - http://www.magpcss.org/ceforum/donate.php
|
* Donations - http://www.magpcss.org/ceforum/donate.php
|
||||||
@@ -57,7 +58,7 @@ If you're the maintainer of a project not listed above and would like your proje
|
|||||||
|
|
||||||
CEF is still very much a work in progress. Some ways that you can help out:
|
CEF is still very much a work in progress. Some ways that you can help out:
|
||||||
|
|
||||||
\- Vote for issues in the [CEF issue tracker](https://bitbucket.org/chromiumembedded/cef/issues?status=new&status=open) that are important to you. This helps with development prioritization.
|
\- Vote for issues in the [CEF issue tracker](https://github.com/chromiumembedded/cef/issues) that are important to you. This helps with development prioritization.
|
||||||
|
|
||||||
\- Report any bugs that you find or feature requests that are important to you. Make sure to first search for existing issues before creating new ones. Please use the [CEF Forum](http://magpcss.org/ceforum) and not the issue tracker for usage questions. Each CEF issue should:
|
\- Report any bugs that you find or feature requests that are important to you. Make sure to first search for existing issues before creating new ones. Please use the [CEF Forum](http://magpcss.org/ceforum) and not the issue tracker for usage questions. Each CEF issue should:
|
||||||
|
|
||||||
@@ -68,7 +69,7 @@ CEF is still very much a work in progress. Some ways that you can help out:
|
|||||||
|
|
||||||
\- Write unit tests for new or existing functionality.
|
\- Write unit tests for new or existing functionality.
|
||||||
|
|
||||||
\- Pull requests and patches are welcome. View open issues in the [CEF issue tracker](https://bitbucket.org/chromiumembedded/cef/issues?status=new&status=open) or search for TODO(cef) in the source code for ideas.
|
\- Pull requests and patches are welcome. View open issues in the [CEF issue tracker](https://github.com/chromiumembedded/cef/issues) or search for TODO(cef) in the source code for ideas.
|
||||||
|
|
||||||
If you would like to contribute source code changes to CEF please follow the below guidelines:
|
If you would like to contribute source code changes to CEF please follow the below guidelines:
|
||||||
|
|
||||||
|
@@ -237,6 +237,8 @@
|
|||||||
'tests/cefclient/browser/client_prefs.cc',
|
'tests/cefclient/browser/client_prefs.cc',
|
||||||
'tests/cefclient/browser/client_prefs.h',
|
'tests/cefclient/browser/client_prefs.h',
|
||||||
'tests/cefclient/browser/client_types.h',
|
'tests/cefclient/browser/client_types.h',
|
||||||
|
'tests/cefclient/browser/default_client_handler.cc',
|
||||||
|
'tests/cefclient/browser/default_client_handler.h',
|
||||||
'tests/cefclient/browser/dialog_test.cc',
|
'tests/cefclient/browser/dialog_test.cc',
|
||||||
'tests/cefclient/browser/dialog_test.h',
|
'tests/cefclient/browser/dialog_test.h',
|
||||||
'tests/cefclient/browser/image_cache.cc',
|
'tests/cefclient/browser/image_cache.cc',
|
||||||
@@ -391,6 +393,7 @@
|
|||||||
'tests/cefclient/browser/temp_window_mac.mm',
|
'tests/cefclient/browser/temp_window_mac.mm',
|
||||||
'tests/cefclient/browser/text_input_client_osr_mac.h',
|
'tests/cefclient/browser/text_input_client_osr_mac.h',
|
||||||
'tests/cefclient/browser/text_input_client_osr_mac.mm',
|
'tests/cefclient/browser/text_input_client_osr_mac.mm',
|
||||||
|
'tests/cefclient/browser/views_window_mac.mm',
|
||||||
'tests/cefclient/browser/window_test_runner_mac.h',
|
'tests/cefclient/browser/window_test_runner_mac.h',
|
||||||
'tests/cefclient/browser/window_test_runner_mac.mm',
|
'tests/cefclient/browser/window_test_runner_mac.mm',
|
||||||
'tests/cefclient/cefclient_mac.mm',
|
'tests/cefclient/cefclient_mac.mm',
|
||||||
|
@@ -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=019abf16be4e151d31181a6bdcb1ad8dfef03d00$
|
// $hash=9f0389a439e6787282880d53375369829adb6a3d$
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_WINDOW_DELEGATE_CAPI_H_
|
#ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_WINDOW_DELEGATE_CAPI_H_
|
||||||
@@ -137,6 +137,25 @@ typedef struct _cef_window_delegate_t {
|
|||||||
int(CEF_CALLBACK* is_frameless)(struct _cef_window_delegate_t* self,
|
int(CEF_CALLBACK* is_frameless)(struct _cef_window_delegate_t* self,
|
||||||
struct _cef_window_t* window);
|
struct _cef_window_t* window);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Return true (1) if |window| should be created with standard window buttons
|
||||||
|
/// like close, minimize and zoom.
|
||||||
|
///
|
||||||
|
int(CEF_CALLBACK* with_standard_window_buttons)(
|
||||||
|
struct _cef_window_delegate_t* self,
|
||||||
|
struct _cef_window_t* window);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Return whether the titlebar height should be overridden, and sets the
|
||||||
|
/// height of the titlebar in |titlebar_height|. On macOS, it can also be used
|
||||||
|
/// to adjust the vertical position of the traffic light buttons in frameless
|
||||||
|
/// windows. The buttons will be positioned halfway down the titlebar at a
|
||||||
|
/// height of |titlebar_height| / 2.
|
||||||
|
///
|
||||||
|
int(CEF_CALLBACK* get_titlebar_height)(struct _cef_window_delegate_t* self,
|
||||||
|
struct _cef_window_t* window,
|
||||||
|
float* titlebar_height);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Return true (1) if |window| can be resized.
|
/// Return true (1) if |window| can be resized.
|
||||||
///
|
///
|
||||||
|
@@ -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 "ec5797fa2a4dabdcf61183905db6b8ff2b79f9f0"
|
#define CEF_API_HASH_UNIVERSAL "1d8347d8e06dc0dd17f882ca253e1c7bf43d5863"
|
||||||
#if defined(OS_WIN)
|
#if defined(OS_WIN)
|
||||||
#define CEF_API_HASH_PLATFORM "011499a93a394bf5fa92ebf0047de5ee1a4e5841"
|
#define CEF_API_HASH_PLATFORM "b6865f1992a10dcefc0bbc450cf296b648003271"
|
||||||
#elif defined(OS_MAC)
|
#elif defined(OS_MAC)
|
||||||
#define CEF_API_HASH_PLATFORM "8f276dfddb7341168f9ce0f705df212f08e2f08c"
|
#define CEF_API_HASH_PLATFORM "d04c2a5ab471493c185eb7c7aa894bc4a79d5a7c"
|
||||||
#elif defined(OS_LINUX)
|
#elif defined(OS_LINUX)
|
||||||
#define CEF_API_HASH_PLATFORM "3c239fa16f5a3f9f452b185c750c7145fc305274"
|
#define CEF_API_HASH_PLATFORM "d7d4cbffa4a798fea97e7b9f3610b5cb803d949e"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@@ -122,7 +122,7 @@ CEF_EXPORT int cef_time_now(cef_time_t* cef_time);
|
|||||||
///
|
///
|
||||||
/// Retrieve the current system time.
|
/// Retrieve the current system time.
|
||||||
///
|
///
|
||||||
CEF_EXPORT cef_basetime_t cef_basetime_now();
|
CEF_EXPORT cef_basetime_t cef_basetime_now(void);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Retrieve the delta in milliseconds between two time values. Returns true (1)
|
/// Retrieve the delta in milliseconds between two time values. Returns true (1)
|
||||||
|
@@ -81,7 +81,7 @@ class CefBrowserViewDelegate : public CefViewDelegate {
|
|||||||
/// popup will be a DevTools browser. Return the delegate that will be used
|
/// popup will be a DevTools browser. Return the delegate that will be used
|
||||||
/// for the new popup BrowserView.
|
/// for the new popup BrowserView.
|
||||||
///
|
///
|
||||||
/*--cef()--*/
|
/*--cef(optional_param=client)--*/
|
||||||
virtual CefRefPtr<CefBrowserViewDelegate> GetDelegateForPopupBrowserView(
|
virtual CefRefPtr<CefBrowserViewDelegate> GetDelegateForPopupBrowserView(
|
||||||
CefRefPtr<CefBrowserView> browser_view,
|
CefRefPtr<CefBrowserView> browser_view,
|
||||||
const CefBrowserSettings& settings,
|
const CefBrowserSettings& settings,
|
||||||
|
@@ -128,6 +128,29 @@ class CefWindowDelegate : public CefPanelDelegate {
|
|||||||
/*--cef()--*/
|
/*--cef()--*/
|
||||||
virtual bool IsFrameless(CefRefPtr<CefWindow> window) { return false; }
|
virtual bool IsFrameless(CefRefPtr<CefWindow> window) { return false; }
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Return true if |window| should be created with standard window buttons
|
||||||
|
/// like close, minimize and zoom.
|
||||||
|
///
|
||||||
|
/*--cef()--*/
|
||||||
|
virtual bool WithStandardWindowButtons(CefRefPtr<CefWindow> window) {
|
||||||
|
return !IsFrameless(window);
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Return whether the titlebar height should be overridden,
|
||||||
|
/// and sets the height of the titlebar in |titlebar_height|.
|
||||||
|
/// On macOS, it can also be used to adjust the vertical position
|
||||||
|
/// of the traffic light buttons in frameless windows.
|
||||||
|
/// The buttons will be positioned halfway down the titlebar
|
||||||
|
/// at a height of |titlebar_height| / 2.
|
||||||
|
///
|
||||||
|
/*--cef()--*/
|
||||||
|
virtual bool GetTitlebarHeight(CefRefPtr<CefWindow> window,
|
||||||
|
float* titlebar_height) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Return true if |window| can be resized.
|
/// Return true if |window| can be resized.
|
||||||
///
|
///
|
||||||
|
@@ -1227,7 +1227,7 @@ void AlloyBrowserHostImpl::WebContentsCreated(
|
|||||||
target_url,
|
target_url,
|
||||||
frame_util::MakeGlobalId(opener_render_process_id,
|
frame_util::MakeGlobalId(opener_render_process_id,
|
||||||
opener_render_frame_id),
|
opener_render_frame_id),
|
||||||
settings, client, platform_delegate, extra_info);
|
settings, client, platform_delegate, extra_info, new_contents);
|
||||||
|
|
||||||
scoped_refptr<CefBrowserInfo> info =
|
scoped_refptr<CefBrowserInfo> info =
|
||||||
CefBrowserInfoManager::GetInstance()->CreatePopupBrowserInfo(
|
CefBrowserInfoManager::GetInstance()->CreatePopupBrowserInfo(
|
||||||
|
@@ -41,6 +41,7 @@
|
|||||||
#include "net/base/net_module.h"
|
#include "net/base/net_module.h"
|
||||||
#include "third_party/widevine/cdm/buildflags.h"
|
#include "third_party/widevine/cdm/buildflags.h"
|
||||||
#include "ui/base/resource/resource_bundle.h"
|
#include "ui/base/resource/resource_bundle.h"
|
||||||
|
#include "ui/native_theme/native_theme.h"
|
||||||
|
|
||||||
#if BUILDFLAG(IS_LINUX)
|
#if BUILDFLAG(IS_LINUX)
|
||||||
#include "ui/ozone/buildflags.h"
|
#include "ui/ozone/buildflags.h"
|
||||||
@@ -308,6 +309,9 @@ int AlloyBrowserMainParts::PreMainMessageLoopRun() {
|
|||||||
file_dialog_runner::RegisterFactory();
|
file_dialog_runner::RegisterFactory();
|
||||||
permission_prompt::RegisterCreateCallback();
|
permission_prompt::RegisterCreateCallback();
|
||||||
|
|
||||||
|
// Initialize theme configuration (high contrast, dark mode, etc).
|
||||||
|
ui::NativeTheme::GetInstanceForNativeUi();
|
||||||
|
|
||||||
#if BUILDFLAG(ENABLE_MEDIA_FOUNDATION_WIDEVINE_CDM) || \
|
#if BUILDFLAG(ENABLE_MEDIA_FOUNDATION_WIDEVINE_CDM) || \
|
||||||
BUILDFLAG(ENABLE_WIDEVINE_CDM_COMPONENT)
|
BUILDFLAG(ENABLE_WIDEVINE_CDM_COMPONENT)
|
||||||
const base::CommandLine* command_line =
|
const base::CommandLine* command_line =
|
||||||
|
@@ -313,8 +313,11 @@ void CefBrowserContentsDelegate::RenderFrameCreated(
|
|||||||
web_contents()->SetPageBaseBackgroundColor(SkColor());
|
web_contents()->SetPageBaseBackgroundColor(SkColor());
|
||||||
web_contents()->SetPageBaseBackgroundColor(base_background_color);
|
web_contents()->SetPageBaseBackgroundColor(base_background_color);
|
||||||
}
|
}
|
||||||
render_view_host->GetWidget()->GetView()->SetBackgroundColor(
|
if (render_view_host->GetWidget() &&
|
||||||
base_background_color);
|
render_view_host->GetWidget()->GetView()) {
|
||||||
|
render_view_host->GetWidget()->GetView()->SetBackgroundColor(
|
||||||
|
base_background_color);
|
||||||
|
}
|
||||||
|
|
||||||
platform_delegate()->RenderViewCreated(render_view_host);
|
platform_delegate()->RenderViewCreated(render_view_host);
|
||||||
}
|
}
|
||||||
|
@@ -125,6 +125,7 @@ bool CefBrowserInfoManager::CanCreateWindow(
|
|||||||
|
|
||||||
CefRefPtr<CefClient> client = browser->GetClient();
|
CefRefPtr<CefClient> client = browser->GetClient();
|
||||||
bool allow = true;
|
bool allow = true;
|
||||||
|
bool handled = false;
|
||||||
|
|
||||||
CefWindowInfo window_info;
|
CefWindowInfo window_info;
|
||||||
|
|
||||||
@@ -133,7 +134,7 @@ bool CefBrowserInfoManager::CanCreateWindow(
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
auto pending_popup = std::make_unique<CefBrowserInfoManager::PendingPopup>();
|
auto pending_popup = std::make_unique<CefBrowserInfoManager::PendingPopup>();
|
||||||
pending_popup->step = CefBrowserInfoManager::PendingPopup::CAN_CREATE_WINDOW;
|
pending_popup->step = PendingPopup::CAN_CREATE_WINDOW;
|
||||||
pending_popup->opener_global_id = opener->GetGlobalId();
|
pending_popup->opener_global_id = opener->GetGlobalId();
|
||||||
pending_popup->target_url = target_url;
|
pending_popup->target_url = target_url;
|
||||||
pending_popup->target_frame_name = frame_name;
|
pending_popup->target_frame_name = frame_name;
|
||||||
@@ -142,6 +143,11 @@ bool CefBrowserInfoManager::CanCreateWindow(
|
|||||||
pending_popup->client = client;
|
pending_popup->client = client;
|
||||||
pending_popup->settings = browser->settings();
|
pending_popup->settings = browser->settings();
|
||||||
|
|
||||||
|
// With the Chrome runtime, we want to use default popup Browser creation
|
||||||
|
// for document picture-in-picture.
|
||||||
|
pending_popup->use_default_browser_creation =
|
||||||
|
disposition == WindowOpenDisposition::NEW_PICTURE_IN_PICTURE;
|
||||||
|
|
||||||
if (client.get()) {
|
if (client.get()) {
|
||||||
CefRefPtr<CefLifeSpanHandler> handler = client->GetLifeSpanHandler();
|
CefRefPtr<CefLifeSpanHandler> handler = client->GetLifeSpanHandler();
|
||||||
if (handler.get()) {
|
if (handler.get()) {
|
||||||
@@ -172,6 +178,7 @@ bool CefBrowserInfoManager::CanCreateWindow(
|
|||||||
cef_features, window_info, pending_popup->client,
|
cef_features, window_info, pending_popup->client,
|
||||||
pending_popup->settings, pending_popup->extra_info,
|
pending_popup->settings, pending_popup->extra_info,
|
||||||
no_javascript_access);
|
no_javascript_access);
|
||||||
|
handled = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -179,14 +186,21 @@ bool CefBrowserInfoManager::CanCreateWindow(
|
|||||||
CefBrowserCreateParams create_params;
|
CefBrowserCreateParams create_params;
|
||||||
create_params.MaybeSetWindowInfo(window_info);
|
create_params.MaybeSetWindowInfo(window_info);
|
||||||
|
|
||||||
|
if (!handled) {
|
||||||
|
// Use default Browser creation if OnBeforePopup was unhandled.
|
||||||
|
// TODO(chrome): Expose a mechanism for the client to choose default
|
||||||
|
// creation.
|
||||||
|
pending_popup->use_default_browser_creation = true;
|
||||||
|
}
|
||||||
|
|
||||||
// In most cases, Views-hosted browsers should create Views-hosted popups
|
// In most cases, Views-hosted browsers should create Views-hosted popups
|
||||||
// and native browsers should use default popup handling. The one exception
|
// and native browsers should use default popup handling. With the Chrome
|
||||||
// is with the Chrome runtime where a Views-hosted browser may have an
|
// runtime, we should additionally use default handling (a) when using an
|
||||||
// external parent. In that case we want to use default popup handling even
|
// external parent and (b) when using default Browser creation.
|
||||||
// though the parent is (technically) Views-hosted.
|
|
||||||
create_params.popup_with_views_hosted_opener =
|
create_params.popup_with_views_hosted_opener =
|
||||||
browser->HasView() &&
|
browser->HasView() &&
|
||||||
!browser->platform_delegate()->HasExternalParent();
|
!browser->platform_delegate()->HasExternalParent() &&
|
||||||
|
!pending_popup->use_default_browser_creation;
|
||||||
|
|
||||||
create_params.settings = pending_popup->settings;
|
create_params.settings = pending_popup->settings;
|
||||||
create_params.client = pending_popup->client;
|
create_params.client = pending_popup->client;
|
||||||
@@ -217,9 +231,8 @@ void CefBrowserInfoManager::GetCustomWebContentsView(
|
|||||||
CEF_REQUIRE_UIT();
|
CEF_REQUIRE_UIT();
|
||||||
REQUIRE_ALLOY_RUNTIME();
|
REQUIRE_ALLOY_RUNTIME();
|
||||||
|
|
||||||
std::unique_ptr<CefBrowserInfoManager::PendingPopup> pending_popup =
|
auto pending_popup = PopPendingPopup(PendingPopup::CAN_CREATE_WINDOW,
|
||||||
PopPendingPopup(CefBrowserInfoManager::PendingPopup::CAN_CREATE_WINDOW,
|
opener_global_id, target_url);
|
||||||
opener_global_id, target_url);
|
|
||||||
DCHECK(pending_popup.get());
|
DCHECK(pending_popup.get());
|
||||||
DCHECK(pending_popup->platform_delegate.get());
|
DCHECK(pending_popup->platform_delegate.get());
|
||||||
|
|
||||||
@@ -228,8 +241,7 @@ void CefBrowserInfoManager::GetCustomWebContentsView(
|
|||||||
delegate_view);
|
delegate_view);
|
||||||
}
|
}
|
||||||
|
|
||||||
pending_popup->step =
|
pending_popup->step = PendingPopup::GET_CUSTOM_WEB_CONTENTS_VIEW;
|
||||||
CefBrowserInfoManager::PendingPopup::GET_CUSTOM_WEB_CONTENTS_VIEW;
|
|
||||||
PushPendingPopup(std::move(pending_popup));
|
PushPendingPopup(std::move(pending_popup));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -239,16 +251,16 @@ void CefBrowserInfoManager::WebContentsCreated(
|
|||||||
CefBrowserSettings& settings,
|
CefBrowserSettings& settings,
|
||||||
CefRefPtr<CefClient>& client,
|
CefRefPtr<CefClient>& client,
|
||||||
std::unique_ptr<CefBrowserPlatformDelegate>& platform_delegate,
|
std::unique_ptr<CefBrowserPlatformDelegate>& platform_delegate,
|
||||||
CefRefPtr<CefDictionaryValue>& extra_info) {
|
CefRefPtr<CefDictionaryValue>& extra_info,
|
||||||
|
content::WebContents* new_contents) {
|
||||||
CEF_REQUIRE_UIT();
|
CEF_REQUIRE_UIT();
|
||||||
|
|
||||||
// GET_CUSTOM_WEB_CONTENTS_VIEW is only used with the alloy runtime.
|
// GET_CUSTOM_WEB_CONTENTS_VIEW is only used with the alloy runtime.
|
||||||
const auto previous_step =
|
const auto previous_step = cef::IsAlloyRuntimeEnabled()
|
||||||
cef::IsAlloyRuntimeEnabled()
|
? PendingPopup::GET_CUSTOM_WEB_CONTENTS_VIEW
|
||||||
? CefBrowserInfoManager::PendingPopup::GET_CUSTOM_WEB_CONTENTS_VIEW
|
: PendingPopup::CAN_CREATE_WINDOW;
|
||||||
: CefBrowserInfoManager::PendingPopup::CAN_CREATE_WINDOW;
|
|
||||||
|
|
||||||
std::unique_ptr<CefBrowserInfoManager::PendingPopup> pending_popup =
|
auto pending_popup =
|
||||||
PopPendingPopup(previous_step, opener_global_id, target_url);
|
PopPendingPopup(previous_step, opener_global_id, target_url);
|
||||||
DCHECK(pending_popup.get());
|
DCHECK(pending_popup.get());
|
||||||
DCHECK(pending_popup->platform_delegate.get());
|
DCHECK(pending_popup->platform_delegate.get());
|
||||||
@@ -257,6 +269,30 @@ void CefBrowserInfoManager::WebContentsCreated(
|
|||||||
client = pending_popup->client;
|
client = pending_popup->client;
|
||||||
platform_delegate = std::move(pending_popup->platform_delegate);
|
platform_delegate = std::move(pending_popup->platform_delegate);
|
||||||
extra_info = pending_popup->extra_info;
|
extra_info = pending_popup->extra_info;
|
||||||
|
|
||||||
|
// AddWebContents (the next step) is only used with the Chrome runtime.
|
||||||
|
if (cef::IsChromeRuntimeEnabled()) {
|
||||||
|
pending_popup->step = PendingPopup::WEB_CONTENTS_CREATED;
|
||||||
|
pending_popup->new_contents = new_contents;
|
||||||
|
PushPendingPopup(std::move(pending_popup));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CefBrowserInfoManager::AddWebContents(content::WebContents* new_contents) {
|
||||||
|
CEF_REQUIRE_UIT();
|
||||||
|
DCHECK(cef::IsChromeRuntimeEnabled());
|
||||||
|
|
||||||
|
// Pending popup information may be missing in cases where
|
||||||
|
// chrome::AddWebContents is called directly from the Chrome UI (profile
|
||||||
|
// settings, etc).
|
||||||
|
auto pending_popup =
|
||||||
|
PopPendingPopup(PendingPopup::WEB_CONTENTS_CREATED, new_contents);
|
||||||
|
if (pending_popup) {
|
||||||
|
return !pending_popup->use_default_browser_creation;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Proceed with default handling.
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CefBrowserInfoManager::OnGetNewBrowserInfo(
|
void CefBrowserInfoManager::OnGetNewBrowserInfo(
|
||||||
@@ -297,7 +333,9 @@ void CefBrowserInfoManager::OnGetNewBrowserInfo(
|
|||||||
std::make_pair(global_id, std::move(pending)));
|
std::make_pair(global_id, std::move(pending)));
|
||||||
|
|
||||||
// Register a timeout for the pending response so that the renderer process
|
// Register a timeout for the pending response so that the renderer process
|
||||||
// doesn't hang forever.
|
// doesn't hang forever. With the Chrome runtime, timeouts may occur in cases
|
||||||
|
// where chrome::AddWebContents or WebContents::Create are called directly
|
||||||
|
// from the Chrome UI (profile settings, etc).
|
||||||
if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
|
if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
|
||||||
switches::kDisableNewBrowserInfoTimeout)) {
|
switches::kDisableNewBrowserInfoTimeout)) {
|
||||||
CEF_POST_DELAYED_TASK(
|
CEF_POST_DELAYED_TASK(
|
||||||
@@ -438,16 +476,18 @@ void CefBrowserInfoManager::PushPendingPopup(
|
|||||||
|
|
||||||
std::unique_ptr<CefBrowserInfoManager::PendingPopup>
|
std::unique_ptr<CefBrowserInfoManager::PendingPopup>
|
||||||
CefBrowserInfoManager::PopPendingPopup(
|
CefBrowserInfoManager::PopPendingPopup(
|
||||||
PendingPopup::Step step,
|
PendingPopup::Step previous_step,
|
||||||
const content::GlobalRenderFrameHostId& opener_global_id,
|
const content::GlobalRenderFrameHostId& opener_global_id,
|
||||||
const GURL& target_url) {
|
const GURL& target_url) {
|
||||||
CEF_REQUIRE_UIT();
|
CEF_REQUIRE_UIT();
|
||||||
DCHECK(frame_util::IsValidGlobalId(opener_global_id));
|
DCHECK(frame_util::IsValidGlobalId(opener_global_id));
|
||||||
|
DCHECK_LE(previous_step, PendingPopup::GET_CUSTOM_WEB_CONTENTS_VIEW);
|
||||||
|
|
||||||
PendingPopupList::iterator it = pending_popup_list_.begin();
|
PendingPopupList::iterator it = pending_popup_list_.begin();
|
||||||
for (; it != pending_popup_list_.end(); ++it) {
|
for (; it != pending_popup_list_.end(); ++it) {
|
||||||
PendingPopup* popup = it->get();
|
PendingPopup* popup = it->get();
|
||||||
if (popup->step == step && popup->opener_global_id == opener_global_id &&
|
if (popup->step == previous_step &&
|
||||||
|
popup->opener_global_id == opener_global_id &&
|
||||||
popup->target_url == target_url) {
|
popup->target_url == target_url) {
|
||||||
// Transfer ownership of the pointer.
|
// Transfer ownership of the pointer.
|
||||||
it->release();
|
it->release();
|
||||||
@@ -459,6 +499,26 @@ CefBrowserInfoManager::PopPendingPopup(
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<CefBrowserInfoManager::PendingPopup>
|
||||||
|
CefBrowserInfoManager::PopPendingPopup(PendingPopup::Step previous_step,
|
||||||
|
content::WebContents* new_contents) {
|
||||||
|
CEF_REQUIRE_UIT();
|
||||||
|
DCHECK_GE(previous_step, PendingPopup::WEB_CONTENTS_CREATED);
|
||||||
|
|
||||||
|
PendingPopupList::iterator it = pending_popup_list_.begin();
|
||||||
|
for (; it != pending_popup_list_.end(); ++it) {
|
||||||
|
PendingPopup* popup = it->get();
|
||||||
|
if (popup->step == previous_step && popup->new_contents == new_contents) {
|
||||||
|
// Transfer ownership of the pointer.
|
||||||
|
it->release();
|
||||||
|
pending_popup_list_.erase(it);
|
||||||
|
return base::WrapUnique(popup);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
scoped_refptr<CefBrowserInfo> CefBrowserInfoManager::GetBrowserInfoInternal(
|
scoped_refptr<CefBrowserInfo> CefBrowserInfoManager::GetBrowserInfoInternal(
|
||||||
const content::GlobalRenderFrameHostId& global_id,
|
const content::GlobalRenderFrameHostId& global_id,
|
||||||
bool* is_guest_view) {
|
bool* is_guest_view) {
|
||||||
|
@@ -97,7 +97,12 @@ class CefBrowserInfoManager : public content::RenderProcessHostObserver {
|
|||||||
CefBrowserSettings& settings,
|
CefBrowserSettings& settings,
|
||||||
CefRefPtr<CefClient>& client,
|
CefRefPtr<CefClient>& client,
|
||||||
std::unique_ptr<CefBrowserPlatformDelegate>& platform_delegate,
|
std::unique_ptr<CefBrowserPlatformDelegate>& platform_delegate,
|
||||||
CefRefPtr<CefDictionaryValue>& extra_info);
|
CefRefPtr<CefDictionaryValue>& extra_info,
|
||||||
|
content::WebContents* new_contents);
|
||||||
|
|
||||||
|
// Called from ChromeBrowserDelegate::AddWebContents. See comments on
|
||||||
|
// PendingPopup for more information. Returns true for custom handling.
|
||||||
|
bool AddWebContents(content::WebContents* source_contents);
|
||||||
|
|
||||||
// Called from CefBrowserManager::GetNewBrowserInfo for delivering
|
// Called from CefBrowserManager::GetNewBrowserInfo for delivering
|
||||||
// browser info to the renderer process. If the browser info already exists
|
// browser info to the renderer process. If the browser info already exists
|
||||||
@@ -154,6 +159,8 @@ class CefBrowserInfoManager : public content::RenderProcessHostObserver {
|
|||||||
// Creates the OSR views for windowless popups.
|
// Creates the OSR views for windowless popups.
|
||||||
// - WebContentsCreated (UIT):
|
// - WebContentsCreated (UIT):
|
||||||
// Creates the CefBrowserHost representation for the popup.
|
// Creates the CefBrowserHost representation for the popup.
|
||||||
|
// - AddWebContents (UIT) (chrome runtime only):
|
||||||
|
// Creates the Browser or tab representation for the popup.
|
||||||
// - CefBrowserManager::GetNewBrowserInfo (IOT)
|
// - CefBrowserManager::GetNewBrowserInfo (IOT)
|
||||||
// Passes information about the popup to the renderer process.
|
// Passes information about the popup to the renderer process.
|
||||||
struct PendingPopup {
|
struct PendingPopup {
|
||||||
@@ -163,6 +170,7 @@ class CefBrowserInfoManager : public content::RenderProcessHostObserver {
|
|||||||
enum Step {
|
enum Step {
|
||||||
CAN_CREATE_WINDOW,
|
CAN_CREATE_WINDOW,
|
||||||
GET_CUSTOM_WEB_CONTENTS_VIEW,
|
GET_CUSTOM_WEB_CONTENTS_VIEW,
|
||||||
|
WEB_CONTENTS_CREATED,
|
||||||
} step;
|
} step;
|
||||||
|
|
||||||
// Initial state from ViewHostMsg_CreateWindow.
|
// Initial state from ViewHostMsg_CreateWindow.
|
||||||
@@ -179,15 +187,29 @@ class CefBrowserInfoManager : public content::RenderProcessHostObserver {
|
|||||||
|
|
||||||
// Platform delegate specific to the new popup.
|
// Platform delegate specific to the new popup.
|
||||||
std::unique_ptr<CefBrowserPlatformDelegate> platform_delegate;
|
std::unique_ptr<CefBrowserPlatformDelegate> platform_delegate;
|
||||||
|
|
||||||
|
// True if default Browser or tab creation should proceed from
|
||||||
|
// AddWebContents (chrome runtime only).
|
||||||
|
bool use_default_browser_creation = false;
|
||||||
|
|
||||||
|
// The newly created WebContents (set in WebContentsCreated).
|
||||||
|
content::WebContents* new_contents = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Manage pending popups. Only called on the UI thread.
|
// Manage pending popups. Only called on the UI thread.
|
||||||
void PushPendingPopup(std::unique_ptr<PendingPopup> popup);
|
void PushPendingPopup(std::unique_ptr<PendingPopup> popup);
|
||||||
|
|
||||||
|
// Used after CanCreateWindow is called.
|
||||||
std::unique_ptr<PendingPopup> PopPendingPopup(
|
std::unique_ptr<PendingPopup> PopPendingPopup(
|
||||||
PendingPopup::Step step,
|
PendingPopup::Step previous_step,
|
||||||
const content::GlobalRenderFrameHostId& opener_global_id,
|
const content::GlobalRenderFrameHostId& opener_global_id,
|
||||||
const GURL& target_url);
|
const GURL& target_url);
|
||||||
|
|
||||||
|
// Used after WebContentsCreated is called.
|
||||||
|
std::unique_ptr<PendingPopup> PopPendingPopup(
|
||||||
|
PendingPopup::Step previous_step,
|
||||||
|
content::WebContents* new_contents);
|
||||||
|
|
||||||
// Retrieves the BrowserInfo matching the specified ID.
|
// Retrieves the BrowserInfo matching the specified ID.
|
||||||
scoped_refptr<CefBrowserInfo> GetBrowserInfoInternal(
|
scoped_refptr<CefBrowserInfo> GetBrowserInfoInternal(
|
||||||
const content::GlobalRenderFrameHostId& global_id,
|
const content::GlobalRenderFrameHostId& global_id,
|
||||||
|
@@ -36,7 +36,16 @@ class BrowserDelegate : public content::WebContentsDelegate {
|
|||||||
|
|
||||||
~BrowserDelegate() override {}
|
~BrowserDelegate() override {}
|
||||||
|
|
||||||
// Called immediately after |new_contents| is created.
|
// Optionally override chrome::AddWebContents behavior. This is most often
|
||||||
|
// called via Browser::AddNewContents for new popup browsers and provides an
|
||||||
|
// opportunity for CEF to create a new Browser instead of proceeding with
|
||||||
|
// default Browser or tab creation.
|
||||||
|
virtual std::unique_ptr<content::WebContents> AddWebContents(
|
||||||
|
std::unique_ptr<content::WebContents> new_contents) = 0;
|
||||||
|
|
||||||
|
// Called immediately after |new_contents| is created via chrome::Navigate.
|
||||||
|
// This is most often called for navigations targeting a new tab without a
|
||||||
|
// pre-existing WebContents.
|
||||||
virtual void OnWebContentsCreated(content::WebContents* new_contents) = 0;
|
virtual void OnWebContentsCreated(content::WebContents* new_contents) = 0;
|
||||||
|
|
||||||
// Add or remove ownership of the WebContents.
|
// Add or remove ownership of the WebContents.
|
||||||
|
@@ -34,6 +34,25 @@ ChromeBrowserDelegate::ChromeBrowserDelegate(
|
|||||||
|
|
||||||
ChromeBrowserDelegate::~ChromeBrowserDelegate() = default;
|
ChromeBrowserDelegate::~ChromeBrowserDelegate() = default;
|
||||||
|
|
||||||
|
std::unique_ptr<content::WebContents> ChromeBrowserDelegate::AddWebContents(
|
||||||
|
std::unique_ptr<content::WebContents> new_contents) {
|
||||||
|
if (CefBrowserInfoManager::GetInstance()->AddWebContents(
|
||||||
|
new_contents.get())) {
|
||||||
|
// The browser host should have been created in WebContentsCreated().
|
||||||
|
auto new_browser =
|
||||||
|
ChromeBrowserHostImpl::GetBrowserForContents(new_contents.get());
|
||||||
|
if (new_browser) {
|
||||||
|
// Create a new Browser and give it ownership of the new WebContents.
|
||||||
|
new_browser->AddNewContents(std::move(new_contents));
|
||||||
|
} else {
|
||||||
|
LOG(ERROR) << "No host found for chrome popup browser";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Proceed with default chrome::AddWebContents behavior.
|
||||||
|
return new_contents;
|
||||||
|
}
|
||||||
|
|
||||||
void ChromeBrowserDelegate::OnWebContentsCreated(
|
void ChromeBrowserDelegate::OnWebContentsCreated(
|
||||||
content::WebContents* new_contents) {
|
content::WebContents* new_contents) {
|
||||||
// Necessary to receive LoadingStateChanged calls during initial navigation.
|
// Necessary to receive LoadingStateChanged calls during initial navigation.
|
||||||
@@ -132,7 +151,7 @@ void ChromeBrowserDelegate::WebContentsCreated(
|
|||||||
target_url,
|
target_url,
|
||||||
frame_util::MakeGlobalId(opener_render_process_id,
|
frame_util::MakeGlobalId(opener_render_process_id,
|
||||||
opener_render_frame_id),
|
opener_render_frame_id),
|
||||||
settings, client, platform_delegate, extra_info);
|
settings, client, platform_delegate, extra_info, new_contents);
|
||||||
|
|
||||||
auto opener = ChromeBrowserHostImpl::GetBrowserForContents(source_contents);
|
auto opener = ChromeBrowserHostImpl::GetBrowserForContents(source_contents);
|
||||||
if (!opener) {
|
if (!opener) {
|
||||||
@@ -155,27 +174,6 @@ void ChromeBrowserDelegate::WebContentsCreated(
|
|||||||
browser_info, opener, request_context_impl);
|
browser_info, opener, request_context_impl);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChromeBrowserDelegate::AddNewContents(
|
|
||||||
content::WebContents* source_contents,
|
|
||||||
std::unique_ptr<content::WebContents> new_contents,
|
|
||||||
const GURL& target_url,
|
|
||||||
WindowOpenDisposition disposition,
|
|
||||||
const blink::mojom::WindowFeatures& window_features,
|
|
||||||
bool user_gesture,
|
|
||||||
bool* was_blocked) {
|
|
||||||
auto new_browser =
|
|
||||||
ChromeBrowserHostImpl::GetBrowserForContents(new_contents.get());
|
|
||||||
if (new_browser) {
|
|
||||||
// Create a new Browser and give it ownership of the WebContents.
|
|
||||||
new_browser->AddNewContents(std::move(new_contents));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fall back to default behavior from Browser::AddNewContents.
|
|
||||||
chrome::AddWebContents(browser_, source_contents, std::move(new_contents),
|
|
||||||
target_url, disposition, window_features);
|
|
||||||
}
|
|
||||||
|
|
||||||
content::WebContents* ChromeBrowserDelegate::OpenURLFromTab(
|
content::WebContents* ChromeBrowserDelegate::OpenURLFromTab(
|
||||||
content::WebContents* source,
|
content::WebContents* source,
|
||||||
const content::OpenURLParams& params) {
|
const content::OpenURLParams& params) {
|
||||||
|
@@ -48,6 +48,8 @@ class ChromeBrowserDelegate : public cef::BrowserDelegate {
|
|||||||
~ChromeBrowserDelegate() override;
|
~ChromeBrowserDelegate() override;
|
||||||
|
|
||||||
// cef::BrowserDelegate methods:
|
// cef::BrowserDelegate methods:
|
||||||
|
std::unique_ptr<content::WebContents> AddWebContents(
|
||||||
|
std::unique_ptr<content::WebContents> new_contents) override;
|
||||||
void OnWebContentsCreated(content::WebContents* new_contents) override;
|
void OnWebContentsCreated(content::WebContents* new_contents) override;
|
||||||
void SetAsDelegate(content::WebContents* web_contents,
|
void SetAsDelegate(content::WebContents* web_contents,
|
||||||
bool set_delegate) override;
|
bool set_delegate) override;
|
||||||
@@ -66,13 +68,6 @@ class ChromeBrowserDelegate : public cef::BrowserDelegate {
|
|||||||
const std::string& frame_name,
|
const std::string& frame_name,
|
||||||
const GURL& target_url,
|
const GURL& target_url,
|
||||||
content::WebContents* new_contents) override;
|
content::WebContents* new_contents) override;
|
||||||
void AddNewContents(content::WebContents* source_contents,
|
|
||||||
std::unique_ptr<content::WebContents> new_contents,
|
|
||||||
const GURL& target_url,
|
|
||||||
WindowOpenDisposition disposition,
|
|
||||||
const blink::mojom::WindowFeatures& window_features,
|
|
||||||
bool user_gesture,
|
|
||||||
bool* was_blocked) override;
|
|
||||||
content::WebContents* OpenURLFromTab(
|
content::WebContents* OpenURLFromTab(
|
||||||
content::WebContents* source,
|
content::WebContents* source,
|
||||||
const content::OpenURLParams& params) override;
|
const content::OpenURLParams& params) override;
|
||||||
|
@@ -20,6 +20,7 @@
|
|||||||
#include "chrome/browser/ui/browser_tabstrip.h"
|
#include "chrome/browser/ui/browser_tabstrip.h"
|
||||||
#include "chrome/browser/ui/browser_window.h"
|
#include "chrome/browser/ui/browser_window.h"
|
||||||
#include "chrome/browser/ui/tabs/tab_strip_model.h"
|
#include "chrome/browser/ui/tabs/tab_strip_model.h"
|
||||||
|
#include "chrome/browser/ui/views/frame/contents_web_view.h"
|
||||||
#include "chrome/common/pref_names.h"
|
#include "chrome/common/pref_names.h"
|
||||||
#include "libcef/browser/chrome/views/chrome_browser_frame.h"
|
#include "libcef/browser/chrome/views/chrome_browser_frame.h"
|
||||||
#include "libcef/browser/chrome/views/chrome_browser_view.h"
|
#include "libcef/browser/chrome/views/chrome_browser_view.h"
|
||||||
@@ -435,6 +436,9 @@ Browser* ChromeBrowserHostImpl::CreateBrowser(
|
|||||||
chrome_browser_view->InitBrowser(base::WrapUnique(browser),
|
chrome_browser_view->InitBrowser(base::WrapUnique(browser),
|
||||||
params.browser_view);
|
params.browser_view);
|
||||||
|
|
||||||
|
// Don't set theme colors in ContentsWebView::UpdateBackgroundColor.
|
||||||
|
chrome_browser_view->contents_web_view()->SetBackgroundVisible(false);
|
||||||
|
|
||||||
// Don't show the browser by default.
|
// Don't show the browser by default.
|
||||||
show_browser = false;
|
show_browser = false;
|
||||||
}
|
}
|
||||||
|
@@ -11,6 +11,7 @@
|
|||||||
#include "libcef/browser/permission_prompt.h"
|
#include "libcef/browser/permission_prompt.h"
|
||||||
|
|
||||||
#include "base/task/thread_pool.h"
|
#include "base/task/thread_pool.h"
|
||||||
|
#include "chrome/browser/profiles/profile.h"
|
||||||
|
|
||||||
ChromeBrowserMainExtraPartsCef::ChromeBrowserMainExtraPartsCef() = default;
|
ChromeBrowserMainExtraPartsCef::ChromeBrowserMainExtraPartsCef() = default;
|
||||||
|
|
||||||
@@ -25,6 +26,9 @@ void ChromeBrowserMainExtraPartsCef::PostProfileInit(Profile* profile,
|
|||||||
CefRequestContextSettings settings;
|
CefRequestContextSettings settings;
|
||||||
CefContext::Get()->PopulateGlobalRequestContextSettings(&settings);
|
CefContext::Get()->PopulateGlobalRequestContextSettings(&settings);
|
||||||
|
|
||||||
|
// Use the existing path for the initial profile.
|
||||||
|
CefString(&settings.cache_path) = profile->GetPath().value();
|
||||||
|
|
||||||
// Create the global RequestContext.
|
// Create the global RequestContext.
|
||||||
global_request_context_ =
|
global_request_context_ =
|
||||||
CefRequestContextImpl::CreateGlobalRequestContext(settings);
|
CefRequestContextImpl::CreateGlobalRequestContext(settings);
|
||||||
|
@@ -241,21 +241,65 @@ bool ChromeContentBrowserClientCef::WillCreateURLLoaderFactory(
|
|||||||
bool* bypass_redirect_checks,
|
bool* bypass_redirect_checks,
|
||||||
bool* disable_secure_dns,
|
bool* disable_secure_dns,
|
||||||
network::mojom::URLLoaderFactoryOverridePtr* factory_override) {
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Don't intercept requests for Profiles that were not created by CEF.
|
// Don't intercept requests for Profiles that were not created by CEF.
|
||||||
// For example, the User Manager profile created via
|
// For example, the User Manager profile created via
|
||||||
// profiles::CreateSystemProfileForUserManager.
|
// profiles::CreateSystemProfileForUserManager.
|
||||||
auto profile = Profile::FromBrowserContext(browser_context);
|
auto profile = Profile::FromBrowserContext(browser_context);
|
||||||
if (!CefBrowserContext::FromProfile(profile)) {
|
if (!CefBrowserContext::FromProfile(profile)) {
|
||||||
return false;
|
return 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Based on content/browser/devtools/devtools_instrumentation.cc
|
||||||
|
// WillCreateURLLoaderFactoryInternal.
|
||||||
|
network::mojom::URLLoaderFactoryOverridePtr cef_override(
|
||||||
|
network::mojom::URLLoaderFactoryOverride::New());
|
||||||
|
// If caller passed some existing overrides, use those.
|
||||||
|
// Otherwise, use our local var, then if handlers actually
|
||||||
|
// decide to intercept, move it to |factory_override|.
|
||||||
|
network::mojom::URLLoaderFactoryOverridePtr* handler_override =
|
||||||
|
factory_override && *factory_override ? factory_override : &cef_override;
|
||||||
|
network::mojom::URLLoaderFactoryOverride* intercepting_factory =
|
||||||
|
handler_override->get();
|
||||||
|
|
||||||
|
// If we're the first interceptor to install an override, make a
|
||||||
|
// remote/receiver pair, then handle this similarly to appending
|
||||||
|
// a proxy to existing override.
|
||||||
|
if (!intercepting_factory->overriding_factory) {
|
||||||
|
DCHECK(!intercepting_factory->overridden_factory_receiver);
|
||||||
|
intercepting_factory->overridden_factory_receiver =
|
||||||
|
intercepting_factory->overriding_factory
|
||||||
|
.InitWithNewPipeAndPassReceiver();
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO(chrome): Is it necessary to proxy |header_client| callbacks?
|
||||||
|
bool use_proxy = ChromeContentBrowserClient::WillCreateURLLoaderFactory(
|
||||||
|
browser_context, frame, render_process_id, type, request_initiator,
|
||||||
|
navigation_id, ukm_source_id,
|
||||||
|
&(intercepting_factory->overridden_factory_receiver),
|
||||||
|
/*header_client=*/nullptr, bypass_redirect_checks, disable_secure_dns,
|
||||||
|
handler_override);
|
||||||
|
|
||||||
|
if (use_proxy) {
|
||||||
|
DCHECK(intercepting_factory->overriding_factory);
|
||||||
|
DCHECK(intercepting_factory->overridden_factory_receiver);
|
||||||
|
if (!factory_override) {
|
||||||
|
// Not a subresource navigation, so just override the target receiver.
|
||||||
|
mojo::FusePipes(std::move(*factory_receiver),
|
||||||
|
std::move(cef_override->overriding_factory));
|
||||||
|
*factory_receiver = std::move(cef_override->overridden_factory_receiver);
|
||||||
|
} else if (!*factory_override) {
|
||||||
|
// No other overrides, so just returns ours as is.
|
||||||
|
*factory_override = network::mojom::URLLoaderFactoryOverride::New(
|
||||||
|
std::move(cef_override->overriding_factory),
|
||||||
|
std::move(cef_override->overridden_factory_receiver), false);
|
||||||
|
}
|
||||||
|
// ... else things are already taken care of, as handler_override was
|
||||||
|
// pointing to factory override and we've done all magic in-place.
|
||||||
|
DCHECK(!cef_override->overriding_factory);
|
||||||
|
DCHECK(!cef_override->overridden_factory_receiver);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto request_handler = net_service::CreateInterceptedRequestHandler(
|
auto request_handler = net_service::CreateInterceptedRequestHandler(
|
||||||
@@ -266,6 +310,7 @@ bool ChromeContentBrowserClientCef::WillCreateURLLoaderFactory(
|
|||||||
net_service::ProxyURLLoaderFactory::CreateProxy(
|
net_service::ProxyURLLoaderFactory::CreateProxy(
|
||||||
browser_context, factory_receiver, header_client,
|
browser_context, factory_receiver, header_client,
|
||||||
std::move(request_handler));
|
std::move(request_handler));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -394,6 +394,7 @@ bool CefMainRunner::ContentMainRun(bool* initialized,
|
|||||||
|
|
||||||
if (!CreateUIThread(base::BindOnce(
|
if (!CreateUIThread(base::BindOnce(
|
||||||
[](CefMainRunner* runner, base::WaitableEvent* event) {
|
[](CefMainRunner* runner, base::WaitableEvent* event) {
|
||||||
|
runner->main_delegate_->BeforeUIThreadInitialize();
|
||||||
content::ContentMainRun(runner->main_runner_.get());
|
content::ContentMainRun(runner->main_runner_.get());
|
||||||
event->Signal();
|
event->Signal();
|
||||||
},
|
},
|
||||||
@@ -408,6 +409,7 @@ bool CefMainRunner::ContentMainRun(bool* initialized,
|
|||||||
uithread_startup_event.Wait();
|
uithread_startup_event.Wait();
|
||||||
} else {
|
} else {
|
||||||
*initialized = true;
|
*initialized = true;
|
||||||
|
main_delegate_->BeforeUIThreadInitialize();
|
||||||
content::ContentMainRun(main_runner_.get());
|
content::ContentMainRun(main_runner_.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -314,7 +314,7 @@ bool OnExtensionsSupportUI(std::string* mime_type, std::string* output) {
|
|||||||
"<html>\n<head><title>Extensions Support</title></head>\n"
|
"<html>\n<head><title>Extensions Support</title></head>\n"
|
||||||
"<body bgcolor=\"white\"><h3>Supported Chrome Extensions "
|
"<body bgcolor=\"white\"><h3>Supported Chrome Extensions "
|
||||||
"APIs</h3>\nFollow <a "
|
"APIs</h3>\nFollow <a "
|
||||||
"href=\"https://bitbucket.org/chromiumembedded/cef/issues/1947\" "
|
"href=\"https://github.com/chromiumembedded/cef/issues/1947\" "
|
||||||
"target=\"new\">issue #1947</a> for development progress.\n<ul>\n";
|
"target=\"new\">issue #1947</a> for development progress.\n<ul>\n";
|
||||||
|
|
||||||
bool has_top_level_name = false;
|
bool has_top_level_name = false;
|
||||||
|
@@ -1541,7 +1541,7 @@ void CefRenderWidgetHostViewOSR::OnPaint(const gfx::Rect& damage_rect,
|
|||||||
const void* pixels) {
|
const void* pixels) {
|
||||||
TRACE_EVENT0("cef", "CefRenderWidgetHostViewOSR::OnPaint");
|
TRACE_EVENT0("cef", "CefRenderWidgetHostViewOSR::OnPaint");
|
||||||
|
|
||||||
// Workaround for https://bitbucket.org/chromiumembedded/cef/issues/2817
|
// Workaround for https://github.com/chromiumembedded/cef/issues/2817
|
||||||
if (!is_showing_) {
|
if (!is_showing_) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
39
libcef/browser/views/native_widget_mac.h
Normal file
39
libcef/browser/views/native_widget_mac.h
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
// Copyright 2023 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_VIEWS_NATIVE_WIDGET_MAC_H_
|
||||||
|
#define CEF_LIBCEF_BROWSER_VIEWS_NATIVE_WIDGET_MAC_H_
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "include/internal/cef_ptr.h"
|
||||||
|
|
||||||
|
#include "ui/views/widget/native_widget_mac.h"
|
||||||
|
|
||||||
|
class CefWindow;
|
||||||
|
class CefWindowDelegate;
|
||||||
|
|
||||||
|
class CefNativeWidgetMac : public views::NativeWidgetMac {
|
||||||
|
public:
|
||||||
|
CefNativeWidgetMac(views::internal::NativeWidgetDelegate* delegate,
|
||||||
|
CefRefPtr<CefWindow> window,
|
||||||
|
CefWindowDelegate* window_delegate);
|
||||||
|
~CefNativeWidgetMac() override = default;
|
||||||
|
|
||||||
|
CefNativeWidgetMac(const CefNativeWidgetMac&) = delete;
|
||||||
|
CefNativeWidgetMac& operator=(const CefNativeWidgetMac&) = delete;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// NativeWidgetMac:
|
||||||
|
NativeWidgetMacNSWindow* CreateNSWindow(
|
||||||
|
const remote_cocoa::mojom::CreateWindowParams* params) override;
|
||||||
|
|
||||||
|
void GetWindowFrameTitlebarHeight(bool* override_titlebar_height,
|
||||||
|
float* titlebar_height) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
const CefRefPtr<CefWindow> window_;
|
||||||
|
CefWindowDelegate* const window_delegate_;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CEF_LIBCEF_BROWSER_VIEWS_NATIVE_WIDGET_MAC_H_
|
54
libcef/browser/views/native_widget_mac.mm
Normal file
54
libcef/browser/views/native_widget_mac.mm
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
// Copyright 2023 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/views/native_widget_mac.h"
|
||||||
|
|
||||||
|
#include "include/views/cef_window.h"
|
||||||
|
#include "include/views/cef_window_delegate.h"
|
||||||
|
#include "libcef/browser/views/ns_window.h"
|
||||||
|
|
||||||
|
CefNativeWidgetMac::CefNativeWidgetMac(
|
||||||
|
views::internal::NativeWidgetDelegate* delegate,
|
||||||
|
CefRefPtr<CefWindow> window,
|
||||||
|
CefWindowDelegate* window_delegate)
|
||||||
|
: views::NativeWidgetMac(delegate),
|
||||||
|
window_(window),
|
||||||
|
window_delegate_(window_delegate) {}
|
||||||
|
|
||||||
|
NativeWidgetMacNSWindow* CefNativeWidgetMac::CreateNSWindow(
|
||||||
|
const remote_cocoa::mojom::CreateWindowParams* params) {
|
||||||
|
NSUInteger style_mask =
|
||||||
|
NSWindowStyleMaskTitled | NSWindowStyleMaskMiniaturizable |
|
||||||
|
NSWindowStyleMaskClosable | NSWindowStyleMaskResizable |
|
||||||
|
NSWindowStyleMaskTexturedBackground;
|
||||||
|
|
||||||
|
bool is_frameless = window_delegate_->IsFrameless(window_);
|
||||||
|
|
||||||
|
auto window = [[CefNSWindow alloc] initWithStyle:style_mask
|
||||||
|
isFrameless:is_frameless];
|
||||||
|
|
||||||
|
if (is_frameless) {
|
||||||
|
[window setTitlebarAppearsTransparent:YES];
|
||||||
|
[window setTitleVisibility:NSWindowTitleHidden];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!window_delegate_->WithStandardWindowButtons(window_)) {
|
||||||
|
[[window standardWindowButton:NSWindowCloseButton] setHidden:YES];
|
||||||
|
[[window standardWindowButton:NSWindowMiniaturizeButton] setHidden:YES];
|
||||||
|
[[window standardWindowButton:NSWindowZoomButton] setHidden:YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
return window;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CefNativeWidgetMac::GetWindowFrameTitlebarHeight(
|
||||||
|
bool* override_titlebar_height,
|
||||||
|
float* titlebar_height) {
|
||||||
|
if (window_delegate_->GetTitlebarHeight(window_, titlebar_height)) {
|
||||||
|
*override_titlebar_height = true;
|
||||||
|
} else {
|
||||||
|
views::NativeWidgetMac::GetWindowFrameTitlebarHeight(
|
||||||
|
override_titlebar_height, titlebar_height);
|
||||||
|
}
|
||||||
|
}
|
20
libcef/browser/views/ns_window.h
Normal file
20
libcef/browser/views/ns_window.h
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
// Copyright 2023 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_VIEWS_NS_WINDOW_H_
|
||||||
|
#define CEF_LIBCEF_BROWSER_VIEWS_NS_WINDOW_H_
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "components/remote_cocoa/app_shim/native_widget_mac_nswindow.h"
|
||||||
|
|
||||||
|
@interface CefNSWindow : NativeWidgetMacNSWindow {
|
||||||
|
@private
|
||||||
|
bool is_frameless_;
|
||||||
|
}
|
||||||
|
- (id)initWithStyle:(NSUInteger)style_mask isFrameless:(bool)is_frameless;
|
||||||
|
|
||||||
|
- (BOOL)shouldCenterTrafficLights;
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif // CEF_LIBCEF_BROWSER_VIEWS_NS_WINDOW_H_
|
104
libcef/browser/views/ns_window.mm
Normal file
104
libcef/browser/views/ns_window.mm
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
// Copyright 2023 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/views/ns_window.h"
|
||||||
|
|
||||||
|
#include "base/i18n/rtl.h"
|
||||||
|
#include "components/remote_cocoa/app_shim/native_widget_ns_window_bridge.h"
|
||||||
|
#include "components/remote_cocoa/common/native_widget_ns_window_host.mojom.h"
|
||||||
|
#include "ui/base/cocoa/window_size_constants.h"
|
||||||
|
|
||||||
|
@interface CefThemeFrame : NativeWidgetMacNSWindowTitledFrame
|
||||||
|
@end
|
||||||
|
|
||||||
|
// NSThemeFrame (PrivateAPI) definitions.
|
||||||
|
@interface NSThemeFrame (PrivateAPI)
|
||||||
|
- (void)setStyleMask:(NSUInteger)styleMask;
|
||||||
|
- (CGFloat)_titlebarHeight;
|
||||||
|
- (BOOL)_shouldCenterTrafficLights;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation CefThemeFrame {
|
||||||
|
bool in_full_screen_;
|
||||||
|
}
|
||||||
|
|
||||||
|
// NSThemeFrame (PrivateAPI) overrides.
|
||||||
|
- (void)setStyleMask:(NSUInteger)styleMask {
|
||||||
|
in_full_screen_ = (styleMask & NSWindowStyleMaskFullScreen) != 0;
|
||||||
|
[super setStyleMask:styleMask];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGFloat)_titlebarHeight {
|
||||||
|
if (!in_full_screen_) {
|
||||||
|
bool override_titlebar_height = false;
|
||||||
|
float titlebar_height = 0;
|
||||||
|
auto* window = base::mac::ObjCCast<CefNSWindow>([self window]);
|
||||||
|
if (auto* bridge = [window bridge]) {
|
||||||
|
bridge->host()->GetWindowFrameTitlebarHeight(&override_titlebar_height,
|
||||||
|
&titlebar_height);
|
||||||
|
|
||||||
|
if (override_titlebar_height)
|
||||||
|
return titlebar_height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [super _titlebarHeight];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)_shouldCenterTrafficLights {
|
||||||
|
auto* window = base::mac::ObjCCast<CefNSWindow>([self window]);
|
||||||
|
return [window shouldCenterTrafficLights];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)_shouldFlipTrafficLightsForRTL {
|
||||||
|
return base::i18n::IsRTL() ? YES : NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface NSWindow (PrivateAPI)
|
||||||
|
+ (Class)frameViewClassForStyleMask:(NSUInteger)windowStyle;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation CefNSWindow
|
||||||
|
|
||||||
|
- (id)initWithStyle:(NSUInteger)style_mask isFrameless:(bool)is_frameless {
|
||||||
|
if ((self = [super initWithContentRect:ui::kWindowSizeDeterminedLater
|
||||||
|
styleMask:style_mask
|
||||||
|
backing:NSBackingStoreBuffered
|
||||||
|
defer:NO])) {
|
||||||
|
is_frameless_ = is_frameless;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)shouldCenterTrafficLights {
|
||||||
|
return is_frameless_ ? YES : NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
// NSWindow overrides.
|
||||||
|
- (NSRect)contentRectForFrameRect:(NSRect)frameRect {
|
||||||
|
if (is_frameless_) {
|
||||||
|
return frameRect;
|
||||||
|
}
|
||||||
|
return [super contentRectForFrameRect:frameRect];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSRect)frameRectForContentRect:(NSRect)contentRect {
|
||||||
|
if (is_frameless_) {
|
||||||
|
return contentRect;
|
||||||
|
}
|
||||||
|
return [super frameRectForContentRect:contentRect];
|
||||||
|
}
|
||||||
|
|
||||||
|
// NSWindow (PrivateAPI) overrides.
|
||||||
|
+ (Class)frameViewClassForStyleMask:(NSUInteger)windowStyle {
|
||||||
|
if (Class custom_frame = [CefThemeFrame class]) {
|
||||||
|
return custom_frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
return [super frameViewClassForStyleMask:windowStyle];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
@@ -21,8 +21,14 @@ class Point;
|
|||||||
}
|
}
|
||||||
|
|
||||||
namespace views {
|
namespace views {
|
||||||
|
class NativeWidget;
|
||||||
class Widget;
|
class Widget;
|
||||||
|
namespace internal {
|
||||||
|
class NativeWidgetDelegate;
|
||||||
}
|
}
|
||||||
|
} // namespace views
|
||||||
|
|
||||||
|
class CefWindowDelegate;
|
||||||
|
|
||||||
#define CEF_REQUIRE_VALID_RETURN(ret) \
|
#define CEF_REQUIRE_VALID_RETURN(ret) \
|
||||||
if (!ParentClass::IsValid()) \
|
if (!ParentClass::IsValid()) \
|
||||||
@@ -141,6 +147,11 @@ CefWindowHandle GetWindowHandle(views::Widget* widget);
|
|||||||
// Returns the platform window handle for |window|. May return nullptr.
|
// Returns the platform window handle for |window|. May return nullptr.
|
||||||
CefWindowHandle GetWindowHandle(gfx::NativeWindow window);
|
CefWindowHandle GetWindowHandle(gfx::NativeWindow window);
|
||||||
|
|
||||||
|
views::NativeWidget* CreateNativeWidget(
|
||||||
|
views::internal::NativeWidgetDelegate* delegate,
|
||||||
|
CefRefPtr<CefWindow> window,
|
||||||
|
CefWindowDelegate* window_delegate);
|
||||||
|
|
||||||
} // namespace view_util
|
} // namespace view_util
|
||||||
|
|
||||||
#endif // CEF_LIBCEF_BROWSER_VIEWS_VIEW_UTIL_H_
|
#endif // CEF_LIBCEF_BROWSER_VIEWS_VIEW_UTIL_H_
|
||||||
|
@@ -6,6 +6,8 @@
|
|||||||
|
|
||||||
#include "ui/aura/window.h"
|
#include "ui/aura/window.h"
|
||||||
#include "ui/aura/window_tree_host.h"
|
#include "ui/aura/window_tree_host.h"
|
||||||
|
#include "ui/views/widget/native_widget.h"
|
||||||
|
#include "ui/views/widget/native_widget_delegate.h"
|
||||||
#include "ui/views/widget/widget.h"
|
#include "ui/views/widget/widget.h"
|
||||||
|
|
||||||
namespace view_util {
|
namespace view_util {
|
||||||
@@ -40,4 +42,11 @@ CefWindowHandle GetWindowHandle(gfx::NativeWindow window) {
|
|||||||
return kNullWindowHandle;
|
return kNullWindowHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
views::NativeWidget* CreateNativeWidget(
|
||||||
|
views::internal::NativeWidgetDelegate* delegate,
|
||||||
|
CefRefPtr<CefWindow> window,
|
||||||
|
CefWindowDelegate* window_delegate) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace view_util
|
} // namespace view_util
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
#include "include/internal/cef_types_mac.h"
|
#include "include/internal/cef_types_mac.h"
|
||||||
|
#include "libcef/browser/views/native_widget_mac.h"
|
||||||
|
|
||||||
#include "ui/views/widget/widget.h"
|
#include "ui/views/widget/widget.h"
|
||||||
|
|
||||||
@@ -44,4 +45,10 @@ CefWindowHandle GetWindowHandle(gfx::NativeWindow window) {
|
|||||||
return kNullWindowHandle;
|
return kNullWindowHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
views::NativeWidget* CreateNativeWidget(
|
||||||
|
views::internal::NativeWidgetDelegate* delegate,
|
||||||
|
CefRefPtr<CefWindow> window,
|
||||||
|
CefWindowDelegate* window_delegate) {
|
||||||
|
return new CefNativeWidgetMac(delegate, window, window_delegate);
|
||||||
|
}
|
||||||
} // namespace view_util
|
} // namespace view_util
|
||||||
|
@@ -312,6 +312,10 @@ void CefWindowView::CreateWidget(gfx::AcceleratedWidget parent_widget) {
|
|||||||
DCHECK(!params.bounds.IsEmpty());
|
DCHECK(!params.bounds.IsEmpty());
|
||||||
} else {
|
} else {
|
||||||
is_frameless_ = cef_delegate()->IsFrameless(cef_window);
|
is_frameless_ = cef_delegate()->IsFrameless(cef_window);
|
||||||
|
|
||||||
|
params.native_widget =
|
||||||
|
view_util::CreateNativeWidget(widget, cef_window, cef_delegate());
|
||||||
|
|
||||||
can_resize = cef_delegate()->CanResize(cef_window);
|
can_resize = cef_delegate()->CanResize(cef_window);
|
||||||
|
|
||||||
const auto show_state = cef_delegate()->GetInitialShowState(cef_window);
|
const auto show_state = cef_delegate()->GetInitialShowState(cef_window);
|
||||||
|
@@ -40,8 +40,6 @@ void ChromeMainRunnerDelegate::BeforeMainThreadInitialize(
|
|||||||
#else
|
#else
|
||||||
base::CommandLine::Init(args.argc, args.argv);
|
base::CommandLine::Init(args.argc, args.argv);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
sampling_profiler_ = std::make_unique<MainThreadStackSamplingProfiler>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChromeMainRunnerDelegate::BeforeMainMessageLoopRun(
|
void ChromeMainRunnerDelegate::BeforeMainMessageLoopRun(
|
||||||
@@ -70,14 +68,16 @@ bool ChromeMainRunnerDelegate::HandleMainMessageLoopQuit() {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ChromeMainRunnerDelegate::BeforeUIThreadInitialize() {
|
||||||
|
sampling_profiler_ = std::make_unique<MainThreadStackSamplingProfiler>();
|
||||||
|
}
|
||||||
|
|
||||||
void ChromeMainRunnerDelegate::AfterUIThreadShutdown() {
|
void ChromeMainRunnerDelegate::AfterUIThreadShutdown() {
|
||||||
static_cast<ChromeContentBrowserClient*>(
|
static_cast<ChromeContentBrowserClient*>(
|
||||||
CefAppManager::Get()->GetContentClient()->browser())
|
CefAppManager::Get()->GetContentClient()->browser())
|
||||||
->CleanupOnUIThread();
|
->CleanupOnUIThread();
|
||||||
main_delegate_->CleanupOnUIThread();
|
main_delegate_->CleanupOnUIThread();
|
||||||
}
|
|
||||||
|
|
||||||
void ChromeMainRunnerDelegate::AfterMainThreadShutdown() {
|
|
||||||
sampling_profiler_.reset();
|
sampling_profiler_.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -35,8 +35,8 @@ class ChromeMainRunnerDelegate : public CefMainRunnerDelegate {
|
|||||||
void BeforeMainThreadInitialize(const CefMainArgs& args) override;
|
void BeforeMainThreadInitialize(const CefMainArgs& args) override;
|
||||||
void BeforeMainMessageLoopRun(base::RunLoop* run_loop) override;
|
void BeforeMainMessageLoopRun(base::RunLoop* run_loop) override;
|
||||||
bool HandleMainMessageLoopQuit() override;
|
bool HandleMainMessageLoopQuit() override;
|
||||||
|
void BeforeUIThreadInitialize() override;
|
||||||
void AfterUIThreadShutdown() override;
|
void AfterUIThreadShutdown() override;
|
||||||
void AfterMainThreadShutdown() override;
|
|
||||||
void BeforeExecuteProcess(const CefMainArgs& args) override;
|
void BeforeExecuteProcess(const CefMainArgs& args) override;
|
||||||
void AfterExecuteProcess() override;
|
void AfterExecuteProcess() override;
|
||||||
|
|
||||||
|
@@ -24,6 +24,7 @@ class CefMainRunnerDelegate {
|
|||||||
virtual void BeforeMainThreadRun() {}
|
virtual void BeforeMainThreadRun() {}
|
||||||
virtual void BeforeMainMessageLoopRun(base::RunLoop* run_loop) {}
|
virtual void BeforeMainMessageLoopRun(base::RunLoop* run_loop) {}
|
||||||
virtual bool HandleMainMessageLoopQuit() { return false; }
|
virtual bool HandleMainMessageLoopQuit() { return false; }
|
||||||
|
virtual void BeforeUIThreadInitialize() {}
|
||||||
virtual void AfterUIThreadInitialize() {}
|
virtual void AfterUIThreadInitialize() {}
|
||||||
virtual void AfterUIThreadShutdown() {}
|
virtual void AfterUIThreadShutdown() {}
|
||||||
virtual void BeforeMainThreadShutdown() {}
|
virtual void BeforeMainThreadShutdown() {}
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
// implementations. See the translator.README.txt file in the tools directory
|
// implementations. See the translator.README.txt file in the tools directory
|
||||||
// for more information.
|
// for more information.
|
||||||
//
|
//
|
||||||
// $hash=499cb70269cbe05c9bba4b0672a26116f7436f76$
|
// $hash=8b92c198857b0ca5c3ddc9b2c8a82febe7ed8cde$
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "libcef_dll/cpptoc/views/browser_view_delegate_cpptoc.h"
|
#include "libcef_dll/cpptoc/views/browser_view_delegate_cpptoc.h"
|
||||||
@@ -111,11 +111,7 @@ browser_view_delegate_get_delegate_for_popup_browser_view(
|
|||||||
NOTREACHED() << "invalid settings->[base.]size";
|
NOTREACHED() << "invalid settings->[base.]size";
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
// Verify param: client; type: refptr_same
|
// Unverified params: client
|
||||||
DCHECK(client);
|
|
||||||
if (!client) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Translate param: settings; type: struct_byref_const
|
// Translate param: settings; type: struct_byref_const
|
||||||
CefBrowserSettings settingsObj;
|
CefBrowserSettings settingsObj;
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
// implementations. See the translator.README.txt file in the tools directory
|
// implementations. See the translator.README.txt file in the tools directory
|
||||||
// for more information.
|
// for more information.
|
||||||
//
|
//
|
||||||
// $hash=af80a36cdcb47a18eb1ac8bc3315dfd322f4e96e$
|
// $hash=18f715de465689a4e8484bbced8ad92d9434438a$
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "libcef_dll/cpptoc/views/window_delegate_cpptoc.h"
|
#include "libcef_dll/cpptoc/views/window_delegate_cpptoc.h"
|
||||||
@@ -270,6 +270,62 @@ window_delegate_is_frameless(struct _cef_window_delegate_t* self,
|
|||||||
return _retval;
|
return _retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CEF_CALLBACK window_delegate_with_standard_window_buttons(
|
||||||
|
struct _cef_window_delegate_t* self,
|
||||||
|
cef_window_t* window) {
|
||||||
|
shutdown_checker::AssertNotShutdown();
|
||||||
|
|
||||||
|
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||||
|
|
||||||
|
DCHECK(self);
|
||||||
|
if (!self) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// Verify param: window; type: refptr_diff
|
||||||
|
DCHECK(window);
|
||||||
|
if (!window) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Execute
|
||||||
|
bool _retval = CefWindowDelegateCppToC::Get(self)->WithStandardWindowButtons(
|
||||||
|
CefWindowCToCpp::Wrap(window));
|
||||||
|
|
||||||
|
// Return type: bool
|
||||||
|
return _retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
int CEF_CALLBACK
|
||||||
|
window_delegate_get_titlebar_height(struct _cef_window_delegate_t* self,
|
||||||
|
cef_window_t* window,
|
||||||
|
float* titlebar_height) {
|
||||||
|
shutdown_checker::AssertNotShutdown();
|
||||||
|
|
||||||
|
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||||
|
|
||||||
|
DCHECK(self);
|
||||||
|
if (!self) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// Verify param: window; type: refptr_diff
|
||||||
|
DCHECK(window);
|
||||||
|
if (!window) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// Verify param: titlebar_height; type: simple_byaddr
|
||||||
|
DCHECK(titlebar_height);
|
||||||
|
if (!titlebar_height) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Execute
|
||||||
|
bool _retval = CefWindowDelegateCppToC::Get(self)->GetTitlebarHeight(
|
||||||
|
CefWindowCToCpp::Wrap(window), titlebar_height);
|
||||||
|
|
||||||
|
// Return type: bool
|
||||||
|
return _retval;
|
||||||
|
}
|
||||||
|
|
||||||
int CEF_CALLBACK window_delegate_can_resize(struct _cef_window_delegate_t* self,
|
int CEF_CALLBACK window_delegate_can_resize(struct _cef_window_delegate_t* self,
|
||||||
cef_window_t* window) {
|
cef_window_t* window) {
|
||||||
shutdown_checker::AssertNotShutdown();
|
shutdown_checker::AssertNotShutdown();
|
||||||
@@ -705,6 +761,9 @@ CefWindowDelegateCppToC::CefWindowDelegateCppToC() {
|
|||||||
GetStruct()->get_initial_bounds = window_delegate_get_initial_bounds;
|
GetStruct()->get_initial_bounds = window_delegate_get_initial_bounds;
|
||||||
GetStruct()->get_initial_show_state = window_delegate_get_initial_show_state;
|
GetStruct()->get_initial_show_state = window_delegate_get_initial_show_state;
|
||||||
GetStruct()->is_frameless = window_delegate_is_frameless;
|
GetStruct()->is_frameless = window_delegate_is_frameless;
|
||||||
|
GetStruct()->with_standard_window_buttons =
|
||||||
|
window_delegate_with_standard_window_buttons;
|
||||||
|
GetStruct()->get_titlebar_height = window_delegate_get_titlebar_height;
|
||||||
GetStruct()->can_resize = window_delegate_can_resize;
|
GetStruct()->can_resize = window_delegate_can_resize;
|
||||||
GetStruct()->can_maximize = window_delegate_can_maximize;
|
GetStruct()->can_maximize = window_delegate_can_maximize;
|
||||||
GetStruct()->can_minimize = window_delegate_can_minimize;
|
GetStruct()->can_minimize = window_delegate_can_minimize;
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
// implementations. See the translator.README.txt file in the tools directory
|
// implementations. See the translator.README.txt file in the tools directory
|
||||||
// for more information.
|
// for more information.
|
||||||
//
|
//
|
||||||
// $hash=4f26a1968e558512fa9894106f0bc9f6b9d8a10f$
|
// $hash=7301ce9c063a7ff4ab88b6382f6441ba314b20c0$
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "libcef_dll/ctocpp/views/browser_view_delegate_ctocpp.h"
|
#include "libcef_dll/ctocpp/views/browser_view_delegate_ctocpp.h"
|
||||||
@@ -101,11 +101,7 @@ CefBrowserViewDelegateCToCpp::GetDelegateForPopupBrowserView(
|
|||||||
if (!browser_view.get()) {
|
if (!browser_view.get()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
// Verify param: client; type: refptr_same
|
// Unverified params: client
|
||||||
DCHECK(client.get());
|
|
||||||
if (!client.get()) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Execute
|
// Execute
|
||||||
cef_browser_view_delegate_t* _retval =
|
cef_browser_view_delegate_t* _retval =
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
// implementations. See the translator.README.txt file in the tools directory
|
// implementations. See the translator.README.txt file in the tools directory
|
||||||
// for more information.
|
// for more information.
|
||||||
//
|
//
|
||||||
// $hash=18f601c8e152c39928595e1f02c9274f0dc6ce8a$
|
// $hash=40aea12873a3c8803c9d2d6c06a0270197ead58e$
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "libcef_dll/ctocpp/views/window_delegate_ctocpp.h"
|
#include "libcef_dll/ctocpp/views/window_delegate_ctocpp.h"
|
||||||
@@ -257,6 +257,63 @@ bool CefWindowDelegateCToCpp::IsFrameless(CefRefPtr<CefWindow> window) {
|
|||||||
return _retval ? true : false;
|
return _retval ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NO_SANITIZE("cfi-icall")
|
||||||
|
bool CefWindowDelegateCToCpp::WithStandardWindowButtons(
|
||||||
|
CefRefPtr<CefWindow> window) {
|
||||||
|
shutdown_checker::AssertNotShutdown();
|
||||||
|
|
||||||
|
cef_window_delegate_t* _struct = GetStruct();
|
||||||
|
if (CEF_MEMBER_MISSING(_struct, with_standard_window_buttons)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||||
|
|
||||||
|
// Verify param: window; type: refptr_diff
|
||||||
|
DCHECK(window.get());
|
||||||
|
if (!window.get()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Execute
|
||||||
|
int _retval = _struct->with_standard_window_buttons(
|
||||||
|
_struct, CefWindowCppToC::Wrap(window));
|
||||||
|
|
||||||
|
// Return type: bool
|
||||||
|
return _retval ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
NO_SANITIZE("cfi-icall")
|
||||||
|
bool CefWindowDelegateCToCpp::GetTitlebarHeight(CefRefPtr<CefWindow> window,
|
||||||
|
float* titlebar_height) {
|
||||||
|
shutdown_checker::AssertNotShutdown();
|
||||||
|
|
||||||
|
cef_window_delegate_t* _struct = GetStruct();
|
||||||
|
if (CEF_MEMBER_MISSING(_struct, get_titlebar_height)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||||
|
|
||||||
|
// Verify param: window; type: refptr_diff
|
||||||
|
DCHECK(window.get());
|
||||||
|
if (!window.get()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// Verify param: titlebar_height; type: simple_byaddr
|
||||||
|
DCHECK(titlebar_height);
|
||||||
|
if (!titlebar_height) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Execute
|
||||||
|
int _retval = _struct->get_titlebar_height(
|
||||||
|
_struct, CefWindowCppToC::Wrap(window), titlebar_height);
|
||||||
|
|
||||||
|
// Return type: bool
|
||||||
|
return _retval ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
NO_SANITIZE("cfi-icall")
|
NO_SANITIZE("cfi-icall")
|
||||||
bool CefWindowDelegateCToCpp::CanResize(CefRefPtr<CefWindow> window) {
|
bool CefWindowDelegateCToCpp::CanResize(CefRefPtr<CefWindow> window) {
|
||||||
shutdown_checker::AssertNotShutdown();
|
shutdown_checker::AssertNotShutdown();
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
// implementations. See the translator.README.txt file in the tools directory
|
// implementations. See the translator.README.txt file in the tools directory
|
||||||
// for more information.
|
// for more information.
|
||||||
//
|
//
|
||||||
// $hash=1a923e68b1e07234f97d3c219cc70cc91c118a77$
|
// $hash=d100d8866a7eab2a163d4ddb3cacd00141f65757$
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_WINDOW_DELEGATE_CTOCPP_H_
|
#ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_WINDOW_DELEGATE_CTOCPP_H_
|
||||||
@@ -50,6 +50,9 @@ class CefWindowDelegateCToCpp
|
|||||||
CefRect GetInitialBounds(CefRefPtr<CefWindow> window) override;
|
CefRect GetInitialBounds(CefRefPtr<CefWindow> window) override;
|
||||||
cef_show_state_t GetInitialShowState(CefRefPtr<CefWindow> window) override;
|
cef_show_state_t GetInitialShowState(CefRefPtr<CefWindow> window) override;
|
||||||
bool IsFrameless(CefRefPtr<CefWindow> window) override;
|
bool IsFrameless(CefRefPtr<CefWindow> window) override;
|
||||||
|
bool WithStandardWindowButtons(CefRefPtr<CefWindow> window) override;
|
||||||
|
bool GetTitlebarHeight(CefRefPtr<CefWindow> window,
|
||||||
|
float* titlebar_height) override;
|
||||||
bool CanResize(CefRefPtr<CefWindow> window) override;
|
bool CanResize(CefRefPtr<CefWindow> window) override;
|
||||||
bool CanMaximize(CefRefPtr<CefWindow> window) override;
|
bool CanMaximize(CefRefPtr<CefWindow> window) override;
|
||||||
bool CanMinimize(CefRefPtr<CefWindow> window) override;
|
bool CanMinimize(CefRefPtr<CefWindow> window) override;
|
||||||
|
152
patch/patch.cfg
152
patch/patch.cfg
@@ -30,8 +30,8 @@ patches = [
|
|||||||
# https://bugs.chromium.org/p/chromium/issues/detail?id=634788
|
# https://bugs.chromium.org/p/chromium/issues/detail?id=634788
|
||||||
#
|
#
|
||||||
# Windows: Add cc_wrapper support for sccache builds.
|
# Windows: Add cc_wrapper support for sccache builds.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2432
|
# https://github.com/chromiumembedded/cef/issues/2432
|
||||||
'name': 'gn_config',
|
'name': 'gn_config',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Patches that must be applied after `gclient sync --nohooks` and before
|
# Patches that must be applied after `gclient sync --nohooks` and before
|
||||||
@@ -41,12 +41,12 @@ patches = [
|
|||||||
# https://bugs.chromium.org/p/chromium/issues/detail?id=623342
|
# https://bugs.chromium.org/p/chromium/issues/detail?id=623342
|
||||||
#
|
#
|
||||||
# Don't copy dbghelp.dll/dbgcore.dll from the Windows SDK.
|
# Don't copy dbghelp.dll/dbgcore.dll from the Windows SDK.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/3356
|
# https://github.com/chromiumembedded/cef/issues/3356
|
||||||
'name': 'runhooks',
|
'name': 'runhooks',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Support component builds (GN is_component_build=true).
|
# Support component builds (GN is_component_build=true).
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1617
|
# https://github.com/chromiumembedded/cef/issues/1617
|
||||||
'name': 'component_build',
|
'name': 'component_build',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -58,7 +58,7 @@ patches = [
|
|||||||
#
|
#
|
||||||
# Add MessageLoop::ReleasePump to fix crashes during shutdown with multi-
|
# Add MessageLoop::ReleasePump to fix crashes during shutdown with multi-
|
||||||
# threaded message loop mode.
|
# threaded message loop mode.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2362
|
# https://github.com/chromiumembedded/cef/issues/2362
|
||||||
'name': 'message_loop',
|
'name': 'message_loop',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -77,27 +77,27 @@ patches = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Fix export of UnderlayOpenGLHostingWindow for 64-bit MacOS builds.
|
# Fix export of UnderlayOpenGLHostingWindow for 64-bit MacOS builds.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1051
|
# https://github.com/chromiumembedded/cef/issues/1051
|
||||||
'name': 'underlay_1051',
|
'name': 'underlay_1051',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Allow specification of a parent window handle for Widget creation.
|
# Allow specification of a parent window handle for Widget creation.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/180
|
# https://github.com/chromiumembedded/cef/issues/180
|
||||||
#
|
#
|
||||||
# Fix multiple handling of WM_MOUSEWHEEL messages on Windows.
|
# Fix multiple handling of WM_MOUSEWHEEL messages on Windows.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1481
|
# https://github.com/chromiumembedded/cef/issues/1481
|
||||||
#
|
#
|
||||||
# Support custom RenderWidgetHostViewOSR for BrowserPluginGuest.
|
# Support custom RenderWidgetHostViewOSR for BrowserPluginGuest.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1565
|
# https://github.com/chromiumembedded/cef/issues/1565
|
||||||
#
|
#
|
||||||
# Fix focus/activation handling and keyboard input on Windows and Linux.
|
# Fix focus/activation handling and keyboard input on Windows and Linux.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1677
|
# https://github.com/chromiumembedded/cef/issues/1677
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1679
|
# https://github.com/chromiumembedded/cef/issues/1679
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1700
|
# https://github.com/chromiumembedded/cef/issues/1700
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/3316
|
# https://github.com/chromiumembedded/cef/issues/3316
|
||||||
#
|
#
|
||||||
# Support creation of captionless windows with resizable borders.
|
# Support creation of captionless windows with resizable borders.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1749
|
# https://github.com/chromiumembedded/cef/issues/1749
|
||||||
#
|
#
|
||||||
# Windows: When |params.remove_standard_frame| is true remove WS_CAPTION
|
# Windows: When |params.remove_standard_frame| is true remove WS_CAPTION
|
||||||
# and WS_SYSMENU styles. Otherwise Windows 10 enforces a minimum window
|
# and WS_SYSMENU styles. Otherwise Windows 10 enforces a minimum window
|
||||||
@@ -105,13 +105,13 @@ patches = [
|
|||||||
# Linux: Allow creation of activatable menu windows.
|
# Linux: Allow creation of activatable menu windows.
|
||||||
# Linux: Support CefWindowDelegate::CanResize restriction by specifying
|
# Linux: Support CefWindowDelegate::CanResize restriction by specifying
|
||||||
# min/max Widget size values.
|
# min/max Widget size values.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1947
|
# https://github.com/chromiumembedded/cef/issues/1947
|
||||||
#
|
#
|
||||||
# Support configuration of RWHVGuest device scale factor.
|
# Support configuration of RWHVGuest device scale factor.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2078
|
# https://github.com/chromiumembedded/cef/issues/2078
|
||||||
#
|
#
|
||||||
# Windows: Fix focus assignment when clicking WebView with external parent.
|
# Windows: Fix focus assignment when clicking WebView with external parent.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/3031
|
# https://github.com/chromiumembedded/cef/issues/3031
|
||||||
#
|
#
|
||||||
# Fix minimize & fullscreen behavior on initial Widget creation.
|
# Fix minimize & fullscreen behavior on initial Widget creation.
|
||||||
#
|
#
|
||||||
@@ -121,27 +121,27 @@ patches = [
|
|||||||
#
|
#
|
||||||
# Windows: Fix incorrect DIPToScreenRect usage in DesktopWindowTreeHostWin
|
# Windows: Fix incorrect DIPToScreenRect usage in DesktopWindowTreeHostWin
|
||||||
# when |has_external_parent_| is true.
|
# when |has_external_parent_| is true.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/3359
|
# https://github.com/chromiumembedded/cef/issues/3359
|
||||||
'name': 'views_widget',
|
'name': 'views_widget',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Allow specification of a custom WebContentsView.
|
# Allow specification of a custom WebContentsView.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1257
|
# https://github.com/chromiumembedded/cef/issues/1257
|
||||||
#
|
#
|
||||||
# Support custom RenderWidgetHostViewOSR for BrowserPluginGuest.
|
# Support custom RenderWidgetHostViewOSR for BrowserPluginGuest.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1565
|
# https://github.com/chromiumembedded/cef/issues/1565
|
||||||
#
|
#
|
||||||
# Add WebContentsObserver::OnFrameFocused.
|
# Add WebContentsObserver::OnFrameFocused.
|
||||||
#
|
#
|
||||||
# Add WebContentsObserver::RenderWidgetCreated.
|
# Add WebContentsObserver::RenderWidgetCreated.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/3308
|
# https://github.com/chromiumembedded/cef/issues/3308
|
||||||
'name': 'web_contents_1257_1565',
|
'name': 'web_contents_1257_1565',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Support custom RenderWidgetHostViewOSR for MimeHandlerViewGuest and
|
# Support custom RenderWidgetHostViewOSR for MimeHandlerViewGuest and
|
||||||
# expose OnGuestAttached/Detached notifications.
|
# expose OnGuestAttached/Detached notifications.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1565
|
# https://github.com/chromiumembedded/cef/issues/1565
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2727
|
# https://github.com/chromiumembedded/cef/issues/2727
|
||||||
'name': 'mime_handler_view_guest_1565_2727',
|
'name': 'mime_handler_view_guest_1565_2727',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -154,21 +154,21 @@ patches = [
|
|||||||
# https://bugs.chromium.org/p/chromium/issues/detail?id=654986#c17
|
# https://bugs.chromium.org/p/chromium/issues/detail?id=654986#c17
|
||||||
#
|
#
|
||||||
# Remove DCHECK on Linux when initialized CEF from a non-main thread.
|
# Remove DCHECK on Linux when initialized CEF from a non-main thread.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issue/1639
|
# https://github.com/chromiumembedded/cef/issues/1639
|
||||||
#
|
#
|
||||||
# Fix DiscardableSharedMemoryManager crash on shutdown with multi-threaded
|
# Fix DiscardableSharedMemoryManager crash on shutdown with multi-threaded
|
||||||
# message loop.
|
# message loop.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2798
|
# https://github.com/chromiumembedded/cef/issues/2798
|
||||||
'name': 'content_main_654986',
|
'name': 'content_main_654986',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Expose the FontFamilyCache UserData key.
|
# Expose the FontFamilyCache UserData key.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1501
|
# https://github.com/chromiumembedded/cef/issues/1501
|
||||||
'name': 'font_family_cache_1501',
|
'name': 'font_family_cache_1501',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Modify views::View to extend SupportsUserData.
|
# Modify views::View to extend SupportsUserData.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1749
|
# https://github.com/chromiumembedded/cef/issues/1749
|
||||||
#
|
#
|
||||||
# Don't add TestDesktopScreenOzone dependency on Linux.
|
# Don't add TestDesktopScreenOzone dependency on Linux.
|
||||||
# Reverts ui_controls_factory_desktop_aurax11.cc (now
|
# Reverts ui_controls_factory_desktop_aurax11.cc (now
|
||||||
@@ -185,10 +185,10 @@ patches = [
|
|||||||
#
|
#
|
||||||
# Expose callbacks for mouse/keyboard events that trigger menu switching.
|
# Expose callbacks for mouse/keyboard events that trigger menu switching.
|
||||||
# Add accelerator display support to Label.
|
# Add accelerator display support to Label.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2102
|
# https://github.com/chromiumembedded/cef/issues/2102
|
||||||
#
|
#
|
||||||
# Route |parent_widget| to MenuHost for OSR context menu Widget creation.
|
# Route |parent_widget| to MenuHost for OSR context menu Widget creation.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/3330
|
# https://github.com/chromiumembedded/cef/issues/3330
|
||||||
'name': 'views_1749_2102_3330',
|
'name': 'views_1749_2102_3330',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -204,19 +204,19 @@ patches = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Changes to support the Chrome runtime in CEF.
|
# Changes to support the Chrome runtime in CEF.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2969
|
# https://github.com/chromiumembedded/cef/issues/2969
|
||||||
'name': 'chrome_runtime',
|
'name': 'chrome_runtime',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Changes to support Chrome runtime integration with CEF Views.
|
# Changes to support Chrome runtime integration with CEF Views.
|
||||||
# See related documentation in
|
# See related documentation in
|
||||||
# libcef/browser/chrome/views/chrome_browser_frame.h.
|
# libcef/browser/chrome/views/chrome_browser_frame.h.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2969
|
# https://github.com/chromiumembedded/cef/issues/2969
|
||||||
'name': 'chrome_runtime_views',
|
'name': 'chrome_runtime_views',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Changes to support the Chrome runtime in CEF.
|
# Changes to support the Chrome runtime in CEF.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2969
|
# https://github.com/chromiumembedded/cef/issues/2969
|
||||||
#
|
#
|
||||||
# Fix fatal error: 'components/printing/common/print.mojom.h' file not found
|
# Fix fatal error: 'components/printing/common/print.mojom.h' file not found
|
||||||
# From chrome/browser/ui/browser_commands.cc via
|
# From chrome/browser/ui/browser_commands.cc via
|
||||||
@@ -225,7 +225,7 @@ patches = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Don't initialize ExtensionSystemFactory when extensions are disabled.
|
# Don't initialize ExtensionSystemFactory when extensions are disabled.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2359
|
# https://github.com/chromiumembedded/cef/issues/2359
|
||||||
#
|
#
|
||||||
# Remove NOTREACHED() in GetContentSettingFromRulesImpl triggered by
|
# Remove NOTREACHED() in GetContentSettingFromRulesImpl triggered by
|
||||||
# NavigationTest.LoadCrossOriginLoadURL with the chrome runtime.
|
# NavigationTest.LoadCrossOriginLoadURL with the chrome runtime.
|
||||||
@@ -233,7 +233,7 @@ patches = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
# chrome: Support custom handling of context menus.
|
# chrome: Support custom handling of context menus.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2969
|
# https://github.com/chromiumembedded/cef/issues/2969
|
||||||
'name': 'chrome_browser_context_menus',
|
'name': 'chrome_browser_context_menus',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -241,7 +241,7 @@ patches = [
|
|||||||
# - Adds support for FileSelectHelper and SelectFileDialog interception.
|
# - Adds support for FileSelectHelper and SelectFileDialog interception.
|
||||||
# - Adds additional type filters for dialogs created via FileSelectHelper.
|
# - Adds additional type filters for dialogs created via FileSelectHelper.
|
||||||
# - Adds support for chaining PrintingContextLinux callbacks.
|
# - Adds support for chaining PrintingContextLinux callbacks.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/3314
|
# https://github.com/chromiumembedded/cef/issues/3314
|
||||||
'name': 'chrome_browser_dialogs_native',
|
'name': 'chrome_browser_dialogs_native',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -250,44 +250,44 @@ patches = [
|
|||||||
# DialogDelegate::CreateDialogWidget for CEF windowless rendering.
|
# DialogDelegate::CreateDialogWidget for CEF windowless rendering.
|
||||||
# - Support nullptr gfx::NativeWindow/gfx::NativeView dialog parent for CEF
|
# - Support nullptr gfx::NativeWindow/gfx::NativeView dialog parent for CEF
|
||||||
# windowless rendering.
|
# windowless rendering.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/3316
|
# https://github.com/chromiumembedded/cef/issues/3316
|
||||||
'name': 'chrome_browser_dialogs_widget',
|
'name': 'chrome_browser_dialogs_widget',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# chrome: Support override of ChromeMimeHandlerViewGuestDelegate.
|
# chrome: Support override of ChromeMimeHandlerViewGuestDelegate.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2969
|
# https://github.com/chromiumembedded/cef/issues/2969
|
||||||
'name': 'chrome_browser_extensions',
|
'name': 'chrome_browser_extensions',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# alloy: Disable ProxyErrorClient callbacks when extensions are disabled.
|
# alloy: Disable ProxyErrorClient callbacks when extensions are disabled.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2830
|
# https://github.com/chromiumembedded/cef/issues/2830
|
||||||
'name': 'chrome_browser_net_proxy',
|
'name': 'chrome_browser_net_proxy',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Support override of CreatePermissionPrompt.
|
# Support override of CreatePermissionPrompt.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/3352
|
# https://github.com/chromiumembedded/cef/issues/3352
|
||||||
'name': 'chrome_browser_permission_prompt',
|
'name': 'chrome_browser_permission_prompt',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# alloy: Don't initialize ExtensionSystemFactory when extensions are
|
# alloy: Don't initialize ExtensionSystemFactory when extensions are
|
||||||
# disabled.
|
# disabled.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2852
|
# https://github.com/chromiumembedded/cef/issues/2852
|
||||||
'name': 'chrome_browser_themes',
|
'name': 'chrome_browser_themes',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Make some methods of ProfileManager virtual.
|
# Make some methods of ProfileManager virtual.
|
||||||
#
|
#
|
||||||
# Don't create IdentityManager in RendererUpdater.
|
# Don't create IdentityManager in RendererUpdater.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1917
|
# https://github.com/chromiumembedded/cef/issues/1917
|
||||||
#
|
#
|
||||||
# chrome: Support CEF incognito Profiles that allow Browser creation.
|
# chrome: Support CEF incognito Profiles that allow Browser creation.
|
||||||
# chrome: Allow CEF to delay OffTheRecordProfileImpl initialization.
|
# chrome: Allow CEF to delay OffTheRecordProfileImpl initialization.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2969
|
# https://github.com/chromiumembedded/cef/issues/2969
|
||||||
'name': 'chrome_browser_profiles',
|
'name': 'chrome_browser_profiles',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# chrome: Fix assertion when clicking the incognito profile button.
|
# chrome: Fix assertion when clicking the incognito profile button.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2969
|
# https://github.com/chromiumembedded/cef/issues/2969
|
||||||
'name': 'chrome_browser_profile_menu',
|
'name': 'chrome_browser_profile_menu',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -298,7 +298,7 @@ patches = [
|
|||||||
{
|
{
|
||||||
# Support override of the User-Agent product component when NetworkService
|
# Support override of the User-Agent product component when NetworkService
|
||||||
# is enabled.
|
# is enabled.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2622
|
# https://github.com/chromiumembedded/cef/issues/2622
|
||||||
'name': 'embedder_product_override',
|
'name': 'embedder_product_override',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -314,17 +314,17 @@ patches = [
|
|||||||
{
|
{
|
||||||
# Don't create databases, blob_storage or VideoDecodeStats directories when
|
# Don't create databases, blob_storage or VideoDecodeStats directories when
|
||||||
# cache_path is empty.
|
# cache_path is empty.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2289
|
# https://github.com/chromiumembedded/cef/issues/2289
|
||||||
'name': 'storage_incognito_2289',
|
'name': 'storage_incognito_2289',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Support WebUI by removing dependency on non-NULL IOThread* object.
|
# Support WebUI by removing dependency on non-NULL IOThread* object.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2037
|
# https://github.com/chromiumembedded/cef/issues/2037
|
||||||
'name': 'webui_2037',
|
'name': 'webui_2037',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Implement breakpad/crashpad customization required by CEF.
|
# Implement breakpad/crashpad customization required by CEF.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1995
|
# https://github.com/chromiumembedded/cef/issues/1995
|
||||||
'name': 'crashpad_1995',
|
'name': 'crashpad_1995',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -337,7 +337,7 @@ patches = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Fix white flash during browser creation.
|
# Fix white flash during browser creation.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1984
|
# https://github.com/chromiumembedded/cef/issues/1984
|
||||||
#
|
#
|
||||||
# Windows: Fix crash during window creation.
|
# Windows: Fix crash during window creation.
|
||||||
# https://bugs.chromium.org/p/chromium/issues/detail?id=761389
|
# https://bugs.chromium.org/p/chromium/issues/detail?id=761389
|
||||||
@@ -354,15 +354,15 @@ patches = [
|
|||||||
# Add ContentRendererClient::DevToolsAgent[Attached|Detached] methods.
|
# Add ContentRendererClient::DevToolsAgent[Attached|Detached] methods.
|
||||||
#
|
#
|
||||||
# Always return the Chrome product value for DevTools.
|
# Always return the Chrome product value for DevTools.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2300
|
# https://github.com/chromiumembedded/cef/issues/2300
|
||||||
#
|
#
|
||||||
# Add new ContentBrowserClient::HandleExternalProtocol variant for use with
|
# Add new ContentBrowserClient::HandleExternalProtocol variant for use with
|
||||||
# the NetworkService.
|
# the NetworkService.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2622
|
# https://github.com/chromiumembedded/cef/issues/2622
|
||||||
#
|
#
|
||||||
# Change ContentBrowserClient::ConfigureNetworkContextParams return type to
|
# Change ContentBrowserClient::ConfigureNetworkContextParams return type to
|
||||||
# bool to support cancellation of NetworkContext creation during shutdown.
|
# bool to support cancellation of NetworkContext creation during shutdown.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2985
|
# https://github.com/chromiumembedded/cef/issues/2985
|
||||||
'name': 'content_2015',
|
'name': 'content_2015',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -371,18 +371,18 @@ patches = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Linux: Attach routing IDs to PrintingContext.
|
# Linux: Attach routing IDs to PrintingContext.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2196
|
# https://github.com/chromiumembedded/cef/issues/2196
|
||||||
'name': 'printing_context_2196',
|
'name': 'printing_context_2196',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Windows: Remove llvmlibthin as the combine_libs.py can't handle those.
|
# Windows: Remove llvmlibthin as the combine_libs.py can't handle those.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2470
|
# https://github.com/chromiumembedded/cef/issues/2470
|
||||||
'name': 'build',
|
'name': 'build',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Changes necessary to support chrome extensions. Add a new
|
# Changes necessary to support chrome extensions. Add a new
|
||||||
# ExtensionHost constructor that allows CEF to create the WebContents.
|
# ExtensionHost constructor that allows CEF to create the WebContents.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1947
|
# https://github.com/chromiumembedded/cef/issues/1947
|
||||||
#
|
#
|
||||||
# Don't initialize PrerenderContents object in StreamsPrivateAPI.
|
# Don't initialize PrerenderContents object in StreamsPrivateAPI.
|
||||||
#
|
#
|
||||||
@@ -392,7 +392,7 @@ patches = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
# macOS: Fix undesirable switch to discrete GPU during startup.
|
# macOS: Fix undesirable switch to discrete GPU during startup.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2398
|
# https://github.com/chromiumembedded/cef/issues/2398
|
||||||
#
|
#
|
||||||
# macOS: Rely on symlinks to find the Libraries directory.
|
# macOS: Rely on symlinks to find the Libraries directory.
|
||||||
# https://bugs.chromium.org/p/chromium/issues/detail?id=757974#c23
|
# https://bugs.chromium.org/p/chromium/issues/detail?id=757974#c23
|
||||||
@@ -400,28 +400,28 @@ patches = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
# macOS: Make the NativeEventProcessor protocol dependency optional.
|
# macOS: Make the NativeEventProcessor protocol dependency optional.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2539
|
# https://github.com/chromiumembedded/cef/issues/2539
|
||||||
'name': 'mac_event_observer_2539',
|
'name': 'mac_event_observer_2539',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# macOS: Fix crash when scrolling in OSR mode.
|
# macOS: Fix crash when scrolling in OSR mode.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2540
|
# https://github.com/chromiumembedded/cef/issues/2540
|
||||||
'name': 'mac_fling_scheduler_2540',
|
'name': 'mac_fling_scheduler_2540',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Allow ResourceBundle creation/destruction on the main thread and usage on
|
# Allow ResourceBundle creation/destruction on the main thread and usage on
|
||||||
# the UI thread.
|
# the UI thread.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2398
|
# https://github.com/chromiumembedded/cef/issues/2398
|
||||||
'name': 'resource_bundle_2512',
|
'name': 'resource_bundle_2512',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# macOS: Fix crash when showing a select popup with CefDoMessageLoopWork.
|
# macOS: Fix crash when showing a select popup with CefDoMessageLoopWork.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2495
|
# https://github.com/chromiumembedded/cef/issues/2495
|
||||||
'name': 'message_pump_mac_2495',
|
'name': 'message_pump_mac_2495',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Linux: Load binaries from DIR_ASSETS.
|
# Linux: Load binaries from DIR_ASSETS.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1936
|
# https://github.com/chromiumembedded/cef/issues/1936
|
||||||
'name': 'linux_assets_path_1936',
|
'name': 'linux_assets_path_1936',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -432,7 +432,7 @@ patches = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Linux: Avoid usage of chrome::FILE_COMPONENT_WIDEVINE_CDM_HINT.
|
# Linux: Avoid usage of chrome::FILE_COMPONENT_WIDEVINE_CDM_HINT.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/3149
|
# https://github.com/chromiumembedded/cef/issues/3149
|
||||||
'name': 'linux_chrome_widevine_3149',
|
'name': 'linux_chrome_widevine_3149',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -440,21 +440,21 @@ patches = [
|
|||||||
# - Add support for calling CookieMonster::SetCookieableSchemes.
|
# - Add support for calling CookieMonster::SetCookieableSchemes.
|
||||||
# - Fix cache directory structure ("C:\temp\cache\cache\Cache" should be
|
# - Fix cache directory structure ("C:\temp\cache\cache\Cache" should be
|
||||||
# "C:\temp\cache\Cache").
|
# "C:\temp\cache\Cache").
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2622
|
# https://github.com/chromiumembedded/cef/issues/2622
|
||||||
#
|
#
|
||||||
# alloy: Avoid initialization of privacy sandbox and identity manager.
|
# alloy: Avoid initialization of privacy sandbox and identity manager.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/3434
|
# https://github.com/chromiumembedded/cef/issues/3434
|
||||||
'name': 'services_network_2622',
|
'name': 'services_network_2622',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Enhancements to NetworkService:
|
# Enhancements to NetworkService:
|
||||||
# - Remove the non-nullptr WebContents requirement from
|
# - Remove the non-nullptr WebContents requirement from
|
||||||
# NetworkServiceClient::OnAuthRequired.
|
# NetworkServiceClient::OnAuthRequired.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2718
|
# https://github.com/chromiumembedded/cef/issues/2718
|
||||||
#
|
#
|
||||||
# Change ContentBrowserClient::ConfigureNetworkContextParams return type to
|
# Change ContentBrowserClient::ConfigureNetworkContextParams return type to
|
||||||
# bool to support cancellation of NetworkContext creation during shutdown.
|
# bool to support cancellation of NetworkContext creation during shutdown.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2985
|
# https://github.com/chromiumembedded/cef/issues/2985
|
||||||
#
|
#
|
||||||
# Compute correct default quota when cache_path is unspecified.
|
# Compute correct default quota when cache_path is unspecified.
|
||||||
'name': 'services_network_2718',
|
'name': 'services_network_2718',
|
||||||
@@ -503,7 +503,7 @@ patches = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Add support for OSR rendering with Viz.
|
# Add support for OSR rendering with Viz.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2575
|
# https://github.com/chromiumembedded/cef/issues/2575
|
||||||
'name': 'viz_osr_2575',
|
'name': 'viz_osr_2575',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -513,17 +513,17 @@ patches = [
|
|||||||
# - Remove unsupported print preview UI options.
|
# - Remove unsupported print preview UI options.
|
||||||
# - macOS: Fix error: no member named 'kCloudPrinterHandler' in namespace
|
# - macOS: Fix error: no member named 'kCloudPrinterHandler' in namespace
|
||||||
# 'printing::features',
|
# 'printing::features',
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/123
|
# https://github.com/chromiumembedded/cef/issues/123
|
||||||
'name': 'print_preview_123',
|
'name': 'print_preview_123',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Store command-line switch names as lower-case ASCII on all platforms.
|
# Store command-line switch names as lower-case ASCII on all platforms.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1872
|
# https://github.com/chromiumembedded/cef/issues/1872
|
||||||
'name': 'base_command_line_1872',
|
'name': 'base_command_line_1872',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Remove cef_sandbox dependency on boringssl functions.
|
# Remove cef_sandbox dependency on boringssl functions.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2743
|
# https://github.com/chromiumembedded/cef/issues/2743
|
||||||
#
|
#
|
||||||
# Enable the VS 2015 Update 2 fix when building with the MSVC standard
|
# Enable the VS 2015 Update 2 fix when building with the MSVC standard
|
||||||
# library.
|
# library.
|
||||||
@@ -537,13 +537,13 @@ patches = [
|
|||||||
{
|
{
|
||||||
# Add RenderWidgetHostImpl::SetCompositorForFlingScheduler to fix fling
|
# Add RenderWidgetHostImpl::SetCompositorForFlingScheduler to fix fling
|
||||||
# scrolling in OSR mode.
|
# scrolling in OSR mode.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2745
|
# https://github.com/chromiumembedded/cef/issues/2745
|
||||||
'name': 'osr_fling_2745',
|
'name': 'osr_fling_2745',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Windows: Build targets as C++17 to avoid export of std::is_integral
|
# Windows: Build targets as C++17 to avoid export of std::is_integral
|
||||||
# templates in cef_sandbox that should be inlined.
|
# templates in cef_sandbox that should be inlined.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2819
|
# https://github.com/chromiumembedded/cef/issues/2819
|
||||||
'name': 'win_cpp17_msvc_sandbox_2819',
|
'name': 'win_cpp17_msvc_sandbox_2819',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -563,7 +563,7 @@ patches = [
|
|||||||
#
|
#
|
||||||
# Fix crash in NavigationRequest::GetOriginForURLLoaderFactory() when
|
# Fix crash in NavigationRequest::GetOriginForURLLoaderFactory() when
|
||||||
# navigating to an unregistered (e.g. non-standard) scheme.
|
# navigating to an unregistered (e.g. non-standard) scheme.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/3105
|
# https://github.com/chromiumembedded/cef/issues/3105
|
||||||
'name': 'browser_security_policy_1081397',
|
'name': 'browser_security_policy_1081397',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -571,7 +571,7 @@ patches = [
|
|||||||
# https://bugs.chromium.org/p/chromium/issues/detail?id=1100085
|
# https://bugs.chromium.org/p/chromium/issues/detail?id=1100085
|
||||||
#
|
#
|
||||||
# Changes to support the Chrome runtime in CEF (app_controller_mac.mm).
|
# Changes to support the Chrome runtime in CEF (app_controller_mac.mm).
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2969
|
# https://github.com/chromiumembedded/cef/issues/2969
|
||||||
'name': 'chrome_browser_background_mode_1100085',
|
'name': 'chrome_browser_background_mode_1100085',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -581,12 +581,12 @@ patches = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Windows: Fix crash when |sandbox_info| parameter is nullptr.
|
# Windows: Fix crash when |sandbox_info| parameter is nullptr.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/3210
|
# https://github.com/chromiumembedded/cef/issues/3210
|
||||||
'name': 'win_sandbox_3210',
|
'name': 'win_sandbox_3210',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Windows: Always use the root window as the owner for shell dialogs.
|
# Windows: Always use the root window as the owner for shell dialogs.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/3294
|
# https://github.com/chromiumembedded/cef/issues/3294
|
||||||
'name': 'win_shell_dialogs_3294',
|
'name': 'win_shell_dialogs_3294',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -596,7 +596,7 @@ patches = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Linux: Support chaining of PrintingContextLinux callbacks.
|
# Linux: Support chaining of PrintingContextLinux callbacks.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/3314
|
# https://github.com/chromiumembedded/cef/issues/3314
|
||||||
# Also reverts the changes from https://crrev.com/db245883e1
|
# Also reverts the changes from https://crrev.com/db245883e1
|
||||||
'name': 'linux_printing_context',
|
'name': 'linux_printing_context',
|
||||||
},
|
},
|
||||||
|
@@ -20,10 +20,10 @@ index 4dbf8a2811c9e..917b6a2e7b56f 100644
|
|||||||
|
|
||||||
// Make an exception to allow most visited tiles to commit in
|
// Make an exception to allow most visited tiles to commit in
|
||||||
diff --git content/browser/renderer_host/navigation_request.cc content/browser/renderer_host/navigation_request.cc
|
diff --git content/browser/renderer_host/navigation_request.cc content/browser/renderer_host/navigation_request.cc
|
||||||
index 76c8470dfd3e5..9ab6ce0759c9a 100644
|
index 4b552797303b8..0e39c982b5803 100644
|
||||||
--- content/browser/renderer_host/navigation_request.cc
|
--- content/browser/renderer_host/navigation_request.cc
|
||||||
+++ content/browser/renderer_host/navigation_request.cc
|
+++ content/browser/renderer_host/navigation_request.cc
|
||||||
@@ -6936,10 +6936,22 @@ NavigationRequest::GetOriginForURLLoaderFactoryBeforeResponseWithDebugInfo(
|
@@ -6942,10 +6942,22 @@ NavigationRequest::GetOriginForURLLoaderFactoryBeforeResponseWithDebugInfo(
|
||||||
bool use_opaque_origin =
|
bool use_opaque_origin =
|
||||||
(sandbox_flags & network::mojom::WebSandboxFlags::kOrigin) ==
|
(sandbox_flags & network::mojom::WebSandboxFlags::kOrigin) ==
|
||||||
network::mojom::WebSandboxFlags::kOrigin;
|
network::mojom::WebSandboxFlags::kOrigin;
|
||||||
@@ -47,7 +47,7 @@ index 76c8470dfd3e5..9ab6ce0759c9a 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
return origin_and_debug_info;
|
return origin_and_debug_info;
|
||||||
@@ -6969,6 +6981,15 @@ NavigationRequest::GetOriginForURLLoaderFactoryAfterResponseWithDebugInfo() {
|
@@ -6975,6 +6987,15 @@ NavigationRequest::GetOriginForURLLoaderFactoryAfterResponseWithDebugInfo() {
|
||||||
GetOriginForURLLoaderFactoryBeforeResponseWithDebugInfo(
|
GetOriginForURLLoaderFactoryBeforeResponseWithDebugInfo(
|
||||||
SandboxFlagsToCommit());
|
SandboxFlagsToCommit());
|
||||||
|
|
||||||
|
@@ -70,7 +70,7 @@ index 03a6d3a2ee5e8..a19224279243c 100644
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
diff --git chrome/browser/ui/browser.cc chrome/browser/ui/browser.cc
|
diff --git chrome/browser/ui/browser.cc chrome/browser/ui/browser.cc
|
||||||
index 08ac5f0afd874..480986df48aa6 100644
|
index 13a07ce16ad4f..66ae1d0afba7d 100644
|
||||||
--- chrome/browser/ui/browser.cc
|
--- chrome/browser/ui/browser.cc
|
||||||
+++ chrome/browser/ui/browser.cc
|
+++ chrome/browser/ui/browser.cc
|
||||||
@@ -264,6 +264,25 @@
|
@@ -264,6 +264,25 @@
|
||||||
@@ -113,7 +113,7 @@ index 08ac5f0afd874..480986df48aa6 100644
|
|||||||
location_bar_model_ = std::make_unique<LocationBarModelImpl>(
|
location_bar_model_ = std::make_unique<LocationBarModelImpl>(
|
||||||
location_bar_model_delegate_.get(), content::kMaxURLDisplayChars);
|
location_bar_model_delegate_.get(), content::kMaxURLDisplayChars);
|
||||||
|
|
||||||
@@ -650,6 +676,12 @@ Browser::~Browser() {
|
@@ -649,6 +675,12 @@ Browser::~Browser() {
|
||||||
// away so they don't try and call back to us.
|
// away so they don't try and call back to us.
|
||||||
if (select_file_dialog_.get())
|
if (select_file_dialog_.get())
|
||||||
select_file_dialog_->ListenerDestroyed();
|
select_file_dialog_->ListenerDestroyed();
|
||||||
@@ -126,7 +126,7 @@ index 08ac5f0afd874..480986df48aa6 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -1359,6 +1391,14 @@ content::KeyboardEventProcessingResult Browser::PreHandleKeyboardEvent(
|
@@ -1358,6 +1390,14 @@ content::KeyboardEventProcessingResult Browser::PreHandleKeyboardEvent(
|
||||||
if (exclusive_access_manager_->HandleUserKeyEvent(event))
|
if (exclusive_access_manager_->HandleUserKeyEvent(event))
|
||||||
return content::KeyboardEventProcessingResult::HANDLED;
|
return content::KeyboardEventProcessingResult::HANDLED;
|
||||||
|
|
||||||
@@ -141,7 +141,7 @@ index 08ac5f0afd874..480986df48aa6 100644
|
|||||||
return window()->PreHandleKeyboardEvent(event);
|
return window()->PreHandleKeyboardEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1366,8 +1406,18 @@ bool Browser::HandleKeyboardEvent(content::WebContents* source,
|
@@ -1365,8 +1405,18 @@ bool Browser::HandleKeyboardEvent(content::WebContents* source,
|
||||||
const NativeWebKeyboardEvent& event) {
|
const NativeWebKeyboardEvent& event) {
|
||||||
DevToolsWindow* devtools_window =
|
DevToolsWindow* devtools_window =
|
||||||
DevToolsWindow::GetInstanceForInspectedWebContents(source);
|
DevToolsWindow::GetInstanceForInspectedWebContents(source);
|
||||||
@@ -162,7 +162,7 @@ index 08ac5f0afd874..480986df48aa6 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Browser::TabsNeedBeforeUnloadFired() {
|
bool Browser::TabsNeedBeforeUnloadFired() {
|
||||||
@@ -1575,6 +1625,14 @@ WebContents* Browser::OpenURLFromTab(WebContents* source,
|
@@ -1574,6 +1624,14 @@ WebContents* Browser::OpenURLFromTab(WebContents* source,
|
||||||
return window->OpenURLFromTab(source, params);
|
return window->OpenURLFromTab(source, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,23 +177,7 @@ index 08ac5f0afd874..480986df48aa6 100644
|
|||||||
NavigateParams nav_params(this, params.url, params.transition);
|
NavigateParams nav_params(this, params.url, params.transition);
|
||||||
nav_params.FillNavigateParamsFromOpenURLParams(params);
|
nav_params.FillNavigateParamsFromOpenURLParams(params);
|
||||||
nav_params.source_contents = source;
|
nav_params.source_contents = source;
|
||||||
@@ -1712,6 +1770,15 @@ void Browser::AddNewContents(
|
@@ -1729,6 +1787,8 @@ void Browser::LoadingStateChanged(WebContents* source,
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
+#if BUILDFLAG(ENABLE_CEF)
|
|
||||||
+ if (cef_browser_delegate_) {
|
|
||||||
+ cef_browser_delegate_->AddNewContents(
|
|
||||||
+ source, std::move(new_contents), target_url, disposition,
|
|
||||||
+ window_features, user_gesture, was_blocked);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
chrome::AddWebContents(this, source, std::move(new_contents), target_url,
|
|
||||||
disposition, window_features, window_action);
|
|
||||||
}
|
|
||||||
@@ -1730,6 +1797,8 @@ void Browser::LoadingStateChanged(WebContents* source,
|
|
||||||
bool should_show_loading_ui) {
|
bool should_show_loading_ui) {
|
||||||
ScheduleUIUpdate(source, content::INVALIDATE_TYPE_LOAD);
|
ScheduleUIUpdate(source, content::INVALIDATE_TYPE_LOAD);
|
||||||
UpdateWindowForLoadingStateChanged(source, should_show_loading_ui);
|
UpdateWindowForLoadingStateChanged(source, should_show_loading_ui);
|
||||||
@@ -202,7 +186,7 @@ index 08ac5f0afd874..480986df48aa6 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Browser::CloseContents(WebContents* source) {
|
void Browser::CloseContents(WebContents* source) {
|
||||||
@@ -1757,6 +1826,8 @@ void Browser::SetContentsBounds(WebContents* source, const gfx::Rect& bounds) {
|
@@ -1756,6 +1816,8 @@ void Browser::SetContentsBounds(WebContents* source, const gfx::Rect& bounds) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Browser::UpdateTargetURL(WebContents* source, const GURL& url) {
|
void Browser::UpdateTargetURL(WebContents* source, const GURL& url) {
|
||||||
@@ -211,7 +195,7 @@ index 08ac5f0afd874..480986df48aa6 100644
|
|||||||
if (!GetStatusBubble())
|
if (!GetStatusBubble())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -1764,6 +1835,17 @@ void Browser::UpdateTargetURL(WebContents* source, const GURL& url) {
|
@@ -1763,6 +1825,17 @@ void Browser::UpdateTargetURL(WebContents* source, const GURL& url) {
|
||||||
GetStatusBubble()->SetURL(url);
|
GetStatusBubble()->SetURL(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -229,7 +213,7 @@ index 08ac5f0afd874..480986df48aa6 100644
|
|||||||
void Browser::ContentsMouseEvent(WebContents* source,
|
void Browser::ContentsMouseEvent(WebContents* source,
|
||||||
bool motion,
|
bool motion,
|
||||||
bool exited) {
|
bool exited) {
|
||||||
@@ -1788,6 +1870,19 @@ bool Browser::TakeFocus(content::WebContents* source, bool reverse) {
|
@@ -1787,6 +1860,19 @@ bool Browser::TakeFocus(content::WebContents* source, bool reverse) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -249,7 +233,7 @@ index 08ac5f0afd874..480986df48aa6 100644
|
|||||||
void Browser::BeforeUnloadFired(WebContents* web_contents,
|
void Browser::BeforeUnloadFired(WebContents* web_contents,
|
||||||
bool proceed,
|
bool proceed,
|
||||||
bool* proceed_to_fire_unload) {
|
bool* proceed_to_fire_unload) {
|
||||||
@@ -1880,6 +1975,10 @@ void Browser::WebContentsCreated(WebContents* source_contents,
|
@@ -1879,6 +1965,10 @@ void Browser::WebContentsCreated(WebContents* source_contents,
|
||||||
|
|
||||||
// Make the tab show up in the task manager.
|
// Make the tab show up in the task manager.
|
||||||
task_manager::WebContentsTags::CreateForTabContents(new_contents);
|
task_manager::WebContentsTags::CreateForTabContents(new_contents);
|
||||||
@@ -260,7 +244,7 @@ index 08ac5f0afd874..480986df48aa6 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Browser::PortalWebContentsCreated(WebContents* portal_web_contents) {
|
void Browser::PortalWebContentsCreated(WebContents* portal_web_contents) {
|
||||||
@@ -1991,11 +2090,15 @@ void Browser::EnterFullscreenModeForTab(
|
@@ -1990,11 +2080,15 @@ void Browser::EnterFullscreenModeForTab(
|
||||||
const blink::mojom::FullscreenOptions& options) {
|
const blink::mojom::FullscreenOptions& options) {
|
||||||
exclusive_access_manager_->fullscreen_controller()->EnterFullscreenModeForTab(
|
exclusive_access_manager_->fullscreen_controller()->EnterFullscreenModeForTab(
|
||||||
requesting_frame, options.display_id);
|
requesting_frame, options.display_id);
|
||||||
@@ -276,7 +260,7 @@ index 08ac5f0afd874..480986df48aa6 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Browser::IsFullscreenForTabOrPending(const WebContents* web_contents) {
|
bool Browser::IsFullscreenForTabOrPending(const WebContents* web_contents) {
|
||||||
@@ -2189,6 +2292,15 @@ void Browser::RequestMediaAccessPermission(
|
@@ -2188,6 +2282,15 @@ void Browser::RequestMediaAccessPermission(
|
||||||
content::WebContents* web_contents,
|
content::WebContents* web_contents,
|
||||||
const content::MediaStreamRequest& request,
|
const content::MediaStreamRequest& request,
|
||||||
content::MediaResponseCallback callback) {
|
content::MediaResponseCallback callback) {
|
||||||
@@ -292,7 +276,7 @@ index 08ac5f0afd874..480986df48aa6 100644
|
|||||||
const extensions::Extension* extension =
|
const extensions::Extension* extension =
|
||||||
GetExtensionForOrigin(profile_, request.security_origin);
|
GetExtensionForOrigin(profile_, request.security_origin);
|
||||||
MediaCaptureDevicesDispatcher::GetInstance()->ProcessMediaAccessRequest(
|
MediaCaptureDevicesDispatcher::GetInstance()->ProcessMediaAccessRequest(
|
||||||
@@ -2725,13 +2837,20 @@ void Browser::RemoveScheduledUpdatesFor(WebContents* contents) {
|
@@ -2724,13 +2827,20 @@ void Browser::RemoveScheduledUpdatesFor(WebContents* contents) {
|
||||||
// Browser, Getters for UI (private):
|
// Browser, Getters for UI (private):
|
||||||
|
|
||||||
StatusBubble* Browser::GetStatusBubble() {
|
StatusBubble* Browser::GetStatusBubble() {
|
||||||
@@ -314,7 +298,7 @@ index 08ac5f0afd874..480986df48aa6 100644
|
|||||||
return window_ ? window_->GetStatusBubble() : nullptr;
|
return window_ ? window_->GetStatusBubble() : nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2863,6 +2982,8 @@ void Browser::SetAsDelegate(WebContents* web_contents, bool set_delegate) {
|
@@ -2862,6 +2972,8 @@ void Browser::SetAsDelegate(WebContents* web_contents, bool set_delegate) {
|
||||||
BookmarkTabHelper::FromWebContents(web_contents)->RemoveObserver(this);
|
BookmarkTabHelper::FromWebContents(web_contents)->RemoveObserver(this);
|
||||||
web_contents_collection_.StopObserving(web_contents);
|
web_contents_collection_.StopObserving(web_contents);
|
||||||
}
|
}
|
||||||
@@ -324,7 +308,7 @@ index 08ac5f0afd874..480986df48aa6 100644
|
|||||||
|
|
||||||
void Browser::TabDetachedAtImpl(content::WebContents* contents,
|
void Browser::TabDetachedAtImpl(content::WebContents* contents,
|
||||||
diff --git chrome/browser/ui/browser.h chrome/browser/ui/browser.h
|
diff --git chrome/browser/ui/browser.h chrome/browser/ui/browser.h
|
||||||
index 08879ac2f134a..cdd6615f72db4 100644
|
index 10105dd979aa4..9277cd507ae8e 100644
|
||||||
--- chrome/browser/ui/browser.h
|
--- chrome/browser/ui/browser.h
|
||||||
+++ chrome/browser/ui/browser.h
|
+++ chrome/browser/ui/browser.h
|
||||||
@@ -22,6 +22,7 @@
|
@@ -22,6 +22,7 @@
|
||||||
@@ -347,7 +331,7 @@ index 08879ac2f134a..cdd6615f72db4 100644
|
|||||||
#error This file should only be included on desktop.
|
#error This file should only be included on desktop.
|
||||||
#endif
|
#endif
|
||||||
@@ -315,6 +320,11 @@ class Browser : public TabStripModelObserver,
|
@@ -315,6 +320,11 @@ class Browser : public TabStripModelObserver,
|
||||||
float initial_aspect_ratio = 1.0f;
|
double initial_aspect_ratio = 1.0;
|
||||||
bool lock_aspect_ratio = false;
|
bool lock_aspect_ratio = false;
|
||||||
|
|
||||||
+#if BUILDFLAG(ENABLE_CEF)
|
+#if BUILDFLAG(ENABLE_CEF)
|
||||||
@@ -426,10 +410,10 @@ index 08879ac2f134a..cdd6615f72db4 100644
|
|||||||
|
|
||||||
// The opener browser of the document picture-in-picture browser. Null if the
|
// The opener browser of the document picture-in-picture browser. Null if the
|
||||||
diff --git chrome/browser/ui/browser_navigator.cc chrome/browser/ui/browser_navigator.cc
|
diff --git chrome/browser/ui/browser_navigator.cc chrome/browser/ui/browser_navigator.cc
|
||||||
index f6df2d49dc719..01e5e7a42fa96 100644
|
index dda3f5ba7f9a3..67b0eaaddfd3b 100644
|
||||||
--- chrome/browser/ui/browser_navigator.cc
|
--- chrome/browser/ui/browser_navigator.cc
|
||||||
+++ chrome/browser/ui/browser_navigator.cc
|
+++ chrome/browser/ui/browser_navigator.cc
|
||||||
@@ -565,6 +565,13 @@ std::unique_ptr<content::WebContents> CreateTargetContents(
|
@@ -534,6 +534,13 @@ std::unique_ptr<content::WebContents> CreateTargetContents(
|
||||||
std::unique_ptr<WebContents> target_contents =
|
std::unique_ptr<WebContents> target_contents =
|
||||||
WebContents::Create(create_params);
|
WebContents::Create(create_params);
|
||||||
|
|
||||||
@@ -444,7 +428,7 @@ index f6df2d49dc719..01e5e7a42fa96 100644
|
|||||||
// tab helpers, so the entire set of tab helpers needs to be set up
|
// tab helpers, so the entire set of tab helpers needs to be set up
|
||||||
// immediately.
|
// immediately.
|
||||||
diff --git chrome/browser/ui/browser_tabstrip.cc chrome/browser/ui/browser_tabstrip.cc
|
diff --git chrome/browser/ui/browser_tabstrip.cc chrome/browser/ui/browser_tabstrip.cc
|
||||||
index a3dbf97b6f943..6d8e521e9f189 100644
|
index a3dbf97b6f943..799a64e17fca5 100644
|
||||||
--- chrome/browser/ui/browser_tabstrip.cc
|
--- chrome/browser/ui/browser_tabstrip.cc
|
||||||
+++ chrome/browser/ui/browser_tabstrip.cc
|
+++ chrome/browser/ui/browser_tabstrip.cc
|
||||||
@@ -33,9 +33,13 @@ void AddTabAt(Browser* browser,
|
@@ -33,9 +33,13 @@ void AddTabAt(Browser* browser,
|
||||||
@@ -462,3 +446,20 @@ index a3dbf97b6f943..6d8e521e9f189 100644
|
|||||||
params.disposition = foreground ? WindowOpenDisposition::NEW_FOREGROUND_TAB
|
params.disposition = foreground ? WindowOpenDisposition::NEW_FOREGROUND_TAB
|
||||||
: WindowOpenDisposition::NEW_BACKGROUND_TAB;
|
: WindowOpenDisposition::NEW_BACKGROUND_TAB;
|
||||||
params.tabstrip_index = idx;
|
params.tabstrip_index = idx;
|
||||||
|
@@ -71,6 +75,16 @@ void AddWebContents(Browser* browser,
|
||||||
|
// Can't create a new contents for the current tab - invalid case.
|
||||||
|
DCHECK(disposition != WindowOpenDisposition::CURRENT_TAB);
|
||||||
|
|
||||||
|
+#if BUILDFLAG(ENABLE_CEF)
|
||||||
|
+ if (browser && browser->cef_delegate() && new_contents) {
|
||||||
|
+ new_contents = browser->cef_delegate()->AddWebContents(
|
||||||
|
+ std::move(new_contents));
|
||||||
|
+ if (!new_contents) {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
NavigateParams params(browser, std::move(new_contents));
|
||||||
|
params.source_contents = source_contents;
|
||||||
|
params.url = target_url;
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
diff --git chrome/browser/renderer_context_menu/render_view_context_menu.cc chrome/browser/renderer_context_menu/render_view_context_menu.cc
|
diff --git chrome/browser/renderer_context_menu/render_view_context_menu.cc chrome/browser/renderer_context_menu/render_view_context_menu.cc
|
||||||
index c3350ad6f9d34..851eb1cfed65b 100644
|
index 320f0cbcd14f9..b199f7a33e6d1 100644
|
||||||
--- chrome/browser/renderer_context_menu/render_view_context_menu.cc
|
--- chrome/browser/renderer_context_menu/render_view_context_menu.cc
|
||||||
+++ chrome/browser/renderer_context_menu/render_view_context_menu.cc
|
+++ chrome/browser/renderer_context_menu/render_view_context_menu.cc
|
||||||
@@ -313,6 +313,13 @@ base::OnceCallback<void(RenderViewContextMenu*)>* GetMenuShownCallback() {
|
@@ -313,6 +313,13 @@ base::OnceCallback<void(RenderViewContextMenu*)>* GetMenuShownCallback() {
|
||||||
|
@@ -44,7 +44,7 @@ index 16107572d4d0d..409e9ea870482 100644
|
|||||||
base::FeatureList::IsEnabled(
|
base::FeatureList::IsEnabled(
|
||||||
features::kPeriodicSyncPermissionForDefaultSearchEngine) &&
|
features::kPeriodicSyncPermissionForDefaultSearchEngine) &&
|
||||||
diff --git chrome/browser/permissions/chrome_permissions_client.cc chrome/browser/permissions/chrome_permissions_client.cc
|
diff --git chrome/browser/permissions/chrome_permissions_client.cc chrome/browser/permissions/chrome_permissions_client.cc
|
||||||
index faa6ee8eb3dbc..4cf7c6959c7e6 100644
|
index d0d4fd4f7925b..0755927b00e2c 100644
|
||||||
--- chrome/browser/permissions/chrome_permissions_client.cc
|
--- chrome/browser/permissions/chrome_permissions_client.cc
|
||||||
+++ chrome/browser/permissions/chrome_permissions_client.cc
|
+++ chrome/browser/permissions/chrome_permissions_client.cc
|
||||||
@@ -14,6 +14,7 @@
|
@@ -14,6 +14,7 @@
|
||||||
@@ -65,7 +65,7 @@ index faa6ee8eb3dbc..4cf7c6959c7e6 100644
|
|||||||
return site_engagement::SiteEngagementService::Get(
|
return site_engagement::SiteEngagementService::Get(
|
||||||
Profile::FromBrowserContext(browser_context))
|
Profile::FromBrowserContext(browser_context))
|
||||||
->GetScore(origin);
|
->GetScore(origin);
|
||||||
@@ -320,8 +324,10 @@ ChromePermissionsClient::CreatePermissionUiSelectors(
|
@@ -321,8 +325,10 @@ ChromePermissionsClient::CreatePermissionUiSelectors(
|
||||||
std::make_unique<ContextualNotificationPermissionUiSelector>());
|
std::make_unique<ContextualNotificationPermissionUiSelector>());
|
||||||
selectors.emplace_back(std::make_unique<PrefNotificationPermissionUiSelector>(
|
selectors.emplace_back(std::make_unique<PrefNotificationPermissionUiSelector>(
|
||||||
Profile::FromBrowserContext(browser_context)));
|
Profile::FromBrowserContext(browser_context)));
|
||||||
|
@@ -211,7 +211,7 @@ index 194833d0bae43..21564d96466c0 100644
|
|||||||
+#endif
|
+#endif
|
||||||
}
|
}
|
||||||
diff --git chrome/browser/chrome_content_browser_client.cc chrome/browser/chrome_content_browser_client.cc
|
diff --git chrome/browser/chrome_content_browser_client.cc chrome/browser/chrome_content_browser_client.cc
|
||||||
index 95fc727fe36b7..06e56e9525a84 100644
|
index 6170a5656eb83..8d4ae07b4fd58 100644
|
||||||
--- chrome/browser/chrome_content_browser_client.cc
|
--- chrome/browser/chrome_content_browser_client.cc
|
||||||
+++ chrome/browser/chrome_content_browser_client.cc
|
+++ chrome/browser/chrome_content_browser_client.cc
|
||||||
@@ -36,6 +36,7 @@
|
@@ -36,6 +36,7 @@
|
||||||
@@ -255,7 +255,7 @@ index 95fc727fe36b7..06e56e9525a84 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
base::FilePath ChromeContentBrowserClient::GetDefaultDownloadDirectory() {
|
base::FilePath ChromeContentBrowserClient::GetDefaultDownloadDirectory() {
|
||||||
@@ -6157,7 +6167,7 @@ void ChromeContentBrowserClient::OnNetworkServiceCreated(
|
@@ -6159,7 +6169,7 @@ void ChromeContentBrowserClient::OnNetworkServiceCreated(
|
||||||
network_service);
|
network_service);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -264,7 +264,7 @@ index 95fc727fe36b7..06e56e9525a84 100644
|
|||||||
content::BrowserContext* context,
|
content::BrowserContext* context,
|
||||||
bool in_memory,
|
bool in_memory,
|
||||||
const base::FilePath& relative_partition_path,
|
const base::FilePath& relative_partition_path,
|
||||||
@@ -6175,6 +6185,8 @@ void ChromeContentBrowserClient::ConfigureNetworkContextParams(
|
@@ -6177,6 +6187,8 @@ void ChromeContentBrowserClient::ConfigureNetworkContextParams(
|
||||||
network_context_params->user_agent = GetUserAgentBasedOnPolicy(context);
|
network_context_params->user_agent = GetUserAgentBasedOnPolicy(context);
|
||||||
network_context_params->accept_language = GetApplicationLocale();
|
network_context_params->accept_language = GetApplicationLocale();
|
||||||
}
|
}
|
||||||
@@ -273,7 +273,7 @@ index 95fc727fe36b7..06e56e9525a84 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::vector<base::FilePath>
|
std::vector<base::FilePath>
|
||||||
@@ -7081,10 +7093,10 @@ void ChromeContentBrowserClient::OnKeepaliveRequestStarted(
|
@@ -7083,10 +7095,10 @@ void ChromeContentBrowserClient::OnKeepaliveRequestStarted(
|
||||||
const auto now = base::TimeTicks::Now();
|
const auto now = base::TimeTicks::Now();
|
||||||
const auto timeout = GetKeepaliveTimerTimeout(context);
|
const auto timeout = GetKeepaliveTimerTimeout(context);
|
||||||
keepalive_deadline_ = std::max(keepalive_deadline_, now + timeout);
|
keepalive_deadline_ = std::max(keepalive_deadline_, now + timeout);
|
||||||
@@ -286,7 +286,7 @@ index 95fc727fe36b7..06e56e9525a84 100644
|
|||||||
FROM_HERE, keepalive_deadline_ - now,
|
FROM_HERE, keepalive_deadline_ - now,
|
||||||
base::BindOnce(
|
base::BindOnce(
|
||||||
&ChromeContentBrowserClient::OnKeepaliveTimerFired,
|
&ChromeContentBrowserClient::OnKeepaliveTimerFired,
|
||||||
@@ -7103,7 +7115,8 @@ void ChromeContentBrowserClient::OnKeepaliveRequestFinished() {
|
@@ -7105,7 +7117,8 @@ void ChromeContentBrowserClient::OnKeepaliveRequestFinished() {
|
||||||
--num_keepalive_requests_;
|
--num_keepalive_requests_;
|
||||||
if (num_keepalive_requests_ == 0) {
|
if (num_keepalive_requests_ == 0) {
|
||||||
DVLOG(1) << "Stopping the keepalive timer";
|
DVLOG(1) << "Stopping the keepalive timer";
|
||||||
@@ -296,7 +296,7 @@ index 95fc727fe36b7..06e56e9525a84 100644
|
|||||||
// This deletes the keep alive handle attached to the timer function and
|
// This deletes the keep alive handle attached to the timer function and
|
||||||
// unblock the shutdown sequence.
|
// unblock the shutdown sequence.
|
||||||
}
|
}
|
||||||
@@ -7239,7 +7252,7 @@ void ChromeContentBrowserClient::OnKeepaliveTimerFired(
|
@@ -7241,7 +7254,7 @@ void ChromeContentBrowserClient::OnKeepaliveTimerFired(
|
||||||
const auto now = base::TimeTicks::Now();
|
const auto now = base::TimeTicks::Now();
|
||||||
const auto then = keepalive_deadline_;
|
const auto then = keepalive_deadline_;
|
||||||
if (now < then) {
|
if (now < then) {
|
||||||
|
@@ -173,7 +173,7 @@ index 28085aa32d7d8..312911b8a4564 100644
|
|||||||
BrowserFrame(const BrowserFrame&) = delete;
|
BrowserFrame(const BrowserFrame&) = delete;
|
||||||
BrowserFrame& operator=(const BrowserFrame&) = delete;
|
BrowserFrame& operator=(const BrowserFrame&) = delete;
|
||||||
diff --git chrome/browser/ui/views/frame/browser_view.cc chrome/browser/ui/views/frame/browser_view.cc
|
diff --git chrome/browser/ui/views/frame/browser_view.cc chrome/browser/ui/views/frame/browser_view.cc
|
||||||
index bc22da820add3..04798b83011e2 100644
|
index 8d1be7ef7470a..0a38b76e20597 100644
|
||||||
--- chrome/browser/ui/views/frame/browser_view.cc
|
--- chrome/browser/ui/views/frame/browser_view.cc
|
||||||
+++ chrome/browser/ui/views/frame/browser_view.cc
|
+++ chrome/browser/ui/views/frame/browser_view.cc
|
||||||
@@ -307,11 +307,10 @@ using content::NativeWebKeyboardEvent;
|
@@ -307,11 +307,10 @@ using content::NativeWebKeyboardEvent;
|
||||||
@@ -241,7 +241,7 @@ index bc22da820add3..04798b83011e2 100644
|
|||||||
|
|
||||||
contents_separator_ =
|
contents_separator_ =
|
||||||
top_container_->AddChildView(std::make_unique<ContentsSeparator>());
|
top_container_->AddChildView(std::make_unique<ContentsSeparator>());
|
||||||
@@ -1839,6 +1855,8 @@ bool BrowserView::ShouldHideUIForFullscreen() const {
|
@@ -1841,6 +1857,8 @@ bool BrowserView::ShouldHideUIForFullscreen() const {
|
||||||
if (immersive_mode_controller_->IsEnabled())
|
if (immersive_mode_controller_->IsEnabled())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -250,7 +250,7 @@ index bc22da820add3..04798b83011e2 100644
|
|||||||
return frame_->GetFrameView()->ShouldHideTopUIForFullscreen();
|
return frame_->GetFrameView()->ShouldHideTopUIForFullscreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2734,7 +2752,8 @@ DownloadShelf* BrowserView::GetDownloadShelf() {
|
@@ -2736,7 +2754,8 @@ DownloadShelf* BrowserView::GetDownloadShelf() {
|
||||||
}
|
}
|
||||||
|
|
||||||
DownloadBubbleUIController* BrowserView::GetDownloadBubbleUIController() {
|
DownloadBubbleUIController* BrowserView::GetDownloadBubbleUIController() {
|
||||||
@@ -260,7 +260,7 @@ index bc22da820add3..04798b83011e2 100644
|
|||||||
if (auto* download_button = toolbar_button_provider_->GetDownloadButton())
|
if (auto* download_button = toolbar_button_provider_->GetDownloadButton())
|
||||||
return download_button->bubble_controller();
|
return download_button->bubble_controller();
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@@ -3226,7 +3245,8 @@ void BrowserView::ReparentTopContainerForEndOfImmersive() {
|
@@ -3228,7 +3247,8 @@ void BrowserView::ReparentTopContainerForEndOfImmersive() {
|
||||||
if (top_container()->parent() == this)
|
if (top_container()->parent() == this)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -270,7 +270,7 @@ index bc22da820add3..04798b83011e2 100644
|
|||||||
top_container()->DestroyLayer();
|
top_container()->DestroyLayer();
|
||||||
AddChildViewAt(top_container(), 0);
|
AddChildViewAt(top_container(), 0);
|
||||||
EnsureFocusOrder();
|
EnsureFocusOrder();
|
||||||
@@ -3765,8 +3785,10 @@ void BrowserView::Layout() {
|
@@ -3767,8 +3787,10 @@ void BrowserView::Layout() {
|
||||||
|
|
||||||
// TODO(jamescook): Why was this in the middle of layout code?
|
// TODO(jamescook): Why was this in the middle of layout code?
|
||||||
toolbar_->location_bar()->omnibox_view()->SetFocusBehavior(
|
toolbar_->location_bar()->omnibox_view()->SetFocusBehavior(
|
||||||
@@ -283,7 +283,7 @@ index bc22da820add3..04798b83011e2 100644
|
|||||||
|
|
||||||
// Some of the situations when the BrowserView is laid out are:
|
// Some of the situations when the BrowserView is laid out are:
|
||||||
// - Enter/exit immersive fullscreen mode.
|
// - Enter/exit immersive fullscreen mode.
|
||||||
@@ -3832,6 +3854,11 @@ void BrowserView::AddedToWidget() {
|
@@ -3834,6 +3856,11 @@ void BrowserView::AddedToWidget() {
|
||||||
SetThemeProfileForWindow(GetNativeWindow(), browser_->profile());
|
SetThemeProfileForWindow(GetNativeWindow(), browser_->profile());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -295,7 +295,7 @@ index bc22da820add3..04798b83011e2 100644
|
|||||||
toolbar_->Init();
|
toolbar_->Init();
|
||||||
|
|
||||||
// TODO(pbos): Manage this either inside SidePanel or the corresponding button
|
// TODO(pbos): Manage this either inside SidePanel or the corresponding button
|
||||||
@@ -3887,13 +3914,9 @@ void BrowserView::AddedToWidget() {
|
@@ -3889,13 +3916,9 @@ void BrowserView::AddedToWidget() {
|
||||||
|
|
||||||
EnsureFocusOrder();
|
EnsureFocusOrder();
|
||||||
|
|
||||||
@@ -311,7 +311,7 @@ index bc22da820add3..04798b83011e2 100644
|
|||||||
using_native_frame_ = frame_->ShouldUseNativeFrame();
|
using_native_frame_ = frame_->ShouldUseNativeFrame();
|
||||||
|
|
||||||
MaybeInitializeWebUITabStrip();
|
MaybeInitializeWebUITabStrip();
|
||||||
@@ -4302,7 +4325,8 @@ void BrowserView::ProcessFullscreen(bool fullscreen,
|
@@ -4304,7 +4327,8 @@ void BrowserView::ProcessFullscreen(bool fullscreen,
|
||||||
// Undo our anti-jankiness hacks and force a re-layout.
|
// Undo our anti-jankiness hacks and force a re-layout.
|
||||||
in_process_fullscreen_ = false;
|
in_process_fullscreen_ = false;
|
||||||
ToolbarSizeChanged(false);
|
ToolbarSizeChanged(false);
|
||||||
@@ -321,7 +321,7 @@ index bc22da820add3..04798b83011e2 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool BrowserView::ShouldUseImmersiveFullscreenForUrl(const GURL& url) const {
|
bool BrowserView::ShouldUseImmersiveFullscreenForUrl(const GURL& url) const {
|
||||||
@@ -4650,6 +4674,8 @@ Profile* BrowserView::GetProfile() {
|
@@ -4652,6 +4676,8 @@ Profile* BrowserView::GetProfile() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void BrowserView::UpdateUIForTabFullscreen() {
|
void BrowserView::UpdateUIForTabFullscreen() {
|
||||||
@@ -330,7 +330,7 @@ index bc22da820add3..04798b83011e2 100644
|
|||||||
frame()->GetFrameView()->UpdateFullscreenTopUI();
|
frame()->GetFrameView()->UpdateFullscreenTopUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4672,6 +4698,8 @@ void BrowserView::HideDownloadShelf() {
|
@@ -4674,6 +4700,8 @@ void BrowserView::HideDownloadShelf() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BrowserView::CanUserExitFullscreen() const {
|
bool BrowserView::CanUserExitFullscreen() const {
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
diff --git content/app/content_main.cc content/app/content_main.cc
|
diff --git content/app/content_main.cc content/app/content_main.cc
|
||||||
index 00c293219a70c..e68d0d3abd95e 100644
|
index f646abaa56f8b..59d4a1f0817e6 100644
|
||||||
--- content/app/content_main.cc
|
--- content/app/content_main.cc
|
||||||
+++ content/app/content_main.cc
|
+++ content/app/content_main.cc
|
||||||
@@ -173,11 +173,8 @@ ContentMainParams::~ContentMainParams() = default;
|
@@ -172,11 +172,8 @@ ContentMainParams::~ContentMainParams() = default;
|
||||||
ContentMainParams::ContentMainParams(ContentMainParams&&) = default;
|
ContentMainParams::ContentMainParams(ContentMainParams&&) = default;
|
||||||
ContentMainParams& ContentMainParams::operator=(ContentMainParams&&) = default;
|
ContentMainParams& ContentMainParams::operator=(ContentMainParams&&) = default;
|
||||||
|
|
||||||
@@ -16,7 +16,7 @@ index 00c293219a70c..e68d0d3abd95e 100644
|
|||||||
base::FeatureList::FailOnFeatureAccessWithoutFeatureList();
|
base::FeatureList::FailOnFeatureAccessWithoutFeatureList();
|
||||||
#if BUILDFLAG(IS_CHROMEOS_LACROS)
|
#if BUILDFLAG(IS_CHROMEOS_LACROS)
|
||||||
// Lacros is launched with inherited priority. Revert to normal priority
|
// Lacros is launched with inherited priority. Revert to normal priority
|
||||||
@@ -186,9 +183,6 @@ RunContentProcess(ContentMainParams params,
|
@@ -185,9 +182,6 @@ RunContentProcess(ContentMainParams params,
|
||||||
#endif
|
#endif
|
||||||
int exit_code = -1;
|
int exit_code = -1;
|
||||||
base::debug::GlobalActivityTracker* tracker = nullptr;
|
base::debug::GlobalActivityTracker* tracker = nullptr;
|
||||||
@@ -26,7 +26,7 @@ index 00c293219a70c..e68d0d3abd95e 100644
|
|||||||
|
|
||||||
// A flag to indicate whether Main() has been called before. On Android, we
|
// A flag to indicate whether Main() has been called before. On Android, we
|
||||||
// may re-run Main() without restarting the browser process. This flag
|
// may re-run Main() without restarting the browser process. This flag
|
||||||
@@ -274,12 +268,6 @@ RunContentProcess(ContentMainParams params,
|
@@ -273,12 +267,6 @@ RunContentProcess(ContentMainParams params,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if BUILDFLAG(IS_MAC)
|
#if BUILDFLAG(IS_MAC)
|
||||||
@@ -39,7 +39,7 @@ index 00c293219a70c..e68d0d3abd95e 100644
|
|||||||
InitializeMac();
|
InitializeMac();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -321,8 +309,18 @@ RunContentProcess(ContentMainParams params,
|
@@ -318,8 +306,18 @@ RunContentProcess(ContentMainParams params,
|
||||||
|
|
||||||
if (IsSubprocess())
|
if (IsSubprocess())
|
||||||
CommonSubprocessInit();
|
CommonSubprocessInit();
|
||||||
@@ -59,7 +59,7 @@ index 00c293219a70c..e68d0d3abd95e 100644
|
|||||||
if (tracker) {
|
if (tracker) {
|
||||||
if (exit_code == 0) {
|
if (exit_code == 0) {
|
||||||
tracker->SetProcessPhaseIfEnabled(
|
tracker->SetProcessPhaseIfEnabled(
|
||||||
@@ -334,14 +332,41 @@ RunContentProcess(ContentMainParams params,
|
@@ -331,14 +329,41 @@ RunContentProcess(ContentMainParams params,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
diff --git content/browser/web_contents/web_contents_impl.cc content/browser/web_contents/web_contents_impl.cc
|
diff --git content/browser/web_contents/web_contents_impl.cc content/browser/web_contents/web_contents_impl.cc
|
||||||
index c4db6519acbff..03d173d9bf8fa 100644
|
index aea2d122faef0..df8c1858b6387 100644
|
||||||
--- content/browser/web_contents/web_contents_impl.cc
|
--- content/browser/web_contents/web_contents_impl.cc
|
||||||
+++ content/browser/web_contents/web_contents_impl.cc
|
+++ content/browser/web_contents/web_contents_impl.cc
|
||||||
@@ -3182,6 +3182,12 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params,
|
@@ -3174,6 +3174,12 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params,
|
||||||
params.main_frame_name, GetOpener(), primary_main_frame_policy,
|
params.main_frame_name, GetOpener(), primary_main_frame_policy,
|
||||||
base::UnguessableToken::Create());
|
base::UnguessableToken::Create());
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@ index c4db6519acbff..03d173d9bf8fa 100644
|
|||||||
std::unique_ptr<WebContentsViewDelegate> delegate =
|
std::unique_ptr<WebContentsViewDelegate> delegate =
|
||||||
GetContentClient()->browser()->GetWebContentsViewDelegate(this);
|
GetContentClient()->browser()->GetWebContentsViewDelegate(this);
|
||||||
|
|
||||||
@@ -3192,6 +3198,7 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params,
|
@@ -3184,6 +3190,7 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params,
|
||||||
view_ = CreateWebContentsView(this, std::move(delegate),
|
view_ = CreateWebContentsView(this, std::move(delegate),
|
||||||
&render_view_host_delegate_view_);
|
&render_view_host_delegate_view_);
|
||||||
}
|
}
|
||||||
@@ -23,7 +23,7 @@ index c4db6519acbff..03d173d9bf8fa 100644
|
|||||||
CHECK(render_view_host_delegate_view_);
|
CHECK(render_view_host_delegate_view_);
|
||||||
CHECK(view_.get());
|
CHECK(view_.get());
|
||||||
|
|
||||||
@@ -3372,6 +3379,9 @@ void WebContentsImpl::RenderWidgetCreated(
|
@@ -3364,6 +3371,9 @@ void WebContentsImpl::RenderWidgetCreated(
|
||||||
OPTIONAL_TRACE_EVENT1("content", "WebContentsImpl::RenderWidgetCreated",
|
OPTIONAL_TRACE_EVENT1("content", "WebContentsImpl::RenderWidgetCreated",
|
||||||
"render_widget_host", render_widget_host);
|
"render_widget_host", render_widget_host);
|
||||||
created_widgets_.insert(render_widget_host);
|
created_widgets_.insert(render_widget_host);
|
||||||
@@ -33,8 +33,8 @@ index c4db6519acbff..03d173d9bf8fa 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
void WebContentsImpl::RenderWidgetDeleted(
|
void WebContentsImpl::RenderWidgetDeleted(
|
||||||
@@ -4106,6 +4116,15 @@ FrameTree* WebContentsImpl::CreateNewWindow(
|
@@ -4095,6 +4105,15 @@ FrameTree* WebContentsImpl::CreateNewWindow(
|
||||||
params.pip_options->lock_aspect_ratio;
|
create_params.picture_in_picture_options = *(params.pip_options);
|
||||||
}
|
}
|
||||||
|
|
||||||
+ if (delegate_) {
|
+ if (delegate_) {
|
||||||
@@ -49,7 +49,7 @@ index c4db6519acbff..03d173d9bf8fa 100644
|
|||||||
// Check whether there is an available prerendered page for this navigation if
|
// Check whether there is an available prerendered page for this navigation if
|
||||||
// this is not for guest. If it exists, take WebContents pre-created for
|
// this is not for guest. If it exists, take WebContents pre-created for
|
||||||
// hosting the prerendered page instead of creating new WebContents.
|
// hosting the prerendered page instead of creating new WebContents.
|
||||||
@@ -7996,6 +8015,9 @@ void WebContentsImpl::SetFocusedFrame(FrameTreeNode* node,
|
@@ -7995,6 +8014,9 @@ void WebContentsImpl::SetFocusedFrame(FrameTreeNode* node,
|
||||||
// frames).
|
// frames).
|
||||||
SetFocusedFrameTree(&node->frame_tree());
|
SetFocusedFrameTree(&node->frame_tree());
|
||||||
}
|
}
|
||||||
@@ -60,10 +60,10 @@ index c4db6519acbff..03d173d9bf8fa 100644
|
|||||||
|
|
||||||
void WebContentsImpl::DidCallFocus() {
|
void WebContentsImpl::DidCallFocus() {
|
||||||
diff --git content/public/browser/web_contents.h content/public/browser/web_contents.h
|
diff --git content/public/browser/web_contents.h content/public/browser/web_contents.h
|
||||||
index 7778d03105273..b9b6f060201d9 100644
|
index 5644b0efa9a3e..da63511c87213 100644
|
||||||
--- content/public/browser/web_contents.h
|
--- content/public/browser/web_contents.h
|
||||||
+++ content/public/browser/web_contents.h
|
+++ content/public/browser/web_contents.h
|
||||||
@@ -94,10 +94,12 @@ class BrowserContext;
|
@@ -95,10 +95,12 @@ class BrowserContext;
|
||||||
class BrowserPluginGuestDelegate;
|
class BrowserPluginGuestDelegate;
|
||||||
class RenderFrameHost;
|
class RenderFrameHost;
|
||||||
class RenderViewHost;
|
class RenderViewHost;
|
||||||
@@ -76,7 +76,7 @@ index 7778d03105273..b9b6f060201d9 100644
|
|||||||
class WebUI;
|
class WebUI;
|
||||||
struct DropData;
|
struct DropData;
|
||||||
struct MHTMLGenerationParams;
|
struct MHTMLGenerationParams;
|
||||||
@@ -240,6 +242,10 @@ class WebContents : public PageNavigator,
|
@@ -241,6 +243,10 @@ class WebContents : public PageNavigator,
|
||||||
network::mojom::WebSandboxFlags starting_sandbox_flags =
|
network::mojom::WebSandboxFlags starting_sandbox_flags =
|
||||||
network::mojom::WebSandboxFlags::kNone;
|
network::mojom::WebSandboxFlags::kNone;
|
||||||
|
|
||||||
|
@@ -62,10 +62,10 @@ index ac623b8bd6c06..3e0bd1dd8ce3b 100644
|
|||||||
gfx::Transform device_emulation_transform_;
|
gfx::Transform device_emulation_transform_;
|
||||||
|
|
||||||
diff --git third_party/blink/renderer/core/page/chrome_client_impl.cc third_party/blink/renderer/core/page/chrome_client_impl.cc
|
diff --git third_party/blink/renderer/core/page/chrome_client_impl.cc third_party/blink/renderer/core/page/chrome_client_impl.cc
|
||||||
index c1e0b9eff83cb..333ad8c8e2990 100644
|
index 77260f7c32736..3958ea3f812c2 100644
|
||||||
--- third_party/blink/renderer/core/page/chrome_client_impl.cc
|
--- third_party/blink/renderer/core/page/chrome_client_impl.cc
|
||||||
+++ third_party/blink/renderer/core/page/chrome_client_impl.cc
|
+++ third_party/blink/renderer/core/page/chrome_client_impl.cc
|
||||||
@@ -916,7 +916,7 @@ bool ChromeClientImpl::HasOpenedPopup() const {
|
@@ -913,7 +913,7 @@ bool ChromeClientImpl::HasOpenedPopup() const {
|
||||||
PopupMenu* ChromeClientImpl::OpenPopupMenu(LocalFrame& frame,
|
PopupMenu* ChromeClientImpl::OpenPopupMenu(LocalFrame& frame,
|
||||||
HTMLSelectElement& select) {
|
HTMLSelectElement& select) {
|
||||||
NotifyPopupOpeningObservers();
|
NotifyPopupOpeningObservers();
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
diff --git sandbox/policy/win/sandbox_win.cc sandbox/policy/win/sandbox_win.cc
|
diff --git sandbox/policy/win/sandbox_win.cc sandbox/policy/win/sandbox_win.cc
|
||||||
index 38601d04959aa..de394933d26b9 100644
|
index cf16e2e25fec6..541d3eca56b92 100644
|
||||||
--- sandbox/policy/win/sandbox_win.cc
|
--- sandbox/policy/win/sandbox_win.cc
|
||||||
+++ sandbox/policy/win/sandbox_win.cc
|
+++ sandbox/policy/win/sandbox_win.cc
|
||||||
@@ -1017,6 +1017,13 @@ ResultCode SandboxWin::StartSandboxedProcess(
|
@@ -1017,6 +1017,13 @@ ResultCode SandboxWin::StartSandboxedProcess(
|
||||||
|
@@ -5,10 +5,12 @@
|
|||||||
#include "tests/cefclient/browser/client_browser.h"
|
#include "tests/cefclient/browser/client_browser.h"
|
||||||
#include "tests/cefclient/browser/main_context.h"
|
#include "tests/cefclient/browser/main_context.h"
|
||||||
|
|
||||||
|
#include "include/base/cef_logging.h"
|
||||||
#include "include/cef_command_line.h"
|
#include "include/cef_command_line.h"
|
||||||
#include "include/cef_crash_util.h"
|
#include "include/cef_crash_util.h"
|
||||||
#include "include/cef_file_util.h"
|
#include "include/cef_file_util.h"
|
||||||
#include "tests/cefclient/browser/client_prefs.h"
|
#include "tests/cefclient/browser/client_prefs.h"
|
||||||
|
#include "tests/cefclient/browser/default_client_handler.h"
|
||||||
#include "tests/shared/common/client_switches.h"
|
#include "tests/shared/common/client_switches.h"
|
||||||
|
|
||||||
namespace client {
|
namespace client {
|
||||||
@@ -60,6 +62,14 @@ class ClientBrowserDelegate : public ClientAppBrowser::Delegate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CefRefPtr<CefClient> GetDefaultClient(
|
||||||
|
CefRefPtr<ClientAppBrowser> app) override {
|
||||||
|
// Default client handler for unmanaged browser windows. Used with the
|
||||||
|
// Chrome runtime only.
|
||||||
|
LOG(INFO) << "Creating a chrome browser with the default client";
|
||||||
|
return new DefaultClientHandler();
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DISALLOW_COPY_AND_ASSIGN(ClientBrowserDelegate);
|
DISALLOW_COPY_AND_ASSIGN(ClientBrowserDelegate);
|
||||||
IMPLEMENT_REFCOUNTING(ClientBrowserDelegate);
|
IMPLEMENT_REFCOUNTING(ClientBrowserDelegate);
|
||||||
|
@@ -767,6 +767,12 @@ bool ClientHandler::OnBeforePopup(
|
|||||||
bool* no_javascript_access) {
|
bool* no_javascript_access) {
|
||||||
CEF_REQUIRE_UI_THREAD();
|
CEF_REQUIRE_UI_THREAD();
|
||||||
|
|
||||||
|
if (target_disposition == WOD_NEW_PICTURE_IN_PICTURE) {
|
||||||
|
// Use default handling for document picture-in-picture popups.
|
||||||
|
client = nullptr;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Return true to cancel the popup window.
|
// Return true to cancel the popup window.
|
||||||
return !CreatePopupWindow(browser, false, popupFeatures, windowInfo, client,
|
return !CreatePopupWindow(browser, false, popupFeatures, windowInfo, client,
|
||||||
settings);
|
settings);
|
||||||
|
60
tests/cefclient/browser/default_client_handler.cc
Normal file
60
tests/cefclient/browser/default_client_handler.cc
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
// Copyright (c) 2023 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 "tests/cefclient/browser/default_client_handler.h"
|
||||||
|
|
||||||
|
#include "tests/cefclient/browser/test_runner.h"
|
||||||
|
|
||||||
|
namespace client {
|
||||||
|
|
||||||
|
DefaultClientHandler::DefaultClientHandler() {
|
||||||
|
resource_manager_ = new CefResourceManager();
|
||||||
|
test_runner::SetupResourceManager(resource_manager_, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
CefRefPtr<CefResourceRequestHandler>
|
||||||
|
DefaultClientHandler::GetResourceRequestHandler(
|
||||||
|
CefRefPtr<CefBrowser> browser,
|
||||||
|
CefRefPtr<CefFrame> frame,
|
||||||
|
CefRefPtr<CefRequest> request,
|
||||||
|
bool is_navigation,
|
||||||
|
bool is_download,
|
||||||
|
const CefString& request_initiator,
|
||||||
|
bool& disable_default_handling) {
|
||||||
|
CEF_REQUIRE_IO_THREAD();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
cef_return_value_t DefaultClientHandler::OnBeforeResourceLoad(
|
||||||
|
CefRefPtr<CefBrowser> browser,
|
||||||
|
CefRefPtr<CefFrame> frame,
|
||||||
|
CefRefPtr<CefRequest> request,
|
||||||
|
CefRefPtr<CefCallback> callback) {
|
||||||
|
CEF_REQUIRE_IO_THREAD();
|
||||||
|
|
||||||
|
return resource_manager_->OnBeforeResourceLoad(browser, frame, request,
|
||||||
|
callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
CefRefPtr<CefResourceHandler> DefaultClientHandler::GetResourceHandler(
|
||||||
|
CefRefPtr<CefBrowser> browser,
|
||||||
|
CefRefPtr<CefFrame> frame,
|
||||||
|
CefRefPtr<CefRequest> request) {
|
||||||
|
CEF_REQUIRE_IO_THREAD();
|
||||||
|
|
||||||
|
return resource_manager_->GetResourceHandler(browser, frame, request);
|
||||||
|
}
|
||||||
|
|
||||||
|
CefRefPtr<CefResponseFilter> DefaultClientHandler::GetResourceResponseFilter(
|
||||||
|
CefRefPtr<CefBrowser> browser,
|
||||||
|
CefRefPtr<CefFrame> frame,
|
||||||
|
CefRefPtr<CefRequest> request,
|
||||||
|
CefRefPtr<CefResponse> response) {
|
||||||
|
CEF_REQUIRE_IO_THREAD();
|
||||||
|
|
||||||
|
return test_runner::GetResourceResponseFilter(browser, frame, request,
|
||||||
|
response);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace client
|
61
tests/cefclient/browser/default_client_handler.h
Normal file
61
tests/cefclient/browser/default_client_handler.h
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
// Copyright (c) 2023 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_TESTS_CEFCLIENT_BROWSER_DEFAULT_CLIENT_HANDLER_H_
|
||||||
|
#define CEF_TESTS_CEFCLIENT_BROWSER_DEFAULT_CLIENT_HANDLER_H_
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "include/cef_client.h"
|
||||||
|
#include "include/wrapper/cef_resource_manager.h"
|
||||||
|
|
||||||
|
namespace client {
|
||||||
|
|
||||||
|
// Default client handler for unmanaged browser windows. Used with the Chrome
|
||||||
|
// runtime only.
|
||||||
|
class DefaultClientHandler : public CefClient,
|
||||||
|
public CefRequestHandler,
|
||||||
|
public CefResourceRequestHandler {
|
||||||
|
public:
|
||||||
|
DefaultClientHandler();
|
||||||
|
|
||||||
|
// CefClient methods
|
||||||
|
CefRefPtr<CefRequestHandler> GetRequestHandler() override { return this; }
|
||||||
|
|
||||||
|
// CefRequestHandler methods
|
||||||
|
CefRefPtr<CefResourceRequestHandler> GetResourceRequestHandler(
|
||||||
|
CefRefPtr<CefBrowser> browser,
|
||||||
|
CefRefPtr<CefFrame> frame,
|
||||||
|
CefRefPtr<CefRequest> request,
|
||||||
|
bool is_navigation,
|
||||||
|
bool is_download,
|
||||||
|
const CefString& request_initiator,
|
||||||
|
bool& disable_default_handling) override;
|
||||||
|
|
||||||
|
// CefResourceRequestHandler methods
|
||||||
|
cef_return_value_t OnBeforeResourceLoad(
|
||||||
|
CefRefPtr<CefBrowser> browser,
|
||||||
|
CefRefPtr<CefFrame> frame,
|
||||||
|
CefRefPtr<CefRequest> request,
|
||||||
|
CefRefPtr<CefCallback> callback) override;
|
||||||
|
CefRefPtr<CefResourceHandler> GetResourceHandler(
|
||||||
|
CefRefPtr<CefBrowser> browser,
|
||||||
|
CefRefPtr<CefFrame> frame,
|
||||||
|
CefRefPtr<CefRequest> request) override;
|
||||||
|
CefRefPtr<CefResponseFilter> GetResourceResponseFilter(
|
||||||
|
CefRefPtr<CefBrowser> browser,
|
||||||
|
CefRefPtr<CefFrame> frame,
|
||||||
|
CefRefPtr<CefRequest> request,
|
||||||
|
CefRefPtr<CefResponse> response) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Manages the registration and delivery of resources.
|
||||||
|
CefRefPtr<CefResourceManager> resource_manager_;
|
||||||
|
|
||||||
|
IMPLEMENT_REFCOUNTING(DefaultClientHandler);
|
||||||
|
DISALLOW_COPY_AND_ASSIGN(DefaultClientHandler);
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace client
|
||||||
|
|
||||||
|
#endif // CEF_TESTS_CEFCLIENT_BROWSER_DEFAULT_CLIENT_HANDLER_H_
|
@@ -191,11 +191,12 @@ class PassThruResponseFilter : public CefResponseFilter {
|
|||||||
DCHECK_GT(data_out_size, 0U);
|
DCHECK_GT(data_out_size, 0U);
|
||||||
DCHECK_EQ(data_out_written, 0U);
|
DCHECK_EQ(data_out_written, 0U);
|
||||||
|
|
||||||
// All data will be read.
|
|
||||||
data_in_read = data_in_size;
|
|
||||||
|
|
||||||
// Write out the contents unchanged.
|
// Write out the contents unchanged.
|
||||||
data_out_written = std::min(data_in_read, data_out_size);
|
data_out_written = std::min(data_in_size, data_out_size);
|
||||||
|
|
||||||
|
// All data will be read.
|
||||||
|
data_in_read = data_out_written;
|
||||||
|
|
||||||
if (data_out_written > 0) {
|
if (data_out_written > 0) {
|
||||||
memcpy(data_out, data_in, data_out_written);
|
memcpy(data_out, data_in, data_out_written);
|
||||||
}
|
}
|
||||||
|
@@ -28,6 +28,12 @@ RootWindowViews::~RootWindowViews() {
|
|||||||
REQUIRE_MAIN_THREAD();
|
REQUIRE_MAIN_THREAD();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RootWindowViews::SetTitlebarHeight(const std::optional<float>& height) {
|
||||||
|
if (window_) {
|
||||||
|
window_->SetTitlebarHeight(height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void RootWindowViews::Init(RootWindow::Delegate* delegate,
|
void RootWindowViews::Init(RootWindow::Delegate* delegate,
|
||||||
std::unique_ptr<RootWindowConfig> config,
|
std::unique_ptr<RootWindowConfig> config,
|
||||||
const CefBrowserSettings& settings) {
|
const CefBrowserSettings& settings) {
|
||||||
|
@@ -26,6 +26,8 @@ class RootWindowViews : public RootWindow,
|
|||||||
RootWindowViews();
|
RootWindowViews();
|
||||||
~RootWindowViews();
|
~RootWindowViews();
|
||||||
|
|
||||||
|
void SetTitlebarHeight(const std::optional<float>& height);
|
||||||
|
|
||||||
// RootWindow methods:
|
// RootWindow methods:
|
||||||
void Init(RootWindow::Delegate* delegate,
|
void Init(RootWindow::Delegate* delegate,
|
||||||
std::unique_ptr<RootWindowConfig> config,
|
std::unique_ptr<RootWindowConfig> config,
|
||||||
|
@@ -772,10 +772,12 @@ void SetupResourceManager(CefRefPtr<CefResourceManager> resource_manager,
|
|||||||
string_pages.insert(kTestGetSourcePage);
|
string_pages.insert(kTestGetSourcePage);
|
||||||
string_pages.insert(kTestGetTextPage);
|
string_pages.insert(kTestGetTextPage);
|
||||||
|
|
||||||
// Add provider for string resources.
|
if (string_resource_map) {
|
||||||
resource_manager->AddProvider(
|
// Add provider for string resources.
|
||||||
new StringResourceProvider(string_pages, string_resource_map), 0,
|
resource_manager->AddProvider(
|
||||||
std::string());
|
new StringResourceProvider(string_pages, string_resource_map), 0,
|
||||||
|
std::string());
|
||||||
|
}
|
||||||
|
|
||||||
// Add provider for bundled resource files.
|
// Add provider for bundled resource files.
|
||||||
#if defined(OS_WIN)
|
#if defined(OS_WIN)
|
||||||
|
@@ -5,6 +5,7 @@
|
|||||||
#include "tests/cefclient/browser/views_overlay_controls.h"
|
#include "tests/cefclient/browser/views_overlay_controls.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <array>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "include/views/cef_box_layout.h"
|
#include "include/views/cef_box_layout.h"
|
||||||
@@ -34,9 +35,37 @@ std::string GetLabel(ViewsOverlayControls::Command command, bool maximized) {
|
|||||||
return std::string();
|
return std::string();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::array<ViewsOverlayControls::Command, 3> GetButtons() {
|
||||||
|
#if defined(OS_MAC)
|
||||||
|
return {ViewsOverlayControls::Command::kClose,
|
||||||
|
ViewsOverlayControls::Command::kMaximize,
|
||||||
|
ViewsOverlayControls::Command::kMinimize};
|
||||||
|
#else
|
||||||
|
return {ViewsOverlayControls::Command::kMinimize,
|
||||||
|
ViewsOverlayControls::Command::kMaximize,
|
||||||
|
ViewsOverlayControls::Command::kClose};
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
cef_docking_mode_t GetPanelDockingMode() {
|
||||||
|
#if defined(OS_MAC)
|
||||||
|
return CEF_DOCKING_MODE_TOP_LEFT;
|
||||||
|
#else
|
||||||
|
return CEF_DOCKING_MODE_TOP_RIGHT;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
cef_docking_mode_t GetMenuDockingMode() {
|
||||||
|
#if defined(OS_MAC)
|
||||||
|
return CEF_DOCKING_MODE_TOP_RIGHT;
|
||||||
|
#else
|
||||||
|
return CEF_DOCKING_MODE_TOP_LEFT;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
ViewsOverlayControls::ViewsOverlayControls() = default;
|
ViewsOverlayControls::ViewsOverlayControls(bool with_window_buttons)
|
||||||
|
: with_window_buttons_(with_window_buttons) {}
|
||||||
|
|
||||||
void ViewsOverlayControls::Initialize(CefRefPtr<CefWindow> window,
|
void ViewsOverlayControls::Initialize(CefRefPtr<CefWindow> window,
|
||||||
CefRefPtr<CefMenuButton> menu_button,
|
CefRefPtr<CefMenuButton> menu_button,
|
||||||
@@ -49,30 +78,31 @@ void ViewsOverlayControls::Initialize(CefRefPtr<CefWindow> window,
|
|||||||
window_ = window;
|
window_ = window;
|
||||||
window_maximized_ = window_->IsMaximized();
|
window_maximized_ = window_->IsMaximized();
|
||||||
|
|
||||||
// Window control buttons. These controls are currently text which means that
|
if (with_window_buttons_) {
|
||||||
// we can't use a transparent background because subpixel text rendering will
|
// Window control buttons. These controls are currently text which means
|
||||||
// break. See comments on the related DCHECK in Label::PaintText.
|
// that we can't use a transparent background because subpixel text
|
||||||
panel_ = CefPanel::CreatePanel(nullptr);
|
// rendering will break.
|
||||||
views_style::ApplyTo(panel_);
|
// See comments on the related DCHECK in Label::PaintText.
|
||||||
|
panel_ = CefPanel::CreatePanel(nullptr);
|
||||||
|
views_style::ApplyTo(panel_);
|
||||||
|
|
||||||
// Use a horizontal box layout.
|
// Use a horizontal box layout.
|
||||||
CefBoxLayoutSettings panel_layout_settings;
|
CefBoxLayoutSettings panel_layout_settings;
|
||||||
panel_layout_settings.horizontal = true;
|
panel_layout_settings.horizontal = true;
|
||||||
panel_->SetToBoxLayout(panel_layout_settings);
|
panel_->SetToBoxLayout(panel_layout_settings);
|
||||||
|
|
||||||
panel_->AddChildView(CreateButton(ViewsOverlayControls::Command::kMinimize));
|
for (auto button : GetButtons()) {
|
||||||
panel_->AddChildView(CreateButton(ViewsOverlayControls::Command::kMaximize));
|
panel_->AddChildView(CreateButton(button));
|
||||||
panel_->AddChildView(CreateButton(ViewsOverlayControls::Command::kClose));
|
}
|
||||||
|
panel_controller_ = window->AddOverlayView(panel_, GetPanelDockingMode());
|
||||||
panel_controller_ =
|
panel_controller_->SetInsets(CefInsets(kInsets, kInsets, 0, kInsets));
|
||||||
window->AddOverlayView(panel_, CEF_DOCKING_MODE_TOP_RIGHT);
|
panel_controller_->SetVisible(true);
|
||||||
panel_controller_->SetVisible(true);
|
}
|
||||||
|
|
||||||
// Menu button.
|
// Menu button.
|
||||||
menu_button->SetBackgroundColor(kBackgroundColor);
|
menu_button->SetBackgroundColor(kBackgroundColor);
|
||||||
menu_controller_ =
|
menu_controller_ = window_->AddOverlayView(menu_button, GetMenuDockingMode());
|
||||||
window_->AddOverlayView(menu_button, CEF_DOCKING_MODE_TOP_LEFT);
|
menu_controller_->SetInsets(CefInsets(kInsets, kInsets, 0, kInsets));
|
||||||
menu_controller_->SetInsets(CefInsets(kInsets, kInsets, 0, 0));
|
|
||||||
menu_controller_->SetVisible(true);
|
menu_controller_->SetVisible(true);
|
||||||
|
|
||||||
// Location bar. Will be made visible in UpdateControls().
|
// Location bar. Will be made visible in UpdateControls().
|
||||||
@@ -87,8 +117,10 @@ void ViewsOverlayControls::Initialize(CefRefPtr<CefWindow> window,
|
|||||||
void ViewsOverlayControls::Destroy() {
|
void ViewsOverlayControls::Destroy() {
|
||||||
window_ = nullptr;
|
window_ = nullptr;
|
||||||
panel_ = nullptr;
|
panel_ = nullptr;
|
||||||
panel_controller_->Destroy();
|
if (panel_controller_) {
|
||||||
panel_controller_ = nullptr;
|
panel_controller_->Destroy();
|
||||||
|
panel_controller_ = nullptr;
|
||||||
|
}
|
||||||
menu_controller_->Destroy();
|
menu_controller_->Destroy();
|
||||||
menu_controller_ = nullptr;
|
menu_controller_ = nullptr;
|
||||||
location_bar_ = nullptr;
|
location_bar_ = nullptr;
|
||||||
@@ -180,7 +212,7 @@ CefRefPtr<CefLabelButton> ViewsOverlayControls::CreateButton(Command command) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ViewsOverlayControls::MaybeUpdateMaximizeButton() {
|
void ViewsOverlayControls::MaybeUpdateMaximizeButton() {
|
||||||
if (window_->IsMaximized() == window_maximized_) {
|
if (!with_window_buttons_ || window_->IsMaximized() == window_maximized_) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
window_maximized_ = !window_maximized_;
|
window_maximized_ = !window_maximized_;
|
||||||
|
@@ -25,7 +25,7 @@ class ViewsOverlayControls : public CefButtonDelegate {
|
|||||||
kClose,
|
kClose,
|
||||||
};
|
};
|
||||||
|
|
||||||
ViewsOverlayControls();
|
explicit ViewsOverlayControls(bool with_window_buttons);
|
||||||
|
|
||||||
void Initialize(CefRefPtr<CefWindow> window,
|
void Initialize(CefRefPtr<CefWindow> window,
|
||||||
CefRefPtr<CefMenuButton> menu_button,
|
CefRefPtr<CefMenuButton> menu_button,
|
||||||
@@ -53,6 +53,7 @@ class ViewsOverlayControls : public CefButtonDelegate {
|
|||||||
// Window control buttons.
|
// Window control buttons.
|
||||||
CefRefPtr<CefPanel> panel_;
|
CefRefPtr<CefPanel> panel_;
|
||||||
CefRefPtr<CefOverlayController> panel_controller_;
|
CefRefPtr<CefOverlayController> panel_controller_;
|
||||||
|
const bool with_window_buttons_;
|
||||||
|
|
||||||
// Location bar.
|
// Location bar.
|
||||||
CefRefPtr<CefView> location_bar_;
|
CefRefPtr<CefView> location_bar_;
|
||||||
|
@@ -34,6 +34,11 @@ const char kDefaultExtensionIcon[] = "window_icon";
|
|||||||
constexpr int kDefaultWidth = 800;
|
constexpr int kDefaultWidth = 800;
|
||||||
constexpr int kDefaultHeight = 600;
|
constexpr int kDefaultHeight = 600;
|
||||||
|
|
||||||
|
#if defined(OS_MAC)
|
||||||
|
constexpr int kTitleBarHeight = 35;
|
||||||
|
constexpr int kWindowButtonsWidth = 80;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Control IDs for Views in the top-level Window.
|
// Control IDs for Views in the top-level Window.
|
||||||
enum ControlIds {
|
enum ControlIds {
|
||||||
ID_WINDOW = 1,
|
ID_WINDOW = 1,
|
||||||
@@ -106,6 +111,22 @@ void AddFileMenuItems(CefRefPtr<CefMenuModel> file_menu) {
|
|||||||
true);
|
true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CefBrowserViewDelegate::ChromeToolbarType CalculateChromeToolbarType(
|
||||||
|
const std::string& toolbar_type,
|
||||||
|
bool hide_toolbar,
|
||||||
|
bool with_overlay_controls) {
|
||||||
|
if (!MainContext::Get()->UseChromeRuntime() || toolbar_type == "none" ||
|
||||||
|
hide_toolbar) {
|
||||||
|
return CEF_CTT_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (toolbar_type == "location") {
|
||||||
|
return CEF_CTT_LOCATION;
|
||||||
|
}
|
||||||
|
|
||||||
|
return with_overlay_controls ? CEF_CTT_LOCATION : CEF_CTT_NORMAL;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
// static
|
// static
|
||||||
@@ -278,17 +299,13 @@ void ViewsWindow::SetDraggableRegions(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<CefDraggableRegion> window_regions;
|
|
||||||
|
|
||||||
// Convert the regions from BrowserView to Window coordinates.
|
// Convert the regions from BrowserView to Window coordinates.
|
||||||
std::vector<CefDraggableRegion>::const_iterator it = regions.begin();
|
std::vector<CefDraggableRegion> window_regions = regions;
|
||||||
for (; it != regions.end(); ++it) {
|
for (auto& region : window_regions) {
|
||||||
CefDraggableRegion region = *it;
|
|
||||||
CefPoint origin = CefPoint(region.bounds.x, region.bounds.y);
|
CefPoint origin = CefPoint(region.bounds.x, region.bounds.y);
|
||||||
browser_view_->ConvertPointToWindow(origin);
|
browser_view_->ConvertPointToWindow(origin);
|
||||||
region.bounds.x = origin.x;
|
region.bounds.x = origin.x;
|
||||||
region.bounds.y = origin.y;
|
region.bounds.y = origin.y;
|
||||||
window_regions.push_back(region);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (overlay_controls_) {
|
if (overlay_controls_) {
|
||||||
@@ -382,6 +399,16 @@ bool ViewsWindow::GetWindowRestorePreferences(
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ViewsWindow::SetTitlebarHeight(const std::optional<float>& height) {
|
||||||
|
CEF_REQUIRE_UI_THREAD();
|
||||||
|
if (height.has_value()) {
|
||||||
|
override_titlebar_height_ = height;
|
||||||
|
} else {
|
||||||
|
override_titlebar_height_ = default_titlebar_height_;
|
||||||
|
}
|
||||||
|
NudgeWindow();
|
||||||
|
}
|
||||||
|
|
||||||
CefRefPtr<CefBrowserViewDelegate> ViewsWindow::GetDelegateForPopupBrowserView(
|
CefRefPtr<CefBrowserViewDelegate> ViewsWindow::GetDelegateForPopupBrowserView(
|
||||||
CefRefPtr<CefBrowserView> browser_view,
|
CefRefPtr<CefBrowserView> browser_view,
|
||||||
const CefBrowserSettings& settings,
|
const CefBrowserSettings& settings,
|
||||||
@@ -653,6 +680,14 @@ void ViewsWindow::OnWindowBoundsChanged(CefRefPtr<CefWindow> window,
|
|||||||
// Track the last visible bounds for window restore purposes.
|
// Track the last visible bounds for window restore purposes.
|
||||||
last_visible_bounds_ = new_bounds;
|
last_visible_bounds_ = new_bounds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(OS_MAC)
|
||||||
|
if (frameless_ && with_standard_buttons_ && top_toolbar_) {
|
||||||
|
auto insets = top_toolbar_->GetInsets();
|
||||||
|
insets.left = window->IsFullscreen() ? 0 : kWindowButtonsWidth;
|
||||||
|
top_toolbar_->SetInsets(insets);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ViewsWindow::CanClose(CefRefPtr<CefWindow> window) {
|
bool ViewsWindow::CanClose(CefRefPtr<CefWindow> window) {
|
||||||
@@ -701,6 +736,24 @@ bool ViewsWindow::IsFrameless(CefRefPtr<CefWindow> window) {
|
|||||||
return frameless_;
|
return frameless_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ViewsWindow::WithStandardWindowButtons(CefRefPtr<CefWindow> window) {
|
||||||
|
CEF_REQUIRE_UI_THREAD();
|
||||||
|
return with_standard_buttons_;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ViewsWindow::GetTitlebarHeight(CefRefPtr<CefWindow> window,
|
||||||
|
float* titlebar_height) {
|
||||||
|
CEF_REQUIRE_UI_THREAD();
|
||||||
|
#if defined(OS_MAC)
|
||||||
|
if (override_titlebar_height_.has_value()) {
|
||||||
|
*titlebar_height = override_titlebar_height_.value();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool ViewsWindow::CanResize(CefRefPtr<CefWindow> window) {
|
bool ViewsWindow::CanResize(CefRefPtr<CefWindow> window) {
|
||||||
CEF_REQUIRE_UI_THREAD();
|
CEF_REQUIRE_UI_THREAD();
|
||||||
// Don't allow windows hosting extensions to resize.
|
// Don't allow windows hosting extensions to resize.
|
||||||
@@ -815,7 +868,9 @@ void ViewsWindow::OnWindowChanged(CefRefPtr<CefView> view, bool added) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (with_overlay_controls_) {
|
if (with_overlay_controls_) {
|
||||||
overlay_controls_ = new ViewsOverlayControls();
|
// Add window buttons if we don't have standard ones
|
||||||
|
const bool with_window_buttons = !with_standard_buttons_;
|
||||||
|
overlay_controls_ = new ViewsOverlayControls(with_window_buttons);
|
||||||
overlay_controls_->Initialize(window_, CreateMenuButton(),
|
overlay_controls_->Initialize(window_, CreateMenuButton(),
|
||||||
CreateLocationBar(),
|
CreateLocationBar(),
|
||||||
chrome_toolbar_type_ != CEF_CTT_NONE);
|
chrome_toolbar_type_ != CEF_CTT_NONE);
|
||||||
@@ -865,6 +920,10 @@ ViewsWindow::ViewsWindow(Delegate* delegate,
|
|||||||
|
|
||||||
const bool hide_frame = command_line->HasSwitch(switches::kHideFrame);
|
const bool hide_frame = command_line->HasSwitch(switches::kHideFrame);
|
||||||
const bool hide_overlays = command_line->HasSwitch(switches::kHideOverlays);
|
const bool hide_overlays = command_line->HasSwitch(switches::kHideOverlays);
|
||||||
|
const bool hide_toolbar =
|
||||||
|
hide_frame && hide_overlays && !delegate_->WithControls();
|
||||||
|
const bool show_window_buttons =
|
||||||
|
command_line->HasSwitch(switches::kShowWindowButtons);
|
||||||
|
|
||||||
// Without a window frame.
|
// Without a window frame.
|
||||||
frameless_ = hide_frame || delegate_->WithExtension();
|
frameless_ = hide_frame || delegate_->WithExtension();
|
||||||
@@ -873,20 +932,20 @@ ViewsWindow::ViewsWindow(Delegate* delegate,
|
|||||||
with_overlay_controls_ =
|
with_overlay_controls_ =
|
||||||
hide_frame && !hide_overlays && !delegate_->WithControls();
|
hide_frame && !hide_overlays && !delegate_->WithControls();
|
||||||
|
|
||||||
if (MainContext::Get()->UseChromeRuntime()) {
|
// If window has frame or flag passed explicitly
|
||||||
const std::string& toolbar_type =
|
with_standard_buttons_ = !frameless_ || show_window_buttons;
|
||||||
command_line->GetSwitchValue(switches::kShowChromeToolbar);
|
|
||||||
if (toolbar_type == "none") {
|
#if defined(OS_MAC)
|
||||||
chrome_toolbar_type_ = CEF_CTT_NONE;
|
if (frameless_ && with_standard_buttons_) {
|
||||||
} else if (toolbar_type == "location") {
|
default_titlebar_height_ = kTitleBarHeight;
|
||||||
chrome_toolbar_type_ = CEF_CTT_LOCATION;
|
override_titlebar_height_ = kTitleBarHeight;
|
||||||
} else {
|
|
||||||
chrome_toolbar_type_ =
|
|
||||||
with_overlay_controls_ ? CEF_CTT_LOCATION : CEF_CTT_NORMAL;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
chrome_toolbar_type_ = CEF_CTT_NONE;
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const std::string& toolbar_type =
|
||||||
|
command_line->GetSwitchValue(switches::kShowChromeToolbar);
|
||||||
|
chrome_toolbar_type_ = CalculateChromeToolbarType(toolbar_type, hide_toolbar,
|
||||||
|
with_overlay_controls_);
|
||||||
|
|
||||||
#if !defined(OS_MAC)
|
#if !defined(OS_MAC)
|
||||||
// On Mac we don't show a top menu on the window. The options are available in
|
// On Mac we don't show a top menu on the window. The options are available in
|
||||||
@@ -1025,9 +1084,8 @@ void ViewsWindow::AddControls() {
|
|||||||
top_panel->SetToBoxLayout(top_panel_layout_settings);
|
top_panel->SetToBoxLayout(top_panel_layout_settings);
|
||||||
|
|
||||||
// Add the buttons and URL textfield to |top_panel|.
|
// Add the buttons and URL textfield to |top_panel|.
|
||||||
for (size_t i = 0U; i < browse_buttons.size(); ++i) {
|
for (auto& browse_button : browse_buttons)
|
||||||
top_panel->AddChildView(browse_buttons[i]);
|
top_panel->AddChildView(browse_button);
|
||||||
}
|
|
||||||
top_panel->AddChildView(location_bar_);
|
top_panel->AddChildView(location_bar_);
|
||||||
|
|
||||||
UpdateExtensionControls();
|
UpdateExtensionControls();
|
||||||
@@ -1043,6 +1101,14 @@ void ViewsWindow::AddControls() {
|
|||||||
top_toolbar_ = top_panel;
|
top_toolbar_ = top_panel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(OS_MAC)
|
||||||
|
if (frameless_ && with_standard_buttons_) {
|
||||||
|
auto insets = top_toolbar_->GetInsets();
|
||||||
|
insets.left = kWindowButtonsWidth;
|
||||||
|
top_toolbar_->SetInsets(insets);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Add the top panel and browser view to |window|.
|
// Add the top panel and browser view to |window|.
|
||||||
int top_index = 0;
|
int top_index = 0;
|
||||||
if (top_menu_panel) {
|
if (top_menu_panel) {
|
||||||
@@ -1061,8 +1127,10 @@ void ViewsWindow::AddControls() {
|
|||||||
// Lay out |window| again with the new button sizes.
|
// Lay out |window| again with the new button sizes.
|
||||||
window_->Layout();
|
window_->Layout();
|
||||||
|
|
||||||
|
const int buttons_number = static_cast<int>(browse_buttons.size());
|
||||||
|
|
||||||
// Minimum window width is the size of all buttons plus some extra.
|
// Minimum window width is the size of all buttons plus some extra.
|
||||||
min_width = browse_buttons[0]->GetBounds().width * 4 +
|
min_width = browse_buttons[0]->GetBounds().width * buttons_number +
|
||||||
menu_button_->GetBounds().width + 100;
|
menu_button_->GetBounds().width + 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1211,4 +1279,10 @@ void ViewsWindow::OnExtensionWindowClosed() {
|
|||||||
extension_button_pressed_lock_ = nullptr;
|
extension_button_pressed_lock_ = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined(OS_MAC)
|
||||||
|
void ViewsWindow::NudgeWindow() {
|
||||||
|
NOTIMPLEMENTED();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
} // namespace client
|
} // namespace client
|
||||||
|
@@ -130,6 +130,7 @@ class ViewsWindow : public CefBrowserViewDelegate,
|
|||||||
|
|
||||||
bool GetWindowRestorePreferences(cef_show_state_t& show_state,
|
bool GetWindowRestorePreferences(cef_show_state_t& show_state,
|
||||||
std::optional<CefRect>& dip_bounds);
|
std::optional<CefRect>& dip_bounds);
|
||||||
|
void SetTitlebarHeight(const std::optional<float>& height);
|
||||||
|
|
||||||
// CefBrowserViewDelegate methods:
|
// CefBrowserViewDelegate methods:
|
||||||
CefRefPtr<CefBrowserViewDelegate> GetDelegateForPopupBrowserView(
|
CefRefPtr<CefBrowserViewDelegate> GetDelegateForPopupBrowserView(
|
||||||
@@ -174,6 +175,9 @@ class ViewsWindow : public CefBrowserViewDelegate,
|
|||||||
CefRect GetInitialBounds(CefRefPtr<CefWindow> window) override;
|
CefRect GetInitialBounds(CefRefPtr<CefWindow> window) override;
|
||||||
cef_show_state_t GetInitialShowState(CefRefPtr<CefWindow> window) override;
|
cef_show_state_t GetInitialShowState(CefRefPtr<CefWindow> window) override;
|
||||||
bool IsFrameless(CefRefPtr<CefWindow> window) override;
|
bool IsFrameless(CefRefPtr<CefWindow> window) override;
|
||||||
|
bool WithStandardWindowButtons(CefRefPtr<CefWindow> window) override;
|
||||||
|
bool GetTitlebarHeight(CefRefPtr<CefWindow> window,
|
||||||
|
float* titlebar_height) override;
|
||||||
bool CanResize(CefRefPtr<CefWindow> window) override;
|
bool CanResize(CefRefPtr<CefWindow> window) override;
|
||||||
bool CanClose(CefRefPtr<CefWindow> window) override;
|
bool CanClose(CefRefPtr<CefWindow> window) override;
|
||||||
bool OnAccelerator(CefRefPtr<CefWindow> window, int command_id) override;
|
bool OnAccelerator(CefRefPtr<CefWindow> window, int command_id) override;
|
||||||
@@ -233,11 +237,14 @@ class ViewsWindow : public CefBrowserViewDelegate,
|
|||||||
const ImageCache::ImageSet& images);
|
const ImageCache::ImageSet& images);
|
||||||
void OnExtensionWindowClosed();
|
void OnExtensionWindowClosed();
|
||||||
|
|
||||||
|
void NudgeWindow();
|
||||||
|
|
||||||
Delegate* delegate_; // Not owned by this object.
|
Delegate* delegate_; // Not owned by this object.
|
||||||
CefRefPtr<CefBrowserView> browser_view_;
|
CefRefPtr<CefBrowserView> browser_view_;
|
||||||
bool frameless_;
|
bool frameless_;
|
||||||
bool with_controls_;
|
bool with_controls_;
|
||||||
bool with_overlay_controls_;
|
bool with_overlay_controls_;
|
||||||
|
bool with_standard_buttons_;
|
||||||
ChromeToolbarType chrome_toolbar_type_;
|
ChromeToolbarType chrome_toolbar_type_;
|
||||||
CefRefPtr<CefWindow> window_;
|
CefRefPtr<CefWindow> window_;
|
||||||
|
|
||||||
@@ -254,6 +261,9 @@ class ViewsWindow : public CefBrowserViewDelegate,
|
|||||||
|
|
||||||
CefRefPtr<ViewsOverlayControls> overlay_controls_;
|
CefRefPtr<ViewsOverlayControls> overlay_controls_;
|
||||||
|
|
||||||
|
std::optional<float> default_titlebar_height_;
|
||||||
|
std::optional<float> override_titlebar_height_;
|
||||||
|
|
||||||
// Structure representing an extension.
|
// Structure representing an extension.
|
||||||
struct ExtensionInfo {
|
struct ExtensionInfo {
|
||||||
ExtensionInfo(CefRefPtr<CefExtension> extension, CefRefPtr<CefImage> image)
|
ExtensionInfo(CefRefPtr<CefExtension> extension, CefRefPtr<CefImage> image)
|
||||||
|
24
tests/cefclient/browser/views_window_mac.mm
Normal file
24
tests/cefclient/browser/views_window_mac.mm
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
// Copyright (c) 2023 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 "tests/cefclient/browser/views_window.h"
|
||||||
|
|
||||||
|
#include <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
namespace client {
|
||||||
|
|
||||||
|
void ViewsWindow::NudgeWindow() {
|
||||||
|
if (window_) {
|
||||||
|
auto view = CAST_CEF_WINDOW_HANDLE_TO_NSVIEW(window_->GetWindowHandle());
|
||||||
|
NSWindow* main_window = view.window;
|
||||||
|
|
||||||
|
auto theme_frame = main_window.contentView.superview;
|
||||||
|
// Nudge view frame a little to force an update.
|
||||||
|
NSSize size = theme_frame.frame.size;
|
||||||
|
[theme_frame setFrameSize:NSMakeSize(size.width - 1, size.height)];
|
||||||
|
[theme_frame setFrameSize:size];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -15,9 +15,7 @@
|
|||||||
#include "tests/cefclient/browser/test_runner.h"
|
#include "tests/cefclient/browser/test_runner.h"
|
||||||
#include "tests/cefclient/browser/window_test_runner.h"
|
#include "tests/cefclient/browser/window_test_runner.h"
|
||||||
|
|
||||||
#if defined(OS_WIN) || defined(OS_LINUX)
|
|
||||||
#include "tests/cefclient/browser/window_test_runner_views.h"
|
#include "tests/cefclient/browser/window_test_runner_views.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(OS_WIN)
|
#if defined(OS_WIN)
|
||||||
#include "tests/cefclient/browser/window_test_runner_win.h"
|
#include "tests/cefclient/browser/window_test_runner_win.h"
|
||||||
@@ -37,14 +35,13 @@ const char kMessagePositionName[] = "WindowTest.Position";
|
|||||||
const char kMessageMinimizeName[] = "WindowTest.Minimize";
|
const char kMessageMinimizeName[] = "WindowTest.Minimize";
|
||||||
const char kMessageMaximizeName[] = "WindowTest.Maximize";
|
const char kMessageMaximizeName[] = "WindowTest.Maximize";
|
||||||
const char kMessageRestoreName[] = "WindowTest.Restore";
|
const char kMessageRestoreName[] = "WindowTest.Restore";
|
||||||
|
const char kMessageTitlebarHeightName[] = "WindowTest.TitlebarHeight";
|
||||||
|
|
||||||
// Create the appropriate platform test runner object.
|
// Create the appropriate platform test runner object.
|
||||||
std::unique_ptr<WindowTestRunner> CreateWindowTestRunner() {
|
std::unique_ptr<WindowTestRunner> CreateWindowTestRunner() {
|
||||||
#if defined(OS_WIN) || defined(OS_LINUX)
|
|
||||||
if (MainContext::Get()->UseViews()) {
|
if (MainContext::Get()->UseViews()) {
|
||||||
return std::make_unique<WindowTestRunnerViews>();
|
return std::make_unique<WindowTestRunnerViews>();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(OS_WIN)
|
#if defined(OS_WIN)
|
||||||
return std::make_unique<WindowTestRunnerWin>();
|
return std::make_unique<WindowTestRunnerWin>();
|
||||||
@@ -57,6 +54,31 @@ std::unique_ptr<WindowTestRunner> CreateWindowTestRunner() {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Parse the comma-delimited list of integer values.
|
||||||
|
std::vector<int> ParsePosition(const std::string& message_name) {
|
||||||
|
std::vector<int> vec;
|
||||||
|
const std::string& vals = message_name.substr(sizeof(kMessagePositionName));
|
||||||
|
std::stringstream ss(vals);
|
||||||
|
int i;
|
||||||
|
while (ss >> i) {
|
||||||
|
vec.push_back(i);
|
||||||
|
if (ss.peek() == ',') {
|
||||||
|
ss.ignore();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return vec;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::optional<float> ParseHeight(const std::string& message) {
|
||||||
|
if (message.size() > sizeof(kMessageTitlebarHeightName)) {
|
||||||
|
const std::string& val = message.substr(sizeof(kMessageTitlebarHeightName));
|
||||||
|
return std::stof(val);
|
||||||
|
} else {
|
||||||
|
return std::nullopt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Handle messages in the browser process.
|
// Handle messages in the browser process.
|
||||||
class Handler : public CefMessageRouterBrowserSide::Handler {
|
class Handler : public CefMessageRouterBrowserSide::Handler {
|
||||||
public:
|
public:
|
||||||
@@ -77,32 +99,19 @@ class Handler : public CefMessageRouterBrowserSide::Handler {
|
|||||||
|
|
||||||
const std::string& message_name = request;
|
const std::string& message_name = request;
|
||||||
if (message_name.find(kMessagePositionName) == 0) {
|
if (message_name.find(kMessagePositionName) == 0) {
|
||||||
// Parse the comma-delimited list of integer values.
|
const auto vec = ParsePosition(message_name);
|
||||||
std::vector<int> vec;
|
|
||||||
const std::string& vals =
|
|
||||||
message_name.substr(sizeof(kMessagePositionName));
|
|
||||||
std::stringstream ss(vals);
|
|
||||||
int i;
|
|
||||||
while (ss >> i) {
|
|
||||||
vec.push_back(i);
|
|
||||||
if (ss.peek() == ',') {
|
|
||||||
ss.ignore();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vec.size() == 4) {
|
if (vec.size() == 4) {
|
||||||
// Execute SetPos() on the main thread.
|
|
||||||
runner_->SetPos(browser, vec[0], vec[1], vec[2], vec[3]);
|
runner_->SetPos(browser, vec[0], vec[1], vec[2], vec[3]);
|
||||||
}
|
}
|
||||||
} else if (message_name == kMessageMinimizeName) {
|
} else if (message_name == kMessageMinimizeName) {
|
||||||
// Execute Minimize() on the main thread.
|
|
||||||
runner_->Minimize(browser);
|
runner_->Minimize(browser);
|
||||||
} else if (message_name == kMessageMaximizeName) {
|
} else if (message_name == kMessageMaximizeName) {
|
||||||
// Execute Maximize() on the main thread.
|
|
||||||
runner_->Maximize(browser);
|
runner_->Maximize(browser);
|
||||||
} else if (message_name == kMessageRestoreName) {
|
} else if (message_name == kMessageRestoreName) {
|
||||||
// Execute Restore() on the main thread.
|
|
||||||
runner_->Restore(browser);
|
runner_->Restore(browser);
|
||||||
|
} else if (message_name.find(kMessageTitlebarHeightName) == 0) {
|
||||||
|
const auto height = ParseHeight(message_name);
|
||||||
|
runner_->SetTitleBarHeight(browser, height);
|
||||||
} else {
|
} else {
|
||||||
NOTREACHED();
|
NOTREACHED();
|
||||||
}
|
}
|
||||||
|
@@ -36,5 +36,10 @@ void WindowTestRunner::ModifyBounds(const CefRect& display, CefRect& window) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WindowTestRunner::SetTitleBarHeight(CefRefPtr<CefBrowser> browser,
|
||||||
|
const std::optional<float>& height) {
|
||||||
|
NOTIMPLEMENTED();
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace window_test
|
} // namespace window_test
|
||||||
} // namespace client
|
} // namespace client
|
||||||
|
@@ -8,6 +8,8 @@
|
|||||||
|
|
||||||
#include "include/cef_browser.h"
|
#include "include/cef_browser.h"
|
||||||
|
|
||||||
|
#include <optional>
|
||||||
|
|
||||||
namespace client {
|
namespace client {
|
||||||
namespace window_test {
|
namespace window_test {
|
||||||
|
|
||||||
@@ -15,6 +17,8 @@ namespace window_test {
|
|||||||
// the browser process UI thread unless otherwise indicated.
|
// the browser process UI thread unless otherwise indicated.
|
||||||
class WindowTestRunner {
|
class WindowTestRunner {
|
||||||
public:
|
public:
|
||||||
|
virtual ~WindowTestRunner() = default;
|
||||||
|
|
||||||
virtual void SetPos(CefRefPtr<CefBrowser> browser,
|
virtual void SetPos(CefRefPtr<CefBrowser> browser,
|
||||||
int x,
|
int x,
|
||||||
int y,
|
int y,
|
||||||
@@ -28,7 +32,8 @@ class WindowTestRunner {
|
|||||||
// corner of the display.
|
// corner of the display.
|
||||||
static void ModifyBounds(const CefRect& display, CefRect& window);
|
static void ModifyBounds(const CefRect& display, CefRect& window);
|
||||||
|
|
||||||
virtual ~WindowTestRunner() {}
|
virtual void SetTitleBarHeight(CefRefPtr<CefBrowser> browser,
|
||||||
|
const std::optional<float>& height);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace window_test
|
} // namespace window_test
|
||||||
|
@@ -9,12 +9,15 @@
|
|||||||
#include "include/views/cef_window.h"
|
#include "include/views/cef_window.h"
|
||||||
#include "include/wrapper/cef_helpers.h"
|
#include "include/wrapper/cef_helpers.h"
|
||||||
|
|
||||||
|
#include "tests/cefclient/browser/root_window_views.h"
|
||||||
|
#include "tests/cefclient/browser/views_window.h"
|
||||||
|
|
||||||
namespace client {
|
namespace client {
|
||||||
namespace window_test {
|
namespace window_test {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
CefRefPtr<CefWindow> GetWindow(CefRefPtr<CefBrowser> browser) {
|
CefRefPtr<CefWindow> GetWindow(const CefRefPtr<CefBrowser>& browser) {
|
||||||
CEF_REQUIRE_UI_THREAD();
|
CEF_REQUIRE_UI_THREAD();
|
||||||
DCHECK(browser->GetHost()->HasView());
|
DCHECK(browser->GetHost()->HasView());
|
||||||
|
|
||||||
@@ -27,6 +30,16 @@ CefRefPtr<CefWindow> GetWindow(CefRefPtr<CefBrowser> browser) {
|
|||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetTitlebarHeight(const CefRefPtr<CefBrowser>& browser,
|
||||||
|
const std::optional<float>& height) {
|
||||||
|
CEF_REQUIRE_UI_THREAD();
|
||||||
|
auto root_window = RootWindow::GetForBrowser(browser->GetIdentifier());
|
||||||
|
DCHECK(root_window.get());
|
||||||
|
|
||||||
|
auto root_window_views = static_cast<RootWindowViews*>(root_window.get());
|
||||||
|
root_window_views->SetTitlebarHeight(height);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
WindowTestRunnerViews::WindowTestRunnerViews() {}
|
WindowTestRunnerViews::WindowTestRunnerViews() {}
|
||||||
@@ -56,5 +69,11 @@ void WindowTestRunnerViews::Restore(CefRefPtr<CefBrowser> browser) {
|
|||||||
GetWindow(browser)->Restore();
|
GetWindow(browser)->Restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WindowTestRunnerViews::SetTitleBarHeight(
|
||||||
|
CefRefPtr<CefBrowser> browser,
|
||||||
|
const std::optional<float>& height) {
|
||||||
|
SetTitlebarHeight(browser, height);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace window_test
|
} // namespace window_test
|
||||||
} // namespace client
|
} // namespace client
|
||||||
|
@@ -24,6 +24,8 @@ class WindowTestRunnerViews : public WindowTestRunner {
|
|||||||
void Minimize(CefRefPtr<CefBrowser> browser) override;
|
void Minimize(CefRefPtr<CefBrowser> browser) override;
|
||||||
void Maximize(CefRefPtr<CefBrowser> browser) override;
|
void Maximize(CefRefPtr<CefBrowser> browser) override;
|
||||||
void Restore(CefRefPtr<CefBrowser> browser) override;
|
void Restore(CefRefPtr<CefBrowser> browser) override;
|
||||||
|
void SetTitleBarHeight(CefRefPtr<CefBrowser> browser,
|
||||||
|
const std::optional<float>& height) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace window_test
|
} // namespace window_test
|
||||||
|
@@ -568,7 +568,7 @@ function onUnload() {
|
|||||||
Status information and messages will be displayed in the center of the screen.
|
Status information and messages will be displayed in the center of the screen.
|
||||||
After creating a route you can send messages to the receiver app using the textarea at the bottom of the screen.
|
After creating a route you can send messages to the receiver app using the textarea at the bottom of the screen.
|
||||||
Messages are usually in JSON format with a example of Cast communication to be found
|
Messages are usually in JSON format with a example of Cast communication to be found
|
||||||
<a href="https://bitbucket.org/chromiumembedded/cef/issues/2900/add-mediarouter-support-for-cast-receiver#comment-56680326" target="_blank">here</a>.
|
<a href="https://github.com/chromiumembedded/cef/issues/2900#issuecomment-1465022620" target="_blank">here</a>.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="route_controls">
|
<div class="route_controls">
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
<html>
|
<!DOCTYPE html>
|
||||||
|
<html lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<title>Window Test</title>
|
<title>Window Test</title>
|
||||||
<script>
|
<script>
|
||||||
@@ -47,6 +48,14 @@ function position() {
|
|||||||
else
|
else
|
||||||
send_message('Position', x + ',' + y + ',' + width + ',' + height);
|
send_message('Position', x + ',' + y + ',' + width + ',' + height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setTitlebarHeight() {
|
||||||
|
const height = parseFloat(document.getElementById('title_bar_height').value);
|
||||||
|
if (isNaN(height))
|
||||||
|
send_message('TitlebarHeight');
|
||||||
|
else
|
||||||
|
send_message('TitlebarHeight', height);
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body bgcolor="white" onload="setup()">
|
<body bgcolor="white" onload="setup()">
|
||||||
@@ -60,6 +69,8 @@ X: <input type="text" size="4" id="x" value="200">
|
|||||||
Y: <input type="text" size="4" id="y" value="100">
|
Y: <input type="text" size="4" id="y" value="100">
|
||||||
Width: <input type="text" size="4" id="width" value="800">
|
Width: <input type="text" size="4" id="width" value="800">
|
||||||
Height: <input type="text" size="4" id="height" value="600">
|
Height: <input type="text" size="4" id="height" value="600">
|
||||||
|
<br/><input type="button" onclick="setTitlebarHeight();" value="Set Titlebar Height">
|
||||||
|
<input type="number" min="0" max="100" id="title_bar_height" value="50"> (works on macOS with Views)
|
||||||
</form>
|
</form>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@@ -53,7 +53,7 @@ void ClientAppBrowser::OnBeforeCommandLineProcessing(
|
|||||||
// Use software rendering and compositing (disable GPU) for increased FPS
|
// Use software rendering and compositing (disable GPU) for increased FPS
|
||||||
// and decreased CPU usage. This will also disable WebGL so remove these
|
// and decreased CPU usage. This will also disable WebGL so remove these
|
||||||
// switches if you need that capability.
|
// switches if you need that capability.
|
||||||
// See https://bitbucket.org/chromiumembedded/cef/issues/1257 for details.
|
// See https://github.com/chromiumembedded/cef/issues/1257 for details.
|
||||||
if (!command_line->HasSwitch(switches::kEnableGPU)) {
|
if (!command_line->HasSwitch(switches::kEnableGPU)) {
|
||||||
command_line->AppendSwitch("disable-gpu");
|
command_line->AppendSwitch("disable-gpu");
|
||||||
command_line->AppendSwitch("disable-gpu-compositing");
|
command_line->AppendSwitch("disable-gpu-compositing");
|
||||||
@@ -92,24 +92,21 @@ void ClientAppBrowser::OnBeforeCommandLineProcessing(
|
|||||||
void ClientAppBrowser::OnRegisterCustomPreferences(
|
void ClientAppBrowser::OnRegisterCustomPreferences(
|
||||||
cef_preferences_type_t type,
|
cef_preferences_type_t type,
|
||||||
CefRawPtr<CefPreferenceRegistrar> registrar) {
|
CefRawPtr<CefPreferenceRegistrar> registrar) {
|
||||||
DelegateSet::iterator it = delegates_.begin();
|
for (auto& delegate : delegates_) {
|
||||||
for (; it != delegates_.end(); ++it) {
|
delegate->OnRegisterCustomPreferences(this, type, registrar);
|
||||||
(*it)->OnRegisterCustomPreferences(this, type, registrar);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClientAppBrowser::OnContextInitialized() {
|
void ClientAppBrowser::OnContextInitialized() {
|
||||||
DelegateSet::iterator it = delegates_.begin();
|
for (auto& delegate : delegates_) {
|
||||||
for (; it != delegates_.end(); ++it) {
|
delegate->OnContextInitialized(this);
|
||||||
(*it)->OnContextInitialized(this);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClientAppBrowser::OnBeforeChildProcessLaunch(
|
void ClientAppBrowser::OnBeforeChildProcessLaunch(
|
||||||
CefRefPtr<CefCommandLine> command_line) {
|
CefRefPtr<CefCommandLine> command_line) {
|
||||||
DelegateSet::iterator it = delegates_.begin();
|
for (auto& delegate : delegates_) {
|
||||||
for (; it != delegates_.end(); ++it) {
|
delegate->OnBeforeChildProcessLaunch(this, command_line);
|
||||||
(*it)->OnBeforeChildProcessLaunch(this, command_line);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,4 +119,13 @@ void ClientAppBrowser::OnScheduleMessagePumpWork(int64 delay) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CefRefPtr<CefClient> ClientAppBrowser::GetDefaultClient() {
|
||||||
|
for (auto& delegate : delegates_) {
|
||||||
|
if (auto client = delegate->GetDefaultClient(this)) {
|
||||||
|
return client;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace client
|
} // namespace client
|
||||||
|
@@ -34,6 +34,11 @@ class ClientAppBrowser : public ClientApp, public CefBrowserProcessHandler {
|
|||||||
virtual void OnBeforeChildProcessLaunch(
|
virtual void OnBeforeChildProcessLaunch(
|
||||||
CefRefPtr<ClientAppBrowser> app,
|
CefRefPtr<ClientAppBrowser> app,
|
||||||
CefRefPtr<CefCommandLine> command_line) {}
|
CefRefPtr<CefCommandLine> command_line) {}
|
||||||
|
|
||||||
|
virtual CefRefPtr<CefClient> GetDefaultClient(
|
||||||
|
CefRefPtr<ClientAppBrowser> app) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::set<CefRefPtr<Delegate>> DelegateSet;
|
typedef std::set<CefRefPtr<Delegate>> DelegateSet;
|
||||||
@@ -71,6 +76,7 @@ class ClientAppBrowser : public ClientApp, public CefBrowserProcessHandler {
|
|||||||
void OnBeforeChildProcessLaunch(
|
void OnBeforeChildProcessLaunch(
|
||||||
CefRefPtr<CefCommandLine> command_line) override;
|
CefRefPtr<CefCommandLine> command_line) override;
|
||||||
void OnScheduleMessagePumpWork(int64 delay) override;
|
void OnScheduleMessagePumpWork(int64 delay) override;
|
||||||
|
CefRefPtr<CefClient> GetDefaultClient() override;
|
||||||
|
|
||||||
// Set of supported Delegates.
|
// Set of supported Delegates.
|
||||||
DelegateSet delegates_;
|
DelegateSet delegates_;
|
||||||
|
@@ -52,6 +52,7 @@ const char kHideChromeStatusBubble[] = "hide-chrome-status-bubble";
|
|||||||
const char kUseDefaultPopup[] = "use-default-popup";
|
const char kUseDefaultPopup[] = "use-default-popup";
|
||||||
const char kUseClientDialogs[] = "use-client-dialogs";
|
const char kUseClientDialogs[] = "use-client-dialogs";
|
||||||
const char kUseTestHttpServer[] = "use-test-http-server";
|
const char kUseTestHttpServer[] = "use-test-http-server";
|
||||||
|
const char kShowWindowButtons[] = "show-window-buttons";
|
||||||
|
|
||||||
} // namespace switches
|
} // namespace switches
|
||||||
} // namespace client
|
} // namespace client
|
||||||
|
@@ -46,6 +46,7 @@ extern const char kHideChromeStatusBubble[];
|
|||||||
extern const char kUseDefaultPopup[];
|
extern const char kUseDefaultPopup[];
|
||||||
extern const char kUseClientDialogs[];
|
extern const char kUseClientDialogs[];
|
||||||
extern const char kUseTestHttpServer[];
|
extern const char kUseTestHttpServer[];
|
||||||
|
extern const char kShowWindowButtons[];
|
||||||
|
|
||||||
} // namespace switches
|
} // namespace switches
|
||||||
} // namespace client
|
} // namespace client
|
||||||
|
14
tools/distrib/mac/README.sandbox.txt
Normal file
14
tools/distrib/mac/README.sandbox.txt
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
CONTENTS
|
||||||
|
--------
|
||||||
|
|
||||||
|
Debug Contains the Debug build of cef_sandbox.a.
|
||||||
|
|
||||||
|
Release Contains the Release build of cef_sandbox.a.
|
||||||
|
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
-----
|
||||||
|
|
||||||
|
Please visit the CEF Website for usage information.
|
||||||
|
|
||||||
|
https://bitbucket.org/chromiumembedded/cef/
|
@@ -110,7 +110,7 @@ if platform == 'windows':
|
|||||||
# installed (e.g. not discoverable via the Windows registry) then
|
# installed (e.g. not discoverable via the Windows registry) then
|
||||||
# "%GYP_MSVS_OVERRIDE_PATH%\Common7\Tools\vsdevcmd\core\winsdk.bat" must be
|
# "%GYP_MSVS_OVERRIDE_PATH%\Common7\Tools\vsdevcmd\core\winsdk.bat" must be
|
||||||
# patched to support discovery via SDK_ROOT as described in
|
# patched to support discovery via SDK_ROOT as described in
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2773#comment-59687474.
|
# https://github.com/chromiumembedded/cef/issues/2773#issuecomment-1465019898.
|
||||||
#
|
#
|
||||||
if bool(int(os.environ.get('WIN_CUSTOM_TOOLCHAIN', '0'))):
|
if bool(int(os.environ.get('WIN_CUSTOM_TOOLCHAIN', '0'))):
|
||||||
required_vars = [
|
required_vars = [
|
||||||
|
@@ -225,7 +225,7 @@ def GetRecommendedDefaultArgs():
|
|||||||
|
|
||||||
# Disable V8 sandboxed pointers to avoid crashing when using
|
# Disable V8 sandboxed pointers to avoid crashing when using
|
||||||
# CefV8Value::CreateArrayBuffer with memory allocated outside of the V8
|
# CefV8Value::CreateArrayBuffer with memory allocated outside of the V8
|
||||||
# sandbox. See https://bitbucket.org/chromiumembedded/cef/issues/3332.
|
# sandbox. See https://github.com/chromiumembedded/cef/issues/3332.
|
||||||
'v8_enable_sandbox': False,
|
'v8_enable_sandbox': False,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -237,7 +237,7 @@ def GetRecommendedDefaultArgs():
|
|||||||
if platform != 'windows':
|
if platform != 'windows':
|
||||||
# Only allow non-component Debug builds on non-Windows platforms. These
|
# Only allow non-component Debug builds on non-Windows platforms. These
|
||||||
# builds will fail on Windows due to linker issues (running out of memory,
|
# builds will fail on Windows due to linker issues (running out of memory,
|
||||||
# etc). See https://bitbucket.org/chromiumembedded/cef/issues/2679.
|
# etc). See https://github.com/chromiumembedded/cef/issues/2679.
|
||||||
result['forbid_non_component_debug_builds'] = False
|
result['forbid_non_component_debug_builds'] = False
|
||||||
|
|
||||||
if platform == 'linux':
|
if platform == 'linux':
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
# Resort order of object files in libcef.ninja file.
|
# Resort order of object files in libcef.ninja file.
|
||||||
#
|
#
|
||||||
# See: https://bitbucket.org/chromiumembedded/cef/issues/1999
|
# See: https://github.com/chromiumembedded/cef/issues/1999
|
||||||
#
|
#
|
||||||
# Usage:
|
# Usage:
|
||||||
# import issue_1999
|
# import issue_1999
|
||||||
|
Reference in New Issue
Block a user