diff options
author | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-22 20:02:29 +0000 |
---|---|---|
committer | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-22 20:02:29 +0000 |
commit | cf3ac397d5d729e299da8638c672055bba666e92 (patch) | |
tree | 4f3f8b634bdf3ebf92f424aef9b299e1a96d34fa /skia | |
parent | 73db12c33f7b2e2ca53c2d962689b03e40e2106a (diff) | |
download | chromium_src-cf3ac397d5d729e299da8638c672055bba666e92.zip chromium_src-cf3ac397d5d729e299da8638c672055bba666e92.tar.gz chromium_src-cf3ac397d5d729e299da8638c672055bba666e92.tar.bz2 |
Move unix domain socket support out of base and into chrome common. This is not
used outside of Chrome.
TEST=it compiles
BUG=none
Review URL: http://codereview.chromium.org/5981006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@69970 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'skia')
-rw-r--r-- | skia/ext/SkFontHost_fontconfig.cpp | 5 | ||||
-rw-r--r-- | skia/ext/SkFontHost_fontconfig_control.h | 14 | ||||
-rw-r--r-- | skia/ext/SkFontHost_fontconfig_ipc.cpp | 123 | ||||
-rw-r--r-- | skia/ext/SkFontHost_fontconfig_ipc.h | 51 | ||||
-rw-r--r-- | skia/skia.gyp | 2 |
5 files changed, 13 insertions, 182 deletions
diff --git a/skia/ext/SkFontHost_fontconfig.cpp b/skia/ext/SkFontHost_fontconfig.cpp index 68a3820..e1153eb 100644 --- a/skia/ext/SkFontHost_fontconfig.cpp +++ b/skia/ext/SkFontHost_fontconfig.cpp @@ -35,7 +35,6 @@ #include "SkStream.h" #include "SkFontHost_fontconfig_impl.h" #include "SkFontHost_fontconfig_direct.h" -#include "SkFontHost_fontconfig_ipc.h" static FontConfigInterface* global_fc_impl = NULL; @@ -45,10 +44,10 @@ void SkiaFontConfigUseDirectImplementation() { global_fc_impl = new FontConfigDirect; } -void SkiaFontConfigUseIPCImplementation(int fd) { +void SkiaFontConfigSetImplementation(FontConfigInterface* font_config) { if (global_fc_impl) delete global_fc_impl; - global_fc_impl = new FontConfigIPC(fd); + global_fc_impl = font_config; } static FontConfigInterface* GetFcImpl() { diff --git a/skia/ext/SkFontHost_fontconfig_control.h b/skia/ext/SkFontHost_fontconfig_control.h index f9f0146..568320f 100644 --- a/skia/ext/SkFontHost_fontconfig_control.h +++ b/skia/ext/SkFontHost_fontconfig_control.h @@ -19,9 +19,17 @@ #define FontConfigControl_DEFINED #pragma once -// http://code.google.com/p/chromium/wiki/LinuxSandboxIPC +// Sets the Skia FontHost to use the direct (non-IPC, requires filesystem +// access) FontConfig implementation. Any previously-set FontConfigInterface +// will be freed. +void SkiaFontConfigUseDirectImplementation(); -extern void SkiaFontConfigUseDirectImplementation(); -extern void SkiaFontConfigUseIPCImplementation(int fd); +// Sets the Skia FontHost to use the given implementation of FontConfig. This +// is normally used to configure the IPC-based implementation to get out of +// the sandbox. +// +// Ownership of the given pointer is transferred, and any previously-set +// FontConfigInterface will be freed. +void SkiaFontConfigSetImplementation(FontConfigInterface* font_config); #endif // FontConfigControl_DEFINED diff --git a/skia/ext/SkFontHost_fontconfig_ipc.cpp b/skia/ext/SkFontHost_fontconfig_ipc.cpp deleted file mode 100644 index 23a07f4..0000000 --- a/skia/ext/SkFontHost_fontconfig_ipc.cpp +++ /dev/null @@ -1,123 +0,0 @@ -/* libs/graphics/ports/SkFontHost_fontconfig_direct.cpp -** -** Copyright 2009, Google Inc. -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - -// http://code.google.com/p/chromium/wiki/LinuxSandboxIPC - -#include "SkFontHost_fontconfig_ipc.h" - -#include <errno.h> -#include <unistd.h> -#include <fcntl.h> -#include <sys/socket.h> -#include <sys/uio.h> - -#include "base/pickle.h" -#include "base/unix_domain_socket_posix.h" - -FontConfigIPC::FontConfigIPC(int fd) - : fd_(fd) { -} - -FontConfigIPC::~FontConfigIPC() { - close(fd_); -} - -bool FontConfigIPC::Match(std::string* result_family, - unsigned* result_filefaceid, - bool filefaceid_valid, unsigned filefaceid, - const std::string& family, - const void* characters, size_t characters_bytes, - bool* is_bold, bool* is_italic) { - if (family.length() > kMaxFontFamilyLength) - return false; - - Pickle request; - request.WriteInt(METHOD_MATCH); - request.WriteBool(filefaceid_valid); - if (filefaceid_valid) - request.WriteUInt32(filefaceid); - - request.WriteBool(is_bold && *is_bold); - request.WriteBool(is_bold && *is_italic); - - request.WriteUInt32(characters_bytes); - if (characters_bytes) - request.WriteBytes(characters, characters_bytes); - - request.WriteString(family); - - uint8_t reply_buf[512]; - const ssize_t r = base::SendRecvMsg(fd_, reply_buf, sizeof(reply_buf), NULL, - request); - if (r == -1) - return false; - - Pickle reply(reinterpret_cast<char*>(reply_buf), r); - void* iter = NULL; - bool result; - if (!reply.ReadBool(&iter, &result)) - return false; - if (!result) - return false; - - uint32_t reply_filefaceid; - std::string reply_family; - bool resulting_bold, resulting_italic; - if (!reply.ReadUInt32(&iter, &reply_filefaceid) || - !reply.ReadString(&iter, &reply_family) || - !reply.ReadBool(&iter, &resulting_bold) || - !reply.ReadBool(&iter, &resulting_italic)) { - return false; - } - - *result_filefaceid = reply_filefaceid; - if (result_family) - *result_family = reply_family; - - if (is_bold) - *is_bold = resulting_bold; - if (is_italic) - *is_italic = resulting_italic; - - return true; -} - -int FontConfigIPC::Open(unsigned filefaceid) { - Pickle request; - request.WriteInt(METHOD_OPEN); - request.WriteUInt32(filefaceid); - - int result_fd = -1; - uint8_t reply_buf[256]; - const ssize_t r = base::SendRecvMsg(fd_, reply_buf, sizeof(reply_buf), - &result_fd, request); - - if (r == -1) - return -1; - - Pickle reply(reinterpret_cast<char*>(reply_buf), r); - bool result; - void* iter = NULL; - if (!reply.ReadBool(&iter, &result) || - !result) { - if (result_fd) - close(result_fd); - return -1; - } - - return result_fd; -} diff --git a/skia/ext/SkFontHost_fontconfig_ipc.h b/skia/ext/SkFontHost_fontconfig_ipc.h deleted file mode 100644 index 9a10c6e..0000000 --- a/skia/ext/SkFontHost_fontconfig_ipc.h +++ /dev/null @@ -1,51 +0,0 @@ -/* libs/graphics/ports/SkFontHost_fontconfig_ipc.h -** -** Copyright 2009, Google Inc. -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - -#ifndef FontConfigIPC_DEFINED -#define FontConfigIPC_DEFINED -#pragma once - -// http://code.google.com/p/chromium/wiki/LinuxSandboxIPC - -#include <map> -#include <string> - -#include "SkFontHost_fontconfig_impl.h" - -class FontConfigIPC : public FontConfigInterface { - public: - FontConfigIPC(int fd); - ~FontConfigIPC(); - - // FontConfigInterface implementation. - virtual bool Match(std::string* result_family, unsigned* result_filefaceid, - bool filefaceid_valid, unsigned filefaceid, - const std::string& family, - const void* characters, size_t characters_bytes, - bool* is_bold, bool* is_italic); - virtual int Open(unsigned filefaceid); - - enum Method { - METHOD_MATCH = 0, - METHOD_OPEN = 1, - }; - - private: - const int fd_; -}; - -#endif // FontConfigIPC_DEFINED diff --git a/skia/skia.gyp b/skia/skia.gyp index 9ff333d..f7f44d4 100644 --- a/skia/skia.gyp +++ b/skia/skia.gyp @@ -618,10 +618,8 @@ '-Wno-unused-function', ], 'sources': [ - # http://code.google.com/p/chromium/wiki/LinuxSandboxIPC 'ext/SkFontHost_fontconfig.cpp', 'ext/SkFontHost_fontconfig_direct.cpp', - 'ext/SkFontHost_fontconfig_ipc.cpp', '../third_party/skia/src/core/SkBlitter_ARGB32_Subpixel.cpp', '../third_party/skia/src/ports/SkFontHost_FreeType_Subpixel.cpp', '../third_party/skia/src/core/SkFontHost.cpp', |