summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortommycli@chromium.org <tommycli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-29 20:21:59 +0000
committertommycli@chromium.org <tommycli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-29 20:21:59 +0000
commit6034e46442251ee158c51b27e0cde087fe253b4c (patch)
treec69d4f5c262ce68cbd7048817532e0bbbcc0f8f3
parentf4d56d16feb0e39aa9ca39e75425b404aeaf3914 (diff)
downloadchromium_src-6034e46442251ee158c51b27e0cde087fe253b4c.zip
chromium_src-6034e46442251ee158c51b27e0cde087fe253b4c.tar.gz
chromium_src-6034e46442251ee158c51b27e0cde087fe253b4c.tar.bz2
Media Galleries API Picasa: Mac Custom Database Locations
Mac code copied from vandebo's CL here: https://codereview.chromium.org/25779002/ BUG=151701 Review URL: https://codereview.chromium.org/26064002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@231627 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/extensions/api/media_galleries/media_galleries_apitest.cc31
-rw-r--r--chrome/browser/media_galleries/fileapi/picasa_finder.cc69
-rw-r--r--chrome/browser/media_galleries/fileapi/picasa_finder.h33
-rw-r--r--chrome/browser/media_galleries/fileapi/picasa_finder_mac.mm52
-rw-r--r--chrome/browser/media_galleries/media_galleries_test_util.cc16
-rw-r--r--chrome/browser/media_galleries/media_galleries_test_util.h2
-rw-r--r--chrome/chrome_browser.gypi1
7 files changed, 150 insertions, 54 deletions
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 1d6f6a7..916f007 100644
--- a/chrome/browser/extensions/api/media_galleries/media_galleries_apitest.cc
+++ b/chrome/browser/extensions/api/media_galleries/media_galleries_apitest.cc
@@ -161,11 +161,11 @@ class MediaGalleriesPlatformAppBrowserTest : public PlatformAppBrowserTest {
}
#if defined(OS_WIN) || defined(OS_MACOSX)
- void PopulatePicasaTestData(const base::FilePath& metadata_root) {
+ void PopulatePicasaTestData(const base::FilePath& picasa_app_data_root) {
base::FilePath picasa_database_path =
- metadata_root.AppendASCII(picasa::kPicasaDatabaseDirName);
+ picasa::MakePicasaDatabasePath(picasa_app_data_root);
base::FilePath picasa_temp_dir_path =
- metadata_root.AppendASCII(picasa::kPicasaTempDirName);
+ picasa_database_path.DirName().AppendASCII(picasa::kPicasaTempDirName);
ASSERT_TRUE(file_util::CreateDirectory(picasa_database_path));
ASSERT_TRUE(file_util::CreateDirectory(picasa_temp_dir_path));
@@ -277,27 +277,22 @@ IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest,
IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest,
PicasaDefaultLocation) {
#if defined(OS_WIN)
- base::FilePath metadata_root = ensure_media_directories_exists()->
- GetFakeLocalAppDataPath().AppendASCII("Google").AppendASCII("Picasa2");
+ PopulatePicasaTestData(
+ ensure_media_directories_exists()->GetFakeLocalAppDataPath());
#elif defined(OS_MACOSX)
- base::FilePath metadata_root = ensure_media_directories_exists()->
- GetFakeAppDataPath().AppendASCII("Google").AppendASCII("Picasa3");
+ PopulatePicasaTestData(
+ ensure_media_directories_exists()->GetFakeAppDataPath());
#endif
- PopulatePicasaTestData(metadata_root);
ASSERT_TRUE(RunMediaGalleriesTest("picasa")) << message_;
}
-#endif // defined(OS_WIN) || defined(OS_MACOSX)
-#if defined(OS_WIN)
IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest,
PicasaCustomLocation) {
- base::ScopedTempDir fake_alternate_app_data_dir;
- ASSERT_TRUE(fake_alternate_app_data_dir.CreateUniqueTempDir());
- ensure_media_directories_exists()->WriteCustomPicasaAppDataPathToRegistry(
- fake_alternate_app_data_dir.path());
- base::FilePath metadata_root = fake_alternate_app_data_dir.path()
- .AppendASCII("Google").AppendASCII("Picasa2");
- PopulatePicasaTestData(metadata_root);
+ base::ScopedTempDir custom_picasa_app_data_root;
+ ASSERT_TRUE(custom_picasa_app_data_root.CreateUniqueTempDir());
+ ensure_media_directories_exists()->SetCustomPicasaAppDataPath(
+ custom_picasa_app_data_root.path());
+ PopulatePicasaTestData(custom_picasa_app_data_root.path());
ASSERT_TRUE(RunMediaGalleriesTest("picasa")) << message_;
}
-#endif // defined(OS_WIN)
+#endif // defined(OS_WIN) || defined(OS_MACOSX)
diff --git a/chrome/browser/media_galleries/fileapi/picasa_finder.cc b/chrome/browser/media_galleries/fileapi/picasa_finder.cc
index ef58e90..87ec630 100644
--- a/chrome/browser/media_galleries/fileapi/picasa_finder.cc
+++ b/chrome/browser/media_galleries/fileapi/picasa_finder.cc
@@ -11,7 +11,6 @@
#include "base/base_paths.h"
#include "base/bind.h"
#include "base/file_util.h"
-#include "base/files/file_path.h"
#include "base/path_service.h"
#include "base/strings/string16.h"
#include "chrome/browser/storage_monitor/storage_info.h"
@@ -27,13 +26,13 @@ namespace picasa {
#if defined(OS_WIN)
const wchar_t kPicasaRegistryPath[] =
L"Software\\Google\\Picasa\\Picasa2\\Preferences";
-const wchar_t kPicasaRegistryAppDataKey[] = L"AppLocalDataPath";
+const wchar_t kPicasaRegistryAppDataPathKey[] = L"AppLocalDataPath";
#endif
namespace {
#if defined(OS_WIN)
-base::FilePath GetCustomPicasaRoot() {
+base::FilePath GetCustomPicasaAppDataPathFromWinRegistry() {
base::win::RegKey key;
if (key.Open(HKEY_CURRENT_USER, kPicasaRegistryPath, KEY_READ) !=
ERROR_SUCCESS || !key.Valid()) {
@@ -41,7 +40,7 @@ base::FilePath GetCustomPicasaRoot() {
}
string16 value;
- if (key.ReadValue(kPicasaRegistryAppDataKey, &value) != ERROR_SUCCESS)
+ if (key.ReadValue(kPicasaRegistryAppDataPathKey, &value) != ERROR_SUCCESS)
return base::FilePath();
if (value.empty())
return base::FilePath();
@@ -49,45 +48,38 @@ base::FilePath GetCustomPicasaRoot() {
return base::FilePath(value);
}
-base::FilePath GetPicasaDatabasePathWin() {
- base::FilePath path = GetCustomPicasaRoot();
+base::FilePath GetPicasaDatabasePath() {
+ base::FilePath path = GetCustomPicasaAppDataPathFromWinRegistry();
if (path.empty() && !PathService::Get(base::DIR_LOCAL_APP_DATA, &path))
return base::FilePath();
-
- return path.AppendASCII("Google").AppendASCII("Picasa2").AppendASCII(
- kPicasaDatabaseDirName);
+ return MakePicasaDatabasePath(path);
}
-#endif
+#endif // OS_WIN
-#if defined (OS_MACOSX)
-base::FilePath GetPicasaDatabasePathMac() {
- // TODO(tommycli): Support Picasa Mac's custom path.
- base::FilePath path;
- if (!PathService::Get(base::DIR_APP_DATA, &path))
+#if defined(OS_MACOSX)
+base::FilePath GetPicasaDatabasePath() {
+ base::FilePath path = GetCustomPicasaAppDataPathFromMacPreferences();
+ if (path.empty() && !PathService::Get(base::DIR_APP_DATA, &path))
return base::FilePath();
-
- // On Mac, the database is in "Picasa3", not "Picasa2".
- return path.AppendASCII("Google").AppendASCII("Picasa3").AppendASCII(
- kPicasaDatabaseDirName);
+ return MakePicasaDatabasePath(path);
}
-#endif
+#endif // OS_MACOSX
// Returns path of Picasa's DB3 database directory. May only be called on
// threads that allow for disk IO, like the FILE thread or MediaTaskRunner.
base::FilePath FindPicasaDatabaseOnFileThread() {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE));
- base::FilePath path;
- #if defined(OS_WIN)
- path = GetPicasaDatabasePathWin();
- #elif defined(OS_MACOSX)
- path = GetPicasaDatabasePathMac();
- #endif
-
- // Verify actual existence
- if (!base::DirectoryExists(path))
- path.clear();
-
- return path;
+
+#if defined(OS_WIN) || defined(OS_MACOSX)
+ base::FilePath path = GetPicasaDatabasePath();
+ // Verify actual existence
+ if (!base::DirectoryExists(path))
+ path.clear();
+
+ return path;
+#else
+ return base::FilePath();
+#endif
}
void FinishOnOriginalThread(const DeviceIDCallback& callback,
@@ -110,4 +102,17 @@ void FindPicasaDatabase(const DeviceIDCallback& callback) {
base::Bind(&FinishOnOriginalThread, callback));
}
+base::FilePath MakePicasaDatabasePath(
+ const base::FilePath& picasa_app_data_path) {
+#if defined(OS_WIN)
+ return picasa_app_data_path.AppendASCII("Google").AppendASCII("Picasa2")
+ .AppendASCII(kPicasaDatabaseDirName);
+#elif defined(OS_MACOSX)
+ return picasa_app_data_path.AppendASCII("Google").AppendASCII("Picasa3")
+ .AppendASCII(kPicasaDatabaseDirName);
+#else
+ return base::FilePath();
+#endif
+}
+
} // namespace picasa
diff --git a/chrome/browser/media_galleries/fileapi/picasa_finder.h b/chrome/browser/media_galleries/fileapi/picasa_finder.h
index 1c64273..109c90d 100644
--- a/chrome/browser/media_galleries/fileapi/picasa_finder.h
+++ b/chrome/browser/media_galleries/fileapi/picasa_finder.h
@@ -8,12 +8,28 @@
#include <string>
#include "base/callback.h"
+#include "base/files/file_path.h"
+
+#if defined(OS_MACOSX)
+
+class MacPreferences;
+#if defined(__OBJC__)
+@class NSString;
+#else // __OBJC__
+class NSString;
+#endif // __OBJC__
+
+#endif // OS_MACOSX
namespace picasa {
#if defined(OS_WIN)
extern const wchar_t kPicasaRegistryPath[];
-extern const wchar_t kPicasaRegistryAppDataKey[];
+extern const wchar_t kPicasaRegistryAppDataPathKey[];
+#endif
+
+#if defined(OS_MACOSX)
+extern NSString* const kPicasaAppDataPathMacPreferencesKey;
#endif
typedef base::Callback<void(const std::string&)> DeviceIDCallback;
@@ -24,6 +40,21 @@ typedef base::Callback<void(const std::string&)> DeviceIDCallback;
// with an empty string.
void FindPicasaDatabase(const DeviceIDCallback& callback);
+// Builds the OS-dependent Picasa database path from the app-data path.
+// Used internally and by tests to construct an test environments.
+base::FilePath MakePicasaDatabasePath(
+ const base::FilePath& picasa_app_data_path);
+
+#if defined(OS_MACOSX)
+// Set the mac preferences to use for testing. The caller continues to own
+// |preferences| and should call this function again with NULL before freeing
+// it.
+void SetMacPreferencesForTesting(MacPreferences* preferences);
+
+// Used internally only.
+base::FilePath GetCustomPicasaAppDataPathFromMacPreferences();
+#endif // OS_MACOSX
+
} // namespace picasa
#endif // CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_PICASA_FINDER_H_
diff --git a/chrome/browser/media_galleries/fileapi/picasa_finder_mac.mm b/chrome/browser/media_galleries/fileapi/picasa_finder_mac.mm
new file mode 100644
index 0000000..1a3dead
--- /dev/null
+++ b/chrome/browser/media_galleries/fileapi/picasa_finder_mac.mm
@@ -0,0 +1,52 @@
+// Copyright 2013 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/media_galleries/fileapi/picasa_finder.h"
+
+#include "base/files/file_path.h"
+#import "base/mac/foundation_util.h"
+#import "base/mac/scoped_nsobject.h"
+#include "chrome/browser/policy/preferences_mac.h"
+#include "content/public/browser/browser_thread.h"
+
+using base::mac::CFCast;
+using base::mac::CFToNSCast;
+using base::mac::NSToCFCast;
+
+namespace picasa {
+
+namespace {
+
+static MacPreferences* g_test_mac_preferences = NULL;
+
+} // namespace
+
+NSString* const kPicasaAppDataPathMacPreferencesKey = @"AppLocalDataPath";
+
+void SetMacPreferencesForTesting(MacPreferences* preferences) {
+ g_test_mac_preferences = preferences;
+}
+
+base::FilePath GetCustomPicasaAppDataPathFromMacPreferences() {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE));
+
+ scoped_ptr<MacPreferences> real_preferences;
+ MacPreferences* prefs = g_test_mac_preferences;
+ if (!prefs) {
+ real_preferences.reset(new MacPreferences());
+ prefs = real_preferences.get();
+ }
+
+ CFStringRef picasa_app_id = CFSTR("com.google.picasa");
+ base::scoped_nsobject<NSString> database_path(
+ CFToNSCast(CFCast<CFStringRef>(prefs->CopyAppValue(
+ NSToCFCast(kPicasaAppDataPathMacPreferencesKey), picasa_app_id))));
+
+ if (database_path == NULL)
+ return base::FilePath();
+
+ return base::mac::NSStringToFilePath(database_path.get());
+}
+
+} // namespace picasa
diff --git a/chrome/browser/media_galleries/media_galleries_test_util.cc b/chrome/browser/media_galleries/media_galleries_test_util.cc
index ce58b66..d2f32a5 100644
--- a/chrome/browser/media_galleries/media_galleries_test_util.cc
+++ b/chrome/browser/media_galleries/media_galleries_test_util.cc
@@ -92,6 +92,7 @@ EnsureMediaDirectoriesExists::EnsureMediaDirectoriesExists()
EnsureMediaDirectoriesExists::~EnsureMediaDirectoriesExists() {
#if defined(OS_MACOSX)
iapps::SetMacPreferencesForTesting(NULL);
+ picasa::SetMacPreferencesForTesting(NULL);
#endif // OS_MACOSX
}
@@ -106,14 +107,24 @@ base::FilePath EnsureMediaDirectoriesExists::GetFakeLocalAppDataPath() const {
return fake_dir_.path().AppendASCII("localappdata");
}
-void EnsureMediaDirectoriesExists::WriteCustomPicasaAppDataPathToRegistry(
+void EnsureMediaDirectoriesExists::SetCustomPicasaAppDataPath(
const base::FilePath& path) {
base::win::RegKey key(HKEY_CURRENT_USER, picasa::kPicasaRegistryPath,
KEY_SET_VALUE);
- key.WriteValue(picasa::kPicasaRegistryAppDataKey, path.value().c_str());
+ key.WriteValue(picasa::kPicasaRegistryAppDataPathKey, path.value().c_str());
}
#endif // OS_WIN
+#if defined(OS_MACOSX)
+void EnsureMediaDirectoriesExists::SetCustomPicasaAppDataPath(
+ const base::FilePath& path) {
+ mac_preferences_->AddTestItem(
+ base::mac::NSToCFCast(picasa::kPicasaAppDataPathMacPreferencesKey),
+ base::SysUTF8ToNSString(path.value()),
+ false);
+}
+#endif // OS_MACOSX
+
#if defined(OS_WIN) || defined(OS_MACOSX)
base::FilePath
EnsureMediaDirectoriesExists::GetFakePicasaFoldersRootPath() const {
@@ -147,6 +158,7 @@ void EnsureMediaDirectoriesExists::Init() {
#if defined(OS_MACOSX)
mac_preferences_.reset(new MockPreferences);
iapps::SetMacPreferencesForTesting(mac_preferences_.get());
+ picasa::SetMacPreferencesForTesting(mac_preferences_.get());
// iTunes override.
mac_preferences_->AddTestItem(
diff --git a/chrome/browser/media_galleries/media_galleries_test_util.h b/chrome/browser/media_galleries/media_galleries_test_util.h
index 81e7de7..be22818 100644
--- a/chrome/browser/media_galleries/media_galleries_test_util.h
+++ b/chrome/browser/media_galleries/media_galleries_test_util.h
@@ -44,9 +44,9 @@ class EnsureMediaDirectoriesExists {
base::FilePath GetFakeAppDataPath() const;
#if defined(OS_WIN)
base::FilePath GetFakeLocalAppDataPath() const;
- void WriteCustomPicasaAppDataPathToRegistry(const base::FilePath& path);
#endif
#if defined(OS_WIN) || defined(OS_MACOSX)
+ void SetCustomPicasaAppDataPath(const base::FilePath& path);
base::FilePath GetFakePicasaFoldersRootPath() const;
#endif
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 31f3803..1599d6b 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -1080,6 +1080,7 @@
'browser/media_galleries/fileapi/native_media_file_util.h',
'browser/media_galleries/fileapi/picasa_finder.cc',
'browser/media_galleries/fileapi/picasa_finder.h',
+ 'browser/media_galleries/fileapi/picasa_finder_mac.mm',
'browser/media_galleries/fileapi/safe_audio_video_checker.cc',
'browser/media_galleries/fileapi/safe_audio_video_checker.h',
'browser/media_galleries/fileapi/supported_audio_video_checker.cc',