Introduce WebFallbackFont on the Chromium side

Patch 2 in the series of renaming WebFontFamily to WebFallbackFont,
at the same time, fixing the sandbox support IPC to transmit filename
and ttcIndex. Depends on step 1 of the rename, r175858 in Blink.

BUG=382411
R=eae,behdad,jln,piman

Review URL: https://codereview.chromium.org/327633002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@276520 0039d316-1c4b-4281-b951-d872f2087c98
parent c3f70c1b
......@@ -219,8 +219,8 @@ void SandboxIPCHandler::HandleRequestFromRenderer(int fd) {
HandleFontMatchRequest(fd, pickle, iter, fds.get());
} else if (kind == FontConfigIPC::METHOD_OPEN) {
HandleFontOpenRequest(fd, pickle, iter, fds.get());
} else if (kind == LinuxSandbox::METHOD_GET_FONT_FAMILY_FOR_CHAR) {
HandleGetFontFamilyForChar(fd, pickle, iter, fds.get());
} else if (kind == LinuxSandbox::METHOD_GET_FALLBACK_FONT_FOR_CHAR) {
HandleGetFallbackFontForChar(fd, pickle, iter, fds.get());
} else if (kind == LinuxSandbox::METHOD_LOCALTIME) {
HandleLocaltime(fd, pickle, iter, fds.get());
} else if (kind == LinuxSandbox::METHOD_GET_STYLE_FOR_STRIKE) {
......@@ -311,7 +311,7 @@ void SandboxIPCHandler::HandleFontOpenRequest(
}
}
void SandboxIPCHandler::HandleGetFontFamilyForChar(
void SandboxIPCHandler::HandleGetFallbackFontForChar(
int fd,
const Pickle& pickle,
PickleIterator iter,
......@@ -328,17 +328,23 @@ void SandboxIPCHandler::HandleGetFontFamilyForChar(
if (!pickle.ReadString(&iter, &preferred_locale))
return;
blink::WebFontFamily family;
WebFontInfo::familyForChar(c, preferred_locale.c_str(), &family);
blink::WebFallbackFont fallbackFont;
WebFontInfo::fallbackFontForChar(c, preferred_locale.c_str(), &fallbackFont);
Pickle reply;
if (family.name.data()) {
reply.WriteString(family.name.data());
if (fallbackFont.name.data()) {
reply.WriteString(fallbackFont.name.data());
} else {
reply.WriteString(std::string());
}
reply.WriteBool(family.isBold);
reply.WriteBool(family.isItalic);
if (fallbackFont.filename.data()) {
reply.WriteString(fallbackFont.filename.data());
} else {
reply.WriteString(std::string());
}
reply.WriteInt(fallbackFont.ttcIndex);
reply.WriteBool(fallbackFont.isBold);
reply.WriteBool(fallbackFont.isItalic);
SendRendererReply(fds, reply, -1);
}
......
......@@ -45,7 +45,7 @@ class SandboxIPCHandler : public base::DelegateSimpleThread::Delegate {
PickleIterator iter,
const std::vector<base::ScopedFD*>& fds);
void HandleGetFontFamilyForChar(int fd,
void HandleGetFallbackFontForChar(int fd,
const Pickle& pickle,
PickleIterator iter,
const std::vector<base::ScopedFD*>& fds);
......
......@@ -31,8 +31,8 @@ include_rules = [
"+third_party/WebKit/public/platform/WebServiceWorkerState.h",
"+third_party/WebKit/public/platform/WebStorageArea.h",
"+third_party/WebKit/public/platform/WebString.h",
"+third_party/WebKit/public/platform/linux/WebFontFamily.h",
"+third_party/WebKit/public/platform/linux/WebFontRenderStyle.h",
"+third_party/WebKit/public/platform/linux/WebFallbackFont.h",
"+third_party/WebKit/public/web/mac/WebScrollbarTheme.h",
"+third_party/WebKit/public/web/WebAXEnums.h",
"+third_party/WebKit/public/web/WebCompositionUnderline.h",
......
......@@ -15,18 +15,18 @@
#include "base/sys_byteorder.h"
#include "content/common/sandbox_linux/sandbox_linux.h"
#include "content/common/zygote_commands_linux.h"
#include "third_party/WebKit/public/platform/linux/WebFontFamily.h"
#include "third_party/WebKit/public/platform/linux/WebFallbackFont.h"
#include "third_party/WebKit/public/platform/linux/WebFontRenderStyle.h"
namespace content {
void GetFontFamilyForCharacter(int32_t character,
const char* preferred_locale,
blink::WebFontFamily* family) {
void GetFallbackFontForCharacter(int32_t character,
const char* preferred_locale,
blink::WebFallbackFont* fallbackFont) {
TRACE_EVENT0("sandbox_ipc", "GetFontFamilyForCharacter");
Pickle request;
request.WriteInt(LinuxSandbox::METHOD_GET_FONT_FAMILY_FOR_CHAR);
request.WriteInt(LinuxSandbox::METHOD_GET_FALLBACK_FONT_FOR_CHAR);
request.WriteInt(character);
request.WriteString(preferred_locale);
......@@ -35,17 +35,23 @@ void GetFontFamilyForCharacter(int32_t character,
sizeof(buf), NULL, request);
std::string family_name;
std::string filename;
int ttcIndex = 0;
bool isBold = false;
bool isItalic = false;
if (n != -1) {
Pickle reply(reinterpret_cast<char*>(buf), n);
PickleIterator pickle_iter(reply);
if (reply.ReadString(&pickle_iter, &family_name) &&
reply.ReadString(&pickle_iter, &filename) &&
reply.ReadInt(&pickle_iter, &ttcIndex) &&
reply.ReadBool(&pickle_iter, &isBold) &&
reply.ReadBool(&pickle_iter, &isItalic)) {
family->name = family_name;
family->isBold = isBold;
family->isItalic = isItalic;
fallbackFont->name = family_name;
fallbackFont->filename = filename;
fallbackFont->ttcIndex = ttcIndex;
fallbackFont->isBold = isBold;
fallbackFont->isItalic = isItalic;
}
}
}
......
......@@ -10,7 +10,7 @@
#include "content/public/common/content_descriptors.h"
namespace blink {
struct WebFontFamily;
struct WebFallbackFont;
struct WebFontRenderStyle;
}
......@@ -23,9 +23,9 @@ namespace content {
//
// Returns: a font family instance.
// The instance has an empty font name if the request could not be satisfied.
void GetFontFamilyForCharacter(const int32_t character,
void GetFallbackFontForCharacter(const int32_t character,
const char* preferred_locale,
blink::WebFontFamily* family);
blink::WebFallbackFont* family);
void GetRenderStyleForStrike(const char* family, int sizeAndStyle,
blink::WebFontRenderStyle* out);
......
......@@ -33,7 +33,7 @@ class LinuxSandbox {
// This isn't the full list, values < 32 are reserved for methods called from
// Skia.
enum LinuxSandboxIPCMethods {
METHOD_GET_FONT_FAMILY_FOR_CHAR = 32,
METHOD_GET_FALLBACK_FONT_FOR_CHAR = 32,
METHOD_LOCALTIME = 33,
DEPRECATED_METHOD_GET_CHILD_WITH_INODE = 34,
METHOD_GET_STYLE_FOR_STRIKE = 35,
......
......@@ -24,7 +24,7 @@
#include "third_party/WebKit/public/platform/android/WebSandboxSupport.h"
#elif defined(OS_POSIX)
#include "content/common/child_process_sandbox_support_impl_linux.h"
#include "third_party/WebKit/public/platform/linux/WebFontFamily.h"
#include "third_party/WebKit/public/platform/linux/WebFallbackFont.h"
#include "third_party/WebKit/public/platform/linux/WebSandboxSupport.h"
#include "third_party/icu/source/common/unicode/utf16.h"
#endif
......@@ -52,10 +52,16 @@ class PpapiWebKitPlatformSupportImpl::SandboxSupport
// Empty class.
#elif defined(OS_POSIX)
SandboxSupport();
// TODO(dro): crbug.com/382411 Remove this function, once the blink side
// does not need it anymore.
virtual void getFontFamilyForCharacter(
WebUChar32 character,
const char* preferred_locale,
blink::WebFontFamily* family);
virtual void getFallbackFontForCharacter(
WebUChar32 character,
const char* preferred_locale,
blink::WebFallbackFont* fallbackFont);
virtual void getRenderStyleForStrike(
const char* family, int sizeAndStyle, blink::WebFontRenderStyle* out);
......@@ -63,7 +69,7 @@ class PpapiWebKitPlatformSupportImpl::SandboxSupport
// WebKit likes to ask us for the correct font family to use for a set of
// unicode code points. It needs this information frequently so we cache it
// here.
std::map<int32_t, blink::WebFontFamily> unicode_font_families_;
std::map<int32_t, blink::WebFallbackFont> unicode_font_families_;
// For debugging crbug.com/312965
base::PlatformThreadId creation_thread_;
#endif
......@@ -113,7 +119,7 @@ PpapiWebKitPlatformSupportImpl::SandboxSupport::getFontFamilyForCharacter(
ppapi::ProxyLock::AssertAcquired();
// For debugging crbug.com/312965
CHECK_EQ(creation_thread_, base::PlatformThread::CurrentId());
const std::map<int32_t, blink::WebFontFamily>::const_iterator iter =
const std::map<int32_t, blink::WebFallbackFont>::const_iterator iter =
unicode_font_families_.find(character);
if (iter != unicode_font_families_.end()) {
family->name = iter->second.name;
......@@ -122,8 +128,35 @@ PpapiWebKitPlatformSupportImpl::SandboxSupport::getFontFamilyForCharacter(
return;
}
GetFontFamilyForCharacter(character, preferred_locale, family);
unicode_font_families_.insert(std::make_pair(character, *family));
blink::WebFallbackFont fallbackFont;
GetFallbackFontForCharacter(character, preferred_locale, &fallbackFont);
unicode_font_families_.insert(std::make_pair(character, fallbackFont));
family->name = fallbackFont.name;
family->isBold = fallbackFont.isBold;
family->isItalic = fallbackFont.isItalic;
}
void
PpapiWebKitPlatformSupportImpl::SandboxSupport::getFallbackFontForCharacter(
WebUChar32 character,
const char* preferred_locale,
blink::WebFallbackFont* fallbackFont) {
ppapi::ProxyLock::AssertAcquired();
// For debugging crbug.com/312965
CHECK_EQ(creation_thread_, base::PlatformThread::CurrentId());
const std::map<int32_t, blink::WebFallbackFont>::const_iterator iter =
unicode_font_families_.find(character);
if (iter != unicode_font_families_.end()) {
fallbackFont->name = iter->second.name;
fallbackFont->filename = iter->second.filename;
fallbackFont->ttcIndex = iter->second.ttcIndex;
fallbackFont->isBold = iter->second.isBold;
fallbackFont->isItalic = iter->second.isItalic;
return;
}
GetFallbackFontForCharacter(character, preferred_locale, fallbackFont);
unicode_font_families_.insert(std::make_pair(character, *fallbackFont));
}
void PpapiWebKitPlatformSupportImpl::SandboxSupport::getRenderStyleForStrike(
......
......@@ -101,7 +101,7 @@
#include "base/synchronization/lock.h"
#include "content/common/child_process_sandbox_support_impl_linux.h"
#include "third_party/WebKit/public/platform/linux/WebFontFamily.h"
#include "third_party/WebKit/public/platform/linux/WebFallbackFont.h"
#include "third_party/WebKit/public/platform/linux/WebSandboxSupport.h"
#include "third_party/icu/source/common/unicode/utf16.h"
#endif
......@@ -208,10 +208,16 @@ class RendererWebKitPlatformSupportImpl::SandboxSupport
CGFontRef* container,
uint32* font_id);
#elif defined(OS_POSIX)
// TODO(dro): crbug.com/382411 Remove this function, once the blink side
// does not need it anymore.
virtual void getFontFamilyForCharacter(
blink::WebUChar32 character,
const char* preferred_locale,
blink::WebFontFamily* family);
virtual void getFallbackFontForCharacter(
blink::WebUChar32 character,
const char* preferred_locale,
blink::WebFontFamily* family);
blink::WebFallbackFont* fallbackFont);
virtual void getRenderStyleForStrike(
const char* family, int sizeAndStyle, blink::WebFontRenderStyle* out);
......@@ -220,7 +226,7 @@ class RendererWebKitPlatformSupportImpl::SandboxSupport
// unicode code points. It needs this information frequently so we cache it
// here.
base::Lock unicode_font_families_mutex_;
std::map<int32_t, blink::WebFontFamily> unicode_font_families_;
std::map<int32_t, blink::WebFallbackFont> unicode_font_families_;
#endif
};
#endif // defined(OS_ANDROID)
......@@ -614,7 +620,7 @@ RendererWebKitPlatformSupportImpl::SandboxSupport::getFontFamilyForCharacter(
const char* preferred_locale,
blink::WebFontFamily* family) {
base::AutoLock lock(unicode_font_families_mutex_);
const std::map<int32_t, blink::WebFontFamily>::const_iterator iter =
const std::map<int32_t, blink::WebFallbackFont>::const_iterator iter =
unicode_font_families_.find(character);
if (iter != unicode_font_families_.end()) {
family->name = iter->second.name;
......@@ -623,8 +629,34 @@ RendererWebKitPlatformSupportImpl::SandboxSupport::getFontFamilyForCharacter(
return;
}
GetFontFamilyForCharacter(character, preferred_locale, family);
unicode_font_families_.insert(std::make_pair(character, *family));
blink::WebFallbackFont fallbackFont;
GetFallbackFontForCharacter(character, preferred_locale, &fallbackFont);
unicode_font_families_.insert(std::make_pair(character, fallbackFont));
family->name = fallbackFont.name;
family->isBold = fallbackFont.isBold;
family->isItalic = fallbackFont.isItalic;
}
void
RendererWebKitPlatformSupportImpl::SandboxSupport::getFallbackFontForCharacter(
blink::WebUChar32 character,
const char* preferred_locale,
blink::WebFallbackFont* fallbackFont) {
base::AutoLock lock(unicode_font_families_mutex_);
const std::map<int32_t, blink::WebFallbackFont>::const_iterator iter =
unicode_font_families_.find(character);
if (iter != unicode_font_families_.end()) {
fallbackFont->name = iter->second.name;
fallbackFont->filename = iter->second.filename;
fallbackFont->ttcIndex = iter->second.ttcIndex;
fallbackFont->isBold = iter->second.isBold;
fallbackFont->isItalic = iter->second.isItalic;
return;
}
GetFallbackFontForCharacter(character, preferred_locale, fallbackFont);
unicode_font_families_.insert(std::make_pair(character, *fallbackFont));
}
void
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment