Commit 04a1b14e authored by edchin's avatar edchin Committed by Commit Bot

[ios] Add ManagedBookmarkServiceFactory

This CL:
1) Ports chrome/browser/bookmarks/managed_bookmark_service_factory.h/cc
to iOS
2) Updates bookmark_client_impl.h/cc with an instance of
ManagedBookmarkService, gotten from the factory.
3) Instantiates the new service where all browser state keyed service
factories are invoked.

Bug: 1065187
Change-Id: I840a3b2496310f0a3f40be20a35e6d71144dcdc8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2142106
Commit-Queue: edchin <edchin@chromium.org>
Reviewed-by: default avatarSylvain Defresne <sdefresne@chromium.org>
Cr-Commit-Position: refs/heads/master@{#758134}
parent 6fb8dcd3
......@@ -10,12 +10,15 @@ source_set("bookmarks") {
"bookmark_model_factory.h",
"bookmark_sync_service_factory.cc",
"bookmark_sync_service_factory.h",
"managed_bookmark_service_factory.h",
"managed_bookmark_service_factory.mm",
"startup_task_runner_service_factory.cc",
"startup_task_runner_service_factory.h",
]
deps = [
"//base",
"//components/bookmarks/browser",
"//components/bookmarks/managed",
"//components/favicon/core",
"//components/favicon_base",
"//components/history/core/browser",
......@@ -28,7 +31,10 @@ source_set("bookmarks") {
"//ios/chrome/browser/browser_state",
"//ios/chrome/browser/favicon",
"//ios/chrome/browser/history",
"//ios/chrome/browser/signin",
"//ios/chrome/browser/undo",
"//ios/public/provider/chrome/browser",
"//ios/public/provider/chrome/browser/signin",
"//ios/web",
]
public_deps = [ ":bookmarks_utils" ]
......@@ -36,6 +42,7 @@ source_set("bookmarks") {
"//ios/chrome/browser/history",
":bookmarks_utils",
]
configs += [ "//build/config/compiler:enable_arc" ]
}
source_set("bookmarks_utils") {
......
......@@ -9,6 +9,7 @@
#include "base/task/cancelable_task_tracker.h"
#include "components/bookmarks/browser/bookmark_node.h"
#include "components/bookmarks/browser/bookmark_storage.h"
#include "components/bookmarks/managed/managed_bookmark_service.h"
#include "components/favicon/core/favicon_util.h"
#include "components/favicon_base/favicon_types.h"
#include "components/history/core/browser/history_service.h"
......@@ -20,13 +21,17 @@
BookmarkClientImpl::BookmarkClientImpl(
ChromeBrowserState* browser_state,
bookmarks::ManagedBookmarkService* managed_bookmark_service,
sync_bookmarks::BookmarkSyncService* bookmark_sync_service)
: browser_state_(browser_state),
managed_bookmark_service_(managed_bookmark_service),
bookmark_sync_service_(bookmark_sync_service) {}
BookmarkClientImpl::~BookmarkClientImpl() {}
void BookmarkClientImpl::Init(bookmarks::BookmarkModel* model) {
if (managed_bookmark_service_)
managed_bookmark_service_->BookmarkModelCreated(model);
model_ = model;
}
......@@ -82,20 +87,28 @@ void BookmarkClientImpl::RecordAction(const base::UserMetricsAction& action) {
bookmarks::LoadManagedNodeCallback
BookmarkClientImpl::GetLoadManagedNodeCallback() {
if (managed_bookmark_service_)
return managed_bookmark_service_->GetLoadManagedNodeCallback();
return bookmarks::LoadManagedNodeCallback();
}
bool BookmarkClientImpl::CanSetPermanentNodeTitle(
const bookmarks::BookmarkNode* permanent_node) {
if (managed_bookmark_service_)
return managed_bookmark_service_->CanSetPermanentNodeTitle(permanent_node);
return true;
}
bool BookmarkClientImpl::CanSyncNode(const bookmarks::BookmarkNode* node) {
if (managed_bookmark_service_)
return managed_bookmark_service_->CanSyncNode(node);
return true;
}
bool BookmarkClientImpl::CanBeEditedByUser(
const bookmarks::BookmarkNode* node) {
if (managed_bookmark_service_)
return managed_bookmark_service_->CanBeEditedByUser(node);
return true;
}
......
......@@ -17,6 +17,7 @@ class GURL;
namespace bookmarks {
class BookmarkModel;
class ManagedBookmarkService;
}
namespace sync_bookmarks {
......@@ -27,6 +28,7 @@ class BookmarkClientImpl : public bookmarks::BookmarkClient {
public:
BookmarkClientImpl(
ChromeBrowserState* browser_state,
bookmarks::ManagedBookmarkService* managed_bookmark_service,
sync_bookmarks::BookmarkSyncService* bookmark_sync_service);
~BookmarkClientImpl() override;
......@@ -56,13 +58,17 @@ class BookmarkClientImpl : public bookmarks::BookmarkClient {
private:
// Pointer to the associated ChromeBrowserState. Must outlive
// BookmarkClientImpl.
ChromeBrowserState* browser_state_;
ChromeBrowserState* browser_state_ = nullptr;
bookmarks::BookmarkModel* model_;
// Pointer to the ManagedBookmarkService responsible for bookmark policy. May
// be null during testing.
bookmarks::ManagedBookmarkService* managed_bookmark_service_ = nullptr;
bookmarks::BookmarkModel* model_ = nullptr;
// Pointer to the BookmarkSyncService responsible for encoding and decoding
// sync metadata persisted together with the bookmarks model.
sync_bookmarks::BookmarkSyncService* bookmark_sync_service_;
sync_bookmarks::BookmarkSyncService* bookmark_sync_service_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(BookmarkClientImpl);
};
......
......@@ -15,6 +15,7 @@
#include "components/undo/bookmark_undo_service.h"
#include "ios/chrome/browser/bookmarks/bookmark_client_impl.h"
#include "ios/chrome/browser/bookmarks/bookmark_sync_service_factory.h"
#import "ios/chrome/browser/bookmarks/managed_bookmark_service_factory.h"
#include "ios/chrome/browser/bookmarks/startup_task_runner_service_factory.h"
#include "ios/chrome/browser/browser_state/browser_state_otr_helper.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
......@@ -50,6 +51,7 @@ BookmarkModelFactory::BookmarkModelFactory()
"BookmarkModel",
BrowserStateDependencyManager::GetInstance()) {
DependsOn(ios::BookmarkUndoServiceFactory::GetInstance());
DependsOn(ManagedBookmarkServiceFactory::GetInstance());
DependsOn(ios::StartupTaskRunnerServiceFactory::GetInstance());
}
......@@ -67,6 +69,7 @@ std::unique_ptr<KeyedService> BookmarkModelFactory::BuildServiceInstanceFor(
std::unique_ptr<bookmarks::BookmarkModel> bookmark_model(
new bookmarks::BookmarkModel(std::make_unique<BookmarkClientImpl>(
browser_state,
ManagedBookmarkServiceFactory::GetForBrowserState(browser_state),
ios::BookmarkSyncServiceFactory::GetForBrowserState(browser_state))));
bookmark_model->Load(
browser_state->GetPrefs(), browser_state->GetStatePath(),
......
// Copyright 2020 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 IOS_CHROME_BROWSER_BOOKMARKS_MANAGED_BOOKMARK_SERVICE_FACTORY_H_
#define IOS_CHROME_BROWSER_BOOKMARKS_MANAGED_BOOKMARK_SERVICE_FACTORY_H_
#include "base/macros.h"
#include "base/no_destructor.h"
#include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
class ChromeBrowserState;
namespace bookmarks {
class ManagedBookmarkService;
}
// Singleton that owns all ManagedBookmarkService and associates them with
// ChromeBrowserState.
class ManagedBookmarkServiceFactory : public BrowserStateKeyedServiceFactory {
public:
static bookmarks::ManagedBookmarkService* GetForBrowserState(
ChromeBrowserState* browser_state);
static ManagedBookmarkServiceFactory* GetInstance();
private:
friend class base::NoDestructor<ManagedBookmarkServiceFactory>;
ManagedBookmarkServiceFactory();
~ManagedBookmarkServiceFactory() override;
// BrowserStateKeyedServiceFactory implementation.
std::unique_ptr<KeyedService> BuildServiceInstanceFor(
web::BrowserState* context) const override;
bool ServiceIsNULLWhileTesting() const override;
DISALLOW_COPY_AND_ASSIGN(ManagedBookmarkServiceFactory);
};
#endif // IOS_CHROME_BROWSER_BOOKMARKS_MANAGED_BOOKMARK_SERVICE_FACTORY_H_
// Copyright 2020 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.
#import "ios/chrome/browser/bookmarks/managed_bookmark_service_factory.h"
#include "base/strings/sys_string_conversions.h"
#include "components/bookmarks/managed/managed_bookmark_service.h"
#include "components/keyed_service/ios/browser_state_dependency_manager.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
#include "ios/chrome/browser/signin/authentication_service.h"
#include "ios/chrome/browser/signin/authentication_service_factory.h"
#import "ios/public/provider/chrome/browser/chrome_browser_provider.h"
#import "ios/public/provider/chrome/browser/signin/chrome_identity.h"
#include "ios/public/provider/chrome/browser/signin/chrome_identity_service.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace {
std::string GetManagedBookmarksDomain(ChromeBrowserState* browser_state) {
AuthenticationService* auth_service =
AuthenticationServiceFactory::GetForBrowserState(browser_state);
if (!auth_service)
return std::string();
ChromeIdentity* identity = auth_service->GetAuthenticatedIdentity();
if (!identity)
return std::string();
ios::ChromeIdentityService* identity_service =
ios::GetChromeBrowserProvider()->GetChromeIdentityService();
if (!identity_service)
return std::string();
return base::SysNSStringToUTF8(
identity_service->GetCachedHostedDomainForIdentity(identity));
}
} // namespace
// static
bookmarks::ManagedBookmarkService*
ManagedBookmarkServiceFactory::GetForBrowserState(
ChromeBrowserState* browser_state) {
return static_cast<bookmarks::ManagedBookmarkService*>(
GetInstance()->GetServiceForBrowserState(browser_state, true));
}
// static
ManagedBookmarkServiceFactory* ManagedBookmarkServiceFactory::GetInstance() {
static base::NoDestructor<ManagedBookmarkServiceFactory> instance;
return instance.get();
}
ManagedBookmarkServiceFactory::ManagedBookmarkServiceFactory()
: BrowserStateKeyedServiceFactory(
"ManagedBookmarkService",
BrowserStateDependencyManager::GetInstance()) {}
ManagedBookmarkServiceFactory::~ManagedBookmarkServiceFactory() {}
std::unique_ptr<KeyedService>
ManagedBookmarkServiceFactory::BuildServiceInstanceFor(
web::BrowserState* context) const {
ChromeBrowserState* browser_state =
ChromeBrowserState::FromBrowserState(context);
// base::Unretained is safe because ManagedBookmarkService will
// be destroyed before the browser_state it is attached to.
return std::make_unique<bookmarks::ManagedBookmarkService>(
browser_state->GetPrefs(),
base::BindRepeating(&GetManagedBookmarksDomain,
base::Unretained(browser_state)));
}
bool ManagedBookmarkServiceFactory::ServiceIsNULLWhileTesting() const {
return true;
}
......@@ -10,6 +10,7 @@
#include "ios/chrome/browser/autocomplete/shortcuts_backend_factory.h"
#include "ios/chrome/browser/autofill/personal_data_manager_factory.h"
#include "ios/chrome/browser/bookmarks/bookmark_model_factory.h"
#import "ios/chrome/browser/bookmarks/managed_bookmark_service_factory.h"
#include "ios/chrome/browser/bookmarks/startup_task_runner_service_factory.h"
#include "ios/chrome/browser/browsing_data/browsing_data_remover_factory.h"
#include "ios/chrome/browser/content_settings/cookie_settings_factory.h"
......@@ -116,6 +117,7 @@ void EnsureBrowserStateKeyedServiceFactoriesBuilt() {
IOSProfileSessionDurationsServiceFactory::GetInstance();
IOSUserEventServiceFactory::GetInstance();
LanguageModelManagerFactory::GetInstance();
ManagedBookmarkServiceFactory::GetInstance();
ModelTypeStoreServiceFactory::GetInstance();
ProfileSyncServiceFactory::GetInstance();
ReadingListModelFactory::GetInstance();
......
......@@ -71,7 +71,7 @@ std::unique_ptr<KeyedService> BuildBookmarkModel(web::BrowserState* context) {
ChromeBrowserState::FromBrowserState(context);
std::unique_ptr<bookmarks::BookmarkModel> bookmark_model(
new bookmarks::BookmarkModel(std::make_unique<BookmarkClientImpl>(
browser_state,
browser_state, nullptr,
ios::BookmarkSyncServiceFactory::GetForBrowserState(browser_state))));
bookmark_model->Load(
browser_state->GetPrefs(), browser_state->GetStatePath(),
......
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