Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: ios/web/web_state/js/crw_js_post_request_loader_unittest.mm

Issue 1375023002: Adds support for POST request with bodies on WKWebView. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: missing file Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import "ios/web/web_state/js/crw_js_post_request_loader.h"
6
7 #import <WebKit/WebKit.h>
8
9 #import "base/strings/sys_string_conversions.h"
Eugene But (OOO till 7-30) 2015/12/02 17:06:15 s/import/include
stkhapugin 2015/12/03 15:43:02 Done.
10 #import "base/test/ios/wait_util.h"
11 #import "ios/web/web_state/ui/crw_wk_script_message_router.h"
12 #import "testing/gtest_mac.h"
13 #include "third_party/ocmock/OCMock/OCMock.h"
14
15 namespace {
16
17 typedef void (^SuccessCallback)();
18 typedef void (^ErrorCallback)(NSError*);
19
20 // The expected HTML to be load in WKWebView to execute a post request from
21 // LoadsCorrectHTML test.
22 std::string expectedHTML =
Eugene But (OOO till 7-30) 2015/12/02 17:06:15 FYI: Variables of class type with static storage d
stkhapugin 2015/12/03 15:43:02 Done.
23 R"delimeter(<html><script>var __crPostRequestHack={runPostRequest:function(k ,l,m,n){var p=function(b,d,c,g){var e=new XMLHttpRequest;e.open("POST",b,!1);for (var a in d)d.hasOwnProperty(a)&&e.setRequestHeader(a,d[a]);b=atob(c);g=g||"";d= [];for(c=0;c<b.length;c+=512){a=b.slice(c,c+512);for(var h=Array(a.length),f=0;f <a.length;f++)h[f]=a.charCodeAt(f);a=new Uint8Array(h);d.push(a)}b=new Blob(d,{t ype:g});e.send(b);if(200!=e.status)throw e.status;return e.responseText};documen t.open();try{document.write(p(k,l,m,n)),window.webkit.messageHandlers.POSTSucces s.postMessage("")}catch(b){window.webkit.messageHandlers.POSTErrorHandler.postMe ssage(b)}document.close()}};
Eugene But (OOO till 7-30) 2015/12/02 17:06:15 This is too fragile, and will be breaking very oft
stkhapugin 2015/12/03 15:43:02 Done.
24 __crPostRequestHack.runPostRequest("http://google.com", {}, "", "")</script></ht ml>)delimeter";
25
26 // Tests that the POST request is correctly executed by loading a HTML string.
27 TEST(CRWJSPOSTRequestLoaderTest, LoadsCorrectHTML) {
28 CRWJSPOSTRequestLoader* loader =
29 [[[CRWJSPOSTRequestLoader alloc] init] autorelease];
30 id mockWebView = [OCMockObject mockForClass:[WKWebView class]];
31 NSURL* url = [NSURL URLWithString:@"http://google.com"];
32 NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url];
33 request.HTTPMethod = @"POST";
34 id mockMessageRouter =
35 [OCMockObject niceMockForClass:[CRWWKScriptMessageRouter class]];
36 NSString* expectedHTMLString = base::SysUTF8ToNSString(expectedHTML);
37 [(WKWebView*)[mockWebView expect] loadHTMLString:expectedHTMLString
38 baseURL:url];
39
40 [loader loadPOSTRequest:request
41 inWebView:mockWebView
42 messageRouter:mockMessageRouter
43 errorBlock:^(NSError* error) {
44 }
45 successBlock:^{
46 }];
47
48 [mockWebView verify];
49 }
50
51 // Tests that success and error message handlers are installed and removed.
52 TEST(CRWJSPOSTRequestLoaderTest, installsCallbacks) {
Eugene But (OOO till 7-30) 2015/12/02 17:06:16 Installing and removing script message router is t
Eugene But (OOO till 7-30) 2015/12/02 17:06:16 s/installsCallbacks/InstallsCallbacks
stkhapugin 2015/12/03 15:43:02 Acknowledged.
stkhapugin 2015/12/03 15:43:02 OK, I'll remove this test for simplicity.
53 CRWJSPOSTRequestLoader* loader =
54 [[[CRWJSPOSTRequestLoader alloc] init] autorelease];
55 id mockWebView = [OCMockObject niceMockForClass:[WKWebView class]];
56 NSURL* url = [NSURL URLWithString:@"http://google.com"];
57 NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url];
58 request.HTTPMethod = @"POST";
59 id mockMessageRouter =
60 [OCMockObject mockForClass:[CRWWKScriptMessageRouter class]];
61
62 __block BOOL successBlockCalled = NO;
63 SuccessCallback successHandler = ^{
64 EXPECT_FALSE(successBlockCalled);
65 successBlockCalled = YES;
66 };
67 __block BOOL errorBlockCalled = NO;
68 ErrorCallback errorHandler = ^(NSError*) {
69 EXPECT_FALSE(errorBlockCalled);
70 errorBlockCalled = YES;
71 };
72
73 // Checks that successHandler is called and that handlers are removed.
74 id successArgChecker =
75 [OCMArg checkWithBlock:^BOOL(SuccessCallback actualSuccessHandler) {
76 [[mockMessageRouter expect]
77 removeScriptMessageHandlerForName:@"POSTErrorHandler"
78 webView:mockWebView];
79 [[mockMessageRouter expect]
80 removeScriptMessageHandlerForName:@"POSTSuccess"
81 webView:mockWebView];
82 actualSuccessHandler();
83 base::test::ios::WaitUntilCondition(^{
84 return successBlockCalled;
85 });
86 return successBlockCalled;
87 }];
88
89 // Checks that errorHandler is called and that handlers are removed.
90 id errorArgChecker =
91 [OCMArg checkWithBlock:^BOOL(ErrorCallback actualErrorHandler) {
92 [[mockMessageRouter expect]
93 removeScriptMessageHandlerForName:@"POSTErrorHandler"
94 webView:mockWebView];
95 [[mockMessageRouter expect]
96 removeScriptMessageHandlerForName:@"POSTSuccess"
97 webView:mockWebView];
98
99 actualErrorHandler(nil);
100 base::test::ios::WaitUntilCondition(^{
101 return errorBlockCalled;
102 });
103 return errorBlockCalled;
104 }];
105
106 [[mockMessageRouter expect] setScriptMessageHandler:successArgChecker
107 name:@"POSTSuccess"
108 webView:mockWebView];
109 [[mockMessageRouter expect] setScriptMessageHandler:errorArgChecker
110 name:@"POSTErrorHandler"
111 webView:mockWebView];
112
113 [loader loadPOSTRequest:request
114 inWebView:mockWebView
115 messageRouter:mockMessageRouter
116 errorBlock:errorHandler
117 successBlock:successHandler];
118
119 [mockMessageRouter verify];
120 }
121
122 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698