Index: ios/web/web_state/ui/crw_web_controller_unittest.mm |
diff --git a/ios/web/web_state/ui/crw_web_controller_unittest.mm b/ios/web/web_state/ui/crw_web_controller_unittest.mm |
index ab1d48b7fc201fa8394b516c9a7df9ab36ca1e3f..701cfd10f102e362a805acd624e624fe2da7b2e9 100644 |
--- a/ios/web/web_state/ui/crw_web_controller_unittest.mm |
+++ b/ios/web/web_state/ui/crw_web_controller_unittest.mm |
@@ -4,7 +4,6 @@ |
#import "ios/web/web_state/ui/crw_web_controller.h" |
-#import <UIKit/UIKit.h> |
#import <WebKit/WebKit.h> |
#include <utility> |
@@ -52,10 +51,6 @@ |
using web::NavigationManagerImpl; |
-@interface TestWebController (PrivateTesting) |
-- (void)reloadInternal; |
-@end |
- |
@interface CRWWebController (PrivateAPI) |
@property(nonatomic, readwrite) web::PageDisplayState pageDisplayState; |
@property(nonatomic, readonly) CRWWebControllerContainerView* containerView; |
@@ -63,18 +58,6 @@ using web::NavigationManagerImpl; |
- (void)removeDocumentLoadCommandsFromQueue; |
- (GURL)URLForHistoryNavigationFromItem:(web::NavigationItem*)fromItem |
toItem:(web::NavigationItem*)toItem; |
-- (BOOL)checkForUnexpectedURLChange; |
-- (void)injectEarlyInjectionScripts; |
-- (void)stopExpectingURLChangeIfNecessary; |
-@end |
- |
-@implementation TestWebController (PrivateTesting) |
- |
-- (void)reloadInternal { |
- // Empty implementation to prevent the need to mock out a huge number of |
- // calls. |
-} |
- |
@end |
// Used to mock CRWWebDelegate methods with C++ params. |
@@ -213,45 +196,8 @@ typedef BOOL (^openExternalURLBlockType)(const GURL&); |
namespace { |
-NSString* const kGetMessageQueueJavaScript = |
- @"window.__gCrWeb === undefined ? '' : __gCrWeb.message.getMessageQueue()"; |
- |
-NSString* kCheckURLJavaScript = |
- @"try{" |
- "window.__gCrWeb_Verifying = true;" |
- "if(!window.__gCrWeb_CachedRequest||" |
- "!(window.__gCrWeb_CachedRequestDocument===window.document)){" |
- "window.__gCrWeb_CachedRequest = new XMLHttpRequest();" |
- "window.__gCrWeb_CachedRequestDocument = window.document;" |
- "}" |
- "window.__gCrWeb_CachedRequest.open('POST'," |
- "'https://localhost:0/crwebiossecurity',false);" |
- "window.__gCrWeb_CachedRequest.send();" |
- "}catch(e){" |
- "try{" |
- "window.__gCrWeb_CachedRequest.open('POST'," |
- "'/crwebiossecurity/b86b97a1-2ce0-44fd-a074-e2158790c98d',false);" |
- "window.__gCrWeb_CachedRequest.send();" |
- "}catch(e2){}" |
- "}" |
- "delete window.__gCrWeb_Verifying;" |
- "window.location.href"; |
- |
NSString* kTestURLString = @"http://www.google.com/"; |
-NSMutableURLRequest* requestForCrWebInvokeCommandAndKey(NSString* command, |
- NSString* key) { |
- NSString* fullCommand = |
- [NSString stringWithFormat:@"[{\"command\":\"%@\"}]", command]; |
- NSCharacterSet* noCharacters = |
- [NSCharacterSet characterSetWithCharactersInString:@""]; |
- NSString* escapedCommand = [fullCommand |
- stringByAddingPercentEncodingWithAllowedCharacters:noCharacters]; |
- NSString* urlString = |
- [NSString stringWithFormat:@"crwebinvoke://%@/#%@", key, escapedCommand]; |
- return [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]]; |
-} |
- |
// Returns true if the current device is a large iPhone (6 or 6+). |
bool IsIPhone6Or6Plus() { |
UIUserInterfaceIdiom idiom = [[UIDevice currentDevice] userInterfaceIdiom]; |
@@ -289,13 +235,12 @@ void WaitForZoomRendering(CRWWebController* webController, |
}); |
} |
-// A mixin class for testing CRWWKWebViewWebController or |
-// CRWUIWebViewWebController. Stubs out WebView and child CRWWebController. |
-template <typename WebTestT> |
-class WebControllerTest : public WebTestT { |
+// Test fixture for testing CRWWebController. Stubs out web view and |
+// child CRWWebController. |
+class CRWWebControllerTest : public web::WebTestWithWKWebViewWebController { |
protected: |
- virtual void SetUp() override { |
- WebTestT::SetUp(); |
+ void SetUp() override { |
+ web::WebTestWithWKWebViewWebController::SetUp(); |
mockWebView_.reset(CreateMockWebView()); |
mockScrollView_.reset([[UIScrollView alloc] init]); |
[[[mockWebView_ stub] andReturn:mockScrollView_.get()] scrollView]; |
@@ -304,14 +249,14 @@ class WebControllerTest : public WebTestT { |
[OCMockObject niceMockForProtocol:@protocol(CRWWebDelegate)]; |
mockDelegate_.reset([[MockInteractionLoader alloc] |
initWithRepresentedObject:originalMockDelegate]); |
- [WebTestT::webController_ setDelegate:mockDelegate_]; |
+ [webController_ setDelegate:mockDelegate_]; |
base::scoped_nsobject<TestWebViewContentView> webViewContentView( |
[[TestWebViewContentView alloc] initWithMockWebView:mockWebView_ |
scrollView:mockScrollView_]); |
- [WebTestT::webController_ injectWebViewContentView:webViewContentView]; |
+ [webController_ injectWebViewContentView:webViewContentView]; |
NavigationManagerImpl& navigationManager = |
- [WebTestT::webController_ webStateImpl]->GetNavigationManagerImpl(); |
+ [webController_ webStateImpl]->GetNavigationManagerImpl(); |
navigationManager.InitializeSession(@"name", nil, NO, 0); |
[navigationManager.GetSessionController() |
addPendingEntry:GURL("http://www.google.com/?q=foo#bar") |
@@ -322,65 +267,21 @@ class WebControllerTest : public WebTestT { |
mockChildWebController_.reset([[OCMockObject |
mockForProtocol:@protocol(CRWWebControllerScripting)] retain]); |
[[[mockDelegate_ stub] andReturn:mockChildWebController_.get()] |
- webController:WebTestT::webController_ |
+ webController:webController_ |
scriptingInterfaceForWindowNamed:@"http://www.google.com/#newtab"]; |
} |
- virtual void TearDown() override { |
+ void TearDown() override { |
EXPECT_OCMOCK_VERIFY(mockDelegate_); |
EXPECT_OCMOCK_VERIFY(mockChildWebController_.get()); |
EXPECT_OCMOCK_VERIFY(mockWebView_); |
- [WebTestT::webController_ resetInjectedWebViewContentView]; |
- [WebTestT::webController_ setDelegate:nil]; |
- WebTestT::TearDown(); |
+ [webController_ resetInjectedWebViewContentView]; |
+ [webController_ setDelegate:nil]; |
+ web::WebTestWithWKWebViewWebController::TearDown(); |
} |
// Creates WebView mock. |
- virtual UIView* CreateMockWebView() const = 0; |
- |
- // Simulates a load request delegate call from the web view. |
- virtual void SimulateLoadRequest(NSURLRequest* request) const = 0; |
- |
- base::scoped_nsobject<UIScrollView> mockScrollView_; |
- base::scoped_nsobject<id> mockWebView_; |
- base::scoped_nsobject<id> mockDelegate_; |
- base::scoped_nsobject<id> mockChildWebController_; |
-}; |
- |
-class CRWUIWebViewWebControllerTest |
- : public WebControllerTest<web::WebTestWithUIWebViewWebController> { |
- protected: |
- UIView* CreateMockWebView() const override { |
- id result = [[OCMockObject mockForClass:[UIWebView class]] retain]; |
- [[[result stub] andReturn:nil] request]; |
- [[result stub] setDelegate:OCMOCK_ANY]; // Called by resetInjectedWebView |
- // Stub out the injection process. |
- [[[result stub] andReturn:@"object"] |
- stringByEvaluatingJavaScriptFromString: |
- @"try { typeof __gCrWeb; } catch (e) { 'undefined'; }"]; |
- [[[result stub] andReturn:@"object"] |
- stringByEvaluatingJavaScriptFromString:@"try { typeof " |
- @"__gCrWeb.windowIdObject; } " |
- @"catch (e) { 'undefined'; }"]; |
- return result; |
- } |
- void SimulateLoadRequest(NSURLRequest* request) const override { |
- id<UIWebViewDelegate> delegate = |
- static_cast<id<UIWebViewDelegate>>(webController_.get()); |
- [delegate webView:(UIWebView*)mockWebView_ |
- shouldStartLoadWithRequest:request |
- navigationType:UIWebViewNavigationTypeLinkClicked]; |
- } |
-}; |
- |
-class CRWWKWebViewWebControllerTest |
- : public WebControllerTest<web::WebTestWithWKWebViewWebController> { |
- protected: |
- void SetUp() override { |
- CR_TEST_REQUIRES_WK_WEB_VIEW(); |
- WebControllerTest<web::WebTestWithWKWebViewWebController>::SetUp(); |
- } |
- UIView* CreateMockWebView() const override { |
+ UIView* CreateMockWebView() const { |
id result = [[OCMockObject mockForClass:[WKWebView class]] retain]; |
// Called by resetInjectedWebView |
@@ -403,415 +304,16 @@ class CRWWKWebViewWebControllerTest |
return result; |
} |
- void SimulateLoadRequest(NSURLRequest* request) const override { |
- // TODO(eugenebut): implement this method. |
- } |
-}; |
- |
-TEST_F(CRWUIWebViewWebControllerTest, CrWebInvokeWithIncorrectKey) { |
- NSURLRequest* request = [NSURLRequest |
- requestWithURL:[NSURL URLWithString:@"crwebinvoke:invalidkey#commands"]]; |
- |
- SimulateLoadRequest(request); |
-} |
- |
-TEST_F(CRWUIWebViewWebControllerTest, CrWebInvokeWithLargeQueue) { |
- // Pre-define test window id. |
- [webController_ setWindowId:@"12345678901234567890123456789012"]; |
- NSString* valid_key = [webController_ windowId]; |
- [[[mockWebView_ stub] andReturn:kTestURLString] |
- stringByEvaluatingJavaScriptFromString:kCheckURLJavaScript]; |
- |
- // Install an observer to handle custom command messages. |
- base::scoped_nsobject<CountingObserver> observer( |
- [[CountingObserver alloc] init]); |
- [webController_ addObserver:observer]; |
- |
- // Queue a lot of messages. |
- [webController_ setJsMessageQueueThrottled:YES]; |
- const int kNumQueuedMessages = 1000; |
- for (int i = 0; i < kNumQueuedMessages; ++i) { |
- NSMutableURLRequest* request = |
- requestForCrWebInvokeCommandAndKey(@"wctest.largequeue", valid_key); |
- [request setMainDocumentURL:[NSURL URLWithString:kTestURLString]]; |
- SimulateLoadRequest(request); |
- } |
- |
- // Verify the queue still works and all messages are delivered. |
- [webController_ setJsMessageQueueThrottled:NO]; |
- EXPECT_EQ(kNumQueuedMessages, [observer messageCount]); |
- |
- [webController_ removeObserver:observer]; |
-} |
- |
-TEST_F(CRWUIWebViewWebControllerTest, |
- CrWebInvokeWithAllMessagesFromCurrentWindow) { |
- // Pre-define test window id. |
- [webController_ setWindowId:@"12345678901234567890123456789012"]; |
- NSString* valid_key = [webController_ windowId]; |
- [[[mockWebView_ stub] andReturn:kTestURLString] |
- stringByEvaluatingJavaScriptFromString:kCheckURLJavaScript]; |
- |
- // Install an observer to handle custom command messages. |
- base::scoped_nsobject<CountingObserver> observer( |
- [[CountingObserver alloc] init]); |
- [webController_ addObserver:observer]; |
- |
- // Queue messages. |
- [webController_ setJsMessageQueueThrottled:YES]; |
- NSMutableURLRequest* request = |
- requestForCrWebInvokeCommandAndKey(@"wctest.currentwindow1", valid_key); |
- [request setMainDocumentURL:[NSURL URLWithString:kTestURLString]]; |
- SimulateLoadRequest(request); |
- request = |
- requestForCrWebInvokeCommandAndKey(@"wctest.currentwindow2", valid_key); |
- [request setMainDocumentURL:[NSURL URLWithString:kTestURLString]]; |
- SimulateLoadRequest(request); |
- |
- // Verify the behavior. |
- [webController_ setJsMessageQueueThrottled:NO]; |
- EXPECT_EQ(2, [observer messageCount]); |
- |
- [webController_ removeObserver:observer]; |
-} |
- |
-TEST_F(CRWUIWebViewWebControllerTest, |
- CrWebInvokeWithMessagesFromDifferentWindows) { |
stuartmorgan
2016/01/28 22:24:46
Shouldn't we be rewriting this (and maybe some of
Eugene But (OOO till 7-30)
2016/02/02 22:55:02
How about I file a bug to write those tests? There
|
- // Pre-define test window id. |
- [webController_ setWindowId:@"DEADBEEFDEADBEEFDEADBEEFDEADBEEF"]; |
- NSString* valid_key = [webController_ windowId]; |
- [[[mockWebView_ stub] andReturn:kTestURLString] |
- stringByEvaluatingJavaScriptFromString:kCheckURLJavaScript]; |
- |
- // Install an observer to handle custom command messages. |
- base::scoped_nsobject<CountingObserver> observer( |
- [[CountingObserver alloc] init]); |
- [webController_ addObserver:observer]; |
- |
- // Queue messages. |
- [webController_ setJsMessageQueueThrottled:YES]; |
- NSMutableURLRequest* request = |
- requestForCrWebInvokeCommandAndKey(@"wctest.diffwindow1", valid_key); |
- [request setMainDocumentURL:[NSURL URLWithString:kTestURLString]]; |
- SimulateLoadRequest(request); |
- |
- // Second queued message will come with a new window id. |
- [webController_ setWindowId:@"12345678901234567890123456789012"]; |
- valid_key = [webController_ windowId]; |
- request = |
- requestForCrWebInvokeCommandAndKey(@"wctest.diffwindow2", valid_key); |
- [request setMainDocumentURL:[NSURL URLWithString:kTestURLString]]; |
- SimulateLoadRequest(request); |
- |
- [webController_ setJsMessageQueueThrottled:NO]; |
- EXPECT_EQ(1, [observer messageCount]); |
- |
- [webController_ removeObserver:observer]; |
-} |
- |
-TEST_F(CRWUIWebViewWebControllerTest, CrWebInvokeWithSameOrigin) { |
- // Pre-define test window id. |
- [webController_ setWindowId:@"12345678901234567890123456789012"]; |
- NSString* valid_key = [webController_ windowId]; |
- [[[mockWebView_ stub] andReturn:@"http://www.google.com/foo"] |
- stringByEvaluatingJavaScriptFromString:kCheckURLJavaScript]; |
- |
- // Install an observer to handle custom command messages. |
- base::scoped_nsobject<CountingObserver> observer( |
- [[CountingObserver alloc] init]); |
- [webController_ addObserver:observer]; |
- |
- // Queue message. |
- [webController_ setJsMessageQueueThrottled:YES]; |
- NSMutableURLRequest* request = |
- requestForCrWebInvokeCommandAndKey(@"wctest.sameorigin", valid_key); |
- // Make originURL different from currentURL but keep the origin the same. |
- [request |
- setMainDocumentURL:[NSURL URLWithString:@"http://www.google.com/bar"]]; |
- SimulateLoadRequest(request); |
- // Verify the behavior. |
- [webController_ setJsMessageQueueThrottled:NO]; |
- EXPECT_EQ(1, [observer messageCount]); |
- |
- [webController_ removeObserver:observer]; |
-} |
- |
-TEST_F(CRWUIWebViewWebControllerTest, CrWebInvokeWithDifferentOrigin) { |
- // Pre-define test window id. |
- [webController_ setWindowId:@"12345678901234567890123456789012"]; |
- NSString* valid_key = [webController_ windowId]; |
- [[[mockWebView_ stub] andReturn:@"http://www.google.com/"] |
- stringByEvaluatingJavaScriptFromString:kCheckURLJavaScript]; |
- |
- // Install an observer to handle custom command messages. |
- base::scoped_nsobject<CountingObserver> observer( |
- [[CountingObserver alloc] init]); |
- [webController_ addObserver:observer]; |
- |
- // Queue message. |
- [webController_ setJsMessageQueueThrottled:YES]; |
- NSMutableURLRequest* request = |
- requestForCrWebInvokeCommandAndKey(@"wctest.difforigin", valid_key); |
- // Make originURL have a different scheme from currentURL so that the origin |
- // is different. |
- [request setMainDocumentURL:[NSURL URLWithString:@"https://www.google.com/"]]; |
- SimulateLoadRequest(request); |
- // Verify the behavior. |
- [webController_ setJsMessageQueueThrottled:NO]; |
- EXPECT_EQ(0, [observer messageCount]); |
- |
- [webController_ removeObserver:observer]; |
-} |
- |
-TEST_F(CRWUIWebViewWebControllerTest, EmptyMessageQueue) { |
- [[[mockWebView_ stub] andReturn:@"[]"] |
- stringByEvaluatingJavaScriptFromString:kGetMessageQueueJavaScript]; |
- |
- NSURLRequest* request = |
- [NSURLRequest requestWithURL:[NSURL URLWithString:@"chrome:"]]; |
- |
- SimulateLoadRequest(request); |
-}; |
- |
-TEST_F(CRWUIWebViewWebControllerTest, WindowOpenBlankURL) { |
- NSString* messageQueueJSON = @"[{" |
- "\"command\" : \"window.open\", " |
- "\"target\" : \"newtab\", " |
- "\"url\" : \"\", " |
- "\"referrerPolicy\" : \"default\" }]"; |
- |
- SEL selector = |
- @selector(webPageOrderedOpen:referrer:windowName:inBackground:); |
- [mockDelegate_ onSelector:selector |
- callBlockExpectation:^(const GURL& url, const web::Referrer& referrer, |
- NSString* windowName, BOOL inBackground) { |
- EXPECT_EQ(url, GURL("about:blank")); |
- EXPECT_EQ(referrer.url, GURL("http://www.google.com?q=foo#bar")); |
- EXPECT_NSEQ(windowName, @"http://www.google.com/#newtab"); |
- EXPECT_FALSE(inBackground); |
- }]; |
- [[[mockWebView_ stub] andReturn:messageQueueJSON] |
- stringByEvaluatingJavaScriptFromString:kGetMessageQueueJavaScript]; |
- [[[mockWebView_ stub] andReturn:kTestURLString] |
- stringByEvaluatingJavaScriptFromString:kCheckURLJavaScript]; |
- |
- NSMutableURLRequest* request = |
- [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"chrome:"]]; |
- [request setMainDocumentURL:[NSURL URLWithString:kTestURLString]]; |
- [webController_ touched:YES]; |
- SimulateLoadRequest(request); |
- |
- LoadCommands(messageQueueJSON, net::GURLWithNSURL(request.mainDocumentURL), |
- YES); |
-} |
- |
-TEST_F(CRWUIWebViewWebControllerTest, WindowOpenWithInteraction) { |
- NSString* messageQueueJSON = @"[{" |
- "\"command\" : \"window.open\", " |
- "\"target\" : \"newtab\", " |
- "\"url\" : \"http://chromium.org\", " |
- "\"referrerPolicy\" : \"default\" }]"; |
- |
- SEL selector = |
- @selector(webPageOrderedOpen:referrer:windowName:inBackground:); |
- [mockDelegate_ onSelector:selector |
- callBlockExpectation:^(const GURL& url, const web::Referrer& referrer, |
- NSString* windowName, BOOL inBackground) { |
- EXPECT_EQ(url, GURL("http://chromium.org")); |
- EXPECT_EQ(referrer.url, GURL("http://www.google.com?q=foo#bar")); |
- EXPECT_NSEQ(windowName, @"http://www.google.com/#newtab"); |
- EXPECT_FALSE(inBackground); |
- }]; |
- [[[mockWebView_ stub] andReturn:messageQueueJSON] |
- stringByEvaluatingJavaScriptFromString:kGetMessageQueueJavaScript]; |
- [[[mockWebView_ stub] andReturn:kTestURLString] |
- stringByEvaluatingJavaScriptFromString:kCheckURLJavaScript]; |
- |
- NSMutableURLRequest* request = |
- [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"chrome:"]]; |
- [request setMainDocumentURL:[NSURL URLWithString:kTestURLString]]; |
- [webController_ touched:YES]; |
- SimulateLoadRequest(request); |
- |
- LoadCommands(messageQueueJSON, net::GURLWithNSURL(request.mainDocumentURL), |
- YES); |
-}; |
- |
-TEST_F(CRWUIWebViewWebControllerTest, WindowOpenWithFinishingInteraction) { |
- NSString* messageQueueJSON = @"[{" |
- "\"command\" : \"window.open\", " |
- "\"target\" : \"newtab\", " |
- "\"url\" : \"http://chromium.org\", " |
- "\"referrerPolicy\" : \"default\" }]"; |
- |
- SEL selector = |
- @selector(webPageOrderedOpen:referrer:windowName:inBackground:); |
- [mockDelegate_ onSelector:selector |
- callBlockExpectation:^(const GURL& url, const web::Referrer& referrer, |
- NSString* windowName, BOOL inBackground) { |
- EXPECT_EQ(url, GURL("http://chromium.org")); |
- EXPECT_EQ(referrer.url, GURL("http://www.google.com?q=foo#bar")); |
- EXPECT_NSEQ(windowName, @"http://www.google.com/#newtab"); |
- EXPECT_FALSE(inBackground); |
- }]; |
- [[[mockWebView_ stub] andReturn:kTestURLString] |
- stringByEvaluatingJavaScriptFromString:kCheckURLJavaScript]; |
- |
- NSMutableURLRequest* request = |
- [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"chrome:"]]; |
- [request setMainDocumentURL:[NSURL URLWithString:kTestURLString]]; |
- [webController_ touched:YES]; |
- [webController_ touched:NO]; |
- SimulateLoadRequest(request); |
- |
- LoadCommands(messageQueueJSON, net::GURLWithNSURL(request.mainDocumentURL), |
- YES); |
-}; |
- |
-TEST_F(CRWUIWebViewWebControllerTest, WindowOpenWithoutInteraction) { |
- NSString* messageQueueJSON = @"[{" |
- "\"command\" : \"window.open\", " |
- "\"target\" : \"newtab\", " |
- "\"url\" : \"http://chromium.org\", " |
- "\"referrerPolicy\" : \"default\" }]"; |
- [[[mockWebView_ stub] andReturn:kTestURLString] |
- stringByEvaluatingJavaScriptFromString:kCheckURLJavaScript]; |
- |
- NSMutableURLRequest* request = |
- [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"chrome:"]]; |
- [request setMainDocumentURL:[NSURL URLWithString:kTestURLString]]; |
- SimulateLoadRequest(request); |
- |
- LoadCommands(messageQueueJSON, net::GURLWithNSURL(request.mainDocumentURL), |
- NO); |
- |
- MockInteractionLoader* delegate = (MockInteractionLoader*)mockDelegate_; |
- EXPECT_EQ("http://www.google.com/?q=foo#bar", [delegate sourceURL].spec()); |
- EXPECT_EQ("http://chromium.org/", [delegate popupURL].spec()); |
- |
- EXPECT_TRUE([delegate blockedPopupInfo]); |
-}; |
- |
-TEST_F(CRWUIWebViewWebControllerTest, WindowClose) { |
- NSString* messageQueueJSON = @"[{" |
- "\"command\" : \"window.close\", " |
- "\"target\" : \"newtab\" }]"; |
- |
- [[mockChildWebController_ expect] orderClose]; |
- |
- NSMutableURLRequest* request = |
- [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"chrome:"]]; |
- [request setMainDocumentURL:[NSURL URLWithString:kTestURLString]]; |
- [[[mockWebView_ stub] andReturn:kTestURLString] |
- stringByEvaluatingJavaScriptFromString:kCheckURLJavaScript]; |
- |
- SimulateLoadRequest(request); |
- |
- LoadCommands(messageQueueJSON, net::GURLWithNSURL(request.mainDocumentURL), |
- YES); |
-}; |
- |
-TEST_F(CRWUIWebViewWebControllerTest, WindowStop) { |
- NSString* messageQueueJSON = @"[{" |
- "\"command\" : \"window.stop\", " |
- "\"target\" : \"newtab\" }]"; |
- |
- [[mockChildWebController_ expect] stopLoading]; |
- |
- NSMutableURLRequest* request = |
- [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"chrome:"]]; |
- [request setMainDocumentURL:[NSURL URLWithString:kTestURLString]]; |
- [[[mockWebView_ stub] andReturn:kTestURLString] |
- stringByEvaluatingJavaScriptFromString:kCheckURLJavaScript]; |
- |
- SimulateLoadRequest(request); |
- |
- LoadCommands(messageQueueJSON, net::GURLWithNSURL(request.mainDocumentURL), |
- YES); |
-}; |
- |
-TEST_F(CRWUIWebViewWebControllerTest, DocumentWrite) { |
- NSString* messageQueueJSON = @"[{" |
- "\"command\" : \"window.document.write\", " |
- "\"target\" : \"newtab\", " |
- "\"html\" : \"<html></html>\" }]"; |
- |
- [[mockChildWebController_ expect] loadHTML:@"<html></html>"]; |
- [[[mockWebView_ stub] andReturn:kTestURLString] |
- stringByEvaluatingJavaScriptFromString:kCheckURLJavaScript]; |
- |
- NSMutableURLRequest* request = |
- [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"chrome:"]]; |
- [request setMainDocumentURL:[NSURL URLWithString:kTestURLString]]; |
- SimulateLoadRequest(request); |
- |
- LoadCommands(messageQueueJSON, net::GURLWithNSURL(request.mainDocumentURL), |
- YES); |
-}; |
- |
-TEST_F(CRWUIWebViewWebControllerTest, UnicodeEncoding) { |
- base::scoped_nsobject<UIWebView> testWebView( |
- [[UIWebView alloc] initWithFrame:CGRectZero]); |
- NSArray* unicodeArray = @[ |
- @"ascii", |
- @"unicode £´∑∂∆˚√˜ß∂", |
- @"˜ǯ˜Â‚·´ÎÔ´„ÅÒ", |
- @"adª™£nÎÍlansdn", |
- @"אבדלמצש", |
- @"صسخبئغفىي", |
- @"ऒतॲहड़६ॼ", |
- ]; |
- for (NSString* unicodeString in unicodeArray) { |
- NSString* encodeJS = |
- [NSString stringWithFormat:@"encodeURIComponent('%@');", unicodeString]; |
- NSString* encodedString = |
- [testWebView stringByEvaluatingJavaScriptFromString:encodeJS]; |
- NSString* decodedString = [encodedString stringByRemovingPercentEncoding]; |
- EXPECT_NSEQ(unicodeString, decodedString); |
- } |
-}; |
-// Tests the removal of document.loaded and document.present commands in the |
-// CRWJSInvokeParameterQueue. Only applicable for UIWebView. |
-TEST_F(CRWUIWebViewWebControllerTest, PageLoadCommandRemoval) { |
- [[[mockWebView_ stub] andReturn:@"[]"] |
- stringByEvaluatingJavaScriptFromString:kGetMessageQueueJavaScript]; |
- [[[mockWebView_ stub] andReturn:kTestURLString] |
- stringByEvaluatingJavaScriptFromString:kCheckURLJavaScript]; |
- |
- // Pre-define test window id. |
- [webController_ setWindowId:@"12345678901234567890123456789012"]; |
- NSString* valid_key = [webController_ windowId]; |
- |
- // Add some commands to the queue. |
- [webController_ setJsMessageQueueThrottled:YES]; |
- NSURLRequest* request = |
- requestForCrWebInvokeCommandAndKey(@"document.present", valid_key); |
- SimulateLoadRequest(request); |
- request = requestForCrWebInvokeCommandAndKey(@"document.loaded", valid_key); |
- SimulateLoadRequest(request); |
- request = |
- requestForCrWebInvokeCommandAndKey(@"window.history.forward", valid_key); |
- SimulateLoadRequest(request); |
- |
- // Check the queue size before and after removing document load commands. |
- NSUInteger expectedBeforeCount = 3; |
- NSUInteger expectedAfterCount = 1; |
- ASSERT_EQ(expectedBeforeCount, |
- [[static_cast<CRWUIWebViewWebController*>(webController_) |
- jsInvokeParameterQueue] queueLength]); |
- [webController_ removeDocumentLoadCommandsFromQueue]; |
- ASSERT_EQ(expectedAfterCount, |
- [[static_cast<CRWUIWebViewWebController*>(webController_) |
- jsInvokeParameterQueue] queueLength]); |
- [webController_ setJsMessageQueueThrottled:NO]; |
+ base::scoped_nsobject<UIScrollView> mockScrollView_; |
+ base::scoped_nsobject<id> mockWebView_; |
+ base::scoped_nsobject<id> mockDelegate_; |
+ base::scoped_nsobject<id> mockChildWebController_; |
}; |
#define MAKE_URL(url_string) GURL([url_string UTF8String]) |
-WEB_TEST_F(CRWUIWebViewWebControllerTest, |
- CRWWKWebViewWebControllerTest, |
- URLForHistoryNavigation) { |
+TEST_F(CRWWebControllerTest, UrlForHistoryNavigation) { |
NSArray* urlsNoFragments = @[ |
@"http://one.com", |
@"http://two.com/", |
@@ -839,8 +341,8 @@ WEB_TEST_F(CRWUIWebViewWebControllerTest, |
fromItem.SetURL(MAKE_URL(start)); |
toItem.SetURL(MAKE_URL(end)); |
EXPECT_EQ(MAKE_URL(end), |
- [this->webController_ URLForHistoryNavigationFromItem:&fromItem |
- toItem:&toItem]); |
+ [webController_ URLForHistoryNavigationFromItem:&fromItem |
+ toItem:&toItem]); |
} |
} |
// Both contain fragments: the end url is never changed. |
@@ -849,8 +351,8 @@ WEB_TEST_F(CRWUIWebViewWebControllerTest, |
fromItem.SetURL(MAKE_URL(start)); |
toItem.SetURL(MAKE_URL(end)); |
EXPECT_EQ(MAKE_URL(end), |
- [this->webController_ URLForHistoryNavigationFromItem:&fromItem |
- toItem:&toItem]); |
+ [webController_ URLForHistoryNavigationFromItem:&fromItem |
+ toItem:&toItem]); |
} |
} |
for (unsigned start_index = 0; start_index < [urlsWithFragments count]; |
@@ -863,17 +365,16 @@ WEB_TEST_F(CRWUIWebViewWebControllerTest, |
// The URLs have nothing in common, they are left untouched. |
fromItem.SetURL(MAKE_URL(start)); |
toItem.SetURL(MAKE_URL(end)); |
- EXPECT_EQ(MAKE_URL(end), [this->webController_ |
- URLForHistoryNavigationFromItem:&fromItem |
- toItem:&toItem]); |
+ EXPECT_EQ(MAKE_URL(end), |
+ [webController_ URLForHistoryNavigationFromItem:&fromItem |
+ toItem:&toItem]); |
} else { |
// Start contains a fragment and matches end: An empty fragment is |
// added. |
fromItem.SetURL(MAKE_URL(start)); |
toItem.SetURL(MAKE_URL(end)); |
- EXPECT_EQ( |
- MAKE_URL([end stringByAppendingString:@"#"]), |
- [this->webController_ URLForHistoryNavigationFromItem:&fromItem |
+ EXPECT_EQ(MAKE_URL([end stringByAppendingString:@"#"]), |
+ [webController_ URLForHistoryNavigationFromItem:&fromItem |
toItem:&toItem]); |
} |
} |
@@ -882,9 +383,7 @@ WEB_TEST_F(CRWUIWebViewWebControllerTest, |
// Tests that presentSSLError:forSSLStatus:recoverable:callback: is called with |
// correct arguments if WKWebView fails to load a page with bad SSL cert. |
-TEST_F(CRWWKWebViewWebControllerTest, SSLCertError) { |
- CR_TEST_REQUIRES_WK_WEB_VIEW(); |
- |
+TEST_F(CRWWebControllerTest, SslCertError) { |
ASSERT_FALSE([mockDelegate_ SSLInfo].is_valid()); |
scoped_refptr<net::X509Certificate> cert = |
@@ -917,53 +416,27 @@ TEST_F(CRWWKWebViewWebControllerTest, SSLCertError) { |
EXPECT_TRUE([mockDelegate_ shouldContinueCallback]); |
} |
-// None of the |CRWUIWebViewWebControllerTest| setup is needed; |
-typedef web::WebTestWithUIWebViewWebController |
- CRWUIWebControllerPageDialogsOpenPolicyTest; |
- |
// None of the |CRWWKWebViewWebControllerTest| setup is needed; |
typedef web::WebTestWithWKWebViewWebController |
- CRWWKWebControllerPageDialogsOpenPolicyTest; |
+ CRWWebControllerPageDialogsOpenPolicyTest; |
-WEB_TEST_F(CRWUIWebControllerPageDialogsOpenPolicyTest, |
- CRWWKWebControllerPageDialogsOpenPolicyTest, |
- SuppressPolicy) { |
- this->LoadHtml(@"<html><body></body></html>"); |
+TEST_F(CRWWebControllerPageDialogsOpenPolicyTest, SuppressPolicy) { |
+ LoadHtml(@"<html><body></body></html>"); |
id delegate = [OCMockObject niceMockForProtocol:@protocol(CRWWebDelegate)]; |
- [[delegate expect] webControllerDidSuppressDialog:this->webController_]; |
+ [[delegate expect] webControllerDidSuppressDialog:webController_]; |
- [this->webController_ setDelegate:delegate]; |
- [this->webController_ setPageDialogOpenPolicy:web::DIALOG_POLICY_SUPPRESS]; |
- this->RunJavaScript(@"alert('')"); |
+ [webController_ setDelegate:delegate]; |
+ [webController_ setPageDialogOpenPolicy:web::DIALOG_POLICY_SUPPRESS]; |
+ RunJavaScript(@"alert('')"); |
- this->WaitForBackgroundTasks(); |
+ WaitForBackgroundTasks(); |
EXPECT_OCMOCK_VERIFY(delegate); |
- [this->webController_ setDelegate:nil]; |
-}; |
- |
-// A separate test class, as none of the |CRWUIWebViewWebControllerTest| setup |
-// is needed; |
-class CRWUIWebControllerPageScrollStateTest |
- : public web::WebTestWithUIWebViewWebController { |
- protected: |
- // Returns a web::PageDisplayState that will scroll a UIWebView to |
- // |scrollOffset| and zoom the content by |relativeZoomScale|. |
- inline web::PageDisplayState CreateTestPageDisplayState( |
- CGPoint scroll_offset, |
- CGFloat relative_zoom_scale, |
- CGFloat original_minimum_zoom_scale, |
- CGFloat original_maximum_zoom_scale, |
- CGFloat original_zoom_scale) const { |
- return web::PageDisplayState( |
- scroll_offset.x, scroll_offset.y, |
- original_minimum_zoom_scale / relative_zoom_scale, |
- original_maximum_zoom_scale / relative_zoom_scale, 1.0); |
- } |
+ [webController_ setDelegate:nil]; |
}; |
-// A separate test class, as none of the |CRWUIWebViewWebControllerTest| setup |
-// is needed; |
-class CRWWKWebControllerPageScrollStateTest |
+// A separate test class, as none of the |CRWWebControllerTest| setup is |
+// needed. |
+class CRWWebControllerPageScrollStateTest |
: public web::WebTestWithWKWebViewWebController { |
protected: |
// Returns a web::PageDisplayState that will scroll a WKWebView to |
@@ -982,18 +455,15 @@ class CRWWKWebControllerPageScrollStateTest |
}; |
// TODO(iOS): Flaky on the bots. crbug/493427 |
-WEB_TEST_F(CRWUIWebControllerPageScrollStateTest, |
- CRWWKWebControllerPageScrollStateTest, |
- FLAKY_SetPageDisplayStateWithUserScalableDisabled) { |
+TEST_F(CRWWebControllerPageScrollStateTest, |
+ FLAKY_SetPageDisplayStateWithUserScalableDisabled) { |
#if !TARGET_IPHONE_SIMULATOR |
- // This test fails flakily on device with WKWebView, so skip it there. |
- // crbug.com/453530 |
- if ([this->webController_ webViewType] == web::WK_WEB_VIEW_TYPE) |
- return; |
+ // TODO(crbug.com/453530): fails flakily on device, so skip it there. |
+ return; |
#endif |
web::PageZoomState zoom_state(1.0, 5.0, 1.0); |
- this->LoadHtml(GetHTMLForZoomState(zoom_state, PAGE_SCALABILITY_DISABLED)); |
- CRWWebController* web_controller = this->webController_.get(); |
+ LoadHtml(GetHTMLForZoomState(zoom_state, PAGE_SCALABILITY_DISABLED)); |
+ CRWWebController* web_controller = webController_.get(); |
WaitForZoomRendering(web_controller, zoom_state); |
web::PageZoomState original_zoom_state = |
web_controller.pageDisplayState.zoom_state(); |
@@ -1001,11 +471,11 @@ WEB_TEST_F(CRWUIWebControllerPageScrollStateTest, |
web::NavigationManager* nagivation_manager = |
web_controller.webState->GetNavigationManager(); |
nagivation_manager->GetLastCommittedItem()->SetPageDisplayState( |
- this->CreateTestPageDisplayState(CGPointMake(1.0, 1.0), // scroll offset |
- 3.0, // relative zoom scale |
- 1.0, // original minimum zoom scale |
- 5.0, // original maximum zoom scale |
- 1.0)); // original zoom scale |
+ CreateTestPageDisplayState(CGPointMake(1.0, 1.0), // scroll offset |
+ 3.0, // relative zoom scale |
+ 1.0, // original minimum zoom scale |
+ 5.0, // original maximum zoom scale |
+ 1.0)); // original zoom scale |
[web_controller restoreStateFromHistory]; |
// |-restoreStateFromHistory| is async; wait for its completion. |
@@ -1017,22 +487,21 @@ WEB_TEST_F(CRWUIWebControllerPageScrollStateTest, |
}; |
// TODO(iOS): Flaky on the bots. crbug/493427 |
-WEB_TEST_F(CRWUIWebControllerPageScrollStateTest, |
- CRWWKWebControllerPageScrollStateTest, |
- FLAKY_SetPageDisplayStateWithUserScalableEnabled) { |
+TEST_F(CRWWebControllerPageScrollStateTest, |
+ FLAKY_SetPageDisplayStateWithUserScalableEnabled) { |
web::PageZoomState zoom_state(1.0, 10.0, 1.0); |
- this->LoadHtml(GetHTMLForZoomState(zoom_state, PAGE_SCALABILITY_ENABLED)); |
- CRWWebController* web_controller = this->webController_.get(); |
+ LoadHtml(GetHTMLForZoomState(zoom_state, PAGE_SCALABILITY_ENABLED)); |
+ CRWWebController* web_controller = webController_.get(); |
WaitForZoomRendering(web_controller, zoom_state); |
web::NavigationManager* nagivation_manager = |
web_controller.webState->GetNavigationManager(); |
nagivation_manager->GetLastCommittedItem()->SetPageDisplayState( |
- this->CreateTestPageDisplayState(CGPointMake(1.0, 1.0), // scroll offset |
- 3.0, // relative zoom scale |
- 1.0, // original minimum zoom scale |
- 10.0, // original maximum zoom scale |
- 1.0)); // original zoom scale |
+ CreateTestPageDisplayState(CGPointMake(1.0, 1.0), // scroll offset |
+ 3.0, // relative zoom scale |
+ 1.0, // original minimum zoom scale |
+ 10.0, // original maximum zoom scale |
+ 1.0)); // original zoom scale |
[web_controller restoreStateFromHistory]; |
// |-restoreStateFromHistory| is async; wait for its completion. |
@@ -1047,29 +516,25 @@ WEB_TEST_F(CRWUIWebControllerPageScrollStateTest, |
}; |
// TODO(iOS): Flaky on the bots. crbug/493427 |
-WEB_TEST_F(CRWUIWebControllerPageScrollStateTest, |
- CRWWKWebControllerPageScrollStateTest, |
- FLAKY_AtTop) { |
- // This test fails on iPhone 6/6+ with WKWebView; skip until it's fixed. |
- // crbug.com/453105 |
- if ([this->webController_ webViewType] == web::WK_WEB_VIEW_TYPE && |
- IsIPhone6Or6Plus()) |
+TEST_F(CRWWebControllerPageScrollStateTest, FLAKY_AtTop) { |
+ // This test fails on iPhone 6/6+; skip until it's fixed. crbug.com/453105 |
+ if (IsIPhone6Or6Plus()) |
return; |
web::PageZoomState zoom_state = web::PageZoomState(1.0, 5.0, 1.0); |
- this->LoadHtml(GetHTMLForZoomState(zoom_state, PAGE_SCALABILITY_ENABLED)); |
- CRWWebController* web_controller = this->webController_.get(); |
+ LoadHtml(GetHTMLForZoomState(zoom_state, PAGE_SCALABILITY_ENABLED)); |
+ CRWWebController* web_controller = webController_.get(); |
WaitForZoomRendering(web_controller, zoom_state); |
ASSERT_TRUE(web_controller.atTop); |
web::NavigationManager* nagivation_manager = |
web_controller.webState->GetNavigationManager(); |
nagivation_manager->GetLastCommittedItem()->SetPageDisplayState( |
- this->CreateTestPageDisplayState(CGPointMake(0.0, 30.0), // scroll offset |
- 5.0, // relative zoom scale |
- 1.0, // original minimum zoom scale |
- 5.0, // original maximum zoom scale |
- 1.0)); // original zoom scale |
+ CreateTestPageDisplayState(CGPointMake(0.0, 30.0), // scroll offset |
+ 5.0, // relative zoom scale |
+ 1.0, // original minimum zoom scale |
+ 5.0, // original maximum zoom scale |
+ 1.0)); // original zoom scale |
[web_controller restoreStateFromHistory]; |
// |-restoreStateFromHistory| is async; wait for its completion. |
@@ -1080,232 +545,32 @@ WEB_TEST_F(CRWUIWebControllerPageScrollStateTest, |
ASSERT_FALSE(web_controller.atTop); |
}; |
-// Tests that evaluateJavaScript:completionHandler: properly forwards the |
-// call to UIWebView. |
-TEST_F(CRWUIWebViewWebControllerTest, JavaScriptEvaluation) { |
- NSString* kTestScript = @"script"; |
- NSString* kTestResult = @"result"; |
- NSString* scriptWithIDCheck = |
- [webController_ scriptByAddingWindowIDCheckForScript:kTestScript]; |
- [[[mockWebView_ stub] andReturn:kTestResult] |
- stringByEvaluatingJavaScriptFromString:scriptWithIDCheck]; |
- |
- __block BOOL completionBlockWasCalled = NO; |
- [webController_ evaluateJavaScript:kTestScript |
- stringResultHandler:^(NSString* string, NSError* error) { |
- completionBlockWasCalled = YES; |
- EXPECT_NSEQ(kTestResult, string); |
- EXPECT_EQ(nil, error); |
- }]; |
- |
- // Wait until JavaScript is evaluated. |
- base::test::ios::WaitUntilCondition(^bool() { |
- return completionBlockWasCalled; |
- }); |
- EXPECT_TRUE(completionBlockWasCalled); |
-}; |
- |
-TEST_F(CRWUIWebViewWebControllerTest, POSTRequestCache) { |
- GURL url("http://www.google.fr/"); |
- NSString* mixedCaseCookieHeaderName = @"cOoKiE"; |
- NSString* otherHeaderName = @"Myheader"; |
- NSString* otherHeaderValue = @"A"; |
- NSString* otherHeaderIncorrectValue = @"C"; |
- |
- scoped_ptr<web::NavigationItemImpl> item(new web::NavigationItemImpl()); |
- item->SetURL(url); |
- item->SetTransitionType(ui::PAGE_TRANSITION_FORM_SUBMIT); |
- item->set_is_renderer_initiated(true); |
- base::scoped_nsobject<CRWSessionEntry> currentEntry( |
- [[CRWSessionEntry alloc] initWithNavigationItem:std::move(item)]); |
- base::scoped_nsobject<NSMutableURLRequest> request( |
- [[NSMutableURLRequest alloc] initWithURL:net::NSURLWithGURL(url)]); |
- [request setHTTPMethod:@"POST"]; |
- [request setValue:otherHeaderValue forHTTPHeaderField:otherHeaderName]; |
- [request setValue:@"B" forHTTPHeaderField:mixedCaseCookieHeaderName]; |
- // No data is cached initially. |
- EXPECT_EQ(nil, [currentEntry navigationItemImpl]->GetPostData()); |
- EXPECT_EQ(nil, [currentEntry navigationItem]->GetHttpRequestHeaders()); |
- // Streams are not cached. |
- [request setHTTPBodyStream:[NSInputStream inputStreamWithData:[NSData data]]]; |
- [webController_ cachePOSTDataForRequest:request inSessionEntry:currentEntry]; |
- EXPECT_EQ(nil, [currentEntry navigationItemImpl]->GetPostData()); |
- EXPECT_EQ(nil, [currentEntry navigationItem]->GetHttpRequestHeaders()); |
- [request setHTTPBodyStream:nil]; |
- // POST Data is cached. Cookie headers are stripped, no matter their case. |
- base::scoped_nsobject<NSData> body([[NSData alloc] init]); |
- [request setHTTPBody:body]; |
- [webController_ cachePOSTDataForRequest:request inSessionEntry:currentEntry]; |
- EXPECT_EQ(body.get(), [currentEntry navigationItemImpl]->GetPostData()); |
- EXPECT_NSEQ([currentEntry navigationItem]->GetHttpRequestHeaders(), |
- @{otherHeaderName : otherHeaderValue}); |
- // A new request will not change the cached version. |
- base::scoped_nsobject<NSData> body2([[NSData alloc] init]); |
- [request setValue:otherHeaderIncorrectValue |
- forHTTPHeaderField:otherHeaderName]; |
- [request setHTTPBody:body2]; |
- EXPECT_EQ(body.get(), [currentEntry navigationItemImpl]->GetPostData()); |
- EXPECT_NSEQ([currentEntry navigationItem]->GetHttpRequestHeaders(), |
- @{otherHeaderName : otherHeaderValue}); |
-} |
- |
-class WebControllerJSEvaluationTest : public CRWUIWebViewWebControllerTest { |
- protected: |
- void SetUp() override { |
- WebControllerTest::SetUp(); |
- |
- NSString* kTestResult = @"result"; |
- completionBlockWasCalled_ = NO; |
- NSString* scriptWithIDCheck = |
- [webController_ scriptByAddingWindowIDCheckForScript:GetTestScript()]; |
- [[[mockWebView_ stub] andReturn:kTestResult] |
- stringByEvaluatingJavaScriptFromString:scriptWithIDCheck]; |
- completionHandler_.reset([^(NSString* string, NSError* error) { |
- completionBlockWasCalled_ = YES; |
- EXPECT_NSEQ(kTestResult, string); |
- EXPECT_EQ(nil, error); |
- } copy]); |
- } |
- NSString* GetTestScript() const { return @"script"; } |
- base::scoped_nsprotocol<web::JavaScriptCompletion> completionHandler_; |
- BOOL completionBlockWasCalled_; |
-}; |
- |
-// Tests that -evaluateJavaScript:stringResultHandler: properly forwards |
-// the call to the UIWebView. |
-TEST_F(WebControllerJSEvaluationTest, JavaScriptEvaluation) { |
- [webController_ evaluateJavaScript:GetTestScript() |
- stringResultHandler:completionHandler_]; |
- // Wait until JavaScript is evaluated. |
- base::test::ios::WaitUntilCondition(^bool() { |
- return this->completionBlockWasCalled_; |
- }); |
- EXPECT_TRUE(completionBlockWasCalled_); |
-} |
- |
-// Tests that -evaluateUserJavaScript:stringResultHandler: properly |
-// forwards the call to the UIWebView. |
-TEST_F(WebControllerJSEvaluationTest, UserJavaScriptEvaluation) { |
- __block BOOL method_called = NO; |
- [[[mockWebView_ stub] andDo:^(NSInvocation*) { |
- method_called = YES; |
- }] |
- performSelectorOnMainThread:@selector( |
- stringByEvaluatingJavaScriptFromString:) |
- withObject:GetTestScript() |
- waitUntilDone:NO]; |
- [webController_ evaluateUserJavaScript:GetTestScript()]; |
- EXPECT_TRUE(method_called); |
-} |
- |
-// Tests that -evaluateJavaScript:stringResultHandler: does not crash |
-// on a nil completionHandler. |
-TEST_F(WebControllerJSEvaluationTest, JavaScriptEvaluationNilHandler) { |
- [webController_ evaluateJavaScript:GetTestScript() stringResultHandler:nil]; |
-} |
- |
-// Real UIWebView is required for JSEvaluationTest. |
-typedef web::WebTestWithUIWebViewWebController |
- CRWUIWebControllerJSEvaluationTest; |
- |
// Real WKWebView is required for JSEvaluationTest. |
-typedef web::WebTestWithWKWebViewWebController |
- CRWWKWebControllerJSEvaluationTest; |
+typedef web::WebTestWithWKWebViewWebController CRWWebControllerJSEvaluationTest; |
// Tests that a script correctly evaluates to string. |
-WEB_TEST_F(CRWUIWebControllerJSEvaluationTest, |
- CRWWKWebControllerJSEvaluationTest, |
- Evaluation) { |
- this->LoadHtml(@"<p></p>"); |
- EXPECT_NSEQ(@"true", this->EvaluateJavaScriptAsString(@"true")); |
- EXPECT_NSEQ(@"false", this->EvaluateJavaScriptAsString(@"false")); |
+TEST_F(CRWWebControllerJSEvaluationTest, Evaluation) { |
+ LoadHtml(@"<p></p>"); |
+ EXPECT_NSEQ(@"true", EvaluateJavaScriptAsString(@"true")); |
+ EXPECT_NSEQ(@"false", EvaluateJavaScriptAsString(@"false")); |
} |
// Tests that a script is not evaluated on windowID mismatch. |
-WEB_TEST_F(CRWUIWebControllerJSEvaluationTest, |
- CRWWKWebControllerJSEvaluationTest, |
- WindowIDMissmatch) { |
- this->LoadHtml(@"<p></p>"); |
+TEST_F(CRWWebControllerJSEvaluationTest, WindowIdMissmatch) { |
+ LoadHtml(@"<p></p>"); |
// Script is evaluated since windowID is matched. |
- this->EvaluateJavaScriptAsString(@"window.test1 = '1';"); |
- EXPECT_NSEQ(@"1", this->EvaluateJavaScriptAsString(@"window.test1")); |
+ EvaluateJavaScriptAsString(@"window.test1 = '1';"); |
+ EXPECT_NSEQ(@"1", EvaluateJavaScriptAsString(@"window.test1")); |
// Change windowID. |
- this->EvaluateJavaScriptAsString(@"__gCrWeb['windowId'] = '';"); |
+ EvaluateJavaScriptAsString(@"__gCrWeb['windowId'] = '';"); |
// Script is not evaluated because of windowID mismatch. |
- this->EvaluateJavaScriptAsString(@"window.test2 = '2';"); |
- EXPECT_NSEQ(@"", this->EvaluateJavaScriptAsString(@"window.test2")); |
+ EvaluateJavaScriptAsString(@"window.test2 = '2';"); |
+ EXPECT_NSEQ(@"", EvaluateJavaScriptAsString(@"window.test2")); |
} |
-// A separate test class is used for testing the keyboard dismissal, as none of |
-// the setup in |CRWUIWebViewWebControllerTest| is needed; keyboard appearance |
-// is tracked by the KeyboardAppearanceListener. |
-class WebControllerKeyboardTest |
- : public web::WebTestWithUIWebViewWebController { |
- protected: |
- void SetUp() override { |
- web::WebTestWithUIWebViewWebController::SetUp(); |
- // Close any outstanding alert boxes. |
- ui::test::uiview_utils::CancelAlerts(); |
- |
- // Sets up the listener for keyboard activation/deactivation notifications. |
- keyboardListener_.reset([[KeyboardAppearanceListener alloc] init]); |
- } |
- |
- base::scoped_nsobject<KeyboardAppearanceListener> keyboardListener_; |
-}; |
- |
-TEST_F(WebControllerKeyboardTest, DismissKeyboard) { |
- LoadHtml(@"<html><head></head><body><form><input id=\"textField\" /></form>" |
- @"</body></html>"); |
- |
- // Get the webview. |
- UIWebView* webView = static_cast<UIWebView*>( |
- [webController_ containerView].webViewContentView.webView); |
- EXPECT_TRUE(webView); |
- |
- // Due to a bug in iOS ( http://www.openradar.me/22364739 ) the keyWindow |
- // needs to be manually restored, up to iOS 9.2. |
- UIWindow* keyWindow = [UIApplication sharedApplication].keyWindow; |
- base::ScopedClosureRunner runner(base::BindBlock(^{ |
- if (!base::ios::IsRunningOnOrLater(9, 2, 0)) { |
- [keyWindow makeKeyAndVisible]; |
- } |
- })); |
- |
- // Create the window and add the webview. |
- base::scoped_nsobject<UIWindow> window( |
- [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]); |
- [window makeKeyAndVisible]; |
- [window addSubview:webView]; |
- |
- // Set the flag to allow focus() in code in UIWebView. |
- EXPECT_TRUE([webView keyboardDisplayRequiresUserAction]); |
- [webView setKeyboardDisplayRequiresUserAction:NO]; |
- EXPECT_FALSE([webView keyboardDisplayRequiresUserAction]); |
- |
- // Set the focus on the textField. |
- EXPECT_FALSE([keyboardListener_ isKeyboardVisible]); |
- [webView stringByEvaluatingJavaScriptFromString: |
- @"document.getElementById(\"textField\").focus();"]; |
- base::test::ios::WaitUntilCondition(^bool() { |
- return [keyboardListener_ isKeyboardVisible]; |
- }); |
- EXPECT_TRUE([keyboardListener_ isKeyboardVisible]); |
- |
- // Method to test. |
- [webController_ dismissKeyboard]; |
- |
- base::test::ios::WaitUntilCondition(^bool() { |
- return ![keyboardListener_ isKeyboardVisible]; |
- }); |
- EXPECT_FALSE([keyboardListener_ isKeyboardVisible]); |
-} |
- |
-TEST_F(CRWWKWebViewWebControllerTest, WebURLWithTrustLevel) { |
- CR_TEST_REQUIRES_WK_WEB_VIEW(); |
- |
+TEST_F(CRWWebControllerTest, WebUrlWithTrustLevel) { |
[[[mockWebView_ stub] andReturn:[NSURL URLWithString:kTestURLString]] URL]; |
[[[mockWebView_ stub] andReturnBool:NO] hasOnlySecureContent]; |
@@ -1329,16 +594,13 @@ TEST_F(CRWWKWebViewWebControllerTest, WebURLWithTrustLevel) { |
// A separate test class, as none of the |CRWUIWebViewWebControllerTest| setup |
// is needed; |
-typedef web::WebTestWithUIWebViewWebController CRWUIWebControllerObserversTest; |
-typedef web::WebTestWithWKWebViewWebController CRWWKWebControllerObserversTest; |
+typedef web::WebTestWithWKWebViewWebController CRWWebControllerObserversTest; |
// Tests that CRWWebControllerObservers are called. |
-WEB_TEST_F(CRWUIWebControllerObserversTest, |
- CRWWKWebControllerObserversTest, |
- Observers) { |
+TEST_F(CRWWebControllerObserversTest, Observers) { |
base::scoped_nsobject<CountingObserver> observer( |
[[CountingObserver alloc] init]); |
- CRWWebController* web_controller = this->webController_; |
+ CRWWebController* web_controller = webController_; |
EXPECT_EQ(0u, [web_controller observerCount]); |
[web_controller addObserver:observer]; |
EXPECT_EQ(1u, [web_controller observerCount]); |
@@ -1365,11 +627,10 @@ WEB_TEST_F(CRWUIWebControllerObserversTest, |
}; |
// Test fixture for window.open tests. |
-class CRWWKWebControllerWindowOpenTest |
+class CRWWebControllerWindowOpenTest |
: public web::WebTestWithWKWebViewWebController { |
protected: |
void SetUp() override { |
- CR_TEST_REQUIRES_WK_WEB_VIEW(); |
web::WebTestWithWKWebViewWebController::SetUp(); |
// Configure web delegate. |
@@ -1418,9 +679,7 @@ class CRWWKWebControllerWindowOpenTest |
}; |
// Tests that absence of web delegate is handled gracefully. |
-TEST_F(CRWWKWebControllerWindowOpenTest, NoDelegate) { |
- CR_TEST_REQUIRES_WK_WEB_VIEW(); |
- |
+TEST_F(CRWWebControllerWindowOpenTest, NoDelegate) { |
[webController_ setDelegate:nil]; |
EXPECT_NSEQ(@"", OpenWindowByDOM()); |
@@ -1430,9 +689,7 @@ TEST_F(CRWWKWebControllerWindowOpenTest, NoDelegate) { |
// Tests that window.open triggered by user gesture opens a new non-popup |
// window. |
-TEST_F(CRWWKWebControllerWindowOpenTest, OpenWithUserGesture) { |
- CR_TEST_REQUIRES_WK_WEB_VIEW(); |
- |
+TEST_F(CRWWebControllerWindowOpenTest, OpenWithUserGesture) { |
SEL selector = @selector(webPageOrderedOpen); |
[delegate_ onSelector:selector |
callBlockExpectation:^(){ |
@@ -1445,9 +702,7 @@ TEST_F(CRWWKWebControllerWindowOpenTest, OpenWithUserGesture) { |
// Tests that window.open executed w/o user gesture does not open a new window. |
// Once the blocked popup is allowed a new window is opened. |
-TEST_F(CRWWKWebControllerWindowOpenTest, AllowPopup) { |
- CR_TEST_REQUIRES_WK_WEB_VIEW(); |
- |
+TEST_F(CRWWebControllerWindowOpenTest, AllowPopup) { |
SEL selector = |
@selector(webPageOrderedOpen:referrer:windowName:inBackground:); |
[delegate_ onSelector:selector |
@@ -1475,9 +730,7 @@ TEST_F(CRWWKWebControllerWindowOpenTest, AllowPopup) { |
// Tests that window.open executed w/o user gesture opens a new window, assuming |
// that delegate allows popups. |
-TEST_F(CRWWKWebControllerWindowOpenTest, DontBlockPopup) { |
- CR_TEST_REQUIRES_WK_WEB_VIEW(); |
- |
+TEST_F(CRWWebControllerWindowOpenTest, DontBlockPopup) { |
[delegate_ setBlockPopups:NO]; |
SEL selector = @selector(webPageOrderedOpen); |
[delegate_ onSelector:selector |
@@ -1492,9 +745,7 @@ TEST_F(CRWWKWebControllerWindowOpenTest, DontBlockPopup) { |
} |
// Tests that window.open executed w/o user gesture does not open a new window. |
-TEST_F(CRWWKWebControllerWindowOpenTest, BlockPopup) { |
- CR_TEST_REQUIRES_WK_WEB_VIEW(); |
- |
+TEST_F(CRWWebControllerWindowOpenTest, BlockPopup) { |
ASSERT_FALSE([webController_ userIsInteracting]); |
EXPECT_NSEQ(@"", OpenWindowByDOM()); |
base::test::ios::WaitUntilCondition(^bool() { |
@@ -1506,11 +757,10 @@ TEST_F(CRWWKWebControllerWindowOpenTest, BlockPopup) { |
}; |
// Fixture class to test WKWebView crashes. |
-class CRWWKWebControllerWebProcessTest |
+class CRWWebControllerWebProcessTest |
: public web::WebTestWithWKWebViewWebController { |
protected: |
void SetUp() override { |
- CR_TEST_REQUIRES_WK_WEB_VIEW(); |
web::WebTestWithWKWebViewWebController::SetUp(); |
webView_.reset(web::CreateTerminatedWKWebView()); |
base::scoped_nsobject<TestWebViewContentView> webViewContentView( |
@@ -1524,37 +774,16 @@ class CRWWKWebControllerWebProcessTest |
// Tests that -[CRWWebDelegate webControllerWebProcessDidCrash:] is called |
// when WKWebView web process has crashed. |
-TEST_F(CRWWKWebControllerWebProcessTest, Crash) { |
- CR_TEST_REQUIRES_WK_WEB_VIEW(); |
- |
+TEST_F(CRWWebControllerWebProcessTest, Crash) { |
id delegate = [OCMockObject niceMockForProtocol:@protocol(CRWWebDelegate)]; |
- [[delegate expect] webControllerWebProcessDidCrash:this->webController_]; |
+ [[delegate expect] webControllerWebProcessDidCrash:webController_]; |
- [this->webController_ setDelegate:delegate]; |
+ [webController_ setDelegate:delegate]; |
web::SimulateWKWebViewCrash(webView_); |
EXPECT_OCMOCK_VERIFY(delegate); |
- EXPECT_FALSE([this->webController_ isViewAlive]); |
- [this->webController_ setDelegate:nil]; |
-}; |
- |
-// Tests that WKWebView does not crash if deallocation happens during JavaScript |
stuartmorgan
2016/01/28 22:24:46
I forget, was the fix for this in iOS 9 (meaning w
Eugene But (OOO till 7-30)
2016/02/02 22:55:02
Yes, this crash was fixed in iOS9. Workaround was
|
-// evaluation. |
-typedef web::WebTestWithWKWebViewWebController DeallocationDuringJSEvaluation; |
-TEST_F(DeallocationDuringJSEvaluation, NoCrash) { |
- CR_TEST_REQUIRES_WK_WEB_VIEW(); |
- |
- this->LoadHtml(@"<html><body></body></html>"); |
- [webController_ evaluateJavaScript:@"null" |
- stringResultHandler:^(NSString* value, NSError*) { |
- // Block can not be empty in order to reproduce the crash: |
- // https://bugs.webkit.org/show_bug.cgi?id=140203 |
- VLOG(1) << "Script has been flushed."; |
- }]; |
- // -evaluateJavaScript:stringResultHandler: is asynchronous so JavaScript |
- // evaluation will not happen until TearDown, which deallocates |
- // CRWWebController, which in its turn will deallocate WKWebView to create a |
- // crashy condition. |
+ EXPECT_FALSE([webController_ isViewAlive]); |
+ [webController_ setDelegate:nil]; |
}; |
} // namespace |