summaryrefslogtreecommitdiffstats
path: root/chrome/browser/browser_process_impl.cc
diff options
context:
space:
mode:
authorjrg@chromium.org <jrg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-28 21:08:04 +0000
committerjrg@chromium.org <jrg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-28 21:08:04 +0000
commitd55aaa139da94452ebd6812bfa9241ba050978d9 (patch)
treec5fd3ad94b96114b9109fc92610cae3b9688014b /chrome/browser/browser_process_impl.cc
parent50e8299eb26f3a289c35badb7e740eb109981cd1 (diff)
downloadchromium_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.cc47
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());