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 #ifndef COMPONENTS_SIGNIN_CORE_BROWSER_SIGNIN_MANAGER_COOKIE_HELPER_H_ 6 #define COMPONENTS_SIGNIN_CORE_BROWSER_SIGNIN_MANAGER_COOKIE_HELPER_H_ 7 8 #include "base/callback_helpers.h" 9 #include "base/memory/ref_counted.h" 10 #include "net/cookies/canonical_cookie.h" 11 #include "net/url_request/url_request_context_getter.h" 12 13 namespace base { 14 class MessageLoopProxy; 15 } 16 17 namespace net { 18 class URLRequestContextGetter; 19 } 20 21 // This class fetches GAIA cookie on IO thread on behalf of SigninManager which 22 // only lives on the UI thread. 23 class SigninManagerCookieHelper 24 : public base::RefCountedThreadSafe<SigninManagerCookieHelper> { 25 public: 26 explicit SigninManagerCookieHelper( 27 net::URLRequestContextGetter* request_context_getter, 28 scoped_refptr<base::MessageLoopProxy> ui_thread, 29 scoped_refptr<base::MessageLoopProxy> io_thread); 30 31 // Starts fetching gaia cookies, which will notify its completion via 32 // callback. 33 void StartFetchingGaiaCookiesOnUIThread( 34 const base::Callback<void(const net::CookieList& cookies)>& callback); 35 36 // Starts fetching cookies for the given URL. This must be called on 37 // |ui_thread_|. 38 void StartFetchingCookiesOnUIThread( 39 const GURL& url, 40 const base::Callback<void(const net::CookieList& cookies)>& callback); 41 42 private: 43 friend class base::RefCountedThreadSafe<SigninManagerCookieHelper>; 44 ~SigninManagerCookieHelper(); 45 46 // Fetch cookies for the given URL. This must be called on |io_thread_|. 47 void FetchCookiesOnIOThread(const GURL& url); 48 49 // Callback for fetching cookies. This must be called on |io_thread_|. 50 void OnCookiesFetched(const net::CookieList& cookies); 51 52 // Notifies the completion callback. This must be called on |ui_thread_|. 53 void NotifyOnUIThread(const net::CookieList& cookies); 54 55 scoped_refptr<net::URLRequestContextGetter> request_context_getter_; 56 // This only mutates on |ui_thread_|. 57 base::Callback<void(const net::CookieList& cookies)> completion_callback_; 58 59 // The MessageLoopProxy that this class uses as its UI thread. 60 scoped_refptr<base::MessageLoopProxy> ui_thread_; 61 // The MessageLoopProxy that this class uses as its IO thread. 62 scoped_refptr<base::MessageLoopProxy> io_thread_; 63 DISALLOW_COPY_AND_ASSIGN(SigninManagerCookieHelper); 64 }; 65 66 #endif // COMPONENTS_SIGNIN_CORE_BROWSER_SIGNIN_MANAGER_COOKIE_HELPER_H_ 67