Another Chromium Windows build fix attempt after r123014.
[WebKit-https.git] / Source / Platform / chromium / public / 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 "WebString.h"
45 #include "WebVector.h"
46
47 namespace WebKit {
48
49 class WebAudioBus;
50 class WebBlobRegistry;
51 class WebClipboard;
52 class WebCookieJar;
53 class WebFileSystem;
54 class WebFileUtilities;
55 class WebMediaStreamCenter;
56 class WebMediaStreamCenterClient;
57 class WebMessagePortChannel;
58 class WebMimeRegistry;
59 class WebPeerConnection00Handler;
60 class WebPeerConnection00HandlerClient;
61 class WebPeerConnectionHandler;
62 class WebPeerConnectionHandlerClient;
63 class WebURL;
64 class WebURLLoader;
65 class WebSandboxSupport;
66 class WebSocketStreamHandle;
67 class WebStorageNamespace;
68 class WebThemeEngine;
69 class WebThread;
70 class WebWorkerRunLoop;
71 struct WebLocalizedString;
72
73 class Platform {
74 public:
75     // HTML5 Database ------------------------------------------------------
76
77 #ifdef WIN32
78     typedef HANDLE FileHandle;
79 #else
80     typedef int FileHandle;
81 #endif
82
83     WEBKIT_EXPORT static void initialize(Platform*);
84     WEBKIT_EXPORT static void shutdown();
85     WEBKIT_EXPORT static Platform* current();
86
87     // May return null.
88     virtual WebCookieJar* cookieJar() { return 0; }
89
90     // Must return non-null.
91     virtual WebClipboard* clipboard() { return 0; }
92
93     // Must return non-null.
94     virtual WebFileUtilities* fileUtilities() { return 0; }
95
96     // Must return non-null.
97     virtual WebMimeRegistry* mimeRegistry() { return 0; }
98
99     // May return null if sandbox support is not necessary
100     virtual WebSandboxSupport* sandboxSupport() { return 0; }
101
102     // May return null on some platforms.
103     virtual WebThemeEngine* themeEngine() { return 0; }
104
105
106     // Audio --------------------------------------------------------------
107
108     virtual double audioHardwareSampleRate() { return 0; }
109     virtual size_t audioHardwareBufferSize() { return 0; }
110     virtual WebAudioDevice* createAudioDevice(size_t bufferSize, unsigned numberOfChannels, double sampleRate, WebAudioDevice::RenderCallback*) { return 0; }
111
112
113     // Blob ----------------------------------------------------------------
114
115     // Must return non-null.
116     virtual WebBlobRegistry* blobRegistry() { return 0; }
117
118
119     // Database ------------------------------------------------------------
120
121     // Opens a database file; dirHandle should be 0 if the caller does not need
122     // a handle to the directory containing this file
123     virtual FileHandle databaseOpenFile(const WebString& vfsFileName, int desiredFlags) { return FileHandle(); }
124
125     // Deletes a database file and returns the error code
126     virtual int databaseDeleteFile(const WebString& vfsFileName, bool syncDir) { return 0; }
127
128     // Returns the attributes of the given database file
129     virtual long databaseGetFileAttributes(const WebString& vfsFileName) { return 0; }
130
131     // Returns the size of the given database file
132     virtual long long databaseGetFileSize(const WebString& vfsFileName) { return 0; }
133
134     // Returns the space available for the given origin
135     virtual long long databaseGetSpaceAvailableForOrigin(const WebKit::WebString& originIdentifier) { return 0; }
136
137
138     // DOM Storage --------------------------------------------------
139
140     // Return a LocalStorage namespace that corresponds to the following path.
141     virtual WebStorageNamespace* createLocalStorageNamespace(const WebString& path, unsigned quota) { return 0; }
142
143
144     // FileSystem ----------------------------------------------------------
145
146     // Must return non-null.
147     virtual WebFileSystem* fileSystem() { return 0; }
148
149
150     // Gamepad -------------------------------------------------------------
151
152     virtual void sampleGamepads(WebGamepads& into) { into.length = 0; }
153
154
155     // History -------------------------------------------------------------
156
157     // Returns the hash for the given canonicalized URL for use in visited
158     // link coloring.
159     virtual unsigned long long visitedLinkHash(
160         const char* canonicalURL, size_t length) { return 0; }
161
162     // Returns whether the given link hash is in the user's history. The
163     // hash must have been generated by calling VisitedLinkHash().
164     virtual bool isLinkVisited(unsigned long long linkHash) { return false; }
165
166
167     // Keygen --------------------------------------------------------------
168
169     // Handle the <keygen> tag for generating client certificates
170     // Returns a base64 encoded signed copy of a public key from a newly
171     // generated key pair and the supplied challenge string. keySizeindex
172     // specifies the strength of the key.
173     virtual WebString signedPublicKeyAndChallengeString(unsigned keySizeIndex,
174                                                         const WebString& challenge,
175                                                         const WebURL& url) { return WebString(); }
176
177
178     // Memory --------------------------------------------------------------
179
180     // Returns the current space allocated for the pagefile, in MB.
181     // That is committed size for Windows and virtual memory size for POSIX
182     virtual size_t memoryUsageMB() { return 0; }
183
184     // Same as above, but always returns actual value, without any caches.
185     virtual size_t actualMemoryUsageMB() { return 0; }
186
187     // If memory usage is below this threshold, do not bother forcing GC.
188     virtual size_t lowMemoryUsageMB() { return 256; }
189
190     // If memory usage is above this threshold, force GC more aggressively.
191     virtual size_t highMemoryUsageMB() { return 1024; }
192
193     // Delta of memory usage growth (vs. last actualMemoryUsageMB()) to force GC when memory usage is high.
194     virtual size_t highUsageDeltaMB() { return 128; }
195
196     // Returns private and shared usage, in bytes. Private bytes is the amount of
197     // memory currently allocated to this process that cannot be shared. Returns
198     // false on platform specific error conditions.
199     virtual bool processMemorySizesInBytes(size_t* privateBytes, size_t* sharedBytes) { return false; }
200
201
202     // Message Ports -------------------------------------------------------
203
204     // Creates a Message Port Channel. This can be called on any thread.
205     // The returned object should only be used on the thread it was created on.
206     virtual WebMessagePortChannel* createMessagePortChannel() { return 0; }
207
208
209     // Network -------------------------------------------------------------
210
211     // Returns a new WebURLLoader instance.
212     virtual WebURLLoader* createURLLoader() { return 0; }
213
214     // A suggestion to prefetch IP information for the given hostname.
215     virtual void prefetchHostName(const WebString&) { }
216
217     // Returns a new WebSocketStreamHandle instance.
218     virtual WebSocketStreamHandle* createSocketStreamHandle() { return 0; }
219
220     // Returns the User-Agent string that should be used for the given URL.
221     virtual WebString userAgent(const WebURL&) { return WebString(); }
222
223     // A suggestion to cache this metadata in association with this URL.
224     virtual void cacheMetadata(const WebURL&, double responseTime, const char* data, size_t dataSize) { }
225
226
227     // Resources -----------------------------------------------------------
228
229     // Returns a localized string resource (with substitution parameters).
230     virtual WebString queryLocalizedString(WebLocalizedString::Name) { return WebString(); }
231     virtual WebString queryLocalizedString(WebLocalizedString::Name, const WebString& parameter) { return WebString(); }
232     virtual WebString queryLocalizedString(WebLocalizedString::Name, const WebString& parameter1, const WebString& parameter2) { return WebString(); }
233
234
235     // Threads -------------------------------------------------------
236
237     // Creates an embedder-defined thread.
238     virtual WebThread* createThread(const char* name) { return 0; }
239
240     // Returns an interface to the current thread. This is owned by the
241     // embedder.
242     virtual WebThread* currentThread() { return 0; }
243
244
245     // Profiling -----------------------------------------------------------
246
247     virtual void decrementStatsCounter(const char* name) { }
248     virtual void incrementStatsCounter(const char* name) { }
249
250
251     // Resources -----------------------------------------------------------
252
253     // Returns a blob of data corresponding to the named resource.
254     virtual WebData loadResource(const char* name) { return WebData(); }
255
256     // Decodes the in-memory audio file data and returns the linear PCM audio data in the destinationBus.
257     // A sample-rate conversion to sampleRate will occur if the file data is at a different sample-rate.
258     // Returns true on success.
259     virtual bool loadAudioResource(WebAudioBus* destinationBus, const char* audioFileData, size_t dataSize, double sampleRate) { return false; }
260
261
262     // Sandbox ------------------------------------------------------------
263
264     // In some browsers, a "sandbox" restricts what operations a program
265     // is allowed to preform. Such operations are typically abstracted out
266     // via this API, but sometimes (like in HTML 5 database opening) WebKit
267     // needs to behave differently based on whether it's restricted or not.
268     // In these cases (and these cases only) you can call this function.
269     // It's OK for this value to be conservitive (i.e. true even if the
270     // sandbox isn't active).
271     virtual bool sandboxEnabled() { return false; }
272
273
274     // Screen -------------------------------------------------------------
275
276     // Supplies the system monitor color profile.
277     virtual void screenColorProfile(WebVector<char>* profile) { }
278
279
280     // Sudden Termination --------------------------------------------------
281
282     // Disable/Enable sudden termination.
283     virtual void suddenTerminationChanged(bool enabled) { }
284
285
286     // System --------------------------------------------------------------
287
288     // Returns a value such as "en-US".
289     virtual WebString defaultLocale() { return WebString(); }
290
291     // Wall clock time in seconds since the epoch.
292     virtual double currentTime() { return 0; }
293
294     // Monotonically increasing time in seconds from an arbitrary fixed point in the past.
295     // This function is expected to return at least millisecond-precision values. For this reason,
296     // it is recommended that the fixed point be no further in the past than the epoch.
297     virtual double monotonicallyIncreasingTime() { return 0; }
298
299     // WebKit clients must implement this funcion if they use cryptographic randomness.
300     virtual void cryptographicallyRandomValues(unsigned char* buffer, size_t length) = 0;
301
302     // Delayed work is driven by a shared timer.
303     typedef void (*SharedTimerFunction)();
304     virtual void setSharedTimerFiredFunction(SharedTimerFunction timerFunction) { }
305     virtual void setSharedTimerFireInterval(double) { }
306     virtual void stopSharedTimer() { }
307
308     // Callable from a background WebKit thread.
309     virtual void callOnMainThread(void (*func)(void*), void* context) { }
310
311
312     // Tracing -------------------------------------------------------------
313
314     // Get a pointer to the enabled state of the given trace category. The
315     // embedder can dynamically change the enabled state as trace event
316     // recording is started and stopped by the application. Only long-lived
317     // literal strings should be given as the category name. The implementation
318     // expects the returned pointer to be held permanently in a local static. If
319     // the unsigned char is non-zero, tracing is enabled. If tracing is enabled,
320     // addTraceEvent is expected to be called by the trace event macros.
321     virtual const unsigned char* getTraceCategoryEnabledFlag(const char* categoryName) { return 0; }
322
323     // Add a trace event to the platform tracing system. Depending on the actual
324     // enabled state, this event may be recorded or dropped. Returns
325     // thresholdBeginId for use in a corresponding end addTraceEvent call.
326     // - phase specifies the type of event:
327     //   - BEGIN ('B'): Marks the beginning of a scoped event.
328     //   - END ('E'): Marks the end of a scoped event.
329     //   - INSTANT ('I'): Standalone, instantaneous event.
330     //   - START ('S'): Marks the beginning of an asynchronous event (the end
331     //     event can occur in a different scope or thread). The id parameter is
332     //     used to match START/FINISH pairs.
333     //   - FINISH ('F'): Marks the end of an asynchronous event.
334     //   - COUNTER ('C'): Used to trace integer quantities that change over
335     //     time. The argument values are expected to be of type int.
336     //   - METADATA ('M'): Reserved for internal use.
337     // - categoryEnabled is the pointer returned by getTraceCategoryEnabledFlag.
338     // - name is the name of the event. Also used to match BEGIN/END and
339     //   START/FINISH pairs.
340     // - id optionally allows events of the same name to be distinguished from
341     //   each other. For example, to trace the consutruction and destruction of
342     //   objects, specify the pointer as the id parameter.
343     // - numArgs specifies the number of elements in argNames, argTypes, and
344     //   argValues.
345     // - argNames is the array of argument names. Use long-lived literal strings
346     //   or specify the COPY flag.
347     // - argTypes is the array of argument types:
348     //   - BOOL (1): bool
349     //   - UINT (2): unsigned long long
350     //   - INT (3): long long
351     //   - DOUBLE (4): double
352     //   - POINTER (5): void*
353     //   - STRING (6): char* (long-lived null-terminated char* string)
354     //   - COPY_STRING (7): char* (temporary null-terminated char* string)
355     // - argValues is the array of argument values. Each value is the unsigned
356     //   long long member of a union of all supported types.
357     // - thresholdBeginId optionally specifies the value returned by a previous
358     //   call to addTraceEvent with a BEGIN phase.
359     // - threshold is used on an END phase event in conjunction with the
360     //   thresholdBeginId of a prior BEGIN event. The threshold is the minimum
361     //   number of microseconds that must have passed since the BEGIN event. If
362     //   less than threshold microseconds has passed, the BEGIN/END pair is
363     //   dropped.
364     // - flags can be 0 or one or more of the following, ORed together:
365     //   - COPY (0x1): treat all strings (name, argNames and argValues of type
366     //     string) as temporary so that they will be copied by addTraceEvent.
367     //   - HAS_ID (0x2): use the id argument to uniquely identify the event for
368     //     matching with other events of the same name.
369     //   - MANGLE_ID (0x4): specify this flag if the id parameter is the value
370     //     of a pointer.
371     virtual int addTraceEvent(
372         char phase,
373         const unsigned char* categoryEnabledFlag,
374         const char* name,
375         unsigned long long id,
376         int numArgs,
377         const char** argNames,
378         const unsigned char* argTypes,
379         const unsigned long long* argValues,
380         int thresholdBeginId,
381         long long threshold,
382         unsigned char flags) { return -1; }
383
384     // Callbacks for reporting histogram data.
385     // CustomCounts histogram has exponential bucket sizes, so that min=1, max=1000000, bucketCount=50 would do.
386     virtual void histogramCustomCounts(const char* name, int sample, int min, int max, int bucketCount) { }
387     // Enumeration histogram buckets are linear, boundaryValue should be larger than any possible sample value.
388     virtual void histogramEnumeration(const char* name, int sample, int boundaryValue) { }
389
390
391     // GPU ----------------------------------------------------------------
392     //
393     // May return null if GPU is not supported.
394     // Returns newly allocated and initialized offscreen WebGraphicsContext3D instance.
395     virtual WebGraphicsContext3D* createOffscreenGraphicsContext3D(const WebGraphicsContext3D::Attributes&) { return 0; }
396
397     // Returns true if the platform is capable of producing an offscreen context suitable for accelerating 2d canvas.
398     // This will return false if the platform cannot promise that contexts will be preserved across operations like
399     // locking the screen or if the platform cannot provide a context with suitable performance characteristics.
400     //
401     // This value must be checked again after a context loss event as the platform's capabilities may have changed.
402     virtual bool canAccelerate2dCanvas() { return false; }
403
404
405     // WebRTC ----------------------------------------------------------
406
407     // DEPRECATED
408     // Creates an WebPeerConnectionHandler for DeprecatedPeerConnection.
409     // May return null if WebRTC functionality is not avaliable or out of resources.
410     virtual WebPeerConnectionHandler* createPeerConnectionHandler(WebPeerConnectionHandlerClient*) { return 0; }
411
412     // Creates an WebPeerConnection00Handler for PeerConnection00.
413     // This is an highly experimental feature not yet in the WebRTC standard.
414     // May return null if WebRTC functionality is not avaliable or out of resources.
415     virtual WebPeerConnection00Handler* createPeerConnection00Handler(WebPeerConnection00HandlerClient*) { return 0; }
416
417     // May return null if WebRTC functionality is not avaliable or out of resources.
418     virtual WebMediaStreamCenter* createMediaStreamCenter(WebMediaStreamCenterClient*) { return 0; }
419
420
421     // WebWorker ----------------------------------------------------------
422
423     virtual void didStartWorkerRunLoop(const WebWorkerRunLoop&) { }
424     virtual void didStopWorkerRunLoop(const WebWorkerRunLoop&) { }
425
426 protected:
427     ~Platform() { }
428 };
429
430 } // namespace WebKit
431
432 #endif