Unreviewed, fix iOS build with recent SDKs.
[WebKit-https.git] / Source / WebKit / UIProcess / API / Cocoa / _WKActivatedElementInfo.mm
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 "config.h"
27 #import "_WKActivatedElementInfoInternal.h"
28
29 #import "ShareableBitmap.h"
30 #import <wtf/RetainPtr.h>
31
32 #if PLATFORM(IOS_FAMILY)
33 #import <UIKit/UIImage.h>
34 #endif
35
36 #if PLATFORM(MAC)
37 #import <AppKit/NSImage.h>
38 #endif
39
40 @implementation _WKActivatedElementInfo  {
41     RetainPtr<NSURL> _URL;
42     RetainPtr<NSURL> _imageURL;
43     RetainPtr<NSString> _title;
44     CGPoint _interactionLocation;
45     RetainPtr<NSString> _ID;
46     RefPtr<WebKit::ShareableBitmap> _image;
47 #if PLATFORM(IOS_FAMILY)
48     RetainPtr<UIImage> _uiImage;
49     RetainPtr<NSDictionary> _userInfo;
50 #endif
51 #if PLATFORM(MAC)
52     RetainPtr<NSImage> _nsImage;
53 #endif
54 }
55
56 #if PLATFORM(IOS_FAMILY)
57 + (instancetype)activatedElementInfoWithInteractionInformationAtPosition:(const WebKit::InteractionInformationAtPosition&)information
58 {
59     return [[[self alloc] _initWithInteractionInformationAtPosition:information] autorelease];
60 }
61
62 - (instancetype)_initWithInteractionInformationAtPosition:(const WebKit::InteractionInformationAtPosition&)information
63 {
64     if (!(self = [super init]))
65         return nil;
66     
67     _URL = information.url;
68     _imageURL = information.imageURL;
69     _interactionLocation = information.request.point;
70     _title = information.title;
71     _boundingRect = information.bounds;
72     
73     if (information.isAttachment)
74         _type = _WKActivatedElementTypeAttachment;
75     else if (information.isImage)
76         _type = _WKActivatedElementTypeImage;
77     else if (information.isLink)
78         _type = _WKActivatedElementTypeLink;
79     else
80         _type = _WKActivatedElementTypeUnspecified;
81     
82     _image = information.image;
83     _ID = information.idAttribute;
84     
85     return self;
86 }
87 #endif
88
89 - (instancetype)_initWithType:(_WKActivatedElementType)type URL:(NSURL *)url imageURL:(NSURL *)imageURL location:(CGPoint)location title:(NSString *)title ID:(NSString *)ID rect:(CGRect)rect image:(WebKit::ShareableBitmap*)image
90 {
91     return [self _initWithType:type URL:url imageURL:imageURL location:location title:title ID:ID rect:rect image:image userInfo:nil];
92 }
93
94 - (instancetype)_initWithType:(_WKActivatedElementType)type URL:(NSURL *)url imageURL:(NSURL *)imageURL location:(CGPoint)location title:(NSString *)title ID:(NSString *)ID rect:(CGRect)rect image:(WebKit::ShareableBitmap*)image userInfo:(NSDictionary *)userInfo
95 {
96     if (!(self = [super init]))
97         return nil;
98
99     _URL = adoptNS([url copy]);
100     _imageURL = adoptNS([imageURL copy]);
101     _interactionLocation = location;
102     _title = adoptNS([title copy]);
103     _boundingRect = rect;
104     _type = type;
105     _image = image;
106     _ID = ID;
107 #if PLATFORM(IOS_FAMILY)
108     _userInfo = adoptNS([userInfo copy]);
109 #endif
110
111     return self;
112 }
113
114 - (NSURL *)URL
115 {
116     return _URL.get();
117 }
118
119 - (NSURL *)imageURL
120 {
121     return _imageURL.get();
122 }
123
124 - (NSString *)title
125 {
126     return _title.get();
127 }
128
129 - (NSString *)ID
130 {
131     return _ID.get();
132 }
133
134 - (CGPoint)_interactionLocation
135 {
136     return _interactionLocation;
137 }
138
139 #if PLATFORM(IOS_FAMILY)
140 - (NSDictionary *)userInfo
141 {
142     return _userInfo.get();
143 }
144
145 - (UIImage *)image
146 {
147     if (_uiImage)
148         return [[_uiImage copy] autorelease];
149
150     if (!_image)
151         return nil;
152
153     _uiImage = adoptNS([[UIImage alloc] initWithCGImage:_image->makeCGImageCopy().get()]);
154     _image = nullptr;
155
156     return [[_uiImage copy] autorelease];
157 }
158 #endif
159
160 #if PLATFORM(MAC)
161 - (NSImage *)image
162 {
163     if (_nsImage)
164         return [[_nsImage copy] autorelease];
165
166     if (!_image)
167         return nil;
168
169     _nsImage = adoptNS([[NSImage alloc] initWithCGImage:_image->makeCGImageCopy().get() size:NSSizeFromCGSize(_boundingRect.size)]);
170     _image = nullptr;
171
172     return [[_nsImage copy] autorelease];
173 }
174 #endif
175
176 @end