| Index: chrome/browser/download/download_test_observer.h
|
| diff --git a/chrome/browser/download/download_test_observer.h b/chrome/browser/download/download_test_observer.h
|
| deleted file mode 100644
|
| index 160c80d7f954862806d864c3702e03043d7ec3f2..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/download/download_test_observer.h
|
| +++ /dev/null
|
| @@ -1,295 +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_DOWNLOAD_DOWNLOAD_TEST_OBSERVER_H_
|
| -#define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_TEST_OBSERVER_H_
|
| -
|
| -#include <set>
|
| -#include <vector>
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/memory/ref_counted.h"
|
| -#include "content/public/browser/download_item.h"
|
| -#include "content/public/browser/download_manager.h"
|
| -#include "content/public/browser/download_url_parameters.h"
|
| -#include "net/base/net_errors.h"
|
| -
|
| -namespace internal {
|
| -class MockFileChooserDownloadManagerDelegate;
|
| -}
|
| -
|
| -class Profile;
|
| -
|
| -// Detects changes to the downloads after construction.
|
| -// Finishes when one of the following happens:
|
| -// - A specified number of downloads change to a terminal state (defined
|
| -// in derived classes).
|
| -// - Specific events, such as a select file dialog.
|
| -// Callers may either probe for the finished state, or wait on it.
|
| -//
|
| -// TODO(rdsmith): Detect manager going down, remove pointer to
|
| -// DownloadManager, transition to finished. (For right now we
|
| -// just use a scoped_refptr<> to keep it around, but that may cause
|
| -// timeouts on waiting if a DownloadManager::Shutdown() occurs which
|
| -// cancels our in-progress downloads.)
|
| -class DownloadTestObserver : public content::DownloadManager::Observer,
|
| - public content::DownloadItem::Observer {
|
| - public:
|
| - // Action an observer should take if a dangerous download is encountered.
|
| - enum DangerousDownloadAction {
|
| - ON_DANGEROUS_DOWNLOAD_ACCEPT, // Accept the download
|
| - ON_DANGEROUS_DOWNLOAD_DENY, // Deny the download
|
| - ON_DANGEROUS_DOWNLOAD_FAIL // Fail if a dangerous download is seen
|
| - };
|
| -
|
| - // Create an object that will be considered finished when |wait_count|
|
| - // download items have entered a terminal state.
|
| - DownloadTestObserver(
|
| - content::DownloadManager* download_manager,
|
| - size_t wait_count,
|
| - DangerousDownloadAction dangerous_download_action);
|
| -
|
| - virtual ~DownloadTestObserver();
|
| -
|
| - // Wait for the requested number of downloads to enter a terminal state.
|
| - void WaitForFinished();
|
| -
|
| - // Return true if everything's happened that we're configured for.
|
| - bool IsFinished() const;
|
| -
|
| - // content::DownloadItem::Observer
|
| - virtual void OnDownloadUpdated(content::DownloadItem* download) OVERRIDE;
|
| - virtual void OnDownloadDestroyed(content::DownloadItem* download) OVERRIDE;
|
| -
|
| - // content::DownloadManager::Observer
|
| - virtual void ModelChanged(content::DownloadManager* manager) OVERRIDE;
|
| -
|
| - size_t NumDangerousDownloadsSeen() const;
|
| -
|
| - size_t NumDownloadsSeenInState(
|
| - content::DownloadItem::DownloadState state) const;
|
| -
|
| - protected:
|
| - // Only to be called by derived classes' constructors.
|
| - virtual void Init();
|
| -
|
| - // Called to see if a download item is in a final state.
|
| - virtual bool IsDownloadInFinalState(content::DownloadItem* download) = 0;
|
| -
|
| - private:
|
| - typedef std::set<content::DownloadItem*> DownloadSet;
|
| -
|
| - // Maps states to the number of times they have been encountered
|
| - typedef std::map<content::DownloadItem::DownloadState, size_t> StateMap;
|
| -
|
| - // Called when we know that a download item is in a final state.
|
| - // Note that this is not the same as it first transitioning in to the
|
| - // final state; multiple notifications may occur once the item is in
|
| - // that state. So we keep our own track of transitions into final.
|
| - void DownloadInFinalState(content::DownloadItem* download);
|
| -
|
| - void SignalIfFinished();
|
| -
|
| - // The observed download manager.
|
| - scoped_refptr<content::DownloadManager> download_manager_;
|
| -
|
| - // The set of DownloadItem's that have transitioned to their finished state
|
| - // since construction of this object. When the size of this array
|
| - // reaches wait_count_, we're done.
|
| - DownloadSet finished_downloads_;
|
| -
|
| - // The set of DownloadItem's we are currently observing. Generally there
|
| - // won't be any overlap with the above; once we see the final state
|
| - // on a DownloadItem, we'll stop observing it.
|
| - DownloadSet downloads_observed_;
|
| -
|
| - // The map of states to the number of times they have been observed since
|
| - // we started looking.
|
| - // Recorded at the time downloads_observed_ is recorded, but cleared in the
|
| - // constructor to exclude pre-existing states.
|
| - StateMap states_observed_;
|
| -
|
| - // The number of downloads to wait on completing.
|
| - size_t wait_count_;
|
| -
|
| - // The number of downloads entered in final state in initial
|
| - // ModelChanged(). We use |finished_downloads_| to track the incoming
|
| - // transitions to final state we should ignore, and to track the
|
| - // number of final state transitions that occurred between
|
| - // construction and return from wait. But some downloads may be in our
|
| - // final state (and thus be entered into |finished_downloads_|) when we
|
| - // construct this class. We don't want to count those in our transition
|
| - // to finished.
|
| - int finished_downloads_at_construction_;
|
| -
|
| - // Whether an internal message loop has been started and must be quit upon
|
| - // all downloads completing.
|
| - bool waiting_;
|
| -
|
| - // Action to take if a dangerous download is encountered.
|
| - DangerousDownloadAction dangerous_download_action_;
|
| -
|
| - // Holds the download ids which were dangerous.
|
| - std::set<int32> dangerous_downloads_seen_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(DownloadTestObserver);
|
| -};
|
| -
|
| -class DownloadTestObserverTerminal : public DownloadTestObserver {
|
| - public:
|
| - // Create an object that will be considered finished when |wait_count|
|
| - // download items have entered a terminal state (any but IN_PROGRESS).
|
| - // If |finish_on_select_file| is true, the object will also be
|
| - // considered finished if the DownloadManager raises a
|
| - // SelectFileDialogDisplayed() notification.
|
| - DownloadTestObserverTerminal(
|
| - content::DownloadManager* download_manager,
|
| - size_t wait_count,
|
| - DangerousDownloadAction dangerous_download_action);
|
| -
|
| - virtual ~DownloadTestObserverTerminal();
|
| -
|
| - private:
|
| - virtual bool IsDownloadInFinalState(content::DownloadItem* download) OVERRIDE;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(DownloadTestObserverTerminal);
|
| -};
|
| -
|
| -// Detects changes to the downloads after construction.
|
| -// Finishes when a specified number of downloads change to the
|
| -// IN_PROGRESS state, or a Select File Dialog has appeared.
|
| -// Dangerous downloads are accepted.
|
| -// Callers may either probe for the finished state, or wait on it.
|
| -class DownloadTestObserverInProgress : public DownloadTestObserver {
|
| - public:
|
| - // Create an object that will be considered finished when |wait_count|
|
| - // download items have entered state |IN_PROGRESS|.
|
| - // If |finish_on_select_file| is true, the object will also be
|
| - // considered finished if the DownloadManager raises a
|
| - // SelectFileDialogDisplayed() notification.
|
| - DownloadTestObserverInProgress(
|
| - content::DownloadManager* download_manager,
|
| - size_t wait_count);
|
| -
|
| - virtual ~DownloadTestObserverInProgress();
|
| -
|
| - private:
|
| - virtual bool IsDownloadInFinalState(content::DownloadItem* download) OVERRIDE;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(DownloadTestObserverInProgress);
|
| -};
|
| -
|
| -// The WaitForFlush() method on this class returns after:
|
| -// * There are no IN_PROGRESS download items remaining on the
|
| -// DownloadManager.
|
| -// * There have been two round trip messages through the file and
|
| -// IO threads.
|
| -// This almost certainly means that a Download cancel has propagated through
|
| -// the system.
|
| -class DownloadTestFlushObserver
|
| - : public content::DownloadManager::Observer,
|
| - public content::DownloadItem::Observer,
|
| - public base::RefCountedThreadSafe<DownloadTestFlushObserver> {
|
| - public:
|
| - explicit DownloadTestFlushObserver(
|
| - content::DownloadManager* download_manager);
|
| -
|
| - void WaitForFlush();
|
| -
|
| - // DownloadsManager observer methods.
|
| - virtual void ModelChanged(content::DownloadManager* manager) OVERRIDE;
|
| -
|
| - // DownloadItem observer methods.
|
| - virtual void OnDownloadUpdated(content::DownloadItem* download) OVERRIDE;
|
| - virtual void OnDownloadDestroyed(content::DownloadItem* download) OVERRIDE;
|
| -
|
| - protected:
|
| - friend class base::RefCountedThreadSafe<DownloadTestFlushObserver>;
|
| -
|
| - virtual ~DownloadTestFlushObserver();
|
| -
|
| - private:
|
| - typedef std::set<content::DownloadItem*> DownloadSet;
|
| -
|
| - // If we're waiting for that flush point, check the number
|
| - // of downloads in the IN_PROGRESS state and take appropriate
|
| - // action. If requested, also observes all downloads while iterating.
|
| - void CheckDownloadsInProgress(bool observe_downloads);
|
| -
|
| - void PingFileThread(int cycle);
|
| -
|
| - void PingIOThread(int cycle);
|
| -
|
| - content::DownloadManager* download_manager_;
|
| - DownloadSet downloads_observed_;
|
| - bool waiting_for_zero_inprogress_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(DownloadTestFlushObserver);
|
| -};
|
| -
|
| -// Waits for a callback indicating that the DownloadItem is about to be created,
|
| -// or that an error occurred and it won't be created.
|
| -class DownloadTestItemCreationObserver
|
| - : public base::RefCountedThreadSafe<DownloadTestItemCreationObserver> {
|
| - public:
|
| - DownloadTestItemCreationObserver();
|
| -
|
| - void WaitForDownloadItemCreation();
|
| -
|
| - content::DownloadId download_id() const { return download_id_; }
|
| - net::Error error() const { return error_; }
|
| - bool started() const { return called_back_count_ > 0; }
|
| - bool succeeded() const { return started() && (error_ == net::OK); }
|
| -
|
| - const content::DownloadUrlParameters::OnStartedCallback callback();
|
| -
|
| - private:
|
| - friend class base::RefCountedThreadSafe<DownloadTestItemCreationObserver>;
|
| -
|
| - ~DownloadTestItemCreationObserver();
|
| -
|
| - void DownloadItemCreationCallback(content::DownloadId download_id,
|
| - net::Error error);
|
| -
|
| - // The download creation information we received.
|
| - content::DownloadId download_id_;
|
| -
|
| - net::Error error_;
|
| -
|
| - // Count of callbacks.
|
| - size_t called_back_count_;
|
| -
|
| - // We are in the message loop.
|
| - bool waiting_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(DownloadTestItemCreationObserver);
|
| -};
|
| -
|
| -// Observes and overrides file chooser activity for a profile. By default, once
|
| -// attached to a profile, this class overrides the default file chooser by
|
| -// replacing the ChromeDownloadManagerDelegate associated with |profile|.
|
| -// NOTE: Again, this overrides the ChromeDownloadManagerDelegate for |profile|.
|
| -class DownloadTestFileChooserObserver {
|
| - public:
|
| - // Attaches to |profile|. By default file chooser dialogs will be disabled
|
| - // once attached. Call EnableFileChooser() to re-enable.
|
| - explicit DownloadTestFileChooserObserver(Profile* profile);
|
| - ~DownloadTestFileChooserObserver();
|
| -
|
| - // Sets whether the file chooser dialog is enabled. If |enable| is false, any
|
| - // attempt to display a file chooser dialog will cause the download to be
|
| - // canceled. Otherwise, attempting to display a file chooser dialog will
|
| - // result in the download continuing with the suggested path.
|
| - void EnableFileChooser(bool enable);
|
| -
|
| - // Returns true if a file chooser dialog was displayed since the last time
|
| - // this method was called.
|
| - bool TestAndResetDidShowFileChooser();
|
| -
|
| - private:
|
| - scoped_refptr<internal::MockFileChooserDownloadManagerDelegate>
|
| - test_delegate_;
|
| -};
|
| -
|
| -#endif // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_TEST_OBSERVER_H_
|
|
|