1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file.
47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_AUTH_AUTH_PREWARMER_H_
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_LOGIN_AUTH_AUTH_PREWARMER_H_
77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/basictypes.h"
97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/callback.h"
10ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chromeos/network/network_state_handler_observer.h"
117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/public/browser/notification_observer.h"
127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/public/browser/notification_registrar.h"
137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace net {
157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class URLRequestContextGetter;
167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}  // namespace net
177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace chromeos {
197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
20ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass NetworkState;
21ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Class for prewarming authentication network connection.
23ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass AuthPrewarmer : public NetworkStateHandlerObserver,
247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                      public content::NotificationObserver {
257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public:
267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  AuthPrewarmer();
277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual ~AuthPrewarmer();
287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void PrewarmAuthentication(const base::Closure& completion_callback);
307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) private:
32ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // chromeos::NetworkStateHandlerObserver overrides.
33ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual void DefaultNetworkChanged(const NetworkState* network) OVERRIDE;
347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // content::NotificationObserver overrides.
367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void Observe(int type,
377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                       const content::NotificationSource& source,
387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                       const content::NotificationDetails& details) OVERRIDE;
397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  bool IsNetworkConnected() const;
417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  net::URLRequestContextGetter* GetRequestContext() const;
427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void DoPrewarm();
437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  content::NotificationRegistrar registrar_;
457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  base::Closure completion_callback_;
467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  bool doing_prewarm_;
477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AuthPrewarmer);
497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)};
507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}  // namespace chromeos
527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_AUTH_AUTH_PREWARMER_H_
54