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

Unified Diff: ios/web/web_state/js/core_js_unittest.mm

Issue 2801213004: Eliminate extra Native->JS->Native roundrip when showing context menu. (Closed)
Patch Set: Fixed tests Created 3 years, 8 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | ios/web/web_state/js/resources/context_menu.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/web/web_state/js/core_js_unittest.mm
diff --git a/ios/web/web_state/js/core_js_unittest.mm b/ios/web/web_state/js/core_js_unittest.mm
index 460c48c87d82abc2596372e6c4d85e7464c41fe3..46e2703ce8e1f6d18fa7ba049afe60cb831508ff 100644
--- a/ios/web/web_state/js/core_js_unittest.mm
+++ b/ios/web/web_state/js/core_js_unittest.mm
@@ -3,12 +3,17 @@
// found in the LICENSE file.
#include <vector>
+
+#import <CoreGraphics/CoreGraphics.h>
#import <Foundation/Foundation.h>
#include "base/macros.h"
#include "base/strings/stringprintf.h"
#import "base/strings/sys_string_conversions.h"
#import "ios/web/public/test/web_test_with_web_state.h"
+#import "ios/web/public/web_state/ui/crw_web_view_proxy.h"
+#import "ios/web/public/web_state/ui/crw_web_view_scroll_view_proxy.h"
+#import "ios/web/public/web_state/web_state.h"
#include "testing/gtest/include/gtest/gtest.h"
#import "testing/gtest_mac.h"
@@ -21,6 +26,15 @@ struct TestScriptAndExpectedValue {
id expected_value;
};
+// Test coordinates and expected result for __gCrWeb.getElementFromPoint call.
+struct TestCoordinatesAndExpectedValue {
+ TestCoordinatesAndExpectedValue(CGFloat x, CGFloat y, id expected_value)
+ : x(x), y(y), expected_value(expected_value) {}
+ CGFloat x = 0;
+ CGFloat y = 0;
+ id expected_value = nil;
+};
+
} // namespace
namespace web {
@@ -42,27 +56,36 @@ class CoreJsTest : public web::WebTestWithWebState {
NSString* page_content =
[NSString stringWithFormat:page_content_template, html];
- TestScriptAndExpectedValue test_data[] = {
+ TestCoordinatesAndExpectedValue test_data[] = {
// Point outside the document margins.
- {
- @"__gCrWeb.getElementFromPoint(0, 0)", @{},
- },
- // Point outside the <p> element.
- {@"__gCrWeb.getElementFromPoint(100, 100)", expected_value},
+ {0, 0, @{}},
// Point inside the <p> element.
- {
- @"__gCrWeb.getElementFromPoint(300, 300)", @{},
- },
+ {20, 20, expected_value},
+ // Point outside the <p> element.
+ {GetWebViewContentSize().width / 2, 50, @{}},
};
for (size_t i = 0; i < arraysize(test_data); i++) {
- TestScriptAndExpectedValue& data = test_data[i];
+ const TestCoordinatesAndExpectedValue& data = test_data[i];
LoadHtml(page_content);
- id result = ExecuteJavaScript(data.test_script);
+ id result = ExecuteGetElementFromPointJavaScript(data.x, data.y);
EXPECT_NSEQ(data.expected_value, result)
- << " in test " << i << ": "
- << base::SysNSStringToUTF8(data.test_script);
+ << " in test " << i << ": (" << data.x << ", " << data.y << ")";
}
}
+ // Returns web view's content size from the current web state.
+ CGSize GetWebViewContentSize() {
+ return web_state()->GetWebViewProxy().scrollViewProxy.contentSize;
+ }
+
+ // Executes __gCrWeb.getElementFromPoint script and syncronously returns the
+ // result. |x| and |y| are points in web view coordinate system.
+ id ExecuteGetElementFromPointJavaScript(CGFloat x, CGFloat y) {
+ CGSize contentSize = GetWebViewContentSize();
+ NSString* const script = [NSString
+ stringWithFormat:@"__gCrWeb.getElementFromPoint(%g, %g, %g, %g)", x, y,
+ contentSize.width, contentSize.height];
+ return ExecuteJavaScript(script);
+ }
};
// Tests that __gCrWeb.getElementFromPoint function returns correct src.
@@ -120,18 +143,16 @@ TEST_F(CoreJsTest, TextAreaStopsProximity) {
};
NSDictionary* failure = @{};
- TestScriptAndExpectedValue test_data[] = {
- {@"__gCrWeb.getElementFromPoint(2, 20)", success},
- {@"__gCrWeb.getElementFromPoint(5, 20)", failure},
+ TestCoordinatesAndExpectedValue test_data[] = {
+ {2, 20, success}, {10, 10, failure},
};
for (size_t i = 0; i < arraysize(test_data); i++) {
- TestScriptAndExpectedValue& data = test_data[i];
+ const TestCoordinatesAndExpectedValue& data = test_data[i];
LoadHtml(html);
- id result = ExecuteJavaScript(data.test_script);
+ id result = ExecuteGetElementFromPointJavaScript(data.x, data.y);
EXPECT_NSEQ(data.expected_value, result)
- << " in test " << i << ": "
- << base::SysNSStringToUTF8(data.test_script);
+ << " in test " << i << ": (" << data.x << ", " << data.y << ")";
}
}
@@ -244,7 +265,7 @@ TEST_F(CoreJsTest, LinkOfImage) {
// A page with a link to a destination URL.
LoadHtml(base::StringPrintf(image, "http://destination"));
- id result = ExecuteJavaScript(@"__gCrWeb['getElementFromPoint'](200, 200)");
+ id result = ExecuteGetElementFromPointJavaScript(20, 20);
NSDictionary* expected_result = @{
@"src" : [NSString stringWithFormat:@"%sfoo", BaseUrl().c_str()],
@"referrerPolicy" : @"default",
@@ -254,7 +275,7 @@ TEST_F(CoreJsTest, LinkOfImage) {
// A page with a link with some JavaScript that does not result in a NOP.
LoadHtml(base::StringPrintf(image, "javascript:console.log('whatever')"));
- result = ExecuteJavaScript(@"__gCrWeb['getElementFromPoint'](200, 200)");
+ result = ExecuteGetElementFromPointJavaScript(20, 20);
expected_result = @{
@"src" : [NSString stringWithFormat:@"%sfoo", BaseUrl().c_str()],
@"referrerPolicy" : @"default",
@@ -272,7 +293,7 @@ TEST_F(CoreJsTest, LinkOfImage) {
// A page with a link with some JavaScript that results in a NOP.
const std::string javascript = std::string("javascript:") + js;
LoadHtml(base::StringPrintf(image, javascript.c_str()));
- result = ExecuteJavaScript(@"__gCrWeb['getElementFromPoint'](200, 200)");
+ result = ExecuteGetElementFromPointJavaScript(20, 20);
expected_result = @{
@"src" : [NSString stringWithFormat:@"%sfoo", BaseUrl().c_str()],
@"referrerPolicy" : @"default",
« no previous file with comments | « no previous file | ios/web/web_state/js/resources/context_menu.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698