-webView:updateHistoryTitle:forURL: does not pass a frame to the delegate
authormitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 16 May 2013 20:50:06 +0000 (20:50 +0000)
committermitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 16 May 2013 20:50:06 +0000 (20:50 +0000)
https://bugs.webkit.org/show_bug.cgi?id=116243

Reviewed by Anders Carlsson.

Added a WebFrame parameter to the delegate method.

* WebCoreSupport/WebFrameLoaderClient.mm:
(WebFrameLoaderClient::setTitle): Pass the frame to the delegate. Maintain
compatibility with clients that implement the old delegate method that
doesn’t take a frame.
* WebView/WebDelegateImplementationCaching.h:
(WebHistoryDelegateImplementationCache): Added a field to cache the
implementation of the old delegate method.
* WebView/WebHistoryDelegate.h: Changed the signature of the delegate method.
* WebView/WebView.mm:
(-[WebView _cacheHistoryDelegateImplementations]): Cache the implementation
of the new delegate method, but also check for the old one.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@150205 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/mac/ChangeLog
Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
Source/WebKit/mac/WebView/WebDelegateImplementationCaching.h
Source/WebKit/mac/WebView/WebHistoryDelegate.h
Source/WebKit/mac/WebView/WebView.mm

index f710cbb..4578e88 100644 (file)
@@ -1,3 +1,24 @@
+2013-05-16  Dan Bernstein  <mitz@apple.com>
+
+        -webView:updateHistoryTitle:forURL: does not pass a frame to the delegate
+        https://bugs.webkit.org/show_bug.cgi?id=116243
+
+        Reviewed by Anders Carlsson.
+
+        Added a WebFrame parameter to the delegate method.
+
+        * WebCoreSupport/WebFrameLoaderClient.mm:
+        (WebFrameLoaderClient::setTitle): Pass the frame to the delegate. Maintain
+        compatibility with clients that implement the old delegate method that
+        doesn’t take a frame.
+        * WebView/WebDelegateImplementationCaching.h:
+        (WebHistoryDelegateImplementationCache): Added a field to cache the
+        implementation of the old delegate method.
+        * WebView/WebHistoryDelegate.h: Changed the signature of the delegate method.
+        * WebView/WebView.mm:
+        (-[WebView _cacheHistoryDelegateImplementations]): Cache the implementation
+        of the new delegate method, but also check for the old one.
+
 2013-05-16  Simon Fraser  <simon.fraser@apple.com>
 
         Re-land r150168 with some OS version guards.
index 76dcbb7..cd9d353 100644 (file)
@@ -1173,11 +1173,12 @@ void WebFrameLoaderClient::setTitle(const StringWithDirection& title, const KURL
     
     if ([view historyDelegate]) {
         WebHistoryDelegateImplementationCache* implementations = WebViewGetHistoryDelegateImplementations(view);
-        if (!implementations->setTitleFunc)
-            return;
-            
         // FIXME: use direction of title.
-        CallHistoryDelegate(implementations->setTitleFunc, view, @selector(webView:updateHistoryTitle:forURL:), (NSString *)title.string(), (NSString *)url);
+        if (implementations->setTitleFunc)
+            CallHistoryDelegate(implementations->setTitleFunc, view, @selector(webView:updateHistoryTitle:forURL:inFrame:), (NSString *)title.string(), (NSString *)url, m_webFrame.get());
+        else if (implementations->deprecatedSetTitleFunc)
+            CallHistoryDelegate(implementations->deprecatedSetTitleFunc, view, @selector(webView:updateHistoryTitle:forURL:), (NSString *)title.string(), (NSString *)url);
+
         return;
     }
     
index e661981..6931bd2 100644 (file)
@@ -101,6 +101,7 @@ struct WebHistoryDelegateImplementationCache {
     IMP navigatedFunc;
     IMP clientRedirectFunc;
     IMP serverRedirectFunc;
+    IMP deprecatedSetTitleFunc;
     IMP setTitleFunc;
     IMP populateVisitedLinksFunc;
 };
index 4415365..f34391e 100644 (file)
@@ -37,7 +37,7 @@
 
 - (void)webView:(WebView *)webView didPerformServerRedirectFromURL:(NSString *)sourceURL toURL:(NSString *)destinationURL inFrame:(WebFrame *)webFrame;
 
-- (void)webView:(WebView *)webView updateHistoryTitle:(NSString *)title forURL:(NSString *)url;
+- (void)webView:(WebView *)webView updateHistoryTitle:(NSString *)title forURL:(NSString *)url inFrame:(WebFrame *)webFrame;
 
 - (void)populateVisitedLinksForWebView:(WebView *)webView;
 
index 805cdb9..6d63c8c 100644 (file)
@@ -1720,7 +1720,8 @@ static inline IMP getMethod(id o, SEL s)
     cache->navigatedFunc = getMethod(delegate, @selector(webView:didNavigateWithNavigationData:inFrame:));
     cache->clientRedirectFunc = getMethod(delegate, @selector(webView:didPerformClientRedirectFromURL:toURL:inFrame:));
     cache->serverRedirectFunc = getMethod(delegate, @selector(webView:didPerformServerRedirectFromURL:toURL:inFrame:));
-    cache->setTitleFunc = getMethod(delegate, @selector(webView:updateHistoryTitle:forURL:));
+    cache->deprecatedSetTitleFunc = getMethod(delegate, @selector(webView:updateHistoryTitle:forURL:));
+    cache->setTitleFunc = getMethod(delegate, @selector(webView:updateHistoryTitle:forURL:inFrame:));
     cache->populateVisitedLinksFunc = getMethod(delegate, @selector(populateVisitedLinksForWebView:));
 }