Title: [165749] trunk/Tools
Revision
165749
Author
[email protected]
Date
2014-03-17 13:10:12 -0700 (Mon, 17 Mar 2014)

Log Message

Convert MiniBrowser to use WKWebView API
https://bugs.webkit.org/show_bug.cgi?id=130061

Reviewed by Anders Carlsson.

Convert the MiniBrowser WK2 window to use WebKit2 API as much
as possible.

Some functionality was removed temporarily:
    - text zoom, page zoom
    - reload
    - pagination mode
    - transparent window
    - dumping source
    - window.open support
    - beforeUnload panel
    - find in page

* MiniBrowser/mac/AppDelegate.h:
* MiniBrowser/mac/AppDelegate.m:
(-[BrowserAppDelegate init]):
(-[BrowserAppDelegate newWindow:]):
(-[BrowserAppDelegate applicationWillTerminate:]):
(-[BrowserAppDelegate openDocument:]):
* MiniBrowser/mac/WK2BrowserWindowController.h:
* MiniBrowser/mac/WK2BrowserWindowController.m:
(-[WK2BrowserWindowController awakeFromNib]):
(-[WK2BrowserWindowController dealloc]):
(-[WK2BrowserWindowController fetch:]):
(-[WK2BrowserWindowController validateMenuItem:]):
(-[WK2BrowserWindowController reload:]):
(-[WK2BrowserWindowController goBack:]):
(-[WK2BrowserWindowController goForward:]):
(-[WK2BrowserWindowController toggleZoomMode:]):
(-[WK2BrowserWindowController resetZoom:]):
(-[WK2BrowserWindowController canResetZoom]):
(-[WK2BrowserWindowController dumpSourceToConsole:]):
(-[WK2BrowserWindowController togglePaginationMode:]):
(-[WK2BrowserWindowController validateUserInterfaceItem:]):
(-[WK2BrowserWindowController windowShouldClose:]):
(-[WK2BrowserWindowController applicationTerminating]):
(-[WK2BrowserWindowController currentZoomFactor]):
(-[WK2BrowserWindowController setCurrentZoomFactor:]):
(-[WK2BrowserWindowController toggleTransparentWindow:]):
(-[WK2BrowserWindowController observeValueForKeyPath:ofObject:change:context:]):
(-[WK2BrowserWindowController webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
(-[WK2BrowserWindowController webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:completionHandler:]):
(-[WK2BrowserWindowController webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:completionHandler:]):
(-[WK2BrowserWindowController find:]):
(-[WK2BrowserWindowController webView:decidePolicyForNavigationResponse:decisionHandler:]):
(-[WK2BrowserWindowController webView:didStartProvisionalNavigation:]):
(-[WK2BrowserWindowController webView:didReceiveServerRedirectForProvisionalNavigation:]):
(-[WK2BrowserWindowController webView:didFailProvisionalNavigation:withError:]):
(-[WK2BrowserWindowController webView:didCommitNavigation:]):
(-[WK2BrowserWindowController webView:didFinishLoadingNavigation:]):
(-[WK2BrowserWindowController webView:didFailNavigation:withError:]):
* WebKitTestRunner/PlatformWebView.h:
* WebKitTestRunner/ios/PlatformWebViewIOS.mm:
* WebKitTestRunner/mac/PlatformWebViewMac.mm:

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (165748 => 165749)


--- trunk/Tools/ChangeLog	2014-03-17 20:04:47 UTC (rev 165748)
+++ trunk/Tools/ChangeLog	2014-03-17 20:10:12 UTC (rev 165749)
@@ -1,3 +1,65 @@
+2014-03-17  Simon Fraser  <[email protected]>
+
+        Convert MiniBrowser to use WKWebView API
+        https://bugs.webkit.org/show_bug.cgi?id=130061
+
+        Reviewed by Anders Carlsson.
+        
+        Convert the MiniBrowser WK2 window to use WebKit2 API as much
+        as possible.
+        
+        Some functionality was removed temporarily:
+            - text zoom, page zoom
+            - reload
+            - pagination mode
+            - transparent window
+            - dumping source
+            - window.open support
+            - beforeUnload panel
+            - find in page
+
+        * MiniBrowser/mac/AppDelegate.h:
+        * MiniBrowser/mac/AppDelegate.m:
+        (-[BrowserAppDelegate init]):
+        (-[BrowserAppDelegate newWindow:]):
+        (-[BrowserAppDelegate applicationWillTerminate:]):
+        (-[BrowserAppDelegate openDocument:]):
+        * MiniBrowser/mac/WK2BrowserWindowController.h:
+        * MiniBrowser/mac/WK2BrowserWindowController.m:
+        (-[WK2BrowserWindowController awakeFromNib]):
+        (-[WK2BrowserWindowController dealloc]):
+        (-[WK2BrowserWindowController fetch:]):
+        (-[WK2BrowserWindowController validateMenuItem:]):
+        (-[WK2BrowserWindowController reload:]):
+        (-[WK2BrowserWindowController goBack:]):
+        (-[WK2BrowserWindowController goForward:]):
+        (-[WK2BrowserWindowController toggleZoomMode:]):
+        (-[WK2BrowserWindowController resetZoom:]):
+        (-[WK2BrowserWindowController canResetZoom]):
+        (-[WK2BrowserWindowController dumpSourceToConsole:]):
+        (-[WK2BrowserWindowController togglePaginationMode:]):
+        (-[WK2BrowserWindowController validateUserInterfaceItem:]):
+        (-[WK2BrowserWindowController windowShouldClose:]):
+        (-[WK2BrowserWindowController applicationTerminating]):
+        (-[WK2BrowserWindowController currentZoomFactor]):
+        (-[WK2BrowserWindowController setCurrentZoomFactor:]):
+        (-[WK2BrowserWindowController toggleTransparentWindow:]):
+        (-[WK2BrowserWindowController observeValueForKeyPath:ofObject:change:context:]):
+        (-[WK2BrowserWindowController webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
+        (-[WK2BrowserWindowController webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:completionHandler:]):
+        (-[WK2BrowserWindowController webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:completionHandler:]):
+        (-[WK2BrowserWindowController find:]):
+        (-[WK2BrowserWindowController webView:decidePolicyForNavigationResponse:decisionHandler:]):
+        (-[WK2BrowserWindowController webView:didStartProvisionalNavigation:]):
+        (-[WK2BrowserWindowController webView:didReceiveServerRedirectForProvisionalNavigation:]):
+        (-[WK2BrowserWindowController webView:didFailProvisionalNavigation:withError:]):
+        (-[WK2BrowserWindowController webView:didCommitNavigation:]):
+        (-[WK2BrowserWindowController webView:didFinishLoadingNavigation:]):
+        (-[WK2BrowserWindowController webView:didFailNavigation:withError:]):
+        * WebKitTestRunner/PlatformWebView.h:
+        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
+        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
+
 2014-03-17  Zan Dobersek  <[email protected]>
 
         Use RunLoop objects through references instead of pointers

Modified: trunk/Tools/MiniBrowser/mac/AppDelegate.h (165748 => 165749)


--- trunk/Tools/MiniBrowser/mac/AppDelegate.h	2014-03-17 20:04:47 UTC (rev 165748)
+++ trunk/Tools/MiniBrowser/mac/AppDelegate.h	2014-03-17 20:10:12 UTC (rev 165749)
@@ -23,13 +23,7 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#import <WebKit2/WebKit2.h>
-
 @interface BrowserAppDelegate : NSObject <NSApplicationDelegate> {
-#if WK_API_ENABLED
-    WKProcessGroup *_processGroup;
-    WKBrowsingContextGroup *_browsingContextGroup;
-#endif
     NSMutableSet *_browserWindows;
 }
 

Modified: trunk/Tools/MiniBrowser/mac/AppDelegate.m (165748 => 165749)


--- trunk/Tools/MiniBrowser/mac/AppDelegate.m	2014-03-17 20:04:47 UTC (rev 165748)
+++ trunk/Tools/MiniBrowser/mac/AppDelegate.m	2014-03-17 20:10:12 UTC (rev 165749)
@@ -29,8 +29,6 @@
 #import "WK2BrowserWindowController.h"
 #import <WebKit/WebHistory.h>
 #import <WebKit2/WebKit2.h>
-#import <WebKit2/WKStringCF.h>
-#import <WebKit2/WKURLCF.h>
 
 static NSString *defaultURL = @"http://www.webkit.org/";
 
@@ -45,11 +43,6 @@
 {
     self = [super init];
     if (self) {
-#if WK_API_ENABLED
-        NSURL *url = "" fileURLWithPath:[[NSBundle mainBundle] pathForAuxiliaryExecutable:@"MiniBrowser.wkbundle"]];
-        _processGroup = [[WKProcessGroup alloc] initWithInjectedBundleURL:url];
-        _browsingContextGroup = [[WKBrowsingContextGroup alloc] initWithIdentifier:@"MiniBrowser"];
-#endif
         _browserWindows = [[NSMutableSet alloc] init];
     }
 
@@ -64,9 +57,8 @@
         controller = [[WK1BrowserWindowController alloc] initWithWindowNibName:@"BrowserWindow"];
 #if WK_API_ENABLED
     else if ([sender tag] == WebKit2NewWindowTag)
-        controller = [[WK2BrowserWindowController alloc] initWithProcessGroup:_processGroup browsingContextGroup:_browsingContextGroup];
+        controller = [[WK2BrowserWindowController alloc] initWithWindowNibName:@"BrowserWindow"];
 #endif
-
     if (!controller)
         return;
 
@@ -98,14 +90,6 @@
         BrowserWindowController *controller = (BrowserWindowController *)delegate;
         [controller applicationTerminating];
     }
-
-#if WK_API_ENABLED
-    [_processGroup release];
-    _processGroup = nil;
-
-    [_browsingContextGroup release];
-    _browsingContextGroup = nil;
-#endif
 }
 
 - (BrowserWindowController *)frontmostBrowserWindowController
@@ -140,20 +124,19 @@
         return;
     }
 
-#if WK_API_ENABLED
     NSOpenPanel *openPanel = [NSOpenPanel openPanel];
     [openPanel beginWithCompletionHandler:^(NSInteger result) {
         if (result != NSOKButton)
             return;
 
         // FIXME: add a way to open in WK1 also.
-        BrowserWindowController *newBrowserWindowController = [[WK2BrowserWindowController alloc] initWithProcessGroup:_processGroup browsingContextGroup:_browsingContextGroup];
+        
+        BrowserWindowController *newBrowserWindowController = [[WK2BrowserWindowController alloc] initWithWindowNibName:@"BrowserWindow"];
         [newBrowserWindowController.window makeKeyAndOrderFront:self];
 
         NSURL *url = "" objectAtIndex:0];
         [newBrowserWindowController loadURLString:[url absoluteString]];
     }];
