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

Unified Diff: chrome/browser/media_galleries/fileapi/safe_picasa_album_table_reader.cc

Issue 18986012: Media Galleries API Picasa: Make PicasaDataProvider handle async PMP and INI parsing robustly. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@0039-picasa-import-sandbox-ini-parsing
Patch Set: Created 7 years, 4 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/media_galleries/fileapi/safe_picasa_album_table_reader.cc
diff --git a/chrome/browser/media_galleries/fileapi/safe_picasa_album_table_reader.cc b/chrome/browser/media_galleries/fileapi/safe_picasa_album_table_reader.cc
index 0485116072eb6d9fbed0afeffddd5b5f0d7ba05f..47709b69c37c45e18fc90bd0a5ae9dadc23e305e 100644
--- a/chrome/browser/media_galleries/fileapi/safe_picasa_album_table_reader.cc
+++ b/chrome/browser/media_galleries/fileapi/safe_picasa_album_table_reader.cc
@@ -4,6 +4,8 @@
#include "chrome/browser/media_galleries/fileapi/safe_picasa_album_table_reader.h"
+#include "base/bind.h"
+#include "base/logging.h"
#include "chrome/browser/media_galleries/fileapi/media_file_system_backend.h"
#include "chrome/common/chrome_utility_messages.h"
#include "content/public/browser/browser_thread.h"
@@ -15,19 +17,36 @@ using content::BrowserThread;
namespace picasa {
SafePicasaAlbumTableReader::SafePicasaAlbumTableReader(
- const AlbumTableFiles& album_table_files,
- const ParserCallback& callback)
- : album_table_files_(album_table_files),
- callback_(callback),
- parser_state_(INITIAL_STATE) {
+ const AlbumTableFiles& album_table_files)
+ : album_table_files_(album_table_files), parser_state_(INITIAL_STATE) {
// TODO(tommycli): Add DCHECK to make sure |album_table_files| are all
// opened read-only once security adds ability to check PlatformFiles.
DCHECK(MediaFileSystemBackend::CurrentlyOnMediaTaskRunnerThread());
- DCHECK(!callback_.is_null());
}
-void SafePicasaAlbumTableReader::Start() {
+void SafePicasaAlbumTableReader::Start(const ParserCallback& callback) {
DCHECK(MediaFileSystemBackend::CurrentlyOnMediaTaskRunnerThread());
+ DCHECK(!callback.is_null());
+
+ callback_ = callback;
+
+ // Don't bother spawning process if any of the files are invalid.
+ if (album_table_files_.indicator_file == base::kInvalidPlatformFileValue ||
+ album_table_files_.category_file == base::kInvalidPlatformFileValue ||
+ album_table_files_.date_file == base::kInvalidPlatformFileValue ||
+ album_table_files_.filename_file == base::kInvalidPlatformFileValue ||
+ album_table_files_.name_file == base::kInvalidPlatformFileValue ||
+ album_table_files_.token_file == base::kInvalidPlatformFileValue ||
+ album_table_files_.uid_file == base::kInvalidPlatformFileValue) {
+ MediaFileSystemBackend::MediaTaskRunner()->PostTask(
+ FROM_HERE,
+ base::Bind(callback_,
+ false /* parse_success */,
+ std::vector<AlbumInfo>(),
+ std::vector<AlbumInfo>()));
+ return;
+ }
+
BrowserThread::PostTask(
BrowserThread::IO,
FROM_HERE,
@@ -98,18 +117,19 @@ void SafePicasaAlbumTableReader::OnParsePicasaPMPDatabaseFinished(
const std::vector<AlbumInfo>& albums,
const std::vector<AlbumInfo>& folders) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK(!callback_.is_null());
if (parser_state_ != STARTED_PARSING_STATE)
return;
MediaFileSystemBackend::MediaTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(callback_, parse_success, albums, folders));
+ FROM_HERE, base::Bind(callback_, parse_success, albums, folders));
parser_state_ = FINISHED_PARSING_STATE;
}
void SafePicasaAlbumTableReader::OnProcessCrashed(int exit_code) {
- OnParsePicasaPMPDatabaseFinished(false, std::vector<AlbumInfo>(),
- std::vector<AlbumInfo>());
+ DLOG(ERROR) << "SafePicasaAlbumTableReader::OnProcessCrashed()";
+ OnParsePicasaPMPDatabaseFinished(
+ false, std::vector<AlbumInfo>(), std::vector<AlbumInfo>());
}
bool SafePicasaAlbumTableReader::OnMessageReceived(

Powered by Google App Engine
This is Rietveld 408576698