#ifndef PlatformBridge_h
#define PlatformBridge_h
#if ENABLE(WEB_AUDIO)
#include "AudioBus.h"
#endif
#include "FileSystem.h"
#include "ImageSource.h"
#include "LinkHash.h"
#include "PassRefPtr.h"
#include "PasteboardPrivate.h"
#include "PluginData.h"
#include <wtf/Forward.h>
#include <wtf/HashSet.h>
#include <wtf/Vector.h>
typedef struct NPObject NPObject;
typedef struct _NPP NPP_t;
typedef NPP_t* NPP;
#if OS(DARWIN)
typedef struct CGFont* CGFontRef;
typedef uintptr_t ATSFontContainerRef;
#ifdef __OBJC__
@class NSFont;
#else
class NSFont;
#endif
#endif // OS(DARWIN)
#if OS(WINDOWS)
typedef struct HFONT__* HFONT;
#endif
namespace WebCore {
class ClipboardData;
class Color;
class Cursor;
class Document;
class Frame;
class GeolocationServiceBridge;
class GeolocationServiceChromium;
class GraphicsContext;
class Image;
class IDBFactoryBackendInterface;
class IDBKey;
class IntRect;
class KURL;
class SerializedScriptValue;
class Widget;
struct Cookie;
struct FontRenderStyle;
class PlatformBridge {
public:
static void cacheMetadata(const KURL&, double responseTime, const Vector<char>&);
static bool clipboardIsFormatAvailable(PasteboardPrivate::ClipboardFormat, PasteboardPrivate::ClipboardBuffer);
static String clipboardReadPlainText(PasteboardPrivate::ClipboardBuffer);
static void clipboardReadHTML(PasteboardPrivate::ClipboardBuffer, String*, KURL*);
static PassRefPtr<SharedBuffer> clipboardReadImage(PasteboardPrivate::ClipboardBuffer);
static void clipboardWriteSelection(const String&, const KURL&, const String&, bool);
static void clipboardWritePlainText(const String&);
static void clipboardWriteURL(const KURL&, const String&);
static void clipboardWriteImage(NativeImagePtr, const KURL&, const String&);
static void clipboardWriteData(const String& type, const String& data, const String& metadata);
static HashSet<String> clipboardReadAvailableTypes(PasteboardPrivate::ClipboardBuffer, bool* containsFilenames);
static bool clipboardReadData(PasteboardPrivate::ClipboardBuffer, const String& type, String& data, String& metadata);
static Vector<String> clipboardReadFilenames(PasteboardPrivate::ClipboardBuffer);
static void setCookies(const Document*, const KURL&, const String& value);
static String cookies(const Document*, const KURL&);
static String cookieRequestHeaderFieldValue(const Document*, const KURL&);
static bool rawCookies(const Document*, const KURL&, Vector<Cookie>&);
static void deleteCookie(const Document*, const KURL&, const String& cookieName);
static bool cookiesEnabled(const Document*);
static void prefetchDNS(const String& hostname);
static void revealFolderInOS(const String&);
static bool fileExists(const String&);
static bool deleteFile(const String&);
static bool deleteEmptyDirectory(const String&);
static bool getFileSize(const String&, long long& result);
static bool getFileModificationTime(const String&, time_t& result);
static String directoryName(const String& path);
static String pathByAppendingComponent(const String& path, const String& component);
static bool makeAllDirectories(const String& path);
static String getAbsolutePath(const String&);
static bool isDirectory(const String&);
static KURL filePathToURL(const String&);
static PlatformFileHandle openFile(const String& path, FileOpenMode);
static void closeFile(PlatformFileHandle&);
static long long seekFile(PlatformFileHandle, long long offset, FileSeekOrigin);
static bool truncateFile(PlatformFileHandle, long long offset);
static int readFromFile(PlatformFileHandle, char* data, int length);
static int writeToFile(PlatformFileHandle, const char* data, int length);
#if OS(WINDOWS)
static bool ensureFontLoaded(HFONT);
#endif
#if OS(DARWIN)
static bool loadFont(NSFont* srcFont, ATSFontContainerRef* out);
#elif OS(UNIX)
static void getRenderStyleForStrike(const char* family, int sizeAndStyle, FontRenderStyle* result);
static String getFontFamilyForCharacters(const UChar*, size_t numCharacters, const char* preferredLocale);
#endif
static void notifyFormStateChanged(const Document*);
static PlatformFileHandle databaseOpenFile(const String& vfsFleName, int desiredFlags);
static int databaseDeleteFile(const String& vfsFileName, bool syncDir = false);
static long databaseGetFileAttributes(const String& vfsFileName);
static long long databaseGetFileSize(const String& vfsFileName);
static PassRefPtr<IDBFactoryBackendInterface> idbFactory();
static void createIDBKeysFromSerializedValuesAndKeyPath(const Vector<RefPtr<SerializedScriptValue> >& values, const String& keyPath, Vector<RefPtr<IDBKey> >& keys);
static PassRefPtr<SerializedScriptValue> injectIDBKeyIntoSerializedValue(PassRefPtr<IDBKey>, PassRefPtr<SerializedScriptValue>, const String& keyPath);
static void notifyJSOutOfMemory(Frame*);
static bool allowScriptDespiteSettings(const KURL& documentURL);
static String signedPublicKeyAndChallengeString(unsigned keySizeIndex, const String& challenge, const KURL&);
static String computedDefaultLanguage();
static bool layoutTestMode();
static int memoryUsageMB();
static int actualMemoryUsageMB();
static bool isSupportedImageMIMEType(const String& mimeType);
static bool isSupportedJavaScriptMIMEType(const String& mimeType);
static bool isSupportedNonImageMIMEType(const String& mimeType);
static String mimeTypeForExtension(const String& fileExtension);
static String mimeTypeFromFile(const String& filePath);
static String preferredExtensionForMIMEType(const String& mimeType);
static bool plugins(bool refresh, Vector<PluginInfo>*);
static NPObject* pluginScriptableObject(Widget*);
static bool popupsAllowed(NPP);
static PassRefPtr<Image> loadPlatformImageResource(const char* name);
#if ENABLE(WEB_AUDIO)
static PassOwnPtr<AudioBus> loadPlatformAudioResource(const char* name, double sampleRate);
static PassOwnPtr<AudioBus> decodeAudioFileData(const char* data, size_t, double sampleRate);
#endif
static bool sandboxEnabled();
static int screenDepth(Widget*);
static int screenDepthPerComponent(Widget*);
static bool screenIsMonochrome(Widget*);
static IntRect screenRect(Widget*);
static IntRect screenAvailableRect(Widget*);
static void setSharedTimerFiredFunction(void (*func)());
static void setSharedTimerFireTime(double);
static void stopSharedTimer();
static void decrementStatsCounter(const char* name);
static void incrementStatsCounter(const char* name);
static void histogramCustomCounts(const char* name, int sample, int min, int max, int bucketCount);
static void histogramEnumeration(const char* name, int sample, int boundaryValue);
static void suddenTerminationChanged(bool enabled);
static double currentTime();
#if OS(WINDOWS)
static void paintButton(
GraphicsContext*, int part, int state, int classicState, const IntRect&);
static void paintMenuList(
GraphicsContext*, int part, int state, int classicState, const IntRect&);
static void paintScrollbarArrow(
GraphicsContext*, int state, int classicState, const IntRect&);
static void paintScrollbarThumb(
GraphicsContext*, int part, int state, int classicState, const IntRect&);
static void paintScrollbarTrack(
GraphicsContext*, int part, int state, int classicState, const IntRect&, const IntRect& alignRect);
static void paintSpinButton(
GraphicsContext*, int part, int state, int classicState, const IntRect&);
static void paintTextField(
GraphicsContext*, int part, int state, int classicState, const IntRect&, const Color&, bool fillContentArea, bool drawEdges);
static void paintTrackbar(
GraphicsContext*, int part, int state, int classicState, const IntRect&);
static void paintProgressBar(
GraphicsContext*, const IntRect& barRect, const IntRect& valueRect, bool determinate, double animatedSeconds);
#elif OS(DARWIN)
enum ThemePaintState {
StateDisabled,
StateInactive,
StateActive,
StatePressed,
};
enum ThemePaintSize {
SizeRegular,
SizeSmall,
};
enum ThemePaintScrollbarOrientation {
ScrollbarOrientationHorizontal,
ScrollbarOrientationVertical,
};
enum ThemePaintScrollbarParent {
ScrollbarParentScrollView,
ScrollbarParentRenderLayer,
};
struct ThemePaintScrollbarInfo {
ThemePaintScrollbarOrientation orientation;
ThemePaintScrollbarParent parent;
int maxValue;
int currentValue;
int visibleSize;
int totalSize;
};
static void paintScrollbarThumb(GraphicsContext*, ThemePaintState, ThemePaintSize, const IntRect&, const ThemePaintScrollbarInfo&);
#elif OS(UNIX)
enum ThemePart {
PartScrollbarDownArrow,
PartScrollbarLeftArrow,
PartScrollbarRightArrow,
PartScrollbarUpArrow,
PartScrollbarHorizontalThumb,
PartScrollbarVerticalThumb,
PartScrollbarHorizontalTrack,
PartScrollbarVerticalTrack,
PartCheckbox,
PartRadio,
PartButton,
PartTextField,
PartMenuList,
PartSliderTrack,
PartSliderThumb,
PartInnerSpinButton,
PartProgressBar
};
enum ThemePaintState {
StateDisabled,
StateHover,
StateNormal,
StatePressed
};
struct ScrollbarTrackExtraParams {
int trackX;
int trackY;
int trackWidth;
int trackHeight;
};
struct ButtonExtraParams {
bool checked;
bool indeterminate; bool isDefault; bool hasBorder;
unsigned backgroundColor;
};
struct TextFieldExtraParams {
bool isTextArea;
bool isListbox;
unsigned backgroundColor;
};
struct MenuListExtraParams {
bool hasBorder;
bool hasBorderRadius;
int arrowX;
int arrowY;
unsigned backgroundColor;
};
struct SliderExtraParams {
bool vertical;
bool inDrag;
};
struct InnerSpinButtonExtraParams {
bool spinUp;
bool readOnly;
};
struct ProgressBarExtraParams {
bool determinate;
int valueRectX;
int valueRectY;
int valueRectWidth;
int valueRectHeight;
};
union ThemePaintExtraParams {
ScrollbarTrackExtraParams scrollbarTrack;
ButtonExtraParams button;
TextFieldExtraParams textField;
MenuListExtraParams menuList;
SliderExtraParams slider;
InnerSpinButtonExtraParams innerSpin;
ProgressBarExtraParams progressBar;
};
static IntSize getThemePartSize(ThemePart);
static void paintThemePart(GraphicsContext*, ThemePart, ThemePaintState, const IntRect&, const ThemePaintExtraParams*);
#endif
static void traceEventBegin(const char* name, void*, const char* extra);
static void traceEventEnd(const char* name, void*, const char* extra);
static LinkHash visitedLinkHash(const UChar* url, unsigned length);
static LinkHash visitedLinkHash(const KURL& base, const AtomicString& attributeURL);
static bool isLinkVisited(LinkHash);
};
}
#endif