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

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

Issue 2045843002: Move console error detection in browser tests to higher level (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ftp-error
Patch Set: Created 4 years, 6 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
« no previous file with comments | « chrome/test/base/javascript_browser_test.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/web_ui_browser_test.h" 5 #include "chrome/test/base/web_ui_browser_test.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 29 matching lines...) Expand all
40 40
41 #if defined(ENABLE_PRINT_PREVIEW) 41 #if defined(ENABLE_PRINT_PREVIEW)
42 #include "chrome/browser/printing/print_preview_dialog_controller.h" 42 #include "chrome/browser/printing/print_preview_dialog_controller.h"
43 #endif 43 #endif
44 44
45 using content::RenderViewHost; 45 using content::RenderViewHost;
46 using content::WebContents; 46 using content::WebContents;
47 using content::WebUIController; 47 using content::WebUIController;
48 using content::WebUIMessageHandler; 48 using content::WebUIMessageHandler;
49 49
50 namespace {
51
52 base::LazyInstance<std::vector<std::string> > error_messages_ =
53 LAZY_INSTANCE_INITIALIZER;
54
55 // Intercepts all log messages.
56 bool LogHandler(int severity,
57 const char* file,
58 int line,
59 size_t message_start,
60 const std::string& str) {
61 if (severity == logging::LOG_ERROR && file &&
62 std::string("CONSOLE") == file) {
63 error_messages_.Get().push_back(str);
64 }
65
66 return false;
67 }
68
69 class WebUIJsInjectionReadyObserver : public content::WebContentsObserver { 50 class WebUIJsInjectionReadyObserver : public content::WebContentsObserver {
70 public: 51 public:
71 WebUIJsInjectionReadyObserver(content::WebContents* web_contents, 52 WebUIJsInjectionReadyObserver(content::WebContents* web_contents,
72 WebUIBrowserTest* browser_test, 53 WebUIBrowserTest* browser_test,
73 const std::string& preload_test_fixture, 54 const std::string& preload_test_fixture,
74 const std::string& preload_test_name) 55 const std::string& preload_test_name)
75 : content::WebContentsObserver(web_contents), 56 : content::WebContentsObserver(web_contents),
76 browser_test_(browser_test), 57 browser_test_(browser_test),
77 preload_test_fixture_(preload_test_fixture), 58 preload_test_fixture_(preload_test_fixture),
78 preload_test_name_(preload_test_name) {} 59 preload_test_name_(preload_test_name) {}
79 60
80 void RenderViewCreated(content::RenderViewHost* rvh) override { 61 void RenderViewCreated(content::RenderViewHost* rvh) override {
81 browser_test_->PreLoadJavascriptLibraries( 62 browser_test_->PreLoadJavascriptLibraries(
82 preload_test_fixture_, preload_test_name_, rvh); 63 preload_test_fixture_, preload_test_name_, rvh);
83 } 64 }
84 65
85 private: 66 private:
86 WebUIBrowserTest* browser_test_; 67 WebUIBrowserTest* browser_test_;
87 std::string preload_test_fixture_; 68 std::string preload_test_fixture_;
88 std::string preload_test_name_; 69 std::string preload_test_name_;
89 }; 70 };
90 71
91 } // namespace
92
93 WebUIBrowserTest::~WebUIBrowserTest() { 72 WebUIBrowserTest::~WebUIBrowserTest() {
94 } 73 }
95 74
96 bool WebUIBrowserTest::RunJavascriptFunction(const std::string& function_name) { 75 bool WebUIBrowserTest::RunJavascriptFunction(const std::string& function_name) {
97 ConstValueVector empty_args; 76 ConstValueVector empty_args;
98 return RunJavascriptFunction(function_name, empty_args); 77 return RunJavascriptFunction(function_name, empty_args);
99 } 78 }
100 79
101 bool WebUIBrowserTest::RunJavascriptFunction(const std::string& function_name, 80 bool WebUIBrowserTest::RunJavascriptFunction(const std::string& function_name,
102 base::Value* arg) { 81 base::Value* arg) {
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 }; 344 };
366 345
367 base::LazyInstance<MockWebUIProvider> mock_provider_ = 346 base::LazyInstance<MockWebUIProvider> mock_provider_ =
368 LAZY_INSTANCE_INITIALIZER; 347 LAZY_INSTANCE_INITIALIZER;
369 348
370 } // namespace 349 } // namespace
371 350
372 void WebUIBrowserTest::SetUpOnMainThread() { 351 void WebUIBrowserTest::SetUpOnMainThread() {
373 JavaScriptBrowserTest::SetUpOnMainThread(); 352 JavaScriptBrowserTest::SetUpOnMainThread();
374 353
375 logging::SetLogMessageHandler(&LogHandler);
376
377 AddLibrary(base::FilePath(kA11yAuditLibraryJSPath)); 354 AddLibrary(base::FilePath(kA11yAuditLibraryJSPath));
378 355
379 content::WebUIControllerFactory::UnregisterFactoryForTesting( 356 content::WebUIControllerFactory::UnregisterFactoryForTesting(
380 ChromeWebUIControllerFactory::GetInstance()); 357 ChromeWebUIControllerFactory::GetInstance());
381 358
382 test_factory_.reset(new TestChromeWebUIControllerFactory); 359 test_factory_.reset(new TestChromeWebUIControllerFactory);
383 360
384 content::WebUIControllerFactory::RegisterFactory(test_factory_.get()); 361 content::WebUIControllerFactory::RegisterFactory(test_factory_.get());
385 362
386 test_factory_->AddFactoryOverride(GURL(kDummyURL).host(), 363 test_factory_->AddFactoryOverride(GURL(kDummyURL).host(),
387 mock_provider_.Pointer()); 364 mock_provider_.Pointer());
388 test_factory_->AddFactoryOverride(content::kChromeUIResourcesHost, 365 test_factory_->AddFactoryOverride(content::kChromeUIResourcesHost,
389 mock_provider_.Pointer()); 366 mock_provider_.Pointer());
390 } 367 }
391 368
392 void WebUIBrowserTest::TearDownOnMainThread() { 369 void WebUIBrowserTest::TearDownOnMainThread() {
393 logging::SetLogMessageHandler(NULL);
394
395 test_factory_->RemoveFactoryOverride(GURL(kDummyURL).host()); 370 test_factory_->RemoveFactoryOverride(GURL(kDummyURL).host());
396 content::WebUIControllerFactory::UnregisterFactoryForTesting( 371 content::WebUIControllerFactory::UnregisterFactoryForTesting(
397 test_factory_.get()); 372 test_factory_.get());
398 373
399 // This is needed to avoid a debug assert after the test completes, see stack 374 // This is needed to avoid a debug assert after the test completes, see stack
400 // trace in http://crrev.com/179347 375 // trace in http://crrev.com/179347
401 content::WebUIControllerFactory::RegisterFactory( 376 content::WebUIControllerFactory::RegisterFactory(
402 ChromeWebUIControllerFactory::GetInstance()); 377 ChromeWebUIControllerFactory::GetInstance());
403 378
404 test_factory_.reset(); 379 test_factory_.reset();
380
381 JavaScriptBrowserTest::TearDownOnMainThread();
405 } 382 }
406 383
407 void WebUIBrowserTest::SetWebUIInstance(content::WebUI* web_ui) { 384 void WebUIBrowserTest::SetWebUIInstance(content::WebUI* web_ui) {
408 override_selected_web_ui_ = web_ui; 385 override_selected_web_ui_ = web_ui;
409 } 386 }
410 387
411 WebUIMessageHandler* WebUIBrowserTest::GetMockMessageHandler() { 388 WebUIMessageHandler* WebUIBrowserTest::GetMockMessageHandler() {
412 return NULL; 389 return NULL;
413 } 390 }
414 391
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 for (size_t i = 0; i < libraries.size(); ++i) 428 for (size_t i = 0; i < libraries.size(); ++i)
452 test_handler_->PreloadJavaScript(libraries[i], preload_host); 429 test_handler_->PreloadJavaScript(libraries[i], preload_host);
453 430
454 if (is_test) 431 if (is_test)
455 result = test_handler_->RunJavaScriptTestWithResult(content); 432 result = test_handler_->RunJavaScriptTestWithResult(content);
456 else if (preload_host) 433 else if (preload_host)
457 test_handler_->PreloadJavaScript(content, preload_host); 434 test_handler_->PreloadJavaScript(content, preload_host);
458 else 435 else
459 test_handler_->RunJavaScript(content); 436 test_handler_->RunJavaScript(content);
460 437
461 if (error_messages_.Get().size() > 0) { 438 if (has_console_errors()) {
462 LOG(ERROR) << "Encountered javascript console error(s)"; 439 LOG(ERROR) << "Encountered javascript console error(s)";
463 result = false; 440 result = false;
464 error_messages_.Get().clear(); 441 set_has_console_errors(false);
465 } 442 }
443
466 return result; 444 return result;
467 } 445 }
468 446
469 void WebUIBrowserTest::SetupHandlers() { 447 void WebUIBrowserTest::SetupHandlers() {
470 content::WebUI* web_ui_instance = 448 content::WebUI* web_ui_instance =
471 override_selected_web_ui_ 449 override_selected_web_ui_
472 ? override_selected_web_ui_ 450 ? override_selected_web_ui_
473 : browser()->tab_strip_model()->GetActiveWebContents()->GetWebUI(); 451 : browser()->tab_strip_model()->GetActiveWebContents()->GetWebUI();
474 ASSERT_TRUE(web_ui_instance != NULL); 452 ASSERT_TRUE(web_ui_instance != NULL);
475 453
476 test_handler_->set_web_ui(web_ui_instance); 454 test_handler_->set_web_ui(web_ui_instance);
477 test_handler_->RegisterMessages(); 455 test_handler_->RegisterMessages();
478 456
479 if (GetMockMessageHandler()) { 457 if (GetMockMessageHandler()) {
480 GetMockMessageHandler()->set_web_ui(web_ui_instance); 458 GetMockMessageHandler()->set_web_ui(web_ui_instance);
481 GetMockMessageHandler()->RegisterMessages(); 459 GetMockMessageHandler()->RegisterMessages();
482 } 460 }
483 } 461 }
484 462
485 GURL WebUIBrowserTest::WebUITestDataPathToURL( 463 GURL WebUIBrowserTest::WebUITestDataPathToURL(
486 const base::FilePath::StringType& path) { 464 const base::FilePath::StringType& path) {
487 base::FilePath dir_test_data; 465 base::FilePath dir_test_data;
488 EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &dir_test_data)); 466 EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &dir_test_data));
489 base::FilePath test_path(dir_test_data.Append(kWebUITestFolder).Append(path)); 467 base::FilePath test_path(dir_test_data.Append(kWebUITestFolder).Append(path));
490 EXPECT_TRUE(base::PathExists(test_path)); 468 EXPECT_TRUE(base::PathExists(test_path));
491 return net::FilePathToFileURL(test_path); 469 return net::FilePathToFileURL(test_path);
492 } 470 }
OLDNEW
« no previous file with comments | « chrome/test/base/javascript_browser_test.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698