| Index: chrome/browser/cocoa/clear_browsing_data_controller.mm
|
| ===================================================================
|
| --- chrome/browser/cocoa/clear_browsing_data_controller.mm (revision 0)
|
| +++ chrome/browser/cocoa/clear_browsing_data_controller.mm (revision 0)
|
| @@ -0,0 +1,157 @@
|
| +// Copyright (c) 2009 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/cocoa/clear_browsing_data_controller.h"
|
| +
|
| +#include "base/mac_util.h"
|
| +#include "base/scoped_nsobject.h"
|
| +#include "chrome/browser/browsing_data_remover.h"
|
| +#include "chrome/common/pref_names.h"
|
| +#include "chrome/common/pref_service.h"
|
| +#include "chrome/browser/profile.h"
|
| +
|
| +@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_;
|
| +};
|
| +
|
| +@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_;
|
| +
|
| +
|
| +- (id)initWithProfile:(Profile*)profile {
|
| + DCHECK(profile);
|
| + // Use initWithWindowNibPath:: instead of initWithWindowNibName: so we
|
| + // can override it in a unit test.
|
| + NSString *nibpath = [mac_util::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];
|
| +}
|
| +
|
| +// Called when outlets are available. Set the throbber icon.
|
| +- (void)awakeFromNib {
|
| + NSString *imagePath = [mac_util::MainAppBundle()
|
| + pathForResource:@"throbber"
|
| + ofType:@"png"];
|
| + scoped_nsobject<NSImage> throbberImage(
|
| + [[NSImage alloc] initWithContentsOfFile:imagePath]);
|
| + [progress_ setImage:throbberImage];
|
| +}
|
| +
|
| +// Run application modal.
|
| +- (void)runModalDialog {
|
| + [[NSApplication sharedApplication] runModalForWindow:[self window]];
|
| +}
|
| +
|
| +// 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];
|
| +
|
| + 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_PASSWORDS;
|
| +
|
| + // BrowsingDataRemover deletes itself when done.
|
| + remover_ = new BrowsingDataRemover(profile_,
|
| + static_cast<BrowsingDataRemover::TimePeriod>(timePeriod_),
|
| + base::Time());
|
| + remover_->AddObserver(observer_.get());
|
| + remover_->Remove(removeMask);
|
| +}
|
| +
|
| +// Called when the user clicks the cancel button. All we need to do is stop
|
| +// the modal session.
|
| +- (IBAction)cancel:(id)sender {
|
| + [[NSApplication sharedApplication] stopModal];
|
| + [[self window] orderOut:self];
|
| +}
|
| +
|
| +// 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 {
|
| + [[NSApplication sharedApplication] stopModal];
|
| + [[self window] orderOut:self];
|
| + [self setIsClearing:NO];
|
| + remover_ = NULL;
|
| +}
|
| +
|
| +@end
|
|
|
| Property changes on: chrome/browser/cocoa/clear_browsing_data_controller.mm
|
| ___________________________________________________________________
|
| Name: svn:eol-style
|
| + LF
|
|
|
|
|