/*
 * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
 */

cpp_quote("/*")
cpp_quote(" * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.")
cpp_quote(" *")
cpp_quote(" * Redistribution and use in source and binary forms, with or without")
cpp_quote(" * modification, are permitted provided that the following conditions")
cpp_quote(" * are met:")
cpp_quote(" * 1. Redistributions of source code must retain the above copyright")
cpp_quote(" *    notice, this list of conditions and the following disclaimer.")
cpp_quote(" * 2. Redistributions in binary form must reproduce the above copyright")
cpp_quote(" *    notice, this list of conditions and the following disclaimer in the")
cpp_quote(" *    documentation and/or other materials provided with the distribution.")
cpp_quote(" *")
cpp_quote(" * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY")
cpp_quote(" * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE")
cpp_quote(" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR")
cpp_quote(" * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR")
cpp_quote(" * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,")
cpp_quote(" * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,")
cpp_quote(" * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR")
cpp_quote(" * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY")
cpp_quote(" * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT")
cpp_quote(" * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE")
cpp_quote(" * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ")
cpp_quote(" */")

cpp_quote("#define WebPreferencesChangedNotification TEXT(\"WebPreferencesChangedNotification\")")

import "oaidl.idl";
import "ocidl.idl";

typedef enum FontSmoothingType {
    FontSmoothingTypeStandard=0,
    FontSmoothingTypeLight,
    FontSmoothingTypeMedium,
    FontSmoothingTypeStrong
} FontSmoothingType;

typedef enum WebKitEditableLinkBehavior {
    WebKitEditableLinkDefaultBehavior = 0,
    WebKitEditableLinkAlwaysLive,
    WebKitEditableLinkOnlyLiveWithShiftKey,
    WebKitEditableLinkLiveWhenNotFocused,
    WebKitEditableLinkNeverLive
} WebKitEditableLinkBehavior;

typedef enum WebKitCookieStorageAcceptPolicy {
    WebKitCookieStorageAcceptPolicyAlways = 0,
    WebKitCookieStorageAcceptPolicyNever,
    WebKitCookieStorageAcceptPolicyOnlyFromMainDocumentDomain
} WebKitCookieStorageAcceptPolicy;

typedef enum WebCacheModel {
    WebCacheModelDocumentViewer = 0,
    WebCacheModelDocumentBrowser = 1,
    WebCacheModelPrimaryWebBrowser = 2
} WebCacheModel;

[
    object,
    oleautomation,
    hidden,
    uuid(0930D594-A5A3-46e1-858E-AB17A13CD28E),
    pointer_default(unique)
]
interface IWebPreferences : IUnknown
{
    HRESULT standardPreferences([out, retval] IWebPreferences** standardPreferences);

    HRESULT initWithIdentifier([in] BSTR anIdentifier, [out, retval] IWebPreferences** preferences);
    HRESULT identifier([out, retval] BSTR* ident);

    HRESULT standardFontFamily([out, retval] BSTR* family);
    HRESULT setStandardFontFamily([in] BSTR family);

    HRESULT fixedFontFamily([out, retval] BSTR* family);
    HRESULT setFixedFontFamily([in] BSTR family);

    HRESULT serifFontFamily([out, retval] BSTR* fontFamily);
    HRESULT setSerifFontFamily([in] BSTR family);

    HRESULT sansSerifFontFamily([out, retval] BSTR* family);
    HRESULT setSansSerifFontFamily([in] BSTR family);

    HRESULT cursiveFontFamily([out, retval] BSTR* family);
    HRESULT setCursiveFontFamily([in] BSTR family);

    HRESULT fantasyFontFamily([out, retval] BSTR* family);
    HRESULT setFantasyFontFamily([in] BSTR family);

    HRESULT defaultFontSize([out, retval] int* fontSize);
    HRESULT setDefaultFontSize([in] int fontSize);

    HRESULT defaultFixedFontSize([out, retval] int* fontSize);
    HRESULT setDefaultFixedFontSize([in] int fontSize);

    HRESULT minimumFontSize([out, retval] int* fontSize);
    HRESULT setMinimumFontSize([in] int fontSize);

    HRESULT minimumLogicalFontSize([out, retval] int* fontSize);
    HRESULT setMinimumLogicalFontSize([in] int fontSize);

