1 // Copyright (c) 2012 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 "net/base/test_completion_callback.h" 6 7 #include "base/bind.h" 8 #include "base/bind_helpers.h" 9 #include "base/compiler_specific.h" 10 #include "base/message_loop/message_loop.h" 11 #include "net/base/io_buffer.h" 12 13 namespace net { 14 15 namespace internal { 16 17 void TestCompletionCallbackBaseInternal::DidSetResult() { 18 have_result_ = true; 19 if (waiting_for_result_) 20 base::MessageLoop::current()->Quit(); 21 } 22 23 void TestCompletionCallbackBaseInternal::WaitForResult() { 24 DCHECK(!waiting_for_result_); 25 while (!have_result_) { 26 waiting_for_result_ = true; 27 base::MessageLoop::current()->Run(); 28 waiting_for_result_ = false; 29 } 30 have_result_ = false; // Auto-reset for next callback. 31 } 32 33 TestCompletionCallbackBaseInternal::TestCompletionCallbackBaseInternal() 34 : have_result_(false), 35 waiting_for_result_(false) { 36 } 37 38 } // namespace internal 39 40 TestCompletionCallback::TestCompletionCallback() 41 : callback_(base::Bind(&TestCompletionCallback::SetResult, 42 base::Unretained(this))) { 43 } 44 45 TestCompletionCallback::~TestCompletionCallback() { 46 } 47 48 TestInt64CompletionCallback::TestInt64CompletionCallback() 49 : callback_(base::Bind(&TestInt64CompletionCallback::SetResult, 50 base::Unretained(this))) { 51 } 52 53 TestInt64CompletionCallback::~TestInt64CompletionCallback() { 54 } 55 56 ReleaseBufferCompletionCallback::ReleaseBufferCompletionCallback( 57 IOBuffer* buffer) : buffer_(buffer) { 58 } 59 60 ReleaseBufferCompletionCallback::~ReleaseBufferCompletionCallback() { 61 } 62 63 void ReleaseBufferCompletionCallback::SetResult(int result) { 64 if (!buffer_->HasOneRef()) 65 result = net::ERR_FAILED; 66 TestCompletionCallback::SetResult(result); 67 } 68 69 } // namespace net 70