diff options
author | jrg@chromium.org <jrg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-28 21:08:04 +0000 |
---|---|---|
committer | jrg@chromium.org <jrg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-28 21:08:04 +0000 |
commit | d55aaa139da94452ebd6812bfa9241ba050978d9 (patch) | |
tree | c5fd3ad94b96114b9109fc92610cae3b9688014b /chrome/browser/browser_process_impl.cc | |
parent | 50e8299eb26f3a289c35badb7e740eb109981cd1 (diff) | |
download | chromium_src-d55aaa139da94452ebd6812bfa9241ba050978d9.zip chromium_src-d55aaa139da94452ebd6812bfa9241ba050978d9.tar.gz chromium_src-d55aaa139da94452ebd6812bfa9241ba050978d9.tar.bz2 |
Implement about:ipc dialog for Mac.
Convert IPC logging trigger from x-process waitable event to a messages
sent to all processes.
Review URL: http://codereview.chromium.org/192070
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@27405 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/browser_process_impl.cc')
-rw-r--r-- | chrome/browser/browser_process_impl.cc | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc index f971e80..d842ede 100644 --- a/chrome/browser/browser_process_impl.cc +++ b/chrome/browser/browser_process_impl.cc @@ -32,6 +32,7 @@ #include "chrome/common/notification_service.h" #include "chrome/common/pref_names.h" #include "chrome/common/pref_service.h" +#include "ipc/ipc_logging.h" #if defined(OS_WIN) #include "chrome/browser/automation/automation_provider_list.h" @@ -42,6 +43,11 @@ #include "chrome/common/temp_scaffolding_stubs.h" #endif +#if defined(IPC_MESSAGE_LOG_ENABLED) +#include "chrome/common/plugin_messages.h" +#include "chrome/common/render_messages.h" +#endif + namespace { // ---------------------------------------------------------------------------- @@ -452,6 +458,47 @@ void BrowserProcessImpl::CheckForInspectorFiles() { NewRunnableMethod(this, &BrowserProcessImpl::DoInspectorFilesCheck)); } +#if defined(IPC_MESSAGE_LOG_ENABLED) + +void BrowserProcessImpl::SetIPCLoggingEnabled(bool enable) { + // First enable myself. + if (enable) + IPC::Logging::current()->Enable(); + else + IPC::Logging::current()->Disable(); + + // Now tell subprocesses. Messages to ChildProcess-derived + // processes must be done on the IO thread. + io_thread()->message_loop()->PostTask + (FROM_HERE, + NewRunnableMethod( + this, + &BrowserProcessImpl::SetIPCLoggingEnabledForChildProcesses, + enable)); + + // Finally, tell the renderers which don't derive from ChildProcess. + // Messages to the renderers must be done on the UI (main) thread. + RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator()); + for (RenderProcessHost* host = i.GetCurrentValue(); + !i.IsAtEnd(); + i.Advance()) { + host->Send(new ViewMsg_SetIPCLoggingEnabled(enable)); + } +} + +// Helper for SetIPCLoggingEnabled. +void BrowserProcessImpl::SetIPCLoggingEnabledForChildProcesses(bool enabled) { + DCHECK(MessageLoop::current() == + ChromeThread::GetMessageLoop(ChromeThread::IO)); + + ChildProcessHost::Iterator i; // default constr references a singleton + for (ChildProcessHost* host = *i; !i.Done(); ++i) { + host->Send(new PluginProcessMsg_SetIPCLoggingEnabled(enabled)); + } +} + +#endif // IPC_MESSAGE_LOG_ENABLED + void BrowserProcessImpl::DoInspectorFilesCheck() { // Runs on FILE thread. DCHECK(file_thread_->message_loop() == MessageLoop::current()); |