summaryrefslogtreecommitdiffstats
path: root/chrome/tools/ipclist
diff options
context:
space:
mode:
authortsepez@chromium.org <tsepez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-17 18:20:52 +0000
committertsepez@chromium.org <tsepez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-17 18:20:52 +0000
commite503a12601fee9e142e37a630f3db9b758499c82 (patch)
tree7aa599b0890395b715ff2ab292dde9a2f0b10db6 /chrome/tools/ipclist
parent5e3ebf12585ed50e2955d21a6276669f5e3a0e4e (diff)
downloadchromium_src-e503a12601fee9e142e37a630f3db9b758499c82.zip
chromium_src-e503a12601fee9e142e37a630f3db9b758499c82.tar.gz
chromium_src-e503a12601fee9e142e37a630f3db9b758499c82.tar.bz2
Creates the ipclist utility that chrome security team has wanted to dump
the known IPC messages. Going forward, this should help identify new messages between versions of chrome so that they may be given extra scrutiny for potential badness. under the common_message_generator.h umbrella. Review URL: http://codereview.chromium.org/6646005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@78564 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/tools/ipclist')
-rw-r--r--chrome/tools/ipclist/DEPS4
-rw-r--r--chrome/tools/ipclist/all_messages.h38
-rw-r--r--chrome/tools/ipclist/ipclist.cc120
3 files changed, 162 insertions, 0 deletions
diff --git a/chrome/tools/ipclist/DEPS b/chrome/tools/ipclist/DEPS
new file mode 100644
index 0000000..2d75991
--- /dev/null
+++ b/chrome/tools/ipclist/DEPS
@@ -0,0 +1,4 @@
+# Wherever a message file is found, we follow.
+include_rules = [
+ "+ppapi/proxy",
+] \ No newline at end of file
diff --git a/chrome/tools/ipclist/all_messages.h b/chrome/tools/ipclist/all_messages.h
new file mode 100644
index 0000000..79b6b98
--- /dev/null
+++ b/chrome/tools/ipclist/all_messages.h
@@ -0,0 +1,38 @@
+// Copyright (c) 2010 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.
+
+// Multiply-included file, hence no include guard.
+// Inclusion of all message files present in the system. Keep this file
+// up-to-date when adding a new value to enum IPCMessageStart in
+// ipc/ipc_message_utils.h to include the corresponding message file.
+#include "chrome/browser/importer/importer_messages.h"
+#include "chrome/common/autofill_messages.h"
+#include "chrome/common/automation_messages.h"
+#include "chrome/common/devtools_messages.h"
+#include "chrome/common/nacl_messages.h"
+#include "chrome/common/render_messages.h"
+#include "chrome/common/safebrowsing_messages.h"
+#include "chrome/common/service_messages.h"
+#include "chrome/common/utility_messages.h"
+#include "content/common/appcache_messages.h"
+#include "content/common/child_process_messages.h"
+#include "content/common/clipboard_messages.h"
+#include "content/common/database_messages.h"
+#include "content/common/dom_storage_messages.h"
+#include "content/common/file_system_messages.h"
+#include "content/common/file_utilities_messages.h"
+#include "content/common/gpu_messages.h"
+#include "content/common/indexed_db_messages.h"
+#include "content/common/mime_registry_messages.h"
+#include "content/common/p2p_messages.h"
+#include "content/common/pepper_file_messages.h"
+#include "content/common/pepper_messages.h"
+#include "content/common/plugin_messages.h"
+#include "content/common/resource_messages.h"
+#include "content/common/socket_stream_messages.h"
+#include "content/common/speech_input_messages.h"
+#include "content/common/webblob_messages.h"
+#include "content/common/worker_messages.h"
+#include "ppapi/proxy/ppapi_messages.h"
+
diff --git a/chrome/tools/ipclist/ipclist.cc b/chrome/tools/ipclist/ipclist.cc
new file mode 100644
index 0000000..53af9d7
--- /dev/null
+++ b/chrome/tools/ipclist/ipclist.cc
@@ -0,0 +1,120 @@
+// Copyright (c) 2010 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 <algorithm>
+#include <iostream>
+#include <string>
+#include <vector>
+
+// Include once to get the type definitions
+#include "chrome/tools/ipclist/all_messages.h"
+
+struct msginfo {
+ const char* name;
+ int id;
+ int in_count;
+ int out_count;
+
+ bool operator< (const msginfo other) const {
+ return id < other.id;
+ }
+};
+
+// Redefine macros to generate table
+#include "ipc/ipc_message_null_macros.h"
+#undef IPC_MESSAGE_DECL
+#define IPC_MESSAGE_DECL(kind, type, name, in, out, ilist, olist) \
+ { #name, IPC_MESSAGE_ID(), in, out },
+
+static msginfo msgtable[] = {
+#include "chrome/tools/ipclist/all_messages.h"
+};
+#define MSGTABLE_SIZE (sizeof(msgtable)/sizeof(msgtable[0]))
+
+static bool check_msgtable() {
+ bool result = true;
+ int previous_class_id = 0;
+ int highest_class_id = 0;
+ std::vector<int> exemptions;
+
+ // Exclude test files from consideration. Do not include message
+ // files used inside the actual chrome browser in this list.
+ exemptions.push_back(TestMsgStart);
+ exemptions.push_back(FirefoxImporterUnittestMsgStart);
+
+ for (size_t i = 0; i < MSGTABLE_SIZE; ++i) {
+ int class_id = IPC_MESSAGE_ID_CLASS(msgtable[i].id);
+ if (class_id >= LastIPCMsgStart) {
+ std::cout << "Invalid LastIPCMsgStart setting\n";
+ result = false;
+ }
+ while (class_id > previous_class_id + 1) {
+ std::vector<int>::iterator iter;
+ iter = find(exemptions.begin(), exemptions.end(), previous_class_id+1);
+ if (iter == exemptions.end()) {
+ std::cout << "Missing message file: gap before " << class_id << "\n";
+ result = false;
+ break;
+ }
+ ++previous_class_id;
+ }
+ previous_class_id = class_id;
+ if (class_id > highest_class_id)
+ highest_class_id = class_id;
+ }
+
+ if (LastIPCMsgStart > highest_class_id + 1) {
+ std::cout << "Missing message file: gap before LastIPCMsgStart\n";
+ result = false;
+ }
+
+ if (!result)
+ std::cout << "Please check chrome/tools/ipclist/all_messages.h.\n";
+
+ return result;
+}
+
+static void dump_msgtable(bool show_args, bool show_ids) {
+ for (size_t i = 0; i < MSGTABLE_SIZE; ++i) {
+ if (show_ids) {
+ std::cout << "{" << IPC_MESSAGE_ID_CLASS(msgtable[i].id) << ", " <<
+ IPC_MESSAGE_ID_LINE(msgtable[i].id) << "}: ";
+ }
+ std::cout << msgtable[i].name;
+ if (show_args) {
+ std::cout << "(" << msgtable[i].in_count << " IN, " <<
+ msgtable[i].out_count << " OUT)";
+ }
+ std::cout << "\n";
+ }
+}
+
+int main(int argc, char **argv) {
+ bool show_args = false;
+ bool show_ids = false;
+ bool skip_check = false;
+
+ while (--argc > 0) {
+ ++argv;
+ if (std::string("--args") == *argv) {
+ show_args = true;
+ } else if (std::string("--ids") == *argv) {
+ show_ids = true;
+ } else if (std::string("--no-check") == *argv) {
+ skip_check = true;
+ } else {
+ std::cout << "usage: ipclist [--args] [--ids] [--no-check]\n";
+ return 1;
+ }
+ }
+
+ std::sort(msgtable, msgtable + MSGTABLE_SIZE);
+
+ if (!skip_check && check_msgtable() == false)
+ return 1;
+
+ dump_msgtable(show_args, show_ids);
+ return 0;
+}
+