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

Side by Side Diff: chrome/test/base/in_process_browser_test.cc

Issue 582493002: Enable accessibility testing for the bookmark browser test. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Apply Feedback Created 5 years, 10 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 unified diff | Download patch
OLDNEW
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 "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 BrowserList::RemoveObserver(this); 105 BrowserList::RemoveObserver(this);
106 } 106 }
107 107
108 void SingleDesktopTestObserver::OnBrowserAdded(Browser* browser) { 108 void SingleDesktopTestObserver::OnBrowserAdded(Browser* browser) {
109 CHECK(CalledOnValidThread()); 109 CHECK(CalledOnValidThread());
110 CHECK_EQ(browser->host_desktop_type(), allowed_desktop_); 110 CHECK_EQ(browser->host_desktop_type(), allowed_desktop_);
111 } 111 }
112 112
113 } // namespace 113 } // namespace
114 114
115 // Library used for testing accessibility.
116 const base::FilePath kAXSTesting(
Jay Civelli 2015/02/05 23:29:09 Style guide recommends to use const char[] as cons
hcarmona 2015/02/06 22:50:53 Done.
117 FILE_PATH_LITERAL("third_party/accessibility-audit/axs_testing.js"));
118 // static
119 const std::string InProcessBrowserTest::kExpectedAccessibilityResults = "";
120 // JavaScript snippet to configure and run the accessibility audit.
121 const std::string kAccessibilityTestString =
122 "var config = new axs.AuditConfiguration();"
123 "/* Disable warning about rules that cannot be checked. */"
124 "config.showUnsupportedRulesWarning = false;"
125 "config.auditRulesToIgnore = ["
126 " /* "
127 " * The 'elements with meaningful background image' accessibility"
128 " * audit (AX_IMAGE_01) does not apply, since Chrome doesn't"
129 " * disable background images in high-contrast mode like some"
130 " * browsers do."
131 " */"
132 " 'elementsWithMeaningfulBackgroundImage',"
133 " /* "
134 " * Most WebUI pages are inside an IFrame, so the 'web page should"
135 " * have a title that describes topic or purpose' test (AX_TITLE_01)"
136 " * generally does not apply."
137 " */"
138 " 'pageWithoutTitle',"
139 " /* "
140 " * Enable when crbug.com/267035 is fixed."
141 " * Until then it's just noise."
142 " */"
143 " 'lowContrastElements'];"
144 "var result = axs.Audit.run(config);"
145 "var pass = true;"
146 "for (var i = 0; i < result.length; ++i) {"
147 " if (result[i].result == axs.constants.AuditResult.FAIL) {"
148 " pass = false;"
Jay Civelli 2015/02/05 23:29:09 The code would be shorter if you simply called dom
hcarmona 2015/02/06 22:50:53 Done.
149 " break;"
150 " }"
151 "}"
152 "if (pass) {"
153 " domAutomationController.send('');"
154 "}"
155 "else {"
156 " domAutomationController.send(axs.Audit.createReport(result));"
157 "}";
158
115 InProcessBrowserTest::InProcessBrowserTest() 159 InProcessBrowserTest::InProcessBrowserTest()
116 : browser_(NULL), 160 : browser_(NULL),
117 exit_when_last_browser_closes_(true), 161 exit_when_last_browser_closes_(true),
118 open_about_blank_on_browser_launch_(true), 162 open_about_blank_on_browser_launch_(true),
119 multi_desktop_test_(false) 163 multi_desktop_test_(false),
164 run_accessibility_checks_(false)
120 #if defined(OS_MACOSX) 165 #if defined(OS_MACOSX)
121 , autorelease_pool_(NULL) 166 , autorelease_pool_(NULL)
122 #endif // OS_MACOSX 167 #endif // OS_MACOSX
123 { 168 {
124 #if defined(OS_MACOSX) 169 #if defined(OS_MACOSX)
125 // TODO(phajdan.jr): Make browser_tests self-contained on Mac, remove this. 170 // TODO(phajdan.jr): Make browser_tests self-contained on Mac, remove this.
126 // Before we run the browser, we have to hack the path to the exe to match 171 // Before we run the browser, we have to hack the path to the exe to match
127 // what it would be if Chrome was running, because it is used to fork renderer 172 // what it would be if Chrome was running, because it is used to fork renderer
128 // processes, on Linux at least (failure to do so will cause a browser_test to 173 // processes, on Linux at least (failure to do so will cause a browser_test to
129 // be run instead of a renderer). 174 // be run instead of a renderer).
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 #endif 298 #endif
254 299
255 // TODO(pkotwicz): Investigate if we can remove this switch. 300 // TODO(pkotwicz): Investigate if we can remove this switch.
256 if (exit_when_last_browser_closes_) 301 if (exit_when_last_browser_closes_)
257 command_line->AppendSwitch(switches::kDisableZeroBrowsersOpenForTests); 302 command_line->AppendSwitch(switches::kDisableZeroBrowsersOpenForTests);
258 303
259 if (open_about_blank_on_browser_launch_ && command_line->GetArgs().empty()) 304 if (open_about_blank_on_browser_launch_ && command_line->GetArgs().empty())
260 command_line->AppendArg(url::kAboutBlankURL); 305 command_line->AppendArg(url::kAboutBlankURL);
261 } 306 }
262 307
308 void InProcessBrowserTest::RunAccessibilityChecks(std::string *test_result) {
Jay Civelli 2015/02/05 23:29:09 std::string*
hcarmona 2015/02/06 22:50:53 Done.
309 ASSERT_TRUE(browser());
310 auto tab_strip = browser()->tab_strip_model();
311 ASSERT_TRUE(tab_strip);
312 auto web_contents = tab_strip->GetActiveWebContents();
313 ASSERT_TRUE(web_contents);
314 auto focused_frame = web_contents->GetFocusedFrame();
315 ASSERT_TRUE(focused_frame);
316
317 ASSERT_TRUE(LoadAccessibilityLibrary(web_contents));
318
319 // Run test.
320 ASSERT_TRUE(content::ExecuteScriptAndExtractString(focused_frame,
321 kAccessibilityTestString,
322 test_result));
323 }
324
325 bool InProcessBrowserTest::LoadAccessibilityLibrary(
326 content::WebContents* web_contents) {
327 // Path is relative to the source root.
328 base::FilePath src_dir;
329 if (!PathService::Get(base::DIR_SOURCE_ROOT, &src_dir))
330 return false;
331
332 // Get full path to the library.
333 base::FilePath script_path = src_dir.Append(kAXSTesting);
334
335 std::string script;
336 if (!base::ReadFileToString(script_path, &script)) {
337 LOG(ERROR) << "Failed to load script " << script_path.value();
338 return false;
339 }
340
341 return content::ExecuteScript(web_contents, script);
342 }
343
263 bool InProcessBrowserTest::CreateUserDataDirectory() { 344 bool InProcessBrowserTest::CreateUserDataDirectory() {
264 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); 345 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
265 base::FilePath user_data_dir = 346 base::FilePath user_data_dir =
266 command_line->GetSwitchValuePath(switches::kUserDataDir); 347 command_line->GetSwitchValuePath(switches::kUserDataDir);
267 if (user_data_dir.empty()) { 348 if (user_data_dir.empty()) {
268 if (temp_user_data_dir_.CreateUniqueTempDir() && 349 if (temp_user_data_dir_.CreateUniqueTempDir() &&
269 temp_user_data_dir_.IsValid()) { 350 temp_user_data_dir_.IsValid()) {
270 user_data_dir = temp_user_data_dir_.path(); 351 user_data_dir = temp_user_data_dir_.path();
271 } else { 352 } else {
272 LOG(ERROR) << "Could not create temporary user data directory \"" 353 LOG(ERROR) << "Could not create temporary user data directory \""
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 content::NOTIFICATION_LOAD_STOP, 439 content::NOTIFICATION_LOAD_STOP,
359 content::NotificationService::AllSources()); 440 content::NotificationService::AllSources());
360 chrome::AddSelectedTabWithURL(browser, 441 chrome::AddSelectedTabWithURL(browser,
361 GURL(url::kAboutBlankURL), 442 GURL(url::kAboutBlankURL),
362 ui::PAGE_TRANSITION_AUTO_TOPLEVEL); 443 ui::PAGE_TRANSITION_AUTO_TOPLEVEL);
363 observer.Wait(); 444 observer.Wait();
364 445
365 browser->window()->Show(); 446 browser->window()->Show();
366 } 447 }
367 448
449 void InProcessBrowserTest::DisableAccessibilityChecks() {
450 run_accessibility_checks_for_test_case_ = false;
451 }
452
453 void InProcessBrowserTest::EnableAccessibilityChecks() {
454 run_accessibility_checks_for_test_case_ = true;
455 }
456
368 #if !defined(OS_MACOSX) 457 #if !defined(OS_MACOSX)
369 base::CommandLine InProcessBrowserTest::GetCommandLineForRelaunch() { 458 base::CommandLine InProcessBrowserTest::GetCommandLineForRelaunch() {
370 base::CommandLine new_command_line( 459 base::CommandLine new_command_line(
371 base::CommandLine::ForCurrentProcess()->GetProgram()); 460 base::CommandLine::ForCurrentProcess()->GetProgram());
372 base::CommandLine::SwitchMap switches = 461 base::CommandLine::SwitchMap switches =
373 base::CommandLine::ForCurrentProcess()->GetSwitches(); 462 base::CommandLine::ForCurrentProcess()->GetSwitches();
374 switches.erase(switches::kUserDataDir); 463 switches.erase(switches::kUserDataDir);
375 switches.erase(content::kSingleProcessTestsFlag); 464 switches.erase(content::kSingleProcessTestsFlag);
376 switches.erase(switches::kSingleProcess); 465 switches.erase(switches::kSingleProcess);
377 new_command_line.AppendSwitch(content::kLaunchAsBrowser); 466 new_command_line.AppendSwitch(content::kLaunchAsBrowser);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 521
433 // Pump any pending events that were created as a result of creating a 522 // Pump any pending events that were created as a result of creating a
434 // browser. 523 // browser.
435 content::RunAllPendingInMessageLoop(); 524 content::RunAllPendingInMessageLoop();
436 525
437 SetUpOnMainThread(); 526 SetUpOnMainThread();
438 #if defined(OS_MACOSX) 527 #if defined(OS_MACOSX)
439 autorelease_pool_->Recycle(); 528 autorelease_pool_->Recycle();
440 #endif 529 #endif
441 530
531 // run_accessibility_checks_for_test_case_ must be set BEFORE calling
532 // RunTestOnMainThread because a test has the option to override the decision
533 // to run accessibility tests in the test body.
534 run_accessibility_checks_for_test_case_ = run_accessibility_checks_;
535
442 if (!HasFatalFailure()) 536 if (!HasFatalFailure())
443 RunTestOnMainThread(); 537 RunTestOnMainThread();
444 #if defined(OS_MACOSX) 538 #if defined(OS_MACOSX)
445 autorelease_pool_->Recycle(); 539 autorelease_pool_->Recycle();
446 #endif 540 #endif
447 541
542 // Accessibility audit will be run if either:
543 // - The current test called EnableAccessibilityChecks
544 // - The current test did NOT call DisableAccessibilityChecks and
545 // run_accessibility_checks_ is true.
546 if (run_accessibility_checks_for_test_case_) {
547 std::string test_result;
548 RunAccessibilityChecks(&test_result);
549 EXPECT_EQ(kExpectedAccessibilityResults, test_result);
550 }
551
448 // Invoke cleanup and quit even if there are failures. This is similar to 552 // Invoke cleanup and quit even if there are failures. This is similar to
449 // gtest in that it invokes TearDown even if Setup fails. 553 // gtest in that it invokes TearDown even if Setup fails.
450 TearDownOnMainThread(); 554 TearDownOnMainThread();
451 #if defined(OS_MACOSX) 555 #if defined(OS_MACOSX)
452 autorelease_pool_->Recycle(); 556 autorelease_pool_->Recycle();
453 #endif 557 #endif
454 558
455 // Sometimes tests leave Quit tasks in the MessageLoop (for shame), so let's 559 // Sometimes tests leave Quit tasks in the MessageLoop (for shame), so let's
456 // run all pending messages here to avoid preempting the QuitBrowsers tasks. 560 // run all pending messages here to avoid preempting the QuitBrowsers tasks.
457 // TODO(jbates) Once crbug.com/134753 is fixed, this can be removed because it 561 // TODO(jbates) Once crbug.com/134753 is fixed, this can be removed because it
(...skipping 30 matching lines...) Expand all
488 // On the Mac, this eventually reaches 592 // On the Mac, this eventually reaches
489 // -[BrowserWindowController windowWillClose:], which will post a deferred 593 // -[BrowserWindowController windowWillClose:], which will post a deferred
490 // -autorelease on itself to ultimately destroy the Browser object. The line 594 // -autorelease on itself to ultimately destroy the Browser object. The line
491 // below is necessary to pump these pending messages to ensure all Browsers 595 // below is necessary to pump these pending messages to ensure all Browsers
492 // get deleted. 596 // get deleted.
493 content::RunAllPendingInMessageLoop(); 597 content::RunAllPendingInMessageLoop();
494 delete autorelease_pool_; 598 delete autorelease_pool_;
495 autorelease_pool_ = NULL; 599 autorelease_pool_ = NULL;
496 #endif 600 #endif
497 } 601 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698