#ifndef PlatformSupport_h
#define PlatformSupport_h
#if ENABLE(WEB_AUDIO)
#include "AudioBus.h"
#endif
#include "FileSystem.h"
#include "ImageSource.h"
#include "LinkHash.h"
#include "PasteboardPrivate.h"
#include "PluginData.h"
#include <wtf/Forward.h>
#include <wtf/HashSet.h>
#include <wtf/PassRefPtr.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 AsyncFileSystem;
class Clipboard;
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;
class WorkerRunLoop;
struct Cookie;
struct FontRenderStyle;
class PlatformSupport {
public:
static uint64_t clipboardSequenceNumber(PasteboardPrivate::ClipboardBuffer);
static bool clipboardIsFormatAvailable(PasteboardPrivate::ClipboardFormat, PasteboardPrivate::ClipboardBuffer);
static HashSet<String> clipboardReadAvailableTypes(PasteboardPrivate::ClipboardBuffer, bool* containsFilenames);
static String clipboardReadPlainText(PasteboardPrivate::ClipboardBuffer);
static void clipboardReadHTML(PasteboardPrivate::ClipboardBuffer, String*, KURL*, unsigned* fragmentStart, unsigned* fragmentEnd);
static PassRefPtr<SharedBuffer> clipboardReadImage(PasteboardPrivate::ClipboardBuffer);
static String clipboardReadCustomData(PasteboardPrivate::ClipboardBuffer, const String& type);
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 clipboardWriteDataObject(Clipboard*);
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 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 ENABLE(FILE_SYSTEM)
static String createIsolatedFileSystemName(const String& storageIdentifier, const String& filesystemId);
static PassOwnPtr<AsyncFileSystem> createIsolatedFileSystem(const String& originString, const String& filesystemId);
#endif
#if OS(WINDOWS)
static bool ensureFontLoaded(HFONT);
#endif
#if OS(DARWIN)
static bool loadFont(NSFont* srcFont, CGFontRef*, uint32_t* fontID);
#elif OS(UNIX)
static void getRenderStyleForStrike(const char* family, int sizeAndStyle, FontRenderStyle* result);
struct FontFamily {
String name;
bool isBold;
bool isItalic;
};
static void getFontFamilyForCharacters(const UChar*, size_t numCharacters, const char* preferredLocale, FontFamily*);
#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 long long databaseGetSpaceAvailableForOrigin(const String& originIdentifier);
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 bool layoutTestMode();
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> decodeAudioFileData(const char* data, size_t, double sampleRate);
#endif
static int screenHorizontalDPI(Widget*);
static int screenVerticalDPI(Widget*);
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 setSharedTimerFireInterval(double);
#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 const unsigned char* getTraceCategoryEnabledFlag(const char* categoryName);
static int addTraceEvent(char phase,
const unsigned char* categoryEnabledFlag,
const char* name,
unsigned long long id,
int numArgs,
const char** argNames,
const unsigned char* argTypes,
const unsigned long long* argValues,
int thresholdBeginId,
long long threshold,
unsigned char flags);
static LinkHash visitedLinkHash(const UChar* url, unsigned length);
static LinkHash visitedLinkHash(const KURL& base, const AtomicString& attributeURL);
static bool isLinkVisited(LinkHash);
static void didStartWorkerRunLoop(WorkerRunLoop*);
static void didStopWorkerRunLoop(WorkerRunLoop*);
static bool canAccelerate2dCanvas();
};
}
#endif