-#endif // WK_API_ENABLED
 }
 
 @end

Modified: trunk/Tools/MiniBrowser/mac/WK2BrowserWindowController.h (165748 => 165749)


--- trunk/Tools/MiniBrowser/mac/WK2BrowserWindowController.h	2014-03-17 20:04:47 UTC (rev 165748)
+++ trunk/Tools/MiniBrowser/mac/WK2BrowserWindowController.h	2014-03-17 20:10:12 UTC (rev 165749)
@@ -28,9 +28,6 @@
 #if WK_API_ENABLED
 
 @interface WK2BrowserWindowController : BrowserWindowController <BrowserController>
-
-- (id)initWithProcessGroup:(WKProcessGroup *)processGroup browsingContextGroup:(WKBrowsingContextGroup *)browsingContextGroup;
-
 @end
 
 #endif // WK_API_ENABLED

Modified: trunk/Tools/MiniBrowser/mac/WK2BrowserWindowController.m (165748 => 165749)


--- trunk/Tools/MiniBrowser/mac/WK2BrowserWindowController.m	2014-03-17 20:04:47 UTC (rev 165748)
+++ trunk/Tools/MiniBrowser/mac/WK2BrowserWindowController.m	2014-03-17 20:10:12 UTC (rev 165749)
@@ -28,54 +28,51 @@
 #if WK_API_ENABLED
 
 #import "AppDelegate.h"
