Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(565)

Side by Side Diff: ipc/ipc_logging.h

Issue 155905: Separates ipc code from common (http://crbug.com/16829) (Closed)
Patch Set: Fixes reference to 'common_message_traits' it's actually 'common_param_traits' Created 11 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ipc/ipc_fuzzing_tests.cc ('k') | ipc/ipc_logging.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2006-2008 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 #ifndef IPC_IPC_LOGGING_H_
6 #define IPC_IPC_LOGGING_H_
7
8 #include "ipc/ipc_message.h" // For IPC_MESSAGE_LOG_ENABLED.
9
10 #ifdef IPC_MESSAGE_LOG_ENABLED
11
12 #include <vector>
13
14 #include "base/message_loop.h"
15 #include "base/scoped_ptr.h"
16 #include "base/singleton.h"
17 #include "base/waitable_event_watcher.h"
18
19 namespace IPC {
20
21 class Message;
22
23 // One instance per process. Needs to be created on the main thread (the UI
24 // thread in the browser) but OnPreDispatchMessage/OnPostDispatchMessage
25 // can be called on other threads.
26 class Logging : public base::WaitableEventWatcher::Delegate,
27 public MessageLoop::DestructionObserver {
28 public:
29 // Implemented by consumers of log messages.
30 class Consumer {
31 public:
32 virtual void Log(const LogData& data) = 0;
33 };
34
35 void SetConsumer(Consumer* consumer);
36
37 ~Logging();
38 static Logging* current();
39
40 void Enable();
41 void Disable();
42 bool Enabled() const { return enabled_; }
43
44 // Called by child processes to give the logger object the channel to send
45 // logging data to the browser process.
46 void SetIPCSender(Message::Sender* sender);
47
48 // Called in the browser process when logging data from a child process is
49 // received.
50 void OnReceivedLoggingMessage(const Message& message);
51
52 void OnSendMessage(Message* message, const std::string& channel_id);
53 void OnPreDispatchMessage(const Message& message);
54 void OnPostDispatchMessage(const Message& message,
55 const std::string& channel_id);
56
57 // Returns the name of the logging enabled/disabled events so that the
58 // sandbox can add them to to the policy. If true, gets the name of the
59 // enabled event, if false, gets the name of the disabled event.
60 static std::wstring GetEventName(bool enabled);
61
62 // Like the *MsgLog functions declared for each message class, except this
63 // calls the correct one based on the message type automatically. Defined in
64 // ipc_logging.cc.
65 static void GetMessageText(uint16 type, std::wstring* name,
66 const Message* message, std::wstring* params);
67
68 // WaitableEventWatcher::Delegate implementation
69 void OnWaitableEventSignaled(base::WaitableEvent* event);
70
71 // MessageLoop::DestructionObserver implementation
72 void WillDestroyCurrentMessageLoop();
73
74 typedef void (*LogFunction)(uint16 type,
75 std::wstring* name,
76 const Message* msg,
77 std::wstring* params);
78
79 static void SetLoggerFunctions(LogFunction *functions);
80
81 private:
82 friend struct DefaultSingletonTraits<Logging>;
83 Logging();
84
85 std::wstring GetEventName(int browser_pid, bool enabled);
86 void OnSendLogs();
87 void Log(const LogData& data);
88
89 void RegisterWaitForEvent(bool enabled);
90
91 base::WaitableEventWatcher watcher_;
92
93 scoped_ptr<base::WaitableEvent> logging_event_on_;
94 scoped_ptr<base::WaitableEvent> logging_event_off_;
95 bool enabled_;
96
97 std::vector<LogData> queued_logs_;
98 bool queue_invoke_later_pending_;
99
100 Message::Sender* sender_;
101 MessageLoop* main_thread_;
102
103 Consumer* consumer_;
104
105 static LogFunction *log_function_mapping_;
106 };
107
108 } // namespace IPC
109
110 #endif // IPC_MESSAGE_LOG_ENABLED
111
112 #endif // IPC_IPC_LOGGING_H_
OLDNEW
« no previous file with comments | « ipc/ipc_fuzzing_tests.cc ('k') | ipc/ipc_logging.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698