Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(262)

Side by Side Diff: ios/chrome/browser/ui/bookmarks/bookmark_interaction_controller.mm

Issue 2746473003: [ObjC ARC] Converts ios/chrome/browser/ui/bookmarks:bookmarks to ARC. (Closed)
Patch Set: annotate weaks Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "ios/chrome/browser/ui/bookmarks/bookmark_interaction_controller.h" 5 #import "ios/chrome/browser/ui/bookmarks/bookmark_interaction_controller.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #import "base/ios/weak_nsobject.h"
10 #include "base/logging.h" 9 #include "base/logging.h"
11 #include "base/mac/bind_objc_block.h" 10 #include "base/mac/bind_objc_block.h"
12 #include "base/mac/objc_property_releaser.h"
13 #include "base/mac/scoped_nsobject.h"
14 #include "base/metrics/user_metrics.h" 11 #include "base/metrics/user_metrics.h"
15 #include "base/metrics/user_metrics_action.h" 12 #include "base/metrics/user_metrics_action.h"
16 #include "base/strings/sys_string_conversions.h" 13 #include "base/strings/sys_string_conversions.h"
17 #include "base/strings/utf_string_conversions.h" 14 #include "base/strings/utf_string_conversions.h"
18 #include "base/time/time.h" 15 #include "base/time/time.h"
19 #include "components/bookmarks/browser/bookmark_model.h" 16 #include "components/bookmarks/browser/bookmark_model.h"
20 #include "components/bookmarks/browser/bookmark_utils.h" 17 #include "components/bookmarks/browser/bookmark_utils.h"
21 #include "components/pref_registry/pref_registry_syncable.h" 18 #include "components/pref_registry/pref_registry_syncable.h"
22 #include "components/prefs/pref_service.h" 19 #include "components/prefs/pref_service.h"
23 #include "ios/chrome/browser/bookmarks/bookmark_model_factory.h" 20 #include "ios/chrome/browser/bookmarks/bookmark_model_factory.h"
24 #include "ios/chrome/browser/browser_state/chrome_browser_state.h" 21 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
25 #import "ios/chrome/browser/metrics/new_tab_page_uma.h" 22 #import "ios/chrome/browser/metrics/new_tab_page_uma.h"
26 #include "ios/chrome/browser/pref_names.h" 23 #include "ios/chrome/browser/pref_names.h"
27 #import "ios/chrome/browser/tabs/tab.h" 24 #import "ios/chrome/browser/tabs/tab.h"
28 #import "ios/chrome/browser/ui/bookmarks/bookmark_controller_factory.h" 25 #import "ios/chrome/browser/ui/bookmarks/bookmark_controller_factory.h"
29 #import "ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.h" 26 #import "ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.h"
30 #import "ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.h" 27 #import "ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.h"
31 #import "ios/chrome/browser/ui/bookmarks/bookmark_navigation_controller.h" 28 #import "ios/chrome/browser/ui/bookmarks/bookmark_navigation_controller.h"
32 #import "ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.h" 29 #import "ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.h"
33 #include "ios/chrome/browser/ui/uikit_ui_util.h" 30 #include "ios/chrome/browser/ui/uikit_ui_util.h"
34 #include "ios/chrome/browser/ui/url_loader.h" 31 #include "ios/chrome/browser/ui/url_loader.h"
35 #include "ios/chrome/grit/ios_strings.h" 32 #include "ios/chrome/grit/ios_strings.h"
36 #import "ios/third_party/material_components_ios/src/components/Snackbar/src/Mat erialSnackbar.h" 33 #import "ios/third_party/material_components_ios/src/components/Snackbar/src/Mat erialSnackbar.h"
37 #include "ios/web/public/referrer.h" 34 #include "ios/web/public/referrer.h"
38 #include "ui/base/l10n/l10n_util.h" 35 #include "ui/base/l10n/l10n_util.h"
39 36
37 #if !defined(__has_feature) || !__has_feature(objc_arc)
38 #error "This file requires ARC support."
39 #endif
40
40 using bookmarks::BookmarkModel; 41 using bookmarks::BookmarkModel;
41 using bookmarks::BookmarkNode; 42 using bookmarks::BookmarkNode;
42 43
43 namespace { 44 namespace {
44 const int64_t kLastUsedFolderNone = -1; 45 const int64_t kLastUsedFolderNone = -1;
45 } // namespace 46 } // namespace
46 47
47 @interface BookmarkInteractionController ()< 48 @interface BookmarkInteractionController ()<
48 BookmarkEditViewControllerDelegate, 49 BookmarkEditViewControllerDelegate,
49 BookmarkHomeViewControllerDelegate> { 50 BookmarkHomeViewControllerDelegate> {
50 // The browser state of the current user. 51 // The browser state of the current user.
51 ios::ChromeBrowserState* _currentBrowserState; // weak 52 ios::ChromeBrowserState* _currentBrowserState; // weak
52 53
53 // The browser state to use, might be different from _currentBrowserState if 54 // The browser state to use, might be different from _currentBrowserState if
54 // it is incognito. 55 // it is incognito.
55 ios::ChromeBrowserState* _browserState; // weak 56 ios::ChromeBrowserState* _browserState; // weak
56 57
57 // The designated url loader. 58 // The designated url loader.
58 base::WeakNSProtocol<id<UrlLoader>> _loader; 59 __weak id<UrlLoader> _loader;
59 60
60 // The parent controller on top of which the UI needs to be presented. 61 // The parent controller on top of which the UI needs to be presented.
61 base::WeakNSObject<UIViewController> _parentController; 62 __weak UIViewController* _parentController;
62
63 base::mac::ObjCPropertyReleaser
64 _propertyReleaser_BookmarkInteractionController;
65 } 63 }
66 64
67 // The bookmark model in use. 65 // The bookmark model in use.
68 @property(nonatomic, assign) BookmarkModel* bookmarkModel; 66 @property(nonatomic, assign) BookmarkModel* bookmarkModel;
69 67
70 // A reference to the potentially presented bookmark browser. 68 // A reference to the potentially presented bookmark browser.
71 @property(nonatomic, retain) BookmarkHomeViewController* bookmarkBrowser; 69 @property(nonatomic, strong) BookmarkHomeViewController* bookmarkBrowser;
72 70
73 // A reference to the potentially presented single bookmark editor. 71 // A reference to the potentially presented single bookmark editor.
74 @property(nonatomic, retain) BookmarkEditViewController* bookmarkEditor; 72 @property(nonatomic, strong) BookmarkEditViewController* bookmarkEditor;
75 73
76 // The user wants to bookmark the current tab. 74 // The user wants to bookmark the current tab.
77 - (void)addBookmarkForTab:(Tab*)tab; 75 - (void)addBookmarkForTab:(Tab*)tab;
78 76
79 // Builds a controller and brings it on screen. 77 // Builds a controller and brings it on screen.
80 - (void)presentBookmarkForTab:(Tab*)tab; 78 - (void)presentBookmarkForTab:(Tab*)tab;
81 79
82 // Dismisses the bookmark browser. 80 // Dismisses the bookmark browser.
83 - (void)dismissBookmarkBrowserAnimated:(BOOL)animated; 81 - (void)dismissBookmarkBrowserAnimated:(BOOL)animated;
84 82
85 // Dismisses the bookmark editor. 83 // Dismisses the bookmark editor.
86 - (void)dismissBookmarkEditorAnimated:(BOOL)animated; 84 - (void)dismissBookmarkEditorAnimated:(BOOL)animated;
87 85
88 @end 86 @end
89 87
90 @implementation BookmarkInteractionController 88 @implementation BookmarkInteractionController
91
92 @synthesize bookmarkBrowser = _bookmarkBrowser; 89 @synthesize bookmarkBrowser = _bookmarkBrowser;
93 @synthesize bookmarkEditor = _bookmarkEditor; 90 @synthesize bookmarkEditor = _bookmarkEditor;
94 @synthesize bookmarkModel = _bookmarkModel; 91 @synthesize bookmarkModel = _bookmarkModel;
95 92
96 + (void)registerBrowserStatePrefs:(user_prefs::PrefRegistrySyncable*)registry { 93 + (void)registerBrowserStatePrefs:(user_prefs::PrefRegistrySyncable*)registry {
97 registry->RegisterInt64Pref(prefs::kIosBookmarkFolderDefault, 94 registry->RegisterInt64Pref(prefs::kIosBookmarkFolderDefault,
98 kLastUsedFolderNone); 95 kLastUsedFolderNone);
99 } 96 }
100 97
101 + (const BookmarkNode*)folderForNewBookmarksInBrowserState: 98 + (const BookmarkNode*)folderForNewBookmarksInBrowserState:
(...skipping 20 matching lines...) Expand all
122 DCHECK(folder && folder->is_folder()); 119 DCHECK(folder && folder->is_folder());
123 browserState->GetPrefs()->SetInt64(prefs::kIosBookmarkFolderDefault, 120 browserState->GetPrefs()->SetInt64(prefs::kIosBookmarkFolderDefault,
124 folder->id()); 121 folder->id());
125 } 122 }
126 123
127 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState 124 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState
128 loader:(id<UrlLoader>)loader 125 loader:(id<UrlLoader>)loader
129 parentController:(UIViewController*)parentController { 126 parentController:(UIViewController*)parentController {
130 self = [super init]; 127 self = [super init];
131 if (self) { 128 if (self) {
132 _propertyReleaser_BookmarkInteractionController.Init(
133 self, [BookmarkInteractionController class]);
134 // Bookmarks are always opened with the main browser state, even in 129 // Bookmarks are always opened with the main browser state, even in
135 // incognito mode. 130 // incognito mode.
136 _currentBrowserState = browserState; 131 _currentBrowserState = browserState;
137 _browserState = browserState->GetOriginalChromeBrowserState(); 132 _browserState = browserState->GetOriginalChromeBrowserState();
138 _loader.reset(loader); 133 _loader = loader;
139 _parentController.reset(parentController); 134 _parentController = parentController;
140 _bookmarkModel = 135 _bookmarkModel =
141 ios::BookmarkModelFactory::GetForBrowserState(_browserState); 136 ios::BookmarkModelFactory::GetForBrowserState(_browserState);
142 DCHECK(_bookmarkModel); 137 DCHECK(_bookmarkModel);
143 DCHECK(_parentController); 138 DCHECK(_parentController);
144 } 139 }
145 return self; 140 return self;
146 } 141 }
147 142
148 - (void)dealloc { 143 - (void)dealloc {
149 _bookmarkBrowser.delegate = nil; 144 _bookmarkBrowser.delegate = nil;
150 _bookmarkEditor.delegate = nil; 145 _bookmarkEditor.delegate = nil;
151 [super dealloc];
152 } 146 }
153 147
154 - (void)addBookmarkForTab:(Tab*)tab { 148 - (void)addBookmarkForTab:(Tab*)tab {
155 base::RecordAction(base::UserMetricsAction("BookmarkAdded")); 149 base::RecordAction(base::UserMetricsAction("BookmarkAdded"));
156 const BookmarkNode* defaultFolder = 150 const BookmarkNode* defaultFolder =
157 [[self class] folderForNewBookmarksInBrowserState:_browserState]; 151 [[self class] folderForNewBookmarksInBrowserState:_browserState];
158 self.bookmarkModel->AddURL(defaultFolder, defaultFolder->child_count(), 152 self.bookmarkModel->AddURL(defaultFolder, defaultFolder->child_count(),
159 base::SysNSStringToUTF16(tab.title), tab.url); 153 base::SysNSStringToUTF16(tab.title), tab.url);
160 154
161 MDCSnackbarMessageAction* action = 155 MDCSnackbarMessageAction* action = [[MDCSnackbarMessageAction alloc] init];
162 [[[MDCSnackbarMessageAction alloc] init] autorelease]; 156 __weak BookmarkInteractionController* weakSelf = self;
163 base::WeakNSObject<BookmarkInteractionController> weakSelf(self); 157 __weak Tab* weakTab = tab;
164 base::WeakNSObject<Tab> weakTab(tab);
165 action.handler = ^{ 158 action.handler = ^{
166 base::scoped_nsobject<BookmarkInteractionController> strongSelf( 159 BookmarkInteractionController* strongSelf = weakSelf;
167 [weakSelf retain]);
168 if (!strongSelf || !weakTab) 160 if (!strongSelf || !weakTab)
169 return; 161 return;
170 [strongSelf presentBookmarkForTab:weakTab]; 162 [strongSelf presentBookmarkForTab:weakTab];
171 }; 163 };
172 action.title = l10n_util::GetNSString(IDS_IOS_NAVIGATION_BAR_EDIT_BUTTON); 164 action.title = l10n_util::GetNSString(IDS_IOS_NAVIGATION_BAR_EDIT_BUTTON);
173 action.accessibilityIdentifier = @"Edit"; 165 action.accessibilityIdentifier = @"Edit";
174 166
175 NSString* folderTitle = 167 NSString* folderTitle =
176 bookmark_utils_ios::TitleForBookmarkNode(defaultFolder); 168 bookmark_utils_ios::TitleForBookmarkNode(defaultFolder);
177 NSString* text = 169 NSString* text =
(...skipping 13 matching lines...) Expand all
191 DCHECK(!self.bookmarkBrowser && !self.bookmarkEditor); 183 DCHECK(!self.bookmarkBrowser && !self.bookmarkEditor);
192 DCHECK(tab); 184 DCHECK(tab);
193 185
194 const BookmarkNode* bookmark = 186 const BookmarkNode* bookmark =
195 self.bookmarkModel->GetMostRecentlyAddedUserNodeForURL(tab.url); 187 self.bookmarkModel->GetMostRecentlyAddedUserNodeForURL(tab.url);
196 if (!bookmark) 188 if (!bookmark)
197 return; 189 return;
198 190
199 [self dismissSnackbar]; 191 [self dismissSnackbar];
200 192
201 base::scoped_nsobject<BookmarkEditViewController> bookmarkEditor( 193 BookmarkEditViewController* bookmarkEditor =
202 [[BookmarkEditViewController alloc] initWithBookmark:bookmark 194 [[BookmarkEditViewController alloc] initWithBookmark:bookmark
203 browserState:_browserState]); 195 browserState:_browserState];
204 self.bookmarkEditor = bookmarkEditor; 196 self.bookmarkEditor = bookmarkEditor;
205 self.bookmarkEditor.delegate = self; 197 self.bookmarkEditor.delegate = self;
206 base::scoped_nsobject<UINavigationController> navController( 198 UINavigationController* navController = [[BookmarkNavigationController alloc]
207 [[BookmarkNavigationController alloc] 199 initWithRootViewController:self.bookmarkEditor];
208 initWithRootViewController:self.bookmarkEditor]); 200 navController.modalPresentationStyle = UIModalPresentationFormSheet;
209 navController.get().modalPresentationStyle = UIModalPresentationFormSheet;
210 [_parentController presentViewController:navController 201 [_parentController presentViewController:navController
211 animated:YES 202 animated:YES
212 completion:nil]; 203 completion:nil];
213 } 204 }
214 205
215 - (void)presentBookmarkForTab:(Tab*)tab 206 - (void)presentBookmarkForTab:(Tab*)tab
216 currentlyBookmarked:(BOOL)bookmarked 207 currentlyBookmarked:(BOOL)bookmarked
217 inView:(UIView*)parentView 208 inView:(UIView*)parentView
218 originRect:(CGRect)origin { 209 originRect:(CGRect)origin {
219 if (!self.bookmarkModel->loaded()) 210 if (!self.bookmarkModel->loaded())
220 return; 211 return;
221 if (!tab) 212 if (!tab)
222 return; 213 return;
223 214
224 if (bookmarked) 215 if (bookmarked)
225 [self presentBookmarkForTab:tab]; 216 [self presentBookmarkForTab:tab];
226 else 217 else
227 [self addBookmarkForTab:tab]; 218 [self addBookmarkForTab:tab];
228 } 219 }
229 220
230 - (void)presentBookmarks { 221 - (void)presentBookmarks {
231 DCHECK(!self.bookmarkBrowser && !self.bookmarkEditor); 222 DCHECK(!self.bookmarkBrowser && !self.bookmarkEditor);
232 base::scoped_nsobject<BookmarkControllerFactory> bookmarkControllerFactory( 223 BookmarkControllerFactory* bookmarkControllerFactory =
233 [[BookmarkControllerFactory alloc] init]); 224 [[BookmarkControllerFactory alloc] init];
234 self.bookmarkBrowser = [bookmarkControllerFactory 225 self.bookmarkBrowser = [bookmarkControllerFactory
235 bookmarkControllerWithBrowserState:_currentBrowserState 226 bookmarkControllerWithBrowserState:_currentBrowserState
236 loader:_loader]; 227 loader:_loader];
237 self.bookmarkBrowser.delegate = self; 228 self.bookmarkBrowser.delegate = self;
238 self.bookmarkBrowser.modalPresentationStyle = UIModalPresentationFormSheet; 229 self.bookmarkBrowser.modalPresentationStyle = UIModalPresentationFormSheet;
239 [_parentController presentViewController:self.bookmarkBrowser 230 [_parentController presentViewController:self.bookmarkBrowser
240 animated:YES 231 animated:YES
241 completion:nil]; 232 completion:nil];
242 } 233 }
243 234
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 } else { 297 } else {
307 [_loader loadURL:url 298 [_loader loadURL:url
308 referrer:web::Referrer() 299 referrer:web::Referrer()
309 transition:ui::PAGE_TRANSITION_AUTO_BOOKMARK 300 transition:ui::PAGE_TRANSITION_AUTO_BOOKMARK
310 rendererInitiated:NO]; 301 rendererInitiated:NO];
311 } 302 }
312 } 303 }
313 } 304 }
314 305
315 @end 306 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698