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

Unified Diff: chrome/test/base/in_process_browser_test.cc

Issue 2013573007: Catch CSP violations in InProcessBrowserTest Base URL: https://chromium.googlesource.com/a/chromium/src.git@master
Patch Set: whitelist more Created 4 years, 7 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
Index: chrome/test/base/in_process_browser_test.cc
diff --git a/chrome/test/base/in_process_browser_test.cc b/chrome/test/base/in_process_browser_test.cc
index 48b71dd2b46205f95d462440462f7ecd2ad3116c..0a73eb8df2cd8522b44d102375429d9e54afce43 100644
--- a/chrome/test/base/in_process_browser_test.cc
+++ b/chrome/test/base/in_process_browser_test.cc
@@ -91,6 +91,26 @@ namespace {
// Passed as value of kTestType.
const char kBrowserTestType[] = "browser";
Tom Sepez 2016/05/31 16:21:38 nit: |static| redundant within namespace {}
wychen 2016/06/08 05:41:57 Done.
+static bool seen_csp_error_messages_ = false;
+
+bool CSPLogHandler(int severity,
Dan Beam 2016/06/07 01:18:30 this will conflict (potentially) with JS-based bro
wychen 2016/06/08 05:41:57 I've rebased this CL on top of https://codereview.
+ const char* file,
+ int line,
+ size_t message_start,
+ const std::string& str) {
+ if (file == NULL || std::string("CONSOLE") != file)
+ return false;
+
+ // Catch CSP violation.
+ bool contains_error =
+ str.find("Content Security Policy") != std::string::npos;
Paweł Hajdan Jr. 2016/05/30 08:43:47 It seems fragile to me to rely on string parsing a
wychen 2016/05/31 08:11:27 It's indeed not very robust in that case. Even tho
Mike West 2016/05/31 09:20:00 What would you like to see added? Sorry, I'm not e
Tom Sepez 2016/05/31 16:21:38 I'm OK so long as we don't silently pass failures
wychen 2016/05/31 18:17:45 This sounds like a good median between current fra
+ if (severity == logging::LOG_INFO && contains_error) {
+ seen_csp_error_messages_ = true;
+ }
+
+ return false;
+}
+
} // namespace
// Library used for testing accessibility.
@@ -135,6 +155,7 @@ InProcessBrowserTest::InProcessBrowserTest()
: browser_(NULL),
exit_when_last_browser_closes_(true),
open_about_blank_on_browser_launch_(true),
+ ignore_csp_messages_(false),
run_accessibility_checks_for_test_case_(false)
#if defined(OS_MACOSX)
, autorelease_pool_(NULL)
@@ -170,9 +191,13 @@ InProcessBrowserTest::InProcessBrowserTest()
#if defined(USE_ASH)
DefaultAshEventGeneratorDelegate::GetInstance();
#endif
+
+ logging::SetLogMessageHandler(&CSPLogHandler);
+ seen_csp_error_messages_ = false;
}
InProcessBrowserTest::~InProcessBrowserTest() {
+ logging::SetLogMessageHandler(nullptr);
}
void InProcessBrowserTest::SetUp() {
@@ -344,6 +369,9 @@ void InProcessBrowserTest::TearDown() {
#if defined(OS_WIN)
com_initializer_.reset();
#endif
+ if (!ignore_csp_messages_) {
+ EXPECT_FALSE(seen_csp_error_messages_);
+ }
BrowserTestBase::TearDown();
}
@@ -404,6 +432,10 @@ bool InProcessBrowserTest::SetUpUserDataDirectory() {
return true;
}
+void InProcessBrowserTest::SetIgnoreCSPErrorMessages(bool ignore) {
+ ignore_csp_messages_ = ignore;
+}
+
#if !defined(OS_MACOSX)
void InProcessBrowserTest::OpenDevToolsWindow(
content::WebContents* web_contents) {

Powered by Google App Engine
This is Rietveld 408576698