- add sources.
[platform/framework/web/crosswalk.git] / src / content / renderer / renderer_webkitplatformsupport_impl.h
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.
4
5 #ifndef CONTENT_RENDERER_RENDERER_WEBKITPLATFORMSUPPORT_IMPL_H_
6 #define CONTENT_RENDERER_RENDERER_WEBKITPLATFORMSUPPORT_IMPL_H_
7
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"
16
17 namespace base {
18 class MessageLoopProxy;
19 }
20
21 namespace cc {
22 class ContextProvider;
23 }
24
25 namespace IPC {
26 class SyncMessageFilter;
27 }
28
29 namespace WebKit {
30 class WebDeviceMotionData;
31 class WebDeviceOrientationData;
32 class WebGraphicsContext3DProvider;
33 }
34
35 namespace content {
36 class DeviceMotionEventPump;
37 class DeviceOrientationEventPump;
38 class QuotaMessageFilter;
39 class RendererClipboardClient;
40 class ThreadSafeSender;
41 class WebClipboardImpl;
42 class WebCryptoImpl;
43 class WebFileSystemImpl;
44
45 class CONTENT_EXPORT RendererWebKitPlatformSupportImpl
46     : public WebKitPlatformSupportImpl {
47  public:
48   RendererWebKitPlatformSupportImpl();
49   virtual ~RendererWebKitPlatformSupportImpl();
50
51   void set_plugin_refresh_allowed(bool plugin_refresh_allowed) {
52     plugin_refresh_allowed_ = plugin_refresh_allowed;
53   }
54   // Platform methods:
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,
77                                  bool sync_dir);
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();
98
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);
107
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);
112
113   virtual bool loadAudioResource(
114       WebKit::WebAudioBus* destination_bus, const char* audio_file_data,
115       size_t data_size, double sample_rate);
116
117   virtual WebKit::WebContentDecryptionModule* createContentDecryptionModule(
118       const WebKit::WebString& key_system);
119   virtual WebKit::WebMIDIAccessor*
120       createMIDIAccessor(WebKit::WebMIDIAccessorClient* client);
121
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();
149
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.
155   //
156   // Returns the previous |enable| value.
157   static bool SetSandboxEnabledForTesting(bool enable);
158
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
165   // is invoked.
166   static void SetMockDeviceOrientationDataForTesting(
167       const WebKit::WebDeviceOrientationData& data);
168
169  private:
170   bool CheckPreparsedJsCachingEnabled() const;
171
172   scoped_ptr<RendererClipboardClient> clipboard_client_;
173   scoped_ptr<WebClipboardImpl> clipboard_;
174
175   class FileUtilities;
176   scoped_ptr<FileUtilities> file_utilities_;
177
178   class MimeRegistry;
179   scoped_ptr<MimeRegistry> mime_registry_;
180
181   class SandboxSupport;
182   scoped_ptr<SandboxSupport> sandbox_support_;
183
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_;
189
190   // If true, then a GetPlugins call is allowed to rescan the disk.
191   bool plugin_refresh_allowed_;
192
193   scoped_ptr<WebKit::WebIDBFactory> web_idb_factory_;
194
195   scoped_ptr<WebFileSystemImpl> web_file_system_;
196
197   scoped_ptr<WebKit::WebBlobRegistry> blob_registry_;
198
199   scoped_ptr<DeviceMotionEventPump> device_motion_event_pump_;
200   scoped_ptr<DeviceOrientationEventPump> device_orientation_event_pump_;
201
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_;
206
207   webkit::WebCompositorSupportImpl compositor_support_;
208
209   scoped_ptr<WebCryptoImpl> web_crypto_;
210 };
211
212 }  // namespace content
213
214 #endif  // CONTENT_RENDERER_RENDERER_WEBKITPLATFORMSUPPORT_IMPL_H_