[go: nahoru, domu]

blob: 2a42bb34661b47fc449d1585fe032f3268954e09 [file] [log] [blame]
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_SYNC_BOOKMARKS_BOOKMARK_SYNC_SERVICE_H_
#define COMPONENTS_SYNC_BOOKMARKS_BOOKMARK_SYNC_SERVICE_H_
#include <memory>
#include <string>
#include "base/functional/callback_forward.h"
#include "base/memory/weak_ptr.h"
#include "base/sequence_checker.h"
#include "components/keyed_service/core/keyed_service.h"
#include "components/sync/model/wipe_model_upon_sync_disabled_behavior.h"
#include "components/sync_bookmarks/bookmark_model_type_processor.h"
#include "components/sync_bookmarks/bookmark_model_view.h"
class BookmarkUndoService;
namespace syncer {
class ModelTypeControllerDelegate;
}
namespace bookmarks {
class BookmarkModel;
}
namespace favicon {
class FaviconService;
}
namespace sync_bookmarks {
class BookmarkModelTypeProcessor;
// This service owns the BookmarkModelTypeProcessor.
class BookmarkSyncService : public KeyedService {
public:
// `bookmark_undo_service` must not be null and must outlive this object.
BookmarkSyncService(BookmarkUndoService* bookmark_undo_service,
syncer::WipeModelUponSyncDisabledBehavior
wipe_model_upon_sync_disabled_behavior);
BookmarkSyncService(const BookmarkSyncService&) = delete;
BookmarkSyncService& operator=(const BookmarkSyncService&) = delete;
// KeyedService implemenation.
~BookmarkSyncService() override;
// Analgous to Encode/Decode methods in BookmarkClient.
std::string EncodeBookmarkSyncMetadata();
void DecodeBookmarkSyncMetadata(
const std::string& metadata_str,
const base::RepeatingClosure& schedule_save_closure,
std::unique_ptr<sync_bookmarks::BookmarkModelView> model);
// Returns the ModelTypeControllerDelegate for syncer::BOOKMARKS.
// `favicon_service` is the favicon service used when processing updates in
// the underlying processor. It could have been a separate a setter in
// BookmarkSyncService instead of passing it as a parameter to
// GetBookmarkSyncControllerDelegate(). However, this would incur the risk of
// overlooking setting it. Therefore, it has been added as a parameter to the
// GetBookmarkSyncControllerDelegate() in order to gauarantee it will be set
// before the processor starts receiving updates.
virtual base::WeakPtr<syncer::ModelTypeControllerDelegate>
GetBookmarkSyncControllerDelegate(favicon::FaviconService* favicon_service);
// Returns true if sync metadata is being tracked. This means sync is enabled
// and the initial download of data is completed, which implies that the
// relevant BookmarkModel already reflects remote data. Note however that this
// doesn't mean bookmarks are actively sync-ing at the moment, for example
// sync could be paused due to an auth error.
bool IsTrackingMetadata() const;
// Returns the BookmarkModelView representing the subset of bookmarks that
// this service is dealing with (potentially sync-ing, but not necessarily).
// It returns null until bookmarks are loaded, i.e. until
// DecodeBookmarkSyncMetadata() is invoked. It must not be invoked after
// Shutdown(), i.e. during profile destruction.
sync_bookmarks::BookmarkModelView* bookmark_model_view();
// For integration tests.
void SetBookmarksLimitForTesting(size_t limit);
private:
std::unique_ptr<BookmarkModelView> bookmark_model_view_;
// BookmarkModelTypeProcessor handles communications between sync engine and
// BookmarkModel/HistoryService.
BookmarkModelTypeProcessor bookmark_model_type_processor_;
};
} // namespace sync_bookmarks
#endif // COMPONENTS_SYNC_BOOKMARKS_BOOKMARK_SYNC_SERVICE_H_