| Index: mojo/edk/system/dispatcher.h | 
| diff --git a/mojo/edk/system/dispatcher.h b/mojo/edk/system/dispatcher.h | 
| index 9dca67fa45f800d45231cb7a3c1e1718c0261c5e..88a9de7c8509dda9969bb8bc8fe49fd4ff10aa17 100644 | 
| --- a/mojo/edk/system/dispatcher.h | 
| +++ b/mojo/edk/system/dispatcher.h | 
| @@ -20,7 +20,7 @@ | 
| #include "mojo/edk/system/handle_signals_state.h" | 
| #include "mojo/edk/system/ports/name.h" | 
| #include "mojo/edk/system/system_impl_export.h" | 
| -#include "mojo/edk/system/watcher.h" | 
| +#include "mojo/edk/system/watch.h" | 
| #include "mojo/public/c/system/buffer.h" | 
| #include "mojo/public/c/system/data_pipe.h" | 
| #include "mojo/public/c/system/message_pipe.h" | 
| @@ -57,6 +57,7 @@ class MOJO_SYSTEM_IMPL_EXPORT Dispatcher | 
| DATA_PIPE_CONSUMER, | 
| SHARED_BUFFER, | 
| WAIT_SET, | 
| +    WATCHER, | 
|  | 
| // "Private" types (not exposed via the public interface): | 
| PLATFORM_HANDLE = -1, | 
| @@ -67,13 +68,16 @@ class MOJO_SYSTEM_IMPL_EXPORT Dispatcher | 
| virtual Type GetType() const = 0; | 
| virtual MojoResult Close() = 0; | 
|  | 
| -  ///////////// Watch API //////////////////// | 
| - | 
| -  virtual MojoResult Watch(MojoHandleSignals signals, | 
| -                           const Watcher::WatchCallback& callback, | 
| -                           uintptr_t context); | 
| +  ///////////// Watcher API //////////////////// | 
|  | 
| +  virtual MojoResult WatchDispatcher(scoped_refptr<Dispatcher> dispatcher, | 
| +                                     MojoHandleSignals signals, | 
| +                                     uintptr_t context); | 
| virtual MojoResult CancelWatch(uintptr_t context); | 
| +  virtual MojoResult Arm(uint32_t* num_ready_contexts, | 
| +                         uintptr_t* ready_contexts, | 
| +                         MojoResult* ready_results, | 
| +                         MojoHandleSignalsState* ready_signals_states); | 
|  | 
| ///////////// Message pipe API ///////////// | 
|  | 
| @@ -158,6 +162,18 @@ class MOJO_SYSTEM_IMPL_EXPORT Dispatcher | 
| // threads. | 
| virtual HandleSignalsState GetHandleSignalsState() const; | 
|  | 
| +  // Adds a WatcherDispatcher reference to this dispatcher, to be notified of | 
| +  // all subsequent changes to handle state including signal changes or closure. | 
| +  // The reference is associated with a |context| for disambiguation of | 
| +  // removals. | 
| +  virtual MojoResult AddWatcherRef( | 
| +      const scoped_refptr<WatcherDispatcher>& watcher, | 
| +      uintptr_t context); | 
| + | 
| +  // Removes a WatcherDispatcher reference from this dispatcher. | 
| +  virtual MojoResult RemoveWatcherRef(WatcherDispatcher* watcher, | 
| +                                      uintptr_t context); | 
| + | 
| // Adds an awakable to this dispatcher, which will be woken up when this | 
| // object changes state to satisfy |signals| with context |context|. It will | 
| // also be woken up when it becomes impossible for the object to ever satisfy | 
|  |