| // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "content/ppapi_plugin/ppapi_webkitclient_impl.h" |
| |
| #include <map> |
| |
| #include "base/synchronization/lock.h" |
| #include "base/logging.h" |
| #include "base/string16.h" |
| #include "build/build_config.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebSerializedScriptValue.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" |
| |
| #if defined(OS_WIN) |
| #include "third_party/WebKit/Source/WebKit/chromium/public/win/WebSandboxSupport.h" |
| #elif defined(OS_MACOSX) |
| #include "third_party/WebKit/Source/WebKit/chromium/public/mac/WebSandboxSupport.h" |
| #elif defined(OS_POSIX) |
| #include "content/common/child_process_sandbox_support_linux.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/linux/WebSandboxSupport.h" |
| #endif |
| |
| using WebKit::WebSandboxSupport; |
| using WebKit::WebString; |
| using WebKit::WebUChar; |
| |
| class PpapiWebKitClientImpl::SandboxSupport : public WebSandboxSupport { |
| public: |
| virtual ~SandboxSupport() {} |
| |
| #if defined(OS_WIN) |
| virtual bool ensureFontLoaded(HFONT); |
| #elif defined(OS_MACOSX) |
| virtual bool loadFont( |
| NSFont* srcFont, ATSFontContainerRef* out, uint32_t* fontID); |
| #elif defined(OS_POSIX) |
| virtual WebString getFontFamilyForCharacters( |
| const WebUChar* characters, |
| size_t numCharacters, |
| const char* preferred_locale); |
| 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. |
| base::Lock unicode_font_families_mutex_; |
| std::map<string16, std::string> unicode_font_families_; |
| #endif |
| }; |
| |
| #if defined(OS_WIN) |
| |
| bool PpapiWebKitClientImpl::SandboxSupport::ensureFontLoaded(HFONT font) { |
| // TODO(brettw) this should do the something similar to what |
| // RendererWebKitClientImpl does and request that the browser load the font. |
| NOTIMPLEMENTED(); |
| return false; |
| } |
| |
| #elif defined(OS_MACOSX) |
| |
| bool PpapiWebKitClientImpl::SandboxSupport::loadFont(NSFont* srcFont, |
| ATSFontContainerRef* out, uint32_t* fontID) { |
| // TODO(brettw) this should do the something similar to what |
| // RendererWebKitClientImpl does and request that the browser load the font. |
| NOTIMPLEMENTED(); |
| return false; |
| } |
| |
| #elif defined(OS_POSIX) |
| |
| WebString PpapiWebKitClientImpl::SandboxSupport::getFontFamilyForCharacters( |
| const WebUChar* characters, |
| size_t num_characters, |
| const char* preferred_locale) { |
| base::AutoLock lock(unicode_font_families_mutex_); |
| const string16 key(characters, num_characters); |
| const std::map<string16, std::string>::const_iterator iter = |
| unicode_font_families_.find(key); |
| if (iter != unicode_font_families_.end()) |
| return WebString::fromUTF8(iter->second); |
| |
| const std::string family_name = |
| child_process_sandbox_support::getFontFamilyForCharacters( |
| characters, |
| num_characters, |
| preferred_locale); |
| unicode_font_families_.insert(make_pair(key, family_name)); |
| return WebString::fromUTF8(family_name); |
| } |
| |
| void PpapiWebKitClientImpl::SandboxSupport::getRenderStyleForStrike( |
| const char* family, int sizeAndStyle, WebKit::WebFontRenderStyle* out) { |
| child_process_sandbox_support::getRenderStyleForStrike(family, sizeAndStyle, |
| out); |
| } |
| |
| #endif |
| |
| PpapiWebKitClientImpl::PpapiWebKitClientImpl() |
| : sandbox_support_(new PpapiWebKitClientImpl::SandboxSupport()) { |
| } |
| |
| PpapiWebKitClientImpl::~PpapiWebKitClientImpl() { |
| } |
| |
| WebKit::WebClipboard* PpapiWebKitClientImpl::clipboard() { |
| NOTREACHED(); |
| return NULL; |
| } |
| |
| WebKit::WebMimeRegistry* PpapiWebKitClientImpl::mimeRegistry() { |
| NOTREACHED(); |
| return NULL; |
| } |
| |
| WebKit::WebFileUtilities* PpapiWebKitClientImpl::fileUtilities() { |
| NOTREACHED(); |
| return NULL; |
| } |
| |
| WebKit::WebSandboxSupport* PpapiWebKitClientImpl::sandboxSupport() { |
| return sandbox_support_.get(); |
| } |
| |
| bool PpapiWebKitClientImpl::sandboxEnabled() { |
| return true; // Assume PPAPI is always sandboxed. |
| } |
| |
| unsigned long long PpapiWebKitClientImpl::visitedLinkHash( |
| const char* canonical_url, |
| size_t length) { |
| NOTREACHED(); |
| return 0; |
| } |
| |
| bool PpapiWebKitClientImpl::isLinkVisited(unsigned long long link_hash) { |
| NOTREACHED(); |
| return false; |
| } |
| |
| WebKit::WebMessagePortChannel* |
| PpapiWebKitClientImpl::createMessagePortChannel() { |
| NOTREACHED(); |
| return NULL; |
| } |
| |
| void PpapiWebKitClientImpl::setCookies( |
| const WebKit::WebURL& url, |
| const WebKit::WebURL& first_party_for_cookies, |
| const WebKit::WebString& value) { |
| NOTREACHED(); |
| } |
| |
| WebKit::WebString PpapiWebKitClientImpl::cookies( |
| const WebKit::WebURL& url, |
| const WebKit::WebURL& first_party_for_cookies) { |
| NOTREACHED(); |
| return WebKit::WebString(); |
| } |
| |
| void PpapiWebKitClientImpl::prefetchHostName(const WebKit::WebString&) { |
| NOTREACHED(); |
| } |
| |
| WebKit::WebString PpapiWebKitClientImpl::defaultLocale() { |
| NOTREACHED(); |
| return WebKit::WebString(); |
| } |
| |
| WebKit::WebThemeEngine* PpapiWebKitClientImpl::themeEngine() { |
| NOTREACHED(); |
| return NULL; |
| } |
| |
| WebKit::WebURLLoader* PpapiWebKitClientImpl::createURLLoader() { |
| NOTREACHED(); |
| return NULL; |
| } |
| |
| WebKit::WebSocketStreamHandle* |
| PpapiWebKitClientImpl::createSocketStreamHandle() { |
| NOTREACHED(); |
| return NULL; |
| } |
| |
| void PpapiWebKitClientImpl::getPluginList(bool refresh, |
| WebKit::WebPluginListBuilder* builder) { |
| NOTREACHED(); |
| } |
| |
| WebKit::WebData PpapiWebKitClientImpl::loadResource(const char* name) { |
| NOTREACHED(); |
| return WebKit::WebData(); |
| } |
| |
| WebKit::WebStorageNamespace* |
| PpapiWebKitClientImpl::createLocalStorageNamespace( |
| const WebKit::WebString& path, unsigned quota) { |
| NOTREACHED(); |
| return 0; |
| } |
| |
| void PpapiWebKitClientImpl::dispatchStorageEvent( |
| const WebKit::WebString& key, const WebKit::WebString& old_value, |
| const WebKit::WebString& new_value, const WebKit::WebString& origin, |
| const WebKit::WebURL& url, bool is_local_storage) { |
| NOTREACHED(); |
| } |
| |
| WebKit::WebSharedWorkerRepository* |
| PpapiWebKitClientImpl::sharedWorkerRepository() { |
| NOTREACHED(); |
| return NULL; |
| } |
| |
| int PpapiWebKitClientImpl::databaseDeleteFile( |
| const WebKit::WebString& vfs_file_name, bool sync_dir) { |
| NOTREACHED(); |
| return 0; |
| } |
| |
| void PpapiWebKitClientImpl::createIDBKeysFromSerializedValuesAndKeyPath( |
| const WebKit::WebVector<WebKit::WebSerializedScriptValue>& values, |
| const WebKit::WebString& keyPath, |
| WebKit::WebVector<WebKit::WebIDBKey>& keys) { |
| NOTREACHED(); |
| } |
| |
| WebKit::WebSerializedScriptValue |
| PpapiWebKitClientImpl::injectIDBKeyIntoSerializedValue( |
| const WebKit::WebIDBKey& key, |
| const WebKit::WebSerializedScriptValue& value, |
| const WebKit::WebString& keyPath) { |
| NOTREACHED(); |
| return WebKit::WebSerializedScriptValue(); |
| } |