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 3 // found in the LICENSE file. 4 5 #include "net/test/scoped_mock_log.h" 6 7 #include "base/logging.h" 8 9 namespace net { 10 namespace test { 11 12 // static 13 ScopedMockLog* ScopedMockLog::g_instance_ = NULL; 14 15 ScopedMockLog::ScopedMockLog() : is_capturing_logs_(false) {} 16 17 ScopedMockLog::~ScopedMockLog() { 18 if (is_capturing_logs_) { 19 StopCapturingLogs(); 20 } 21 } 22 23 void ScopedMockLog::StartCapturingLogs() { 24 // We don't use CHECK(), which can generate a new LOG message, and 25 // thus can confuse ScopedMockLog objects or other registered 26 // LogSinks. 27 RAW_CHECK(!is_capturing_logs_); 28 RAW_CHECK(!g_instance_); 29 30 is_capturing_logs_ = true; 31 g_instance_ = this; 32 previous_handler_ = logging::GetLogMessageHandler(); 33 logging::SetLogMessageHandler(LogMessageHandler); 34 } 35 36 void ScopedMockLog::StopCapturingLogs() { 37 // We don't use CHECK(), which can generate a new LOG message, and 38 // thus can confuse ScopedMockLog objects or other registered 39 // LogSinks. 40 RAW_CHECK(is_capturing_logs_); 41 RAW_CHECK(g_instance_ == this); 42 43 is_capturing_logs_ = false; 44 logging::SetLogMessageHandler(previous_handler_); 45 g_instance_ = NULL; 46 } 47 48 // static 49 bool ScopedMockLog::LogMessageHandler(int severity, 50 const char* file, 51 int line, 52 size_t message_start, 53 const std::string& str) { 54 return g_instance_->Log(severity, file, line, message_start, str); 55 } 56 57 } // namespace test 58 } // namespace net 59