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..3a0ddf29dbdb91bd45eb4a166192aa40267f2e17 |
--- /dev/null |
+++ b/chrome/browser/download/download_test_file_chooser_observer.cc |
@@ -0,0 +1,80 @@ |
+// 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; |
+ } |
+ |
+ protected: |
+ |
+ virtual void ChooseDownloadPath(content::DownloadItem* item, |
+ 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()))); |
+ } |
+ |
+ private: |
+ virtual ~MockFileChooserDownloadManagerDelegate() {} |
+ |
+ 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(); |
+} |
+ |