1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "mojo/shell/keep_alive.h" 6 7 #include "base/bind.h" 8 #include "mojo/shell/context.h" 9 10 namespace mojo { 11 namespace shell { 12 KeepAlive(Context * context)13KeepAlive::KeepAlive(Context* context) : context_(context) { 14 DCHECK(context_->task_runners()->ui_runner()->RunsTasksOnCurrentThread()); 15 ++context_->keep_alive_counter()->count_; 16 } 17 ~KeepAlive()18KeepAlive::~KeepAlive() { 19 DCHECK(context_->task_runners()->ui_runner()->RunsTasksOnCurrentThread()); 20 if (--context_->keep_alive_counter()->count_ == 0) { 21 base::MessageLoop::current()->PostTask( 22 FROM_HERE, 23 base::Bind(&KeepAlive::MaybeQuit, context_)); 24 } 25 } 26 27 // static MaybeQuit(Context * context)28void KeepAlive::MaybeQuit(Context* context) { 29 if (context->keep_alive_counter()->count_ == 0) 30 base::MessageLoop::current()->Quit(); 31 } 32 33 } // namespace shell 34 } // namespace mojo 35