summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-11 18:09:12 +0000
committeragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-11 18:09:12 +0000
commitf963b1d5006ed35450befe042bf58810d9d36bea (patch)
treefe7f035ae7972e055f648fcf8e527f1e777c5984
parentcb5ea4db21261528710f13c5513e1143ca757386 (diff)
downloadchromium_src-f963b1d5006ed35450befe042bf58810d9d36bea.zip
chromium_src-f963b1d5006ed35450befe042bf58810d9d36bea.tar.gz
chromium_src-f963b1d5006ed35450befe042bf58810d9d36bea.tar.bz2
Linux: Make SandboxIPCProcess not be a WebKitClient
Previously, SandboxIPCProcess had to be a full WebKitClient because of the following assertion failure: 0 0x08af0a77 in buildBaseTextCodecMaps () at third_party/WebKit/WebCore/platform/text/TextEncodingRegistry.cpp:176 1 0x08af0e73 in WebCore::atomicCanonicalTextEncodingName (name=0x985d665 "UTF-8") at third_party/WebKit/WebCore/platform/text/TextEncodingRegistry.cpp:241 2 0x08aee811 in TextEncoding (this=0xb876ef8, name=0x985d665 "UTF-8") at third_party/WebKit/WebCore/platform/text/TextEncoding.cpp:61 3 0x08aee88a in WebCore::UTF8Encoding () at third_party/WebKit/WebCore/platform/text/TextEncoding.cpp:266 4 0x08ae744c in WebCore::String::fromUTF8 (string=0x56d7a120 "�226\207�211�233正�221", size=15) at third_party/WebKit/WebCore/platform/text/String.cpp:674 5 0x0872a7c0 in WebKit::WebString::fromUTF8 (data=0x56d7a120 "�226\207�211�233正�221", length=15) at webkit/api/src/WebString.cpp:72 6 0x087245bd in WebKit::WebFontInfo::familyForChars (characters=0x56c11628, numCharacters=1) at webkit/api/src/gtk/WebFontInfo.cpp:98 7 0x0847599a in SandboxIPCProcess::HandleGetFontFamilyForChars (this=0xff869ba8, fd=29, pickle=@0xff86900c, iter=0xff869054, fds=@0xff86901c) at chrome/browser/renderer_host/render_sandbox_host_linux.cc:215 8 0x08475d70 in SandboxIPCProcess::HandleRequestFromRenderer (this=0xff869ba8, fd=29) at chrome/browser/renderer_host/render_sandbox_host_linux.cc:115 9 0x08475fea in SandboxIPCProcess::Run (this=0xff869ba8) at chrome/browser/renderer_host/render_sandbox_host_linux.cc:84 10 0x084747f9 in RenderSandboxHostLinux (this=0x56c10e78) at chrome/browser/renderer_host/render_sandbox_host_linux.cc:299 This this patch, we remove the need to use WebString and the codec translation (which was just a translation from UTF8 to UTF16 and back again anyway) and thus can remove all of the WebKitClient gubbins. BUG=17260 http://codereview.chromium.org/164112 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@23050 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/renderer_host/render_sandbox_host_linux.cc120
-rw-r--r--webkit/api/public/gtk/WebFontInfo.h4
-rw-r--r--webkit/api/src/ChromiumBridge.cpp9
-rw-r--r--webkit/api/src/gtk/WebFontInfo.cpp10
4 files changed, 22 insertions, 121 deletions
diff --git a/chrome/browser/renderer_host/render_sandbox_host_linux.cc b/chrome/browser/renderer_host/render_sandbox_host_linux.cc
index 460f1cb..e34efe6 100644
--- a/chrome/browser/renderer_host/render_sandbox_host_linux.cc
+++ b/chrome/browser/renderer_host/render_sandbox_host_linux.cc
@@ -21,38 +21,20 @@
#include "base/unix_domain_socket_posix.h"
#include "chrome/common/sandbox_methods_linux.h"
#include "webkit/api/public/gtk/WebFontInfo.h"
-#include "webkit/api/public/WebData.h"
-#include "webkit/api/public/WebKit.h"
-#include "webkit/api/public/WebKitClient.h"
-#include "webkit/api/public/WebStorageArea.h"
-#include "webkit/api/public/WebStorageNamespace.h"
#include "SkFontHost_fontconfig_direct.h"
#include "SkFontHost_fontconfig_ipc.h"
-using WebKit::WebClipboard;
-using WebKit::WebData;
+using WebKit::WebCString;
using WebKit::WebFontInfo;
-using WebKit::WebKitClient;
-using WebKit::WebLocalizedString;
-using WebKit::WebMimeRegistry;
-using WebKit::WebPluginInfo;
-using WebKit::WebPluginListBuilder;
-using WebKit::WebSandboxSupport;
-using WebKit::WebStorageArea;
-using WebKit::WebStorageNamespace;
-using WebKit::WebString;
-using WebKit::WebThemeEngine;
using WebKit::WebUChar;
-using WebKit::WebURL;
-using WebKit::WebURLLoader;
// http://code.google.com/p/chromium/wiki/LinuxSandboxIPC
// BEWARE: code in this file run across *processes* (not just threads).
// This code runs in a child process
-class SandboxIPCProcess : public WebKitClient {
+class SandboxIPCProcess {
public:
// lifeline_fd: this is the read end of a pipe which the browser process
// holds the other end of. If the browser process dies, it's descriptors are
@@ -64,8 +46,6 @@ class SandboxIPCProcess : public WebKitClient {
: lifeline_fd_(lifeline_fd),
browser_socket_(browser_socket),
font_config_(new FontConfigDirect()) {
- WebKit::initialize(this);
-
base::InjectiveMultimap multimap;
multimap.push_back(base::InjectionArc(0, lifeline_fd, false));
multimap.push_back(base::InjectionArc(0, browser_socket, false));
@@ -105,93 +85,6 @@ class SandboxIPCProcess : public WebKitClient {
}
}
- // ---------------------------------------------------------------------------
- // WebKitClient impl...
-
- virtual WebClipboard* clipboard() { return NULL; }
- virtual WebMimeRegistry* mimeRegistry() { return NULL; }
- virtual WebSandboxSupport* sandboxSupport() { return NULL; }
- virtual bool sandboxEnabled() { return true; }
- virtual WebThemeEngine* themeEngine() { return NULL; }
-
- virtual WebStorageNamespace* createLocalStorageNamespace(
- const WebString& path) { return 0; }
- virtual WebStorageNamespace* createSessionStorageNamespace() { return 0; }
-
- virtual unsigned long long visitedLinkHash(const char*, size_t) { return 0; }
- virtual bool isLinkVisited(unsigned long long) { return false; }
-
- virtual WebKit::WebMessagePortChannel* createMessagePortChannel() {
- return NULL;
- }
-
- virtual void setCookies(const WebURL&, const WebURL&, const WebString&) { }
- virtual WebString cookies(const WebURL&, const WebURL&) {
- return WebString();
- }
-
- virtual void prefetchHostName(const WebString&) { }
-
- virtual WebURLLoader* createURLLoader() { return NULL; }
-
- virtual void getPluginList(bool refresh, WebPluginListBuilder*) { }
-
- virtual void decrementStatsCounter(const char*) { }
- virtual void incrementStatsCounter(const char*) { }
-
- virtual void traceEventBegin(const char* name, void*, const char*) { }
- virtual void traceEventEnd(const char* name, void*, const char*) { }
-
- virtual WebData loadResource(const char*) { return WebData(); }
- virtual WebString queryLocalizedString(WebLocalizedString::Name) {
- return WebString();
- }
- virtual WebString queryLocalizedString(WebLocalizedString::Name, int) {
- return WebString();
- }
-
- virtual void suddenTerminationChanged(bool) { }
-
- virtual WebString defaultLocale() { return WebString(); }
-
- virtual double currentTime() { return 0; }
-
- virtual void setSharedTimerFiredFunction(void (*)()) { }
- virtual void setSharedTimerFireTime(double) { }
- virtual void stopSharedTimer() { }
-
- virtual void callOnMainThread(void (*)()) { }
-
- virtual base::PlatformFile databaseOpenFile(
- const WebString& fileName, int desiredFlags) {
- return base::kInvalidPlatformFileValue;
- }
- virtual bool databaseDeleteFile(const WebString& fileName) {
- return false;
- }
- virtual long databaseGetFileAttributes(const WebString& fileName) {
- return -1;
- }
- virtual long long databaseGetFileSize(const WebString& fileName) {
- return 0;
- }
-
- bool fileExists(const WebString& path) { return false; }
- bool deleteFile(const WebString& path) { return false; }
- bool deleteEmptyDirectory(const WebString& path) { return false; }
- bool getFileSize(const WebString& path, long long& result) {
- return false;
- }
- bool getFileModificationTime(const WebString& path, time_t& result) {
- return false;
- }
- WebString directoryName(const WebString& path) { return WebString(); }
- WebString pathByAppendingComponent(const WebString& path,
- const WebString& component) {
- return WebString();
- }
- bool makeAllDirectories(const WebString& path) { return false; }
-
private:
// ---------------------------------------------------------------------------
// Requests from the renderer...
@@ -318,11 +211,14 @@ class SandboxIPCProcess : public WebKitClient {
chars[i] = c;
}
- const WebString family = WebFontInfo::familyForChars(chars.get(), num_chars);
- const std::string family_utf8 = UTF16ToUTF8(family);
+ WebCString family = WebFontInfo::familyForChars(chars.get(), num_chars);
Pickle reply;
- reply.WriteString(family_utf8);
+ if (family.data()) {
+ reply.WriteString(family.data());
+ } else {
+ reply.WriteString("");
+ }
SendRendererReply(fds, reply, -1);
}
diff --git a/webkit/api/public/gtk/WebFontInfo.h b/webkit/api/public/gtk/WebFontInfo.h
index b5543c2..2a0b7f9 100644
--- a/webkit/api/public/gtk/WebFontInfo.h
+++ b/webkit/api/public/gtk/WebFontInfo.h
@@ -31,7 +31,7 @@
#ifndef WebFontInfo_h
#define WebFontInfo_h
-#include "../WebString.h"
+#include "../WebCString.h"
#include <string.h>
#include <unistd.h>
@@ -47,7 +47,7 @@ namespace WebKit {
//
// Returns: the font family or an empty string if the request could not be
// satisfied.
- WEBKIT_API static WebString familyForChars(const WebUChar* characters, size_t numCharacters);
+ WEBKIT_API static WebCString familyForChars(const WebUChar* characters, size_t numCharacters);
};
} // namespace WebKit
diff --git a/webkit/api/src/ChromiumBridge.cpp b/webkit/api/src/ChromiumBridge.cpp
index e48b4b7..b668178 100644
--- a/webkit/api/src/ChromiumBridge.cpp
+++ b/webkit/api/src/ChromiumBridge.cpp
@@ -208,8 +208,13 @@ String ChromiumBridge::getFontFamilyForCharacters(const UChar* characters, size_
{
if (webKitClient()->sandboxSupport())
return webKitClient()->sandboxSupport()->getFontFamilyForCharacters(characters, numCharacters);
- else
- return WebFontInfo::familyForChars(characters, numCharacters);
+ else {
+ WebCString family = WebFontInfo::familyForChars(characters, numCharacters);
+ if (family.data())
+ return WebString::fromUTF8(family.data());
+ else
+ return WebString();
+ }
}
#endif
diff --git a/webkit/api/src/gtk/WebFontInfo.cpp b/webkit/api/src/gtk/WebFontInfo.cpp
index 059ad4b..9365ed2 100644
--- a/webkit/api/src/gtk/WebFontInfo.cpp
+++ b/webkit/api/src/gtk/WebFontInfo.cpp
@@ -38,7 +38,7 @@
namespace WebKit {
-WebString WebFontInfo::familyForChars(const WebUChar* characters, size_t numCharacters)
+WebCString WebFontInfo::familyForChars(const WebUChar* characters, size_t numCharacters)
{
FcCharSet* cset = FcCharSetCreate();
for (int i = 0; i < numCharacters; ++i) {
@@ -71,7 +71,7 @@ WebString WebFontInfo::familyForChars(const WebUChar* characters, size_t numChar
FcCharSetDestroy(cset);
if (!fontSet)
- return WebString();
+ return WebCString();
// Older versions of fontconfig have a bug where they cannot select
// only scalable fonts so we have to manually filter the results.
@@ -92,17 +92,17 @@ WebString WebFontInfo::familyForChars(const WebUChar* characters, size_t numChar
continue;
FcChar8* family;
- WebString result;
+ WebCString result;
if (FcPatternGetString(current, FC_FAMILY, 0, &family) == FcResultMatch) {
const char* charFamily = reinterpret_cast<char*>(family);
- result = WebString::fromUTF8(charFamily, strlen(charFamily));
+ result = WebCString(charFamily, strlen(charFamily));
}
FcFontSetDestroy(fontSet);
return result;
}
FcFontSetDestroy(fontSet);
- return WebString();
+ return WebCString();
}
} // namespace WebKit