Home | History | Annotate | Download | only in browser
      1 // Copyright (c) 2011 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 "content/public/browser/browser_ipc_logging.h"
      6 
      7 #include "base/bind.h"
      8 #include "content/common/child_process_messages.h"
      9 #include "content/public/browser/browser_child_process_host_iterator.h"
     10 #include "content/public/browser/browser_thread.h"
     11 #include "content/public/browser/render_process_host.h"
     12 #include "ipc/ipc_logging.h"
     13 
     14 namespace content {
     15 
     16 #if defined(IPC_MESSAGE_LOG_ENABLED)
     17 
     18 void EnableIPCLoggingForChildProcesses(bool enabled) {
     19   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
     20 
     21   BrowserChildProcessHostIterator i;  // default constr references a singleton
     22   while (!i.Done()) {
     23     i.Send(new ChildProcessMsg_SetIPCLoggingEnabled(enabled));
     24     ++i;
     25   }
     26 }
     27 
     28 void EnableIPCLogging(bool enable) {
     29   // First enable myself.
     30   if (enable)
     31     IPC::Logging::GetInstance()->Enable();
     32   else
     33     IPC::Logging::GetInstance()->Disable();
     34 
     35   // Now tell subprocesses.  Messages to ChildProcess-derived
     36   // processes must be done on the IO thread.
     37   BrowserThread::PostTask(
     38       BrowserThread::IO,
     39       FROM_HERE,
     40       base::Bind(EnableIPCLoggingForChildProcesses, enable));
     41 
     42   // Finally, tell the renderers which don't derive from ChildProcess.
     43   // Messages to the renderers must be done on the UI (main) thread.
     44   for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator());
     45        !i.IsAtEnd(); i.Advance())
     46     i.GetCurrentValue()->Send(new ChildProcessMsg_SetIPCLoggingEnabled(enable));
     47 }
     48 
     49 #endif  // IPC_MESSAGE_LOG_ENABLED
     50 
     51 }  // namespace content
     52