2011-01-21 Eric Seidel <eric@webkit.org>
[WebKit-https.git] / Source / WebCore / platform / chromium / ChromiumBridge.h
1 /*
2  * Copyright (c) 2010, 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 ChromiumBridge_h
32 #define ChromiumBridge_h
33
34 #if ENABLE(WEB_AUDIO)
35 #include "AudioBus.h"
36 #endif
37
38 #include "FileSystem.h"
39 #include "ImageSource.h"
40 #include "LinkHash.h"
41 #include "PassRefPtr.h"
42 #include "PasteboardPrivate.h"
43 #include "PluginData.h"
44
45 #include <wtf/Forward.h>
46 #include <wtf/HashSet.h>
47 #include <wtf/Vector.h>
48
49 typedef struct NPObject NPObject;
50 typedef struct _NPP NPP_t;
51 typedef NPP_t* NPP;
52
53 #if OS(DARWIN)
54 typedef struct CGFont* CGFontRef;
55 typedef uintptr_t ATSFontContainerRef;
56 #ifdef __OBJC__
57 @class NSFont;
58 #else
59 class NSFont;
60 #endif
61 #endif // OS(DARWIN)
62
63 #if OS(WINDOWS)
64 typedef struct HFONT__* HFONT;
65 #endif
66
67 namespace WebCore {
68
69     class ClipboardData;
70     class Color;
71     class Cursor;
72     class Document;
73     class Frame;
74     class GeolocationServiceBridge;
75     class GeolocationServiceChromium;
76     class GraphicsContext;
77     class Image;
78     class IDBFactoryBackendInterface;
79     class IDBKey;
80     class IntRect;
81     class KURL;
82     class SerializedScriptValue;
83     class Widget;
84
85     struct Cookie;
86     struct FontRenderStyle;
87
88     // An interface to the embedding layer, which has the ability to answer
89     // questions about the system and so on...
90
91     class ChromiumBridge {
92     public:
93         // Cache --------------------------------------------------------------
94         static void cacheMetadata(const KURL& url, double responseTime, const Vector<char>&);
95
96         // Clipboard ----------------------------------------------------------
97         static bool clipboardIsFormatAvailable(PasteboardPrivate::ClipboardFormat, PasteboardPrivate::ClipboardBuffer);
98
99         static String clipboardReadPlainText(PasteboardPrivate::ClipboardBuffer);
100         static void clipboardReadHTML(PasteboardPrivate::ClipboardBuffer, String*, KURL*);
101
102         // Only the clipboardRead functions take a buffer argument because
103         // Chromium currently uses a different technique to write to alternate
104         // clipboard buffers.
105         static void clipboardWriteSelection(const String&, const KURL&, const String&, bool);
106         static void clipboardWritePlainText(const String&);
107         static void clipboardWriteURL(const KURL&, const String&);
108         static void clipboardWriteImage(NativeImagePtr, const KURL&, const String&);
109         static void clipboardWriteData(const String& type, const String& data, const String& metadata);
110
111         // Interface for handling copy and paste, drag and drop, and selection copy.
112         static HashSet<String> clipboardReadAvailableTypes(PasteboardPrivate::ClipboardBuffer, bool* containsFilenames);
113         static bool clipboardReadData(PasteboardPrivate::ClipboardBuffer, const String& type, String& data, String& metadata);
114         static Vector<String> clipboardReadFilenames(PasteboardPrivate::ClipboardBuffer);
115
116         // Cookies ------------------------------------------------------------
117         static void setCookies(const Document*, const KURL&, const String& value);
118         static String cookies(const Document*, const KURL&);
119         static String cookieRequestHeaderFieldValue(const Document*, const KURL&);
120         static bool rawCookies(const Document*, const KURL& url, Vector<Cookie>&);
121         static void deleteCookie(const Document*, const KURL& url, const String& cookieName);
122         static bool cookiesEnabled(const Document*);
123
124         // DNS ----------------------------------------------------------------
125         static void prefetchDNS(const String& hostname);
126
127         // File ---------------------------------------------------------------
128         static void revealFolderInOS(const String&);
129         static bool fileExists(const String&);
130         static bool deleteFile(const String&);
131         static bool deleteEmptyDirectory(const String&);
132         static bool getFileSize(const String&, long long& result);
133         static bool getFileModificationTime(const String&, time_t& result);
134         static String directoryName(const String& path);
135         static String pathByAppendingComponent(const String& path, const String& component);
136         static bool makeAllDirectories(const String& path);
137         static String getAbsolutePath(const String&);
138         static bool isDirectory(const String&);
139         static KURL filePathToURL(const String&);
140         static PlatformFileHandle openFile(const String& path, FileOpenMode);
141         static void closeFile(PlatformFileHandle&);
142         static long long seekFile(PlatformFileHandle, long long offset, FileSeekOrigin);
143         static bool truncateFile(PlatformFileHandle, long long offset);
144         static int readFromFile(PlatformFileHandle, char* data, int length);
145         static int writeToFile(PlatformFileHandle, const char* data, int length);
146
147         // Font ---------------------------------------------------------------
148 #if OS(WINDOWS)
149         static bool ensureFontLoaded(HFONT font);
150 #endif
151 #if OS(LINUX) || OS(FREEBSD)
152         static void getRenderStyleForStrike(const char* family, int sizeAndStyle, FontRenderStyle* result);
153         static String getFontFamilyForCharacters(const UChar*, size_t numCharacters);
154 #endif
155 #if OS(DARWIN)
156         static bool loadFont(NSFont* srcFont, ATSFontContainerRef* out);
157 #endif
158
159         // Forms --------------------------------------------------------------
160         static void notifyFormStateChanged(const Document*);
161
162         // Databases ----------------------------------------------------------
163         // Returns a handle to the DB file and ooptionally a handle to its containing directory
164         static PlatformFileHandle databaseOpenFile(const String& vfsFleName, int desiredFlags);
165         // Returns a SQLite code (SQLITE_OK = 0, on success)
166         static int databaseDeleteFile(const String& vfsFileName, bool syncDir = false);
167         // Returns the attributes of the DB file
168         static long databaseGetFileAttributes(const String& vfsFileName);
169         // Returns the size of the DB file
170         static long long databaseGetFileSize(const String& vfsFileName);
171
172         // IndexedDB ----------------------------------------------------------
173         static PassRefPtr<IDBFactoryBackendInterface> idbFactory();
174         static void idbShutdown();
175         // Extracts keyPath from values and returns the corresponding keys.
176         static void createIDBKeysFromSerializedValuesAndKeyPath(const Vector<RefPtr<SerializedScriptValue> >& values, const String& keyPath, Vector<RefPtr<IDBKey> >& keys);
177
178         // JavaScript ---------------------------------------------------------
179         static void notifyJSOutOfMemory(Frame*);
180         static bool allowScriptDespiteSettings(const KURL& documentURL);
181
182         // Keygen -------------------------------------------------------------
183         static String signedPublicKeyAndChallengeString(unsigned keySizeIndex, const String& challenge, const KURL& url);
184
185         // Language -----------------------------------------------------------
186         static String computedDefaultLanguage();
187
188         // LayoutTestMode -----------------------------------------------------
189         static bool layoutTestMode();
190
191         // Memory -------------------------------------------------------------
192         // Returns the current space allocated for the pagefile, in MB.
193         // That is committed size for Windows and virtual memory size for POSIX
194         static int memoryUsageMB();
195
196         // Same as above, but always returns actual value, without any caches.
197         static int actualMemoryUsageMB();
198
199         // MimeType -----------------------------------------------------------
200         static bool isSupportedImageMIMEType(const String& mimeType);
201         static bool isSupportedJavaScriptMIMEType(const String& mimeType);
202         static bool isSupportedNonImageMIMEType(const String& mimeType);
203         static String mimeTypeForExtension(const String& fileExtension);
204         static String mimeTypeFromFile(const String& filePath);
205         static String preferredExtensionForMIMEType(const String& mimeType);
206
207         // Plugin -------------------------------------------------------------
208         static bool plugins(bool refresh, Vector<PluginInfo>*);
209         static NPObject* pluginScriptableObject(Widget*);
210         static bool popupsAllowed(NPP);
211
212         // Resources ----------------------------------------------------------
213         static PassRefPtr<Image> loadPlatformImageResource(const char* name);
214
215 #if ENABLE(WEB_AUDIO)
216         static PassOwnPtr<AudioBus> loadPlatformAudioResource(const char* name, double sampleRate);
217         static PassOwnPtr<AudioBus> decodeAudioFileData(const char* data, size_t size, double sampleRate);
218 #endif
219
220         // Sandbox ------------------------------------------------------------
221         static bool sandboxEnabled();
222
223         // Screen -------------------------------------------------------------
224         static int screenDepth(Widget*);
225         static int screenDepthPerComponent(Widget*);
226         static bool screenIsMonochrome(Widget*);
227         static IntRect screenRect(Widget*);
228         static IntRect screenAvailableRect(Widget*);
229
230         // SharedTimers -------------------------------------------------------
231         static void setSharedTimerFiredFunction(void (*func)());
232         static void setSharedTimerFireTime(double fireTime);
233         static void stopSharedTimer();
234
235         // StatsCounters ------------------------------------------------------
236         static void decrementStatsCounter(const char* name);
237         static void incrementStatsCounter(const char* name);
238         static void histogramCustomCounts(const char* name, int sample, int min, int max, int bucketCount);
239         static void histogramEnumeration(const char* name, int sample, int boundaryValue);
240
241         // Sudden Termination
242         static void suddenTerminationChanged(bool enabled);
243
244         // SystemTime ---------------------------------------------------------
245         static double currentTime();
246
247         // Theming ------------------------------------------------------------
248 #if OS(WINDOWS)
249         static void paintButton(
250             GraphicsContext*, int part, int state, int classicState, const IntRect&);
251         static void paintMenuList(
252             GraphicsContext*, int part, int state, int classicState, const IntRect&);
253         static void paintScrollbarArrow(
254             GraphicsContext*, int state, int classicState, const IntRect&);
255         static void paintScrollbarThumb(
256             GraphicsContext*, int part, int state, int classicState, const IntRect&);
257         static void paintScrollbarTrack(
258             GraphicsContext*, int part, int state, int classicState, const IntRect&, const IntRect& alignRect);
259         static void paintSpinButton(
260             GraphicsContext*, int part, int state, int classicState, const IntRect&);
261         static void paintTextField(
262             GraphicsContext*, int part, int state, int classicState, const IntRect&, const Color&, bool fillContentArea, bool drawEdges);
263         static void paintTrackbar(
264             GraphicsContext*, int part, int state, int classicState, const IntRect&);
265         static void paintProgressBar(
266             GraphicsContext*, const IntRect& barRect, const IntRect& valueRect, bool determinate, double animatedSeconds);
267 #elif OS(LINUX)
268         // The UI part which is being accessed.
269         enum ThemePart {
270             PartScrollbarDownArrow,
271             PartScrollbarLeftArrow,
272             PartScrollbarRightArrow,
273             PartScrollbarUpArrow,
274             PartScrollbarHorizontalThumb,
275             PartScrollbarVerticalThumb,
276             PartScrollbarHorizontalTrack,
277             PartScrollbarVerticalTrack,
278         };
279
280         // The current state of the associated Part.
281         enum ThemePaintState {
282             StateDisabled,
283             StateHover,
284             StateNormal,
285             StatePressed,
286         };
287
288         struct ScrollbarTrackExtraParams {
289             // The bounds of the entire track, as opposed to the part being painted.
290             int trackX;
291             int trackY;
292             int trackWidth;
293             int trackHeight;
294         };
295
296         union ThemePaintExtraParams {
297             ScrollbarTrackExtraParams scrollbarTrack;
298         };
299
300         // Gets the size of the given theme part. For variable sized items
301         // like vertical scrollbar thumbs, the width will be the required width of
302         // the track while the height will be the minimum height.
303         static IntSize getThemePartSize(ThemePart);
304         // Paint the given the given theme part.
305         static void paintThemePart(GraphicsContext*, ThemePart, ThemePaintState, const IntRect&, const ThemePaintExtraParams*);
306 #elif OS(DARWIN)
307         enum ThemePaintState {
308             StateDisabled,
309             StateInactive,
310             StateActive,
311             StatePressed,
312         };
313
314         enum ThemePaintSize {
315             SizeRegular,
316             SizeSmall,
317         };
318
319         enum ThemePaintScrollbarOrientation {
320             ScrollbarOrientationHorizontal,
321             ScrollbarOrientationVertical,
322         };
323
324         enum ThemePaintScrollbarParent {
325             ScrollbarParentScrollView,
326             ScrollbarParentRenderLayer,
327         };
328
329         struct ThemePaintScrollbarInfo {
330             ThemePaintScrollbarOrientation orientation;
331             ThemePaintScrollbarParent parent;
332             int maxValue;
333             int currentValue;
334             int visibleSize;
335             int totalSize;
336         };
337
338         static void paintScrollbarThumb(GraphicsContext*, ThemePaintState, ThemePaintSize, const IntRect&, const ThemePaintScrollbarInfo&);
339 #endif
340
341         // Trace Event --------------------------------------------------------
342         static void traceEventBegin(const char* name, void* id, const char* extra);
343         static void traceEventEnd(const char* name, void* id, const char* extra);
344
345         // Visited links ------------------------------------------------------
346         static LinkHash visitedLinkHash(const UChar* url, unsigned length);
347         static LinkHash visitedLinkHash(const KURL& base, const AtomicString& attributeURL);
348         static bool isLinkVisited(LinkHash);
349     };
350
351 } // namespace WebCore
352
353 #endif