Index: chrome/browser/chromeos/file_system_provider/operations/get_metadata_unittest.cc |
diff --git a/chrome/browser/chromeos/file_system_provider/operations/get_metadata_unittest.cc b/chrome/browser/chromeos/file_system_provider/operations/get_metadata_unittest.cc |
index 33f38d626856383f94632b94e46deecaad8b806e..cf309a53cfc907d8a5696c7a1b225f26e59cd2cc 100644 |
--- a/chrome/browser/chromeos/file_system_provider/operations/get_metadata_unittest.cc |
+++ b/chrome/browser/chromeos/file_system_provider/operations/get_metadata_unittest.cc |
@@ -30,20 +30,23 @@ const char kMimeType[] = "text/plain"; |
const int kRequestId = 2; |
const base::FilePath::CharType kDirectoryPath[] = "/directory"; |
+// URLs are case insensitive, so it should pass the sanity check. |
+const char kThumbnail[] = "DaTa:ImAgE/pNg;base64,"; |
+ |
// Callback invocation logger. Acts as a fileapi end-point. |
class CallbackLogger { |
public: |
class Event { |
public: |
- Event(const EntryMetadata& metadata, base::File::Error result) |
- : metadata_(metadata), result_(result) {} |
+ Event(scoped_ptr<EntryMetadata> metadata, base::File::Error result) |
+ : metadata_(metadata.Pass()), result_(result) {} |
virtual ~Event() {} |
- const EntryMetadata& metadata() { return metadata_; } |
- base::File::Error result() { return result_; } |
+ const EntryMetadata* metadata() const { return metadata_.get(); } |
+ base::File::Error result() const { return result_; } |
private: |
- EntryMetadata metadata_; |
+ scoped_ptr<EntryMetadata> metadata_; |
base::File::Error result_; |
DISALLOW_COPY_AND_ASSIGN(Event); |
@@ -52,11 +55,12 @@ class CallbackLogger { |
CallbackLogger() {} |
virtual ~CallbackLogger() {} |
- void OnGetMetadata(const EntryMetadata& metadata, base::File::Error result) { |
- events_.push_back(new Event(metadata, result)); |
+ void OnGetMetadata(scoped_ptr<EntryMetadata> metadata, |
+ base::File::Error result) { |
+ events_.push_back(new Event(metadata.Pass(), result)); |
} |
- ScopedVector<Event>& events() { return events_; } |
+ const ScopedVector<Event>& events() const { return events_; } |
private: |
ScopedVector<Event> events_; |
@@ -88,11 +92,13 @@ TEST_F(FileSystemProviderOperationsGetMetadataTest, Execute) { |
util::LoggingDispatchEventImpl dispatcher(true /* dispatch_reply */); |
CallbackLogger callback_logger; |
- GetMetadata get_metadata(NULL, |
- file_system_info_, |
- base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
- base::Bind(&CallbackLogger::OnGetMetadata, |
- base::Unretained(&callback_logger))); |
+ GetMetadata get_metadata( |
+ NULL, |
+ file_system_info_, |
+ base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
+ ProvidedFileSystemInterface::METADATA_FIELD_THUMBNAIL, |
+ base::Bind(&CallbackLogger::OnGetMetadata, |
+ base::Unretained(&callback_logger))); |
get_metadata.SetDispatchEventImplForTesting( |
base::Bind(&util::LoggingDispatchEventImpl::OnDispatchEventImpl, |
base::Unretained(&dispatcher))); |
@@ -121,17 +127,23 @@ TEST_F(FileSystemProviderOperationsGetMetadataTest, Execute) { |
std::string event_entry_path; |
EXPECT_TRUE(options->GetString("entryPath", &event_entry_path)); |
EXPECT_EQ(kDirectoryPath, event_entry_path); |
+ |
+ bool event_thumbnail; |
+ EXPECT_TRUE(options->GetBoolean("thumbnail", &event_thumbnail)); |
+ EXPECT_TRUE(event_thumbnail); |
} |
TEST_F(FileSystemProviderOperationsGetMetadataTest, Execute_NoListener) { |
util::LoggingDispatchEventImpl dispatcher(false /* dispatch_reply */); |
CallbackLogger callback_logger; |
- GetMetadata get_metadata(NULL, |
- file_system_info_, |
- base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
- base::Bind(&CallbackLogger::OnGetMetadata, |
- base::Unretained(&callback_logger))); |
+ GetMetadata get_metadata( |
+ NULL, |
+ file_system_info_, |
+ base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
+ ProvidedFileSystemInterface::METADATA_FIELD_THUMBNAIL, |
+ base::Bind(&CallbackLogger::OnGetMetadata, |
+ base::Unretained(&callback_logger))); |
get_metadata.SetDispatchEventImplForTesting( |
base::Bind(&util::LoggingDispatchEventImpl::OnDispatchEventImpl, |
base::Unretained(&dispatcher))); |
@@ -146,11 +158,13 @@ TEST_F(FileSystemProviderOperationsGetMetadataTest, OnSuccess) { |
util::LoggingDispatchEventImpl dispatcher(true /* dispatch_reply */); |
CallbackLogger callback_logger; |
- GetMetadata get_metadata(NULL, |
- file_system_info_, |
- base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
- base::Bind(&CallbackLogger::OnGetMetadata, |
- base::Unretained(&callback_logger))); |
+ GetMetadata get_metadata( |
+ NULL, |
+ file_system_info_, |
+ base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
+ ProvidedFileSystemInterface::METADATA_FIELD_THUMBNAIL, |
+ base::Bind(&CallbackLogger::OnGetMetadata, |
+ base::Unretained(&callback_logger))); |
get_metadata.SetDispatchEventImplForTesting( |
base::Bind(&util::LoggingDispatchEventImpl::OnDispatchEventImpl, |
base::Unretained(&dispatcher))); |
@@ -171,7 +185,8 @@ TEST_F(FileSystemProviderOperationsGetMetadataTest, OnSuccess) { |
" \"modificationTime\": {\n" |
" \"value\": \"Thu Apr 24 00:46:52 UTC 2014\"\n" |
" },\n" |
- " \"mimeType\": \"text/plain\"\n" // kMimeType |
+ " \"mimeType\": \"text/plain\",\n" // kMimeType |
+ " \"thumbnail\": \"DaTa:ImAgE/pNg;base64,\"\n" // kThumbnail |
" },\n" |
" 0\n" // execution_time |
"]\n"; |
@@ -197,25 +212,94 @@ TEST_F(FileSystemProviderOperationsGetMetadataTest, OnSuccess) { |
CallbackLogger::Event* event = callback_logger.events()[0]; |
EXPECT_EQ(base::File::FILE_OK, event->result()); |
- const EntryMetadata& metadata = event->metadata(); |
- EXPECT_FALSE(metadata.is_directory); |
- EXPECT_EQ(4096, metadata.size); |
+ const EntryMetadata* metadata = event->metadata(); |
+ EXPECT_FALSE(metadata->is_directory); |
+ EXPECT_EQ(4096, metadata->size); |
base::Time expected_time; |
EXPECT_TRUE( |
base::Time::FromString("Thu Apr 24 00:46:52 UTC 2014", &expected_time)); |
- EXPECT_EQ(expected_time, metadata.modification_time); |
- EXPECT_EQ(kMimeType, metadata.mime_type); |
+ EXPECT_EQ(expected_time, metadata->modification_time); |
+ EXPECT_EQ(kMimeType, metadata->mime_type); |
+ EXPECT_EQ(kThumbnail, metadata->thumbnail); |
+} |
+ |
+TEST_F(FileSystemProviderOperationsGetMetadataTest, |
+ OnSuccess_InvalidThumbnail) { |
+ using extensions::api::file_system_provider_internal:: |
+ GetMetadataRequestedSuccess::Params; |
+ |
+ util::LoggingDispatchEventImpl dispatcher(true /* dispatch_reply */); |
+ CallbackLogger callback_logger; |
+ |
+ GetMetadata get_metadata( |
+ NULL, |
+ file_system_info_, |
+ base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
+ ProvidedFileSystemInterface::METADATA_FIELD_THUMBNAIL, |
+ base::Bind(&CallbackLogger::OnGetMetadata, |
+ base::Unretained(&callback_logger))); |
+ get_metadata.SetDispatchEventImplForTesting( |
+ base::Bind(&util::LoggingDispatchEventImpl::OnDispatchEventImpl, |
+ base::Unretained(&dispatcher))); |
+ |
+ EXPECT_TRUE(get_metadata.Execute(kRequestId)); |
+ |
+ // Sample input as JSON. Keep in sync with file_system_provider_api.idl. |
+ // As for now, it is impossible to create *::Params class directly, not from |
+ // base::Value. |
+ const std::string input = |
+ "[\n" |
+ " \"testing-file-system\",\n" // kFileSystemId |
+ " 2,\n" // kRequestId |
+ " {\n" |
+ " \"isDirectory\": false,\n" |
+ " \"name\": \"blueberries.txt\",\n" |
+ " \"size\": 4096,\n" |
+ " \"modificationTime\": {\n" |
+ " \"value\": \"Thu Apr 24 00:46:52 UTC 2014\"\n" |
+ " },\n" |
+ " \"mimeType\": \"text/plain\",\n" // kMimeType |
+ " \"thumbnail\": \"http://www.foobar.com/evil\"\n" // kThumbnail |
+ " },\n" |
+ " 0\n" // execution_time |
+ "]\n"; |
+ |
+ int json_error_code; |
+ std::string json_error_msg; |
+ scoped_ptr<base::Value> value(base::JSONReader::ReadAndReturnError( |
+ input, base::JSON_PARSE_RFC, &json_error_code, &json_error_msg)); |
+ ASSERT_TRUE(value.get()) << json_error_msg; |
+ |
+ base::ListValue* value_as_list; |
+ ASSERT_TRUE(value->GetAsList(&value_as_list)); |
+ scoped_ptr<Params> params(Params::Create(*value_as_list)); |
+ ASSERT_TRUE(params.get()); |
+ scoped_ptr<RequestValue> request_value( |
+ RequestValue::CreateForGetMetadataSuccess(params.Pass())); |
+ ASSERT_TRUE(request_value.get()); |
+ |
+ const bool has_more = false; |
+ get_metadata.OnSuccess(kRequestId, request_value.Pass(), has_more); |
+ |
+ ASSERT_EQ(1u, callback_logger.events().size()); |
+ CallbackLogger::Event* event = callback_logger.events()[0]; |
+ EXPECT_EQ(base::File::FILE_ERROR_IO, event->result()); |
+ |
+ const EntryMetadata* metadata = event->metadata(); |
+ EXPECT_FALSE(metadata); |
} |
TEST_F(FileSystemProviderOperationsGetMetadataTest, OnError) { |
util::LoggingDispatchEventImpl dispatcher(true /* dispatch_reply */); |
CallbackLogger callback_logger; |
- GetMetadata get_metadata(NULL, |
- file_system_info_, |
- base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
- base::Bind(&CallbackLogger::OnGetMetadata, |
- base::Unretained(&callback_logger))); |
+ GetMetadata get_metadata( |
+ NULL, |
+ file_system_info_, |
+ base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
+ ProvidedFileSystemInterface::METADATA_FIELD_THUMBNAIL, |
+ base::Bind(&CallbackLogger::OnGetMetadata, |
+ base::Unretained(&callback_logger))); |
get_metadata.SetDispatchEventImplForTesting( |
base::Bind(&util::LoggingDispatchEventImpl::OnDispatchEventImpl, |
base::Unretained(&dispatcher))); |