Changeset 186008 in webkit
- Timestamp:
- Jun 26, 2015 2:24:03 PM (9 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 2 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r186002 r186008 1 2015-06-26 Beth Dakin <bdakin@apple.com> 2 3 Add support for image previews 4 https://bugs.webkit.org/show_bug.cgi?id=146350 5 -and corresponding- 6 rdar://problem/20640234 7 8 Reviewed by Tim Horton. 9 10 For images, use the actual image instead of a snapshot. 11 * WebProcess/WebPage/ios/WebPageIOS.mm: 12 (WebKit::WebPage::getPositionInformation): 13 14 ViewController for image preview. 15 * UIProcess/WKImagePreviewViewController.h: Added. 16 * UIProcess/WKImagePreviewViewController.mm: Added. 17 (-[WKImagePreviewViewController loadView]): 18 (-[WKImagePreviewViewController initWithCGImage:]): 19 (-[WKImagePreviewViewController viewDidLayoutSubviews]): 20 (_scaleSizeWithinSize): 21 22 New enum and member variable to keep track of preview type. 23 * UIProcess/ios/WKContentViewInteraction.h: 24 * UIProcess/ios/WKContentViewInteraction.mm: 25 26 Only apply the http restriction to non-image links since we can still preview the 27 image of a non-http image link. 28 (-[WKContentView gestureRecognizerShouldBegin:]): 29 30 Handle links and images. 31 (-[WKContentView previewViewControllerForPosition:inSourceView:]): 32 33 Return early for non-link previews. 34 (-[WKContentView commitPreviewViewController:]): 35 36 New files. 37 * WebKit2.xcodeproj/project.pbxproj: 38 39 Just use the actual image in the PositionInformation for image elements rather 40 than taking a screen shot. 41 * WebProcess/WebPage/ios/WebPageIOS.mm: 42 (WebKit::WebPage::getPositionInformation): 43 1 44 2015-06-26 Matt Rajca <mrajca@apple.com> 2 45 -
trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.h
r184061 r186008 94 94 UIWKAutocorrectionContextHandler autocorrectionContextHandler; 95 95 }; 96 97 enum class PreviewElementType { 98 None = 0, 99 Link, 100 Image 101 }; 102 96 103 } 97 104 … … 121 128 RetainPtr<WKFileUploadPanel> _fileUploadPanel; 122 129 RetainPtr<UIGestureRecognizer> _previewGestureRecognizer; 130 WebKit::PreviewElementType _previewType; 123 131 124 132 std::unique_ptr<WebKit::SmartMagnificationController> _smartMagnificationController; -
trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm
r185748 r186008 42 42 #import "WKFormInputControl.h" 43 43 #import "WKFormSelectControl.h" 44 #import "WKImagePreviewViewController.h" 44 45 #import "WKInspectorNodeSearchGestureRecognizer.h" 46 #import "WKNSURLExtras.h" 45 47 #import "WKUIDelegatePrivate.h" 46 48 #import "WKWebViewConfiguration.h" … … 959 961 960 962 String absoluteLinkURL = _positionInformation.url; 961 if ( absoluteLinkURL.isEmpty() || !WebCore::protocolIsInHTTPFamily(absoluteLinkURL))963 if (_positionInformation.clickableElementName == "A" && (absoluteLinkURL.isEmpty() || !WebCore::protocolIsInHTTPFamily(absoluteLinkURL))) 962 964 return NO; 963 965 } … … 3119 3121 ASSERT(self == sourceView); 3120 3122 3121 if (_positionInformation.clickableElementName != "A" && _positionInformation.clickableElementName != "IMG") 3123 _previewType = PreviewElementType::None; 3124 3125 BOOL canShowImagePreview = _positionInformation.clickableElementName == "IMG"; 3126 BOOL canShowLinkPreview = _positionInformation.clickableElementName == "A" || canShowImagePreview; 3127 3128 if (!canShowLinkPreview && !canShowImagePreview) 3122 3129 return nil; 3123 3130 3124 3131 String absoluteLinkURL = _positionInformation.url; 3125 if (absoluteLinkURL.isEmpty() || !WebCore::protocolIsInHTTPFamily(absoluteLinkURL)) 3132 if (absoluteLinkURL.isEmpty() || !WebCore::protocolIsInHTTPFamily(absoluteLinkURL)) { 3133 if (canShowLinkPreview && !canShowImagePreview) 3134 return nil; 3135 canShowLinkPreview = NO; 3136 } 3137 3138 if (canShowLinkPreview) { 3139 _previewType = PreviewElementType::Link; 3140 NSURL *targetURL = [NSURL _web_URLWithWTFString:_positionInformation.url]; 3141 id<WKUIDelegatePrivate> uiDelegate = static_cast<id <WKUIDelegatePrivate>>([_webView UIDelegate]); 3142 if ([uiDelegate respondsToSelector:@selector(_webView:previewViewControllerForURL:)]) { 3143 _highlightLongPressCanClick = NO; 3144 return [uiDelegate _webView:_webView previewViewControllerForURL:targetURL]; 3145 } 3146 #if HAVE(SAFARI_SERVICES_FRAMEWORK) 3147 SFSafariViewController *previewViewController = [allocSFSafariViewControllerInstance() initWithURL:targetURL]; 3148 previewViewController._showingLinkPreview = YES; 3149 _highlightLongPressCanClick = NO; 3150 return [previewViewController autorelease]; 3151 #else 3126 3152 return nil; 3127 3128 NSURL *targetURL = [NSURL URLWithString:_positionInformation.url];3129 id<WKUIDelegatePrivate> uiDelegate = static_cast<id <WKUIDelegatePrivate>>([_webView UIDelegate]);3130 if ([uiDelegate respondsToSelector:@selector(_webView:previewViewControllerForURL:)]) {3131 _highlightLongPressCanClick = NO;3132 return [uiDelegate _webView:_webView previewViewControllerForURL:targetURL];3133 }3134 3135 #if HAVE(SAFARI_SERVICES_FRAMEWORK)3136 SFSafariViewController *previewViewController = [allocSFSafariViewControllerInstance() initWithURL:targetURL];3137 previewViewController._showingLinkPreview = YES;3138 _highlightLongPressCanClick = NO;3139 return previewViewController;3140 #else3141 return nil;3142 3153 #endif 3154 } 3155 3156 if (canShowImagePreview) { 3157 _previewType = PreviewElementType::Image; 3158 return [[[WKImagePreviewViewController alloc] initWithCGImage:_positionInformation.image->makeCGImageCopy()] autorelease]; 3159 } 3160 3161 return nil; 3143 3162 } 3144 3163 3145 3164 - (void)commitPreviewViewController:(UIViewController *)viewController 3146 3165 { 3166 if (_previewType != PreviewElementType::Link) 3167 return; 3168 3147 3169 id<WKUIDelegatePrivate> uiDelegate = static_cast<id <WKUIDelegatePrivate>>([_webView UIDelegate]); 3148 3170 if ([uiDelegate respondsToSelector:@selector(_webView:commitPreviewedViewController:)]) { -
trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj
r185936 r186008 1187 1187 9321D58A1A38F196008052BE /* WKImmediateActionTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 9321D5891A38F196008052BE /* WKImmediateActionTypes.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1188 1188 9323611E1B015DA800FA9232 /* _WKOverlayScrollbarStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 9323611D1B015DA800FA9232 /* _WKOverlayScrollbarStyle.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1189 933DF82E1B3BC09000AEA9E3 /* WKImagePreviewViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 933DF82D1B3BC09000AEA9E3 /* WKImagePreviewViewController.h */; }; 1190 933DF8301B3BC0B400AEA9E3 /* WKImagePreviewViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 933DF82F1B3BC0B400AEA9E3 /* WKImagePreviewViewController.mm */; }; 1189 1191 934B724419F5B9BE00AE96D6 /* WKActionMenuItemTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 934B724319F5B9BE00AE96D6 /* WKActionMenuItemTypes.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1190 1192 935EEB9B1277617C003322B8 /* WKBundleBackForwardListItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 935EEB981277616D003322B8 /* WKBundleBackForwardListItem.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 3375 3377 9321D5891A38F196008052BE /* WKImmediateActionTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKImmediateActionTypes.h; sourceTree = "<group>"; }; 3376 3378 9323611D1B015DA800FA9232 /* _WKOverlayScrollbarStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKOverlayScrollbarStyle.h; sourceTree = "<group>"; }; 3379 933DF82D1B3BC09000AEA9E3 /* WKImagePreviewViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKImagePreviewViewController.h; sourceTree = "<group>"; }; 3380 933DF82F1B3BC0B400AEA9E3 /* WKImagePreviewViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKImagePreviewViewController.mm; sourceTree = "<group>"; }; 3377 3381 934B724319F5B9BE00AE96D6 /* WKActionMenuItemTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKActionMenuItemTypes.h; sourceTree = "<group>"; }; 3378 3382 935EEB8F1277615D003322B8 /* InjectedBundleBackForwardList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InjectedBundleBackForwardList.cpp; sourceTree = "<group>"; }; … … 5141 5145 0FCB4E4018BBE044000FCFC9 /* WKGeolocationProviderIOS.mm */, 5142 5146 0FCB4E4118BBE044000FCFC9 /* WKGeolocationProviderIOSObjCSecurityOrigin.mm */, 5147 933DF82D1B3BC09000AEA9E3 /* WKImagePreviewViewController.h */, 5148 933DF82F1B3BC0B400AEA9E3 /* WKImagePreviewViewController.mm */, 5143 5149 0F3C7259196F5F6800AEDD0C /* WKInspectorHighlightView.h */, 5144 5150 0F3C7257196F5F5000AEDD0C /* WKInspectorHighlightView.mm */, … … 8023 8029 BC306824125A6B9400E71278 /* WebProcessCreationParameters.h in Headers */, 8024 8030 2DB9C4AC1B3251BD0070F27F /* SafariServicesSPI.h in Headers */, 8031 933DF82E1B3BC09000AEA9E3 /* WKImagePreviewViewController.h in Headers */, 8025 8032 1AFA4B901A65A9E2006C4AB4 /* WebProcessLifetimeObserver.h in Headers */, 8026 8033 1AFA4B8C1A65A1D0006C4AB4 /* WebProcessLifetimeTracker.h in Headers */, … … 9564 9571 1AC7537B183A9FDB0072CB15 /* PageLoadState.cpp in Sources */, 9565 9572 C574A58212E66681002DFE98 /* PasteboardTypes.mm in Sources */, 9573 933DF8301B3BC0B400AEA9E3 /* WKImagePreviewViewController.mm in Sources */, 9566 9574 E19582D6153CC05400B60875 /* PDFKitImports.mm in Sources */, 9567 9575 2D870D1016234FFE000A3F20 /* PDFPlugin.mm in Sources */, -
trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm
r185123 r186008 2132 2132 2133 2133 if (elementIsLinkOrImage) { 2134 // Ensure that the image contains at most 600K pixels, so that it is not too big. 2135 if (RefPtr<WebImage> snapshot = snapshotNode(*element, SnapshotOptionsShareable, 600 * 1024)) 2136 info.image = snapshot->bitmap(); 2134 if (linkElement) { 2135 // Ensure that the image contains at most 600K pixels, so that it is not too big. 2136 if (RefPtr<WebImage> snapshot = snapshotNode(*element, SnapshotOptionsShareable, 600 * 1024)) 2137 info.image = snapshot->bitmap(); 2138 } else if (element->renderer() && element->renderer()->isRenderImage()) { 2139 auto& renderImage = downcast<RenderImage>(*(element->renderer())); 2140 if (renderImage.cachedImage() && !renderImage.cachedImage()->errorOccurred()) { 2141 if (Image* image = renderImage.cachedImage()->imageForRenderer(&renderImage)) { 2142 if (RefPtr<ShareableBitmap> sharedBitmap = ShareableBitmap::createShareable(IntSize(image->size()), ShareableBitmap::SupportsAlpha)) { 2143 auto graphicsContext = sharedBitmap->createGraphicsContext(); 2144 graphicsContext->drawImage(image, ColorSpaceDeviceRGB, FloatPoint(0, 0)); 2145 info.image = sharedBitmap; 2146 } 2147 } 2148 } 2149 } 2137 2150 } 2138 2151 if (linkElement)
Note: See TracChangeset
for help on using the changeset viewer.