diff options
Diffstat (limited to 'WebKitTools/MiniBrowser/mac/BrowserWindowController.m')
-rw-r--r-- | WebKitTools/MiniBrowser/mac/BrowserWindowController.m | 102 |
1 files changed, 94 insertions, 8 deletions
diff --git a/WebKitTools/MiniBrowser/mac/BrowserWindowController.m b/WebKitTools/MiniBrowser/mac/BrowserWindowController.m index 9d2f8a6..234c04c 100644 --- a/WebKitTools/MiniBrowser/mac/BrowserWindowController.m +++ b/WebKitTools/MiniBrowser/mac/BrowserWindowController.m @@ -33,6 +33,11 @@ - (void)didStartProgress; - (void)didChangeProgress:(double)value; - (void)didFinishProgress; +- (void)didStartProvisionalLoadForFrame:(WKFrameRef)frame; +- (void)didCommitLoadForFrame:(WKFrameRef)frame; +- (void)didReceiveServerRedirectForProvisionalLoadForFrame:(WKFrameRef)frame; +- (void)didFailProvisionalLoadWithErrorForFrame:(WKFrameRef)frame; +- (void)didFailLoadWithErrorForFrame:(WKFrameRef)frame; @end @implementation BrowserWindowController @@ -98,6 +103,34 @@ [_webView setNeedsDisplay:YES]; } +- (IBAction)goBack:(id)sender +{ + WKPageGoBack(_webView.pageRef); +} + +- (IBAction)goForward:(id)sender +{ + WKPageGoForward(_webView.pageRef); +} + +- (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)item +{ + SEL action = [item action]; + + if (action == @selector(goBack:)) + return _webView && WKPageCanGoBack(_webView.pageRef); + + if (action == @selector(goForward:)) + return _webView && WKPageCanGoForward(_webView.pageRef); + + return YES; +} + +- (void)validateToolbar +{ + [toolbar validateVisibleItems]; +} + - (BOOL)windowShouldClose:(id)sender { LOG(@"windowShouldClose"); @@ -121,22 +154,22 @@ static void _didStartProvisionalLoadForFrame(WKPageRef page, WKFrameRef frame, const void *clientInfo) { - LOG(@"didStartProvisionalLoadForFrame"); + [(BrowserWindowController *)clientInfo didStartProvisionalLoadForFrame:frame]; } static void _didReceiveServerRedirectForProvisionalLoadForFrame(WKPageRef page, WKFrameRef frame, const void *clientInfo) { - LOG(@"didReceiveServerRedirectForProvisionalLoadForFrame"); + [(BrowserWindowController *)clientInfo didReceiveServerRedirectForProvisionalLoadForFrame:frame]; } static void _didFailProvisionalLoadWithErrorForFrame(WKPageRef page, WKFrameRef frame, const void *clientInfo) { - LOG(@"didFailProvisionalLoadWithErrorForFrame"); + [(BrowserWindowController *)clientInfo didFailProvisionalLoadWithErrorForFrame:frame]; } static void _didCommitLoadForFrame(WKPageRef page, WKFrameRef frame, const void *clientInfo) { - LOG(@"didCommitLoadForFrame"); + [(BrowserWindowController *)clientInfo didCommitLoadForFrame:frame]; } static void _didFinishLoadForFrame(WKPageRef page, WKFrameRef frame, const void *clientInfo) @@ -146,7 +179,7 @@ static void _didFinishLoadForFrame(WKPageRef page, WKFrameRef frame, const void static void _didFailLoadWithErrorForFrame(WKPageRef page, WKFrameRef frame, const void *clientInfo) { - LOG(@"didFailLoadWithErrorForFrame"); + [(BrowserWindowController *)clientInfo didFailLoadWithErrorForFrame:frame]; } static void _didReceiveTitleForFrame(WKPageRef page, WKStringRef title, WKFrameRef frame, const void *clientInfo) @@ -191,15 +224,20 @@ static void _didBecomeResponsive(WKPageRef page, const void *clientInfo) LOG(@"didBecomeResponsive"); } +static void _didChangeBackForwardList(WKPageRef page, const void *clientInfo) +{ + [(BrowserWindowController *)clientInfo validateToolbar]; +} + #pragma mark Policy Client Callbacks -static void _decidePolicyForNavigationAction(WKPageRef page, uint32_t navigationType, WKURLRef url, WKFrameRef frame, WKFramePolicyListenerRef listener, const void *clientInfo) +static void _decidePolicyForNavigationAction(WKPageRef page, WKFrameNavigationType navigationType, WKURLRef url, WKFrameRef frame, WKFramePolicyListenerRef listener, const void *clientInfo) { LOG(@"decidePolicyForNavigationAction"); WKFramePolicyListenerUse(listener); } -static void _decidePolicyForNewWindowAction(WKPageRef page, uint32_t navigationType, WKURLRef url, WKFrameRef frame, WKFramePolicyListenerRef listener, const void *clientInfo) +static void _decidePolicyForNewWindowAction(WKPageRef page, WKFrameNavigationType navigationType, WKURLRef url, WKFrameRef frame, WKFramePolicyListenerRef listener, const void *clientInfo) { LOG(@"decidePolicyForNewWindowAction"); WKFramePolicyListenerUse(listener); @@ -317,7 +355,8 @@ static void _didUpdateHistoryTitle(WKPageRef page, WKStringRef title, WKURLRef U _didChangeProgress, _didFinishProgress, _didBecomeUnresponsive, - _didBecomeResponsive + _didBecomeResponsive, + _didChangeBackForwardList }; WKPageSetPageLoaderClient(_webView.pageRef, &loadClient); @@ -369,6 +408,53 @@ static void _didUpdateHistoryTitle(WKPageRef page, WKStringRef title, WKURLRef U [progressIndicator setDoubleValue:1.0]; } +- (void)updateProvisionalURLForFrame:(WKFrameRef)frame +{ + WKURLRef url = WKFrameGetProvisionalURL(frame); + if (!url) + return; + + CFURLRef cfSourceURL = WKURLCopyCFURL(0, url); + [urlText setStringValue:(NSString*)CFURLGetString(cfSourceURL)]; + CFRelease(cfSourceURL); +} + +- (void)didStartProvisionalLoadForFrame:(WKFrameRef)frame +{ + if (!WKFrameIsMainFrame(frame)) + return; + + [self updateProvisionalURLForFrame:frame]; +} + +- (void)didReceiveServerRedirectForProvisionalLoadForFrame:(WKFrameRef)frame +{ + if (!WKFrameIsMainFrame(frame)) + return; + + [self updateProvisionalURLForFrame:frame]; +} + +- (void)didFailProvisionalLoadWithErrorForFrame:(WKFrameRef)frame +{ + if (!WKFrameIsMainFrame(frame)) + return; + + [self updateProvisionalURLForFrame:frame]; +} + +- (void)didFailLoadWithErrorForFrame:(WKFrameRef)frame +{ + if (!WKFrameIsMainFrame(frame)) + return; + + [self updateProvisionalURLForFrame:frame]; +} + +- (void)didCommitLoadForFrame:(WKFrameRef)frame +{ +} + - (void)loadURLString:(NSString *)urlString { // FIXME: We shouldn't have to set the url text here. |