Chromium Code Reviews| Index: chrome/browser/download/download_test_file_chooser_observer.cc |
| diff --git a/chrome/browser/download/download_test_file_chooser_observer.cc b/chrome/browser/download/download_test_file_chooser_observer.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..23d12bb62fa3c2f29be55ab3c17ed72b1dfb8912 |
| --- /dev/null |
| +++ b/chrome/browser/download/download_test_file_chooser_observer.cc |
| @@ -0,0 +1,78 @@ |
| +// 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. |
| + |
| +#include "chrome/browser/download/download_test_file_chooser_observer.h" |
| + |
| +#include "base/bind.h" |
| +#include "base/message_loop.h" |
| +#include "chrome/browser/download/chrome_download_manager_delegate.h" |
| +#include "chrome/browser/download/download_service.h" |
| +#include "chrome/browser/download/download_service_factory.h" |
| +#include "chrome/browser/profiles/profile.h" |
| + |
| +namespace content { |
| +class DownloadItem; |
| +} |
| + |
| +namespace internal { |
| + |
| +// Test ChromeDownloadManagerDelegate that controls whether how file chooser |
| +// dialogs are handled. By default, file chooser dialogs are disabled. |
| +class MockFileChooserDownloadManagerDelegate |
| + : public ChromeDownloadManagerDelegate { |
| + public: |
| + explicit MockFileChooserDownloadManagerDelegate(Profile* profile) |
| + : ChromeDownloadManagerDelegate(profile), |
| + file_chooser_enabled_(false), |
| + file_chooser_displayed_(false) {} |
| + |
| + void EnableFileChooser(bool enable) { |
| + file_chooser_enabled_ = enable; |
| + } |
| + |
| + bool TestAndResetDidShowFileChooser() { |
| + bool did_show = file_chooser_displayed_; |
| + file_chooser_displayed_ = false; |
| + return did_show; |
| + } |
| + |
| + private: |
| + virtual ~MockFileChooserDownloadManagerDelegate() {} |
| + |
| + virtual void ChooseDownloadPath(content::DownloadItem* item, |
|
benjhayden
2012/08/13 16:35:18
Why is this private?
Randy Smith (Not in Mondays)
2012/08/13 18:57:49
I didn't write the code, but I suspect the answer
|
| + const FilePath& suggested_path, |
| + const FileSelectedCallback& |
| + callback) OVERRIDE { |
| + file_chooser_displayed_ = true; |
| + MessageLoop::current()->PostTask( |
| + FROM_HERE, |
| + base::Bind(callback, |
| + (file_chooser_enabled_ ? suggested_path : FilePath()))); |
| + } |
| + |
| + bool file_chooser_enabled_; |
| + bool file_chooser_displayed_; |
| +}; |
| + |
| +} // namespace internal |
| + |
| +DownloadTestFileChooserObserver::DownloadTestFileChooserObserver( |
| + Profile* profile) { |
| + test_delegate_ = |
| + new internal::MockFileChooserDownloadManagerDelegate(profile); |
| + DownloadServiceFactory::GetForProfile(profile)-> |
| + SetDownloadManagerDelegateForTesting(test_delegate_.get()); |
| +} |
| + |
| +DownloadTestFileChooserObserver::~DownloadTestFileChooserObserver() { |
| +} |
| + |
| +void DownloadTestFileChooserObserver::EnableFileChooser(bool enable) { |
| + test_delegate_->EnableFileChooser(enable); |
| +} |
| + |
| +bool DownloadTestFileChooserObserver::TestAndResetDidShowFileChooser() { |
| + return test_delegate_->TestAndResetDidShowFileChooser(); |
| +} |
| + |