Upstream version 5.34.98.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / public / platform / Platform.h
1 /*
2  * Copyright (C) 2012 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  *     * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *     * Redistributions in binary form must reproduce the above
11  * copyright notice, this list of conditions and the following disclaimer
12  * in the documentation and/or other materials provided with the
13  * distribution.
14  *     * Neither the name of Google Inc. nor the names of its
15  * contributors may be used to endorse or promote products derived from
16  * this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #ifndef Platform_h
32 #define Platform_h
33
34 #ifdef WIN32
35 #include <windows.h>
36 #endif
37
38 #include "WebAudioDevice.h"
39 #include "WebCommon.h"
40 #include "WebData.h"
41 #include "WebGamepads.h"
42 #include "WebGraphicsContext3D.h"
43 #include "WebLocalizedString.h"
44 #include "WebSpeechSynthesizer.h"
45 #include "WebStorageQuotaType.h"
46 #include "WebString.h"
47 #include "WebURLError.h"
48 #include "WebVector.h"
49
50 class GrContext;
51
52 namespace blink {
53
54 class WebAudioBus;
55 class WebBlobRegistry;
56 class WebContentDecryptionModule;
57 class WebClipboard;
58 class WebCompositorSupport;
59 class WebCookieJar;
60 class WebCrypto;
61 class WebDatabaseObserver;
62 class WebDeviceMotionListener;
63 class WebDeviceOrientationListener;
64 class WebDiscardableMemory;
65 class WebFallbackThemeEngine;
66 class WebFileSystem;
67 class WebFileUtilities;
68 class WebFlingAnimator;
69 class WebGestureCurveTarget;
70 class WebGestureCurve;
71 class WebGraphicsContext3DProvider;
72 class WebIDBFactory;
73 class WebMIDIAccessor;
74 class WebMIDIAccessorClient;
75 class WebMediaStreamCenter;
76 class WebMediaStreamCenterClient;
77 class WebMessagePortChannel;
78 class WebMimeRegistry;
79 class WebPluginListBuilder;
80 class WebPrescientNetworking;
81 class WebPublicSuffixList;
82 class WebRTCPeerConnectionHandler;
83 class WebRTCPeerConnectionHandlerClient;
84 class WebSandboxSupport;
85 class WebSocketHandle;
86 class WebSocketStreamHandle;
87 class WebSpeechSynthesizer;
88 class WebSpeechSynthesizerClient;
89 class WebStorageNamespace;
90 class WebStorageQuotaCallbacks;
91 struct WebFloatPoint;
92 class WebThemeEngine;
93 class WebThread;
94 class WebURL;
95 class WebURLLoader;
96 class WebUnitTestSupport;
97 class WebWaitableEvent;
98 class WebWorkerRunLoop;
99 struct WebLocalizedString;
100 struct WebSize;
101
102 class Platform {
103 public:
104     // HTML5 Database ------------------------------------------------------
105
106 #ifdef WIN32
107     typedef HANDLE FileHandle;
108 #else
109     typedef int FileHandle;
110 #endif
111
112     BLINK_PLATFORM_EXPORT static void initialize(Platform*);
113     BLINK_PLATFORM_EXPORT static void shutdown();
114     BLINK_PLATFORM_EXPORT static Platform* current();
115
116     // May return null.
117     virtual WebCookieJar* cookieJar() { return 0; }
118
119     // Must return non-null.
120     virtual WebClipboard* clipboard() { return 0; }
121
122     // Must return non-null.
123     virtual WebFileUtilities* fileUtilities() { return 0; }
124
125     // Must return non-null.
126     virtual WebMimeRegistry* mimeRegistry() { return 0; }
127
128     // May return null if sandbox support is not necessary
129     virtual WebSandboxSupport* sandboxSupport() { return 0; }
130
131     // May return null on some platforms.
132     virtual WebThemeEngine* themeEngine() { return 0; }
133
134     virtual WebFallbackThemeEngine* fallbackThemeEngine() { return 0; }
135
136     // May return null.
137     virtual WebSpeechSynthesizer* createSpeechSynthesizer(WebSpeechSynthesizerClient*) { return 0; }
138
139
140     // Media --------------------------------------------------------------
141
142     // May return null.
143     virtual WebContentDecryptionModule* createContentDecryptionModule(const WebString& keySystem) { return 0; }
144
145
146     // Audio --------------------------------------------------------------
147
148     virtual double audioHardwareSampleRate() { return 0; }
149     virtual size_t audioHardwareBufferSize() { return 0; }
150     virtual unsigned audioHardwareOutputChannels() { return 0; }
151
152     // Creates a device for audio I/O.
153     // Pass in (numberOfInputChannels > 0) if live/local audio input is desired.
154     virtual WebAudioDevice* createAudioDevice(size_t bufferSize, unsigned numberOfInputChannels, unsigned numberOfChannels, double sampleRate, WebAudioDevice::RenderCallback*, const WebString& deviceId) { return 0; }
155
156     // FIXME: remove deprecated APIs once chromium switches over to new method.
157     virtual WebAudioDevice* createAudioDevice(size_t bufferSize, unsigned numberOfChannels, double sampleRate, WebAudioDevice::RenderCallback*) { return 0; }
158     virtual WebAudioDevice* createAudioDevice(size_t bufferSize, unsigned numberOfInputChannels, unsigned numberOfChannels, double sampleRate, WebAudioDevice::RenderCallback*) { return 0; }
159
160
161     // MIDI ----------------------------------------------------------------
162
163     // Creates a platform dependent WebMIDIAccessor. MIDIAccessor under platform
164     // creates and owns it.
165     virtual WebMIDIAccessor* createMIDIAccessor(WebMIDIAccessorClient*) { return 0; }
166
167
168     // Blob ----------------------------------------------------------------
169
170     // Must return non-null.
171     virtual WebBlobRegistry* blobRegistry() { return 0; }
172
173
174     // Database ------------------------------------------------------------
175
176     // Opens a database file; dirHandle should be 0 if the caller does not need
177     // a handle to the directory containing this file
178     virtual FileHandle databaseOpenFile(const WebString& vfsFileName, int desiredFlags) { return FileHandle(); }
179
180     // Deletes a database file and returns the error code
181     virtual int databaseDeleteFile(const WebString& vfsFileName, bool syncDir) { return 0; }
182
183     // Returns the attributes of the given database file
184     virtual long databaseGetFileAttributes(const WebString& vfsFileName) { return 0; }
185
186     // Returns the size of the given database file
187     virtual long long databaseGetFileSize(const WebString& vfsFileName) { return 0; }
188
189     // Returns the space available for the given origin
190     virtual long long databaseGetSpaceAvailableForOrigin(const blink::WebString& originIdentifier) { return 0; }
191
192
193     // DOM Storage --------------------------------------------------
194
195     // Return a LocalStorage namespace
196     virtual WebStorageNamespace* createLocalStorageNamespace() { return 0; }
197
198
199     // FileSystem ----------------------------------------------------------
200
201     // Must return non-null.
202     virtual WebFileSystem* fileSystem() { return 0; }
203
204
205     // IDN conversion ------------------------------------------------------
206
207     virtual WebString convertIDNToUnicode(const WebString& host, const WebString& languages) { return host; }
208
209
210     // IndexedDB ----------------------------------------------------------
211
212     // Must return non-null.
213     virtual WebIDBFactory* idbFactory() { return 0; }
214
215
216     // Gamepad -------------------------------------------------------------
217
218     virtual void sampleGamepads(WebGamepads& into) { into.length = 0; }
219
220
221     // History -------------------------------------------------------------
222
223     // Returns the hash for the given canonicalized URL for use in visited
224     // link coloring.
225     virtual unsigned long long visitedLinkHash(
226         const char* canonicalURL, size_t length) { return 0; }
227
228     // Returns whether the given link hash is in the user's history. The
229     // hash must have been generated by calling VisitedLinkHash().
230     virtual bool isLinkVisited(unsigned long long linkHash) { return false; }
231
232
233     // Keygen --------------------------------------------------------------
234
235     // Handle the <keygen> tag for generating client certificates
236     // Returns a base64 encoded signed copy of a public key from a newly
237     // generated key pair and the supplied challenge string. keySizeindex
238     // specifies the strength of the key.
239     virtual WebString signedPublicKeyAndChallengeString(unsigned keySizeIndex,
240                                                         const WebString& challenge,
241                                                         const WebURL& url) { return WebString(); }
242
243
244     // Memory --------------------------------------------------------------
245
246     // Returns the current space allocated for the pagefile, in MB.
247     // That is committed size for Windows and virtual memory size for POSIX
248     virtual size_t memoryUsageMB() { return 0; }
249
250     // Same as above, but always returns actual value, without any caches.
251     virtual size_t actualMemoryUsageMB() { return 0; }
252
253     // Return the physical memory of the current machine, in MB.
254     virtual size_t physicalMemoryMB() { return 0; }
255
256     // Return the number of of processors of the current machine.
257     virtual size_t numberOfProcessors() { return 0; }
258
259     // Returns private and shared usage, in bytes. Private bytes is the amount of
260     // memory currently allocated to this process that cannot be shared. Returns
261     // false on platform specific error conditions.
262     virtual bool processMemorySizesInBytes(size_t* privateBytes, size_t* sharedBytes) { return false; }
263
264     // A callback interface for requestProcessMemorySizes
265     class ProcessMemorySizesCallback {
266     public:
267         virtual ~ProcessMemorySizesCallback() { }
268         virtual void dataReceived(size_t privateBytes, size_t sharedBytes) = 0;
269     };
270
271     // Requests private and shared usage, in bytes. Private bytes is the amount of
272     // memory currently allocated to this process that cannot be shared.
273     // The callback ownership is passed to the callee.
274     virtual void requestProcessMemorySizes(ProcessMemorySizesCallback* requestCallback) { }
275
276     // Reports number of bytes used by memory allocator for internal needs.
277     // Returns true if the size has been reported, or false otherwise.
278     virtual bool memoryAllocatorWasteInBytes(size_t*) { return false; }
279
280     // Allocates discardable memory. May return 0, even if the platform supports
281     // discardable memory. If nonzero, however, then the WebDiscardableMmeory is
282     // returned in an locked state. You may use its underlying data() member
283     // directly, taking care to unlock it when you are ready to let it become
284     // discardable.
285     virtual WebDiscardableMemory* allocateAndLockDiscardableMemory(size_t bytes) { return 0; }
286
287     // A wrapper for tcmalloc's HeapProfilerStart();
288     virtual void startHeapProfiling(const WebString& /*prefix*/) { }
289     // A wrapper for tcmalloc's HeapProfilerStop();
290     virtual void stopHeapProfiling() { }
291     // A wrapper for tcmalloc's HeapProfilerDump()
292     virtual void dumpHeapProfiling(const WebString& /*reason*/) { }
293     // A wrapper for tcmalloc's GetHeapProfile()
294     virtual WebString getHeapProfile() { return WebString(); }
295
296     static const size_t noDecodedImageByteLimit = static_cast<size_t>(-1);
297
298     // Returns the maximum amount of memory a decoded image should be allowed.
299     // See comments on ImageDecoder::m_maxDecodedBytes.
300     virtual size_t maxDecodedImageBytes() { return noDecodedImageByteLimit; }
301
302
303     // Message Ports -------------------------------------------------------
304
305     // Creates a Message Port Channel. This can be called on any thread.
306     // The returned object should only be used on the thread it was created on.
307     virtual WebMessagePortChannel* createMessagePortChannel() { return 0; }
308
309
310     // Network -------------------------------------------------------------
311
312     // Returns a new WebURLLoader instance.
313     virtual WebURLLoader* createURLLoader() { return 0; }
314
315     // May return null.
316     virtual WebPrescientNetworking* prescientNetworking() { return 0; }
317
318     // Returns a new WebSocketStreamHandle instance.
319     virtual WebSocketStreamHandle* createSocketStreamHandle() { return 0; }
320
321     // Returns a new WebSocketHandle instance.
322     virtual WebSocketHandle* createWebSocketHandle() { return 0; }
323
324     // Returns the User-Agent string that should be used for the given URL.
325     virtual WebString userAgent(const WebURL&) { return WebString(); }
326
327     // A suggestion to cache this metadata in association with this URL.
328     virtual void cacheMetadata(const WebURL&, double responseTime, const char* data, size_t dataSize) { }
329
330     // Returns the decoded data url if url had a supported mimetype and parsing was successful.
331     virtual WebData parseDataURL(const WebURL&, WebString& mimetype, WebString& charset) { return WebData(); }
332
333     virtual WebURLError cancelledError(const WebURL&) const { return WebURLError(); }
334
335
336     // Plugins -------------------------------------------------------------
337
338     // If refresh is true, then cached information should not be used to
339     // satisfy this call.
340     virtual void getPluginList(bool refresh, WebPluginListBuilder*) { }
341
342
343     // Public Suffix List --------------------------------------------------
344
345     // May return null on some platforms.
346     virtual WebPublicSuffixList* publicSuffixList() { return 0; }
347
348
349     // Resources -----------------------------------------------------------
350
351     // Returns a localized string resource (with substitution parameters).
352     virtual WebString queryLocalizedString(WebLocalizedString::Name) { return WebString(); }
353     virtual WebString queryLocalizedString(WebLocalizedString::Name, const WebString& parameter) { return WebString(); }
354     virtual WebString queryLocalizedString(WebLocalizedString::Name, const WebString& parameter1, const WebString& parameter2) { return WebString(); }
355
356
357     // Threads -------------------------------------------------------
358
359     // Creates an embedder-defined thread.
360     virtual WebThread* createThread(const char* name) { return 0; }
361
362     // Returns an interface to the current thread. This is owned by the
363     // embedder.
364     virtual WebThread* currentThread() { return 0; }
365
366
367     // WaitableEvent -------------------------------------------------------
368
369     // Creates an embedder-defined waitable event object.
370     virtual WebWaitableEvent* createWaitableEvent() { return 0; }
371
372     // Waits on multiple events and returns the event object that has been
373     // signaled. This may return 0 if it fails to wait events.
374     // Any event objects given to this method must not deleted while this
375     // wait is happening.
376     virtual WebWaitableEvent* waitMultipleEvents(const WebVector<WebWaitableEvent*>& events) { return 0; }
377
378
379     // Profiling -----------------------------------------------------------
380
381     virtual void decrementStatsCounter(const char* name) { }
382     virtual void incrementStatsCounter(const char* name) { }
383
384
385     // Resources -----------------------------------------------------------
386
387     // Returns a blob of data corresponding to the named resource.
388     virtual WebData loadResource(const char* name) { return WebData(); }
389
390     // Decodes the in-memory audio file data and returns the linear PCM audio data in the destinationBus.
391     // A sample-rate conversion to sampleRate will occur if the file data is at a different sample-rate.
392     // Returns true on success.
393     virtual bool loadAudioResource(WebAudioBus* destinationBus, const char* audioFileData, size_t dataSize, double sampleRate) { return false; }
394
395
396     // Screen -------------------------------------------------------------
397
398     // Supplies the system monitor color profile.
399     virtual void screenColorProfile(WebVector<char>* profile) { }
400
401
402     // Sudden Termination --------------------------------------------------
403
404     // Disable/Enable sudden termination.
405     virtual void suddenTerminationChanged(bool enabled) { }
406
407
408     // System --------------------------------------------------------------
409
410     // Returns a value such as "en-US".
411     virtual WebString defaultLocale() { return WebString(); }
412
413     // Wall clock time in seconds since the epoch.
414     virtual double currentTime() { return 0; }
415
416     // Monotonically increasing time in seconds from an arbitrary fixed point in the past.
417     // This function is expected to return at least millisecond-precision values. For this reason,
418     // it is recommended that the fixed point be no further in the past than the epoch.
419     virtual double monotonicallyIncreasingTime() { return 0; }
420
421     // WebKit clients must implement this funcion if they use cryptographic randomness.
422     virtual void cryptographicallyRandomValues(unsigned char* buffer, size_t length) = 0;
423
424     // Delayed work is driven by a shared timer.
425     typedef void (*SharedTimerFunction)();
426     virtual void setSharedTimerFiredFunction(SharedTimerFunction timerFunction) { }
427     virtual void setSharedTimerFireInterval(double) { }
428     virtual void stopSharedTimer() { }
429
430     // Callable from a background WebKit thread.
431     virtual void callOnMainThread(void (*func)(void*), void* context) { }
432
433
434     // Vibration -----------------------------------------------------------
435
436     // Starts a vibration for the given duration in milliseconds. If there is currently an active
437     // vibration it will be cancelled before the new one is started.
438     virtual void vibrate(unsigned time) { }
439
440     // Cancels the current vibration, if there is one.
441     virtual void cancelVibration() { }
442
443
444     // Testing -------------------------------------------------------------
445
446 #define HAVE_WEBUNITTESTSUPPORT 1
447     // Get a pointer to testing support interfaces. Will not be available in production builds.
448     virtual WebUnitTestSupport* unitTestSupport() { return 0; }
449
450
451     // Tracing -------------------------------------------------------------
452
453     // Get a pointer to the enabled state of the given trace category. The
454     // embedder can dynamically change the enabled state as trace event
455     // recording is started and stopped by the application. Only long-lived
456     // literal strings should be given as the category name. The implementation
457     // expects the returned pointer to be held permanently in a local static. If
458     // the unsigned char is non-zero, tracing is enabled. If tracing is enabled,
459     // addTraceEvent is expected to be called by the trace event macros.
460     virtual const unsigned char* getTraceCategoryEnabledFlag(const char* categoryName) { return 0; }
461
462     typedef long int TraceEventAPIAtomicWord;
463
464     // Get a pointer to a global state of the given thread. An embedder is
465     // expected to update the global state as the state of the embedder changes.
466     // A sampling thread in the Chromium side reads the global state periodically
467     // and reflects the sampling profiled results into about:tracing.
468     virtual TraceEventAPIAtomicWord* getTraceSamplingState(const unsigned bucketName) { return 0; }
469
470     typedef uint64_t TraceEventHandle;
471
472     // Add a trace event to the platform tracing system. Depending on the actual
473     // enabled state, this event may be recorded or dropped.
474     // - phase specifies the type of event:
475     //   - BEGIN ('B'): Marks the beginning of a scoped event.
476     //   - END ('E'): Marks the end of a scoped event.
477     //   - COMPLETE ('X'): Marks the beginning of a scoped event, but doesn't
478     //     need a matching END event. Instead, at the end of the scope,
479     //     updateTraceEventDuration() must be called with the TraceEventHandle
480     //     returned from addTraceEvent().
481     //   - INSTANT ('I'): Standalone, instantaneous event.
482     //   - START ('S'): Marks the beginning of an asynchronous event (the end
483     //     event can occur in a different scope or thread). The id parameter is
484     //     used to match START/FINISH pairs.
485     //   - FINISH ('F'): Marks the end of an asynchronous event.
486     //   - COUNTER ('C'): Used to trace integer quantities that change over
487     //     time. The argument values are expected to be of type int.
488     //   - METADATA ('M'): Reserved for internal use.
489     // - categoryEnabled is the pointer returned by getTraceCategoryEnabledFlag.
490     // - name is the name of the event. Also used to match BEGIN/END and
491     //   START/FINISH pairs.
492     // - id optionally allows events of the same name to be distinguished from
493     //   each other. For example, to trace the consutruction and destruction of
494     //   objects, specify the pointer as the id parameter.
495     // - numArgs specifies the number of elements in argNames, argTypes, and
496     //   argValues.
497     // - argNames is the array of argument names. Use long-lived literal strings
498     //   or specify the COPY flag.
499     // - argTypes is the array of argument types:
500     //   - BOOL (1): bool
501     //   - UINT (2): unsigned long long
502     //   - INT (3): long long
503     //   - DOUBLE (4): double
504     //   - POINTER (5): void*
505     //   - STRING (6): char* (long-lived null-terminated char* string)
506     //   - COPY_STRING (7): char* (temporary null-terminated char* string)
507     // - argValues is the array of argument values. Each value is the unsigned
508     //   long long member of a union of all supported types.
509     // - thresholdBeginId optionally specifies the value returned by a previous
510     //   call to addTraceEvent with a BEGIN phase.
511     // - threshold is used on an END phase event in conjunction with the
512     //   thresholdBeginId of a prior BEGIN event. The threshold is the minimum
513     //   number of microseconds that must have passed since the BEGIN event. If
514     //   less than threshold microseconds has passed, the BEGIN/END pair is
515     //   dropped.
516     // - flags can be 0 or one or more of the following, ORed together:
517     //   - COPY (0x1): treat all strings (name, argNames and argValues of type
518     //     string) as temporary so that they will be copied by addTraceEvent.
519     //   - HAS_ID (0x2): use the id argument to uniquely identify the event for
520     //     matching with other events of the same name.
521     //   - MANGLE_ID (0x4): specify this flag if the id parameter is the value
522     //     of a pointer.
523     virtual TraceEventHandle addTraceEvent(
524         char phase,
525         const unsigned char* categoryEnabledFlag,
526         const char* name,
527         unsigned long long id,
528         int numArgs,
529         const char** argNames,
530         const unsigned char* argTypes,
531         const unsigned long long* argValues,
532         unsigned char flags)
533     {
534         return 0;
535     }
536
537     // Set the duration field of a COMPLETE trace event.
538     virtual void updateTraceEventDuration(const unsigned char* categoryEnabledFlag, const char* name, TraceEventHandle) { }
539
540     // Callbacks for reporting histogram data.
541     // CustomCounts histogram has exponential bucket sizes, so that min=1, max=1000000, bucketCount=50 would do.
542     virtual void histogramCustomCounts(const char* name, int sample, int min, int max, int bucketCount) { }
543     // Enumeration histogram buckets are linear, boundaryValue should be larger than any possible sample value.
544     virtual void histogramEnumeration(const char* name, int sample, int boundaryValue) { }
545     // Unlike enumeration histograms, sparse histograms only allocate memory for non-empty buckets.
546     virtual void histogramSparse(const char* name, int sample) { }
547
548
549     // GPU ----------------------------------------------------------------
550     //
551     // May return null if GPU is not supported.
552     // Returns newly allocated and initialized offscreen WebGraphicsContext3D instance.
553     virtual WebGraphicsContext3D* createOffscreenGraphicsContext3D(const WebGraphicsContext3D::Attributes&) { return 0; }
554
555     // Returns a newly allocated and initialized offscreen context provider. The provider may return a null
556     // graphics context if GPU is not supported.
557     virtual WebGraphicsContext3DProvider* createSharedOffscreenGraphicsContext3DProvider() { return 0; }
558
559     // Returns true if the platform is capable of producing an offscreen context suitable for accelerating 2d canvas.
560     // This will return false if the platform cannot promise that contexts will be preserved across operations like
561     // locking the screen or if the platform cannot provide a context with suitable performance characteristics.
562     //
563     // This value must be checked again after a context loss event as the platform's capabilities may have changed.
564     virtual bool canAccelerate2dCanvas() { return false; }
565
566     virtual bool isThreadedCompositingEnabled() { return false; }
567
568     virtual WebCompositorSupport* compositorSupport() { return 0; }
569
570     virtual WebFlingAnimator* createFlingAnimator() { return 0; }
571
572     // Creates a new fling animation curve instance for device |deviceSource|
573     // with |velocity| and already scrolled |cumulativeScroll| pixels.
574     virtual WebGestureCurve* createFlingAnimationCurve(int deviceSource, const WebFloatPoint& velocity, const WebSize& cumulativeScroll) { return 0; }
575
576
577     // WebRTC ----------------------------------------------------------
578
579     // Creates an WebRTCPeerConnectionHandler for RTCPeerConnection.
580     // May return null if WebRTC functionality is not avaliable or out of resources.
581     virtual WebRTCPeerConnectionHandler* createRTCPeerConnectionHandler(WebRTCPeerConnectionHandlerClient*) { return 0; }
582
583     // May return null if WebRTC functionality is not avaliable or out of resources.
584     virtual WebMediaStreamCenter* createMediaStreamCenter(WebMediaStreamCenterClient*) { return 0; }
585
586
587     // WebWorker ----------------------------------------------------------
588
589     virtual void didStartWorkerRunLoop(const WebWorkerRunLoop&) { }
590     virtual void didStopWorkerRunLoop(const WebWorkerRunLoop&) { }
591
592
593     // WebCrypto ----------------------------------------------------------
594
595     virtual WebCrypto* crypto() { return 0; }
596
597
598     // Device Motion / Orientation ----------------------------------------
599
600     // Sets a Listener to listen for device motion data updates.
601     // If null, the platform stops providing device motion data to the current listener.
602     virtual void setDeviceMotionListener(blink::WebDeviceMotionListener*) { }
603
604     // Sets a Listener to listen for device orientation data updates.
605     // If null, the platform stops proving device orientation data to the current listener.
606     virtual void setDeviceOrientationListener(blink::WebDeviceOrientationListener*) { }
607
608
609     // Quota -----------------------------------------------------------
610
611     // Queries the storage partition's storage usage and quota information.
612     // WebStorageQuotaCallbacks::didQueryStorageUsageAndQuota will be called
613     // with the current usage and quota information for the partition. When
614     // an error occurs WebStorageQuotaCallbacks::didFail is called with an
615     // error code.
616     // The callbacks object is deleted when the callback method is called
617     // and does not need to be (and should not be) deleted manually.
618     virtual void queryStorageUsageAndQuota(
619         const WebURL& storagePartition,
620         WebStorageQuotaType,
621         WebStorageQuotaCallbacks*) { }
622
623
624     // WebDatabase --------------------------------------------------------
625
626     virtual WebDatabaseObserver* databaseObserver() { return 0; }
627
628
629 protected:
630     virtual ~Platform() { }
631 };
632
633 } // namespace blink
634
635 #endif