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

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

Issue 2034393004: Allow multiple logging::LogMessage{Handler,Listener}s Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address comments, deque for listeners, reentrant test Created 4 years, 4 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 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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 { 50 namespace {
51 51
52 base::LazyInstance<std::vector<std::string> > error_messages_ = 52 base::LazyInstance<std::vector<std::string> > error_messages_ =
53 LAZY_INSTANCE_INITIALIZER; 53 LAZY_INSTANCE_INITIALIZER;
54 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 { 55 class WebUIJsInjectionReadyObserver : public content::WebContentsObserver {
70 public: 56 public:
71 WebUIJsInjectionReadyObserver(content::WebContents* web_contents, 57 WebUIJsInjectionReadyObserver(content::WebContents* web_contents,
72 WebUIBrowserTest* browser_test, 58 WebUIBrowserTest* browser_test,
73 const std::string& preload_test_fixture, 59 const std::string& preload_test_fixture,
74 const std::string& preload_test_name) 60 const std::string& preload_test_name)
75 : content::WebContentsObserver(web_contents), 61 : content::WebContentsObserver(web_contents),
76 browser_test_(browser_test), 62 browser_test_(browser_test),
77 preload_test_fixture_(preload_test_fixture), 63 preload_test_fixture_(preload_test_fixture),
78 preload_test_name_(preload_test_name) {} 64 preload_test_name_(preload_test_name) {}
79 65
80 void RenderViewCreated(content::RenderViewHost* rvh) override { 66 void RenderViewCreated(content::RenderViewHost* rvh) override {
81 browser_test_->PreLoadJavascriptLibraries( 67 browser_test_->PreLoadJavascriptLibraries(
82 preload_test_fixture_, preload_test_name_, rvh); 68 preload_test_fixture_, preload_test_name_, rvh);
83 } 69 }
84 70
85 private: 71 private:
86 WebUIBrowserTest* browser_test_; 72 WebUIBrowserTest* browser_test_;
87 std::string preload_test_fixture_; 73 std::string preload_test_fixture_;
88 std::string preload_test_name_; 74 std::string preload_test_name_;
89 }; 75 };
90 76
91 } // namespace 77 } // namespace
92 78
79 // Intercepts all log messages.
80 void WebUILogMessageListener::OnMessage(int severity,
81 const char* file,
82 int line,
83 size_t message_start,
84 const std::string& str) {
85 if (severity == logging::LOG_ERROR && file &&
86 std::string("CONSOLE") == file) {
87 error_messages_.Get().push_back(str);
88 }
89 }
90
93 WebUIBrowserTest::~WebUIBrowserTest() { 91 WebUIBrowserTest::~WebUIBrowserTest() {
94 } 92 }
95 93
96 bool WebUIBrowserTest::RunJavascriptFunction(const std::string& function_name) { 94 bool WebUIBrowserTest::RunJavascriptFunction(const std::string& function_name) {
97 ConstValueVector empty_args; 95 ConstValueVector empty_args;
98 return RunJavascriptFunction(function_name, empty_args); 96 return RunJavascriptFunction(function_name, empty_args);
99 } 97 }
100 98
101 bool WebUIBrowserTest::RunJavascriptFunction(const std::string& function_name, 99 bool WebUIBrowserTest::RunJavascriptFunction(const std::string& function_name,
102 base::Value* arg) { 100 base::Value* arg) {
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 }; 363 };
366 364
367 base::LazyInstance<MockWebUIProvider> mock_provider_ = 365 base::LazyInstance<MockWebUIProvider> mock_provider_ =
368 LAZY_INSTANCE_INITIALIZER; 366 LAZY_INSTANCE_INITIALIZER;
369 367
370 } // namespace 368 } // namespace
371 369
372 void WebUIBrowserTest::SetUpOnMainThread() { 370 void WebUIBrowserTest::SetUpOnMainThread() {
373 JavaScriptBrowserTest::SetUpOnMainThread(); 371 JavaScriptBrowserTest::SetUpOnMainThread();
374 372
375 logging::SetLogMessageHandler(&LogHandler);
376
377 AddLibrary(base::FilePath(kA11yAuditLibraryJSPath)); 373 AddLibrary(base::FilePath(kA11yAuditLibraryJSPath));
378 374
379 content::WebUIControllerFactory::UnregisterFactoryForTesting( 375 content::WebUIControllerFactory::UnregisterFactoryForTesting(
380 ChromeWebUIControllerFactory::GetInstance()); 376 ChromeWebUIControllerFactory::GetInstance());
381 377
382 test_factory_.reset(new TestChromeWebUIControllerFactory); 378 test_factory_.reset(new TestChromeWebUIControllerFactory);
383 379
384 content::WebUIControllerFactory::RegisterFactory(test_factory_.get()); 380 content::WebUIControllerFactory::RegisterFactory(test_factory_.get());
385 381
386 test_factory_->AddFactoryOverride(GURL(kDummyURL).host(), 382 test_factory_->AddFactoryOverride(GURL(kDummyURL).host(),
387 mock_provider_.Pointer()); 383 mock_provider_.Pointer());
388 test_factory_->AddFactoryOverride(content::kChromeUIResourcesHost, 384 test_factory_->AddFactoryOverride(content::kChromeUIResourcesHost,
389 mock_provider_.Pointer()); 385 mock_provider_.Pointer());
390 } 386 }
391 387
392 void WebUIBrowserTest::TearDownOnMainThread() { 388 void WebUIBrowserTest::TearDownOnMainThread() {
393 logging::SetLogMessageHandler(NULL);
394
395 test_factory_->RemoveFactoryOverride(GURL(kDummyURL).host()); 389 test_factory_->RemoveFactoryOverride(GURL(kDummyURL).host());
396 content::WebUIControllerFactory::UnregisterFactoryForTesting( 390 content::WebUIControllerFactory::UnregisterFactoryForTesting(
397 test_factory_.get()); 391 test_factory_.get());
398 392
399 // This is needed to avoid a debug assert after the test completes, see stack 393 // This is needed to avoid a debug assert after the test completes, see stack
400 // trace in http://crrev.com/179347 394 // trace in http://crrev.com/179347
401 content::WebUIControllerFactory::RegisterFactory( 395 content::WebUIControllerFactory::RegisterFactory(
402 ChromeWebUIControllerFactory::GetInstance()); 396 ChromeWebUIControllerFactory::GetInstance());
403 397
404 test_factory_.reset(); 398 test_factory_.reset();
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 } 482 }
489 483
490 GURL WebUIBrowserTest::WebUITestDataPathToURL( 484 GURL WebUIBrowserTest::WebUITestDataPathToURL(
491 const base::FilePath::StringType& path) { 485 const base::FilePath::StringType& path) {
492 base::FilePath dir_test_data; 486 base::FilePath dir_test_data;
493 EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &dir_test_data)); 487 EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &dir_test_data));
494 base::FilePath test_path(dir_test_data.Append(kWebUITestFolder).Append(path)); 488 base::FilePath test_path(dir_test_data.Append(kWebUITestFolder).Append(path));
495 EXPECT_TRUE(base::PathExists(test_path)); 489 EXPECT_TRUE(base::PathExists(test_path));
496 return net::FilePathToFileURL(test_path); 490 return net::FilePathToFileURL(test_path);
497 } 491 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698