Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bookmarks API iOS Encapsulation (Uplift to 1.26.x) #9206

Merged
merged 1 commit into from
Jun 22, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions ios/app/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ source_set("app") {
"//brave/common:pref_names",
"//brave/components/brave_sync:constants",
"//brave/ios/browser",
"//brave/ios/browser/api/bookmarks",
"//brave/ios/browser/api/history",
"//brave/ios/browser/api/sync/driver",
"//components/browser_sync",
Expand All @@ -33,10 +34,12 @@ source_set("app") {
"//ios/chrome/app/startup:startup",
"//ios/chrome/app/startup:startup_basic",
"//ios/chrome/browser",
"//ios/chrome/browser/bookmarks",
"//ios/chrome/browser/browser_state",
"//ios/chrome/browser/history",
"//ios/chrome/browser/providers:provider_factory",
"//ios/chrome/browser/sync",
"//ios/chrome/browser/undo",
"//ios/chrome/common",
"//ios/public/provider/chrome/browser",
"//ios/web/public/init",
Expand Down
3 changes: 3 additions & 0 deletions ios/app/brave_core_main.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

#import <Foundation/Foundation.h>

@class BraveBookmarksAPI;
@class BraveHistoryAPI;
@class BraveSyncProfileServiceIOS;

Expand All @@ -16,6 +17,8 @@ NS_ASSUME_NONNULL_BEGIN
OBJC_EXPORT
@interface BraveCoreMain : NSObject

@property(nullable, nonatomic, readonly) BraveBookmarksAPI* bookmarksAPI;

@property(nullable, nonatomic, readonly) BraveHistoryAPI* historyAPI;

@property(nullable, nonatomic, readonly)
Expand Down
18 changes: 18 additions & 0 deletions ios/app/brave_core_main.mm
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include "base/compiler_specific.h"
#include "base/strings/sys_string_conversions.h"
#include "brave/ios/app/brave_main_delegate.h"
#include "brave/ios/browser/api/bookmarks/brave_bookmarks_api+private.h"
#include "brave/ios/browser/api/history/brave_history_api+private.h"
#include "brave/ios/browser/api/sync/driver/brave_sync_profile_service+private.h"
#include "brave/ios/browser/brave_web_client.h"
Expand All @@ -18,11 +19,13 @@
#include "ios/chrome/app/startup/provider_registration.h"
#include "ios/chrome/app/startup_tasks.h"
#include "ios/chrome/browser/application_context.h"
#include "ios/chrome/browser/bookmarks/bookmark_model_factory.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state_manager.h"
#include "ios/chrome/browser/history/history_service_factory.h"
#include "ios/chrome/browser/history/web_history_service_factory.h"
#include "ios/chrome/browser/sync/profile_sync_service_factory.h"
#include "ios/chrome/browser/undo/bookmark_undo_service_factory.h"
#include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
#include "ios/web/public/init/web_main.h"

Expand All @@ -33,6 +36,7 @@ @interface BraveCoreMain () {
ChromeBrowserState* _mainBrowserState;
}

@property(nonatomic, readwrite) BraveBookmarksAPI* bookmarksAPI;
@property(nonatomic, readwrite) BraveHistoryAPI* historyAPI;
@property(nonatomic, readwrite) BraveSyncProfileServiceIOS* syncProfileService;

Expand Down Expand Up @@ -117,6 +121,20 @@ - (void)setUserAgent:(NSString*)userAgent {
_webClient->SetUserAgent(base::SysNSStringToUTF8(userAgent));
}

- (BraveBookmarksAPI*)bookmarksAPI {
if (!_bookmarksAPI) {
bookmarks::BookmarkModel* bookmark_model_ =
ios::BookmarkModelFactory::GetForBrowserState(_mainBrowserState);
BookmarkUndoService* bookmark_undo_service_ =
ios::BookmarkUndoServiceFactory::GetForBrowserState(_mainBrowserState);

_bookmarksAPI = [[BraveBookmarksAPI alloc]
initWithBookmarkModel:bookmark_model_
bookmarkUndoService:bookmark_undo_service_];
}
return _bookmarksAPI;
}

- (BraveHistoryAPI*)historyAPI {
if (!_historyAPI) {
history::HistoryService* history_service_ =
Expand Down
8 changes: 4 additions & 4 deletions ios/browser/api/bookmarks/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@ source_set("bookmarks") {
configs += [ "//build/config/compiler:enable_arc" ]

sources = [
"bookmark_model_listener_ios.h",
"bookmark_model_listener_ios.mm",
"brave_bookmarks_api+private.h",
"brave_bookmarks_api.h",
"brave_bookmarks_api.mm",
"brave_bookmarks_observer.h",
"brave_bookmarks_observer.mm",
]

deps = [
Expand All @@ -33,7 +35,5 @@ source_set("bookmarks") {
"//url",
]

frameworks = [
"Foundation.framework",
]
frameworks = [ "Foundation.framework" ]
}
64 changes: 64 additions & 0 deletions ios/browser/api/bookmarks/bookmark_model_listener_ios.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
/* Copyright (c) 2020 The Brave Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef BRAVE_IOS_BROWSER_API_BOOKMARKS_BOOKMARK_MODEL_LISTENER_IOS_H_
#define BRAVE_IOS_BROWSER_API_BOOKMARKS_BOOKMARK_MODEL_LISTENER_IOS_H_

#import <Foundation/Foundation.h>

#include <set>

#include "brave/ios/browser/api/bookmarks/brave_bookmarks_observer.h"
#include "components/bookmarks/browser/bookmark_model_observer.h"

@interface BookmarkModelListenerImpl : NSObject <BookmarkModelListener>
- (instancetype)init:(id<BookmarkModelObserver>)observer
bookmarkModel:(void*)bookmarkModel;
@end

namespace brave {
namespace ios {
class BookmarkModelListener : public bookmarks::BookmarkModelObserver {
public:
explicit BookmarkModelListener(id<BookmarkModelObserver> observer,
bookmarks::BookmarkModel* model);
~BookmarkModelListener() override;

private:
// BookmarksModelListener implementation
void BookmarkModelLoaded(bookmarks::BookmarkModel* model,
bool ids_reassigned) override;
void BookmarkModelBeingDeleted(bookmarks::BookmarkModel* model) override;
void BookmarkNodeMoved(bookmarks::BookmarkModel* model,
const bookmarks::BookmarkNode* old_parent,
size_t old_index,
const bookmarks::BookmarkNode* new_parent,
size_t new_index) override;
void BookmarkNodeAdded(bookmarks::BookmarkModel* model,
const bookmarks::BookmarkNode* parent,
size_t index) override;
void BookmarkNodeRemoved(bookmarks::BookmarkModel* model,
const bookmarks::BookmarkNode* parent,
size_t old_index,
const bookmarks::BookmarkNode* node,
const std::set<GURL>& removed_urls) override;
void BookmarkNodeChanged(bookmarks::BookmarkModel* model,
const bookmarks::BookmarkNode* node) override;
void BookmarkNodeFaviconChanged(bookmarks::BookmarkModel* model,
const bookmarks::BookmarkNode* node) override;
void BookmarkNodeChildrenReordered(
bookmarks::BookmarkModel* model,
const bookmarks::BookmarkNode* node) override;
void BookmarkAllUserNodesRemoved(bookmarks::BookmarkModel* model,
const std::set<GURL>& removed_urls) override;

__strong id<BookmarkModelObserver> observer_;
bookmarks::BookmarkModel* model_; // NOT OWNED
};

} // namespace ios
} // namespace brave

#endif // BRAVE_IOS_BROWSER_API_BOOKMARKS_BOOKMARK_MODEL_LISTENER_IOS_H_
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "brave/ios/browser/api/bookmarks/brave_bookmarks_observer.h"
#include "brave/ios/browser/api/bookmarks/bookmark_model_listener_ios.h"

#include <memory>

Expand All @@ -25,42 +25,6 @@ - (instancetype)initWithNode:(const bookmarks::BookmarkNode*)node

namespace brave {
namespace ios {
class BookmarkModelListener : public bookmarks::BookmarkModelObserver {
public:
explicit BookmarkModelListener(id<BookmarkModelObserver> observer,
bookmarks::BookmarkModel* model);
~BookmarkModelListener() override;

private:
void BookmarkModelLoaded(bookmarks::BookmarkModel* model,
bool ids_reassigned) override;
void BookmarkModelBeingDeleted(bookmarks::BookmarkModel* model) override;
void BookmarkNodeMoved(bookmarks::BookmarkModel* model,
const bookmarks::BookmarkNode* old_parent,
size_t old_index,
const bookmarks::BookmarkNode* new_parent,
size_t new_index) override;
void BookmarkNodeAdded(bookmarks::BookmarkModel* model,
const bookmarks::BookmarkNode* parent,
size_t index) override;
void BookmarkNodeRemoved(bookmarks::BookmarkModel* model,
const bookmarks::BookmarkNode* parent,
size_t old_index,
const bookmarks::BookmarkNode* node,
const std::set<GURL>& removed_urls) override;
void BookmarkNodeChanged(bookmarks::BookmarkModel* model,
const bookmarks::BookmarkNode* node) override;
void BookmarkNodeFaviconChanged(bookmarks::BookmarkModel* model,
const bookmarks::BookmarkNode* node) override;
void BookmarkNodeChildrenReordered(
bookmarks::BookmarkModel* model,
const bookmarks::BookmarkNode* node) override;
void BookmarkAllUserNodesRemoved(bookmarks::BookmarkModel* model,
const std::set<GURL>& removed_urls) override;

__strong id<BookmarkModelObserver> observer_;
bookmarks::BookmarkModel* model_; // weak
};

BookmarkModelListener::BookmarkModelListener(id<BookmarkModelObserver> observer,
bookmarks::BookmarkModel* model)
Expand Down Expand Up @@ -102,10 +66,10 @@ void BookmarkAllUserNodesRemoved(bookmarks::BookmarkModel* model,

IOSBookmarkNode* ios_node = [[IOSBookmarkNode alloc] initWithNode:node
model:model];
IOSBookmarkNode* ios_old_parent = [[IOSBookmarkNode alloc] initWithNode:old_parent
model:model];
IOSBookmarkNode* ios_new_parent = [[IOSBookmarkNode alloc] initWithNode:new_parent
model:model];
IOSBookmarkNode* ios_old_parent =
[[IOSBookmarkNode alloc] initWithNode:old_parent model:model];
IOSBookmarkNode* ios_new_parent =
[[IOSBookmarkNode alloc] initWithNode:new_parent model:model];

[observer_ bookmarkNode:ios_node
movedFromParent:ios_old_parent
Expand All @@ -130,7 +94,8 @@ void BookmarkAllUserNodesRemoved(bookmarks::BookmarkModel* model,
size_t old_index,
const bookmarks::BookmarkNode* node,
const std::set<GURL>& removed_urls) {
IOSBookmarkNode* ios_node = [[IOSBookmarkNode alloc] initWithNode:node model:model];
IOSBookmarkNode* ios_node = [[IOSBookmarkNode alloc] initWithNode:node
model:model];
IOSBookmarkNode* ios_parent = [[IOSBookmarkNode alloc] initWithNode:parent
model:model];

Expand Down
27 changes: 27 additions & 0 deletions ios/browser/api/bookmarks/brave_bookmarks_api+private.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/* Copyright (c) 2021 The Brave Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef BRAVE_IOS_BROWSER_API_BOOKMARKS_BRAVE_BOOKMARKS_API_PRIVATE_H_
#define BRAVE_IOS_BROWSER_API_BOOKMARKS_BRAVE_BOOKMARKS_API_PRIVATE_H_

#import <Foundation/Foundation.h>

#include "brave/ios/browser/api/bookmarks/brave_bookmarks_api.h"

NS_ASSUME_NONNULL_BEGIN

namespace bookmarks {
class BookmarkModel;
}
class BookmarkUndoService;

@interface BraveBookmarksAPI (Private)
- (instancetype)initWithBookmarkModel:(bookmarks::BookmarkModel*)bookmarkModel
bookmarkUndoService:(BookmarkUndoService*)bookmarkUndoService;
@end

NS_ASSUME_NONNULL_END

#endif // BRAVE_IOS_BROWSER_API_BOOKMARKS_BRAVE_BOOKMARKS_API_PRIVATE_H_
5 changes: 3 additions & 2 deletions ios/browser/api/bookmarks/brave_bookmarks_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,7 @@ OBJC_EXPORT
NS_SWIFT_NAME(BraveBookmarksAPI)
OBJC_EXPORT
@interface BraveBookmarksAPI : NSObject
@property(class, readonly, getter = sharedBookmarksAPI)
BraveBookmarksAPI* shared;
- (instancetype)init NS_UNAVAILABLE;
@property(nonatomic, nullable, readonly) IOSBookmarkNode* rootNode;
@property(nonatomic, nullable, readonly) IOSBookmarkNode* otherNode;
@property(nonatomic, nullable, readonly) IOSBookmarkNode* mobileNode;
Expand All @@ -116,6 +115,8 @@ OBJC_EXPORT
- (id<BookmarkModelListener>)addObserver:(id<BookmarkModelObserver>)observer;
- (void)removeObserver:(id<BookmarkModelListener>)observer;

- (instancetype)init NS_UNAVAILABLE;

- (nullable IOSBookmarkNode*)createFolderWithTitle:(NSString*)title;
- (nullable IOSBookmarkNode*)createFolderWithParent:(IOSBookmarkNode*)parent
title:(NSString*)title;
Expand Down
30 changes: 9 additions & 21 deletions ios/browser/api/bookmarks/brave_bookmarks_api.mm
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@
#include "base/containers/adapters.h"
#include "base/guid.h"
#include "base/strings/sys_string_conversions.h"
#include "brave/ios/browser/api/bookmarks/brave_bookmarks_observer.h"
#include "base/task/post_task.h"
#include "base/task/thread_pool.h"
#include "brave/ios/browser/api/bookmarks/bookmark_model_listener_ios.h"
#include "components/bookmarks/browser/bookmark_model.h"
#include "components/bookmarks/browser/bookmark_node.h"
#include "components/bookmarks/browser/bookmark_utils.h"
Expand All @@ -19,11 +21,10 @@
#include "components/undo/undo_manager.h"
#include "components/user_prefs/user_prefs.h"
#include "ios/chrome/browser/application_context.h"
#include "ios/chrome/browser/bookmarks/bookmark_model_factory.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state_manager.h"
#include "ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.h"
#include "ios/chrome/browser/undo/bookmark_undo_service_factory.h"
#include "ios/web/public/thread/web_task_traits.h"
#include "ios/web/public/thread/web_thread.h"
#import "net/base/mac/url_conversions.h"
#include "url/gurl.h"
Expand Down Expand Up @@ -462,26 +463,13 @@ @interface BraveBookmarksAPI () {
@end

@implementation BraveBookmarksAPI
+ (instancetype)sharedBookmarksAPI {
static BraveBookmarksAPI* instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[BraveBookmarksAPI alloc] init];
});
return instance;
}

- (instancetype)init {
- (instancetype)initWithBookmarkModel:(bookmarks::BookmarkModel*)bookmarkModel
bookmarkUndoService:
(BookmarkUndoService*)bookmarkUndoService {
if ((self = [super init])) {
DCHECK_CURRENTLY_ON(web::WebThread::UI);
ios::ChromeBrowserStateManager* browserStateManager =
GetApplicationContext()->GetChromeBrowserStateManager();
ChromeBrowserState* browserState =
browserStateManager->GetLastUsedBrowserState();
bookmark_model_ =
ios::BookmarkModelFactory::GetForBrowserState(browserState);
bookmark_undo_service_ =
ios::BookmarkUndoServiceFactory::GetForBrowserState(browserState);
bookmark_model_ = bookmarkModel;
bookmark_undo_service_ = bookmarkUndoService;
}
return self;
}
Expand Down
7 changes: 1 addition & 6 deletions ios/browser/api/bookmarks/brave_bookmarks_observer.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ NS_ASSUME_NONNULL_BEGIN
OBJC_EXPORT
@protocol BookmarkModelObserver <NSObject>
@optional

- (void)bookmarkModelLoaded;
- (void)bookmarkNodeChanged:(IOSBookmarkNode*)bookmarkNode;
- (void)bookmarkNodeChildrenChanged:(IOSBookmarkNode*)bookmarkNode;
Expand All @@ -32,12 +33,6 @@ OBJC_EXPORT
- (void)destroy;
@end

OBJC_EXPORT
@interface BookmarkModelListenerImpl : NSObject <BookmarkModelListener>
- (instancetype)init:(id<BookmarkModelObserver>)observer
bookmarkModel:(void*)bookmarkModel;
@end

NS_ASSUME_NONNULL_END

#endif /* BRAVE_IOS_BROWSER_API_BOOKMARKS_BRAVE_BOOKMARKS_OBSERVER_H_ */