Commit b9bac4b5 authored by mtomasz's avatar mtomasz Committed by Commit bot

[fsp] Extract ObservedEntry and ObservedEntries to a separate file.

Before they were part of the interface, which should be clean and simple.
Moreover, this CL lets pass the list of changes via ProvidedFileSystemObserver
which will be required soon in the Service class.

TEST=unit_tests, browser_tests: *FileSystemProvider*
BUG=248427

Review URL: https://codereview.chromium.org/663713002

Cr-Commit-Position: refs/heads/master@{#300071}
parent e30f8c16
......@@ -347,8 +347,7 @@ RequestManager* FakeProvidedFileSystem::GetRequestManager() {
return NULL;
}
ProvidedFileSystemInterface::ObservedEntries*
FakeProvidedFileSystem::GetObservedEntries() {
ObservedEntries* FakeProvidedFileSystem::GetObservedEntries() {
NOTREACHED();
return NULL;
}
......
......@@ -14,6 +14,7 @@
#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/observed_entry.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"
......
// Copyright 2014 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.
#include "chrome/browser/chromeos/file_system_provider/observed_entry.h"
namespace chromeos {
namespace file_system_provider {
ObservedEntry::ObservedEntry() : recursive(false) {
}
ObservedEntry::~ObservedEntry() {
}
} // namespace file_system_provider
} // namespace chromeos
// Copyright 2014 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_OBSERVED_ENTRY_H_
#define CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_OBSERVED_ENTRY_H_
#include <map>
#include <string>
#include "base/files/file_path.h"
namespace chromeos {
namespace file_system_provider {
struct ObservedEntry;
// List of observed entries.
typedef std::map<base::FilePath, ObservedEntry> ObservedEntries;
// Represents an observed entry on a file system.
struct ObservedEntry {
ObservedEntry();
~ObservedEntry();
base::FilePath entry_path;
bool recursive;
std::string last_tag;
};
} // namespace file_system_provider
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_OBSERVED_ENTRY_H_
......@@ -407,9 +407,10 @@ void ProvidedFileSystem::UnobserveEntry(
// by the C++ layer, not by the extension.
observed_entries_.erase(it);
FOR_EACH_OBSERVER(ProvidedFileSystemObserver,
observers_,
OnObservedEntryListChanged(file_system_info_));
FOR_EACH_OBSERVER(
ProvidedFileSystemObserver,
observers_,
OnObservedEntryListChanged(file_system_info_, observed_entries_));
// TODO(mtomasz): Consider returning always an OK error code, since for the
// callers it's important that the entry is not watched anymore. The watcher
......@@ -431,7 +432,7 @@ RequestManager* ProvidedFileSystem::GetRequestManager() {
return request_manager_.get();
}
ProvidedFileSystem::ObservedEntries* ProvidedFileSystem::GetObservedEntries() {
ObservedEntries* ProvidedFileSystem::GetObservedEntries() {
return &observed_entries_;
}
......@@ -517,9 +518,10 @@ void ProvidedFileSystem::OnObserveDirectoryCompleted(
observed_entries_[directory_path].entry_path = directory_path;
observed_entries_[directory_path].recursive |= recursive;
FOR_EACH_OBSERVER(ProvidedFileSystemObserver,
observers_,
OnObservedEntryListChanged(file_system_info_));
FOR_EACH_OBSERVER(
ProvidedFileSystemObserver,
observers_,
OnObservedEntryListChanged(file_system_info_, observed_entries_));
callback.Run(result);
}
......@@ -550,7 +552,7 @@ void ProvidedFileSystem::OnNotifyCompleted(
FOR_EACH_OBSERVER(
ProvidedFileSystemObserver,
observers_,
OnObservedEntryTagUpdated(file_system_info_, observed_path));
OnObservedEntryTagUpdated(file_system_info_, observed_path, tag));
// If the observed entry is deleted, then unobserve it.
if (change_type == ProvidedFileSystemObserver::DELETED)
......
......@@ -13,11 +13,5 @@ EntryMetadata::EntryMetadata() : is_directory(false), size(0) {
EntryMetadata::~EntryMetadata() {
}
ProvidedFileSystemInterface::ObservedEntry::ObservedEntry() : recursive(false) {
}
ProvidedFileSystemInterface::ObservedEntry::~ObservedEntry() {
}
} // namespace file_system_provider
} // namespace chromeos
......@@ -15,6 +15,7 @@
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/observer_list.h"
#include "chrome/browser/chromeos/file_system_provider/observed_entry.h"
#include "chrome/browser/chromeos/file_system_provider/provided_file_system_observer.h"
#include "storage/browser/fileapi/async_file_util.h"
......@@ -57,7 +58,6 @@ struct EntryMetadata {
// fails synchronously.
class ProvidedFileSystemInterface {
public:
struct ObservedEntry;
struct ChildChange;
// Mode of opening a file. Used by OpenFile().
......@@ -85,19 +85,6 @@ class ProvidedFileSystemInterface {
// Mask of fields requested from the GetMetadata() call.
typedef int MetadataFieldMask;
// List of observed entries.
typedef std::map<base::FilePath, ObservedEntry> ObservedEntries;
// Represents an observed entry on the file system.
struct ObservedEntry {
ObservedEntry();
~ObservedEntry();
base::FilePath entry_path;
bool recursive;
std::string last_tag;
};
virtual ~ProvidedFileSystemInterface() {}
// Requests unmounting of the file system. The callback is called when the
......
......@@ -10,6 +10,7 @@
#include "base/callback.h"
#include "base/files/file_path.h"
#include "chrome/browser/chromeos/file_system_provider/observed_entry.h"
namespace chromeos {
namespace file_system_provider {
......@@ -29,16 +30,6 @@ class ProvidedFileSystemObserver {
// Lust of child changes.
typedef std::vector<ChildChange> ChildChanges;
// Represents an observed entry on the file system.
struct ObservedEntry {
ObservedEntry();
~ObservedEntry();
base::FilePath entry_path;
bool recursive;
std::string last_tag;
};
// Describes a change in an entry contained in an observed directory.
struct ChildChange {
ChildChange();
......@@ -63,11 +54,13 @@ class ProvidedFileSystemObserver {
// Called when tag value is updated for the observed entry.
virtual void OnObservedEntryTagUpdated(
const ProvidedFileSystemInfo& file_system_info,
const base::FilePath& observed_path) = 0;
const base::FilePath& observed_path,
const std::string& tag) = 0;
// Called when list of observed entries is changed.
virtual void OnObservedEntryListChanged(
const ProvidedFileSystemInfo& file_system_info) = 0;
const ProvidedFileSystemInfo& file_system_info,
const ObservedEntries& observed_entries) = 0;
};
} // namespace file_system_provider
......
......@@ -16,6 +16,7 @@
#include "base/values.h"
#include "chrome/browser/chromeos/file_system_provider/mount_path_util.h"
#include "chrome/browser/chromeos/file_system_provider/notification_manager.h"
#include "chrome/browser/chromeos/file_system_provider/observed_entry.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"
......@@ -134,13 +135,15 @@ class Observer : public ProvidedFileSystemObserver {
virtual void OnObservedEntryTagUpdated(
const ProvidedFileSystemInfo& file_system_info,
const base::FilePath& observed_path) override {
const base::FilePath& observed_path,
const std::string& tag) override {
EXPECT_EQ(kFileSystemId, file_system_info.file_system_id());
++tag_updated_counter_;
}
virtual void OnObservedEntryListChanged(
const ProvidedFileSystemInfo& file_system_info) override {
const ProvidedFileSystemInfo& file_system_info,
const ObservedEntries& observed_entries) override {
EXPECT_EQ(kFileSystemId, file_system_info.file_system_id());
++list_changed_counter_;
}
......@@ -292,7 +295,7 @@ TEST_F(FileSystemProviderProvidedFileSystemTest, ObserveDirectory_NotFound) {
ASSERT_EQ(1u, log.size());
EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, log[0]);
ProvidedFileSystemInterface::ObservedEntries* const observed_entries =
ObservedEntries* const observed_entries =
provided_file_system_->GetObservedEntries();
EXPECT_EQ(0u, observed_entries->size());
......@@ -320,11 +323,10 @@ TEST_F(FileSystemProviderProvidedFileSystemTest, ObserveDirectory) {
EXPECT_EQ(1, observer.list_changed_counter());
EXPECT_EQ(0, observer.tag_updated_counter());
ProvidedFileSystemInterface::ObservedEntries* const observed_entries =
ObservedEntries* const observed_entries =
provided_file_system_->GetObservedEntries();
ASSERT_EQ(1u, observed_entries->size());
const ProvidedFileSystemInterface::ObservedEntry& observed_entry =
observed_entries->begin()->second;
const ObservedEntry& observed_entry = observed_entries->begin()->second;
EXPECT_EQ(kDirectoryPath, observed_entry.entry_path.value());
EXPECT_FALSE(observed_entry.recursive);
EXPECT_EQ("", observed_entry.last_tag);
......@@ -382,11 +384,10 @@ TEST_F(FileSystemProviderProvidedFileSystemTest, ObserveDirectory_Exists) {
EXPECT_EQ(2, observer.list_changed_counter());
EXPECT_EQ(0, observer.tag_updated_counter());
ProvidedFileSystemInterface::ObservedEntries* const observed_entries =
ObservedEntries* const observed_entries =
provided_file_system_->GetObservedEntries();
ASSERT_EQ(1u, observed_entries->size());
const ProvidedFileSystemInterface::ObservedEntry& observed_entry =
observed_entries->begin()->second;
const ObservedEntry& observed_entry = observed_entries->begin()->second;
EXPECT_EQ(kDirectoryPath, observed_entry.entry_path.value());
EXPECT_TRUE(observed_entry.recursive);
EXPECT_EQ("", observed_entry.last_tag);
......@@ -443,7 +444,7 @@ TEST_F(FileSystemProviderProvidedFileSystemTest, UnobserveEntry) {
EXPECT_EQ(1, observer.list_changed_counter());
EXPECT_EQ(0, observer.tag_updated_counter());
ProvidedFileSystemInterface::ObservedEntries* const observed_entries =
ObservedEntries* const observed_entries =
provided_file_system_->GetObservedEntries();
EXPECT_EQ(1u, observed_entries->size());
}
......@@ -461,7 +462,7 @@ TEST_F(FileSystemProviderProvidedFileSystemTest, UnobserveEntry) {
EXPECT_EQ(2, observer.list_changed_counter());
EXPECT_EQ(0, observer.tag_updated_counter());
ProvidedFileSystemInterface::ObservedEntries* const observed_entries =
ObservedEntries* const observed_entries =
provided_file_system_->GetObservedEntries();
EXPECT_EQ(0u, observed_entries->size());
}
......@@ -480,7 +481,7 @@ TEST_F(FileSystemProviderProvidedFileSystemTest, UnobserveEntry) {
EXPECT_EQ(3, observer.list_changed_counter());
EXPECT_EQ(0, observer.tag_updated_counter());
ProvidedFileSystemInterface::ObservedEntries* const observed_entries =
ObservedEntries* const observed_entries =
provided_file_system_->GetObservedEntries();
EXPECT_EQ(1u, observed_entries->size());
}
......@@ -502,7 +503,7 @@ TEST_F(FileSystemProviderProvidedFileSystemTest, UnobserveEntry) {
EXPECT_EQ(4, observer.list_changed_counter());
EXPECT_EQ(0, observer.tag_updated_counter());
ProvidedFileSystemInterface::ObservedEntries* const observed_entries =
ObservedEntries* const observed_entries =
provided_file_system_->GetObservedEntries();
EXPECT_EQ(0u, observed_entries->size());
}
......@@ -528,7 +529,7 @@ TEST_F(FileSystemProviderProvidedFileSystemTest, Notify) {
EXPECT_EQ(1, observer.list_changed_counter());
EXPECT_EQ(0, observer.tag_updated_counter());
ProvidedFileSystemInterface::ObservedEntries* const observed_entries =
ObservedEntries* const observed_entries =
provided_file_system_->GetObservedEntries();
EXPECT_EQ(1u, observed_entries->size());
provided_file_system_->GetObservedEntries();
......@@ -555,7 +556,7 @@ TEST_F(FileSystemProviderProvidedFileSystemTest, Notify) {
// The tag should not be updated in advance, before all observers handle
// the notification.
ProvidedFileSystemInterface::ObservedEntries* const observed_entries =
ObservedEntries* const observed_entries =
provided_file_system_->GetObservedEntries();
EXPECT_EQ(1u, observed_entries->size());
provided_file_system_->GetObservedEntries();
......@@ -595,7 +596,7 @@ TEST_F(FileSystemProviderProvidedFileSystemTest, Notify) {
// Confirm, that the entry is not observed anymore.
{
ProvidedFileSystemInterface::ObservedEntries* const observed_entries =
ObservedEntries* const observed_entries =
provided_file_system_->GetObservedEntries();
EXPECT_EQ(0u, observed_entries->size());
EXPECT_EQ(2, observer.list_changed_counter());
......
......@@ -337,13 +337,15 @@ void Service::OnObservedEntryChanged(
void Service::OnObservedEntryTagUpdated(
const ProvidedFileSystemInfo& file_system_info,
const base::FilePath& observed_path) {
const base::FilePath& observed_path,
const std::string& tag) {
// TODO(mtomasz): Store tags of observed entries in preferences, or better
// in leveldb.
}
void Service::OnObservedEntryListChanged(
const ProvidedFileSystemInfo& file_system_info) {
const ProvidedFileSystemInfo& file_system_info,
const ObservedEntries& observed_entries) {
// TODO(mtomasz): Store observed entries in preferences or leveldb.
}
......
......@@ -138,9 +138,11 @@ class Service : public KeyedService,
const base::Closure& callback) override;
virtual void OnObservedEntryTagUpdated(
const ProvidedFileSystemInfo& file_system_info,
const base::FilePath& observed_path) override;
const base::FilePath& observed_path,
const std::string& tag) override;
virtual void OnObservedEntryListChanged(
const ProvidedFileSystemInfo& file_system_info) override;
const ProvidedFileSystemInfo& file_system_info,
const ObservedEntries& observed_entries) override;
private:
// Key is a pair of an extension id and file system id, which makes it
......
......@@ -282,6 +282,8 @@
'browser/chromeos/file_system_provider/notification_manager.cc',
'browser/chromeos/file_system_provider/notification_manager.h',
'browser/chromeos/file_system_provider/notification_manager_interface.h',
'browser/chromeos/file_system_provider/observed_entry.cc',
'browser/chromeos/file_system_provider/observed_entry.h',
'browser/chromeos/file_system_provider/observer.h',
'browser/chromeos/file_system_provider/operations/abort.cc',
'browser/chromeos/file_system_provider/operations/abort.h',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment