// 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_