Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "chrome/test/base/in_process_browser_test.h" | 5 #include "chrome/test/base/in_process_browser_test.h" |
| 6 | 6 |
| 7 #include "ash/ash_switches.h" | 7 #include "ash/ash_switches.h" |
| 8 #include "base/auto_reset.h" | 8 #include "base/auto_reset.h" |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 83 #endif | 83 #endif |
| 84 | 84 |
| 85 #if defined(USE_ASH) | 85 #if defined(USE_ASH) |
| 86 #include "chrome/test/base/default_ash_event_generator_delegate.h" | 86 #include "chrome/test/base/default_ash_event_generator_delegate.h" |
| 87 #endif | 87 #endif |
| 88 | 88 |
| 89 namespace { | 89 namespace { |
| 90 | 90 |
| 91 // Passed as value of kTestType. | 91 // Passed as value of kTestType. |
| 92 const char kBrowserTestType[] = "browser"; | 92 const char kBrowserTestType[] = "browser"; |
| 93 | 93 |
|
Tom Sepez
2016/05/31 16:21:38
nit: |static| redundant within namespace {}
wychen
2016/06/08 05:41:57
Done.
| |
| 94 static bool seen_csp_error_messages_ = false; | |
| 95 | |
| 96 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.
| |
| 97 const char* file, | |
| 98 int line, | |
| 99 size_t message_start, | |
| 100 const std::string& str) { | |
| 101 if (file == NULL || std::string("CONSOLE") != file) | |
| 102 return false; | |
| 103 | |
| 104 // Catch CSP violation. | |
| 105 bool contains_error = | |
| 106 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
| |
| 107 if (severity == logging::LOG_INFO && contains_error) { | |
| 108 seen_csp_error_messages_ = true; | |
| 109 } | |
| 110 | |
| 111 return false; | |
| 112 } | |
| 113 | |
| 94 } // namespace | 114 } // namespace |
| 95 | 115 |
| 96 // Library used for testing accessibility. | 116 // Library used for testing accessibility. |
| 97 const base::FilePath::CharType kAXSTesting[] = | 117 const base::FilePath::CharType kAXSTesting[] = |
| 98 FILE_PATH_LITERAL("third_party/accessibility-audit/axs_testing.js"); | 118 FILE_PATH_LITERAL("third_party/accessibility-audit/axs_testing.js"); |
| 99 // JavaScript snippet to configure and run the accessibility audit. | 119 // JavaScript snippet to configure and run the accessibility audit. |
| 100 const char kAccessibilityTestString[] = | 120 const char kAccessibilityTestString[] = |
| 101 "var config = new axs.AuditConfiguration();" | 121 "var config = new axs.AuditConfiguration();" |
| 102 "/* Disable warning about rules that cannot be checked. */" | 122 "/* Disable warning about rules that cannot be checked. */" |
| 103 "config.showUnsupportedRulesWarning = false;" | 123 "config.showUnsupportedRulesWarning = false;" |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 128 " error = axs.Audit.createReport(result);" | 148 " error = axs.Audit.createReport(result);" |
| 129 " break;" | 149 " break;" |
| 130 " }" | 150 " }" |
| 131 "}" | 151 "}" |
| 132 "domAutomationController.send(error);"; | 152 "domAutomationController.send(error);"; |
| 133 | 153 |
| 134 InProcessBrowserTest::InProcessBrowserTest() | 154 InProcessBrowserTest::InProcessBrowserTest() |
| 135 : browser_(NULL), | 155 : browser_(NULL), |
| 136 exit_when_last_browser_closes_(true), | 156 exit_when_last_browser_closes_(true), |
| 137 open_about_blank_on_browser_launch_(true), | 157 open_about_blank_on_browser_launch_(true), |
| 158 ignore_csp_messages_(false), | |
| 138 run_accessibility_checks_for_test_case_(false) | 159 run_accessibility_checks_for_test_case_(false) |
| 139 #if defined(OS_MACOSX) | 160 #if defined(OS_MACOSX) |
| 140 , autorelease_pool_(NULL) | 161 , autorelease_pool_(NULL) |
| 141 #endif // OS_MACOSX | 162 #endif // OS_MACOSX |
| 142 { | 163 { |
| 143 #if defined(OS_MACOSX) | 164 #if defined(OS_MACOSX) |
| 144 // TODO(phajdan.jr): Make browser_tests self-contained on Mac, remove this. | 165 // TODO(phajdan.jr): Make browser_tests self-contained on Mac, remove this. |
| 145 // Before we run the browser, we have to hack the path to the exe to match | 166 // Before we run the browser, we have to hack the path to the exe to match |
| 146 // what it would be if Chrome was running, because it is used to fork renderer | 167 // what it would be if Chrome was running, because it is used to fork renderer |
| 147 // processes, on Linux at least (failure to do so will cause a browser_test to | 168 // processes, on Linux at least (failure to do so will cause a browser_test to |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 163 CHECK(PathService::Override(chrome::DIR_TEST_DATA, | 184 CHECK(PathService::Override(chrome::DIR_TEST_DATA, |
| 164 src_dir.AppendASCII("chrome/test/data"))); | 185 src_dir.AppendASCII("chrome/test/data"))); |
| 165 | 186 |
| 166 #if defined(OS_MACOSX) | 187 #if defined(OS_MACOSX) |
| 167 bundle_swizzler_.reset(new ScopedBundleSwizzlerMac); | 188 bundle_swizzler_.reset(new ScopedBundleSwizzlerMac); |
| 168 #endif | 189 #endif |
| 169 | 190 |
| 170 #if defined(USE_ASH) | 191 #if defined(USE_ASH) |
| 171 DefaultAshEventGeneratorDelegate::GetInstance(); | 192 DefaultAshEventGeneratorDelegate::GetInstance(); |
| 172 #endif | 193 #endif |
| 194 | |
| 195 logging::SetLogMessageHandler(&CSPLogHandler); | |
| 196 seen_csp_error_messages_ = false; | |
| 173 } | 197 } |
| 174 | 198 |
| 175 InProcessBrowserTest::~InProcessBrowserTest() { | 199 InProcessBrowserTest::~InProcessBrowserTest() { |
| 200 logging::SetLogMessageHandler(nullptr); | |
| 176 } | 201 } |
| 177 | 202 |
| 178 void InProcessBrowserTest::SetUp() { | 203 void InProcessBrowserTest::SetUp() { |
| 179 // Browser tests will create their own g_browser_process later. | 204 // Browser tests will create their own g_browser_process later. |
| 180 DCHECK(!g_browser_process); | 205 DCHECK(!g_browser_process); |
| 181 | 206 |
| 182 // Clear the FeatureList instance from base/test/test_suite.cc. Since this is | 207 // Clear the FeatureList instance from base/test/test_suite.cc. Since this is |
| 183 // a browser test, a FeatureList will be registered as part of normal browser | 208 // a browser test, a FeatureList will be registered as part of normal browser |
| 184 // start up in ChromeBrowserMainParts::SetupMetricsAndFieldTrials(). | 209 // start up in ChromeBrowserMainParts::SetupMetricsAndFieldTrials(). |
| 185 base::FeatureList::ClearInstanceForTesting(); | 210 base::FeatureList::ClearInstanceForTesting(); |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 337 } | 362 } |
| 338 } | 363 } |
| 339 return test_launcher_utils::OverrideUserDataDir(user_data_dir); | 364 return test_launcher_utils::OverrideUserDataDir(user_data_dir); |
| 340 } | 365 } |
| 341 | 366 |
| 342 void InProcessBrowserTest::TearDown() { | 367 void InProcessBrowserTest::TearDown() { |
| 343 DCHECK(!g_browser_process); | 368 DCHECK(!g_browser_process); |
| 344 #if defined(OS_WIN) | 369 #if defined(OS_WIN) |
| 345 com_initializer_.reset(); | 370 com_initializer_.reset(); |
| 346 #endif | 371 #endif |
| 372 if (!ignore_csp_messages_) { | |
| 373 EXPECT_FALSE(seen_csp_error_messages_); | |
| 374 } | |
| 347 BrowserTestBase::TearDown(); | 375 BrowserTestBase::TearDown(); |
| 348 } | 376 } |
| 349 | 377 |
| 350 void InProcessBrowserTest::CloseBrowserSynchronously(Browser* browser) { | 378 void InProcessBrowserTest::CloseBrowserSynchronously(Browser* browser) { |
| 351 content::WindowedNotificationObserver observer( | 379 content::WindowedNotificationObserver observer( |
| 352 chrome::NOTIFICATION_BROWSER_CLOSED, | 380 chrome::NOTIFICATION_BROWSER_CLOSED, |
| 353 content::Source<Browser>(browser)); | 381 content::Source<Browser>(browser)); |
| 354 CloseBrowserAsynchronously(browser); | 382 CloseBrowserAsynchronously(browser); |
| 355 observer.Wait(); | 383 observer.Wait(); |
| 356 } | 384 } |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 397 int index, | 425 int index, |
| 398 const GURL& url, | 426 const GURL& url, |
| 399 ui::PageTransition transition) { | 427 ui::PageTransition transition) { |
| 400 AddTabAtIndexToBrowser(browser(), index, url, transition, true); | 428 AddTabAtIndexToBrowser(browser(), index, url, transition, true); |
| 401 } | 429 } |
| 402 | 430 |
| 403 bool InProcessBrowserTest::SetUpUserDataDirectory() { | 431 bool InProcessBrowserTest::SetUpUserDataDirectory() { |
| 404 return true; | 432 return true; |
| 405 } | 433 } |
| 406 | 434 |
| 435 void InProcessBrowserTest::SetIgnoreCSPErrorMessages(bool ignore) { | |
| 436 ignore_csp_messages_ = ignore; | |
| 437 } | |
| 438 | |
| 407 #if !defined(OS_MACOSX) | 439 #if !defined(OS_MACOSX) |
| 408 void InProcessBrowserTest::OpenDevToolsWindow( | 440 void InProcessBrowserTest::OpenDevToolsWindow( |
| 409 content::WebContents* web_contents) { | 441 content::WebContents* web_contents) { |
| 410 ASSERT_FALSE(content::DevToolsAgentHost::HasFor(web_contents)); | 442 ASSERT_FALSE(content::DevToolsAgentHost::HasFor(web_contents)); |
| 411 DevToolsWindow::OpenDevToolsWindow(web_contents); | 443 DevToolsWindow::OpenDevToolsWindow(web_contents); |
| 412 ASSERT_TRUE(content::DevToolsAgentHost::HasFor(web_contents)); | 444 ASSERT_TRUE(content::DevToolsAgentHost::HasFor(web_contents)); |
| 413 } | 445 } |
| 414 | 446 |
| 415 Browser* InProcessBrowserTest::OpenURLOffTheRecord(Profile* profile, | 447 Browser* InProcessBrowserTest::OpenURLOffTheRecord(Profile* profile, |
| 416 const GURL& url) { | 448 const GURL& url) { |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 592 // On the Mac, this eventually reaches | 624 // On the Mac, this eventually reaches |
| 593 // -[BrowserWindowController windowWillClose:], which will post a deferred | 625 // -[BrowserWindowController windowWillClose:], which will post a deferred |
| 594 // -autorelease on itself to ultimately destroy the Browser object. The line | 626 // -autorelease on itself to ultimately destroy the Browser object. The line |
| 595 // below is necessary to pump these pending messages to ensure all Browsers | 627 // below is necessary to pump these pending messages to ensure all Browsers |
| 596 // get deleted. | 628 // get deleted. |
| 597 content::RunAllPendingInMessageLoop(); | 629 content::RunAllPendingInMessageLoop(); |
| 598 delete autorelease_pool_; | 630 delete autorelease_pool_; |
| 599 autorelease_pool_ = NULL; | 631 autorelease_pool_ = NULL; |
| 600 #endif | 632 #endif |
| 601 } | 633 } |
| OLD | NEW |