-#import <WebKit2/WKBrowsingContextControllerPrivate.h>
-#import <WebKit2/WKBrowsingContextHistoryDelegate.h>
-#import <WebKit2/WKBrowsingContextLoadDelegatePrivate.h>
-#import <WebKit2/WKBrowsingContextPolicyDelegate.h>
-#import <WebKit2/WKNavigationData.h>
-#import <WebKit2/WKStringCF.h>
-#import <WebKit2/WKURLCF.h>
-#import <WebKit2/WKView.h>
-#import <WebKit2/WKViewPrivate.h>
+#import <WebKit2/WKFrameInfo.h>
+#import <WebKit2/WKWebView.h>
+#import <WebKit2/WKNavigationDelegate.h>
+#import <WebKit2/WKUIDelegate.h>
 
 static void* keyValueObservingContext = &keyValueObservingContext;
 static NSString * const WebKit2UseRemoteLayerTreeDrawingAreaKey = @"WebKit2UseRemoteLayerTreeDrawingArea";
 
-@interface WK2BrowserWindowController () <WKBrowsingContextLoadDelegatePrivate, WKBrowsingContextPolicyDelegate, WKBrowsingContextHistoryDelegate>
+@interface WK2BrowserWindowController () <WKNavigationDelegate, WKUIDelegate>
 @end
 
 @implementation WK2BrowserWindowController {
-    WKProcessGroup *_processGroup;
-    WKBrowsingContextGroup *_browsingContextGroup;
-
-    WKView *_webView;
+    WKWebView *_webView;
 }
 
-- (id)initWithProcessGroup:(WKProcessGroup *)processGroup browsingContextGroup:(WKBrowsingContextGroup *)browsingContextGroup
+- (void)awakeFromNib
 {
-    if ((self = [super initWithWindowNibName:@"BrowserWindow"])) {
-        _processGroup = [processGroup retain];
-        _browsingContextGroup = [browsingContextGroup retain];
-        _zoomTextOnly = NO;
-    }
-    
-    return self;
+    _webView = [[WKWebView alloc] initWithFrame:[containerView bounds]];
+
+    _webView.allowsMagnification = YES;
+    _webView.allowsBackForwardNavigationGestures = YES;
+
+    [_webView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
+    [containerView addSubview:_webView];
+
+    [progressIndicator bind:NSHiddenBinding toObject:_webView withKeyPath:@"loading" options:@{ NSValueTransformerNameBindingOption : NSNegateBooleanTransformerName }];
+    [progressIndicator bind:NSValueBinding toObject:_webView withKeyPath:@"estimatedProgress" options:nil];
+
+    [_webView addObserver:self forKeyPath:@"title" options:0 context:keyValueObservingContext];
+    [_webView addObserver:self forKeyPath:@"activeURL" options:0 context:keyValueObservingContext];
+
+    _webView.navigationDelegate = self;
+    _webView.UIDelegate = self;
 }
 
 - (void)dealloc
 {
+    [_webView removeObserver:self forKeyPath:@"title"];
+    [_webView removeObserver:self forKeyPath:@"activeURL"];
+    
     [progressIndicator unbind:NSHiddenBinding];
     [progressIndicator unbind:NSValueBinding];
 
-    [_webView.browsingContextController removeObserver:self forKeyPath:@"title" context:keyValueObservingContext];
-    [_webView.browsingContextController removeObserver:self forKeyPath:@"activeURL" context:keyValueObservingContext];
-    _webView.browsingContextController.loadDelegate = nil;
-    _webView.browsingContextController.policyDelegate = nil;
     [_webView release];
 
-    [_browsingContextGroup release];
-    [_processGroup release];
-
     [super dealloc];
 }
 
@@ -83,7 +80,7 @@
 {
     [urlText setStringValue:[self addProtocolIfNecessary:[urlText stringValue]]];
 
-    [_webView.browsingContextController loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[urlText stringValue]]]];
+    [_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[urlText stringValue]]]];
 }
 
 - (IBAction)showHideWebView:(id)sender
