1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
// 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_data_type_processor.h"
#include "components/sync_bookmarks/bookmark_model_view.h"
namespace syncer {
class DataTypeControllerDelegate;
}
namespace bookmarks {
class BookmarkModel;
}
namespace favicon {
class FaviconService;
}
namespace sync_bookmarks {
class BookmarkDataTypeProcessor;
// This service owns the BookmarkDataTypeProcessor.
class BookmarkSyncService : public KeyedService {
public:
explicit BookmarkSyncService(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 DataTypeControllerDelegate 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::DataTypeControllerDelegate>
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 SetIsTrackingMetadataForTesting();
void SetBookmarksLimitForTesting(size_t limit);
private:
std::unique_ptr<BookmarkModelView> bookmark_model_view_;
// BookmarkDataTypeProcessor handles communications between sync engine and
// BookmarkModel/HistoryService.
BookmarkDataTypeProcessor bookmark_data_type_processor_;
bool is_tracking_metadata_for_testing_ = false;
};
} // namespace sync_bookmarks
#endif // COMPONENTS_SYNC_BOOKMARKS_BOOKMARK_SYNC_SERVICE_H_
|