    HRESULT defaultTextEncodingName([out, retval] BSTR* name);
    HRESULT setDefaultTextEncodingName([in] BSTR name);

    HRESULT userStyleSheetEnabled([out, retval] BOOL* enabled);
    HRESULT setUserStyleSheetEnabled([in] BOOL enabled);

    HRESULT userStyleSheetLocation([out, retval] BSTR* location);
    HRESULT setUserStyleSheetLocation([in] BSTR location);

    HRESULT isJavaEnabled([out, retval] BOOL* enabled);
    HRESULT setJavaEnabled([in] BOOL enabled);

    HRESULT isJavaScriptEnabled([out, retval] BOOL* enabled);
    HRESULT setJavaScriptEnabled([in] BOOL enabled);

    HRESULT javaScriptCanOpenWindowsAutomatically([out, retval] BOOL* enabled);
    HRESULT setJavaScriptCanOpenWindowsAutomatically([in] BOOL enabled);

    HRESULT arePlugInsEnabled([out, retval] BOOL* enabled);
    HRESULT setPlugInsEnabled([in] BOOL enabled);

    HRESULT allowsAnimatedImages([out, retval] BOOL* enabled);
    HRESULT setAllowsAnimatedImages([in] BOOL enabled);
    HRESULT allowAnimatedImageLooping([out, retval] BOOL* enabled);
    HRESULT setAllowAnimatedImageLooping([in] BOOL enabled);

    HRESULT setLoadsImagesAutomatically([in] BOOL enabled);
    HRESULT loadsImagesAutomatically([out, retval] BOOL* enabled);

    HRESULT setAutosaves([in] BOOL enabled);
    HRESULT autosaves([out, retval] BOOL* enabled);

    HRESULT setShouldPrintBackgrounds([in] BOOL enabled);
    HRESULT shouldPrintBackgrounds([out, retval] BOOL* enabled);

    HRESULT setPrivateBrowsingEnabled([in] BOOL enabled);
    HRESULT privateBrowsingEnabled([out, retval] BOOL* enabled);

    HRESULT setTabsToLinks([in] BOOL enabled);
    HRESULT tabsToLinks([out, retval] BOOL* enabled);

    HRESULT textAreasAreResizable([out, retval] BOOL* enabled);
    HRESULT setTextAreasAreResizable([in] BOOL enabled);

    HRESULT pageCacheSize([out, retval] unsigned int* enabled);
    HRESULT objectCacheSize([out, retval] unsigned int* enabled);

    HRESULT iconDatabaseLocation([out, retval] BSTR* location);
    HRESULT setIconDatabaseLocation([in] BSTR location);

    HRESULT iconDatabaseEnabled([out, retval] BOOL* enabled);
    HRESULT setIconDatabaseEnabled([in] BOOL enabled);

    HRESULT fontSmoothing([out, retval] FontSmoothingType* smoothingType);
    HRESULT setFontSmoothing([in] FontSmoothingType smoothingType);

    HRESULT editableLinkBehavior([out, retval] WebKitEditableLinkBehavior* editableLinkBehavior);
    HRESULT setEditableLinkBehavior([in] WebKitEditableLinkBehavior behavior);

    HRESULT cookieStorageAcceptPolicy([out, retval] WebKitCookieStorageAcceptPolicy* acceptPolicy);
    HRESULT setCookieStorageAcceptPolicy([in] WebKitCookieStorageAcceptPolicy acceptPolicy);

    HRESULT continuousSpellCheckingEnabled([out, retval] BOOL* enabled);
    HRESULT setContinuousSpellCheckingEnabled([in] BOOL enabled);
    HRESULT grammarCheckingEnabled([out, retval] BOOL* enabled);
    HRESULT setGrammarCheckingEnabled([in] BOOL enabled);
    HRESULT allowContinuousSpellChecking([out, retval] BOOL *allowed);
    HRESULT setAllowContinuousSpellChecking([in] BOOL allowed);

    HRESULT isDOMPasteAllowed([out, retval] BOOL *allowed);
    HRESULT setDOMPasteAllowed([in] BOOL allowed);

    HRESULT usesPageCache([out, retval] BOOL* usesPageCache);
    HRESULT setUsesPageCache([in] BOOL usesPageCache);
}
