15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/renderer_webkitplatformsupport_impl.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/lazy_instance.h" 10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/memory/shared_memory.h" 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/message_loop/message_loop_proxy.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/metrics/histogram.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/platform_file.h" 14ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/safe_numerics.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_number_conversions.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/child/database_util.h" 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/child/fileapi/webfilesystem_impl.h" 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/child/indexed_db/proxy_webidbfactory_impl.h" 20ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/child/npapi/npobject_util.h" 21ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/child/quota_dispatcher.h" 22558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "content/child/quota_message_filter.h" 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/child/thread_safe_sender.h" 24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/child/webblobregistry_impl.h" 25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/child/webmessageportchannel_impl.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/common/file_utilities_messages.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/common/gpu/client/context_provider_command_buffer.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/mime_registry_messages.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/view_messages.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_switches.h" 32ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/public/common/webplugininfo.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/content_renderer_client.h" 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/renderer/device_orientation/device_motion_event_pump.h" 352385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "content/renderer/device_orientation/device_orientation_event_pump.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/dom_storage/webstoragenamespace_impl.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/gamepad_shared_memory_reader.h" 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/renderer/media/audio_decoder.h" 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/renderer/media/crypto/key_systems.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/media/media_stream_dependency_factory.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/media/renderer_webaudiodevice_impl.h" 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/renderer/media/renderer_webmidiaccessor_impl.h" 437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/renderer/media/webcontentdecryptionmodule_impl.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/render_thread_impl.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/renderer_clipboard_client.h" 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/renderer/webclipboard_impl.h" 479ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "content/renderer/webcrypto_impl.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/websharedworkerrepository_impl.h" 4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "gpu/config/gpu_info.h" 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_sync_message_filter.h" 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/audio/audio_output_device.h" 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "media/base/audio_hardware_config.h" 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "media/filters/stream_parser_factory.h" 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/base/mime_util.h" 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "net/base/net_util.h" 56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebBlobRegistry.h" 579ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "third_party/WebKit/public/platform/WebDeviceMotionListener.h" 582385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "third_party/WebKit/public/platform/WebDeviceOrientationListener.h" 59868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebFileInfo.h" 60868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebGamepads.h" 61868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebMediaStreamCenter.h" 62868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebMediaStreamCenterClient.h" 63ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/WebKit/public/platform/WebPluginListBuilder.h" 64868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebURL.h" 65868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebVector.h" 667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "third_party/WebKit/public/web/WebFrame.h" 677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "third_party/WebKit/public/web/WebRuntimeFeatures.h" 687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/common/gpu/webgraphicscontext3d_provider_impl.h" 70ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "webkit/common/quota/quota_types.h" 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "webkit/glue/simple_webmimeregistry_impl.h" 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "webkit/glue/webfileutilities_impl.h" 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "webkit/glue/webkit_glue.h" 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/child_process_messages.h" 77868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/win/WebSandboxSupport.h" 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/mac/font_descriptor.h" 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/mac/font_loader.h" 83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/mac/WebSandboxSupport.h" 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/synchronization/lock.h" 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/child_process_sandbox_support_impl_linux.h" 92868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/linux/WebFontFamily.h" 93868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/linux/WebSandboxSupport.h" 94a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "third_party/icu/source/common/unicode/utf16.h" 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_descriptor_posix.h" 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_ANDROID) 102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/renderer/media/android/audio_decoder_android.h" 103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif 104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using WebKit::WebAudioDevice; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using WebKit::WebBlobRegistry; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using WebKit::WebFileInfo; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using WebKit::WebFileSystem; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using WebKit::WebFrame; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using WebKit::WebGamepads; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using WebKit::WebIDBFactory; 112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing WebKit::WebMIDIAccessor; 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebKit::Platform; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using WebKit::WebMediaStreamCenter; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using WebKit::WebMediaStreamCenterClient; 116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing WebKit::WebMimeRegistry; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using WebKit::WebRTCPeerConnectionHandler; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using WebKit::WebRTCPeerConnectionHandlerClient; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using WebKit::WebStorageNamespace; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using WebKit::WebString; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using WebKit::WebURL; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using WebKit::WebVector; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static bool g_sandbox_enabled = true; 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::LazyInstance<WebGamepads>::Leaky g_test_gamepads = 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LAZY_INSTANCE_INITIALIZER; 1299ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochbase::LazyInstance<WebKit::WebDeviceMotionData>::Leaky 1309ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch g_test_device_motion_data = LAZY_INSTANCE_INITIALIZER; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//------------------------------------------------------------------------------ 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RendererWebKitPlatformSupportImpl::MimeRegistry 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public webkit_glue::SimpleWebMimeRegistryImpl { 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 137eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // TODO(ddorwin): Remove after http://webk.it/82983 lands. 138eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual WebKit::WebMimeRegistry::SupportsType supportsMediaMIMEType( 139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const WebKit::WebString& mime_type, 140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const WebKit::WebString& codecs); 141eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual WebKit::WebMimeRegistry::SupportsType supportsMediaMIMEType( 142eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const WebKit::WebString& mime_type, 143eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const WebKit::WebString& codecs, 144eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const WebKit::WebString& key_system); 145eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual bool supportsMediaSourceMIMEType(const WebKit::WebString& mime_type, 146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const WebKit::WebString& codecs); 147eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual WebKit::WebString mimeTypeForExtension( 148eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const WebKit::WebString& file_extension); 149eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual WebKit::WebString mimeTypeFromFile( 150eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const WebKit::WebString& file_path); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual WebKit::WebString preferredExtensionForMIMEType( 152eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const WebKit::WebString& mime_type); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RendererWebKitPlatformSupportImpl::FileUtilities 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public webkit_glue::WebFileUtilitiesImpl { 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit FileUtilities(ThreadSafeSender* sender) 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : thread_safe_sender_(sender) {} 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool getFileInfo(const WebString& path, WebFileInfo& result); 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool SendSyncMessageFromAnyThread(IPC::SyncMessage* msg) const; 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<ThreadSafeSender> thread_safe_sender_; 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WebKit doesn't use WebSandboxSupport on android so we don't need to 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// implement anything here. 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RendererWebKitPlatformSupportImpl::SandboxSupport { 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RendererWebKitPlatformSupportImpl::SandboxSupport 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public WebKit::WebSandboxSupport { 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SandboxSupport() {} 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool ensureFontLoaded(HFONT); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool loadFont( 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NSFont* src_font, 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CGFontRef* container, 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32* font_id); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 185a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual void getFontFamilyForCharacter( 186a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) WebKit::WebUChar32 character, 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* preferred_locale, 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebFontFamily* family); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void getRenderStyleForStrike( 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* family, int sizeAndStyle, WebKit::WebFontRenderStyle* out); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebKit likes to ask us for the correct font family to use for a set of 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // unicode code points. It needs this information frequently so we cache it 195a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // here. 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Lock unicode_font_families_mutex_; 197a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) std::map<int32_t, WebKit::WebFontFamily> unicode_font_families_; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_ANDROID) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//------------------------------------------------------------------------------ 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RendererWebKitPlatformSupportImpl::RendererWebKitPlatformSupportImpl() 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : clipboard_client_(new RendererClipboardClient), 206eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch clipboard_(new WebClipboardImpl(clipboard_client_.get())), 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mime_registry_(new RendererWebKitPlatformSupportImpl::MimeRegistry), 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sudden_termination_disables_(0), 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_refresh_allowed_(true), 210eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch shared_worker_repository_(new WebSharedWorkerRepositoryImpl), 211eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch child_thread_loop_(base::MessageLoopProxy::current()) { 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (g_sandbox_enabled && sandboxEnabled()) { 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sandbox_support_.reset( 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new RendererWebKitPlatformSupportImpl::SandboxSupport); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DVLOG(1) << "Disabling sandbox support for testing."; 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ChildThread may not exist in some tests. 220eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (ChildThread::current()) { 221eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch sync_message_filter_ = ChildThread::current()->sync_message_filter(); 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) thread_safe_sender_ = ChildThread::current()->thread_safe_sender(); 223558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch quota_message_filter_ = ChildThread::current()->quota_message_filter(); 224eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RendererWebKitPlatformSupportImpl::~RendererWebKitPlatformSupportImpl() { 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//------------------------------------------------------------------------------ 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebKit::WebClipboard* RendererWebKitPlatformSupportImpl::clipboard() { 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WebClipboard* clipboard = 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetContentClient()->renderer()->OverrideWebClipboard(); 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (clipboard) 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return clipboard; 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return clipboard_.get(); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebKit::WebMimeRegistry* RendererWebKitPlatformSupportImpl::mimeRegistry() { 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mime_registry_.get(); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebKit::WebFileUtilities* 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RendererWebKitPlatformSupportImpl::fileUtilities() { 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!file_utilities_) { 247868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) file_utilities_.reset(new FileUtilities(thread_safe_sender_.get())); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_utilities_->set_sandbox_enabled(sandboxEnabled()); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return file_utilities_.get(); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebKit::WebSandboxSupport* RendererWebKitPlatformSupportImpl::sandboxSupport() { 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebKit doesn't use WebSandboxSupport on android. 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sandbox_support_.get(); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebKit::WebCookieJar* RendererWebKitPlatformSupportImpl::cookieJar() { 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED() << "Use WebFrameClient::cookieJar() instead!"; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebKit::WebThemeEngine* RendererWebKitPlatformSupportImpl::themeEngine() { 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WebThemeEngine* theme_engine = 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetContentClient()->renderer()->OverrideThemeEngine(); 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (theme_engine) 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return theme_engine; 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WebKitPlatformSupportImpl::themeEngine(); 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RendererWebKitPlatformSupportImpl::sandboxEnabled() { 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // As explained in Platform.h, this function is used to decide 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // whether to allow file system operations to come out of WebKit or not. 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Even if the sandbox is disabled, there's no reason why the code should 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // act any differently...unless we're in single process mode. In which 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // case, we have no other choice. Platform.h discourages using 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this switch unless absolutely necessary, so hopefully we won't end up 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // with too many code paths being different in single-process mode. 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !CommandLine::ForCurrentProcess()->HasSwitch(switches::kSingleProcess); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)unsigned long long RendererWebKitPlatformSupportImpl::visitedLinkHash( 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* canonical_url, 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t length) { 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetContentClient()->renderer()->VisitedLinkHash(canonical_url, length); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RendererWebKitPlatformSupportImpl::isLinkVisited( 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned long long link_hash) { 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetContentClient()->renderer()->IsLinkVisited(link_hash); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebKit::WebMessagePortChannel* 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RendererWebKitPlatformSupportImpl::createMessagePortChannel() { 299eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return new WebMessagePortChannelImpl(child_thread_loop_.get()); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)WebKit::WebPrescientNetworking* 30390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)RendererWebKitPlatformSupportImpl::prescientNetworking() { 30490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return GetContentClient()->renderer()->GetPrescientNetworking(); 30590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 30690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RendererWebKitPlatformSupportImpl::CheckPreparsedJsCachingEnabled() const { 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool checked = false; 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool result = false; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!checked) { 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result = command_line.HasSwitch(switches::kEnablePreparsedJsCaching); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checked = true; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RendererWebKitPlatformSupportImpl::cacheMetadata( 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebKit::WebURL& url, 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double response_time, 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* data, 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t size) { 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!CheckPreparsedJsCachingEnabled()) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Let the browser know we generated cacheable metadata for this resource. The 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // browser may cache it and return it on subsequent responses to speed 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the processing of this resource. 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<char> copy(data, data + size); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderThread::Get()->Send( 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new ViewHostMsg_DidGenerateCacheableMetadata(url, response_time, copy)); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebString RendererWebKitPlatformSupportImpl::defaultLocale() { 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ASCIIToUTF16(RenderThread::Get()->GetLocale()); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RendererWebKitPlatformSupportImpl::suddenTerminationChanged(bool enabled) { 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enabled) { 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should not get more enables than disables, but we want it to be a 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // non-fatal error if it does happen. 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_GT(sudden_termination_disables_, 0); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sudden_termination_disables_ = std::max(sudden_termination_disables_ - 1, 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sudden_termination_disables_ != 0) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sudden_termination_disables_++; 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sudden_termination_disables_ != 1) 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderThread* thread = RenderThread::Get(); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (thread) // NULL in unittests. 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) thread->Send(new ViewHostMsg_SuddenTerminationChanged(enabled)); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebStorageNamespace* 360eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochRendererWebKitPlatformSupportImpl::createLocalStorageNamespace() { 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new WebStorageNamespaceImpl(); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//------------------------------------------------------------------------------ 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebIDBFactory* RendererWebKitPlatformSupportImpl::idbFactory() { 368868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!web_idb_factory_) 369eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch web_idb_factory_.reset( 370eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch new RendererWebIDBFactoryImpl(thread_safe_sender_.get())); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return web_idb_factory_.get(); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//------------------------------------------------------------------------------ 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebFileSystem* RendererWebKitPlatformSupportImpl::fileSystem() { 377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!web_file_system_) 378558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch web_file_system_.reset(new WebFileSystemImpl(child_thread_loop_.get())); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return web_file_system_.get(); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//------------------------------------------------------------------------------ 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 384eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochWebMimeRegistry::SupportsType 385eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochRendererWebKitPlatformSupportImpl::MimeRegistry::supportsMediaMIMEType( 386eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const WebString& mime_type, 387eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const WebString& codecs) { 388eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return supportsMediaMIMEType(mime_type, codecs, WebString()); 389eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 390eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 391eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochWebMimeRegistry::SupportsType 392eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochRendererWebKitPlatformSupportImpl::MimeRegistry::supportsMediaMIMEType( 393eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const WebString& mime_type, 394eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const WebString& codecs, 395eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const WebString& key_system) { 396eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string mime_type_ascii = ToASCIIOrEmpty(mime_type); 397eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Not supporting the container is a flat-out no. 398eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!net::IsSupportedMediaMimeType(mime_type_ascii)) 399eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return IsNotSupported; 400eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 401eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!key_system.isEmpty()) { 402eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Check whether the key system is supported with the mime_type and codecs. 403eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 404eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Not supporting the key system is a flat-out no. 4057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!IsSupportedKeySystem(key_system)) 406eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return IsNotSupported; 407eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 408eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<std::string> strict_codecs; 409eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool strip_suffix = !net::IsStrictMediaMimeType(mime_type_ascii); 410eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch net::ParseCodecString(ToASCIIOrEmpty(codecs), &strict_codecs, strip_suffix); 411eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 4127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!IsSupportedKeySystemWithMediaMimeType( 413eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch mime_type_ascii, strict_codecs, ToASCIIOrEmpty(key_system))) 414eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return IsNotSupported; 415eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 416eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Continue processing the mime_type and codecs. 417eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 418eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 419eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Check list of strict codecs to see if it is supported. 420eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (net::IsStrictMediaMimeType(mime_type_ascii)) { 421eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // We support the container, but no codecs were specified. 422eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (codecs.isNull()) 423eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return MayBeSupported; 424eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 425eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Check if the codecs are a perfect match. 426eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<std::string> strict_codecs; 427eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch net::ParseCodecString(ToASCIIOrEmpty(codecs), &strict_codecs, false); 428eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!net::IsSupportedStrictMediaMimeType(mime_type_ascii, strict_codecs)) 429eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return IsNotSupported; 430eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 431eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Good to go! 432eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return IsSupported; 433eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 434eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 435eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // If we don't recognize the codec, it's possible we support it. 436eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<std::string> parsed_codecs; 437eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch net::ParseCodecString(ToASCIIOrEmpty(codecs), &parsed_codecs, true); 438eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!net::AreSupportedMediaCodecs(parsed_codecs)) 439eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return MayBeSupported; 440eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 441eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Otherwise we have a perfect match. 442eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return IsSupported; 443eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 444eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 445eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool 446eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochRendererWebKitPlatformSupportImpl::MimeRegistry::supportsMediaSourceMIMEType( 447eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const WebKit::WebString& mime_type, 448eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const WebString& codecs) { 449eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string mime_type_ascii = ToASCIIOrEmpty(mime_type); 450eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<std::string> parsed_codec_ids; 451eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch net::ParseCodecString(ToASCIIOrEmpty(codecs), &parsed_codec_ids, false); 452eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (mime_type_ascii.empty() || parsed_codec_ids.size() == 0) 453eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return false; 454eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return media::StreamParserFactory::IsTypeSupported( 455eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch mime_type_ascii, parsed_codec_ids); 456eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 457eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebString 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RendererWebKitPlatformSupportImpl::MimeRegistry::mimeTypeForExtension( 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebString& file_extension) { 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (IsPluginProcess()) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SimpleWebMimeRegistryImpl::mimeTypeForExtension(file_extension); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The sandbox restricts our access to the registry, so we need to proxy 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // these calls over to the browser process. 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string mime_type; 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderThread::Get()->Send( 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new MimeRegistryMsg_GetMimeTypeFromExtension( 469eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::FilePath::FromUTF16Unsafe(file_extension).value(), &mime_type)); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ASCIIToUTF16(mime_type); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebString RendererWebKitPlatformSupportImpl::MimeRegistry::mimeTypeFromFile( 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebString& file_path) { 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (IsPluginProcess()) 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SimpleWebMimeRegistryImpl::mimeTypeFromFile(file_path); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The sandbox restricts our access to the registry, so we need to proxy 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // these calls over to the browser process. 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string mime_type; 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderThread::Get()->Send(new MimeRegistryMsg_GetMimeTypeFromFile( 482eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::FilePath::FromUTF16Unsafe(file_path), 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &mime_type)); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ASCIIToUTF16(mime_type); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebString 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RendererWebKitPlatformSupportImpl::MimeRegistry::preferredExtensionForMIMEType( 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebString& mime_type) { 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (IsPluginProcess()) 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SimpleWebMimeRegistryImpl::preferredExtensionForMIMEType(mime_type); 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The sandbox restricts our access to the registry, so we need to proxy 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // these calls over to the browser process. 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath::StringType file_extension; 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderThread::Get()->Send( 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new MimeRegistryMsg_GetPreferredExtensionForMimeType( 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UTF16ToASCII(mime_type), &file_extension)); 499eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return base::FilePath(file_extension).AsUTF16Unsafe(); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//------------------------------------------------------------------------------ 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RendererWebKitPlatformSupportImpl::FileUtilities::getFileInfo( 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebString& path, 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFileInfo& web_file_info) { 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::PlatformFileInfo file_info; 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::PlatformFileError status; 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SendSyncMessageFromAnyThread(new FileUtilitiesMsg_GetFileInfo( 510eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::FilePath::FromUTF16Unsafe(path), &file_info, &status)) || 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status != base::PLATFORM_FILE_OK) { 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_glue::PlatformFileInfoToWebFileInfo(file_info, &web_file_info); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_file_info.platformPath = path; 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool RendererWebKitPlatformSupportImpl::FileUtilities:: 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SendSyncMessageFromAnyThread(IPC::SyncMessage* msg) const { 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeTicks begin = base::TimeTicks::Now(); 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const bool success = thread_safe_sender_->Send(msg); 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta delta = base::TimeTicks::Now() - begin; 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UMA_HISTOGRAM_TIMES("RendererSyncIPC.ElapsedTime", delta); 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return success; 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//------------------------------------------------------------------------------ 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RendererWebKitPlatformSupportImpl::SandboxSupport::ensureFontLoaded( 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HFONT font) { 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOGFONT logfont; 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetObject(font, sizeof(LOGFONT), &logfont); 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderThread::Get()->PreCacheFont(logfont); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RendererWebKitPlatformSupportImpl::SandboxSupport::loadFont( 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NSFont* src_font, CGFontRef* out, uint32* font_id) { 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 font_data_size; 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FontDescriptor src_font_descriptor(src_font); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::SharedMemoryHandle font_data; 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!RenderThread::Get()->Send(new ViewHostMsg_LoadFont( 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) src_font_descriptor, &font_data_size, &font_data, font_id))) { 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *out = NULL; 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *font_id = 0; 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (font_data_size == 0 || font_data == base::SharedMemory::NULLHandle() || 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *font_id == 0) { 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(ERROR) << "Bad response from ViewHostMsg_LoadFont() for " << 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) src_font_descriptor.font_name; 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *out = NULL; 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *font_id = 0; 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(jeremy): Need to call back into WebKit to make sure that the font 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // isn't already activated, based on the font id. If it's already 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // activated, don't reactivate it here - crbug.com/72727 . 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return FontLoader::CGFontRefFromBuffer(font_data, font_data_size, out); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID) 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WebKit doesn't use WebSandboxSupport on android so we don't need to 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// implement anything here. This is cleaner to support than excluding the 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// whole class for android. 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 579a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)RendererWebKitPlatformSupportImpl::SandboxSupport::getFontFamilyForCharacter( 580a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) WebKit::WebUChar32 character, 581a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const char* preferred_locale, 582a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) WebKit::WebFontFamily* family) { 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::AutoLock lock(unicode_font_families_mutex_); 584a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const std::map<int32_t, WebKit::WebFontFamily>::const_iterator iter = 585a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) unicode_font_families_.find(character); 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (iter != unicode_font_families_.end()) { 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) family->name = iter->second.name; 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) family->isBold = iter->second.isBold; 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) family->isItalic = iter->second.isItalic; 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 593a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) GetFontFamilyForCharacter(character, preferred_locale, family); 594a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) unicode_font_families_.insert(std::make_pair(character, *family)); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RendererWebKitPlatformSupportImpl::SandboxSupport::getRenderStyleForStrike( 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* family, int sizeAndStyle, WebKit::WebFontRenderStyle* out) { 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRenderStyleForStrike(family, sizeAndStyle, out); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//------------------------------------------------------------------------------ 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Platform::FileHandle 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RendererWebKitPlatformSupportImpl::databaseOpenFile( 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebString& vfs_file_name, int desired_flags) { 610eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return DatabaseUtil::DatabaseOpenFile( 611eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch vfs_file_name, desired_flags, sync_message_filter_.get()); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int RendererWebKitPlatformSupportImpl::databaseDeleteFile( 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebString& vfs_file_name, bool sync_dir) { 616eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return DatabaseUtil::DatabaseDeleteFile( 617eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch vfs_file_name, sync_dir, sync_message_filter_.get()); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)long RendererWebKitPlatformSupportImpl::databaseGetFileAttributes( 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebString& vfs_file_name) { 622eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return DatabaseUtil::DatabaseGetFileAttributes(vfs_file_name, 623eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch sync_message_filter_.get()); 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)long long RendererWebKitPlatformSupportImpl::databaseGetFileSize( 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebString& vfs_file_name) { 628eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return DatabaseUtil::DatabaseGetFileSize(vfs_file_name, 629eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch sync_message_filter_.get()); 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)long long RendererWebKitPlatformSupportImpl::databaseGetSpaceAvailableForOrigin( 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebString& origin_identifier) { 634eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return DatabaseUtil::DatabaseGetSpaceAvailable(origin_identifier, 635eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch sync_message_filter_.get()); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebKit::WebSharedWorkerRepository* 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RendererWebKitPlatformSupportImpl::sharedWorkerRepository() { 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!CommandLine::ForCurrentProcess()->HasSwitch( 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kDisableSharedWorkers)) { 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return shared_worker_repository_.get(); 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RendererWebKitPlatformSupportImpl::canAccelerate2dCanvas() { 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderThreadImpl* thread = RenderThreadImpl::current(); 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GpuChannelHost* host = thread->EstablishGpuChannelSync( 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CAUSE_FOR_GPU_LAUNCH_CANVAS_2D); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!host) 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const gpu::GPUInfo& gpu_info = host->gpu_info(); 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (gpu_info.can_lose_context || gpu_info.software_rendering) 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool RendererWebKitPlatformSupportImpl::isThreadedCompositingEnabled() { 6637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return !!RenderThreadImpl::current()->compositor_message_loop_proxy().get(); 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)double RendererWebKitPlatformSupportImpl::audioHardwareSampleRate() { 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderThreadImpl* thread = RenderThreadImpl::current(); 668c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return thread->GetAudioHardwareConfig()->GetOutputSampleRate(); 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)size_t RendererWebKitPlatformSupportImpl::audioHardwareBufferSize() { 6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderThreadImpl* thread = RenderThreadImpl::current(); 6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return thread->GetAudioHardwareConfig()->GetOutputBufferSize(); 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)unsigned RendererWebKitPlatformSupportImpl::audioHardwareOutputChannels() { 6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderThreadImpl* thread = RenderThreadImpl::current(); 6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return thread->GetAudioHardwareConfig()->GetOutputChannels(); 6792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(crogers): remove deprecated API as soon as WebKit calls new API. 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebAudioDevice* 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RendererWebKitPlatformSupportImpl::createAudioDevice( 6842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t buffer_size, 6852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned channels, 6862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double sample_rate, 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebAudioDevice::RenderCallback* callback) { 6882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return createAudioDevice( 6892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) buffer_size, 0, channels, sample_rate, callback, "default"); 6902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(crogers): remove deprecated API as soon as WebKit calls new API. 6932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebAudioDevice* 6942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)RendererWebKitPlatformSupportImpl::createAudioDevice( 6952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t buffer_size, 6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned input_channels, 6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned channels, 6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double sample_rate, 6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebAudioDevice::RenderCallback* callback) { 7002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return createAudioDevice( 7012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) buffer_size, input_channels, channels, sample_rate, callback, "default"); 7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebAudioDevice* 7052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)RendererWebKitPlatformSupportImpl::createAudioDevice( 7062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t buffer_size, 7072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned input_channels, 7082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned channels, 7092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double sample_rate, 7102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebAudioDevice::RenderCallback* callback, 7112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebKit::WebString& input_device_id) { 7127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Use a mock for testing. 7137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch WebKit::WebAudioDevice* mock_device = 7147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch GetContentClient()->renderer()->OverrideCreateAudioDevice(sample_rate); 7157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (mock_device) 7167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return mock_device; 7177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The |channels| does not exactly identify the channel layout of the 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // device. The switch statement below assigns a best guess to the channel 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // layout based on number of channels. 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(crogers): WebKit should give the channel layout instead of the hard 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // channel count. 7232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media::ChannelLayout layout = media::CHANNEL_LAYOUT_UNSUPPORTED; 7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (channels) { 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 1: 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout = media::CHANNEL_LAYOUT_MONO; 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 2: 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout = media::CHANNEL_LAYOUT_STEREO; 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 3: 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout = media::CHANNEL_LAYOUT_2_1; 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 4: 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout = media::CHANNEL_LAYOUT_4_0; 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 5: 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout = media::CHANNEL_LAYOUT_5_0; 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 6: 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout = media::CHANNEL_LAYOUT_5_1; 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 7: 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout = media::CHANNEL_LAYOUT_7_0; 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 8: 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout = media::CHANNEL_LAYOUT_7_1; 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout = media::CHANNEL_LAYOUT_STEREO; 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 753868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int session_id = 0; 754868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (input_device_id.isNull() || 755868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) !base::StringToInt(UTF16ToUTF8(input_device_id), &session_id)) { 756868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (input_channels > 0) 757868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DLOG(WARNING) << "createAudioDevice(): request for audio input ignored"; 758868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 759868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) input_channels = 0; 760868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 761868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) media::AudioParameters params( 7632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media::AudioParameters::AUDIO_PCM_LOW_LATENCY, 7642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layout, input_channels, 7652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<int>(sample_rate), 16, buffer_size); 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 767868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return new RendererWebAudioDeviceImpl(params, callback, session_id); 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 770eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_ANDROID) 771eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool RendererWebKitPlatformSupportImpl::loadAudioResource( 772eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebKit::WebAudioBus* destination_bus, const char* audio_file_data, 773eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch size_t data_size, double sample_rate) { 774eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return DecodeAudioFileData(destination_bus, 775eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch audio_file_data, 776eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch data_size, 777eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch sample_rate, 778eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch thread_safe_sender_); 779eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 780eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#else 781eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool RendererWebKitPlatformSupportImpl::loadAudioResource( 782eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebKit::WebAudioBus* destination_bus, const char* audio_file_data, 783eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch size_t data_size, double sample_rate) { 7847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return DecodeAudioFileData( 7857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch destination_bus, audio_file_data, data_size, sample_rate); 786eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 787eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif // defined(OS_ANDROID) 788eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//------------------------------------------------------------------------------ 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)WebKit::WebContentDecryptionModule* 7927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)RendererWebKitPlatformSupportImpl::createContentDecryptionModule( 7937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const WebKit::WebString& key_system) { 7947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return WebContentDecryptionModuleImpl::Create(key_system); 7957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 7967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)//------------------------------------------------------------------------------ 798eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 799eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochWebKit::WebMIDIAccessor* 800eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochRendererWebKitPlatformSupportImpl::createMIDIAccessor( 801eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebKit::WebMIDIAccessorClient* client) { 802eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebKit::WebMIDIAccessor* accessor = 803eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetContentClient()->renderer()->OverrideCreateMIDIAccessor(client); 804eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (accessor) 805eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return accessor; 806eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 807eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return new RendererWebMIDIAccessorImpl(client); 808eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 809eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 810ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid RendererWebKitPlatformSupportImpl::getPluginList( 811ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch bool refresh, 812ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch WebKit::WebPluginListBuilder* builder) { 813ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#if defined(ENABLE_PLUGINS) 814ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<WebPluginInfo> plugins; 815ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (!plugin_refresh_allowed_) 816ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch refresh = false; 817ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch RenderThread::Get()->Send( 818ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch new ViewHostMsg_GetPlugins(refresh, &plugins)); 819ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch for (size_t i = 0; i < plugins.size(); ++i) { 820ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const WebPluginInfo& plugin = plugins[i]; 821ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 822ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch builder->addPlugin( 823ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch plugin.name, plugin.desc, 824ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch plugin.path.BaseName().AsUTF16Unsafe()); 825ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 826ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch for (size_t j = 0; j < plugin.mime_types.size(); ++j) { 827ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const WebPluginMimeType& mime_type = plugin.mime_types[j]; 828ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 829ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch builder->addMediaTypeToLastPlugin( 830ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch WebString::fromUTF8(mime_type.mime_type), mime_type.description); 831ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 832ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch for (size_t k = 0; k < mime_type.file_extensions.size(); ++k) { 833ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch builder->addFileExtensionToLastMediaType( 834ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch WebString::fromUTF8(mime_type.file_extensions[k])); 835ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 836ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 837ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 838ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif 839ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 840ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 841eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch//------------------------------------------------------------------------------ 8427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebKit::WebString 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RendererWebKitPlatformSupportImpl::signedPublicKeyAndChallengeString( 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned key_size_index, 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebKit::WebString& challenge, 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebKit::WebURL& url) { 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string signed_public_key; 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderThread::Get()->Send(new ViewHostMsg_Keygen( 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<uint32>(key_size_index), 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) challenge.utf8(), 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(url), 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &signed_public_key)); 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return WebString::fromUTF8(signed_public_key); 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//------------------------------------------------------------------------------ 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RendererWebKitPlatformSupportImpl::screenColorProfile( 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebVector<char>* to_profile) { 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<char> profile; 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderThread::Get()->Send( 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new ViewHostMsg_GetMonitorColorProfile(&profile)); 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *to_profile = profile; 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//------------------------------------------------------------------------------ 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebBlobRegistry* RendererWebKitPlatformSupportImpl::blobRegistry() { 8702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // thread_safe_sender_ can be NULL when running some tests. 871868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!blob_registry_.get() && thread_safe_sender_.get()) 872868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) blob_registry_.reset(new WebBlobRegistryImpl(thread_safe_sender_.get())); 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return blob_registry_.get(); 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//------------------------------------------------------------------------------ 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RendererWebKitPlatformSupportImpl::sampleGamepads(WebGamepads& gamepads) { 8792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (g_test_gamepads == 0) { 8803240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch RenderThreadImpl::current()->SampleGamepads(&gamepads); 8812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 8822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gamepads = g_test_gamepads.Get(); 8832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebKit::WebString RendererWebKitPlatformSupportImpl::userAgent( 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebKit::WebURL& url) { 8882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WebKitPlatformSupportImpl::userAgent(url); 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//------------------------------------------------------------------------------ 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebRTCPeerConnectionHandler* 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RendererWebKitPlatformSupportImpl::createRTCPeerConnectionHandler( 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRTCPeerConnectionHandlerClient* client) { 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderThreadImpl* render_thread = RenderThreadImpl::current(); 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(render_thread); 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!render_thread) 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 9002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_WEBRTC) 9022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebRTCPeerConnectionHandler* peer_connection_handler = 9032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetContentClient()->renderer()->OverrideCreateWebRTCPeerConnectionHandler( 9042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) client); 9052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (peer_connection_handler) 9062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return peer_connection_handler; 9072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaStreamDependencyFactory* rtc_dependency_factory = 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_thread->GetMediaStreamDependencyFactory(); 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return rtc_dependency_factory->CreateRTCPeerConnectionHandler(client); 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(ENABLE_WEBRTC) 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//------------------------------------------------------------------------------ 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebMediaStreamCenter* 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RendererWebKitPlatformSupportImpl::createMediaStreamCenter( 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebMediaStreamCenterClient* client) { 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderThreadImpl* render_thread = RenderThreadImpl::current(); 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(render_thread); 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!render_thread) 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return render_thread->CreateMediaStreamCenter(client); 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RendererWebKitPlatformSupportImpl::SetSandboxEnabledForTesting( 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool enable) { 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool was_enabled = g_sandbox_enabled; 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_sandbox_enabled = enable; 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return was_enabled; 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 9372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RendererWebKitPlatformSupportImpl::SetMockGamepadsForTesting( 9382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebGamepads& pads) { 9392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_test_gamepads.Get() = pads; 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//------------------------------------------------------------------------------ 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 944c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)WebKit::WebSpeechSynthesizer* 945c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)RendererWebKitPlatformSupportImpl::createSpeechSynthesizer( 946c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebKit::WebSpeechSynthesizerClient* client) { 947c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetContentClient()->renderer()->OverrideSpeechSynthesizer(client); 948c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 949c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 950c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)//------------------------------------------------------------------------------ 951c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 9522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool RendererWebKitPlatformSupportImpl::processMemorySizesInBytes( 9532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t* private_bytes, size_t* shared_bytes) { 9542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::RenderThread::Get()->Send( 9552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new ViewHostMsg_GetProcessMemorySizes(private_bytes, shared_bytes)); 9562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 9572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//------------------------------------------------------------------------------ 9602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebKit::WebGraphicsContext3D* 9622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)RendererWebKitPlatformSupportImpl::createOffscreenGraphicsContext3D( 9632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebKit::WebGraphicsContext3D::Attributes& attributes) { 9642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WebGraphicsContext3DCommandBufferImpl::CreateOffscreenContext( 9652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderThreadImpl::current(), 9662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) attributes, 9672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL(attributes.topDocumentURL)); 9682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//------------------------------------------------------------------------------ 9712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 97290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)WebKit::WebGraphicsContext3DProvider* RendererWebKitPlatformSupportImpl:: 97390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) createSharedOffscreenGraphicsContext3DProvider() { 974868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!shared_offscreen_context_.get() || 9752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) shared_offscreen_context_->DestroyedOnMainThread()) { 9762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) shared_offscreen_context_ = 9772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderThreadImpl::current()->OffscreenContextProviderForMainThread(); 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 979868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!shared_offscreen_context_.get()) 9802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 98190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return new webkit::gpu::WebGraphicsContext3DProviderImpl( 98290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) shared_offscreen_context_); 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 98590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)//------------------------------------------------------------------------------ 98690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 987b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)WebKit::WebCompositorSupport* 988b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)RendererWebKitPlatformSupportImpl::compositorSupport() { 989b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return &compositor_support_; 990b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} 991b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 9927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)//------------------------------------------------------------------------------ 9937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 9947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)WebKit::WebString RendererWebKitPlatformSupportImpl::convertIDNToUnicode( 9957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const WebKit::WebString& host, 9967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const WebKit::WebString& languages) { 9977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return net::IDNToUnicode(host.utf8(), languages.utf8()); 9987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 9997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 10007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch//------------------------------------------------------------------------------ 10017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 10027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid RendererWebKitPlatformSupportImpl::setDeviceMotionListener( 10037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch WebKit::WebDeviceMotionListener* listener) { 10049ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch if (g_test_device_motion_data == 0) { 10059ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch if (!device_motion_event_pump_) { 10069ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch device_motion_event_pump_.reset(new DeviceMotionEventPump); 10079ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch device_motion_event_pump_->Attach(RenderThreadImpl::current()); 10089ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch } 10099ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch device_motion_event_pump_->SetListener(listener); 1010a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } else if (listener) { 1011a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Testing mode: just echo the test data to the listener. 10129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::MessageLoopProxy::current()->PostTask( 10139ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch FROM_HERE, 10149ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::Bind(&WebKit::WebDeviceMotionListener::didChangeDeviceMotion, 10159ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::Unretained(listener), 10169ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch g_test_device_motion_data.Get())); 10177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 10189ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 10199ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 10209ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// static 10219ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochvoid RendererWebKitPlatformSupportImpl::SetMockDeviceMotionDataForTesting( 10229ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch const WebKit::WebDeviceMotionData& data) { 10239ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch g_test_device_motion_data.Get() = data; 10249ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 10259ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 10269ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch//------------------------------------------------------------------------------ 10279ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 10282385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochvoid RendererWebKitPlatformSupportImpl::setDeviceOrientationListener( 10292385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch WebKit::WebDeviceOrientationListener* listener) { 10302385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch if (!device_orientation_event_pump_) { 10312385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch device_orientation_event_pump_.reset(new DeviceOrientationEventPump); 10322385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch device_orientation_event_pump_->Attach(RenderThreadImpl::current()); 10332385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch } 10342385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch device_orientation_event_pump_->SetListener(listener); 10352385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch} 10362385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 10372385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch//------------------------------------------------------------------------------ 10382385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 10399ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben MurdochWebKit::WebCrypto* RendererWebKitPlatformSupportImpl::crypto() { 104058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch // Use a mock implementation for testing in-progress work. 104158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch WebKit::WebCrypto* crypto = 104258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch GetContentClient()->renderer()->OverrideWebCrypto(); 104358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch if (crypto) 104458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch return crypto; 104558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 10469ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch if (!web_crypto_) 10479ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch web_crypto_.reset(new WebCryptoImpl()); 10489ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch return web_crypto_.get(); 10499ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 10507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 10517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1052ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch//------------------------------------------------------------------------------ 1053ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1054ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#if defined(OS_ANDROID) 1055ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid RendererWebKitPlatformSupportImpl::vibrate(unsigned int milliseconds) { 1056ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch RenderThread::Get()->Send( 1057ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch new ViewHostMsg_Vibrate(base::checked_numeric_cast<int64>(milliseconds))); 1058ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 1059ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1060ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid RendererWebKitPlatformSupportImpl::cancelVibration() { 1061ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch RenderThread::Get()->Send(new ViewHostMsg_CancelVibration()); 1062ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 1063ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif // defined(OS_ANDROID) 1064ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1065ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch//------------------------------------------------------------------------------ 1066ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1067ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid RendererWebKitPlatformSupportImpl::queryStorageUsageAndQuota( 1068ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const WebKit::WebURL& storage_partition, 1069ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch WebKit::WebStorageQuotaType type, 1070ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch WebKit::WebStorageQuotaCallbacks* callbacks) { 1071558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (!thread_safe_sender_.get() || !quota_message_filter_.get()) 1072558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 1073558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch QuotaDispatcher::ThreadSpecificInstance( 1074558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch thread_safe_sender_.get(), 1075558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch quota_message_filter_.get())->QueryStorageUsageAndQuota( 1076558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch storage_partition, 1077558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch static_cast<quota::StorageType>(type), 1078558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch QuotaDispatcher::CreateWebStorageQuotaCallbacksWrapper(callbacks)); 1079ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 1080ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 1082