mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Convert legacy IPC messages to Mojo (fixes issue #3123)
This change introduces a few minor CEF API behavior changes: - A CefProcessMessage object cannot be reused after being passed to SendProcessMessage. - The |extra_info| argument to CefRenderProcessHandler::OnBrowserCreated may now be NULL. Where appropriate, we now utilize the default UTF string encoding format and shared memory to reduce copies and conversions for the cross-process transfer of arbitrary-length strings. For example, CefFrame::GetSource/GetText now involves zero UTF conversions and zero copies in the browser process for the CefString delivered to CefStringVisitor::Visit().
This commit is contained in:
@@ -79,15 +79,24 @@ struct CefStringTraitsWide {
|
||||
cef_string_utf8_clear(&cstr);
|
||||
return str;
|
||||
}
|
||||
static inline bool from_string(const std::string::value_type* data,
|
||||
size_t length,
|
||||
struct_type* s) {
|
||||
return cef_string_utf8_to_wide(data, length, s) ? true : false;
|
||||
}
|
||||
static inline bool from_string(const std::string& str, struct_type* s) {
|
||||
return cef_string_utf8_to_wide(str.c_str(), str.length(), s) ? true : false;
|
||||
return from_string(str.data(), str.length(), s);
|
||||
}
|
||||
static inline std::wstring to_wstring(const struct_type* s) {
|
||||
return std::wstring(s->str, s->length);
|
||||
}
|
||||
static inline bool from_wstring(const std::wstring::value_type* data,
|
||||
size_t length,
|
||||
struct_type* s) {
|
||||
return cef_string_wide_set(data, length, s, true) ? true : false;
|
||||
}
|
||||
static inline bool from_wstring(const std::wstring& str, struct_type* s) {
|
||||
return cef_string_wide_set(str.c_str(), str.length(), s, true) ? true
|
||||
: false;
|
||||
return from_wstring(str.data(), str.length(), s);
|
||||
}
|
||||
#if defined(WCHAR_T_IS_UTF32)
|
||||
static inline std::u16string to_string16(const struct_type* s) {
|
||||
@@ -102,9 +111,11 @@ struct CefStringTraitsWide {
|
||||
cef_string_utf16_clear(&cstr);
|
||||
return str;
|
||||
}
|
||||
static inline bool from_string16(const std::u16string& str, struct_type* s) {
|
||||
return cef_string_utf16_to_wide(
|
||||
reinterpret_cast<const char16*>(str.c_str()), str.length(), s)
|
||||
static inline bool from_string16(const std::u16string::value_type* data,
|
||||
size_t length,
|
||||
struct_type* s) {
|
||||
return cef_string_utf16_to_wide(reinterpret_cast<const char16*>(data),
|
||||
length, s)
|
||||
? true
|
||||
: false;
|
||||
}
|
||||
@@ -113,13 +124,18 @@ struct CefStringTraitsWide {
|
||||
return std::u16string(
|
||||
reinterpret_cast<const std::u16string::value_type*>(s->str), s->length);
|
||||
}
|
||||
static inline bool from_string16(const std::u16string& str, struct_type* s) {
|
||||
return cef_string_wide_set(reinterpret_cast<const wchar_t*>(str.c_str()),
|
||||
str.length(), s, true)
|
||||
static inline bool from_string16(const std::u16string::value_type* data,
|
||||
size_t length,
|
||||
struct_type* s) {
|
||||
return cef_string_wide_set(reinterpret_cast<const wchar_t*>(data), length,
|
||||
s, true)
|
||||
? true
|
||||
: false;
|
||||
}
|
||||
#endif // WCHAR_T_IS_UTF32
|
||||
static inline bool from_string16(const std::u16string& str, struct_type* s) {
|
||||
return from_string16(str.data(), str.length(), s);
|
||||
}
|
||||
};
|
||||
|
||||
///
|
||||
@@ -154,8 +170,13 @@ struct CefStringTraitsUTF8 {
|
||||
static inline std::string to_string(const struct_type* s) {
|
||||
return std::string(s->str, s->length);
|
||||
}
|
||||
static inline bool from_string(const std::string::value_type* data,
|
||||
size_t length,
|
||||
struct_type* s) {
|
||||
return cef_string_utf8_copy(data, length, s) ? true : false;
|
||||
}
|
||||
static inline bool from_string(const std::string& str, struct_type* s) {
|
||||
return cef_string_utf8_copy(str.c_str(), str.length(), s) ? true : false;
|
||||
return from_string(str.c_str(), str.length(), s);
|
||||
}
|
||||
static inline std::wstring to_wstring(const struct_type* s) {
|
||||
cef_string_wide_t cstr;
|
||||
@@ -167,8 +188,13 @@ struct CefStringTraitsUTF8 {
|
||||
cef_string_wide_clear(&cstr);
|
||||
return str;
|
||||
}
|
||||
static inline bool from_wstring(const std::wstring::value_type* data,
|
||||
size_t length,
|
||||
struct_type* s) {
|
||||
return cef_string_wide_to_utf8(data, length, s) ? true : false;
|
||||
}
|
||||
static inline bool from_wstring(const std::wstring& str, struct_type* s) {
|
||||
return cef_string_wide_to_utf8(str.c_str(), str.length(), s) ? true : false;
|
||||
return from_wstring(str.data(), str.length(), s);
|
||||
}
|
||||
static inline std::u16string to_string16(const struct_type* s) {
|
||||
cef_string_utf16_t cstr;
|
||||
@@ -182,12 +208,17 @@ struct CefStringTraitsUTF8 {
|
||||
cef_string_utf16_clear(&cstr);
|
||||
return str;
|
||||
}
|
||||
static inline bool from_string16(const std::u16string& str, struct_type* s) {
|
||||
return cef_string_utf16_to_utf8(
|
||||
reinterpret_cast<const char16*>(str.c_str()), str.length(), s)
|
||||
static inline bool from_string16(const std::u16string::value_type* data,
|
||||
size_t length,
|
||||
struct_type* s) {
|
||||
return cef_string_utf16_to_utf8(reinterpret_cast<const char16*>(data),
|
||||
length, s)
|
||||
? true
|
||||
: false;
|
||||
}
|
||||
static inline bool from_string16(const std::u16string& str, struct_type* s) {
|
||||
return from_string16(str.data(), str.length(), s);
|
||||
}
|
||||
};
|
||||
|
||||
///
|
||||
@@ -229,9 +260,13 @@ struct CefStringTraitsUTF16 {
|
||||
cef_string_utf8_clear(&cstr);
|
||||
return str;
|
||||
}
|
||||
static inline bool from_string(const std::string::value_type* data,
|
||||
size_t length,
|
||||
struct_type* s) {
|
||||
return cef_string_utf8_to_utf16(data, length, s) ? true : false;
|
||||
}
|
||||
static inline bool from_string(const std::string& str, struct_type* s) {
|
||||
return cef_string_utf8_to_utf16(str.c_str(), str.length(), s) ? true
|
||||
: false;
|
||||
return from_string(str.data(), str.length(), s);
|
||||
}
|
||||
#if defined(WCHAR_T_IS_UTF32)
|
||||
static inline std::wstring to_wstring(const struct_type* s) {
|
||||
@@ -244,29 +279,39 @@ struct CefStringTraitsUTF16 {
|
||||
cef_string_wide_clear(&cstr);
|
||||
return str;
|
||||
}
|
||||
static inline bool from_wstring(const std::wstring& str, struct_type* s) {
|
||||
return cef_string_wide_to_utf16(str.c_str(), str.length(), s) ? true
|
||||
: false;
|
||||
static inline bool from_wstring(const std::wstring::value_type* data,
|
||||
size_t length,
|
||||
struct_type* s) {
|
||||
return cef_string_wide_to_utf16(data, length, s) ? true : false;
|
||||
}
|
||||
#else // WCHAR_T_IS_UTF32
|
||||
static inline std::wstring to_wstring(const struct_type* s) {
|
||||
return std::wstring(s->str, s->length);
|
||||
}
|
||||
static inline bool from_wstring(const std::wstring& str, struct_type* s) {
|
||||
return cef_string_utf16_set(str.c_str(), str.length(), s, true) ? true
|
||||
: false;
|
||||
static inline bool from_wstring(const std::wstring::value_type* data,
|
||||
size_t length,
|
||||
struct_type* s) {
|
||||
return cef_string_utf16_set(data, length, s, true) ? true : false;
|
||||
}
|
||||
#endif // WCHAR_T_IS_UTF32
|
||||
static inline bool from_wstring(const std::wstring& str, struct_type* s) {
|
||||
return from_wstring(str.data(), str.length(), s);
|
||||
}
|
||||
static inline std::u16string to_string16(const struct_type* s) {
|
||||
return std::u16string(
|
||||
reinterpret_cast<const std::u16string::value_type*>(s->str), s->length);
|
||||
}
|
||||
static inline bool from_string16(const std::u16string& str, struct_type* s) {
|
||||
return cef_string_utf16_set(reinterpret_cast<const char16*>(str.c_str()),
|
||||
str.length(), s, true)
|
||||
static inline bool from_string16(const std::u16string::value_type* data,
|
||||
size_t length,
|
||||
struct_type* s) {
|
||||
return cef_string_utf16_set(reinterpret_cast<const char16*>(data), length,
|
||||
s, true)
|
||||
? true
|
||||
: false;
|
||||
}
|
||||
static inline bool from_string16(const std::u16string& str, struct_type* s) {
|
||||
return from_string16(str.data(), str.length(), s);
|
||||
}
|
||||
};
|
||||
|
||||
///
|
||||
@@ -324,9 +369,10 @@ class CefStringBase {
|
||||
CefStringBase(const std::string& src) : string_(NULL), owner_(false) {
|
||||
FromString(src);
|
||||
}
|
||||
CefStringBase(const char* src) : string_(NULL), owner_(false) {
|
||||
CefStringBase(const char* src, size_t length = 0)
|
||||
: string_(NULL), owner_(false) {
|
||||
if (src)
|
||||
FromString(std::string(src));
|
||||
FromString(src, length);
|
||||
}
|
||||
|
||||
///
|
||||
@@ -337,9 +383,10 @@ class CefStringBase {
|
||||
CefStringBase(const std::wstring& src) : string_(NULL), owner_(false) {
|
||||
FromWString(src);
|
||||
}
|
||||
CefStringBase(const wchar_t* src) : string_(NULL), owner_(false) {
|
||||
CefStringBase(const wchar_t* src, size_t length = 0)
|
||||
: string_(NULL), owner_(false) {
|
||||
if (src)
|
||||
FromWString(std::wstring(src));
|
||||
FromWString(src, length);
|
||||
}
|
||||
|
||||
///
|
||||
@@ -350,16 +397,17 @@ class CefStringBase {
|
||||
CefStringBase(const std::u16string& src) : string_(NULL), owner_(false) {
|
||||
FromString16(src);
|
||||
}
|
||||
CefStringBase(const std::u16string::value_type* src)
|
||||
CefStringBase(const std::u16string::value_type* src, size_t length = 0)
|
||||
: string_(NULL), owner_(false) {
|
||||
if (src)
|
||||
FromString16(std::u16string(src));
|
||||
FromString16(src, length);
|
||||
}
|
||||
#if defined(WCHAR_T_IS_UTF32)
|
||||
CefStringBase(const char16* src) : string_(NULL), owner_(false) {
|
||||
CefStringBase(const char16* src, size_t length = 0)
|
||||
: string_(NULL), owner_(false) {
|
||||
if (src) {
|
||||
FromString16(std::u16string(
|
||||
reinterpret_cast<const std::u16string::value_type*>(src)));
|
||||
FromString16(reinterpret_cast<const std::u16string::value_type*>(src),
|
||||
length);
|
||||
}
|
||||
}
|
||||
#endif // WCHAR_T_IS_UTF32
|
||||
@@ -599,6 +647,23 @@ class CefStringBase {
|
||||
return traits::from_string(str, string_);
|
||||
}
|
||||
|
||||
///
|
||||
// Set this string's data from existing |data| and optional |length|. Data
|
||||
// will be always copied. Translation will occur if necessary based on the
|
||||
// underlying string type.
|
||||
///
|
||||
bool FromString(const std::string::value_type* data, size_t length = 0) {
|
||||
if (data && length == 0) {
|
||||
length = std::char_traits<std::string::value_type>::length(data);
|
||||
}
|
||||
if (!data || length == 0) {
|
||||
clear();
|
||||
return true;
|
||||
}
|
||||
AllocIfNeeded();
|
||||
return traits::from_string(data, length, string_);
|
||||
}
|
||||
|
||||
///
|
||||
// Return this string's data as a std::wstring. Translation will occur if
|
||||
// necessary based on the underlying string type.
|
||||
@@ -623,6 +688,22 @@ class CefStringBase {
|
||||
return traits::from_wstring(str, string_);
|
||||
}
|
||||
|
||||
///
|
||||
// Set this string's data from existing |data| and optional |length|. Data
|
||||
// will be always copied. Translation will occur if necessary based on the
|
||||
// underlying string type.
|
||||
///
|
||||
bool FromWString(const std::wstring::value_type* data, size_t length = 0) {
|
||||
if (data && length == 0) {
|
||||
length = std::char_traits<std::wstring::value_type>::length(data);
|
||||
}
|
||||
if (!data || length == 0) {
|
||||
clear();
|
||||
return true;
|
||||
}
|
||||
AllocIfNeeded();
|
||||
return traits::from_wstring(data, length, string_);
|
||||
}
|
||||
///
|
||||
// Return this string's data as a string16. Translation will occur if
|
||||
// necessary based on the underlying string type.
|
||||
@@ -647,6 +728,23 @@ class CefStringBase {
|
||||
return traits::from_string16(str, string_);
|
||||
}
|
||||
|
||||
///
|
||||
// Set this string's data from existing |data| and optional |length|. Data
|
||||
// will be always copied. Translation will occur if necessary based on the
|
||||
// underlying string type.
|
||||
///
|
||||
bool FromString16(const std::u16string::value_type* data, size_t length = 0) {
|
||||
if (data && length == 0) {
|
||||
length = std::char_traits<std::u16string::value_type>::length(data);
|
||||
}
|
||||
if (!data || length == 0) {
|
||||
clear();
|
||||
return true;
|
||||
}
|
||||
AllocIfNeeded();
|
||||
return traits::from_string16(data, length, string_);
|
||||
}
|
||||
|
||||
///
|
||||
// Comparison operator overloads.
|
||||
///
|
||||
@@ -677,8 +775,8 @@ class CefStringBase {
|
||||
FromString(str);
|
||||
return *this;
|
||||
}
|
||||
CefStringBase& operator=(const char* str) {
|
||||
FromString(std::string(str));
|
||||
CefStringBase& operator=(const std::string::value_type* str) {
|
||||
FromString(str);
|
||||
return *this;
|
||||
}
|
||||
operator std::wstring() const { return ToWString(); }
|
||||
@@ -686,8 +784,8 @@ class CefStringBase {
|
||||
FromWString(str);
|
||||
return *this;
|
||||
}
|
||||
CefStringBase& operator=(const wchar_t* str) {
|
||||
FromWString(std::wstring(str));
|
||||
CefStringBase& operator=(const std::wstring::value_type* str) {
|
||||
FromWString(str);
|
||||
return *this;
|
||||
}
|
||||
operator std::u16string() const { return ToString16(); }
|
||||
@@ -696,13 +794,12 @@ class CefStringBase {
|
||||
return *this;
|
||||
}
|
||||
CefStringBase& operator=(const std::u16string::value_type* str) {
|
||||
FromString16(std::u16string(str));
|
||||
FromString16(str);
|
||||
return *this;
|
||||
}
|
||||
#if defined(WCHAR_T_IS_UTF32)
|
||||
CefStringBase& operator=(const char16* str) {
|
||||
FromString16(std::u16string(
|
||||
reinterpret_cast<const std::u16string::value_type*>(str)));
|
||||
FromString16(reinterpret_cast<const std::u16string::value_type*>(str));
|
||||
return *this;
|
||||
}
|
||||
#endif // WCHAR_T_IS_UTF32
|
||||
|
Reference in New Issue
Block a user