Index: chrome/browser/ui/cocoa/clear_browsing_data_controller.mm |
diff --git a/chrome/browser/ui/cocoa/clear_browsing_data_controller.mm b/chrome/browser/ui/cocoa/clear_browsing_data_controller.mm |
deleted file mode 100644 |
index ae57e265b6e72d7fd5f076b7bf7ab9811f895f46..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/cocoa/clear_browsing_data_controller.mm |
+++ /dev/null |
@@ -1,266 +0,0 @@ |
-// Copyright (c) 2011 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 "chrome/browser/ui/cocoa/clear_browsing_data_controller.h" |
- |
-#include "base/lazy_instance.h" |
-#include "base/mac/mac_util.h" |
-#include "base/scoped_nsobject.h" |
-#include "chrome/browser/browsing_data_remover.h" |
-#include "chrome/browser/prefs/pref_service.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "chrome/browser/ui/browser.h" |
-#include "chrome/browser/ui/browser_window.h" |
-#include "chrome/common/pref_names.h" |
-#include "grit/locale_settings.h" |
-#import "third_party/GTM/AppKit/GTMUILocalizerAndLayoutTweaker.h" |
-#include "ui/base/l10n/l10n_util.h" |
- |
-NSString* const kClearBrowsingDataControllerDidDelete = |
- @"kClearBrowsingDataControllerDidDelete"; |
-NSString* const kClearBrowsingDataControllerRemoveMask = |
- @"kClearBrowsingDataControllerRemoveMask"; |
- |
-@interface ClearBrowsingDataController(Private) |
-- (void)initFromPrefs; |
-- (void)persistToPrefs; |
-- (void)dataRemoverDidFinish; |
-@end |
- |
-class ClearBrowsingObserver : public BrowsingDataRemover::Observer { |
- public: |
- ClearBrowsingObserver(ClearBrowsingDataController* controller) |
- : controller_(controller) { } |
- void OnBrowsingDataRemoverDone() { [controller_ dataRemoverDidFinish]; } |
- private: |
- ClearBrowsingDataController* controller_; |
-}; |
- |
-namespace { |
- |
-typedef std::map<Profile*, ClearBrowsingDataController*> ProfileControllerMap; |
- |
-static base::LazyInstance<ProfileControllerMap> g_profile_controller_map( |
- base::LINKER_INITIALIZED); |
- |
-} // namespace |
- |
-@implementation ClearBrowsingDataController |
- |
-@synthesize clearBrowsingHistory = clearBrowsingHistory_; |
-@synthesize clearDownloadHistory = clearDownloadHistory_; |
-@synthesize emptyCache = emptyCache_; |
-@synthesize deleteCookies = deleteCookies_; |
-@synthesize clearSavedPasswords = clearSavedPasswords_; |
-@synthesize clearFormData = clearFormData_; |
-@synthesize timePeriod = timePeriod_; |
-@synthesize isClearing = isClearing_; |
- |
-+ (void)showClearBrowsingDialogForProfile:(Profile*)profile { |
- ClearBrowsingDataController* controller = |
- [ClearBrowsingDataController controllerForProfile:profile]; |
- if (![controller isWindowLoaded]) { |
- // This function needs to return instead of blocking, to match the windows |
- // api call. It caused problems when launching the dialog from the |
- // WebUI history page. See bug and code review for more details. |
- // http://crbug.com/37976 |
- [controller performSelector:@selector(runModalDialog) |
- withObject:nil |
- afterDelay:0]; |
- } |
-} |
- |
-+ (ClearBrowsingDataController *)controllerForProfile:(Profile*)profile { |
- // Get the original profile in case we get here from an incognito window |
- // |GetOriginalProfile()| will return the same profile if it is the original |
- // profile. |
- profile = profile->GetOriginalProfile(); |
- |
- ProfileControllerMap* map = g_profile_controller_map.Pointer(); |
- DCHECK(map != NULL); |
- ProfileControllerMap::iterator it = map->find(profile); |
- if (it == map->end()) { |
- // Since we don't currently support multiple profiles, this class |
- // has not been tested against this case. |
- if (!map->empty()) |
- return nil; |
- |
- ClearBrowsingDataController* controller = |
- [[self alloc] initWithProfile:profile]; |
- it = map->insert(std::make_pair(profile, controller)).first; |
- } |
- return it->second; |
-} |
- |
-- (id)initWithProfile:(Profile*)profile { |
- DCHECK(profile); |
- // Use initWithWindowNibPath:: instead of initWithWindowNibName: so we |
- // can override it in a unit test. |
- NSString *nibpath = [base::mac::MainAppBundle() |
- pathForResource:@"ClearBrowsingData" |
- ofType:@"nib"]; |
- if ((self = [super initWithWindowNibPath:nibpath owner:self])) { |
- profile_ = profile; |
- observer_.reset(new ClearBrowsingObserver(self)); |
- [self initFromPrefs]; |
- } |
- return self; |
-} |
- |
-- (void)dealloc { |
- if (remover_) { |
- // We were destroyed while clearing history was in progress. This can only |
- // occur during automated tests (normally the user can't close the dialog |
- // while clearing is in progress as the dialog is modal and not closeable). |
- remover_->RemoveObserver(observer_.get()); |
- } |
- |
- [super dealloc]; |
-} |
- |
-// Run application modal. |
-- (void)runModalDialog { |
- // Check again to make sure there is only one window. Since we use |
- // |performSelector:afterDelay:| it is possible for this to somehow be |
- // triggered twice. |
- DCHECK([NSThread isMainThread]); |
- if (![self isWindowLoaded]) { |
- // The Window size in the nib is a min size, loop over the views collecting |
- // the max they grew by, that is how much the window needs to be widened by. |
- CGFloat maxWidthGrowth = 0.0; |
- NSWindow* window = [self window]; |
- NSView* contentView = [window contentView]; |
- Class widthBasedTweakerClass = [GTMWidthBasedTweaker class]; |
- for (id subView in [contentView subviews]) { |
- if ([subView isKindOfClass:widthBasedTweakerClass]) { |
- GTMWidthBasedTweaker* tweaker = subView; |
- CGFloat delta = [tweaker changedWidth]; |
- maxWidthGrowth = std::max(maxWidthGrowth, delta); |
- } |
- } |
- if (maxWidthGrowth > 0.0) { |
- NSRect rect = [contentView convertRect:[window frame] fromView:nil]; |
- rect.size.width += maxWidthGrowth; |
- rect = [contentView convertRect:rect toView:nil]; |
- [window setFrame:rect display:NO]; |
- // For some reason the content view is resizing, but some times not |
- // adjusting its origin, so correct it manually. |
- [contentView setFrameOrigin:NSZeroPoint]; |
- } |
- // Now start the modal loop. |
- [NSApp runModalForWindow:window]; |
- } |
-} |
- |
-- (int)removeMask { |
- int removeMask = 0L; |
- if (clearBrowsingHistory_) |
- removeMask |= BrowsingDataRemover::REMOVE_HISTORY; |
- if (clearDownloadHistory_) |
- removeMask |= BrowsingDataRemover::REMOVE_DOWNLOADS; |
- if (emptyCache_) |
- removeMask |= BrowsingDataRemover::REMOVE_CACHE; |
- if (deleteCookies_) |
- removeMask |= BrowsingDataRemover::REMOVE_COOKIES; |
- if (clearSavedPasswords_) |
- removeMask |= BrowsingDataRemover::REMOVE_PASSWORDS; |
- if (clearFormData_) |
- removeMask |= BrowsingDataRemover::REMOVE_FORM_DATA; |
- return removeMask; |
-} |
- |
-// Called when the user clicks the "clear" button. Do the work and persist |
-// the prefs for next time. We don't stop the modal session until we get |
-// the callback from the BrowsingDataRemover so the window stays on the screen. |
-// While we're working, dim the buttons so the user can't click them. |
-- (IBAction)clearData:(id)sender { |
- // Set that we're working so that the buttons disable. |
- [self setIsClearing:YES]; |
- |
- [self persistToPrefs]; |
- |
- // BrowsingDataRemover deletes itself when done. |
- remover_ = new BrowsingDataRemover(profile_, |
- static_cast<BrowsingDataRemover::TimePeriod>(timePeriod_), |
- base::Time()); |
- remover_->AddObserver(observer_.get()); |
- remover_->Remove([self removeMask]); |
-} |
- |
-// Called when the user clicks the cancel button. All we need to do is stop |
-// the modal session. |
-- (IBAction)cancel:(id)sender { |
- [self closeDialog]; |
-} |
- |
-// Called when the user clicks the "Flash Player storage settings" button. |
-- (IBAction)openFlashPlayerSettings:(id)sender { |
- // The "Clear Data" dialog is app-modal on OS X. Hence, close it before |
- // opening a tab with flash settings. |
- [self closeDialog]; |
- |
- Browser* browser = Browser::Create(profile_); |
- browser->OpenURL(GURL(l10n_util::GetStringUTF8(IDS_FLASH_STORAGE_URL)), |
- GURL(), NEW_FOREGROUND_TAB, PageTransition::LINK); |
- browser->window()->Show(); |
-} |
- |
-- (void)closeDialog { |
- ProfileControllerMap* map = g_profile_controller_map.Pointer(); |
- ProfileControllerMap::iterator it = map->find(profile_); |
- if (it != map->end()) { |
- map->erase(it); |
- } |
- [self autorelease]; |
- [[self window] orderOut:self]; |
- [NSApp stopModal]; |
-} |
- |
-// Initialize the bools from prefs using the setters to be KVO-compliant. |
-- (void)initFromPrefs { |
- PrefService* prefs = profile_->GetPrefs(); |
- [self setClearBrowsingHistory: |
- prefs->GetBoolean(prefs::kDeleteBrowsingHistory)]; |
- [self setClearDownloadHistory: |
- prefs->GetBoolean(prefs::kDeleteDownloadHistory)]; |
- [self setEmptyCache:prefs->GetBoolean(prefs::kDeleteCache)]; |
- [self setDeleteCookies:prefs->GetBoolean(prefs::kDeleteCookies)]; |
- [self setClearSavedPasswords:prefs->GetBoolean(prefs::kDeletePasswords)]; |
- [self setClearFormData:prefs->GetBoolean(prefs::kDeleteFormData)]; |
- [self setTimePeriod:prefs->GetInteger(prefs::kDeleteTimePeriod)]; |
-} |
- |
-// Save the checkbox values to the preferences. |
-- (void)persistToPrefs { |
- PrefService* prefs = profile_->GetPrefs(); |
- prefs->SetBoolean(prefs::kDeleteBrowsingHistory, |
- [self clearBrowsingHistory]); |
- prefs->SetBoolean(prefs::kDeleteDownloadHistory, |
- [self clearDownloadHistory]); |
- prefs->SetBoolean(prefs::kDeleteCache, [self emptyCache]); |
- prefs->SetBoolean(prefs::kDeleteCookies, [self deleteCookies]); |
- prefs->SetBoolean(prefs::kDeletePasswords, [self clearSavedPasswords]); |
- prefs->SetBoolean(prefs::kDeleteFormData, [self clearFormData]); |
- prefs->SetInteger(prefs::kDeleteTimePeriod, [self timePeriod]); |
-} |
- |
-// Called when the data remover object is done with its work. Close the window. |
-// The remover will delete itself. End the modal session at this point. |
-- (void)dataRemoverDidFinish { |
- NSNotificationCenter* center = [NSNotificationCenter defaultCenter]; |
- int removeMask = [self removeMask]; |
- NSDictionary* userInfo = |
- [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:removeMask] |
- forKey:kClearBrowsingDataControllerRemoveMask]; |
- [center postNotificationName:kClearBrowsingDataControllerDidDelete |
- object:self |
- userInfo:userInfo]; |
- |
- [self closeDialog]; |
- [[self window] orderOut:self]; |
- [self setIsClearing:NO]; |
- remover_ = NULL; |
-} |
- |
-@end |