@@ -114,17 +111,21 @@
         return [self canZoomOut];
     if (action == @selector(resetZoom:))
         return [self canResetZoom];
-
+    
+    // Disabled until missing WK2 functionality is exposed via API/SPI.
+    if (action == @selector(reload:)
+        || action == @selector(toggleZoomMode:)
+        || action == @selector(resetZoom:)
+        || action == @selector(dumpSourceToConsole:)
+        || action == @selector(find:)
+        || action == @selector(togglePaginationMode:)
+        || action == @selector(toggleTransparentWindow:))
+        return NO;
+    
     if (action == @selector(showHideWebView:))
         [menuItem setTitle:[_webView isHidden] ? @"Show Web View" : @"Hide Web View"];
     else if (action == @selector(removeReinsertWebView:))
         [menuItem setTitle:[_webView window] ? @"Remove Web View" : @"Insert Web View"];
-    else if (action == @selector(toggleZoomMode:))
-        [menuItem setState:_zoomTextOnly ? NSOnState : NSOffState];
-    else if ([menuItem action] == @selector(togglePaginationMode:))
-        [menuItem setState:[self isPaginated] ? NSOnState : NSOffState];
-    else if ([menuItem action] == @selector(toggleTransparentWindow:))
-        [menuItem setState:[[self window] isOpaque] ? NSOffState : NSOnState];
     else if ([menuItem action] == @selector(toggleUISideCompositing:))
         [menuItem setState:[self isUISideCompositingEnabled] ? NSOnState : NSOffState];
 
@@ -133,7 +134,6 @@
 
 - (IBAction)reload:(id)sender
 {
-    [_webView.browsingContextController reload];
 }
 
 - (IBAction)forceRepaint:(id)sender
@@ -143,23 +143,44 @@
 
 - (IBAction)goBack:(id)sender
 {
-    [_webView.browsingContextController goBack];
+    [_webView goBack];
 }
 
 - (IBAction)goForward:(id)sender
 {
-    [_webView.browsingContextController goForward];
+    [_webView goForward];
 }
 
+- (IBAction)toggleZoomMode:(id)sender
+{
+}
+
+- (IBAction)resetZoom:(id)sender
+{
+}
+
+- (BOOL)canResetZoom
+{
+    return NO;
+}
+
+- (IBAction)dumpSourceToConsole:(id)sender
+{
+}
+
+- (IBAction)togglePaginationMode:(id)sender
+{
+}
+
 - (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)item
 {
     SEL action = "" action];
 
     if (action == @selector(goBack:))
-        return _webView && [_webView.browsingContextController canGoBack];
+        return _webView && [_webView canGoBack];
     
     if (action == @selector(goForward:))
-        return _webView && [_webView.browsingContextController canGoForward];
+        return _webView && [_webView canGoForward];
     
     return YES;
 }
@@ -171,9 +192,7 @@
 
 - (BOOL)windowShouldClose:(id)sender
 {
-    LOG(@"windowShouldClose");
-    BOOL canCloseImmediately = WKPageTryClose(_webView.pageRef);
-    return canCloseImmediately;
+    return YES;
 }
 
 - (void)windowWillClose:(NSNotification *)notification
@@ -184,8 +203,6 @@
 
 - (void)applicationTerminating
 {
-    // FIXME: Why are we bothering to close the page? This doesn't even prevent LEAK output.
-    WKPageClose(_webView.pageRef);
 }
 
 #define DefaultMinimumZoomFactor (.5)
@@ -194,20 +211,16 @@
 
 - (CGFloat)currentZoomFactor
 {
-    return _zoomTextOnly ? _webView.browsingContextController.textZoom : _webView.browsingContextController.pageZoom;
+    return 1;
 }
 
 - (void)setCurrentZoomFactor:(CGFloat)factor
 {
-    if (_zoomTextOnly)
-        _webView.browsingContextController.textZoom = factor;
-    else
-        _webView.browsingContextController.pageZoom = factor;
 }
 
 - (BOOL)canZoomIn
 {
-    return [self currentZoomFactor] * DefaultZoomFactorRatio < DefaultMaximumZoomFactor;
+    return NO;
 }
 
 - (void)zoomIn:(id)sender
@@ -221,7 +234,7 @@
 
 - (BOOL)canZoomOut
 {
-    return [self currentZoomFactor] / DefaultZoomFactorRatio > DefaultMinimumZoomFactor;
+    return NO;
 }
 
 - (void)zoomOut:(id)sender
@@ -233,62 +246,8 @@
     [self setCurrentZoomFactor:factor];
 }
 
