| Index: components/precache/content/precache_manager.h | 
| diff --git a/components/precache/content/precache_manager.h b/components/precache/content/precache_manager.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..c11e61d9f9ab446a9a0fd8cc8287fb65ee9adaab | 
| --- /dev/null | 
| +++ b/components/precache/content/precache_manager.h | 
| @@ -0,0 +1,89 @@ | 
| +// Copyright 2013 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +#ifndef COMPONENTS_PRECACHE_CONTENT_PRECACHE_MANAGER_H_ | 
| +#define COMPONENTS_PRECACHE_CONTENT_PRECACHE_MANAGER_H_ | 
| + | 
| +#include <list> | 
| + | 
| +#include "base/memory/ref_counted.h" | 
| +#include "base/memory/scoped_ptr.h" | 
| +#include "base/synchronization/lock.h" | 
| +#include "components/browser_context_keyed_service/browser_context_keyed_service.h" | 
| +#include "components/precache/core/precache_fetcher.h" | 
| +#include "url/gurl.h" | 
| + | 
| +namespace content { | 
| +class BrowserContext; | 
| +} | 
| + | 
| +namespace precache { | 
| + | 
| +class PrecacheDatabase; | 
| +class URLListProvider; | 
| + | 
| +// Class that manages all precaching-related activities. Owned by the | 
| +// BrowserContext that it is constructed for. Use | 
| +// PrecacheManagerFactory::GetForBrowserContext to get an instance of this | 
| +// class. | 
| +// TODO(sclittle): Delete precache history when browsing history is deleted. | 
| +class PrecacheManager : public BrowserContextKeyedService, | 
| +                        PrecacheFetcher::PrecacheDelegate { | 
| + public: | 
| +  explicit PrecacheManager(content::BrowserContext* browser_context); | 
| +  virtual ~PrecacheManager(); | 
| + | 
| +  // Returns true if precaching is enabled by either Finch or the command line | 
| +  // flag. | 
| +  static bool IsPrecachingEnabled(); | 
| + | 
| +  // From BrowserContextKeyedService. | 
| +  virtual void Shutdown() OVERRIDE; | 
| + | 
| +  // From PrecacheFetcher::PrecacheDelegate. | 
| +  virtual void OnDone() OVERRIDE; | 
| + | 
| +  // Starts precaching resources that the user is predicted to fetch in the | 
| +  // future. If precaching is already currently in progress, then this method | 
| +  // does nothing. Must be called on the UI thread. | 
| +  void StartPrecaching(URLListProvider* url_list_provider); | 
| + | 
| +  // Cancels precaching if it is in progress. Must be called on the UI thread. | 
| +  void CancelPrecaching(); | 
| + | 
| +  // Returns true if precaching is currently in progress, or false otherwise. | 
| +  // May be called from any thread. | 
| +  bool IsPrecaching(); | 
| + | 
| +  // Returns the PrecacheDatabase used for tracking precache metrics. This | 
| +  // method can be called on any thread, but methods on the PrecacheDatabase | 
| +  // should only be used on the DB thread. | 
| +  scoped_refptr<PrecacheDatabase> precache_database(); | 
| + | 
| + private: | 
| +  void OnURLsReceived(const std::list<GURL>& urls); | 
| + | 
| +  // The browser context that owns this PrecacheManager. | 
| +  content::BrowserContext* browser_context_; | 
| + | 
| +  // The PrecacheFetcher used to precache resources. Should only be used on the | 
| +  // UI thread. | 
| +  scoped_ptr<PrecacheFetcher> precache_fetcher_; | 
| + | 
| +  // The PrecacheDatabase for tracking precache metrics. Should only be used on | 
| +  // the DB thread. | 
| +  scoped_refptr<PrecacheDatabase> precache_database_; | 
| + | 
| +  // Flag indicating whether or not precaching is currently in progress. | 
| +  bool is_precaching_; | 
| + | 
| +  // Lock for |is_precaching_|. | 
| +  base::Lock lock_; | 
| + | 
| +  DISALLOW_COPY_AND_ASSIGN(PrecacheManager); | 
| +}; | 
| + | 
| +}  // namespace precache | 
| + | 
| +#endif  // COMPONENTS_PRECACHE_CONTENT_PRECACHE_MANAGER_H_ | 
|  |