| // Copyright 2014 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 "services/js/js_app_message_loop_observers.h" |
| |
| namespace js { |
| |
| JSAppMessageLoopObservers::JSAppMessageLoopObservers(v8::Isolate* isolate) |
| : isolate_(isolate), |
| task_observer_(this), |
| signal_observer_(this) { |
| base::MessageLoop::current()->AddTaskObserver(&task_observer_); |
| mojo::common::MessagePumpMojo::current()->AddObserver(&signal_observer_); |
| } |
| |
| JSAppMessageLoopObservers::~JSAppMessageLoopObservers() { |
| base::MessageLoop::current()->RemoveTaskObserver(&task_observer_); |
| mojo::common::MessagePumpMojo::current()->RemoveObserver(&signal_observer_); |
| } |
| |
| JSAppMessageLoopObservers::TaskObserver::TaskObserver( |
| JSAppMessageLoopObservers* loop_observers) |
| : loop_observers_(loop_observers) { |
| } |
| |
| void JSAppMessageLoopObservers::TaskObserver::WillProcessTask( |
| const base::PendingTask& pending_task) { |
| } |
| |
| void JSAppMessageLoopObservers::TaskObserver::DidProcessTask( |
| const base::PendingTask& pending_task) { |
| loop_observers_->RunMicrotasks(); |
| } |
| |
| JSAppMessageLoopObservers::SignalObserver::SignalObserver( |
| JSAppMessageLoopObservers* loop_observers) |
| : loop_observers_(loop_observers) { |
| } |
| |
| void JSAppMessageLoopObservers::SignalObserver::WillSignalHandler() { |
| } |
| |
| void JSAppMessageLoopObservers::SignalObserver::DidSignalHandler() { |
| loop_observers_->RunMicrotasks(); |
| } |
| |
| void JSAppMessageLoopObservers::RunMicrotasks() { |
| v8::Isolate::Scope scope(isolate_); |
| isolate_->RunMicrotasks(); |
| } |
| |
| } // namespace js |