1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/file_system_provider/operations/close_file.h" 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <string> 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <vector> 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/files/file.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/files/file_path.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/file_system_provider/operations/test_util.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h" 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/common/extensions/api/file_system_provider.h" 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/common/extensions/api/file_system_provider_internal.h" 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "extensions/browser/event_router.h" 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/fileapi/async_file_util.h" 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace chromeos { 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace file_system_provider { 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace operations { 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace { 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj"; 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kFileSystemId[] = "testing-file-system"; 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const int kRequestId = 2; 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const int kOpenRequestId = 3; 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class FileSystemProviderOperationsCloseFileTest : public testing::Test { 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) protected: 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FileSystemProviderOperationsCloseFileTest() {} 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~FileSystemProviderOperationsCloseFileTest() {} 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void SetUp() OVERRIDE { 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) file_system_info_ = 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProvidedFileSystemInfo(kExtensionId, 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) kFileSystemId, 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "" /* display_name */, 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch false /* writable */, 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::FilePath() /* mount_path */); 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProvidedFileSystemInfo file_system_info_; 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(FileSystemProviderOperationsCloseFileTest, Execute) { 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci using extensions::api::file_system_provider::CloseFileRequestedOptions; 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch util::LoggingDispatchEventImpl dispatcher(true /* dispatch_reply */); 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch util::StatusCallbackLog callback_log; 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CloseFile close_file(NULL, 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch file_system_info_, 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kOpenRequestId, 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&util::LogStatusCallback, &callback_log)); 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) close_file.SetDispatchEventImplForTesting( 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&util::LoggingDispatchEventImpl::OnDispatchEventImpl, 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Unretained(&dispatcher))); 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(close_file.Execute(kRequestId)); 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(1u, dispatcher.events().size()); 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) extensions::Event* event = dispatcher.events()[0]; 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ( 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) extensions::api::file_system_provider::OnCloseFileRequested::kEventName, 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event->event_name); 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::ListValue* event_args = event->event_args.get(); 72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_EQ(1u, event_args->GetSize()); 73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::DictionaryValue* options_as_value = NULL; 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(event_args->GetDictionary(0, &options_as_value)); 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CloseFileRequestedOptions options; 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(CloseFileRequestedOptions::Populate(*options_as_value, &options)); 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(kFileSystemId, options.file_system_id); 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(kRequestId, options.request_id); 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(kOpenRequestId, options.open_request_id); 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(FileSystemProviderOperationsCloseFileTest, Execute_NoListener) { 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch util::LoggingDispatchEventImpl dispatcher(false /* dispatch_reply */); 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch util::StatusCallbackLog callback_log; 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CloseFile close_file(NULL, 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch file_system_info_, 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kOpenRequestId, 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&util::LogStatusCallback, &callback_log)); 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) close_file.SetDispatchEventImplForTesting( 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&util::LoggingDispatchEventImpl::OnDispatchEventImpl, 94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Unretained(&dispatcher))); 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(close_file.Execute(kRequestId)); 97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(FileSystemProviderOperationsCloseFileTest, OnSuccess) { 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch util::LoggingDispatchEventImpl dispatcher(true /* dispatch_reply */); 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch util::StatusCallbackLog callback_log; 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CloseFile close_file(NULL, 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch file_system_info_, 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kOpenRequestId, 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&util::LogStatusCallback, &callback_log)); 107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) close_file.SetDispatchEventImplForTesting( 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&util::LoggingDispatchEventImpl::OnDispatchEventImpl, 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Unretained(&dispatcher))); 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(close_file.Execute(kRequestId)); 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) close_file.OnSuccess(kRequestId, 114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<RequestValue>(new RequestValue()), 11546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) false /* has_more */); 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(1u, callback_log.size()); 117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(base::File::FILE_OK, callback_log[0]); 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(FileSystemProviderOperationsCloseFileTest, OnError) { 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch util::LoggingDispatchEventImpl dispatcher(true /* dispatch_reply */); 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch util::StatusCallbackLog callback_log; 123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CloseFile close_file(NULL, 125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch file_system_info_, 126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kOpenRequestId, 127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&util::LogStatusCallback, &callback_log)); 128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) close_file.SetDispatchEventImplForTesting( 129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&util::LoggingDispatchEventImpl::OnDispatchEventImpl, 130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Unretained(&dispatcher))); 131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(close_file.Execute(kRequestId)); 133cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch close_file.OnError(kRequestId, 135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<RequestValue>(new RequestValue()), 136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::File::FILE_ERROR_TOO_MANY_OPENED); 137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(1u, callback_log.size()); 138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(base::File::FILE_ERROR_TOO_MANY_OPENED, callback_log[0]); 139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace operations 142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace file_system_provider 143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace chromeos 144