-- (BOOL)canResetZoom
-{
-    return _zoomTextOnly ? (_webView.browsingContextController.textZoom != 1) : (_webView.browsingContextController.pageZoom != 1);
-}
-
-- (void)resetZoom:(id)sender
-{
-    if (![self canResetZoom])
-        return;
-
-    if (_zoomTextOnly)
-        _webView.browsingContextController.textZoom = 1;
-    else
-        _webView.browsingContextController.pageZoom = 1;
-}
-
-- (IBAction)toggleZoomMode:(id)sender
-{
-    if (_zoomTextOnly) {
-        _zoomTextOnly = NO;
-        double currentTextZoom = _webView.browsingContextController.textZoom;
-        WKPageSetPageAndTextZoomFactors(_webView.pageRef, currentTextZoom, 1);
-    } else {
-        _zoomTextOnly = YES;
-        double currentPageZoom = _webView.browsingContextController.pageZoom;
-        WKPageSetPageAndTextZoomFactors(_webView.pageRef, 1, currentPageZoom);
-    }
-}
-
-- (BOOL)isPaginated
-{
-    return _webView.browsingContextController.paginationMode != WKPaginationModeUnpaginated;
-}
-
-- (IBAction)togglePaginationMode:(id)sender
-{
-    if ([self isPaginated])
-        _webView.browsingContextController.paginationMode = WKPaginationModeUnpaginated;
-    else {
-        _webView.browsingContextController.paginationMode = WKPaginationModeLeftToRight;
-        _webView.browsingContextController.pageLength = _webView.bounds.size.width / 2;
-        _webView.browsingContextController.gapBetweenPages = 10;
-    }
-}
-
 - (IBAction)toggleTransparentWindow:(id)sender
 {
-    BOOL isTransparent = _webView.drawsTransparentBackground;
-    isTransparent = !isTransparent;
-
-    [[self window] setOpaque:!isTransparent];
-    [[self window] setHasShadow:!isTransparent];
-
-    _webView.drawsTransparentBackground = isTransparent;
-
-    [[self window] display];    
 }
 
 - (BOOL)isUISideCompositingEnabled
@@ -303,290 +262,74 @@
     [userDefaults setBool:newValue forKey:WebKit2UseRemoteLayerTreeDrawingAreaKey];
 }
 
-static void dumpSource(WKStringRef source, WKErrorRef error, void* context)
-{
-    if (!source)
-        return;
-
-    LOG(@"Main frame source\n \"%@\"", CFBridgingRelease(WKStringCopyCFString(0, source)));
-}
-
-- (IBAction)dumpSourceToConsole:(id)sender
-{
-    WKPageGetSourceForFrame(_webView.pageRef, WKPageGetMainFrame(_webView.pageRef), NULL, dumpSource);
-}
-
 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
 {
-    if (context != keyValueObservingContext || object != _webView.browsingContextController)
+    if (context != keyValueObservingContext || object != _webView)
         return;
 
     if ([keyPath isEqualToString:@"title"])
-        self.window.title = [_webView.browsingContextController.title stringByAppendingString:_webView.isUsingUISideCompositing ? @" [WK2 UI]" : @" [WK2]"];
+        self.window.title = [_webView.title stringByAppendingString:@" [WK2]"];
     else if ([keyPath isEqualToString:@"activeURL"])
-        [self updateTextFieldFromURL:_webView.browsingContextController.activeURL];
+        [self updateTextFieldFromURL:_webView.activeURL];
 }
 
-// MARK: UI Client Callbacks
-
-static WKPageRef createNewPage(WKPageRef page, WKURLRequestRef request, WKDictionaryRef features, WKEventModifiers modifiers, WKEventMouseButton button, const void* clientInfo)
+- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)())completionHandler
 {
-    LOG(@"createNewPage");
-    WK2BrowserWindowController *originator = (WK2BrowserWindowController *)clientInfo;
-    WK2BrowserWindowController *controller = [[WK2BrowserWindowController alloc] initWithProcessGroup:originator->_processGroup browsingContextGroup:originator->_browsingContextGroup];
-    [controller loadWindow];
-
-    return WKRetain(controller->_webView.pageRef);
-}
-
-static void showPage(WKPageRef page, const void *clientInfo)
-{
-    LOG(@"showPage");
-    [[(BrowserWindowController *)clientInfo window] orderFront:nil];
-}
-
-static void closePage(WKPageRef page, const void *clientInfo)
-{
-    LOG(@"closePage");
-    WKPageClose(page);
-    [[(BrowserWindowController *)clientInfo window] close];
-}
-
-static void runJavaScriptAlert(WKPageRef page, WKStringRef message, WKFrameRef frame, const void* clientInfo)
-{
     NSAlert* alert = [[NSAlert alloc] init];
 
-    WKURLRef wkURL = WKFrameCopyURL(frame);
-    CFURLRef cfURL = WKURLCopyCFURL(0, wkURL);
-    WKRelease(wkURL);
-
-    [alert setMessageText:[NSString stringWithFormat:@"_javascript_ alert dialog from %@.", [(NSURL *)cfURL absoluteString]]];
-    CFRelease(cfURL);
-
-    CFStringRef cfMessage = WKStringCopyCFString(0, message);
-    [alert setInformativeText:(NSString *)cfMessage];
-    CFRelease(cfMessage);
-
+    [alert setMessageText:[NSString stringWithFormat:@"_javascript_ alert dialog from %@.", [frame.request.URL absoluteString]]];
+    [alert setInformativeText:message];
     [alert addButtonWithTitle:@"OK"];
 
-    [alert runModal];
-    [alert release];
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090
+    [alert beginSheetModalForWindow:self.window completionHandler:^void (NSModalResponse response) {
+        completionHandler();
+        [alert release];
+    }];
+#endif
 }
 
