OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "webkit/fileapi/file_system_operation.h" | 5 #include "webkit/fileapi/file_system_operation.h" |
6 | 6 |
7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 const StorageType type_; | 81 const StorageType type_; |
82 int64 usage_; | 82 int64 usage_; |
83 int64 quota_; | 83 int64 quota_; |
84 int accessed_; | 84 int accessed_; |
85 }; | 85 }; |
86 | 86 |
87 class MockQuotaManagerProxy : public QuotaManagerProxy { | 87 class MockQuotaManagerProxy : public QuotaManagerProxy { |
88 public: | 88 public: |
89 explicit MockQuotaManagerProxy(QuotaManager* quota_manager) | 89 explicit MockQuotaManagerProxy(QuotaManager* quota_manager) |
90 : QuotaManagerProxy(quota_manager, | 90 : QuotaManagerProxy(quota_manager, |
91 base::MessageLoopProxy::CreateForCurrentThread()) {} | 91 base::MessageLoopProxy::CreateForCurrentThread()), |
| 92 registered_client_(NULL) { |
| 93 } |
| 94 |
| 95 virtual ~MockQuotaManagerProxy() { |
| 96 EXPECT_FALSE(registered_client_); |
| 97 } |
| 98 |
| 99 virtual void RegisterClient(QuotaClient* client) { |
| 100 EXPECT_FALSE(registered_client_); |
| 101 registered_client_ = client; |
| 102 } |
| 103 |
| 104 void SimulateQuotaManagerDestroyed() { |
| 105 if (registered_client_) { |
| 106 // We cannot call this in the destructor as the client (indirectly) |
| 107 // holds a refptr of the proxy. |
| 108 registered_client_->OnQuotaManagerDestroyed(); |
| 109 registered_client_ = NULL; |
| 110 } |
| 111 } |
92 | 112 |
93 // We don't mock them. | 113 // We don't mock them. |
94 virtual void RegisterClient(QuotaClient* client) OVERRIDE {} | |
95 virtual void NotifyOriginInUse(const GURL& origin) OVERRIDE {} | 114 virtual void NotifyOriginInUse(const GURL& origin) OVERRIDE {} |
96 virtual void NotifyOriginNoLongerInUse(const GURL& origin) OVERRIDE {} | 115 virtual void NotifyOriginNoLongerInUse(const GURL& origin) OVERRIDE {} |
97 | 116 |
98 virtual void NotifyStorageAccessed(QuotaClient::ID client_id, | 117 virtual void NotifyStorageAccessed(QuotaClient::ID client_id, |
99 const GURL& origin, | 118 const GURL& origin, |
100 StorageType type) OVERRIDE { | 119 StorageType type) OVERRIDE { |
101 mock_manager()->RecordStorageAccessed(origin, type); | 120 mock_manager()->RecordStorageAccessed(origin, type); |
102 } | 121 } |
103 | 122 |
104 virtual void NotifyStorageModified(QuotaClient::ID client_id, | 123 virtual void NotifyStorageModified(QuotaClient::ID client_id, |
105 const GURL& origin, | 124 const GURL& origin, |
106 StorageType type, | 125 StorageType type, |
107 int64 delta) OVERRIDE { | 126 int64 delta) OVERRIDE { |
108 mock_manager()->UpdateUsage(origin, type, delta); | 127 mock_manager()->UpdateUsage(origin, type, delta); |
109 } | 128 } |
110 | 129 |
111 int storage_accessed_count() const { | 130 int storage_accessed_count() const { |
112 return mock_manager()->accessed_; | 131 return mock_manager()->accessed_; |
113 } | 132 } |
114 | 133 |
115 void SetQuota(const GURL& origin, StorageType type, int64 quota) { | 134 void SetQuota(const GURL& origin, StorageType type, int64 quota) { |
116 mock_manager()->SetQuota(origin, type, quota); | 135 mock_manager()->SetQuota(origin, type, quota); |
117 } | 136 } |
118 | 137 |
119 private: | 138 private: |
120 MockQuotaManager* mock_manager() const { | 139 MockQuotaManager* mock_manager() const { |
121 return static_cast<MockQuotaManager*>(quota_manager()); | 140 return static_cast<MockQuotaManager*>(quota_manager()); |
122 } | 141 } |
| 142 QuotaClient* registered_client_; |
123 }; | 143 }; |
124 | 144 |
125 FilePath ASCIIToFilePath(const std::string& str) { | 145 FilePath ASCIIToFilePath(const std::string& str) { |
126 return FilePath().AppendASCII(str); | 146 return FilePath().AppendASCII(str); |
127 } | 147 } |
128 | 148 |
129 } // namespace (anonymous) | 149 } // namespace (anonymous) |
130 | 150 |
131 // Test class for FileSystemOperation. Note that this just tests low-level | 151 // Test class for FileSystemOperation. Note that this just tests low-level |
132 // operations but doesn't test OpenFileSystem. | 152 // operations but doesn't test OpenFileSystem. |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
280 base_dir, test_helper_.origin(), test_helper_.storage_type()); | 300 base_dir, test_helper_.origin(), test_helper_.storage_type()); |
281 quota_manager_proxy_ = new MockQuotaManagerProxy(quota_manager_.get()); | 301 quota_manager_proxy_ = new MockQuotaManagerProxy(quota_manager_.get()); |
282 test_helper_.SetUp(base_dir, | 302 test_helper_.SetUp(base_dir, |
283 false /* incognito */, | 303 false /* incognito */, |
284 false /* unlimited quota */, | 304 false /* unlimited quota */, |
285 quota_manager_proxy_.get(), | 305 quota_manager_proxy_.get(), |
286 LocalFileSystemFileUtil::GetInstance()); | 306 LocalFileSystemFileUtil::GetInstance()); |
287 } | 307 } |
288 | 308 |
289 void FileSystemOperationTest::TearDown() { | 309 void FileSystemOperationTest::TearDown() { |
| 310 // Let the client go away before dropping a ref of the quota manager proxy. |
| 311 quota_manager_proxy()->SimulateQuotaManagerDestroyed(); |
290 quota_manager_ = NULL; | 312 quota_manager_ = NULL; |
291 quota_manager_proxy_ = NULL; | 313 quota_manager_proxy_ = NULL; |
292 test_helper_.TearDown(); | 314 test_helper_.TearDown(); |
293 } | 315 } |
294 | 316 |
295 FileSystemOperation* FileSystemOperationTest::operation() { | 317 FileSystemOperation* FileSystemOperationTest::operation() { |
296 return test_helper_.NewOperation(new MockDispatcher(this)); | 318 return test_helper_.NewOperation(new MockDispatcher(this)); |
297 } | 319 } |
298 | 320 |
299 TEST_F(FileSystemOperationTest, TestMoveFailureSrcDoesntExist) { | 321 TEST_F(FileSystemOperationTest, TestMoveFailureSrcDoesntExist) { |
(...skipping 624 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
924 | 946 |
925 operation()->Truncate(URLForPath(file_path), 11); | 947 operation()->Truncate(URLForPath(file_path), 11); |
926 MessageLoop::current()->RunAllPending(); | 948 MessageLoop::current()->RunAllPending(); |
927 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, status()); | 949 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, status()); |
928 | 950 |
929 EXPECT_TRUE(file_util::GetFileInfo(PlatformPath(file_path), &info)); | 951 EXPECT_TRUE(file_util::GetFileInfo(PlatformPath(file_path), &info)); |
930 EXPECT_EQ(10, info.size); | 952 EXPECT_EQ(10, info.size); |
931 } | 953 } |
932 | 954 |
933 } // namespace fileapi | 955 } // namespace fileapi |
OLD | NEW |