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

Side by Side Diff: chrome/browser/chromeos/file_system_provider/operations/close_file_unittest.cc

Issue 279213002: [fsp] Add support for closing files. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased. Created 6 years, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <string> 5 #include <string>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/files/file.h" 8 #include "base/files/file.h"
9 #include "base/files/file_path.h" 9 #include "base/files/file_path.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "base/memory/scoped_vector.h" 11 #include "base/memory/scoped_vector.h"
12 #include "chrome/browser/chromeos/file_system_provider/operations/open_file.h" 12 #include "chrome/browser/chromeos/file_system_provider/operations/close_file.h"
13 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_inte rface.h" 13 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_inte rface.h"
14 #include "chrome/common/extensions/api/file_system_provider.h" 14 #include "chrome/common/extensions/api/file_system_provider.h"
15 #include "chrome/common/extensions/api/file_system_provider_internal.h" 15 #include "chrome/common/extensions/api/file_system_provider_internal.h"
16 #include "extensions/browser/event_router.h" 16 #include "extensions/browser/event_router.h"
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 #include "webkit/browser/fileapi/async_file_util.h" 18 #include "webkit/browser/fileapi/async_file_util.h"
19 19
20 namespace chromeos { 20 namespace chromeos {
21 namespace file_system_provider { 21 namespace file_system_provider {
22 namespace operations { 22 namespace operations {
23 namespace { 23 namespace {
24 24
25 const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj"; 25 const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj";
26 const int kFileSystemId = 1; 26 const int kFileSystemId = 1;
27 const int kRequestId = 2; 27 const int kRequestId = 2;
28 const base::FilePath::CharType kFilePath[] = "/directory/blueberries.txt"; 28 const int kOpenRequestId = 3;
29 29
30 // Fake event dispatcher implementation with extra logging capability. Acts as 30 // Fake event dispatcher implementation with extra logging capability. Acts as
31 // a providing extension end-point. 31 // a providing extension end-point.
32 class LoggingDispatchEventImpl { 32 class LoggingDispatchEventImpl {
33 public: 33 public:
34 explicit LoggingDispatchEventImpl(bool dispatch_reply) 34 explicit LoggingDispatchEventImpl(bool dispatch_reply)
35 : dispatch_reply_(dispatch_reply) {} 35 : dispatch_reply_(dispatch_reply) {}
36 virtual ~LoggingDispatchEventImpl() {} 36 virtual ~LoggingDispatchEventImpl() {}
37 37
38 bool OnDispatchEventImpl(scoped_ptr<extensions::Event> event) { 38 bool OnDispatchEventImpl(scoped_ptr<extensions::Event> event) {
39 events_.push_back(event->DeepCopy()); 39 events_.push_back(event->DeepCopy());
40 return dispatch_reply_; 40 return dispatch_reply_;
41 } 41 }
42 42
43 ScopedVector<extensions::Event>& events() { return events_; } 43 ScopedVector<extensions::Event>& events() { return events_; }
44 44
45 private: 45 private:
46 ScopedVector<extensions::Event> events_; 46 ScopedVector<extensions::Event> events_;
47 bool dispatch_reply_; 47 bool dispatch_reply_;
48 48
49 DISALLOW_COPY_AND_ASSIGN(LoggingDispatchEventImpl); 49 DISALLOW_COPY_AND_ASSIGN(LoggingDispatchEventImpl);
50 }; 50 };
51 51
52 // Callback invocation logger. Acts as a fileapi end-point. 52 // Callback invocation logger. Acts as a fileapi end-point.
53 class CallbackLogger { 53 class CallbackLogger {
54 public: 54 public:
55 CallbackLogger() : weak_ptr_factory_(this) {} 55 CallbackLogger() : weak_ptr_factory_(this) {}
56 virtual ~CallbackLogger() {} 56 virtual ~CallbackLogger() {}
57 57
58 void OnOpenFile(base::File::Error result) { events_.push_back(result); } 58 void OnCloseFile(base::File::Error result) { events_.push_back(result); }
59 59
60 std::vector<base::File::Error>& events() { return events_; } 60 std::vector<base::File::Error>& events() { return events_; }
61 61
62 base::WeakPtr<CallbackLogger> GetWeakPtr() { 62 base::WeakPtr<CallbackLogger> GetWeakPtr() {
63 return weak_ptr_factory_.GetWeakPtr(); 63 return weak_ptr_factory_.GetWeakPtr();
64 } 64 }
65 65
66 private: 66 private:
67 std::vector<base::File::Error> events_; 67 std::vector<base::File::Error> events_;
68 base::WeakPtrFactory<CallbackLogger> weak_ptr_factory_; 68 base::WeakPtrFactory<CallbackLogger> weak_ptr_factory_;
69 69
70 DISALLOW_COPY_AND_ASSIGN(CallbackLogger); 70 DISALLOW_COPY_AND_ASSIGN(CallbackLogger);
71 }; 71 };
72 72
73 } // namespace 73 } // namespace
74 74
75 class FileSystemProviderOperationsOpenFileTest : public testing::Test { 75 class FileSystemProviderOperationsCloseFileTest : public testing::Test {
76 protected: 76 protected:
77 FileSystemProviderOperationsOpenFileTest() {} 77 FileSystemProviderOperationsCloseFileTest() {}
78 virtual ~FileSystemProviderOperationsOpenFileTest() {} 78 virtual ~FileSystemProviderOperationsCloseFileTest() {}
79 79
80 virtual void SetUp() OVERRIDE { 80 virtual void SetUp() OVERRIDE {
81 file_system_info_ = 81 file_system_info_ =
82 ProvidedFileSystemInfo(kExtensionId, 82 ProvidedFileSystemInfo(kExtensionId,
83 kFileSystemId, 83 kFileSystemId,
84 "" /* file_system_name */, 84 "" /* file_system_name */,
85 base::FilePath() /* mount_path */); 85 base::FilePath() /* mount_path */);
86 } 86 }
87 87
88 ProvidedFileSystemInfo file_system_info_; 88 ProvidedFileSystemInfo file_system_info_;
89 }; 89 };
90 90
91 TEST_F(FileSystemProviderOperationsOpenFileTest, Execute) { 91 TEST_F(FileSystemProviderOperationsCloseFileTest, Execute) {
92 LoggingDispatchEventImpl dispatcher(true /* dispatch_reply */); 92 LoggingDispatchEventImpl dispatcher(true /* dispatch_reply */);
93 CallbackLogger callback_logger; 93 CallbackLogger callback_logger;
94 94
95 OpenFile open_file( 95 CloseFile close_file(
96 NULL, 96 NULL,
97 file_system_info_, 97 file_system_info_,
98 base::FilePath::FromUTF8Unsafe(kFilePath), 98 kOpenRequestId,
99 ProvidedFileSystemInterface::OPEN_FILE_MODE_READ, 99 base::Bind(&CallbackLogger::OnCloseFile, callback_logger.GetWeakPtr()));
100 false /* create */, 100 close_file.SetDispatchEventImplForTesting(
101 base::Bind(&CallbackLogger::OnOpenFile, callback_logger.GetWeakPtr()));
102 open_file.SetDispatchEventImplForTesting(
103 base::Bind(&LoggingDispatchEventImpl::OnDispatchEventImpl, 101 base::Bind(&LoggingDispatchEventImpl::OnDispatchEventImpl,
104 base::Unretained(&dispatcher))); 102 base::Unretained(&dispatcher)));
105 103
106 EXPECT_TRUE(open_file.Execute(kRequestId)); 104 EXPECT_TRUE(close_file.Execute(kRequestId));
107 105
108 ASSERT_EQ(1u, dispatcher.events().size()); 106 ASSERT_EQ(1u, dispatcher.events().size());
109 extensions::Event* event = dispatcher.events()[0]; 107 extensions::Event* event = dispatcher.events()[0];
110 EXPECT_EQ( 108 EXPECT_EQ(
111 extensions::api::file_system_provider::OnOpenFileRequested::kEventName, 109 extensions::api::file_system_provider::OnCloseFileRequested::kEventName,
112 event->event_name); 110 event->event_name);
113 base::ListValue* event_args = event->event_args.get(); 111 base::ListValue* event_args = event->event_args.get();
114 ASSERT_EQ(5u, event_args->GetSize()); 112 ASSERT_EQ(3u, event_args->GetSize());
115 113
116 int event_file_system_id = -1; 114 int event_file_system_id = -1;
117 EXPECT_TRUE(event_args->GetInteger(0, &event_file_system_id)); 115 EXPECT_TRUE(event_args->GetInteger(0, &event_file_system_id));
118 EXPECT_EQ(kFileSystemId, event_file_system_id); 116 EXPECT_EQ(kFileSystemId, event_file_system_id);
119 117
120 int event_request_id = -1; 118 int event_request_id = -1;
121 EXPECT_TRUE(event_args->GetInteger(1, &event_request_id)); 119 EXPECT_TRUE(event_args->GetInteger(1, &event_request_id));
122 EXPECT_EQ(kRequestId, event_request_id); 120 EXPECT_EQ(kRequestId, event_request_id);
123 121
124 std::string event_file_path; 122 int event_open_request_id = -1;
125 EXPECT_TRUE(event_args->GetString(2, &event_file_path)); 123 EXPECT_TRUE(event_args->GetInteger(2, &event_open_request_id));
126 EXPECT_EQ(kFilePath, event_file_path); 124 EXPECT_EQ(kOpenRequestId, event_open_request_id);
127
128 std::string event_file_open_mode;
129 EXPECT_TRUE(event_args->GetString(3, &event_file_open_mode));
130 const std::string expected_file_open_mode =
131 extensions::api::file_system_provider::ToString(
132 extensions::api::file_system_provider::OPEN_FILE_MODE_READ);
133 EXPECT_EQ(expected_file_open_mode, event_file_open_mode);
134
135 bool event_create;
136 EXPECT_TRUE(event_args->GetBoolean(4, &event_create));
137 EXPECT_FALSE(event_create);
138 } 125 }
139 126
140 TEST_F(FileSystemProviderOperationsOpenFileTest, Execute_NoListener) { 127 TEST_F(FileSystemProviderOperationsCloseFileTest, Execute_NoListener) {
141 LoggingDispatchEventImpl dispatcher(false /* dispatch_reply */); 128 LoggingDispatchEventImpl dispatcher(false /* dispatch_reply */);
142 CallbackLogger callback_logger; 129 CallbackLogger callback_logger;
143 130
144 OpenFile open_file( 131 CloseFile close_file(
145 NULL, 132 NULL,
146 file_system_info_, 133 file_system_info_,
147 base::FilePath::FromUTF8Unsafe(kFilePath), 134 kOpenRequestId,
148 ProvidedFileSystemInterface::OPEN_FILE_MODE_READ, 135 base::Bind(&CallbackLogger::OnCloseFile, callback_logger.GetWeakPtr()));
149 false /* create */, 136 close_file.SetDispatchEventImplForTesting(
150 base::Bind(&CallbackLogger::OnOpenFile, callback_logger.GetWeakPtr()));
151 open_file.SetDispatchEventImplForTesting(
152 base::Bind(&LoggingDispatchEventImpl::OnDispatchEventImpl, 137 base::Bind(&LoggingDispatchEventImpl::OnDispatchEventImpl,
153 base::Unretained(&dispatcher))); 138 base::Unretained(&dispatcher)));
154 139
155 EXPECT_FALSE(open_file.Execute(kRequestId)); 140 EXPECT_FALSE(close_file.Execute(kRequestId));
156 } 141 }
157 142
158 TEST_F(FileSystemProviderOperationsOpenFileTest, OnSuccess) { 143 TEST_F(FileSystemProviderOperationsCloseFileTest, OnSuccess) {
159 using extensions::api::file_system_provider::EntryMetadata; 144 using extensions::api::file_system_provider::EntryMetadata;
160 using extensions::api::file_system_provider_internal:: 145 using extensions::api::file_system_provider_internal::
161 OpenFileRequestedSuccess::Params; 146 CloseFileRequestedSuccess::Params;
162 147
163 LoggingDispatchEventImpl dispatcher(true /* dispatch_reply */); 148 LoggingDispatchEventImpl dispatcher(true /* dispatch_reply */);
164 CallbackLogger callback_logger; 149 CallbackLogger callback_logger;
165 150
166 OpenFile open_file( 151 CloseFile close_file(
167 NULL, 152 NULL,
168 file_system_info_, 153 file_system_info_,
169 base::FilePath::FromUTF8Unsafe(kFilePath), 154 kOpenRequestId,
170 ProvidedFileSystemInterface::OPEN_FILE_MODE_READ, 155 base::Bind(&CallbackLogger::OnCloseFile, callback_logger.GetWeakPtr()));
171 false /* create */, 156 close_file.SetDispatchEventImplForTesting(
172 base::Bind(&CallbackLogger::OnOpenFile, callback_logger.GetWeakPtr()));
173 open_file.SetDispatchEventImplForTesting(
174 base::Bind(&LoggingDispatchEventImpl::OnDispatchEventImpl, 157 base::Bind(&LoggingDispatchEventImpl::OnDispatchEventImpl,
175 base::Unretained(&dispatcher))); 158 base::Unretained(&dispatcher)));
176 159
177 EXPECT_TRUE(open_file.Execute(kRequestId)); 160 EXPECT_TRUE(close_file.Execute(kRequestId));
178 161
179 open_file.OnSuccess(kRequestId, 162 close_file.OnSuccess(kRequestId,
180 scoped_ptr<RequestValue>(new RequestValue()), 163 scoped_ptr<RequestValue>(new RequestValue()),
181 false /* has_next */); 164 false /* has_next */);
182 ASSERT_EQ(1u, callback_logger.events().size()); 165 ASSERT_EQ(1u, callback_logger.events().size());
183 EXPECT_EQ(base::File::FILE_OK, callback_logger.events()[0]); 166 EXPECT_EQ(base::File::FILE_OK, callback_logger.events()[0]);
184 } 167 }
185 168
186 TEST_F(FileSystemProviderOperationsOpenFileTest, OnError) { 169 TEST_F(FileSystemProviderOperationsCloseFileTest, OnError) {
187 using extensions::api::file_system_provider::EntryMetadata; 170 using extensions::api::file_system_provider::EntryMetadata;
188 using extensions::api::file_system_provider_internal::OpenFileRequestedError:: 171 using extensions::api::file_system_provider_internal::
189 Params; 172 CloseFileRequestedError::Params;
190 173
191 LoggingDispatchEventImpl dispatcher(true /* dispatch_reply */); 174 LoggingDispatchEventImpl dispatcher(true /* dispatch_reply */);
192 CallbackLogger callback_logger; 175 CallbackLogger callback_logger;
193 176
194 OpenFile open_file( 177 CloseFile close_file(
195 NULL, 178 NULL,
196 file_system_info_, 179 file_system_info_,
197 base::FilePath::FromUTF8Unsafe(kFilePath), 180 kOpenRequestId,
198 ProvidedFileSystemInterface::OPEN_FILE_MODE_READ, 181 base::Bind(&CallbackLogger::OnCloseFile, callback_logger.GetWeakPtr()));
199 false /* create */, 182 close_file.SetDispatchEventImplForTesting(
200 base::Bind(&CallbackLogger::OnOpenFile, callback_logger.GetWeakPtr()));
201 open_file.SetDispatchEventImplForTesting(
202 base::Bind(&LoggingDispatchEventImpl::OnDispatchEventImpl, 183 base::Bind(&LoggingDispatchEventImpl::OnDispatchEventImpl,
203 base::Unretained(&dispatcher))); 184 base::Unretained(&dispatcher)));
204 185
205 EXPECT_TRUE(open_file.Execute(kRequestId)); 186 EXPECT_TRUE(close_file.Execute(kRequestId));
206 187
207 open_file.OnError(kRequestId, base::File::FILE_ERROR_TOO_MANY_OPENED); 188 close_file.OnError(kRequestId, base::File::FILE_ERROR_TOO_MANY_OPENED);
208 ASSERT_EQ(1u, callback_logger.events().size()); 189 ASSERT_EQ(1u, callback_logger.events().size());
209 EXPECT_EQ(base::File::FILE_ERROR_TOO_MANY_OPENED, 190 EXPECT_EQ(base::File::FILE_ERROR_TOO_MANY_OPENED,
210 callback_logger.events()[0]); 191 callback_logger.events()[0]);
211 } 192 }
212 193
213 } // namespace operations 194 } // namespace operations
214 } // namespace file_system_provider 195 } // namespace file_system_provider
215 } // namespace chromeos 196 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698