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 #ifndef NET_COOKIES_COOKIE_STORE_TEST_CALLBACKS_H_ 6 #define NET_COOKIES_COOKIE_STORE_TEST_CALLBACKS_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "net/cookies/cookie_store.h" 12 13 namespace base { 14 class MessageLoop; 15 class Thread; 16 } 17 18 namespace net { 19 20 // Defines common behaviour for the callbacks from GetCookies, SetCookies, etc. 21 // Asserts that the current thread is the expected invocation thread, sends a 22 // quit to the thread in which it was constructed. 23 class CookieCallback { 24 public: 25 // Indicates whether the callback has been called. 26 bool did_run() { return did_run_; } 27 28 protected: 29 // Constructs a callback that expects to be called in the given thread and 30 // will, upon execution, send a QUIT to the constructing thread. 31 explicit CookieCallback(base::Thread* run_in_thread); 32 33 // Constructs a callback that expects to be called in current thread and will 34 // send a QUIT to the constructing thread. 35 CookieCallback(); 36 37 // Tests whether the current thread was the caller's thread. 38 // Sends a QUIT to the constructing thread. 39 void CallbackEpilogue(); 40 41 private: 42 bool did_run_; 43 base::Thread* run_in_thread_; 44 base::MessageLoop* run_in_loop_; 45 base::MessageLoop* parent_loop_; 46 base::MessageLoop* loop_to_quit_; 47 }; 48 49 // Callback implementations for the asynchronous CookieStore methods. 50 51 class BoolResultCookieCallback : public CookieCallback { 52 public: 53 BoolResultCookieCallback(); 54 explicit BoolResultCookieCallback(base::Thread* run_in_thread); 55 56 void Run(bool result) { 57 result_ = result; 58 CallbackEpilogue(); 59 } 60 61 bool result() { return result_; } 62 63 private: 64 bool result_; 65 }; 66 67 class StringResultCookieCallback : public CookieCallback { 68 public: 69 StringResultCookieCallback(); 70 explicit StringResultCookieCallback(base::Thread* run_in_thread); 71 72 void Run(const std::string& result) { 73 result_ = result; 74 CallbackEpilogue(); 75 } 76 77 const std::string& result() { return result_; } 78 79 private: 80 std::string result_; 81 }; 82 83 class IntResultCookieCallback : public CookieCallback { 84 public: 85 IntResultCookieCallback(); 86 explicit IntResultCookieCallback(base::Thread* run_in_thread); 87 88 void Run(int result) { 89 result_ = result; 90 CallbackEpilogue(); 91 } 92 93 int result() { return result_; } 94 95 private: 96 int result_; 97 }; 98 99 class NoResultCookieCallback : public CookieCallback { 100 public: 101 NoResultCookieCallback(); 102 explicit NoResultCookieCallback(base::Thread* run_in_thread); 103 104 void Run() { 105 CallbackEpilogue(); 106 } 107 }; 108 109 } // namespace net 110 111 #endif // NET_COOKIES_COOKIE_STORE_TEST_CALLBACKS_H_ 112