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

Unified Diff: ios/web/web_state/ui/crw_web_controller_unittest.mm

Issue 2761173002: Disallow JS execution on WebUI pages. (Closed)
Patch Set: Addressed review comments Created 3 years, 9 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 | « ios/web/web_state/ui/crw_web_controller.mm ('k') | ios/web/web_state/ui/web_view_js_utils.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 e0b987a064fb423f0db352d32e7c6c2ecc757cc9..ff3099e6205d0b02fbad49d50a489886f27a80ef 100644
--- a/ios/web/web_state/ui/crw_web_controller_unittest.mm
+++ b/ios/web/web_state/ui/crw_web_controller_unittest.mm
@@ -33,6 +33,7 @@
#import "ios/web/test/web_test_with_web_controller.h"
#import "ios/web/test/wk_web_view_crash_utils.h"
#import "ios/web/web_state/ui/crw_web_controller_container_view.h"
+#import "ios/web/web_state/ui/web_view_js_utils.h"
#import "ios/web/web_state/web_state_impl.h"
#import "ios/web/web_state/wk_web_view_security_util.h"
#import "net/base/mac/url_conversions.h"
@@ -874,6 +875,68 @@ TEST_F(CRWWebControllerTitleTest, TitleChange) {
EXPECT_GE(observer.title_change_count(), 2);
};
+// Test fixture for JavaScript execution.
+class ScriptExecutionTest : public web::WebTestWithWebController {
+ protected:
+ // Calls |executeUserJavaScript:completionHandler:|, waits for script
+ // execution completion, and synchronously returns the result.
+ id ExecuteUserJavaScript(NSString* java_script, NSError** error) {
+ __block id script_result = nil;
+ __block NSError* script_error = nil;
+ __block bool script_executed = false;
+ [web_controller()
+ executeUserJavaScript:java_script
+ completionHandler:^(id local_result, NSError* local_error) {
+ script_result = [local_result retain];
+ script_error = [local_error retain];
+ script_executed = true;
+ }];
+
+ WaitForCondition(^{
+ return script_executed;
+ });
+
+ if (error) {
+ *error = script_error;
+ }
+ [script_error autorelease];
+ return [script_result autorelease];
+ }
+};
+
+// Tests evaluating user script on an http page.
+TEST_F(ScriptExecutionTest, UserScriptOnHttpPage) {
+ LoadHtml(@"<html></html>", GURL(kTestURLString));
+ NSError* error = nil;
+ EXPECT_NSEQ(@0, ExecuteUserJavaScript(@"window.w = 0;", &error));
+ EXPECT_FALSE(error);
+
+ EXPECT_NSEQ(@0, ExecuteJavaScript(@"window.w"));
+};
+
+// Tests evaluating user script on app-specific page. Pages with app-specific
+// URLs have elevated privileges and JavaScript execution should not be allowed
+// for them.
+TEST_F(ScriptExecutionTest, UserScriptOnAppSpecificPage) {
+ LoadHtml(@"<html></html>", GURL(kTestURLString));
+
+ // Change last committed URL to app-specific URL.
+ web::NavigationManagerImpl& nav_manager =
+ [web_controller() webStateImpl]->GetNavigationManagerImpl();
+ nav_manager.AddPendingItem(GURL(kTestAppSpecificURL), web::Referrer(),
+ ui::PAGE_TRANSITION_TYPED,
+ web::NavigationInitiationType::USER_INITIATED);
+ [nav_manager.GetSessionController() commitPendingItem];
+
+ NSError* error = nil;
+ EXPECT_FALSE(ExecuteUserJavaScript(@"window.w = 0;", &error));
+ ASSERT_TRUE(error);
+ EXPECT_NSEQ(web::kJSEvaluationErrorDomain, error.domain);
+ EXPECT_EQ(web::JS_EVALUATION_ERROR_CODE_NO_WEB_VIEW, error.code);
+
+ EXPECT_FALSE(ExecuteJavaScript(@"window.w"));
+};
+
// Fixture class to test WKWebView crashes.
class CRWWebControllerWebProcessTest : public web::WebTestWithWebController {
protected:
« no previous file with comments | « ios/web/web_state/ui/crw_web_controller.mm ('k') | ios/web/web_state/ui/web_view_js_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698