Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1954)

Unified Diff: chrome/browser/extensions/api/media_galleries/media_galleries_apitest.cc

Issue 174013009: Add end to end test for Media galleries scan API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Comments Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/media_galleries/media_galleries_apitest.cc
diff --git a/chrome/browser/extensions/api/media_galleries/media_galleries_apitest.cc b/chrome/browser/extensions/api/media_galleries/media_galleries_apitest.cc
index bfbdb81d02d6ea97b28b300917effd8fed071dee..5b2f98a3c094dab89cfd38cf015350664f4eaccd 100644
--- a/chrome/browser/extensions/api/media_galleries/media_galleries_apitest.cc
+++ b/chrome/browser/extensions/api/media_galleries/media_galleries_apitest.cc
@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "base/auto_reset.h"
+#include "base/callback.h"
#include "base/file_util.h"
#include "base/files/scoped_temp_dir.h"
#include "base/json/json_writer.h"
@@ -13,16 +14,20 @@
#include "base/values.h"
#include "chrome/browser/apps/app_browsertest_util.h"
#include "chrome/browser/browser_process.h"
+#include "chrome/browser/extensions/api/media_galleries/media_galleries_api.h"
#include "chrome/browser/media_galleries/media_file_system_registry.h"
#include "chrome/browser/media_galleries/media_folder_finder.h"
#include "chrome/browser/media_galleries/media_galleries_preferences.h"
+#include "chrome/browser/media_galleries/media_galleries_scan_result_dialog_controller.h"
#include "chrome/browser/media_galleries/media_galleries_test_util.h"
#include "chrome/browser/media_galleries/media_scan_manager.h"
#include "chrome/common/chrome_paths.h"
#include "components/storage_monitor/storage_info.h"
#include "components/storage_monitor/storage_monitor.h"
+#include "content/public/browser/web_contents.h"
#include "content/public/test/test_utils.h"
#include "extensions/browser/extension_system.h"
+#include "extensions/common/extension.h"
#if defined(OS_WIN) || defined(OS_MACOSX)
#include "chrome/browser/media_galleries/fileapi/picasa_finder.h"
@@ -50,11 +55,6 @@ base::FilePath::CharType kDevicePath[] = FILE_PATH_LITERAL("C:\\qux");
base::FilePath::CharType kDevicePath[] = FILE_PATH_LITERAL("/qux");
#endif
-void DoNothingMediaFolderFinderResultCallback(
- bool /*success*/,
- const MediaFolderFinder::MediaFolderFinderResults& /*results*/) {
-}
-
class DoNothingMediaFolderFinder : public MediaFolderFinder {
public:
explicit DoNothingMediaFolderFinder(
@@ -65,8 +65,7 @@ class DoNothingMediaFolderFinder : public MediaFolderFinder {
static MediaFolderFinder* CreateDoNothingMediaFolderFinder(
const MediaFolderFinderResultsCallback& callback) {
- return new DoNothingMediaFolderFinder(
- base::Bind(&DoNothingMediaFolderFinderResultCallback));
+ return new DoNothingMediaFolderFinder(callback);
}
virtual void StartScan() OVERRIDE {}
@@ -76,6 +75,30 @@ class DoNothingMediaFolderFinder : public MediaFolderFinder {
} // namespace
+class TestMediaGalleriesAddScanResultsFunction
+ : public extensions::MediaGalleriesAddScanResultsFunction {
+ public:
+ static ExtensionFunction* Factory() {
+ return new TestMediaGalleriesAddScanResultsFunction;
+ }
+
+ protected:
+ virtual ~TestMediaGalleriesAddScanResultsFunction() {}
+
+ // Accepts the dialog as soon as it is created.
+ virtual MediaGalleriesScanResultDialogController* MakeDialog(
+ content::WebContents* web_contents,
+ const extensions::Extension& extension,
+ const base::Closure& on_finish) OVERRIDE {
+ MediaGalleriesScanResultDialogController* controller =
+ extensions::MediaGalleriesAddScanResultsFunction::MakeDialog(
+ web_contents, extension, on_finish);
+ controller->dialog_->AcceptDialogForTesting();
+ // The dialog is closing or closed so don't return it.
+ return NULL;
+ }
+};
+
class MediaGalleriesPlatformAppBrowserTest : public PlatformAppBrowserTest {
protected:
MediaGalleriesPlatformAppBrowserTest() : test_jpg_size_(0) {}
@@ -358,7 +381,23 @@ class MediaGalleriesPlatformAppBrowserTest : public PlatformAppBrowserTest {
&DoNothingMediaFolderFinder::CreateDoNothingMediaFolderFinder));
}
+ void SetRootsForFolderFinder(const std::vector<base::FilePath>& roots) {
+ MediaScanManager* scan_manager =
+ g_browser_process->media_file_system_registry()->media_scan_manager();
+ scan_manager->SetMediaFolderFinderFactory(base::Bind(
+ &MediaGalleriesPlatformAppBrowserTest::CreateMediaFolderFinderWithRoots,
+ roots));
+ }
+
private:
+ static MediaFolderFinder* CreateMediaFolderFinderWithRoots(
+ const std::vector<base::FilePath>& roots,
+ const MediaFolderFinder::MediaFolderFinderResultsCallback& callback) {
+ MediaFolderFinder* finder = new MediaFolderFinder(callback);
+ finder->SetRootsForTesting(roots);
+ return finder;
+ }
+
MediaGalleriesPreferences* GetAndInitializePreferences() {
MediaGalleriesPreferences* preferences =
g_browser_process->media_file_system_registry()->GetPreferences(
@@ -480,7 +519,48 @@ IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest,
}
#endif // defined(OS_MACOSX)
-IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, Scan) {
+IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, CancelScan) {
InstallDoNothingFolderFinder();
+ ASSERT_TRUE(RunMediaGalleriesTest("cancel_scan")) << message_;
+}
+
+// The scan result dialog is not implemented on GTK.
Lei Zhang 2014/02/20 23:51:34 Isn't it clearer to write: #if defined(TOOLKIT_GT
vandebo (ex-Chrome) 2014/02/20 23:59:44 I actually think it's clearer to have the positive
vandebo (ex-Chrome) 2014/02/21 00:09:13 Done.
+#if defined (USE_AURA) || defined(OS_MACOSX)
+#define MAYBE_Scan Scan
+#else
+#define MAYBE_Scan DISABLED_Scan
+#endif // defined (USE_AURA) || defined(OS_MACOSX)
+
+IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, MAYBE_Scan) {
+ base::ScopedTempDir scan_root;
+ ASSERT_TRUE(scan_root.CreateUniqueTempDir());
+ std::vector<base::FilePath> roots;
+ roots.push_back(scan_root.path());
+ SetRootsForFolderFinder(roots);
+
+ // Override addScanResults so that the dialog is accepted as soon as it is
+ // created.
+ ASSERT_TRUE(ExtensionFunctionDispatcher::OverrideFunction(
+ "mediaGalleries.addScanResults",
+ &TestMediaGalleriesAddScanResultsFunction::Factory));
+
+ // Add some files and directories to the scan root for testing. Only the
+ // "f" directory should be found.
+ std::string dummy_data;
+ dummy_data.resize(1);
+ ASSERT_TRUE(base::CreateDirectory(scan_root.path().AppendASCII("a/b")));
+ ASSERT_EQ(static_cast<int>(dummy_data.size()),
+ file_util::WriteFile(scan_root.path().AppendASCII("a/b/c.jpg"),
+ dummy_data.c_str(), dummy_data.size()));
+ ASSERT_TRUE(base::CreateDirectory(scan_root.path().AppendASCII("a/d")));
+ dummy_data.resize(201 * 1024); // 200k is the min size for the folder finder.
+ ASSERT_EQ(static_cast<int>(dummy_data.size()),
+ file_util::WriteFile(scan_root.path().AppendASCII("a/d/e.txt"),
+ dummy_data.c_str(), dummy_data.size()));
+ ASSERT_TRUE(base::CreateDirectory(scan_root.path().AppendASCII("f")));
+ ASSERT_EQ(static_cast<int>(dummy_data.size()),
+ file_util::WriteFile(scan_root.path().AppendASCII("f/g.jpg"),
+ dummy_data.c_str(), dummy_data.size()));
+
ASSERT_TRUE(RunMediaGalleriesTest("scan")) << message_;
}

Powered by Google App Engine
This is Rietveld 408576698