mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Add NUM_VALUES for enums and size for structs (see #3836)
API versioning requires that enumerations end with a count value (`*_NUM_VALUES`) and structs begin with a size value (`size_t size`). Wrapper templates are updated to support structs with different size values indicating different versions. To test: Run `ceftests --gtest_filter=ApiVersionTest.StructVersion*`
This commit is contained in:
@@ -18,7 +18,7 @@ media::ChannelLayoutConfig TranslateChannelLayout(
|
||||
// between those enums and existing values don't ever change, so it's enough
|
||||
// to check that there are no new ones added.
|
||||
static_assert(
|
||||
static_cast<int>(CEF_CHANNEL_LAYOUT_MAX) ==
|
||||
static_cast<int>(CEF_CHANNEL_NUM_VALUES) - 1 ==
|
||||
static_cast<int>(media::CHANNEL_LAYOUT_MAX),
|
||||
"cef_channel_layout_t must match the ChannelLayout enum in Chromium");
|
||||
|
||||
|
@@ -379,18 +379,22 @@ void CefBrowserContentsDelegate::PrimaryMainFrameRenderProcessGone(
|
||||
base::TerminationStatus status) {
|
||||
static_assert(static_cast<int>(CEF_RESULT_CODE_CHROME_FIRST) ==
|
||||
static_cast<int>(chrome::RESULT_CODE_CHROME_START),
|
||||
"enum mismatch");
|
||||
"CEF_RESULT_CODE_CHROME_FIRST must match "
|
||||
"chrome::RESULT_CODE_CHROME_START");
|
||||
static_assert(static_cast<int>(CEF_RESULT_CODE_CHROME_LAST) ==
|
||||
static_cast<int>(chrome::RESULT_CODE_CHROME_LAST_CODE),
|
||||
"enum mismatch");
|
||||
"CEF_RESULT_CODE_CHROME_LAST must match "
|
||||
"chrome::RESULT_CODE_CHROME_LAST_CODE");
|
||||
|
||||
#if defined(OS_WIN)
|
||||
static_assert(static_cast<int>(CEF_RESULT_CODE_SANDBOX_FATAL_FIRST) ==
|
||||
static_cast<int>(sandbox::SBOX_FATAL_INTEGRITY),
|
||||
"enum mismatch");
|
||||
static_assert(static_cast<int>(CEF_RESULT_CODE_SANDBOX_FATAL_LAST) ==
|
||||
static_cast<int>(sandbox::SBOX_FATAL_LAST),
|
||||
"enum mismatch");
|
||||
"CEF_RESULT_CODE_SANDBOX_FATAL_FIRST must match "
|
||||
"sandbox::SBOX_FATAL_INTEGRITY");
|
||||
static_assert(
|
||||
static_cast<int>(CEF_RESULT_CODE_SANDBOX_FATAL_LAST) ==
|
||||
static_cast<int>(sandbox::SBOX_FATAL_LAST),
|
||||
"CEF_RESULT_CODE_SANDBOX_FATAL_LAST must match sandbox::SBOX_FATAL_LAST");
|
||||
#endif
|
||||
|
||||
cef_termination_status_t ts = TS_ABNORMAL_TERMINATION;
|
||||
|
@@ -57,7 +57,7 @@ bool CefBrowserHost::CreateBrowser(
|
||||
}
|
||||
|
||||
// Verify that the settings structure is a valid size.
|
||||
if (settings.size != sizeof(cef_browser_settings_t)) {
|
||||
if (!CEF_MEMBER_EXISTS(&settings, chrome_zoom_bubble)) {
|
||||
DCHECK(false) << "invalid CefBrowserSettings structure size";
|
||||
return false;
|
||||
}
|
||||
@@ -115,7 +115,7 @@ CefRefPtr<CefBrowser> CefBrowserHost::CreateBrowserSync(
|
||||
}
|
||||
|
||||
// Verify that the settings structure is a valid size.
|
||||
if (settings.size != sizeof(cef_browser_settings_t)) {
|
||||
if (!CEF_MEMBER_EXISTS(&settings, chrome_zoom_bubble)) {
|
||||
DCHECK(false) << "invalid CefBrowserSettings structure size";
|
||||
return nullptr;
|
||||
}
|
||||
|
@@ -292,9 +292,10 @@ bool ChromeBrowserDelegate::ShowStatusBubble(bool show_by_default) {
|
||||
bool ChromeBrowserDelegate::HandleCommand(int command_id,
|
||||
WindowOpenDisposition disposition) {
|
||||
// Verify that our enum matches Chromium's values.
|
||||
static_assert(static_cast<int>(CEF_WOD_MAX_VALUE) ==
|
||||
static_assert(static_cast<int>(CEF_WOD_NUM_VALUES) - 1 ==
|
||||
static_cast<int>(WindowOpenDisposition::MAX_VALUE),
|
||||
"enum mismatch");
|
||||
"Enum values in cef_window_open_disposition_t must match "
|
||||
"WindowOpenDisposition");
|
||||
|
||||
if (auto browser = ChromeBrowserHostImpl::GetBrowserForBrowser(browser_)) {
|
||||
if (auto client = browser->GetClient()) {
|
||||
@@ -333,9 +334,10 @@ bool ChromeBrowserDelegate::IsAppMenuItemEnabled(int command_id) {
|
||||
bool ChromeBrowserDelegate::IsPageActionIconVisible(
|
||||
PageActionIconType icon_type) {
|
||||
// Verify that our enum matches Chromium's values.
|
||||
static_assert(static_cast<int>(CEF_CPAIT_LAST_VALUE) - 1 ==
|
||||
static_assert(static_cast<int>(CEF_CPAIT_NUM_VALUES) - 1 ==
|
||||
static_cast<int>(PageActionIconType::kMaxValue),
|
||||
"enum mismatch");
|
||||
"Enum values in cef_chrome_page_action_icon_type_t must match "
|
||||
"PageActionIconType");
|
||||
|
||||
if (auto client = create_params_.client) {
|
||||
if (auto handler = client->GetCommandHandler()) {
|
||||
@@ -349,9 +351,10 @@ bool ChromeBrowserDelegate::IsPageActionIconVisible(
|
||||
bool ChromeBrowserDelegate::IsToolbarButtonVisible(
|
||||
ToolbarButtonType button_type) {
|
||||
// Verify that our enum matches BrowserDelegate's values.
|
||||
static_assert(static_cast<int>(CEF_CTBT_MAX_VALUE) ==
|
||||
static_assert(static_cast<int>(CEF_CTBT_NUM_VALUES) - 1 ==
|
||||
static_cast<int>(ToolbarButtonType::kMaxValue),
|
||||
"enum mismatch");
|
||||
"Enum values in cef_chrome_toolbar_button_type_t must match "
|
||||
"ToolbarButtonType");
|
||||
|
||||
if (auto client = create_params_.client) {
|
||||
if (auto handler = client->GetCommandHandler()) {
|
||||
|
@@ -315,7 +315,7 @@ bool CefInitialize(const CefMainArgs& args,
|
||||
return true;
|
||||
}
|
||||
|
||||
if (settings.size != sizeof(cef_settings_t)) {
|
||||
if (!CEF_MEMBER_EXISTS(&settings, disable_signal_handlers)) {
|
||||
DCHECK(false) << "invalid CefSettings structure size";
|
||||
return false;
|
||||
}
|
||||
|
@@ -300,6 +300,9 @@ void CefFileDialogManager::RunFileDialog(
|
||||
case FILE_DIALOG_SAVE:
|
||||
params.mode = blink::mojom::FileChooserParams::Mode::kSave;
|
||||
break;
|
||||
case FILE_DIALOG_NUM_VALUES:
|
||||
DCHECK(false);
|
||||
return;
|
||||
}
|
||||
|
||||
params.title = title;
|
||||
|
@@ -120,6 +120,12 @@ class CefRegistrationImpl : public CefRegistration,
|
||||
|
||||
static CefMediaObserver::ConnectionState ToConnectionState(
|
||||
blink::mojom::PresentationConnectionState state) {
|
||||
static_assert(static_cast<int>(CEF_MRCS_NUM_VALUES) - 1 ==
|
||||
static_cast<int>(
|
||||
blink::mojom::PresentationConnectionState::kMaxValue),
|
||||
"Enum values in cef_media_route_connection_state_t must "
|
||||
"match blink::mojom::PresentationConnectionState");
|
||||
|
||||
switch (state) {
|
||||
case blink::mojom::PresentationConnectionState::CONNECTING:
|
||||
return CEF_MRCS_CONNECTING;
|
||||
@@ -284,6 +290,12 @@ void CefMediaRouterImpl::NotifyCurrentRoutesInternal() {
|
||||
void CefMediaRouterImpl::CreateRouteCallback(
|
||||
CefRefPtr<CefMediaRouteCreateCallback> callback,
|
||||
const media_router::RouteRequestResult& result) {
|
||||
static_assert(static_cast<int>(CEF_MRCR_NUM_VALUES) - 1 ==
|
||||
static_cast<int>(
|
||||
media_router::mojom::RouteRequestResultCode::kMaxValue),
|
||||
"Enum values in cef_media_route_create_result_t must match "
|
||||
"media_router::mojom::RouteRequestResultCode");
|
||||
|
||||
DCHECK(ValidContext());
|
||||
|
||||
if (result.result_code() != media_router::mojom::RouteRequestResultCode::OK) {
|
||||
|
@@ -105,9 +105,10 @@ CefString CefMediaSinkImpl::GetName() {
|
||||
|
||||
CefMediaSink::IconType CefMediaSinkImpl::GetIconType() {
|
||||
// Verify that our enum matches Chromium's values.
|
||||
static_assert(static_cast<int>(CEF_MSIT_TOTAL_COUNT) ==
|
||||
static_assert(static_cast<int>(CEF_MSIT_NUM_VALUES) ==
|
||||
static_cast<int>(media_router::SinkIconType::TOTAL_COUNT),
|
||||
"enum mismatch");
|
||||
"Enum values in cef_media_sink_icon_type_t must match "
|
||||
"media_router::SinkIconType");
|
||||
|
||||
return static_cast<CefMediaSink::IconType>(sink_.icon_type());
|
||||
}
|
||||
|
@@ -240,7 +240,7 @@ struct CefMenuModelImpl::Item {
|
||||
bool ctrl_pressed_ = false;
|
||||
bool alt_pressed_ = false;
|
||||
|
||||
cef_color_t colors_[CEF_MENU_COLOR_COUNT] = {0};
|
||||
cef_color_t colors_[CEF_MENU_COLOR_NUM_VALUES] = {0};
|
||||
gfx::FontList font_list_;
|
||||
bool has_font_list_ = false;
|
||||
};
|
||||
@@ -744,7 +744,7 @@ bool CefMenuModelImpl::SetColorAt(int index,
|
||||
return false;
|
||||
}
|
||||
|
||||
if (color_type < 0 || color_type >= CEF_MENU_COLOR_COUNT) {
|
||||
if (color_type < 0 || color_type >= CEF_MENU_COLOR_NUM_VALUES) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -775,7 +775,7 @@ bool CefMenuModelImpl::GetColorAt(int index,
|
||||
return false;
|
||||
}
|
||||
|
||||
if (color_type < 0 || color_type >= CEF_MENU_COLOR_COUNT) {
|
||||
if (color_type < 0 || color_type >= CEF_MENU_COLOR_NUM_VALUES) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@@ -225,7 +225,7 @@ class CefMenuModelImpl : public CefMenuModel {
|
||||
std::unique_ptr<ui::MenuModel> model_;
|
||||
|
||||
// Style information.
|
||||
cef_color_t default_colors_[CEF_MENU_COLOR_COUNT] = {0};
|
||||
cef_color_t default_colors_[CEF_MENU_COLOR_NUM_VALUES] = {0};
|
||||
gfx::FontList default_font_list_;
|
||||
bool has_default_font_list_ = false;
|
||||
|
||||
|
@@ -178,6 +178,8 @@ ui::ImeTextSpan::UnderlineStyle GetImeUnderlineStyle(
|
||||
return ui::ImeTextSpan::UnderlineStyle::kDash;
|
||||
case CEF_CUS_NONE:
|
||||
return ui::ImeTextSpan::UnderlineStyle::kNone;
|
||||
case CEF_CUS_NUM_VALUES:
|
||||
break;
|
||||
}
|
||||
|
||||
DCHECK(false);
|
||||
@@ -1474,7 +1476,7 @@ void CefRenderWidgetHostViewOSR::OnUpdateTextInputStateCalled(
|
||||
CefRenderHandler::TextInputMode mode = CEF_TEXT_INPUT_MODE_NONE;
|
||||
if (state && state->type != ui::TEXT_INPUT_TYPE_NONE) {
|
||||
static_assert(
|
||||
static_cast<int>(CEF_TEXT_INPUT_MODE_MAX) ==
|
||||
static_cast<int>(CEF_TEXT_INPUT_MODE_NUM_VALUES) - 1 ==
|
||||
static_cast<int>(ui::TEXT_INPUT_MODE_MAX),
|
||||
"Enum values in cef_text_input_mode_t must match ui::TextInputMode");
|
||||
mode = static_cast<CefRenderHandler::TextInputMode>(state->mode);
|
||||
|
@@ -137,7 +137,8 @@ void CefVideoConsumerOSR::OnFrameCaptured(
|
||||
: CEF_COLOR_TYPE_BGRA_8888;
|
||||
|
||||
// Build extra common info.
|
||||
cef_accelerated_paint_info_common_t extra = {};
|
||||
cef_accelerated_paint_info_common_t extra = {
|
||||
sizeof(cef_accelerated_paint_info_common_t)};
|
||||
extra.timestamp = info->timestamp.InMicroseconds();
|
||||
extra.coded_size = {info->coded_size.width(), info->coded_size.height()};
|
||||
extra.visible_rect = {info->visible_rect.x(), info->visible_rect.y(),
|
||||
|
@@ -154,6 +154,9 @@ class CefPermissionPrompt : public permissions::PermissionPrompt {
|
||||
case CEF_PERMISSION_RESULT_IGNORE:
|
||||
delegate_->Ignore();
|
||||
break;
|
||||
case CEF_PERMISSION_RESULT_NUM_VALUES:
|
||||
DCHECK(false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -58,6 +58,9 @@ class CefPreferenceRegistrarImpl : public CefPreferenceRegistrar {
|
||||
case VTYPE_LIST:
|
||||
RegisterComplexPref(nameStr, default_value);
|
||||
return true;
|
||||
case VTYPE_NUM_VALUES:
|
||||
DCHECK(false);
|
||||
return false;
|
||||
};
|
||||
|
||||
LOG(ERROR) << "Invalid value type for preference: " << nameStr;
|
||||
|
@@ -130,6 +130,12 @@ CefRefPtr<CefRequestContext> CefRequestContext::CreateContext(
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// Verify that the settings structure is a valid size.
|
||||
if (!CEF_MEMBER_EXISTS(&settings, cookieable_schemes_exclude_defaults)) {
|
||||
DCHECK(false) << "invalid CefRequestContextSettings structure size";
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
CefRequestContextImpl::Config config;
|
||||
config.settings = settings;
|
||||
config.handler = handler;
|
||||
|
@@ -200,6 +200,9 @@ class CefTestServerImpl::Context {
|
||||
case CEF_TEST_CERT_EXPIRED:
|
||||
test_server_->SetSSLConfig(EmbeddedTestServer::CERT_EXPIRED);
|
||||
break;
|
||||
case CEF_TEST_CERT_NUM_VALUES:
|
||||
DCHECK(false);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -7,22 +7,36 @@
|
||||
#include "cef/libcef/browser/thread_util.h"
|
||||
|
||||
namespace {
|
||||
|
||||
static int CefCommandIdToChromeId(cef_text_field_commands_t command_id) {
|
||||
static_assert(static_cast<int>(CEF_TFC_NUM_VALUES) - 1 ==
|
||||
static_cast<int>(views::Textfield::kLastCommandId),
|
||||
"Enum values in cef_text_field_commands_t must match "
|
||||
"views::Textfield::MenuCommands");
|
||||
switch (command_id) {
|
||||
case cef_text_field_commands_t::CEF_TFC_CUT:
|
||||
case CEF_TFC_UNKNOWN:
|
||||
return 0;
|
||||
case CEF_TFC_CUT:
|
||||
return views::Textfield::kCut;
|
||||
case cef_text_field_commands_t::CEF_TFC_COPY:
|
||||
case CEF_TFC_COPY:
|
||||
return views::Textfield::kCopy;
|
||||
case cef_text_field_commands_t::CEF_TFC_PASTE:
|
||||
case CEF_TFC_PASTE:
|
||||
return views::Textfield::kPaste;
|
||||
case cef_text_field_commands_t::CEF_TFC_UNDO:
|
||||
return views::Textfield::kUndo;
|
||||
case cef_text_field_commands_t::CEF_TFC_DELETE:
|
||||
return views::Textfield::kDelete;
|
||||
case cef_text_field_commands_t::CEF_TFC_SELECT_ALL:
|
||||
case CEF_TFC_SELECT_ALL:
|
||||
return views::Textfield::kSelectAll;
|
||||
case CEF_TFC_SELECT_WORD:
|
||||
return views::Textfield::kSelectWord;
|
||||
case CEF_TFC_UNDO:
|
||||
return views::Textfield::kUndo;
|
||||
case CEF_TFC_DELETE:
|
||||
return views::Textfield::kDelete;
|
||||
case CEF_TFC_NUM_VALUES:
|
||||
break;
|
||||
}
|
||||
DCHECK(false) << "Unsupported command ID " << command_id;
|
||||
return 0;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
// static
|
||||
|
@@ -351,7 +351,7 @@ SkColor GetColor(const views::View* view, ui::ColorId id) {
|
||||
// Verify that our enum matches Chromium's values.
|
||||
static_assert(static_cast<int>(CEF_ChromeColorsEnd) ==
|
||||
static_cast<int>(kChromeColorsEnd),
|
||||
"enum mismatch");
|
||||
"Enum values in cef_color_id_t must match ChromeColorIds");
|
||||
|
||||
// |color_provider| will be nullptr if |view| has not yet been added to a
|
||||
// Widget.
|
||||
|
@@ -471,6 +471,9 @@ void CefWindowView::CreateWidget(gfx::AcceleratedWidget parent_widget) {
|
||||
params.show_state = ui::mojom::WindowShowState::kMinimized;
|
||||
#endif
|
||||
break;
|
||||
case CEF_SHOW_STATE_NUM_VALUES:
|
||||
DCHECK(false);
|
||||
break;
|
||||
}
|
||||
|
||||
bool is_menu = false;
|
||||
|
@@ -208,7 +208,12 @@ net::CookieSameSite MakeCookieSameSite(cef_cookie_same_site_t value) {
|
||||
return net::CookieSameSite::LAX_MODE;
|
||||
case CEF_COOKIE_SAME_SITE_STRICT_MODE:
|
||||
return net::CookieSameSite::STRICT_MODE;
|
||||
case CEF_COOKIE_SAME_SITE_NUM_VALUES:
|
||||
break;
|
||||
}
|
||||
|
||||
DCHECK(false);
|
||||
return net::CookieSameSite::UNSPECIFIED;
|
||||
}
|
||||
|
||||
net::CookiePriority MakeCookiePriority(cef_cookie_priority_t value) {
|
||||
|
@@ -183,9 +183,10 @@ CefRefPtr<CefRequest> CefRequest::Create() {
|
||||
|
||||
CefRequestImpl::CefRequestImpl() {
|
||||
// Verify that our enum matches Chromium's values.
|
||||
static_assert(static_cast<int>(REFERRER_POLICY_LAST_VALUE) ==
|
||||
static_cast<int>(net::ReferrerPolicy::MAX),
|
||||
"enum mismatch");
|
||||
static_assert(
|
||||
static_cast<int>(REFERRER_POLICY_NUM_VALUES) - 1 ==
|
||||
static_cast<int>(net::ReferrerPolicy::MAX),
|
||||
"Enum values in cef_referrer_policy_t must match net::ReferrerPolicy");
|
||||
|
||||
base::AutoLock lock_scope(lock_);
|
||||
Reset();
|
||||
@@ -751,6 +752,8 @@ CefRequestImpl::NetReferrerPolicyToBlinkReferrerPolicy(
|
||||
return network::mojom::ReferrerPolicy::kStrictOrigin;
|
||||
case REFERRER_POLICY_NO_REFERRER:
|
||||
return network::mojom::ReferrerPolicy::kNever;
|
||||
case REFERRER_POLICY_NUM_VALUES:
|
||||
break;
|
||||
}
|
||||
DCHECK(false);
|
||||
return network::mojom::ReferrerPolicy::kDefault;
|
||||
|
Reference in New Issue
Block a user