| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/settings/clear_browsing_data_collection_view_cont
roller.h" | 5 #import "ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_cont
roller.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/ios/ios_util.h" | 10 #include "base/ios/ios_util.h" |
| 11 #import "base/ios/weak_nsobject.h" | |
| 12 #include "base/logging.h" | 11 #include "base/logging.h" |
| 13 #import "base/mac/bind_objc_block.h" | 12 #import "base/mac/bind_objc_block.h" |
| 14 #include "base/mac/foundation_util.h" | 13 #include "base/mac/foundation_util.h" |
| 15 #import "base/mac/scoped_nsobject.h" | |
| 16 #include "base/memory/ptr_util.h" | 14 #include "base/memory/ptr_util.h" |
| 17 #include "base/metrics/histogram_macros.h" | 15 #include "base/metrics/histogram_macros.h" |
| 18 #include "base/strings/string_piece.h" | 16 #include "base/strings/string_piece.h" |
| 19 #include "base/strings/sys_string_conversions.h" | 17 #include "base/strings/sys_string_conversions.h" |
| 20 #include "components/browser_sync/profile_sync_service.h" | 18 #include "components/browser_sync/profile_sync_service.h" |
| 21 #include "components/browsing_data/core/browsing_data_utils.h" | 19 #include "components/browsing_data/core/browsing_data_utils.h" |
| 22 #include "components/browsing_data/core/counters/browsing_data_counter.h" | 20 #include "components/browsing_data/core/counters/browsing_data_counter.h" |
| 23 #include "components/browsing_data/core/history_notice_utils.h" | 21 #include "components/browsing_data/core/history_notice_utils.h" |
| 24 #include "components/browsing_data/core/pref_names.h" | 22 #include "components/browsing_data/core/pref_names.h" |
| 25 #include "components/google/core/browser/google_util.h" | 23 #include "components/google/core/browser/google_util.h" |
| (...skipping 28 matching lines...) Expand all Loading... |
| 54 #import "ios/chrome/browser/ui/uikit_ui_util.h" | 52 #import "ios/chrome/browser/ui/uikit_ui_util.h" |
| 55 #include "ios/chrome/common/channel_info.h" | 53 #include "ios/chrome/common/channel_info.h" |
| 56 #include "ios/chrome/grit/ios_chromium_strings.h" | 54 #include "ios/chrome/grit/ios_chromium_strings.h" |
| 57 #include "ios/chrome/grit/ios_strings.h" | 55 #include "ios/chrome/grit/ios_strings.h" |
| 58 #import "ios/public/provider/chrome/browser/chrome_browser_provider.h" | 56 #import "ios/public/provider/chrome/browser/chrome_browser_provider.h" |
| 59 #import "ios/public/provider/chrome/browser/images/branded_image_provider.h" | 57 #import "ios/public/provider/chrome/browser/images/branded_image_provider.h" |
| 60 #import "ios/third_party/material_components_ios/src/components/Palettes/src/Mat
erialPalettes.h" | 58 #import "ios/third_party/material_components_ios/src/components/Palettes/src/Mat
erialPalettes.h" |
| 61 #include "ui/base/l10n/l10n_util_mac.h" | 59 #include "ui/base/l10n/l10n_util_mac.h" |
| 62 #include "url/gurl.h" | 60 #include "url/gurl.h" |
| 63 | 61 |
| 62 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 63 #error "This file requires ARC support." |
| 64 #endif |
| 65 |
| 64 NSString* const kClearBrowsingDataCollectionViewId = | 66 NSString* const kClearBrowsingDataCollectionViewId = |
| 65 @"kClearBrowsingDataCollectionViewId"; | 67 @"kClearBrowsingDataCollectionViewId"; |
| 66 NSString* const kClearBrowsingHistoryCellId = @"kClearBrowsingHistoryCellId"; | 68 NSString* const kClearBrowsingHistoryCellId = @"kClearBrowsingHistoryCellId"; |
| 67 NSString* const kClearCookiesCellId = @"kClearCookiesCellId"; | 69 NSString* const kClearCookiesCellId = @"kClearCookiesCellId"; |
| 68 NSString* const kClearCacheCellId = @"kClearCacheCellId"; | 70 NSString* const kClearCacheCellId = @"kClearCacheCellId"; |
| 69 NSString* const kClearSavedPasswordsCellId = @"kClearSavedPasswordsCellId"; | 71 NSString* const kClearSavedPasswordsCellId = @"kClearSavedPasswordsCellId"; |
| 70 NSString* const kClearAutofillCellId = @"kClearAutofillCellId"; | 72 NSString* const kClearAutofillCellId = @"kClearAutofillCellId"; |
| 71 | 73 |
| 72 namespace { | 74 namespace { |
| 73 | 75 |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 _timePeriod = static_cast<browsing_data::TimePeriod>(prefValue); | 202 _timePeriod = static_cast<browsing_data::TimePeriod>(prefValue); |
| 201 } else { | 203 } else { |
| 202 _timePeriod = browsing_data::TimePeriod::ALL_TIME; | 204 _timePeriod = browsing_data::TimePeriod::ALL_TIME; |
| 203 } | 205 } |
| 204 | 206 |
| 205 self.title = l10n_util::GetNSString(IDS_IOS_CLEAR_BROWSING_DATA_TITLE); | 207 self.title = l10n_util::GetNSString(IDS_IOS_CLEAR_BROWSING_DATA_TITLE); |
| 206 self.collectionViewAccessibilityIdentifier = | 208 self.collectionViewAccessibilityIdentifier = |
| 207 kClearBrowsingDataCollectionViewId; | 209 kClearBrowsingDataCollectionViewId; |
| 208 | 210 |
| 209 if (experimental_flags::IsNewClearBrowsingDataUIEnabled()) { | 211 if (experimental_flags::IsNewClearBrowsingDataUIEnabled()) { |
| 210 base::WeakNSObject<ClearBrowsingDataCollectionViewController> weakSelf( | 212 __weak ClearBrowsingDataCollectionViewController* weakSelf = self; |
| 211 self); | |
| 212 void (^dataClearedCallback)( | 213 void (^dataClearedCallback)( |
| 213 const IOSChromeBrowsingDataRemover::NotificationDetails&) = | 214 const IOSChromeBrowsingDataRemover::NotificationDetails&) = |
| 214 ^(const IOSChromeBrowsingDataRemover::NotificationDetails& details) { | 215 ^(const IOSChromeBrowsingDataRemover::NotificationDetails& details) { |
| 215 base::scoped_nsobject<ClearBrowsingDataCollectionViewController> | 216 ClearBrowsingDataCollectionViewController* strongSelf = weakSelf; |
| 216 strongSelf([weakSelf retain]); | |
| 217 [strongSelf restartCounters:details.removal_mask]; | 217 [strongSelf restartCounters:details.removal_mask]; |
| 218 }; | 218 }; |
| 219 _callbackSubscription = | 219 _callbackSubscription = |
| 220 IOSChromeBrowsingDataRemover::RegisterOnBrowsingDataRemovedCallback( | 220 IOSChromeBrowsingDataRemover::RegisterOnBrowsingDataRemovedCallback( |
| 221 base::BindBlock(dataClearedCallback)); | 221 base::BindBlockArc(dataClearedCallback)); |
| 222 } | 222 } |
| 223 | 223 |
| 224 [self loadModel]; | 224 [self loadModel]; |
| 225 [self restartCounters:IOSChromeBrowsingDataRemover::REMOVE_ALL]; | 225 [self restartCounters:IOSChromeBrowsingDataRemover::REMOVE_ALL]; |
| 226 } | 226 } |
| 227 return self; | 227 return self; |
| 228 } | 228 } |
| 229 | 229 |
| 230 - (void)viewDidLoad { | 230 - (void)viewDidLoad { |
| 231 [super viewDidLoad]; | 231 [super viewDidLoad]; |
| 232 | 232 |
| 233 SigninManager* signinManager = | 233 SigninManager* signinManager = |
| 234 ios::SigninManagerFactory::GetForBrowserState(_browserState); | 234 ios::SigninManagerFactory::GetForBrowserState(_browserState); |
| 235 if (!signinManager->IsAuthenticated()) { | 235 if (!signinManager->IsAuthenticated()) { |
| 236 return; | 236 return; |
| 237 } | 237 } |
| 238 | 238 |
| 239 browser_sync::ProfileSyncService* syncService = | 239 browser_sync::ProfileSyncService* syncService = |
| 240 IOSChromeProfileSyncServiceFactory::GetForBrowserState(_browserState); | 240 IOSChromeProfileSyncServiceFactory::GetForBrowserState(_browserState); |
| 241 history::WebHistoryService* historyService = | 241 history::WebHistoryService* historyService = |
| 242 ios::WebHistoryServiceFactory::GetForBrowserState(_browserState); | 242 ios::WebHistoryServiceFactory::GetForBrowserState(_browserState); |
| 243 | 243 |
| 244 base::WeakNSObject<ClearBrowsingDataCollectionViewController> weakSelf(self); | 244 __weak ClearBrowsingDataCollectionViewController* weakSelf = self; |
| 245 browsing_data::ShouldShowNoticeAboutOtherFormsOfBrowsingHistory( | 245 browsing_data::ShouldShowNoticeAboutOtherFormsOfBrowsingHistory( |
| 246 syncService, historyService, base::BindBlock(^(bool shouldShowNotice) { | 246 syncService, historyService, base::BindBlockArc(^(bool shouldShowNotice) { |
| 247 base::scoped_nsobject<ClearBrowsingDataCollectionViewController> | 247 ClearBrowsingDataCollectionViewController* strongSelf = weakSelf; |
| 248 strongSelf([weakSelf retain]); | |
| 249 [strongSelf setShouldShowNoticeAboutOtherFormsOfBrowsingHistory: | 248 [strongSelf setShouldShowNoticeAboutOtherFormsOfBrowsingHistory: |
| 250 shouldShowNotice]; | 249 shouldShowNotice]; |
| 251 })); | 250 })); |
| 252 | 251 |
| 253 browsing_data::ShouldPopupDialogAboutOtherFormsOfBrowsingHistory( | 252 browsing_data::ShouldPopupDialogAboutOtherFormsOfBrowsingHistory( |
| 254 syncService, historyService, GetChannel(), | 253 syncService, historyService, GetChannel(), |
| 255 base::BindBlock(^(bool shouldShowPopup) { | 254 base::BindBlockArc(^(bool shouldShowPopup) { |
| 256 base::scoped_nsobject<ClearBrowsingDataCollectionViewController> | 255 ClearBrowsingDataCollectionViewController* strongSelf = weakSelf; |
| 257 strongSelf([weakSelf retain]); | |
| 258 [strongSelf setShouldPopupDialogAboutOtherFormsOfBrowsingHistory: | 256 [strongSelf setShouldPopupDialogAboutOtherFormsOfBrowsingHistory: |
| 259 shouldShowPopup]; | 257 shouldShowPopup]; |
| 260 })); | 258 })); |
| 261 } | 259 } |
| 262 | 260 |
| 263 #pragma mark CollectionViewController | 261 #pragma mark CollectionViewController |
| 264 | 262 |
| 265 - (void)loadModel { | 263 - (void)loadModel { |
| 266 [super loadModel]; | 264 [super loadModel]; |
| 267 CollectionViewModel* model = self.collectionViewModel; | 265 CollectionViewModel* model = self.collectionViewModel; |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 321 ClearDataItem* autofillItem = | 319 ClearDataItem* autofillItem = |
| 322 [self clearDataItemWithType:ItemTypeDataTypeAutofill | 320 [self clearDataItemWithType:ItemTypeDataTypeAutofill |
| 323 titleID:IDS_IOS_CLEAR_AUTOFILL | 321 titleID:IDS_IOS_CLEAR_AUTOFILL |
| 324 mask:IOSChromeBrowsingDataRemover::REMOVE_FORM_DATA | 322 mask:IOSChromeBrowsingDataRemover::REMOVE_FORM_DATA |
| 325 prefName:browsing_data::prefs::kDeleteFormData]; | 323 prefName:browsing_data::prefs::kDeleteFormData]; |
| 326 [model addItem:autofillItem | 324 [model addItem:autofillItem |
| 327 toSectionWithIdentifier:SectionIdentifierDataTypes]; | 325 toSectionWithIdentifier:SectionIdentifierDataTypes]; |
| 328 | 326 |
| 329 // Clear Browsing Data button. | 327 // Clear Browsing Data button. |
| 330 [model addSectionWithIdentifier:SectionIdentifierClearBrowsingDataButton]; | 328 [model addSectionWithIdentifier:SectionIdentifierClearBrowsingDataButton]; |
| 331 CollectionViewTextItem* clearButtonItem = [[[CollectionViewTextItem alloc] | 329 CollectionViewTextItem* clearButtonItem = [[CollectionViewTextItem alloc] |
| 332 initWithType:ItemTypeClearBrowsingDataButton] autorelease]; | 330 initWithType:ItemTypeClearBrowsingDataButton]; |
| 333 clearButtonItem.text = l10n_util::GetNSString(IDS_IOS_CLEAR_BUTTON); | 331 clearButtonItem.text = l10n_util::GetNSString(IDS_IOS_CLEAR_BUTTON); |
| 334 clearButtonItem.accessibilityTraits |= UIAccessibilityTraitButton; | 332 clearButtonItem.accessibilityTraits |= UIAccessibilityTraitButton; |
| 335 clearButtonItem.textColor = [[MDCPalette cr_redPalette] tint500]; | 333 clearButtonItem.textColor = [[MDCPalette cr_redPalette] tint500]; |
| 336 [model addItem:clearButtonItem | 334 [model addItem:clearButtonItem |
| 337 toSectionWithIdentifier:SectionIdentifierClearBrowsingDataButton]; | 335 toSectionWithIdentifier:SectionIdentifierClearBrowsingDataButton]; |
| 338 | 336 |
| 339 // Google Account footer. | 337 // Google Account footer. |
| 340 SigninManager* signinManager = | 338 SigninManager* signinManager = |
| 341 ios::SigninManagerFactory::GetForBrowserState(_browserState); | 339 ios::SigninManagerFactory::GetForBrowserState(_browserState); |
| 342 if (signinManager->IsAuthenticated()) { | 340 if (signinManager->IsAuthenticated()) { |
| (...skipping 21 matching lines...) Expand all Loading... |
| 364 } | 362 } |
| 365 } | 363 } |
| 366 | 364 |
| 367 #pragma mark Items | 365 #pragma mark Items |
| 368 | 366 |
| 369 - (ClearDataItem*)clearDataItemWithType:(ItemType)itemType | 367 - (ClearDataItem*)clearDataItemWithType:(ItemType)itemType |
| 370 titleID:(int)titleMessageID | 368 titleID:(int)titleMessageID |
| 371 mask:(int)mask | 369 mask:(int)mask |
| 372 prefName:(const char*)prefName { | 370 prefName:(const char*)prefName { |
| 373 PrefService* prefs = _browserState->GetPrefs(); | 371 PrefService* prefs = _browserState->GetPrefs(); |
| 374 ClearDataItem* clearDataItem = | 372 ClearDataItem* clearDataItem = [[ClearDataItem alloc] initWithType:itemType]; |
| 375 [[[ClearDataItem alloc] initWithType:itemType] autorelease]; | |
| 376 clearDataItem.text = l10n_util::GetNSString(titleMessageID); | 373 clearDataItem.text = l10n_util::GetNSString(titleMessageID); |
| 377 if (prefs->GetBoolean(prefName)) { | 374 if (prefs->GetBoolean(prefName)) { |
| 378 clearDataItem.accessoryType = MDCCollectionViewCellAccessoryCheckmark; | 375 clearDataItem.accessoryType = MDCCollectionViewCellAccessoryCheckmark; |
| 379 } | 376 } |
| 380 clearDataItem.dataTypeMask = mask; | 377 clearDataItem.dataTypeMask = mask; |
| 381 clearDataItem.prefName = prefName; | 378 clearDataItem.prefName = prefName; |
| 382 clearDataItem.accessibilityIdentifier = | 379 clearDataItem.accessibilityIdentifier = |
| 383 [self getAccessibilityIdentifierFromItemType:itemType]; | 380 [self getAccessibilityIdentifierFromItemType:itemType]; |
| 384 | 381 |
| 385 base::WeakNSObject<ClearBrowsingDataCollectionViewController> weakSelf(self); | 382 __weak ClearBrowsingDataCollectionViewController* weakSelf = self; |
| 386 void (^updateUICallback)(const browsing_data::BrowsingDataCounter::Result&) = | 383 void (^updateUICallback)(const browsing_data::BrowsingDataCounter::Result&) = |
| 387 ^(const browsing_data::BrowsingDataCounter::Result& result) { | 384 ^(const browsing_data::BrowsingDataCounter::Result& result) { |
| 388 base::scoped_nsobject<ClearBrowsingDataCollectionViewController> | 385 ClearBrowsingDataCollectionViewController* strongSelf = weakSelf; |
| 389 strongSelf([weakSelf retain]); | |
| 390 NSString* counterText = [strongSelf getCounterTextFromResult:result]; | 386 NSString* counterText = [strongSelf getCounterTextFromResult:result]; |
| 391 [strongSelf updateCounter:itemType detailText:counterText]; | 387 [strongSelf updateCounter:itemType detailText:counterText]; |
| 392 }; | 388 }; |
| 393 | 389 |
| 394 [clearDataItem setCounter:BrowsingDataCounterWrapper::CreateCounterWrapper( | 390 [clearDataItem setCounter:BrowsingDataCounterWrapper::CreateCounterWrapper( |
| 395 prefName, _browserState, prefs, | 391 prefName, _browserState, prefs, |
| 396 base::BindBlock(updateUICallback))]; | 392 base::BindBlockArc(updateUICallback))]; |
| 397 return clearDataItem; | 393 return clearDataItem; |
| 398 } | 394 } |
| 399 | 395 |
| 400 - (void)updateCounter:(NSInteger)itemType detailText:(NSString*)detailText { | 396 - (void)updateCounter:(NSInteger)itemType detailText:(NSString*)detailText { |
| 401 NSIndexPath* indexPath = [self.collectionViewModel | 397 NSIndexPath* indexPath = [self.collectionViewModel |
| 402 indexPathForItemType:itemType | 398 indexPathForItemType:itemType |
| 403 sectionIdentifier:SectionIdentifierDataTypes]; | 399 sectionIdentifier:SectionIdentifierDataTypes]; |
| 404 | 400 |
| 405 CollectionViewModel* model = self.collectionViewModel; | 401 CollectionViewModel* model = self.collectionViewModel; |
| 406 if (!model) { | 402 if (!model) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 419 [self.collectionView.collectionViewLayout invalidateLayout]; | 415 [self.collectionView.collectionViewLayout invalidateLayout]; |
| 420 } | 416 } |
| 421 | 417 |
| 422 - (CollectionViewItem*)footerForGoogleAccountSectionItem { | 418 - (CollectionViewItem*)footerForGoogleAccountSectionItem { |
| 423 return _shouldShowNoticeAboutOtherFormsOfBrowsingHistory | 419 return _shouldShowNoticeAboutOtherFormsOfBrowsingHistory |
| 424 ? [self footerGoogleAccountAndMyActivityItem] | 420 ? [self footerGoogleAccountAndMyActivityItem] |
| 425 : [self footerGoogleAccountItem]; | 421 : [self footerGoogleAccountItem]; |
| 426 } | 422 } |
| 427 | 423 |
| 428 - (CollectionViewItem*)footerGoogleAccountItem { | 424 - (CollectionViewItem*)footerGoogleAccountItem { |
| 429 CollectionViewFooterItem* footerItem = [[[CollectionViewFooterItem alloc] | 425 CollectionViewFooterItem* footerItem = [[CollectionViewFooterItem alloc] |
| 430 initWithType:ItemTypeFooterGoogleAccount] autorelease]; | 426 initWithType:ItemTypeFooterGoogleAccount]; |
| 431 footerItem.text = | 427 footerItem.text = |
| 432 l10n_util::GetNSString(IDS_IOS_CLEAR_BROWSING_DATA_FOOTER_ACCOUNT); | 428 l10n_util::GetNSString(IDS_IOS_CLEAR_BROWSING_DATA_FOOTER_ACCOUNT); |
| 433 UIImage* image = ios::GetChromeBrowserProvider() | 429 UIImage* image = ios::GetChromeBrowserProvider() |
| 434 ->GetBrandedImageProvider() | 430 ->GetBrandedImageProvider() |
| 435 ->GetClearBrowsingDataAccountActivityImage(); | 431 ->GetClearBrowsingDataAccountActivityImage(); |
| 436 footerItem.image = image; | 432 footerItem.image = image; |
| 437 return footerItem; | 433 return footerItem; |
| 438 } | 434 } |
| 439 | 435 |
| 440 - (CollectionViewItem*)footerGoogleAccountAndMyActivityItem { | 436 - (CollectionViewItem*)footerGoogleAccountAndMyActivityItem { |
| (...skipping 27 matching lines...) Expand all Loading... |
| 468 IDS_IOS_CLEAR_BROWSING_DATA_FOOTER_CLEAR_SYNC_AND_SAVED_SIT
E_DATA | 464 IDS_IOS_CLEAR_BROWSING_DATA_FOOTER_CLEAR_SYNC_AND_SAVED_SIT
E_DATA |
| 469 URL:kClearBrowsingDataLearnMoreURL | 465 URL:kClearBrowsingDataLearnMoreURL |
| 470 image:image]; | 466 image:image]; |
| 471 } | 467 } |
| 472 | 468 |
| 473 - (CollectionViewItem*)footerItemWithType:(ItemType)itemType | 469 - (CollectionViewItem*)footerItemWithType:(ItemType)itemType |
| 474 titleID:(int)titleMessageID | 470 titleID:(int)titleMessageID |
| 475 URL:(const char[])URL | 471 URL:(const char[])URL |
| 476 image:(UIImage*)image { | 472 image:(UIImage*)image { |
| 477 CollectionViewFooterItem* footerItem = | 473 CollectionViewFooterItem* footerItem = |
| 478 [[[CollectionViewFooterItem alloc] initWithType:itemType] autorelease]; | 474 [[CollectionViewFooterItem alloc] initWithType:itemType]; |
| 479 footerItem.text = l10n_util::GetNSString(titleMessageID); | 475 footerItem.text = l10n_util::GetNSString(titleMessageID); |
| 480 footerItem.linkURL = google_util::AppendGoogleLocaleParam( | 476 footerItem.linkURL = google_util::AppendGoogleLocaleParam( |
| 481 GURL(URL), GetApplicationContext()->GetApplicationLocale()); | 477 GURL(URL), GetApplicationContext()->GetApplicationLocale()); |
| 482 footerItem.linkDelegate = self; | 478 footerItem.linkDelegate = self; |
| 483 footerItem.image = image; | 479 footerItem.image = image; |
| 484 return footerItem; | 480 return footerItem; |
| 485 } | 481 } |
| 486 | 482 |
| 487 - (CollectionViewItem*)timeRangeItem { | 483 - (CollectionViewItem*)timeRangeItem { |
| 488 CollectionViewDetailItem* timeRangeItem = [[[CollectionViewDetailItem alloc] | 484 CollectionViewDetailItem* timeRangeItem = |
| 489 initWithType:ItemTypeTimeRange] autorelease]; | 485 [[CollectionViewDetailItem alloc] initWithType:ItemTypeTimeRange]; |
| 490 timeRangeItem.text = l10n_util::GetNSString( | 486 timeRangeItem.text = l10n_util::GetNSString( |
| 491 IDS_IOS_CLEAR_BROWSING_DATA_TIME_RANGE_SELECTOR_TITLE); | 487 IDS_IOS_CLEAR_BROWSING_DATA_TIME_RANGE_SELECTOR_TITLE); |
| 492 NSString* detailText = [TimeRangeSelectorCollectionViewController | 488 NSString* detailText = [TimeRangeSelectorCollectionViewController |
| 493 timePeriodLabelForPrefs:_browserState->GetPrefs()]; | 489 timePeriodLabelForPrefs:_browserState->GetPrefs()]; |
| 494 DCHECK(detailText); | 490 DCHECK(detailText); |
| 495 timeRangeItem.detailText = detailText; | 491 timeRangeItem.detailText = detailText; |
| 496 timeRangeItem.accessoryType = | 492 timeRangeItem.accessoryType = |
| 497 MDCCollectionViewCellAccessoryDisclosureIndicator; | 493 MDCCollectionViewCellAccessoryDisclosureIndicator; |
| 498 timeRangeItem.accessibilityTraits |= UIAccessibilityTraitButton; | 494 timeRangeItem.accessibilityTraits |= UIAccessibilityTraitButton; |
| 499 return timeRangeItem; | 495 return timeRangeItem; |
| 500 } | 496 } |
| 501 | 497 |
| 502 #pragma mark UICollectionViewDelegate | 498 #pragma mark UICollectionViewDelegate |
| 503 | 499 |
| 504 - (void)collectionView:(UICollectionView*)collectionView | 500 - (void)collectionView:(UICollectionView*)collectionView |
| 505 didSelectItemAtIndexPath:(NSIndexPath*)indexPath { | 501 didSelectItemAtIndexPath:(NSIndexPath*)indexPath { |
| 506 [super collectionView:collectionView didSelectItemAtIndexPath:indexPath]; | 502 [super collectionView:collectionView didSelectItemAtIndexPath:indexPath]; |
| 507 NSInteger itemType = | 503 NSInteger itemType = |
| 508 [self.collectionViewModel itemTypeForIndexPath:indexPath]; | 504 [self.collectionViewModel itemTypeForIndexPath:indexPath]; |
| 509 | 505 |
| 510 switch (itemType) { | 506 switch (itemType) { |
| 511 case ItemTypeTimeRange: { | 507 case ItemTypeTimeRange: { |
| 512 base::scoped_nsobject<UIViewController> controller( | 508 UIViewController* controller = |
| 513 [[TimeRangeSelectorCollectionViewController alloc] | 509 [[TimeRangeSelectorCollectionViewController alloc] |
| 514 initWithPrefs:_browserState->GetPrefs() | 510 initWithPrefs:_browserState->GetPrefs() |
| 515 delegate:self]); | 511 delegate:self]; |
| 516 [self.navigationController pushViewController:controller animated:YES]; | 512 [self.navigationController pushViewController:controller animated:YES]; |
| 517 break; | 513 break; |
| 518 } | 514 } |
| 519 case ItemTypeDataTypeBrowsingHistory: | 515 case ItemTypeDataTypeBrowsingHistory: |
| 520 case ItemTypeDataTypeCookiesSiteData: | 516 case ItemTypeDataTypeCookiesSiteData: |
| 521 case ItemTypeDataTypeCache: | 517 case ItemTypeDataTypeCache: |
| 522 case ItemTypeDataTypeSavedPasswords: | 518 case ItemTypeDataTypeSavedPasswords: |
| 523 case ItemTypeDataTypeAutofill: { | 519 case ItemTypeDataTypeAutofill: { |
| 524 // Toggle the checkmark. | 520 // Toggle the checkmark. |
| 525 // TODO(crbug.com/631486): Custom checkmark animation to be implemented. | 521 // TODO(crbug.com/631486): Custom checkmark animation to be implemented. |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 605 for (ClearDataItem* dataTypeItem in dataTypeItems) { | 601 for (ClearDataItem* dataTypeItem in dataTypeItems) { |
| 606 DCHECK([dataTypeItem isKindOfClass:[ClearDataItem class]]); | 602 DCHECK([dataTypeItem isKindOfClass:[ClearDataItem class]]); |
| 607 if (dataTypeItem.accessoryType == MDCCollectionViewCellAccessoryCheckmark) { | 603 if (dataTypeItem.accessoryType == MDCCollectionViewCellAccessoryCheckmark) { |
| 608 dataTypeMaskToRemove |= dataTypeItem.dataTypeMask; | 604 dataTypeMaskToRemove |= dataTypeItem.dataTypeMask; |
| 609 } | 605 } |
| 610 } | 606 } |
| 611 if (dataTypeMaskToRemove == 0) { | 607 if (dataTypeMaskToRemove == 0) { |
| 612 // Nothing to clear (no data types selected). | 608 // Nothing to clear (no data types selected). |
| 613 return YES; | 609 return YES; |
| 614 } | 610 } |
| 615 base::WeakNSObject<ClearBrowsingDataCollectionViewController> weakSelf(self); | 611 __weak ClearBrowsingDataCollectionViewController* weakSelf = self; |
| 616 UIAlertController* alertController = [UIAlertController | 612 UIAlertController* alertController = [UIAlertController |
| 617 alertControllerWithTitle:nil | 613 alertControllerWithTitle:nil |
| 618 message:nil | 614 message:nil |
| 619 preferredStyle:UIAlertControllerStyleActionSheet]; | 615 preferredStyle:UIAlertControllerStyleActionSheet]; |
| 620 | 616 |
| 621 UIAlertAction* clearDataAction = [UIAlertAction | 617 UIAlertAction* clearDataAction = [UIAlertAction |
| 622 actionWithTitle:l10n_util::GetNSString(IDS_IOS_CLEAR_BUTTON) | 618 actionWithTitle:l10n_util::GetNSString(IDS_IOS_CLEAR_BUTTON) |
| 623 style:UIAlertActionStyleDestructive | 619 style:UIAlertActionStyleDestructive |
| 624 handler:^(UIAlertAction* action) { | 620 handler:^(UIAlertAction* action) { |
| 625 [weakSelf clearDataForDataTypes:dataTypeMaskToRemove]; | 621 [weakSelf clearDataForDataTypes:dataTypeMaskToRemove]; |
| 626 }]; | 622 }]; |
| 627 clearDataAction.accessibilityLabel = | 623 clearDataAction.accessibilityLabel = |
| 628 l10n_util::GetNSString(IDS_IOS_CONFIRM_CLEAR_BUTTON); | 624 l10n_util::GetNSString(IDS_IOS_CONFIRM_CLEAR_BUTTON); |
| 629 UIAlertAction* cancelAction = | 625 UIAlertAction* cancelAction = |
| 630 [UIAlertAction actionWithTitle:l10n_util::GetNSString(IDS_CANCEL) | 626 [UIAlertAction actionWithTitle:l10n_util::GetNSString(IDS_CANCEL) |
| 631 style:UIAlertActionStyleCancel | 627 style:UIAlertActionStyleCancel |
| 632 handler:nil]; | 628 handler:nil]; |
| 633 [alertController addAction:clearDataAction]; | 629 [alertController addAction:clearDataAction]; |
| 634 [alertController addAction:cancelAction]; | 630 [alertController addAction:cancelAction]; |
| 635 [self presentViewController:alertController animated:YES completion:nil]; | 631 [self presentViewController:alertController animated:YES completion:nil]; |
| 636 return YES; | 632 return YES; |
| 637 } | 633 } |
| 638 | 634 |
| 639 - (void)clearDataForDataTypes:(int)dataTypeMask { | 635 - (void)clearDataForDataTypes:(int)dataTypeMask { |
| 640 DCHECK(dataTypeMask); | 636 DCHECK(dataTypeMask); |
| 641 base::scoped_nsobject<ClearBrowsingDataCommand> command( | 637 ClearBrowsingDataCommand* command = |
| 642 [[ClearBrowsingDataCommand alloc] initWithBrowserState:_browserState | 638 [[ClearBrowsingDataCommand alloc] initWithBrowserState:_browserState |
| 643 mask:dataTypeMask | 639 mask:dataTypeMask |
| 644 timePeriod:_timePeriod]); | 640 timePeriod:_timePeriod]; |
| 645 [self chromeExecuteCommand:command]; | 641 [self chromeExecuteCommand:command]; |
| 646 | 642 |
| 647 if (!!(dataTypeMask && IOSChromeBrowsingDataRemover::REMOVE_HISTORY)) { | 643 if (!!(dataTypeMask && IOSChromeBrowsingDataRemover::REMOVE_HISTORY)) { |
| 648 [self showBrowsingHistoryRemovedDialog]; | 644 [self showBrowsingHistoryRemovedDialog]; |
| 649 } | 645 } |
| 650 } | 646 } |
| 651 | 647 |
| 652 - (void)showBrowsingHistoryRemovedDialog { | 648 - (void)showBrowsingHistoryRemovedDialog { |
| 653 PrefService* prefs = _browserState->GetPrefs(); | 649 PrefService* prefs = _browserState->GetPrefs(); |
| 654 int noticeShownTimes = prefs->GetInteger( | 650 int noticeShownTimes = prefs->GetInteger( |
| (...skipping 20 matching lines...) Expand all Loading... |
| 675 NSString* title = | 671 NSString* title = |
| 676 l10n_util::GetNSString(IDS_IOS_CLEAR_BROWSING_DATA_HISTORY_NOTICE_TITLE); | 672 l10n_util::GetNSString(IDS_IOS_CLEAR_BROWSING_DATA_HISTORY_NOTICE_TITLE); |
| 677 NSString* message = l10n_util::GetNSString( | 673 NSString* message = l10n_util::GetNSString( |
| 678 IDS_IOS_CLEAR_BROWSING_DATA_HISTORY_NOTICE_DESCRIPTION); | 674 IDS_IOS_CLEAR_BROWSING_DATA_HISTORY_NOTICE_DESCRIPTION); |
| 679 | 675 |
| 680 UIAlertController* alertController = | 676 UIAlertController* alertController = |
| 681 [UIAlertController alertControllerWithTitle:title | 677 [UIAlertController alertControllerWithTitle:title |
| 682 message:message | 678 message:message |
| 683 preferredStyle:UIAlertControllerStyleAlert]; | 679 preferredStyle:UIAlertControllerStyleAlert]; |
| 684 | 680 |
| 685 base::WeakNSObject<ClearBrowsingDataCollectionViewController> weakSelf(self); | 681 __weak ClearBrowsingDataCollectionViewController* weakSelf = self; |
| 686 UIAlertAction* openMyActivityAction = [UIAlertAction | 682 UIAlertAction* openMyActivityAction = [UIAlertAction |
| 687 actionWithTitle: | 683 actionWithTitle: |
| 688 l10n_util::GetNSString( | 684 l10n_util::GetNSString( |
| 689 IDS_IOS_CLEAR_BROWSING_DATA_HISTORY_NOTICE_OPEN_HISTORY_BUTTON) | 685 IDS_IOS_CLEAR_BROWSING_DATA_HISTORY_NOTICE_OPEN_HISTORY_BUTTON) |
| 690 style:UIAlertActionStyleDefault | 686 style:UIAlertActionStyleDefault |
| 691 handler:^(UIAlertAction* action) { | 687 handler:^(UIAlertAction* action) { |
| 692 [weakSelf openMyActivityLink]; | 688 [weakSelf openMyActivityLink]; |
| 693 }]; | 689 }]; |
| 694 | 690 |
| 695 UIAlertAction* okAction = [UIAlertAction | 691 UIAlertAction* okAction = [UIAlertAction |
| 696 actionWithTitle:l10n_util::GetNSString( | 692 actionWithTitle:l10n_util::GetNSString( |
| 697 IDS_IOS_CLEAR_BROWSING_DATA_HISTORY_NOTICE_OK_BUTTON) | 693 IDS_IOS_CLEAR_BROWSING_DATA_HISTORY_NOTICE_OK_BUTTON) |
| 698 style:UIAlertActionStyleCancel | 694 style:UIAlertActionStyleCancel |
| 699 handler:nil]; | 695 handler:nil]; |
| 700 [alertController addAction:openMyActivityAction]; | 696 [alertController addAction:openMyActivityAction]; |
| 701 [alertController addAction:okAction]; | 697 [alertController addAction:okAction]; |
| 702 [self presentViewController:alertController animated:YES completion:nil]; | 698 [self presentViewController:alertController animated:YES completion:nil]; |
| 703 } | 699 } |
| 704 | 700 |
| 705 - (void)openMyActivityLink { | 701 - (void)openMyActivityLink { |
| 706 base::scoped_nsobject<OpenUrlCommand> openMyActivityCommand( | 702 OpenUrlCommand* openMyActivityCommand = |
| 707 [[OpenUrlCommand alloc] initWithURLFromChrome:GURL(kGoogleMyAccountURL)]); | 703 [[OpenUrlCommand alloc] initWithURLFromChrome:GURL(kGoogleMyAccountURL)]; |
| 708 openMyActivityCommand.get().tag = IDC_CLOSE_SETTINGS_AND_OPEN_URL; | 704 openMyActivityCommand.tag = IDC_CLOSE_SETTINGS_AND_OPEN_URL; |
| 709 [self chromeExecuteCommand:openMyActivityCommand]; | 705 [self chromeExecuteCommand:openMyActivityCommand]; |
| 710 } | 706 } |
| 711 | 707 |
| 712 - (NSString*)getAccessibilityIdentifierFromItemType:(NSInteger)itemType { | 708 - (NSString*)getAccessibilityIdentifierFromItemType:(NSInteger)itemType { |
| 713 switch (itemType) { | 709 switch (itemType) { |
| 714 case ItemTypeDataTypeBrowsingHistory: | 710 case ItemTypeDataTypeBrowsingHistory: |
| 715 return kClearBrowsingHistoryCellId; | 711 return kClearBrowsingHistoryCellId; |
| 716 case ItemTypeDataTypeCookiesSiteData: | 712 case ItemTypeDataTypeCookiesSiteData: |
| 717 return kClearCookiesCellId; | 713 return kClearCookiesCellId; |
| 718 case ItemTypeDataTypeCache: | 714 case ItemTypeDataTypeCache: |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 777 &result) | 773 &result) |
| 778 ->Value(); | 774 ->Value(); |
| 779 | 775 |
| 780 // Three cases: Nonzero result for the entire cache, nonzero result for | 776 // Three cases: Nonzero result for the entire cache, nonzero result for |
| 781 // a subset of cache (i.e. a finite time interval), and almost zero (less | 777 // a subset of cache (i.e. a finite time interval), and almost zero (less |
| 782 // than 1 MB). There is no exact information that the cache is empty so that | 778 // than 1 MB). There is no exact information that the cache is empty so that |
| 783 // falls into the almost zero case, which is displayed as less than 1 MB. | 779 // falls into the almost zero case, which is displayed as less than 1 MB. |
| 784 // Because of this, the lowest unit that can be used is MB. | 780 // Because of this, the lowest unit that can be used is MB. |
| 785 static const int kBytesInAMegabyte = 1 << 20; | 781 static const int kBytesInAMegabyte = 1 << 20; |
| 786 if (cacheSizeBytes >= kBytesInAMegabyte) { | 782 if (cacheSizeBytes >= kBytesInAMegabyte) { |
| 787 base::scoped_nsobject<NSByteCountFormatter> formatter( | 783 NSByteCountFormatter* formatter = [[NSByteCountFormatter alloc] init]; |
| 788 [[NSByteCountFormatter alloc] init]); | 784 formatter.allowedUnits = NSByteCountFormatterUseAll & |
| 789 formatter.get().allowedUnits = NSByteCountFormatterUseAll & | 785 (~NSByteCountFormatterUseBytes) & |
| 790 (~NSByteCountFormatterUseBytes) & | 786 (~NSByteCountFormatterUseKB); |
| 791 (~NSByteCountFormatterUseKB); | 787 formatter.countStyle = NSByteCountFormatterCountStyleMemory; |
| 792 formatter.get().countStyle = NSByteCountFormatterCountStyleMemory; | |
| 793 NSString* formattedSize = [formatter stringFromByteCount:cacheSizeBytes]; | 788 NSString* formattedSize = [formatter stringFromByteCount:cacheSizeBytes]; |
| 794 return (_timePeriod == browsing_data::TimePeriod::ALL_TIME) | 789 return (_timePeriod == browsing_data::TimePeriod::ALL_TIME) |
| 795 ? formattedSize | 790 ? formattedSize |
| 796 : l10n_util::GetNSStringF( | 791 : l10n_util::GetNSStringF( |
| 797 IDS_DEL_CACHE_COUNTER_UPPER_ESTIMATE, | 792 IDS_DEL_CACHE_COUNTER_UPPER_ESTIMATE, |
| 798 base::SysNSStringToUTF16(formattedSize)); | 793 base::SysNSStringToUTF16(formattedSize)); |
| 799 } | 794 } |
| 800 return l10n_util::GetNSString(IDS_DEL_CACHE_COUNTER_ALMOST_EMPTY); | 795 return l10n_util::GetNSString(IDS_DEL_CACHE_COUNTER_ALMOST_EMPTY); |
| 801 } | 796 } |
| 802 return base::SysUTF16ToNSString( | 797 return base::SysUTF16ToNSString( |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 879 | 874 |
| 880 #pragma mark TimeRangeSelectorCollectionViewControllerDelegate | 875 #pragma mark TimeRangeSelectorCollectionViewControllerDelegate |
| 881 | 876 |
| 882 - (void)timeRangeSelectorViewController: | 877 - (void)timeRangeSelectorViewController: |
| 883 (TimeRangeSelectorCollectionViewController*)collectionViewController | 878 (TimeRangeSelectorCollectionViewController*)collectionViewController |
| 884 didSelectTimePeriod:(browsing_data::TimePeriod)timePeriod { | 879 didSelectTimePeriod:(browsing_data::TimePeriod)timePeriod { |
| 885 _timePeriod = timePeriod; | 880 _timePeriod = timePeriod; |
| 886 } | 881 } |
| 887 | 882 |
| 888 @end | 883 @end |
| OLD | NEW |