Home | History | Annotate | Download | only in cookies
      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 template <typename T>
     52 class ResultSavingCookieCallback : public CookieCallback {
     53  public:
     54   ResultSavingCookieCallback() {
     55   }
     56   explicit ResultSavingCookieCallback(base::Thread* run_in_thread)
     57       : CookieCallback(run_in_thread) {
     58   }
     59 
     60   void Run(T result) {
     61     result_ = result;
     62     CallbackEpilogue();
     63   }
     64 
     65   const T& result() { return result_; }
     66 
     67  private:
     68   T result_;
     69 };
     70 
     71 class StringResultCookieCallback : public CookieCallback {
     72  public:
     73   StringResultCookieCallback();
     74   explicit StringResultCookieCallback(base::Thread* run_in_thread);
     75 
     76   void Run(const std::string& result) {
     77     result_ = result;
     78     CallbackEpilogue();
     79   }
     80 
     81   const std::string& result() { return result_; }
     82 
     83  private:
     84   std::string result_;
     85 };
     86 
     87 class NoResultCookieCallback : public CookieCallback {
     88  public:
     89   NoResultCookieCallback();
     90   explicit NoResultCookieCallback(base::Thread* run_in_thread);
     91 
     92   void Run() {
     93     CallbackEpilogue();
     94   }
     95 };
     96 
     97 }  // namespace net
     98 
     99 #endif  // NET_COOKIES_COOKIE_STORE_TEST_CALLBACKS_H_
    100