// Copyright (c) 2012 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 "mojo/shell/domain_socket/test_completion_callback.h"

#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/compiler_specific.h"
#include "base/message_loop/message_loop.h"

namespace mojo {
namespace shell {

namespace internal {

void TestCompletionCallbackBaseInternal::DidSetResult() {
  have_result_ = true;
  if (waiting_for_result_)
    base::MessageLoop::current()->Quit();
}

void TestCompletionCallbackBaseInternal::WaitForResult() {
  DCHECK(!waiting_for_result_);
  while (!have_result_) {
    waiting_for_result_ = true;
    base::MessageLoop::current()->Run();
    waiting_for_result_ = false;
  }
  have_result_ = false;  // Auto-reset for next callback.
}

TestCompletionCallbackBaseInternal::TestCompletionCallbackBaseInternal()
    : have_result_(false), waiting_for_result_(false) {
}

}  // namespace internal

TestCompletionCallback::TestCompletionCallback()
    : callback_(base::Bind(&TestCompletionCallback::SetResult,
                           base::Unretained(this))) {
}

TestCompletionCallback::~TestCompletionCallback() {
}

TestInt64CompletionCallback::TestInt64CompletionCallback()
    : callback_(base::Bind(&TestInt64CompletionCallback::SetResult,
                           base::Unretained(this))) {
}

TestInt64CompletionCallback::~TestInt64CompletionCallback() {
}

}  // namespace net
}  // namespace net
