Diff
Modified: trunk/Source/WebKit/ChangeLog (223438 => 223439)
--- trunk/Source/WebKit/ChangeLog 2017-10-16 21:33:10 UTC (rev 223438)
+++ trunk/Source/WebKit/ChangeLog 2017-10-16 21:33:11 UTC (rev 223439)
@@ -1,5 +1,27 @@
2017-10-16 Alex Christensen <[email protected]>
+ Add a _WKThumbnailView initializer with a WKWebView
+ https://bugs.webkit.org/show_bug.cgi?id=178351
+ <rdar://problem/34979453>
+
+ Reviewed by Tim Horton.
+
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (-[WKWebView _page]):
+ (-[WKWebView _setThumbnailView:]):
+ (-[WKWebView _thumbnailView]):
+ (-[WKWebView _setIgnoresAllEvents:]):
+ (-[WKWebView _ignoresAllEvents]):
+ * UIProcess/API/Cocoa/WKWebViewInternal.h:
+ * UIProcess/API/Cocoa/WKWebViewPrivate.h:
+ * UIProcess/API/Cocoa/_WKThumbnailView.h:
+ * UIProcess/API/Cocoa/_WKThumbnailView.mm:
+ (-[_WKThumbnailView initWithFrame:fromWKWebView:]):
+ (-[_WKThumbnailView _viewWasUnparented]):
+ (-[_WKThumbnailView _viewWasParented]):
+
+2017-10-16 Alex Christensen <[email protected]>
+
Expose more WKView properties as WKWebViewPrivate SPI
https://bugs.webkit.org/show_bug.cgi?id=178349
<rdar://problem/34980919>
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (223438 => 223439)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2017-10-16 21:33:10 UTC (rev 223438)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2017-10-16 21:33:11 UTC (rev 223439)
@@ -1079,6 +1079,11 @@
return toAPI(_page.get());
}
+- (WebKit::WebPageProxy *)_page
+{
+ return _page.get();
+}
+
- (BOOL)allowsLinkPreview
{
#if PLATFORM(MAC)
@@ -5458,6 +5463,28 @@
});
}
+- (void)_setThumbnailView:(_WKThumbnailView *)thumbnailView
+{
+ _impl->setThumbnailView(thumbnailView);
+}
+
+- (_WKThumbnailView *)_thumbnailView
+{
+ if (!_impl)
+ return nil;
+ return _impl->thumbnailView();
+}
+
+- (void)_setIgnoresAllEvents:(BOOL)ignoresAllEvents
+{
+ _impl->setIgnoresAllEvents(ignoresAllEvents);
+}
+
+- (BOOL)_ignoresAllEvents
+{
+ return _impl->ignoresAllEvents();
+}
+
#endif
@end
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h (223438 => 223439)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h 2017-10-16 21:33:10 UTC (rev 223438)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h 2017-10-16 21:33:11 UTC (rev 223439)
@@ -147,6 +147,7 @@
#endif
- (WKPageRef)_pageForTesting;
+- (WebKit::WebPageProxy*)_page;
@end
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h (223438 => 223439)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h 2017-10-16 21:33:10 UTC (rev 223438)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h 2017-10-16 21:33:11 UTC (rev 223439)
@@ -100,6 +100,7 @@
@class _WKIconLoadingDelegate;
@class _WKRemoteObjectRegistry;
@class _WKSessionState;
+@class _WKThumbnailView;
@class _WKWebsitePolicies;
@class _WKWebViewPrintFormatter;
@@ -289,6 +290,9 @@
@property (nonatomic, setter=_setOverlayScrollbarStyle:) _WKOverlayScrollbarStyle _overlayScrollbarStyle WK_API_AVAILABLE(macosx(WK_MAC_TBA));
@property (strong, nonatomic, setter=_setInspectorAttachmentView:) NSView *_inspectorAttachmentView WK_API_AVAILABLE(macosx(WK_MAC_TBA));
+@property (nonatomic, setter=_setThumbnailView:) _WKThumbnailView *_thumbnailView WK_API_AVAILABLE(macosx(WK_MAC_TBA));
+@property (nonatomic, setter=_setIgnoresAllEvents:) BOOL _ignoresAllEvents WK_API_AVAILABLE(macosx(WK_MAC_TBA));
+
#endif
- (WKNavigation *)_reloadWithoutContentBlockers WK_API_AVAILABLE(macosx(10.12), ios(10.0));
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKThumbnailView.h (223438 => 223439)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKThumbnailView.h 2017-10-16 21:33:10 UTC (rev 223438)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKThumbnailView.h 2017-10-16 21:33:11 UTC (rev 223439)
@@ -32,11 +32,13 @@
#import <AppKit/AppKit.h>
@class WKView;
+@class WKWebView;
WK_CLASS_AVAILABLE(macosx(10.10), ios(8.0))
@interface _WKThumbnailView : NSView
- (instancetype)initWithFrame:(NSRect)frame fromWKView:(WKView *)wkView;
+- (instancetype)initWithFrame:(NSRect)frame fromWKWebView:(WKWebView *)webView;
@property (nonatomic) CGFloat scale;
@property (nonatomic, readonly) CGSize snapshotSize;
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKThumbnailView.mm (223438 => 223439)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKThumbnailView.mm 2017-10-16 21:33:10 UTC (rev 223438)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKThumbnailView.mm 2017-10-16 21:33:11 UTC (rev 223439)
@@ -34,6 +34,7 @@
#import "WKAPICast.h"
#import "WKView.h"
#import "WKViewInternal.h"
+#import "WKWebViewInternal.h"
#import "WebPageProxy.h"
// FIXME: Make it possible to leave a snapshot of the content presented in the WKView while the thumbnail is live.
@@ -47,6 +48,7 @@
@implementation _WKThumbnailView {
RetainPtr<WKView> _wkView;
+ RetainPtr<WKWebView> _wkWebView;
WebPageProxy* _webPageProxy;
BOOL _originalMayStartMediaWhenInWindow;
@@ -62,7 +64,7 @@
@synthesize exclusivelyUsesSnapshot=_exclusivelyUsesSnapshot;
@synthesize shouldKeepSnapshotWhenRemovedFromSuperview=_shouldKeepSnapshotWhenRemovedFromSuperview;
-- (instancetype)initWithFrame:(NSRect)frame fromWKView:(WKView *)wkView
+- (instancetype)initWithFrame:(NSRect)frame
{
if (!(self = [super initWithFrame:frame]))
return nil;
@@ -69,12 +71,19 @@
self.wantsLayer = YES;
self.layer.backgroundColor = [NSColor whiteColor].CGColor;
+ _scale = 1;
+ _lastSnapshotScale = NAN;
+
+ return self;
+}
+- (instancetype)initWithFrame:(NSRect)frame fromWKView:(WKView *)wkView
+{
+ if (!(self = [self initWithFrame:frame]))
+ return nil;
+
_wkView = wkView;
_webPageProxy = toImpl([_wkView pageRef]);
- _scale = 1;
- _lastSnapshotScale = NAN;
-
_originalMayStartMediaWhenInWindow = _webPageProxy->mayStartMediaWhenInWindow();
_originalSourceViewIsInWindow = !![_wkView window];
@@ -81,6 +90,19 @@
return self;
}
+- (instancetype)initWithFrame:(NSRect)frame fromWKWebView:(WKWebView *)webView
+{
+ if (!(self = [super initWithFrame:frame]))
+ return nil;
+
+ _wkWebView = webView;
+ _webPageProxy = [_wkWebView _page];
+ _originalMayStartMediaWhenInWindow = _webPageProxy->mayStartMediaWhenInWindow();
+ _originalSourceViewIsInWindow = !![_wkWebView window];
+
+ return self;
+}
+
- (void)requestSnapshot
{
if (_waitingForSnapshot) {
@@ -117,8 +139,14 @@
- (void)_viewWasUnparented
{
if (!_exclusivelyUsesSnapshot) {
- [_wkView _setThumbnailView:nil];
- [_wkView _setIgnoresAllEvents:NO];
+ if (_wkView) {
+ [_wkView _setThumbnailView:nil];
+ [_wkView _setIgnoresAllEvents:NO];
+ } else {
+ ASSERT(_wkWebView);
+ [_wkWebView _setThumbnailView:nil];
+ [_wkWebView _setIgnoresAllEvents:NO];
+ }
_webPageProxy->setMayStartMediaWhenInWindow(_originalMayStartMediaWhenInWindow);
}
@@ -131,8 +159,10 @@
- (void)_viewWasParented
{
- if ([_wkView _thumbnailView])
+ if (_wkView && [_wkView _thumbnailView])
return;
+ if (_wkWebView && [_wkWebView _thumbnailView])
+ return;
if (!_exclusivelyUsesSnapshot && !_originalSourceViewIsInWindow)
_webPageProxy->setMayStartMediaWhenInWindow(false);
@@ -140,8 +170,14 @@
[self _requestSnapshotIfNeeded];
if (!_exclusivelyUsesSnapshot) {
- [_wkView _setThumbnailView:self];
- [_wkView _setIgnoresAllEvents:YES];
+ if (_wkView) {
+ [_wkView _setThumbnailView:self];
+ [_wkView _setIgnoresAllEvents:YES];
+ } else {
+ ASSERT(_wkWebView);
+ [_wkWebView _setThumbnailView:self];
+ [_wkWebView _setIgnoresAllEvents:YES];
+ }
}
}