// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "content/public/browser/browser_ipc_logging.h" #include "base/bind.h" #include "content/common/child_process_messages.h" #include "content/public/browser/browser_child_process_host_iterator.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/render_process_host.h" #include "ipc/ipc_logging.h" namespace content { #if defined(IPC_MESSAGE_LOG_ENABLED) void EnableIPCLoggingForChildProcesses(bool enabled) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); BrowserChildProcessHostIterator i; // default constr references a singleton while (!i.Done()) { i.Send(new ChildProcessMsg_SetIPCLoggingEnabled(enabled)); ++i; } } void EnableIPCLogging(bool enable) { // First enable myself. if (enable) IPC::Logging::GetInstance()->Enable(); else IPC::Logging::GetInstance()->Disable(); // Now tell subprocesses. Messages to ChildProcess-derived // processes must be done on the IO thread. BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, base::Bind(EnableIPCLoggingForChildProcesses, enable)); // Finally, tell the renderers which don't derive from ChildProcess. // Messages to the renderers must be done on the UI (main) thread. for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator()); !i.IsAtEnd(); i.Advance()) i.GetCurrentValue()->Send(new ChildProcessMsg_SetIPCLoggingEnabled(enable)); } #endif // IPC_MESSAGE_LOG_ENABLED } // namespace content