1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CONTENT_RENDERER_RENDERER_WEBKITPLATFORMSUPPORT_IMPL_H_
6 #define CONTENT_RENDERER_RENDERER_WEBKITPLATFORMSUPPORT_IMPL_H_
8 #include "base/compiler_specific.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "base/platform_file.h"
11 #include "content/child/webkitplatformsupport_impl.h"
12 #include "content/common/content_export.h"
13 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
14 #include "third_party/WebKit/public/platform/WebIDBFactory.h"
15 #include "webkit/renderer/compositor_bindings/web_compositor_support_impl.h"
18 class MessageLoopProxy;
22 class ContextProvider;
26 class SyncMessageFilter;
30 class WebDeviceMotionData;
31 class WebDeviceOrientationData;
32 class WebGraphicsContext3DProvider;
36 class DeviceMotionEventPump;
37 class DeviceOrientationEventPump;
38 class QuotaMessageFilter;
39 class RendererClipboardClient;
40 class ThreadSafeSender;
41 class WebClipboardImpl;
43 class WebFileSystemImpl;
45 class CONTENT_EXPORT RendererWebKitPlatformSupportImpl
46 : public WebKitPlatformSupportImpl {
48 RendererWebKitPlatformSupportImpl();
49 virtual ~RendererWebKitPlatformSupportImpl();
51 void set_plugin_refresh_allowed(bool plugin_refresh_allowed) {
52 plugin_refresh_allowed_ = plugin_refresh_allowed;
55 virtual WebKit::WebClipboard* clipboard();
56 virtual WebKit::WebMimeRegistry* mimeRegistry();
57 virtual WebKit::WebFileUtilities* fileUtilities();
58 virtual WebKit::WebSandboxSupport* sandboxSupport();
59 virtual WebKit::WebCookieJar* cookieJar();
60 virtual WebKit::WebThemeEngine* themeEngine();
61 virtual WebKit::WebSpeechSynthesizer* createSpeechSynthesizer(
62 WebKit::WebSpeechSynthesizerClient* client);
63 virtual bool sandboxEnabled();
64 virtual unsigned long long visitedLinkHash(
65 const char* canonicalURL, size_t length);
66 virtual bool isLinkVisited(unsigned long long linkHash);
67 virtual WebKit::WebMessagePortChannel* createMessagePortChannel();
68 virtual WebKit::WebPrescientNetworking* prescientNetworking();
69 virtual void cacheMetadata(
70 const WebKit::WebURL&, double, const char*, size_t);
71 virtual WebKit::WebString defaultLocale();
72 virtual void suddenTerminationChanged(bool enabled);
73 virtual WebKit::WebStorageNamespace* createLocalStorageNamespace();
74 virtual WebKit::Platform::FileHandle databaseOpenFile(
75 const WebKit::WebString& vfs_file_name, int desired_flags);
76 virtual int databaseDeleteFile(const WebKit::WebString& vfs_file_name,
78 virtual long databaseGetFileAttributes(
79 const WebKit::WebString& vfs_file_name);
80 virtual long long databaseGetFileSize(
81 const WebKit::WebString& vfs_file_name);
82 virtual long long databaseGetSpaceAvailableForOrigin(
83 const WebKit::WebString& origin_identifier);
84 virtual WebKit::WebString signedPublicKeyAndChallengeString(
85 unsigned key_size_index,
86 const WebKit::WebString& challenge,
87 const WebKit::WebURL& url);
88 virtual void getPluginList(bool refresh,
89 WebKit::WebPluginListBuilder* builder);
90 virtual void screenColorProfile(WebKit::WebVector<char>* to_profile);
91 virtual WebKit::WebIDBFactory* idbFactory();
92 virtual WebKit::WebFileSystem* fileSystem();
93 virtual bool canAccelerate2dCanvas();
94 virtual bool isThreadedCompositingEnabled();
95 virtual double audioHardwareSampleRate();
96 virtual size_t audioHardwareBufferSize();
97 virtual unsigned audioHardwareOutputChannels();
99 // TODO(crogers): remove deprecated API as soon as WebKit calls new API.
100 virtual WebKit::WebAudioDevice* createAudioDevice(
101 size_t buffer_size, unsigned channels, double sample_rate,
102 WebKit::WebAudioDevice::RenderCallback* callback);
103 // TODO(crogers): remove deprecated API as soon as WebKit calls new API.
104 virtual WebKit::WebAudioDevice* createAudioDevice(
105 size_t buffer_size, unsigned input_channels, unsigned channels,
106 double sample_rate, WebKit::WebAudioDevice::RenderCallback* callback);
108 virtual WebKit::WebAudioDevice* createAudioDevice(
109 size_t buffer_size, unsigned input_channels, unsigned channels,
110 double sample_rate, WebKit::WebAudioDevice::RenderCallback* callback,
111 const WebKit::WebString& input_device_id);
113 virtual bool loadAudioResource(
114 WebKit::WebAudioBus* destination_bus, const char* audio_file_data,
115 size_t data_size, double sample_rate);
117 virtual WebKit::WebContentDecryptionModule* createContentDecryptionModule(
118 const WebKit::WebString& key_system);
119 virtual WebKit::WebMIDIAccessor*
120 createMIDIAccessor(WebKit::WebMIDIAccessorClient* client);
122 virtual WebKit::WebBlobRegistry* blobRegistry();
123 virtual void sampleGamepads(WebKit::WebGamepads&);
124 virtual WebKit::WebString userAgent(const WebKit::WebURL& url);
125 virtual WebKit::WebRTCPeerConnectionHandler* createRTCPeerConnectionHandler(
126 WebKit::WebRTCPeerConnectionHandlerClient* client);
127 virtual WebKit::WebMediaStreamCenter* createMediaStreamCenter(
128 WebKit::WebMediaStreamCenterClient* client);
129 virtual bool processMemorySizesInBytes(
130 size_t* private_bytes, size_t* shared_bytes);
131 virtual WebKit::WebGraphicsContext3D* createOffscreenGraphicsContext3D(
132 const WebKit::WebGraphicsContext3D::Attributes& attributes);
133 virtual WebKit::WebGraphicsContext3DProvider*
134 createSharedOffscreenGraphicsContext3DProvider();
135 virtual WebKit::WebCompositorSupport* compositorSupport();
136 virtual WebKit::WebString convertIDNToUnicode(
137 const WebKit::WebString& host, const WebKit::WebString& languages);
138 virtual void setDeviceMotionListener(
139 WebKit::WebDeviceMotionListener* listener) OVERRIDE;
140 virtual void setDeviceOrientationListener(
141 WebKit::WebDeviceOrientationListener* listener) OVERRIDE;
142 virtual WebKit::WebCrypto* crypto() OVERRIDE;
143 virtual void queryStorageUsageAndQuota(
144 const WebKit::WebURL& storage_partition,
145 WebKit::WebStorageQuotaType,
146 WebKit::WebStorageQuotaCallbacks*) OVERRIDE;
147 virtual void vibrate(unsigned int milliseconds);
148 virtual void cancelVibration();
150 // Disables the WebSandboxSupport implementation for testing.
151 // Tests that do not set up a full sandbox environment should call
152 // SetSandboxEnabledForTesting(false) _before_ creating any instances
153 // of this class, to ensure that we don't attempt to use sandbox-related
154 // file descriptors or other resources.
156 // Returns the previous |enable| value.
157 static bool SetSandboxEnabledForTesting(bool enable);
159 // Set WebGamepads to return when sampleGamepads() is invoked.
160 static void SetMockGamepadsForTesting(const WebKit::WebGamepads& pads);
161 // Set WebDeviceMotionData to return when setDeviceMotionListener is invoked.
162 static void SetMockDeviceMotionDataForTesting(
163 const WebKit::WebDeviceMotionData& data);
164 // Set WebDeviceOrientationData to return when setDeviceOrientationListener
166 static void SetMockDeviceOrientationDataForTesting(
167 const WebKit::WebDeviceOrientationData& data);
170 bool CheckPreparsedJsCachingEnabled() const;
172 scoped_ptr<RendererClipboardClient> clipboard_client_;
173 scoped_ptr<WebClipboardImpl> clipboard_;
176 scoped_ptr<FileUtilities> file_utilities_;
179 scoped_ptr<MimeRegistry> mime_registry_;
181 class SandboxSupport;
182 scoped_ptr<SandboxSupport> sandbox_support_;
184 // This counter keeps track of the number of times sudden termination is
185 // enabled or disabled. It starts at 0 (enabled) and for every disable
186 // increments by 1, for every enable decrements by 1. When it reaches 0,
187 // we tell the browser to enable fast termination.
188 int sudden_termination_disables_;
190 // If true, then a GetPlugins call is allowed to rescan the disk.
191 bool plugin_refresh_allowed_;
193 scoped_ptr<WebKit::WebIDBFactory> web_idb_factory_;
195 scoped_ptr<WebFileSystemImpl> web_file_system_;
197 scoped_ptr<WebKit::WebBlobRegistry> blob_registry_;
199 scoped_ptr<DeviceMotionEventPump> device_motion_event_pump_;
200 scoped_ptr<DeviceOrientationEventPump> device_orientation_event_pump_;
202 scoped_refptr<base::MessageLoopProxy> child_thread_loop_;
203 scoped_refptr<IPC::SyncMessageFilter> sync_message_filter_;
204 scoped_refptr<ThreadSafeSender> thread_safe_sender_;
205 scoped_refptr<QuotaMessageFilter> quota_message_filter_;
207 webkit::WebCompositorSupportImpl compositor_support_;
209 scoped_ptr<WebCryptoImpl> web_crypto_;
212 } // namespace content
214 #endif // CONTENT_RENDERER_RENDERER_WEBKITPLATFORMSUPPORT_IMPL_H_