| Index: chrome/browser/chromeos/drive/change_list_loader.h
 | 
| diff --git a/chrome/browser/chromeos/drive/change_list_loader.h b/chrome/browser/chromeos/drive/change_list_loader.h
 | 
| deleted file mode 100644
 | 
| index d85458c986d7e33ea68563cdc869bb7161a300a1..0000000000000000000000000000000000000000
 | 
| --- a/chrome/browser/chromeos/drive/change_list_loader.h
 | 
| +++ /dev/null
 | 
| @@ -1,249 +0,0 @@
 | 
| -// Copyright (c) 2012 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 CHROME_BROWSER_CHROMEOS_DRIVE_CHANGE_LIST_LOADER_H_
 | 
| -#define CHROME_BROWSER_CHROMEOS_DRIVE_CHANGE_LIST_LOADER_H_
 | 
| -
 | 
| -#include <string>
 | 
| -#include <vector>
 | 
| -
 | 
| -#include "base/callback.h"
 | 
| -#include "base/memory/ref_counted.h"
 | 
| -#include "base/memory/scoped_ptr.h"
 | 
| -#include "base/memory/scoped_vector.h"
 | 
| -#include "base/observer_list.h"
 | 
| -#include "base/threading/thread_checker.h"
 | 
| -#include "components/drive/file_errors.h"
 | 
| -#include "google_apis/drive/drive_api_error_codes.h"
 | 
| -#include "google_apis/drive/drive_common_callbacks.h"
 | 
| -
 | 
| -class GURL;
 | 
| -
 | 
| -namespace base {
 | 
| -class CancellationFlag;
 | 
| -class ScopedClosureRunner;
 | 
| -class SequencedTaskRunner;
 | 
| -class Time;
 | 
| -}  // namespace base
 | 
| -
 | 
| -namespace google_apis {
 | 
| -class AboutResource;
 | 
| -}  // namespace google_apis
 | 
| -
 | 
