Add more _WKElementActionTypes and provide API to create with custom types
[WebKit-https.git] / Source / WebKit / UIProcess / API / Cocoa / _WKElementAction.h
1 /*
2  * Copyright (C) 2014 Apple 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
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #import <WebKit/WKFoundation.h>
27
28 #if TARGET_OS_IPHONE
29
30 #import <WebKit/_WKActivatedElementInfo.h>
31
32 typedef void (^WKElementActionHandler)(_WKActivatedElementInfo *);
33 typedef BOOL (^WKElementActionDismissalHandler)(void);
34
35 typedef NS_ENUM(NSInteger, _WKElementActionType) {
36     _WKElementActionTypeCustom,
37     _WKElementActionTypeOpen,
38     _WKElementActionTypeCopy,
39     _WKElementActionTypeSaveImage,
40 #if !defined(TARGET_OS_IOS) || TARGET_OS_IOS
41     _WKElementActionTypeAddToReadingList,
42     _WKElementActionTypeOpenInDefaultBrowser WK_API_AVAILABLE(ios(9_0)),
43     _WKElementActionTypeOpenInExternalApplication WK_API_AVAILABLE(ios(9_0)),
44 #endif
45     _WKElementActionTypeShare WK_API_AVAILABLE(macos(10.12), ios(10.0)),
46     _WKElementActionTypeOpenInNewTab WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)),
47     _WKElementActionTypeOpenInNewWindow WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)),
48     _WKElementActionTypeDownload WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)),
49 } WK_API_AVAILABLE(macos(10.10), ios(8.0));
50
51 WK_CLASS_AVAILABLE(macos(10.10), ios(8.0))
52 @interface _WKElementAction : NSObject
53
54 + (instancetype)elementActionWithType:(_WKElementActionType)type;
55 + (instancetype)elementActionWithType:(_WKElementActionType)type title:(NSString *)title actionHandler:(WKElementActionHandler)actionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
56 + (instancetype)elementActionWithType:(_WKElementActionType)type customTitle:(NSString *)title;
57 + (instancetype)elementActionWithTitle:(NSString *)title actionHandler:(WKElementActionHandler)handler;
58
59 - (void)runActionWithElementInfo:(_WKActivatedElementInfo *)info WK_API_AVAILABLE(ios(9_0));
60
61 @property (nonatomic, readonly) _WKElementActionType type;
62 @property (nonatomic, readonly) NSString* title;
63 @property (nonatomic, copy) WKElementActionDismissalHandler dismissalHandler;
64
65 @end
66
67 #endif // TARGET_OS_IPHONE