1diff --git a/mojo/core/core.cc b/mojo/core/core.cc
2index 8422ec2..3ffa640 100644
3--- a/mojo/core/core.cc
4+++ b/mojo/core/core.cc
5@@ -21,7 +21,7 @@
6 #include "base/strings/string_piece.h"
7 #include "base/threading/thread_task_runner_handle.h"
8 #include "base/time/time.h"
9-#include "base/trace_event/memory_dump_manager.h"
10+// #include "base/trace_event/memory_dump_manager.h"
11 #include "build/build_config.h"
12 #include "mojo/core/channel.h"
13 #include "mojo/core/configuration.h"
14@@ -127,8 +127,8 @@ void RunMojoProcessErrorHandler(ProcessDisconnectHandler* disconnect_handler,
15
16 Core::Core() {
17   handles_.reset(new HandleTable);
18-  base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
19-      handles_.get(), "MojoHandleTable", nullptr);
20+  // base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
21+  //     handles_.get(), "MojoHandleTable", nullptr);
22 }
23
24 Core::~Core() {
25@@ -142,8 +142,8 @@ Core::~Core() {
26                              base::BindOnce(&Core::PassNodeControllerToIOThread,
27                                             base::Passed(&node_controller_)));
28   }
29-  base::trace_event::MemoryDumpManager::GetInstance()
30-      ->UnregisterAndDeleteDumpProviderSoon(std::move(handles_));
31+  // base::trace_event::MemoryDumpManager::GetInstance()
32+  //     ->UnregisterAndDeleteDumpProviderSoon(std::move(handles_));
33 }
34
35 void Core::SetIOTaskRunner(scoped_refptr<base::TaskRunner> io_task_runner) {
36diff --git a/mojo/core/user_message_impl.cc b/mojo/core/user_message_impl.cc
37index d4a4da1..9cb8284 100644
38--- a/mojo/core/user_message_impl.cc
39+++ b/mojo/core/user_message_impl.cc
40@@ -13,10 +13,10 @@
41 #include "base/no_destructor.h"
42 #include "base/numerics/safe_conversions.h"
43 #include "base/numerics/safe_math.h"
44-#include "base/trace_event/memory_allocator_dump.h"
45-#include "base/trace_event/memory_dump_manager.h"
46-#include "base/trace_event/memory_dump_provider.h"
47-#include "base/trace_event/trace_event.h"
48+// #include "base/trace_event/memory_allocator_dump.h"
49+// #include "base/trace_event/memory_dump_manager.h"
50+// #include "base/trace_event/memory_dump_provider.h"
51+// #include "base/trace_event/trace_event.h"
52 #include "mojo/core/core.h"
53 #include "mojo/core/node_channel.h"
54 #include "mojo/core/node_controller.h"
55@@ -271,36 +271,36 @@ void DecrementMessageCount() {
56   base::subtle::NoBarrier_AtomicIncrement(&g_message_count, -1);
57 }
58
59-class MessageMemoryDumpProvider : public base::trace_event::MemoryDumpProvider {
60- public:
61-  MessageMemoryDumpProvider() {
62-    base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
63-        this, "MojoMessages", nullptr);
64-  }
65-
66-  ~MessageMemoryDumpProvider() override {
67-    base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider(
68-        this);
69-  }
70-
71- private:
72-  // base::trace_event::MemoryDumpProvider:
73-  bool OnMemoryDump(const base::trace_event::MemoryDumpArgs& args,
74-                    base::trace_event::ProcessMemoryDump* pmd) override {
75-    auto* dump = pmd->CreateAllocatorDump("mojo/messages");
76-    dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameObjectCount,
77-                    base::trace_event::MemoryAllocatorDump::kUnitsObjects,
78-                    base::subtle::NoBarrier_Load(&g_message_count));
79-    return true;
80-  }
81-
82-  DISALLOW_COPY_AND_ASSIGN(MessageMemoryDumpProvider);
83-};
84-
85-void EnsureMemoryDumpProviderExists() {
86-  static base::NoDestructor<MessageMemoryDumpProvider> provider;
87-  ALLOW_UNUSED_LOCAL(provider);
88-}
89+// class MessageMemoryDumpProvider : public base::trace_event::MemoryDumpProvider {
90+//  public:
91+//   MessageMemoryDumpProvider() {
92+//     base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
93+//         this, "MojoMessages", nullptr);
94+//   }
95+
96+//   ~MessageMemoryDumpProvider() override {
97+//     base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider(
98+//         this);
99+//   }
100+
101+//  private:
102+//   // base::trace_event::MemoryDumpProvider:
103+//   bool OnMemoryDump(const base::trace_event::MemoryDumpArgs& args,
104+//                     base::trace_event::ProcessMemoryDump* pmd) override {
105+//     auto* dump = pmd->CreateAllocatorDump("mojo/messages");
106+//     dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameObjectCount,
107+//                     base::trace_event::MemoryAllocatorDump::kUnitsObjects,
108+//                     base::subtle::NoBarrier_Load(&g_message_count));
109+//     return true;
110+//   }
111+
112+//   DISALLOW_COPY_AND_ASSIGN(MessageMemoryDumpProvider);
113+// };
114+
115+// void EnsureMemoryDumpProviderExists() {
116+//   static base::NoDestructor<MessageMemoryDumpProvider> provider;
117+//   ALLOW_UNUSED_LOCAL(provider);
118+// }
119
120 }  // namespace
121
122@@ -648,7 +648,7 @@ void UserMessageImpl::FailHandleSerializationForTesting(bool fail) {
123
124 UserMessageImpl::UserMessageImpl(ports::UserMessageEvent* message_event)
125     : ports::UserMessage(&kUserMessageTypeInfo), message_event_(message_event) {
126-  EnsureMemoryDumpProviderExists();
127+  // EnsureMemoryDumpProviderExists();
128   IncrementMessageCount();
129 }
130
131@@ -667,7 +667,7 @@ UserMessageImpl::UserMessageImpl(ports::UserMessageEvent* message_event,
132       header_size_(header_size),
133       user_payload_(user_payload),
134       user_payload_size_(user_payload_size) {
135-  EnsureMemoryDumpProviderExists();
136+  // EnsureMemoryDumpProviderExists();
137   IncrementMessageCount();
138 }
139
140diff --git a/mojo/public/cpp/bindings/lib/message_dumper.cc b/mojo/public/cpp/bindings/lib/message_dumper.cc
141index f187e45..35696bb 100644
142--- a/mojo/public/cpp/bindings/lib/message_dumper.cc
143+++ b/mojo/public/cpp/bindings/lib/message_dumper.cc
144@@ -22,33 +22,33 @@ base::FilePath& DumpDirectory() {
145   return *dump_directory;
146 }
147
148-void WriteMessage(uint32_t identifier,
149-                  const mojo::MessageDumper::MessageEntry& entry) {
150-  static uint64_t num = 0;
151-
152-  if (!entry.interface_name)
153-    return;
154-
155-  base::FilePath message_directory =
156-      DumpDirectory()
157-          .AppendASCII(entry.interface_name)
158-          .AppendASCII(base::NumberToString(identifier));
159-
160-  if (!base::DirectoryExists(message_directory) &&
161-      !base::CreateDirectory(message_directory)) {
162-    LOG(ERROR) << "Failed to create" << message_directory.value();
163-    return;
164-  }
165-
166-  std::string filename =
167-      base::NumberToString(num++) + "." + entry.method_name + ".mojomsg";
168-  base::FilePath path = message_directory.AppendASCII(filename);
169-  base::File file(path,
170-                  base::File::FLAG_WRITE | base::File::FLAG_CREATE_ALWAYS);
171-
172-  file.WriteAtCurrentPos(reinterpret_cast<const char*>(entry.data_bytes.data()),
173-                         static_cast<int>(entry.data_bytes.size()));
174-}
175+// void WriteMessage(uint32_t identifier,
176+//                   const mojo::MessageDumper::MessageEntry& entry) {
177+//   static uint64_t num = 0;
178+
179+//   if (!entry.interface_name)
180+//     return;
181+
182+//   base::FilePath message_directory =
183+//       DumpDirectory()
184+//           .AppendASCII(entry.interface_name)
185+//           .AppendASCII(base::NumberToString(identifier));
186+
187+//   if (!base::DirectoryExists(message_directory) &&
188+//       !base::CreateDirectory(message_directory)) {
189+//     LOG(ERROR) << "Failed to create" << message_directory.value();
190+//     return;
191+//   }
192+
193+//   std::string filename =
194+//       base::NumberToString(num++) + "." + entry.method_name + ".mojomsg";
195+//   base::FilePath path = message_directory.AppendASCII(filename);
196+//   base::File file(path,
197+//                   base::File::FLAG_WRITE | base::File::FLAG_CREATE_ALWAYS);
198+
199+//   file.WriteAtCurrentPos(reinterpret_cast<const char*>(entry.data_bytes.data()),
200+//                          static_cast<int>(entry.data_bytes.size()));
201+// }
202
203 }  // namespace
204
205@@ -71,17 +71,17 @@ MessageDumper::MessageDumper() : identifier_(base::RandUint64()) {}
206 MessageDumper::~MessageDumper() {}
207
208 bool MessageDumper::Accept(mojo::Message* message) {
209-  MessageEntry entry(message->data(), message->data_num_bytes(),
210-                     message->interface_name(), message->method_name());
211+  // MessageEntry entry(message->data(), message->data_num_bytes(),
212+  //                    "unknown interface", "unknown name");
213
214-  static base::NoDestructor<scoped_refptr<base::TaskRunner>> task_runner(
215-      base::CreateSequencedTaskRunnerWithTraits(
216-          {base::MayBlock(), base::TaskPriority::USER_BLOCKING,
217-           base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}));
218+  // static base::NoDestructor<scoped_refptr<base::TaskRunner>> task_runner(
219+  //     base::CreateSequencedTaskRunnerWithTraits(
220+  //         {base::MayBlock(), base::TaskPriority::USER_BLOCKING,
221+  //          base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}));
222
223-  (*task_runner)
224-      ->PostTask(FROM_HERE,
225-                 base::BindOnce(&WriteMessage, identifier_, std::move(entry)));
226+  // (*task_runner)
227+  //     ->PostTask(FROM_HERE,
228+  //                base::BindOnce(&WriteMessage, identifier_, std::move(entry)));
229   return true;
230 }
231
232diff --git a/mojo/public/cpp/system/file_data_pipe_producer.cc b/mojo/public/cpp/system/file_data_pipe_producer.cc
233index 842fe8f..6038bbe 100644
234--- a/mojo/public/cpp/system/file_data_pipe_producer.cc
235+++ b/mojo/public/cpp/system/file_data_pipe_producer.cc
236@@ -266,13 +266,15 @@ void FileDataPipeProducer::WriteFromPath(const base::FilePath& path,
237
238 void FileDataPipeProducer::InitializeNewRequest(CompletionCallback callback) {
239   DCHECK(!file_sequence_state_);
240-  auto file_task_runner = base::CreateSequencedTaskRunnerWithTraits(
241-      {base::MayBlock(), base::TaskPriority::BACKGROUND});
242-  file_sequence_state_ = new FileSequenceState(
243-      std::move(producer_), file_task_runner,
244-      base::BindOnce(&FileDataPipeProducer::OnWriteComplete,
245-                     weak_factory_.GetWeakPtr(), std::move(callback)),
246-      base::SequencedTaskRunnerHandle::Get(), std::move(observer_));
247+
248+  LOG(FATAL) << "unsupported in libchrome";
249+  // auto file_task_runner = base::CreateSequencedTaskRunnerWithTraits(
250+  //     {base::MayBlock(), base::TaskPriority::BACKGROUND});
251+  // file_sequence_state_ = new FileSequenceState(
252+  //     std::move(producer_), file_task_runner,
253+  //     base::BindOnce(&FileDataPipeProducer::OnWriteComplete,
254+  //                    weak_factory_.GetWeakPtr(), std::move(callback)),
255+  //     base::SequencedTaskRunnerHandle::Get(), std::move(observer_));
256 }
257
258 void FileDataPipeProducer::OnWriteComplete(
259diff --git a/mojo/public/tools/bindings/mojom_bindings_generator.py b/mojo/public/tools/bindings/mojom_bindings_generator.py
260index affbe79..57a8031 100755
261--- a/mojo/public/tools/bindings/mojom_bindings_generator.py
262+++ b/mojo/public/tools/bindings/mojom_bindings_generator.py
263@@ -174,7 +174,8 @@ class MojomProcessor(object):
264           MakeImportStackMessage(imported_filename_stack + [rel_filename.path])
265       sys.exit(1)
266
267-    tree = _UnpickleAST(_GetPicklePath(rel_filename, args.output_dir))
268+    tree = _UnpickleAST(_FindPicklePath(rel_filename, args.gen_directories +
269+                                        [args.output_dir]))
270     dirname = os.path.dirname(rel_filename.path)
271
272     # Process all our imports first and collect the module object for each.
273@@ -256,6 +257,16 @@ def _Generate(args, remaining_args):
274   return 0
275
276
277+def _FindPicklePath(rel_filename, search_dirs):
278+  filename, _ = os.path.splitext(rel_filename.relative_path())
279+  pickle_path = filename + '.p'
280+  for search_dir in search_dirs:
281+    path = os.path.join(search_dir, pickle_path)
282+    if os.path.isfile(path):
283+      return path
284+  raise Exception("%s: Error: Could not find file in %r" % (pickle_path, search_dirs))
285+
286+
287 def _GetPicklePath(rel_filename, output_dir):
288   filename, _ = os.path.splitext(rel_filename.relative_path())
289   pickle_path = filename + '.p'
290@@ -402,6 +413,9 @@ def main():
291                                metavar="GENERATORS",
292                                default="c++,javascript,java",
293                                help="comma-separated list of generators")
294+  generate_parser.add_argument(
295+      "--gen_dir", dest="gen_directories", action="append", metavar="directory",
296+      default=[], help="add a directory to be searched for the syntax trees.")
297   generate_parser.add_argument(
298       "-I", dest="import_directories", action="append", metavar="directory",
299       default=[],
300