OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/public/test/earl_grey/web_view_matchers.h" | 5 #import "ios/web/public/test/earl_grey/web_view_matchers.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #import <WebKit/WebKit.h> | 9 #import <WebKit/WebKit.h> |
10 | 10 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 [description appendText:base::SysUTF8ToNSString(text)]; | 95 [description appendText:base::SysUTF8ToNSString(text)]; |
96 }; | 96 }; |
97 | 97 |
98 return grey_allOf(webViewInWebState(web_state), | 98 return grey_allOf(webViewInWebState(web_state), |
99 [[[GREYElementMatcherBlock alloc] | 99 [[[GREYElementMatcherBlock alloc] |
100 initWithMatchesBlock:matches | 100 initWithMatchesBlock:matches |
101 descriptionBlock:describe] autorelease], | 101 descriptionBlock:describe] autorelease], |
102 nil); | 102 nil); |
103 } | 103 } |
104 | 104 |
| 105 id<GREYMatcher> webViewContainingBlockedImage(std::string image_id, |
| 106 CGSize expected_size, |
| 107 WebState* web_state) { |
| 108 MatchesBlock matches = ^BOOL(WKWebView*) { |
| 109 __block BOOL did_succeed = NO; |
| 110 NSDate* deadline = |
| 111 [NSDate dateWithTimeIntervalSinceNow:testing::kWaitForUIElementTimeout]; |
| 112 while (([[NSDate date] compare:deadline] != NSOrderedDescending) && |
| 113 !did_succeed) { |
| 114 NSString* const kGetElementAttributesScript = [NSString |
| 115 stringWithFormat:@"var image = document.getElementById('%@');" |
| 116 @"var imageHeight = image.height;" |
| 117 @"var imageWidth = image.width;" |
| 118 @"JSON.stringify({" |
| 119 @" height:imageHeight," |
| 120 @" width:imageWidth" |
| 121 @"});", |
| 122 base::SysUTF8ToNSString(image_id)]; |
| 123 std::unique_ptr<base::Value> value = ExecuteScript( |
| 124 web_state, base::SysNSStringToUTF8(kGetElementAttributesScript)); |
| 125 std::string result; |
| 126 if (value && value->GetAsString(&result)) { |
| 127 NSString* evaluation_result = base::SysUTF8ToNSString(result); |
| 128 NSData* image_attributes_as_data = |
| 129 [evaluation_result dataUsingEncoding:NSUTF8StringEncoding]; |
| 130 NSDictionary* image_attributes = |
| 131 [NSJSONSerialization JSONObjectWithData:image_attributes_as_data |
| 132 options:0 |
| 133 error:nil]; |
| 134 CGFloat height = [image_attributes[@"height"] floatValue]; |
| 135 CGFloat width = [image_attributes[@"width"] floatValue]; |
| 136 did_succeed = |
| 137 (height < expected_size.height && width < expected_size.width); |
| 138 } |
| 139 base::test::ios::SpinRunLoopWithMaxDelay( |
| 140 base::TimeDelta::FromSecondsD(testing::kSpinDelaySeconds)); |
| 141 } |
| 142 return did_succeed; |
| 143 }; |
| 144 |
| 145 DescribeToBlock describe = ^(id<GREYDescription> description) { |
| 146 [description appendText:@"web view blocking resource with id "]; |
| 147 [description appendText:base::SysUTF8ToNSString(image_id)]; |
| 148 }; |
| 149 |
| 150 return grey_allOf(webViewInWebState(web_state), |
| 151 [[[GREYElementMatcherBlock alloc] |
| 152 initWithMatchesBlock:matches |
| 153 descriptionBlock:describe] autorelease], |
| 154 nil); |
| 155 } |
| 156 |
105 id<GREYMatcher> webViewCssSelector(std::string selector, WebState* web_state) { | 157 id<GREYMatcher> webViewCssSelector(std::string selector, WebState* web_state) { |
106 MatchesBlock matches = ^BOOL(WKWebView*) { | 158 MatchesBlock matches = ^BOOL(WKWebView*) { |
107 std::string script = base::StringPrintf(kTestCssSelectorJavaScriptTemplate, | 159 std::string script = base::StringPrintf(kTestCssSelectorJavaScriptTemplate, |
108 selector.c_str()); | 160 selector.c_str()); |
109 __block bool did_succeed = false; | 161 __block bool did_succeed = false; |
110 NSDate* deadline = | 162 NSDate* deadline = |
111 [NSDate dateWithTimeIntervalSinceNow:testing::kWaitForUIElementTimeout]; | 163 [NSDate dateWithTimeIntervalSinceNow:testing::kWaitForUIElementTimeout]; |
112 while (([[NSDate date] compare:deadline] != NSOrderedDescending) && | 164 while (([[NSDate date] compare:deadline] != NSOrderedDescending) && |
113 !did_succeed) { | 165 !did_succeed) { |
114 std::unique_ptr<base::Value> value = ExecuteScript(web_state, script); | 166 std::unique_ptr<base::Value> value = ExecuteScript(web_state, script); |
(...skipping 27 matching lines...) Expand all Loading... |
142 DescribeToBlock describe = ^(id<GREYDescription> description) { | 194 DescribeToBlock describe = ^(id<GREYDescription> description) { |
143 [description appendText:@"web view scroll view"]; | 195 [description appendText:@"web view scroll view"]; |
144 }; | 196 }; |
145 | 197 |
146 return [[[GREYElementMatcherBlock alloc] initWithMatchesBlock:matches | 198 return [[[GREYElementMatcherBlock alloc] initWithMatchesBlock:matches |
147 descriptionBlock:describe] | 199 descriptionBlock:describe] |
148 autorelease]; | 200 autorelease]; |
149 } | 201 } |
150 | 202 |
151 } // namespace web | 203 } // namespace web |
OLD | NEW |