| 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)));
|
|
|