blob: 34ee4f4ffbed41abafff1ee43d5d288f600ef0ad [file] [log] [blame]
// Copyright 2014 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_BOOKMARKS_TEST_TEST_BOOKMARK_CLIENT_H_
#define COMPONENTS_BOOKMARKS_TEST_TEST_BOOKMARK_CLIENT_H_
#include <stdint.h>
#include <list>
#include <map>
#include <memory>
#include "base/functional/callback.h"
#include "base/functional/callback_helpers.h"
#include "base/memory/raw_ptr.h"
#include "components/bookmarks/browser/bookmark_client.h"
namespace gfx {
class Image;
} // namespace gfx
namespace bookmarks {
class BookmarkModel;
class TestBookmarkClient : public BookmarkClient {
public:
TestBookmarkClient();
TestBookmarkClient(const TestBookmarkClient&) = delete;
TestBookmarkClient& operator=(const TestBookmarkClient&) = delete;
~TestBookmarkClient() override;
// Returns a new BookmarkModel using a TestBookmarkClient.
static std::unique_ptr<BookmarkModel> CreateModel();
// Returns a new BookmarkModel using `client`.
static std::unique_ptr<BookmarkModel> CreateModelWithClient(
std::unique_ptr<TestBookmarkClient> client);
// Causes the the next call to CreateModel() or GetLoadManagedNodeCallback()
// to return a node representing managed bookmarks. The raw pointer of this
// node is returned for convenience.
BookmarkPermanentNode* EnableManagedNode();
// Returns true if `node` is the `managed_node_`.
bool IsManagedNodeRoot(const BookmarkNode* node);
// Mimics the completion of a previously-triggered GetFaviconImageForPageURL()
// call for `page_url`, usually invoked by BookmarkModel. Returns false if no
// such a call is pending completion. The completion returns a favicon with
// URL `icon_url` and a single-color 16x16 image using `color`.
bool SimulateFaviconLoaded(const GURL& page_url,
const GURL& icon_url,
const gfx::Image& color);
// Mimics the completion of a previously-triggered GetFaviconImageForPageURL()
// call for `page_url`, usually invoked by BookmarkModel. Returns false if no
// such a call is pending completion. The completion returns an empty image
// for the favicon.
bool SimulateEmptyFaviconLoaded(const GURL& page_url);
// Returns true if there is at least one active favicon loading task.
bool HasFaviconLoadTasks() const;
// Sets the value returned by
// `IsSyncFeatureEnabledIncludingBookmarks()`.
void SetIsSyncFeatureEnabledIncludingBookmarks(bool value);
// Returns sync metadata for account bookmarks, received via
// DecodeAccountBookmarkSyncMetadata() or modified via
// SetAccountBookmarkSyncMetadataAndScheduleWrite().
const std::string& account_bookmark_sync_metadata() const {
return account_bookmark_sync_metadata_;
}
void SetAccountBookmarkSyncMetadataAndScheduleWrite(
const std::string& account_bookmark_sync_metadata);
// Allows overriding the value returned by
// `DecodeAccountBookmarkSyncMetadataResult()`.
void SetDecodeAccountBookmarkSyncMetadataResult(
DecodeAccountBookmarkSyncMetadataResult result);
// BookmarkClient:
LoadManagedNodeCallback GetLoadManagedNodeCallback() override;
bool IsSyncFeatureEnabledIncludingBookmarks() override;
bool CanSetPermanentNodeTitle(const BookmarkNode* permanent_node) override;
bool IsNodeManaged(const BookmarkNode* node) override;
std::string EncodeLocalOrSyncableBookmarkSyncMetadata() override;
std::string EncodeAccountBookmarkSyncMetadata() override;
void DecodeLocalOrSyncableBookmarkSyncMetadata(
const std::string& metadata_str,
const base::RepeatingClosure& schedule_save_closure) override;
DecodeAccountBookmarkSyncMetadataResult DecodeAccountBookmarkSyncMetadata(
const std::string& metadata_str,
const base::RepeatingClosure& schedule_save_closure) override;
base::CancelableTaskTracker::TaskId GetFaviconImageForPageURL(
const GURL& page_url,
favicon_base::FaviconImageCallback callback,
base::CancelableTaskTracker* tracker) override;
void OnBookmarkNodeRemovedUndoable(
const BookmarkNode* parent,
size_t index,
std::unique_ptr<BookmarkNode> node) override;
private:
// Helpers for GetLoadManagedNodeCallback().
static std::unique_ptr<BookmarkPermanentNode> LoadManagedNode(
std::unique_ptr<BookmarkPermanentNode> managed_node,
int64_t* next_id);
// managed_node_ exists only until GetLoadManagedNodeCallback gets called, but
// unowned_managed_node_ stays around after that.
std::unique_ptr<BookmarkPermanentNode> managed_node_;
raw_ptr<BookmarkPermanentNode, DanglingUntriaged> unowned_managed_node_ =
nullptr;
base::CancelableTaskTracker::TaskId next_task_id_ = 1;
std::map<GURL, std::list<favicon_base::FaviconImageCallback>>
requests_per_page_url_;
bool is_sync_feature_enabled_including_bookmarks_for_uma = false;
std::string account_bookmark_sync_metadata_;
base::RepeatingClosure account_bookmark_sync_metadata_save_closure_ =
base::DoNothing();
DecodeAccountBookmarkSyncMetadataResult
decode_account_bookmark_sync_metadata_result_ =
DecodeAccountBookmarkSyncMetadataResult::kSuccess;
};
} // namespace bookmarks
#endif // COMPONENTS_BOOKMARKS_TEST_TEST_BOOKMARK_CLIENT_H_