Index: chrome/renderer/renderer_webkitclient_impl.cc |
diff --git a/chrome/renderer/renderer_webkitclient_impl.cc b/chrome/renderer/renderer_webkitclient_impl.cc |
index 8537d651739355def7cd26f3e5430edaa76d094b..f2d6a9e8ba36cddb48a1ad708731f6f0133a950b 100644 |
--- a/chrome/renderer/renderer_webkitclient_impl.cc |
+++ b/chrome/renderer/renderer_webkitclient_impl.cc |
@@ -21,6 +21,7 @@ |
#include "chrome/renderer/visitedlink_slave.h" |
#include "chrome/renderer/webgles2context_impl.h" |
#include "chrome/renderer/webgraphicscontext3d_command_buffer_impl.h" |
+#include "chrome/renderer/websharedworkerrepository_impl.h" |
#include "googleurl/src/gurl.h" |
#include "ipc/ipc_sync_message_filter.h" |
#include "third_party/WebKit/WebKit/chromium/public/WebFrame.h" |
@@ -29,15 +30,28 @@ |
#include "third_party/WebKit/WebKit/chromium/public/WebStorageEventDispatcher.h" |
#include "third_party/WebKit/WebKit/chromium/public/WebURL.h" |
#include "third_party/WebKit/WebKit/chromium/public/WebVector.h" |
+#include "webkit/glue/simple_webmimeregistry_impl.h" |
+#include "webkit/glue/webclipboard_impl.h" |
+#include "webkit/glue/webfilesystem_impl.h" |
#include "webkit/glue/webkit_glue.h" |
+#if defined(OS_WIN) |
+#include "third_party/WebKit/WebKit/chromium/public/win/WebSandboxSupport.h" |
+#endif |
+ |
#if defined(OS_MACOSX) |
#include "chrome/common/font_descriptor_mac.h" |
#include "chrome/common/font_loader_mac.h" |
+#include "third_party/WebKit/WebKit/chromium/public/mac/WebSandboxSupport.h" |
#endif |
#if defined(OS_LINUX) |
+#include <string> |
+#include <map> |
+ |
+#include "base/lock.h" |
#include "chrome/renderer/renderer_sandbox_support_linux.h" |
+#include "third_party/WebKit/WebKit/chromium/public/linux/WebSandboxSupport.h" |
#endif |
#if defined(OS_POSIX) |
@@ -54,8 +68,59 @@ using WebKit::WebString; |
using WebKit::WebURL; |
using WebKit::WebVector; |
+//------------------------------------------------------------------------------ |
+ |
+class RendererWebKitClientImpl::MimeRegistry |
+ : public webkit_glue::SimpleWebMimeRegistryImpl { |
+ public: |
+ virtual WebKit::WebString mimeTypeForExtension(const WebKit::WebString&); |
+ virtual WebKit::WebString mimeTypeFromFile(const WebKit::WebString&); |
+ virtual WebKit::WebString preferredExtensionForMIMEType( |
+ const WebKit::WebString&); |
+}; |
+ |
+class RendererWebKitClientImpl::FileSystem |
+ : public webkit_glue::WebFileSystemImpl { |
+ public: |
+ virtual bool getFileSize(const WebKit::WebString& path, long long& result); |
+ virtual bool getFileModificationTime(const WebKit::WebString& path, |
+ double& result); |
+ virtual base::PlatformFile openFile(const WebKit::WebString& path, |
+ int mode); |
+}; |
+ |
+class RendererWebKitClientImpl::SandboxSupport |
+ : public WebKit::WebSandboxSupport { |
+ public: |
+#if defined(OS_WIN) |
+ virtual bool ensureFontLoaded(HFONT); |
+#elif defined(OS_MACOSX) |
+ virtual bool loadFont(NSFont* srcFont, ATSFontContainerRef* out); |
+#elif defined(OS_LINUX) |
+ virtual WebKit::WebString getFontFamilyForCharacters( |
+ const WebKit::WebUChar* characters, size_t numCharacters); |
+ virtual void getRenderStyleForStrike( |
+ const char* family, int sizeAndStyle, WebKit::WebFontRenderStyle* out); |
+ |
+ private: |
+ // 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. The key in this map is an array of 16-bit UTF16 values from WebKit. |
+ // The value is a string containing the correct font family. |
+ Lock unicode_font_families_mutex_; |
+ std::map<std::string, std::string> unicode_font_families_; |
+#endif |
+}; |
+ |
+//------------------------------------------------------------------------------ |
+ |
RendererWebKitClientImpl::RendererWebKitClientImpl() |
- : sudden_termination_disables_(0) { |
+ : clipboard_(new webkit_glue::WebClipboardImpl), |
+ file_system_(new RendererWebKitClientImpl::FileSystem), |
+ mime_registry_(new RendererWebKitClientImpl::MimeRegistry), |
+ sandbox_support_(new RendererWebKitClientImpl::SandboxSupport), |
+ sudden_termination_disables_(0), |
+ shared_worker_repository_(new WebSharedWorkerRepositoryImpl) { |
} |
RendererWebKitClientImpl::~RendererWebKitClientImpl() { |
@@ -64,19 +129,19 @@ RendererWebKitClientImpl::~RendererWebKitClientImpl() { |
//------------------------------------------------------------------------------ |
WebKit::WebClipboard* RendererWebKitClientImpl::clipboard() { |
- return &clipboard_; |
+ return clipboard_.get(); |
} |
WebKit::WebMimeRegistry* RendererWebKitClientImpl::mimeRegistry() { |
- return &mime_registry_; |
+ return mime_registry_.get(); |
} |
WebKit::WebFileSystem* RendererWebKitClientImpl::fileSystem() { |
- return &file_system_; |
+ return file_system_.get(); |
} |
WebKit::WebSandboxSupport* RendererWebKitClientImpl::sandboxSupport() { |
- return &sandbox_support_; |
+ return sandbox_support_.get(); |
} |
WebKit::WebCookieJar* RendererWebKitClientImpl::cookieJar() { |
@@ -385,7 +450,7 @@ WebKit::WebSharedWorkerRepository* |
RendererWebKitClientImpl::sharedWorkerRepository() { |
if (!CommandLine::ForCurrentProcess()->HasSwitch( |
switches::kDisableSharedWorkers)) { |
- return &shared_worker_repository_; |
+ return shared_worker_repository_.get(); |
} else { |
return NULL; |
} |