C++程序  |  48行  |  1.53 KB

// Copyright (c) 2011 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_DOWNLOAD_DOWNLOAD_STATUS_UPDATER_H_
#define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_STATUS_UPDATER_H_

#include <set>

#include "base/basictypes.h"
#include "base/gtest_prod_util.h"
#include "base/memory/weak_ptr.h"

class DownloadStatusUpdaterDelegate;

// Keeps track of download progress for the entire browser.
class DownloadStatusUpdater
    : public base::SupportsWeakPtr<DownloadStatusUpdater> {
 public:
  DownloadStatusUpdater();
  ~DownloadStatusUpdater();

  void AddDelegate(DownloadStatusUpdaterDelegate* delegate);
  void RemoveDelegate(DownloadStatusUpdaterDelegate* delegate);

  // Updates the download status based on data from delegates.
  void Update();

 private:
  FRIEND_TEST_ALL_PREFIXES(DownloadStatusUpdaterTest, Basic);
  FRIEND_TEST_ALL_PREFIXES(DownloadStatusUpdaterTest, OneDelegate);
  FRIEND_TEST_ALL_PREFIXES(DownloadStatusUpdaterTest, MultipleDelegates);

  // If the progress is known (i.e. we know the final size of all downloads),
  // returns true and puts a percentage (in range [0-1]) in |progress|.
  bool GetProgress(float* progress);

  // Returns the number of downloads that are in progress.
  int64 GetInProgressDownloadCount();

  typedef std::set<DownloadStatusUpdaterDelegate*> DelegateSet;
  DelegateSet delegates_;

  DISALLOW_COPY_AND_ASSIGN(DownloadStatusUpdater);
};

#endif  // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_STATUS_UPDATER_H_