-static bool runJavaScriptConfirm(WKPageRef page, WKStringRef message, WKFrameRef frame, const void* clientInfo)
+- (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL result))completionHandler
 {
     NSAlert* alert = [[NSAlert alloc] init];
 
-    WKURLRef wkURL = WKFrameCopyURL(frame);
-    CFURLRef cfURL = WKURLCopyCFURL(0, wkURL);
-    WKRelease(wkURL);
-
-    [alert setMessageText:[NSString stringWithFormat:@"_javascript_ confirm dialog from %@.", [(NSURL *)cfURL absoluteString]]];
-    CFRelease(cfURL);
-
-    CFStringRef cfMessage = WKStringCopyCFString(0, message);
-    [alert setInformativeText:(NSString *)cfMessage];
-    CFRelease(cfMessage);
-
+    [alert setMessageText:[NSString stringWithFormat:@"_javascript_ confirm dialog from %@.", [frame.request.URL  absoluteString]]];
+    [alert setInformativeText:message];
+    
     [alert addButtonWithTitle:@"OK"];
     [alert addButtonWithTitle:@"Cancel"];
 
-    NSInteger button = [alert runModal];
-    [alert release];
-
-    return button == NSAlertFirstButtonReturn;
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090
+    [alert beginSheetModalForWindow:self.window completionHandler:^void (NSModalResponse response) {
+        completionHandler(response == NSAlertFirstButtonReturn);
+        [alert release];
+    }];
+#endif
 }
 
-static WKStringRef runJavaScriptPrompt(WKPageRef page, WKStringRef message, WKStringRef defaultValue, WKFrameRef frame, const void* clientInfo)
+- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString *result))completionHandler
 {
     NSAlert* alert = [[NSAlert alloc] init];
 
-    WKURLRef wkURL = WKFrameCopyURL(frame);
-    CFURLRef cfURL = WKURLCopyCFURL(0, wkURL);
-    WKRelease(wkURL);
-
-    [alert setMessageText:[NSString stringWithFormat:@"_javascript_ prompt dialog from %@.", [(NSURL *)cfURL absoluteString]]];
-    CFRelease(cfURL);
-
-    CFStringRef cfMessage = WKStringCopyCFString(0, message);
-    [alert setInformativeText:(NSString *)cfMessage];
-    CFRelease(cfMessage);
-
+    [alert setMessageText:[NSString stringWithFormat:@"_javascript_ prompt dialog from %@.", [frame.request.URL absoluteString]]];
+    [alert setInformativeText:prompt];
+    
     [alert addButtonWithTitle:@"OK"];
     [alert addButtonWithTitle:@"Cancel"];
-
+    
     NSTextField* input = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 200, 24)];
-    CFStringRef cfDefaultValue = WKStringCopyCFString(0, defaultValue);
-    [input setStringValue:(NSString *)cfDefaultValue];
-    CFRelease(cfDefaultValue);
-
+    [input setStringValue:defaultText];
     [alert setAccessoryView:input];