| -namespace drive {
 | 
| -
 | 
| -class EventLogger;
 | 
| -class JobScheduler;
 | 
| -class ResourceEntry;
 | 
| -
 | 
| -namespace internal {
 | 
| -
 | 
| -class ChangeList;
 | 
| -class ChangeListLoaderObserver;
 | 
| -class ChangeListProcessor;
 | 
| -class DirectoryLoader;
 | 
| -class ResourceMetadata;
 | 
| -
 | 
| -// Delays execution of tasks as long as more than one lock is alive.
 | 
| -// Used to ensure that ChangeListLoader does not cause race condition by adding
 | 
| -// new entries created by sync tasks before they do.
 | 
| -// All code which may add entries found on the server to the local metadata
 | 
| -// should use this class.
 | 
| -class LoaderController {
 | 
| - public:
 | 
| -  LoaderController();
 | 
| -  ~LoaderController();
 | 
| -
 | 
| -  // Increments the lock count and returns an object which decrements the count
 | 
| -  // on its destruction.
 | 
| -  // While the lock count is positive, tasks will be pending.
 | 
| -  scoped_ptr<base::ScopedClosureRunner> GetLock();
 | 
| -
 | 
| -  // Runs the task if the lock count is 0, otherwise it will be pending.
 | 
| -  void ScheduleRun(const base::Closure& task);
 | 
| -
 | 
| - private:
 | 
| -  // Decrements the lock count.
 | 
| -  void Unlock();
 | 
| -
 | 
| -  int lock_count_;
 | 
| -  std::vector<base::Closure> pending_tasks_;
 | 
| -
 | 
| -  base::ThreadChecker thread_checker_;
 | 
| -
 | 
| -  base::WeakPtrFactory<LoaderController> weak_ptr_factory_;
 | 
| -  DISALLOW_COPY_AND_ASSIGN(LoaderController);
 | 
| -};
 | 
| -
 | 
| -// This class is responsible to load AboutResource from the server and cache it.
 | 
| -class AboutResourceLoader {
 | 
| - public:
 | 
| -  explicit AboutResourceLoader(JobScheduler* scheduler);
 | 
| -  ~AboutResourceLoader();
 | 
| -
 | 
| -  // Returns the cached about resource.
 | 
| -  // NULL is returned if the cache is not available.
 | 
| -  const google_apis::AboutResource* cached_about_resource() const {
 | 
| -    return cached_about_resource_.get();
 | 
| -  }
 | 
| -
 | 
| -  // Gets the 'latest' about resource and asynchronously runs |callback|. I.e.,
 | 
| -  // 1) If the last call to UpdateAboutResource call is in-flight, wait for it.
 | 
| -  // 2) Otherwise, if the resource is cached, just returns the cached value.
 | 
| -  // 3) If neither of the above hold, queries the API server by calling
 | 
| -  //   |UpdateAboutResource|.
 | 
| -  void GetAboutResource(const google_apis::AboutResourceCallback& callback);
 | 
| -
 | 
| -  // Gets the about resource from the server, and caches it if successful. This
 | 
| -  // function calls JobScheduler::GetAboutResource internally. The cache will be
 | 
| -  // used in |GetAboutResource|.
 | 
| -  void UpdateAboutResource(const google_apis::AboutResourceCallback& callback);
 | 
| -
 | 
| - private:
 | 
| -  // Part of UpdateAboutResource().
 | 
| -  // This function should be called when the latest about resource is being
 | 
| -  // fetched from the server. The retrieved about resource is cloned, and one is
 | 
| -  // cached and the other is passed to callbacks associated with |task_id|.
 | 
| -  void UpdateAboutResourceAfterGetAbout(
 | 
| -      int task_id,
 | 
| -      google_apis::DriveApiErrorCode status,
 | 
| -      scoped_ptr<google_apis::AboutResource> about_resource);
 | 
| -
 | 
| -  JobScheduler* scheduler_;
 | 
| -  scoped_ptr<google_apis::AboutResource> cached_about_resource_;
 | 
| -
 | 
| -  // Identifier to denote the latest UpdateAboutResource call.
 | 
| -  int current_update_task_id_;
 | 
| -  // Mapping from each UpdateAboutResource task ID to the corresponding
 | 
| -  // callbacks. Note that there will be multiple callbacks for a single task
 | 
| -  // when GetAboutResource is called before the task completes.
 | 
| -  std::map<int, std::vector<google_apis::AboutResourceCallback> >
 | 
| -      pending_callbacks_;
 | 
| -
 | 
| -  base::ThreadChecker thread_checker_;
 | 
| -
 | 
| -  base::WeakPtrFactory<AboutResourceLoader> weak_ptr_factory_;
 | 
| -  DISALLOW_COPY_AND_ASSIGN(AboutResourceLoader);
 | 
| -};
 | 
| -
 | 
| -// ChangeListLoader is used to load the change list, the full resource list,
 | 
| -// and directory contents, from Google Drive API.  The class also updates the
 | 
| -// resource metadata with the change list loaded from the server.
 | 
| -//
 | 
| -// Note that the difference between "resource list" and "change list" is
 | 
| -// subtle hence the two words are often used interchangeably. To be precise,
 | 
| -// "resource list" refers to metadata from the server when fetching the full
 | 
| -// resource metadata, or fetching directory contents, whereas "change list"
 | 
| -// refers to metadata from the server when fetching changes (delta).
 | 
| -class ChangeListLoader {
 | 
| - public:
 | 
| -  // Resource feed fetcher from the server.
 | 
| -  class FeedFetcher;
 | 
| -
 | 
| -  ChangeListLoader(EventLogger* logger,
 | 
| -                   base::SequencedTaskRunner* blocking_task_runner,
 | 
| -                   ResourceMetadata* resource_metadata,
 | 
| -                   JobScheduler* scheduler,
 | 
| -                   AboutResourceLoader* about_resource_loader,
 | 
| -                   LoaderController* apply_task_controller);
 | 
| -  ~ChangeListLoader();
 | 
| -
 | 
| -  // Indicates whether there is a request for full resource list or change
 | 
| -  // list fetching is in flight (i.e. directory contents fetching does not
 | 
| -  // count).
 | 
| -  bool IsRefreshing() const;
 | 
| -
 | 
| -  // Adds and removes the observer.
 | 
| -  void AddObserver(ChangeListLoaderObserver* observer);
 | 
| -  void RemoveObserver(ChangeListLoaderObserver* observer);
 | 
| -
 | 
| -  // Checks for updates on the server. Does nothing if the change list is now
 | 
| -  // being loaded or refreshed. |callback| must not be null.
 | 
| -  // Note: |callback| will be called if the check for updates actually
 | 
| -  // runs, i.e. it may NOT be called if the checking is ignored.
 | 
| -  void CheckForUpdates(const FileOperationCallback& callback);
 | 
| -
 | 
| -  // Starts the change list loading if needed. If the locally stored metadata is
 | 
| -  // available, runs |callback| immediately and starts checking server for
 | 
| -  // updates in background. If the locally stored metadata is not available,
 | 
| -  // starts loading from the server, and runs |callback| to tell the result to
 | 
| -  // the caller when it is finished.
 | 
| -  //
 | 
| -  // |callback| must not be null.
 | 
| -  void LoadIfNeeded(const FileOperationCallback& callback);
 | 
| -
 | 
| - private:
 | 
| -  // Starts the resource metadata loading and calls |callback| when it's done.
 | 
| -  void Load(const FileOperationCallback& callback);
 | 
| -  void LoadAfterGetLargestChangestamp(bool is_initial_load,
 | 
| -                                      const int64* local_changestamp,
 | 
| -                                      FileError error);
 | 
| -  void LoadAfterGetAboutResource(
 | 
| -      int64 local_changestamp,
 | 
| -      google_apis::DriveApiErrorCode status,
 | 
| -      scoped_ptr<google_apis::AboutResource> about_resource);
 | 
| -
 | 
| -  // Part of Load().
 | 
| -  // This function should be called when the change list load is complete.
 | 
| -  // Flushes the callbacks for change list loading and all directory loading.
 | 
| -  void OnChangeListLoadComplete(FileError error);
 | 
| -
 | 
| -  // Called when the loading about_resource_loader_->UpdateAboutResource is
 | 
| -  // completed.
 | 
| -  void OnAboutResourceUpdated(google_apis::DriveApiErrorCode error,
 | 
| -                              scoped_ptr<google_apis::AboutResource> resource);
 | 
| -
 | 
| -  // ================= Implementation for change list loading =================
 | 
| -
 | 
| -  // Part of LoadFromServerIfNeeded().
 | 
| -  // Starts loading the change list since |start_changestamp|, or the full
 | 
| -  // resource list if |start_changestamp| is zero.
 | 
| -  void LoadChangeListFromServer(int64 start_changestamp);
 | 
| -
 | 
| -  // Part of LoadChangeListFromServer().
 | 
| -  // Called when the entire change list is loaded.
 | 
| -  void LoadChangeListFromServerAfterLoadChangeList(
 | 
| -      scoped_ptr<google_apis::AboutResource> about_resource,
 | 
| -      bool is_delta_update,
 | 
| -      FileError error,
 | 
| -      ScopedVector<ChangeList> change_lists);
 | 
| -
 | 
| -  // Part of LoadChangeListFromServer().
 | 
| -  // Called when the resource metadata is updated.
 | 
| -  void LoadChangeListFromServerAfterUpdate(
 | 
| -      ChangeListProcessor* change_list_processor,
 | 
| -      bool should_notify_changed_directories,
 | 
| -      const base::Time& start_time,
 | 
| -      FileError error);
 | 
| -
 | 
| -  EventLogger* logger_;  // Not owned.
 | 
| -  scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
 | 
| -  scoped_ptr<base::CancellationFlag> in_shutdown_;
 | 
| -  ResourceMetadata* resource_metadata_;  // Not owned.
 | 
| -  JobScheduler* scheduler_;  // Not owned.
 | 
| -  AboutResourceLoader* about_resource_loader_;  // Not owned.
 | 
| -  LoaderController* loader_controller_;  // Not owned.
 | 
| -  base::ObserverList<ChangeListLoaderObserver> observers_;
 | 
| -  std::vector<FileOperationCallback> pending_load_callback_;
 | 
| -  FileOperationCallback pending_update_check_callback_;
 | 
| -
 | 
| -  // Running feed fetcher.
 | 
| -  scoped_ptr<FeedFetcher> change_feed_fetcher_;
 | 
| -
 | 
| -  // True if the full resource list is loaded (i.e. the resource metadata is
 | 
| -  // stored locally).
 | 
| -  bool loaded_;
 | 
| -
 | 
| -  base::ThreadChecker thread_checker_;
 | 
| -
 | 
| -  // Note: This should remain the last member so it'll be destroyed and
 | 
| -  // invalidate its weak pointers before any other members are destroyed.
 | 
| -  base::WeakPtrFactory<ChangeListLoader> weak_ptr_factory_;
 | 
| -  DISALLOW_COPY_AND_ASSIGN(ChangeListLoader);
 | 
| -};
 | 
| -
 | 
| -}  // namespace internal
 | 
| -}  // namespace drive
 | 
| -
 | 
| -#endif  // CHROME_BROWSER_CHROMEOS_DRIVE_CHANGE_LIST_LOADER_H_
 | 
| 
 |