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

Unified Diff: chrome/browser/chromeos/file_system_provider/throttled_file_system.h

Issue 829553002: [fsp] Add throttling for number of opened files. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased. Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/file_system_provider/throttled_file_system.h
diff --git a/chrome/browser/chromeos/file_system_provider/fake_provided_file_system.h b/chrome/browser/chromeos/file_system_provider/throttled_file_system.h
similarity index 54%
copy from chrome/browser/chromeos/file_system_provider/fake_provided_file_system.h
copy to chrome/browser/chromeos/file_system_provider/throttled_file_system.h
index ccaf2523c949b0dc2c02a7aeca34937cda2925af..2866c9ff666864d6f283b81f6dc6d1d6c6ac7f42 100644
--- a/chrome/browser/chromeos/file_system_provider/fake_provided_file_system.h
+++ b/chrome/browser/chromeos/file_system_provider/throttled_file_system.h
@@ -1,90 +1,55 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
+// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_FAKE_PROVIDED_FILE_SYSTEM_H_
-#define CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_FAKE_PROVIDED_FILE_SYSTEM_H_
+#ifndef CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_THROTTLED_FILE_SYSTEM_H_
+#define CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_THROTTLED_FILE_SYSTEM_H_
-#include <map>
+#include <set>
#include <string>
-#include <vector>
-#include "base/callback.h"
-#include "base/files/file.h"
-#include "base/memory/linked_ptr.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
-#include "base/observer_list.h"
-#include "base/task/cancelable_task_tracker.h"
+#include "chrome/browser/chromeos/file_system_provider/abort_callback.h"
+#include "chrome/browser/chromeos/file_system_provider/provided_file_system.h"
#include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h"
#include "chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h"
#include "chrome/browser/chromeos/file_system_provider/provided_file_system_observer.h"
-#include "chrome/browser/chromeos/file_system_provider/watcher.h"
#include "storage/browser/fileapi/async_file_util.h"
#include "storage/browser/fileapi/watcher_manager.h"
#include "url/gurl.h"
class Profile;
-namespace base {
-class Time;
-} // namespace base
-
namespace net {
class IOBuffer;
} // namespace net
+namespace base {
+class FilePath;
+} // namespace base
+
namespace chromeos {
namespace file_system_provider {
+class Queue;
class RequestManager;
-// Path of a sample fake file, which is added to the fake file system by
-// default.
-extern const base::FilePath::CharType kFakeFilePath[];
-
-// Represents a file or a directory on a fake file system.
-struct FakeEntry {
- FakeEntry();
- FakeEntry(scoped_ptr<EntryMetadata> metadata, const std::string& contents);
- ~FakeEntry();
-
- scoped_ptr<EntryMetadata> metadata;
- std::string contents;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(FakeEntry);
-};
-
-// Fake provided file system implementation. Does not communicate with target
-// extensions. Used for unit tests.
-class FakeProvidedFileSystem : public ProvidedFileSystemInterface {
+// Decorates ProvidedFileSystemInterface with throttling capabilities.
+class ThrottledFileSystem : public ProvidedFileSystemInterface {
public:
- explicit FakeProvidedFileSystem(
- const ProvidedFileSystemInfo& file_system_info);
- virtual ~FakeProvidedFileSystem();
-
- // Adds a fake entry to the fake file system.
- void AddEntry(const base::FilePath& entry_path,
- bool is_directory,
- const std::string& name,
- int64 size,
- base::Time modification_time,
- std::string mime_type,
- std::string contents);
-
- // Fetches a pointer to a fake entry registered in the fake file system. If
- // not found, then returns NULL. The returned pointes is owned by
- // FakeProvidedFileSystem.
- const FakeEntry* GetEntry(const base::FilePath& entry_path) const;
+ explicit ThrottledFileSystem(
+ scoped_ptr<ProvidedFileSystemInterface> file_system);
+ virtual ~ThrottledFileSystem();
// ProvidedFileSystemInterface overrides.
virtual AbortCallback RequestUnmount(
const storage::AsyncFileUtil::StatusCallback& callback) override;
virtual AbortCallback GetMetadata(
const base::FilePath& entry_path,
- ProvidedFileSystemInterface::MetadataFieldMask fields,
- const ProvidedFileSystemInterface::GetMetadataCallback& callback)
- override;
+ MetadataFieldMask fields,
+ const GetMetadataCallback& callback) override;
virtual AbortCallback ReadDirectory(
const base::FilePath& directory_path,
const storage::AsyncFileUtil::ReadDirectoryCallback& callback) override;
@@ -156,44 +121,30 @@ class FakeProvidedFileSystem : public ProvidedFileSystemInterface {
const storage::AsyncFileUtil::StatusCallback& callback) override;
virtual base::WeakPtr<ProvidedFileSystemInterface> GetWeakPtr() override;
- // Factory callback, to be used in Service::SetFileSystemFactory(). The
- // |event_router| argument can be NULL.
- static ProvidedFileSystemInterface* Create(
- Profile* profile,
- const ProvidedFileSystemInfo& file_system_info);
-
private:
- typedef std::map<base::FilePath, linked_ptr<FakeEntry> > Entries;
- typedef std::map<int, base::FilePath> OpenedFilesMap;
-
- // Utility function for posting a task which can be aborted by calling the
- // returned callback.
- AbortCallback PostAbortableTask(const base::Closure& callback);
-
- // Aborts a request. |task_id| refers to a posted callback returning a
- // response for the operation, which will be cancelled, hence not called.
- void Abort(int task_id,
- const storage::AsyncFileUtil::StatusCallback& callback);
-
- // Aborts a request. |task_ids| refers to a vector of posted callbacks
- // returning a response for the operation, which will be cancelled, hence not
- // called.
- void AbortMany(const std::vector<int>& task_ids,
- const storage::AsyncFileUtil::StatusCallback& callback);
-
- ProvidedFileSystemInfo file_system_info_;
- Entries entries_;
- OpenedFilesMap opened_files_;
- int last_file_handle_;
- base::CancelableTaskTracker tracker_;
- ObserverList<ProvidedFileSystemObserver> observers_;
- Watchers watchers_;
-
- base::WeakPtrFactory<FakeProvidedFileSystem> weak_ptr_factory_;
- DISALLOW_COPY_AND_ASSIGN(FakeProvidedFileSystem);
+ // Called when opening a file is completed with either a success or an error.
+ void OnOpenFileCompleted(int queue_token,
+ const OpenFileCallback& callback,
+ int file_handle,
+ base::File::Error result);
+
+ // Called when closing a file is completed with either a success or an error.
+ void OnCloseFileCompleted(
+ int file_handle,
+ const storage::AsyncFileUtil::StatusCallback& callback,
+ base::File::Error result);
+
+ scoped_ptr<ProvidedFileSystemInterface> file_system_;
+ scoped_ptr<Queue> open_queue_;
+
+ // Map from file handles to open queue tokens.
+ std::map<int, int> opened_files_;
+
+ base::WeakPtrFactory<ThrottledFileSystem> weak_ptr_factory_;
+ DISALLOW_COPY_AND_ASSIGN(ThrottledFileSystem);
};
} // namespace file_system_provider
} // namespace chromeos
-#endif // CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_FAKE_PROVIDED_FILE_SYSTEM_H_
+#endif // CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_THROTTLED_FILE_SYSTEM_H_

Powered by Google App Engine
This is Rietveld 408576698