| Index: mojo/common/message_pump_mojo.cc
|
| diff --git a/mojo/common/message_pump_mojo.cc b/mojo/common/message_pump_mojo.cc
|
| index 6d21af2123834c1ab5ed77a7dfd00a7ecc37e38a..c06927015945f36ba451498a8df9c5639a2ebd95 100644
|
| --- a/mojo/common/message_pump_mojo.cc
|
| +++ b/mojo/common/message_pump_mojo.cc
|
| @@ -97,6 +97,14 @@ void MessagePumpMojo::RemoveHandler(const Handle& handle) {
|
| handlers_.erase(handle);
|
| }
|
|
|
| +void MessagePumpMojo::AddObserver(Observer* observer) {
|
| + observers_.AddObserver(observer);
|
| +}
|
| +
|
| +void MessagePumpMojo::RemoveObserver(Observer* observer) {
|
| + observers_.RemoveObserver(observer);
|
| +}
|
| +
|
| void MessagePumpMojo::Run(Delegate* delegate) {
|
| RunState run_state;
|
| // TODO: better deal with error handling.
|
| @@ -175,8 +183,10 @@ bool MessagePumpMojo::DoInternalWork(const RunState& run_state, bool block) {
|
| } else if (result > 0) {
|
| const size_t index = static_cast<size_t>(result);
|
| DCHECK(handlers_.find(wait_state.handles[index]) != handlers_.end());
|
| + WillSignalHandler();
|
| handlers_[wait_state.handles[index]].handler->OnHandleReady(
|
| wait_state.handles[index]);
|
| + DidSignalHandler();
|
| } else {
|
| switch (result) {
|
| case MOJO_RESULT_CANCELLED:
|
| @@ -204,7 +214,9 @@ bool MessagePumpMojo::DoInternalWork(const RunState& run_state, bool block) {
|
| if (!i->second.deadline.is_null() && i->second.deadline < now &&
|
| handlers_.find(i->first) != handlers_.end() &&
|
| handlers_[i->first].id == i->second.id) {
|
| + WillSignalHandler();
|
| i->second.handler->OnHandleError(i->first, MOJO_RESULT_DEADLINE_EXCEEDED);
|
| + DidSignalHandler();
|
| handlers_.erase(i->first);
|
| did_work = true;
|
| }
|
| @@ -232,7 +244,9 @@ void MessagePumpMojo::RemoveFirstInvalidHandle(const WaitState& wait_state) {
|
| MessagePumpMojoHandler* handler =
|
| handlers_[wait_state.handles[i]].handler;
|
| handlers_.erase(wait_state.handles[i]);
|
| + WillSignalHandler();
|
| handler->OnHandleError(wait_state.handles[i], result);
|
| + DidSignalHandler();
|
| return;
|
| }
|
| }
|
| @@ -274,5 +288,13 @@ MojoDeadline MessagePumpMojo::GetDeadlineForWait(
|
| return deadline;
|
| }
|
|
|
| +void MessagePumpMojo::WillSignalHandler() {
|
| + FOR_EACH_OBSERVER(Observer, observers_, WillSignalHandler());
|
| +}
|
| +
|
| +void MessagePumpMojo::DidSignalHandler() {
|
| + FOR_EACH_OBSERVER(Observer, observers_, DidSignalHandler());
|
| +}
|
| +
|
| } // namespace common
|
| } // namespace mojo
|
|
|