-
-    NSInteger button = [alert runModal];
-
-    NSString* result = nil;
-    if (button == NSAlertFirstButtonReturn) {
+    
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090
+    [alert beginSheetModalForWindow:self.window completionHandler:^void (NSModalResponse response) {
         [input validateEditing];
-        result = [input stringValue];
-    }
-
-    [alert release];
-
-    if (!result)
-        return 0;
-    return WKStringCreateWithCFString((CFStringRef)result);
-}
-
-static void setStatusText(WKPageRef page, WKStringRef text, const void* clientInfo)
-{
-    LOG(@"setStatusText");
-}
-
-static void mouseDidMoveOverElement(WKPageRef page, WKHitTestResultRef hitTestResult, WKEventModifiers modifiers, WKTypeRef userData, const void *clientInfo)
-{
-    LOG(@"mouseDidMoveOverElement");
-}
-
-static WKRect getWindowFrame(WKPageRef page, const void* clientInfo)
-{
-    NSRect rect = [[(BrowserWindowController *)clientInfo window] frame];
-    WKRect wkRect;
-    wkRect.origin.x = rect.origin.x;
-    wkRect.origin.y = rect.origin.y;
-    wkRect.size.width = rect.size.width;
-    wkRect.size.height = rect.size.height;
-    return wkRect;
-}
-
-static void setWindowFrame(WKPageRef page, WKRect rect, const void* clientInfo)
-{
-    [[(BrowserWindowController *)clientInfo window] setFrame:NSMakeRect(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height) display:YES];
-}
-
-static bool runBeforeUnloadConfirmPanel(WKPageRef page, WKStringRef message, WKFrameRef frame, const void* clientInfo)
-{
-    NSAlert *alert = [[NSAlert alloc] init];
-
-    WKURLRef wkURL = WKFrameCopyURL(frame);
-    CFURLRef cfURL = WKURLCopyCFURL(0, wkURL);
-    WKRelease(wkURL);
-
-    [alert setMessageText:[NSString stringWithFormat:@"BeforeUnload confirm dialog from %@.", [(NSURL *)cfURL absoluteString]]];
-    CFRelease(cfURL);
-
-    CFStringRef cfMessage = WKStringCopyCFString(0, message);
-    [alert setInformativeText:(NSString *)cfMessage];
-    CFRelease(cfMessage);
-
-    [alert addButtonWithTitle:@"OK"];
-    [alert addButtonWithTitle:@"Cancel"];
-
-    NSInteger button = [alert runModal];
-    [alert release];
-
-    return button == NSAlertFirstButtonReturn;
-}
-
-static void runOpenPanel(WKPageRef page, WKFrameRef frame, WKOpenPanelParametersRef parameters, WKOpenPanelResultListenerRef listener, const void* clientInfo)
-{
-    NSOpenPanel *openPanel = [NSOpenPanel openPanel];
-    [openPanel setAllowsMultipleSelection:WKOpenPanelParametersGetAllowsMultipleFiles(parameters)];
-
-    WKRetain(listener);
-
-    [openPanel beginSheetModalForWindow:[(BrowserWindowController *)clientInfo window] completionHandler:^(NSInteger result) {
-        if (result == NSFileHandlingPanelOKButton) {
-            WKMutableArrayRef fileURLs = WKMutableArrayCreate();
-
-            NSURL *nsURL;
-            for (nsURL in [openPanel URLs]) {
-                WKURLRef wkURL = WKURLCreateWithCFURL((CFURLRef)nsURL);
-                WKArrayAppendItem(fileURLs, wkURL);
-                WKRelease(wkURL);
-            }
-
-            WKOpenPanelResultListenerChooseFiles(listener, fileURLs);
-
-            WKRelease(fileURLs);
-        } else
-            WKOpenPanelResultListenerCancel(listener);
-        
-        WKRelease(listener);
+        completionHandler(response == NSAlertFirstButtonReturn ? [input stringValue] : nil);
+        [alert release];
     }];
+#endif
 }
 
-- (void)awakeFromNib
-{
-    _webView = [[WKView alloc] initWithFrame:[containerView bounds] processGroup:_processGroup browsingContextGroup:_browsingContextGroup];
-
-    _webView.allowsMagnification = YES;
-    _webView.allowsBackForwardNavigationGestures = YES;
-
-    [_webView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
-    [containerView addSubview:_webView];
-
-    [progressIndicator bind:NSHiddenBinding toObject:_webView.browsingContextController withKeyPath:@"loading" options:@{ NSValueTransformerNameBindingOption : NSNegateBooleanTransformerName }];
-    [progressIndicator bind:NSValueBinding toObject:_webView.browsingContextController withKeyPath:@"estimatedProgress" options:nil];
-
-    [_webView.browsingContextController addObserver:self forKeyPath:@"title" options:0 context:keyValueObservingContext];
-    [_webView.browsingContextController addObserver:self forKeyPath:@"activeURL" options:0 context:keyValueObservingContext];
-
-    _webView.browsingContextController.loadDelegate = self;
-    _webView.browsingContextController.policyDelegate = self;
-    _webView.browsingContextController.historyDelegate = self;
-
-    WKPageUIClientV2 uiClient = {
-        { 2, self },
-        0,          /* createNewPage_deprecatedForUseWithV0 */
-        showPage,
-        closePage,
-        0,          /* takeFocus */
-        0,          /* focus */
-        0,          /* unfocus */
-        runJavaScriptAlert,
-        runJavaScriptConfirm,
-        runJavaScriptPrompt,
-        setStatusText,
-        0,          /* mouseDidMoveOverElement_deprecatedForUseWithV0 */
-        0,          /* missingPluginButtonClicked */
-        0,          /* didNotHandleKeyEvent */
-        0,          /* didNotHandleWheelEvent */
-        0,          /* toolbarsAreVisible */
-        0,          /* setToolbarsAreVisible */
-        0,          /* menuBarIsVisible */
-        0,          /* setMenuBarIsVisible */
-        0,          /* statusBarIsVisible */
-        0,          /* setStatusBarIsVisible */
-        0,          /* isResizable */
-        0,          /* setIsResizable */
-        getWindowFrame,
-        setWindowFrame,
-        runBeforeUnloadConfirmPanel,
-        0,          /* didDraw */
-        0,          /* pageDidScroll */
-        0,          /* exceededDatabaseQuota */
-        runOpenPanel,
-        0,          /* decidePolicyForGeolocationPermissionRequest */
-        0, // headerHeight
-        0, // footerHeight
-        0, // drawHeader
-        0, // drawFooter
-        0, // printFrame
-        0, // showModal
-        0, // didCompleteRubberBandForMainFrame
-        0, // saveDataToFileInDownloadsFolder
-        0, // shouldInterruptJavaScript
-        createNewPage,
-        mouseDidMoveOverElement,
-        0, // decidePolicyForNotificationPermissionRequest
-        0, // unavailablePluginButtonClicked_deprecatedForUseWithV1
-        0, // showColorPicker
-        0, // hideColorPicker
-        0, // unavailablePluginButtonClicked
-    };
-    WKPageSetPageUIClient(_webView.pageRef, &uiClient.base);
-}
-
 - (void)updateTextFieldFromURL:(NSURL *)URL
 {
     if (!URL)
@@ -612,103 +355,46 @@
 
 - (IBAction)find:(id)sender
 {
-    WKStringRef string = WKStringCreateWithCFString((CFStringRef)[sender stringValue]);
-
-    WKPageFindString(_webView.pageRef, string, kWKFindOptionsCaseInsensitive | kWKFindOptionsWrapAround | kWKFindOptionsShowFindIndicator | kWKFindOptionsShowOverlay, 100);
 }
 
-#pragma mark WKBrowsingContextLoadDelegate
+#pragma mark WKNavigationDelegate
 
-- (void)browsingContextControllerDidStartProvisionalLoad:(WKBrowsingContextController *)sender
+- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicyDecision))decisionHandler
 {
-    LOG(@"didStartProvisionalLoad");
+    LOG(@"decidePolicyForNavigationResponse");
+    decisionHandler(WKNavigationResponsePolicyDecisionAllow);
 }
 
-- (void)browsingContextControllerDidReceiveServerRedirectForProvisionalLoad:(WKBrowsingContextController *)sender
+- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation
 {
-    LOG(@"didReceiveServerRedirectForProvisionalLoad");
+    LOG(@"didStartProvisionalNavigation");
 }
 
-- (void)browsingContextController:(WKBrowsingContextController *)sender didFailProvisionalLoadWithError:(NSError *)error
+- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation
 {
-    LOG(@"didFailProvisionalLoadWithError: %@", error);
+    LOG(@"didReceiveServerRedirectForProvisionalNavigation");
 }
 
-- (void)browsingContextControllerDidCommitLoad:(WKBrowsingContextController *)sender
+- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error
 {
-    LOG(@"didCommitLoad");
+    LOG(@"didFailProvisionalNavigation: %@", error);
 }
 
-- (void)browsingContextControllerDidFinishLoad:(WKBrowsingContextController *)sender
+- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation
 {
-    LOG(@"didFinishLoad");
+    LOG(@"didCommitNavigation: %@", error);
 }
 
-- (void)browsingContextController:(WKBrowsingContextController *)sender didFailLoadWithError:(NSError *)error
+- (void)webView:(WKWebView *)webView didFinishLoadingNavigation:(WKNavigation *)navigation
 {
-    LOG(@"didFailLoadWithError: %@", error);
+    LOG(@"didFinishLoadingNavigation");
 }
 
-- (void)browsingContextControllerDidChangeBackForwardList:(WKBrowsingContextController *)sender addedItem:(WKBackForwardListItem *)addedItem removedItems:(NSArray *)removedItems
+- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error
 {
-    [self validateToolbar];
+    LOG(@"didFailNavigation: %@", error);
 }
 
-#pragma mark WKBrowsingContextLoadDelegatePrivate
-
-- (BOOL)browsingContextController:(WKBrowsingContextController *)sender canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace
-{
-    LOG(@"canAuthenticateAgainstProtectionSpace: %@", protectionSpace);
-    return YES;
-}
-
-- (void)browsingContextController:(WKBrowsingContextController *)sender didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
-{
-    LOG(@"didReceiveAuthenticationChallenge: %@", challenge);
-    [challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];
-}
-
-#pragma mark WKBrowsingContextPolicyDelegate
-
-- (void)browsingContextController:(WKBrowsingContextController *)browsingContext decidePolicyForNavigationAction:(NSDictionary *)actionInformation decisionHandler:(WKPolicyDecisionHandler)decisionHandler
-{
-    LOG(@"decidePolicyForNavigationAction");
-    decisionHandler(WKPolicyDecisionAllow);
-}
-
-- (void)browsingContextController:(WKBrowsingContextController *)browsingContext decidePolicyForNewWindowAction:(NSDictionary *)actionInformation decisionHandler:(WKPolicyDecisionHandler)decisionHandler
-{
-    LOG(@"decidePolicyForNewWindowAction");
-    decisionHandler(WKPolicyDecisionAllow);
-}
-
-- (void)browsingContextController:(WKBrowsingContextController *)browsingContext decidePolicyForResponseAction:(NSDictionary *)actionInformation decisionHandler:(WKPolicyDecisionHandler)decisionHandler
-{
-    decisionHandler(WKPolicyDecisionAllow);
-}
-
-#pragma mark WKBrowsingContextHistoryDelegate
-
-- (void)browsingContextController:(WKBrowsingContextController *)browsingContextController didNavigateWithNavigationData:(WKNavigationData *)navigationData
-{
-    LOG(@"WKBrowsingContextHistoryDelegate - didNavigateWithNavigationData - title: %@ - url: %@", navigationData.title, navigationData.originalRequest.URL);
-}
-
-- (void)browsingContextController:(WKBrowsingContextController *)browsingContextController didPerformClientRedirectFromURL:(NSURL *)sourceURL toURL:(NSURL *)destinationURL
-{
-    LOG(@"WKBrowsingContextHistoryDelegate - didPerformClientRedirect - fromURL: %@ - toURL: %@", sourceURL, destinationURL);
-}
-
-- (void)browsingContextController:(WKBrowsingContextController *)browsingContextController didPerformServerRedirectFromURL:(NSURL *)sourceURL toURL:(NSURL *)destinationURL
-{
-    LOG(@"WKBrowsingContextHistoryDelegate - didPerformServerRedirect - fromURL: %@ - toURL: %@", sourceURL, destinationURL);
-}
-
-- (void)browsingContextController:(WKBrowsingContextController *)browsingContextController didUpdateHistoryTitle:(NSString *)title forURL:(NSURL *)URL
-{
-    LOG(@"browsingContextController - didUpdateHistoryTitle - title: %@ - URL: %@", title, URL);
-}
-
 @end
 
 #endif // WK_API_ENABLED
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to