Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import "ios/web/web_state/ui/crw_web_controller.h" | 5 #import "ios/web/web_state/ui/crw_web_controller.h" |
| 6 | 6 |
| 7 #import <WebKit/WebKit.h> | 7 #import <WebKit/WebKit.h> |
| 8 | 8 |
| 9 #import <objc/runtime.h> | 9 #import <objc/runtime.h> |
| 10 #include <stddef.h> | 10 #include <stddef.h> |
| 11 | 11 |
| 12 #include <cmath> | 12 #include <cmath> |
| 13 #include <memory> | 13 #include <memory> |
| 14 #include <utility> | 14 #include <utility> |
| 15 | 15 |
| 16 #include "base/callback.h" | |
| 16 #include "base/containers/mru_cache.h" | 17 #include "base/containers/mru_cache.h" |
| 17 #include "base/ios/block_types.h" | 18 #include "base/ios/block_types.h" |
| 18 #include "base/ios/ios_util.h" | 19 #include "base/ios/ios_util.h" |
| 19 #import "base/ios/ns_error_util.h" | 20 #import "base/ios/ns_error_util.h" |
| 20 #include "base/ios/weak_nsobject.h" | 21 #include "base/ios/weak_nsobject.h" |
| 21 #include "base/json/json_reader.h" | 22 #include "base/json/json_reader.h" |
| 22 #include "base/json/json_writer.h" | 23 #include "base/json/json_writer.h" |
| 23 #include "base/json/string_escape.h" | 24 #include "base/json/string_escape.h" |
| 24 #include "base/logging.h" | 25 #include "base/logging.h" |
| 25 #include "base/mac/bind_objc_block.h" | 26 #include "base/mac/bind_objc_block.h" |
| (...skipping 819 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 845 completionHandler: | 846 completionHandler: |
| 846 (void (^)(NSURLSessionAuthChallengeDisposition, | 847 (void (^)(NSURLSessionAuthChallengeDisposition, |
| 847 NSURLCredential*))completionHandler; | 848 NSURLCredential*))completionHandler; |
| 848 // Used in webView:didReceiveAuthenticationChallenge:completionHandler: to reply | 849 // Used in webView:didReceiveAuthenticationChallenge:completionHandler: to reply |
| 849 // with NSURLSessionAuthChallengeDisposition and credentials. | 850 // with NSURLSessionAuthChallengeDisposition and credentials. |
| 850 + (void)processHTTPAuthForUser:(NSString*)user | 851 + (void)processHTTPAuthForUser:(NSString*)user |
| 851 password:(NSString*)password | 852 password:(NSString*)password |
| 852 completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, | 853 completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, |
| 853 NSURLCredential*))completionHandler; | 854 NSURLCredential*))completionHandler; |
| 854 | 855 |
| 856 // Helper to respond to |webView:runJavaScript...| delegate methods. | |
|
Eugene But (OOO till 7-30)
2016/06/24 17:04:52
Please document whether or not |completionHandler|
michaeldo
2016/06/27 20:30:10
you're right, made it non-nil.
| |
| 857 - (void)runJavaScriptDialogOfType:(web::JavaScriptMessageType)type | |
| 858 initiatedByFrame:(WKFrameInfo*)frame | |
| 859 message:(NSString*)message | |
| 860 defaultText:(NSString*)defaultText | |
| 861 completion:(void (^)(BOOL, NSString*))completionHandler; | |
| 862 | |
| 855 // Called when WKWebView estimatedProgress has been changed. | 863 // Called when WKWebView estimatedProgress has been changed. |
| 856 - (void)webViewEstimatedProgressDidChange; | 864 - (void)webViewEstimatedProgressDidChange; |
| 857 // Called when WKWebView certificateChain or hasOnlySecureContent property has | 865 // Called when WKWebView certificateChain or hasOnlySecureContent property has |
| 858 // changed. | 866 // changed. |
| 859 - (void)webViewSecurityFeaturesDidChange; | 867 - (void)webViewSecurityFeaturesDidChange; |
| 860 // Called when WKWebView loading state has been changed. | 868 // Called when WKWebView loading state has been changed. |
| 861 - (void)webViewLoadingStateDidChange; | 869 - (void)webViewLoadingStateDidChange; |
| 862 // Called when WKWebView title has been changed. | 870 // Called when WKWebView title has been changed. |
| 863 - (void)webViewTitleDidChange; | 871 - (void)webViewTitleDidChange; |
| 864 // Called when WKWebView URL has been changed. | 872 // Called when WKWebView URL has been changed. |
| (...skipping 2845 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3710 if (self.shouldSuppressDialogs) { | 3718 if (self.shouldSuppressDialogs) { |
| 3711 [self didSuppressDialog]; | 3719 [self didSuppressDialog]; |
| 3712 completionHandler(NSURLSessionAuthChallengeRejectProtectionSpace, nil); | 3720 completionHandler(NSURLSessionAuthChallengeRejectProtectionSpace, nil); |
| 3713 return; | 3721 return; |
| 3714 } | 3722 } |
| 3715 | 3723 |
| 3716 SEL selector = @selector(webController: | 3724 SEL selector = @selector(webController: |
| 3717 runAuthDialogForProtectionSpace: | 3725 runAuthDialogForProtectionSpace: |
| 3718 proposedCredential: | 3726 proposedCredential: |
| 3719 completionHandler:); | 3727 completionHandler:); |
| 3720 if (![self.UIDelegate respondsToSelector:selector]) { | 3728 if ([self.UIDelegate respondsToSelector:selector]) { |
| 3721 // Embedder does not support HTTP Authentication. | 3729 [self.UIDelegate webController:self |
| 3722 completionHandler(NSURLSessionAuthChallengeRejectProtectionSpace, nil); | 3730 runAuthDialogForProtectionSpace:space |
| 3723 return; | 3731 proposedCredential:challenge.proposedCredential |
| 3732 completionHandler:^(NSString* user, NSString* password) { | |
| 3733 [CRWWebController | |
| 3734 processHTTPAuthForUser:user | |
| 3735 password:password | |
| 3736 completionHandler:completionHandler]; | |
| 3737 }]; | |
| 3738 } else { | |
| 3739 void (^callback)(NSURLSessionAuthChallengeDisposition, NSURLCredential*) = | |
| 3740 nil; | |
| 3741 if (completionHandler) { | |
| 3742 callback = [completionHandler copy]; | |
| 3743 } | |
| 3744 self.webStateImpl->RunAuthDialog( | |
| 3745 space, challenge.proposedCredential, | |
| 3746 base::BindBlock(^(const net::AuthCredentials& credentials) { | |
| 3747 if (callback) { | |
| 3748 [CRWWebController processHTTPAuthForUser:base::SysUTF16ToNSString( | |
| 3749 credentials.username()) | |
| 3750 password:base::SysUTF16ToNSString( | |
| 3751 credentials.password()) | |
| 3752 completionHandler:callback]; | |
| 3753 [callback release]; | |
| 3754 } | |
| 3755 })); | |
| 3724 } | 3756 } |
| 3725 | |
| 3726 [self.UIDelegate webController:self | |
| 3727 runAuthDialogForProtectionSpace:space | |
| 3728 proposedCredential:challenge.proposedCredential | |
| 3729 completionHandler:^(NSString* user, NSString* password) { | |
| 3730 [CRWWebController | |
| 3731 processHTTPAuthForUser:user | |
| 3732 password:password | |
| 3733 completionHandler:completionHandler]; | |
| 3734 }]; | |
| 3735 } | 3757 } |
| 3736 | 3758 |
| 3737 + (void)processHTTPAuthForUser:(NSString*)user | 3759 + (void)processHTTPAuthForUser:(NSString*)user |
| 3738 password:(NSString*)password | 3760 password:(NSString*)password |
| 3739 completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, | 3761 completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, |
| 3740 NSURLCredential*))completionHandler { | 3762 NSURLCredential*))completionHandler { |
| 3741 DCHECK_EQ(user == nil, password == nil); | |
| 3742 if (!user || !password) { | 3763 if (!user || !password) { |
| 3743 // Embedder cancelled authentication. | 3764 // Embedder cancelled authentication or embedder does not support HTTP |
| 3765 // Authentication. | |
| 3744 completionHandler(NSURLSessionAuthChallengeRejectProtectionSpace, nil); | 3766 completionHandler(NSURLSessionAuthChallengeRejectProtectionSpace, nil); |
| 3745 return; | 3767 return; |
| 3746 } | 3768 } |
| 3747 completionHandler( | 3769 completionHandler( |
| 3748 NSURLSessionAuthChallengeUseCredential, | 3770 NSURLSessionAuthChallengeUseCredential, |
| 3749 [NSURLCredential | 3771 [NSURLCredential |
| 3750 credentialWithUser:user | 3772 credentialWithUser:user |
| 3751 password:password | 3773 password:password |
| 3752 persistence:NSURLCredentialPersistenceForSession]); | 3774 persistence:NSURLCredentialPersistenceForSession]); |
| 3753 } | 3775 } |
| 3754 | 3776 |
| 3755 #pragma mark - | 3777 #pragma mark - |
| 3778 #pragma mark JavaScript Dialog | |
| 3779 | |
| 3780 - (void)runJavaScriptDialogOfType:(web::JavaScriptMessageType)type | |
| 3781 initiatedByFrame:(WKFrameInfo*)frame | |
| 3782 message:(NSString*)message | |
| 3783 defaultText:(NSString*)defaultText | |
| 3784 completion:(void (^)(BOOL, NSString*))completionHandler { | |
|
Eugene But (OOO till 7-30)
2016/06/24 17:04:52
I think if you always pass |completionHandler| the
michaeldo
2016/06/27 20:30:10
Agreed, made the completion handler required per y
| |
| 3785 void (^callback)(BOOL, NSString*) = nil; | |
| 3786 if (completionHandler) { | |
| 3787 callback = [completionHandler copy]; | |
|
Eugene But (OOO till 7-30)
2016/06/24 17:04:52
Why do you need a separate |callback| variable? Ca
michaeldo
2016/06/27 20:30:10
Done.
| |
| 3788 } | |
| 3789 self.webStateImpl->RunJavaScriptDialog( | |
| 3790 net::GURLWithNSURL(frame.request.URL), type, message, defaultText, | |
| 3791 base::BindBlock(^(bool success, NSString* input) { | |
| 3792 if (callback) { | |
| 3793 callback(success, input); | |
| 3794 [callback release]; | |
| 3795 } | |
| 3796 })); | |
| 3797 } | |
| 3798 | |
| 3799 #pragma mark - | |
| 3756 #pragma mark TouchTracking | 3800 #pragma mark TouchTracking |
| 3757 | 3801 |
| 3758 - (void)touched:(BOOL)touched { | 3802 - (void)touched:(BOOL)touched { |
| 3759 _clickInProgress = touched; | 3803 _clickInProgress = touched; |
| 3760 if (touched) { | 3804 if (touched) { |
| 3761 self.userInteractionRegistered = YES; | 3805 self.userInteractionRegistered = YES; |
| 3762 _userInteractedWithWebController = YES; | 3806 _userInteractedWithWebController = YES; |
| 3763 if (_isBeingDestroyed) | 3807 if (_isBeingDestroyed) |
| 3764 return; | 3808 return; |
| 3765 const web::NavigationManagerImpl& navigationManager = | 3809 const web::NavigationManagerImpl& navigationManager = |
| (...skipping 913 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4679 [self setDocumentURL:_defaultURL]; | 4723 [self setDocumentURL:_defaultURL]; |
| 4680 } | 4724 } |
| 4681 | 4725 |
| 4682 - (void)removeWebViewAllowingCachedReconstruction:(BOOL)allowCache { | 4726 - (void)removeWebViewAllowingCachedReconstruction:(BOOL)allowCache { |
| 4683 if (!_webView) | 4727 if (!_webView) |
| 4684 return; | 4728 return; |
| 4685 | 4729 |
| 4686 SEL cancelDialogsSelector = @selector(cancelDialogsForWebController:); | 4730 SEL cancelDialogsSelector = @selector(cancelDialogsForWebController:); |
| 4687 if ([self.UIDelegate respondsToSelector:cancelDialogsSelector]) | 4731 if ([self.UIDelegate respondsToSelector:cancelDialogsSelector]) |
| 4688 [self.UIDelegate cancelDialogsForWebController:self]; | 4732 [self.UIDelegate cancelDialogsForWebController:self]; |
| 4733 _webStateImpl->CancelActiveAndPendingDialogs(); | |
| 4689 | 4734 |
| 4690 if (allowCache) | 4735 if (allowCache) |
| 4691 _expectedReconstructionURL = [self currentNavigationURL]; | 4736 _expectedReconstructionURL = [self currentNavigationURL]; |
| 4692 else | 4737 else |
| 4693 _expectedReconstructionURL = GURL(); | 4738 _expectedReconstructionURL = GURL(); |
| 4694 | 4739 |
| 4695 [self abortLoad]; | 4740 [self abortLoad]; |
| 4696 [_webView removeFromSuperview]; | 4741 [_webView removeFromSuperview]; |
| 4697 [_containerView resetContent]; | 4742 [_containerView resetContent]; |
| 4698 [self setWebView:nil]; | 4743 [self setWebView:nil]; |
| 4699 } | 4744 } |
| 4700 | 4745 |
| 4701 - (void)webViewWebProcessDidCrash { | 4746 - (void)webViewWebProcessDidCrash { |
| 4702 _webProcessIsDead = YES; | 4747 _webProcessIsDead = YES; |
| 4703 | 4748 |
| 4704 SEL cancelDialogsSelector = @selector(cancelDialogsForWebController:); | 4749 SEL cancelDialogsSelector = @selector(cancelDialogsForWebController:); |
| 4705 if ([self.UIDelegate respondsToSelector:cancelDialogsSelector]) | 4750 if ([self.UIDelegate respondsToSelector:cancelDialogsSelector]) |
| 4706 [self.UIDelegate cancelDialogsForWebController:self]; | 4751 [self.UIDelegate cancelDialogsForWebController:self]; |
| 4752 _webStateImpl->CancelActiveAndPendingDialogs(); | |
| 4707 | 4753 |
| 4708 SEL rendererCrashSelector = @selector(webControllerWebProcessDidCrash:); | 4754 SEL rendererCrashSelector = @selector(webControllerWebProcessDidCrash:); |
| 4709 if ([self.delegate respondsToSelector:rendererCrashSelector]) | 4755 if ([self.delegate respondsToSelector:rendererCrashSelector]) |
| 4710 [self.delegate webControllerWebProcessDidCrash:self]; | 4756 [self.delegate webControllerWebProcessDidCrash:self]; |
| 4711 } | 4757 } |
| 4712 | 4758 |
| 4713 - (web::WKWebViewConfigurationProvider&)webViewConfigurationProvider { | 4759 - (web::WKWebViewConfigurationProvider&)webViewConfigurationProvider { |
| 4714 web::BrowserState* browserState = self.webStateImpl->GetBrowserState(); | 4760 web::BrowserState* browserState = self.webStateImpl->GetBrowserState(); |
| 4715 return web::WKWebViewConfigurationProvider::FromBrowserState(browserState); | 4761 return web::WKWebViewConfigurationProvider::FromBrowserState(browserState); |
| 4716 } | 4762 } |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4824 [self.delegate webPageOrderedClose]; | 4870 [self.delegate webPageOrderedClose]; |
| 4825 } | 4871 } |
| 4826 } | 4872 } |
| 4827 | 4873 |
| 4828 - (void)webView:(WKWebView*)webView | 4874 - (void)webView:(WKWebView*)webView |
| 4829 runJavaScriptAlertPanelWithMessage:(NSString*)message | 4875 runJavaScriptAlertPanelWithMessage:(NSString*)message |
| 4830 initiatedByFrame:(WKFrameInfo*)frame | 4876 initiatedByFrame:(WKFrameInfo*)frame |
| 4831 completionHandler:(void (^)())completionHandler { | 4877 completionHandler:(void (^)())completionHandler { |
| 4832 if (self.shouldSuppressDialogs) { | 4878 if (self.shouldSuppressDialogs) { |
| 4833 [self didSuppressDialog]; | 4879 [self didSuppressDialog]; |
| 4834 completionHandler(); | 4880 if (completionHandler) { |
| 4881 completionHandler(); | |
| 4882 } | |
| 4835 return; | 4883 return; |
| 4836 } | 4884 } |
| 4837 | 4885 |
| 4838 SEL alertSelector = @selector(webController: | 4886 SEL alertSelector = @selector(webController: |
| 4839 runJavaScriptAlertPanelWithMessage: | 4887 runJavaScriptAlertPanelWithMessage: |
| 4840 requestURL: | 4888 requestURL: |
| 4841 completionHandler:); | 4889 completionHandler:); |
| 4842 if ([self.UIDelegate respondsToSelector:alertSelector]) { | 4890 if ([self.UIDelegate respondsToSelector:alertSelector]) { |
| 4843 [self.UIDelegate webController:self | 4891 [self.UIDelegate webController:self |
| 4844 runJavaScriptAlertPanelWithMessage:message | 4892 runJavaScriptAlertPanelWithMessage:message |
| 4845 requestURL:net::GURLWithNSURL(frame.request.URL) | 4893 requestURL:net::GURLWithNSURL(frame.request.URL) |
| 4846 completionHandler:completionHandler]; | 4894 completionHandler:completionHandler]; |
| 4847 } else if (completionHandler) { | 4895 } else { |
| 4848 completionHandler(); | 4896 void (^completion)(BOOL, NSString*) = nil; |
| 4897 if (completionHandler) { | |
| 4898 completion = ^(BOOL, NSString*) { | |
| 4899 completionHandler(); | |
| 4900 }; | |
| 4901 } | |
| 4902 [self runJavaScriptDialogOfType:web::JAVASCRIPT_MESSAGE_TYPE_ALERT | |
| 4903 initiatedByFrame:frame | |
| 4904 message:message | |
| 4905 defaultText:nil | |
| 4906 completion:completion]; | |
| 4849 } | 4907 } |
| 4850 } | 4908 } |
| 4851 | 4909 |
| 4852 - (void)webView:(WKWebView*)webView | 4910 - (void)webView:(WKWebView*)webView |
| 4853 runJavaScriptConfirmPanelWithMessage:(NSString*)message | 4911 runJavaScriptConfirmPanelWithMessage:(NSString*)message |
| 4854 initiatedByFrame:(WKFrameInfo*)frame | 4912 initiatedByFrame:(WKFrameInfo*)frame |
| 4855 completionHandler: | 4913 completionHandler: |
| 4856 (void (^)(BOOL result))completionHandler { | 4914 (void (^)(BOOL result))completionHandler { |
| 4857 if (self.shouldSuppressDialogs) { | 4915 if (self.shouldSuppressDialogs) { |
| 4858 [self didSuppressDialog]; | 4916 [self didSuppressDialog]; |
| 4859 completionHandler(NO); | 4917 completionHandler(NO); |
| 4860 return; | 4918 return; |
| 4861 } | 4919 } |
| 4862 | 4920 |
| 4863 SEL confirmationSelector = @selector(webController: | 4921 SEL confirmationSelector = @selector(webController: |
| 4864 runJavaScriptConfirmPanelWithMessage: | 4922 runJavaScriptConfirmPanelWithMessage: |
| 4865 requestURL: | 4923 requestURL: |
| 4866 completionHandler:); | 4924 completionHandler:); |
| 4867 if ([self.UIDelegate respondsToSelector:confirmationSelector]) { | 4925 if ([self.UIDelegate respondsToSelector:confirmationSelector]) { |
| 4868 [self.UIDelegate webController:self | 4926 [self.UIDelegate webController:self |
| 4869 runJavaScriptConfirmPanelWithMessage:message | 4927 runJavaScriptConfirmPanelWithMessage:message |
| 4870 requestURL:net::GURLWithNSURL( | 4928 requestURL:net::GURLWithNSURL( |
| 4871 frame.request.URL) | 4929 frame.request.URL) |
| 4872 completionHandler:completionHandler]; | 4930 completionHandler:completionHandler]; |
| 4873 } else if (completionHandler) { | 4931 } else { |
| 4874 completionHandler(NO); | 4932 void (^completion)(BOOL, NSString*) = nil; |
| 4933 if (completionHandler) { | |
| 4934 completion = ^(BOOL success, NSString*) { | |
| 4935 completionHandler(success); | |
| 4936 }; | |
| 4937 } | |
| 4938 [self runJavaScriptDialogOfType:web::JAVASCRIPT_MESSAGE_TYPE_CONFIRM | |
| 4939 initiatedByFrame:frame | |
| 4940 message:message | |
| 4941 defaultText:nil | |
| 4942 completion:completion]; | |
| 4875 } | 4943 } |
| 4876 } | 4944 } |
| 4877 | 4945 |
| 4878 - (void)webView:(WKWebView*)webView | 4946 - (void)webView:(WKWebView*)webView |
| 4879 runJavaScriptTextInputPanelWithPrompt:(NSString*)prompt | 4947 runJavaScriptTextInputPanelWithPrompt:(NSString*)prompt |
| 4880 defaultText:(NSString*)defaultText | 4948 defaultText:(NSString*)defaultText |
| 4881 initiatedByFrame:(WKFrameInfo*)frame | 4949 initiatedByFrame:(WKFrameInfo*)frame |
| 4882 completionHandler: | 4950 completionHandler: |
| 4883 (void (^)(NSString* result))completionHandler { | 4951 (void (^)(NSString* result))completionHandler { |
| 4884 GURL origin(web::GURLOriginWithWKSecurityOrigin(frame.securityOrigin)); | 4952 GURL origin(web::GURLOriginWithWKSecurityOrigin(frame.securityOrigin)); |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 4901 defaultText: | 4969 defaultText: |
| 4902 requestURL: | 4970 requestURL: |
| 4903 completionHandler:); | 4971 completionHandler:); |
| 4904 if ([self.UIDelegate respondsToSelector:textInputSelector]) { | 4972 if ([self.UIDelegate respondsToSelector:textInputSelector]) { |
| 4905 GURL requestURL = net::GURLWithNSURL(frame.request.URL); | 4973 GURL requestURL = net::GURLWithNSURL(frame.request.URL); |
| 4906 [self.UIDelegate webController:self | 4974 [self.UIDelegate webController:self |
| 4907 runJavaScriptTextInputPanelWithPrompt:prompt | 4975 runJavaScriptTextInputPanelWithPrompt:prompt |
| 4908 defaultText:defaultText | 4976 defaultText:defaultText |
| 4909 requestURL:requestURL | 4977 requestURL:requestURL |
| 4910 completionHandler:completionHandler]; | 4978 completionHandler:completionHandler]; |
| 4911 } else if (completionHandler) { | 4979 } else { |
| 4912 completionHandler(nil); | 4980 void (^completion)(BOOL, NSString*) = nil; |
| 4981 if (completionHandler) { | |
| 4982 completion = ^(BOOL, NSString* input) { | |
| 4983 completionHandler(input); | |
| 4984 }; | |
| 4985 } | |
| 4986 [self runJavaScriptDialogOfType:web::JAVASCRIPT_MESSAGE_TYPE_PROMPT | |
| 4987 initiatedByFrame:frame | |
| 4988 message:prompt | |
| 4989 defaultText:defaultText | |
| 4990 completion:completion]; | |
| 4913 } | 4991 } |
| 4914 } | 4992 } |
| 4915 | 4993 |
| 4916 #pragma mark - | 4994 #pragma mark - |
| 4917 #pragma mark WKNavigationDelegate Methods | 4995 #pragma mark WKNavigationDelegate Methods |
| 4918 | 4996 |
| 4919 - (void)webView:(WKWebView*)webView | 4997 - (void)webView:(WKWebView*)webView |
| 4920 decidePolicyForNavigationAction:(WKNavigationAction*)action | 4998 decidePolicyForNavigationAction:(WKNavigationAction*)action |
| 4921 decisionHandler: | 4999 decisionHandler: |
| 4922 (void (^)(WKNavigationActionPolicy))decisionHandler { | 5000 (void (^)(WKNavigationActionPolicy))decisionHandler { |
| (...skipping 666 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5589 } | 5667 } |
| 5590 | 5668 |
| 5591 return web::WEB_VIEW_DOCUMENT_TYPE_GENERIC; | 5669 return web::WEB_VIEW_DOCUMENT_TYPE_GENERIC; |
| 5592 } | 5670 } |
| 5593 | 5671 |
| 5594 - (NSString*)refererFromNavigationAction:(WKNavigationAction*)action { | 5672 - (NSString*)refererFromNavigationAction:(WKNavigationAction*)action { |
| 5595 return [action.request valueForHTTPHeaderField:@"Referer"]; | 5673 return [action.request valueForHTTPHeaderField:@"Referer"]; |
| 5596 } | 5674 } |
| 5597 | 5675 |
| 5598 @end | 5676 @end |
| OLD | NEW |