| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 
|  | 2 // Use of this source code is governed by a BSD-style license that can be | 
|  | 3 // found in the LICENSE file. | 
|  | 4 | 
|  | 5 #import "chrome/browser/cocoa/clear_browsing_data_controller.h" | 
|  | 6 | 
|  | 7 #include "base/mac_util.h" | 
|  | 8 #include "base/scoped_nsobject.h" | 
|  | 9 #include "chrome/browser/browsing_data_remover.h" | 
|  | 10 #include "chrome/common/pref_names.h" | 
|  | 11 #include "chrome/common/pref_service.h" | 
|  | 12 #include "chrome/browser/profile.h" | 
|  | 13 | 
|  | 14 @interface ClearBrowsingDataController(Private) | 
|  | 15 - (void)initFromPrefs; | 
|  | 16 - (void)persistToPrefs; | 
|  | 17 - (void)dataRemoverDidFinish; | 
|  | 18 @end | 
|  | 19 | 
|  | 20 class ClearBrowsingObserver : public BrowsingDataRemover::Observer { | 
|  | 21  public: | 
|  | 22   ClearBrowsingObserver(ClearBrowsingDataController* controller) | 
|  | 23       : controller_(controller) { } | 
|  | 24   void OnBrowsingDataRemoverDone() { [controller_ dataRemoverDidFinish]; } | 
|  | 25  private: | 
|  | 26   ClearBrowsingDataController* controller_; | 
|  | 27 }; | 
|  | 28 | 
|  | 29 @implementation ClearBrowsingDataController | 
|  | 30 | 
|  | 31 @synthesize clearBrowsingHistory = clearBrowsingHistory_; | 
|  | 32 @synthesize clearDownloadHistory = clearDownloadHistory_; | 
|  | 33 @synthesize emptyCache = emptyCache_; | 
|  | 34 @synthesize deleteCookies = deleteCookies_; | 
|  | 35 @synthesize clearSavedPasswords = clearSavedPasswords_; | 
|  | 36 @synthesize clearFormData = clearFormData_; | 
|  | 37 @synthesize timePeriod = timePeriod_; | 
|  | 38 @synthesize isClearing = isClearing_; | 
|  | 39 | 
|  | 40 | 
|  | 41 - (id)initWithProfile:(Profile*)profile { | 
|  | 42   DCHECK(profile); | 
|  | 43   // Use initWithWindowNibPath:: instead of initWithWindowNibName: so we | 
|  | 44   // can override it in a unit test. | 
|  | 45   NSString *nibpath = [mac_util::MainAppBundle() | 
|  | 46                         pathForResource:@"ClearBrowsingData" | 
|  | 47                                  ofType:@"nib"]; | 
|  | 48   if ((self = [super initWithWindowNibPath:nibpath owner:self])) { | 
|  | 49     profile_ = profile; | 
|  | 50     observer_.reset(new ClearBrowsingObserver(self)); | 
|  | 51     [self initFromPrefs]; | 
|  | 52   } | 
|  | 53   return self; | 
|  | 54 } | 
|  | 55 | 
|  | 56 - (void)dealloc { | 
|  | 57   if (remover_) { | 
|  | 58     // We were destroyed while clearing history was in progress. This can only | 
|  | 59     // occur during automated tests (normally the user can't close the dialog | 
|  | 60     // while clearing is in progress as the dialog is modal and not closeable). | 
|  | 61     remover_->RemoveObserver(observer_.get()); | 
|  | 62   } | 
|  | 63   [super dealloc]; | 
|  | 64 } | 
|  | 65 | 
|  | 66 // Called when outlets are available. Set the throbber icon. | 
|  | 67 - (void)awakeFromNib { | 
|  | 68   NSString *imagePath = [mac_util::MainAppBundle() | 
|  | 69                         pathForResource:@"throbber" | 
|  | 70                                  ofType:@"png"]; | 
|  | 71   scoped_nsobject<NSImage> throbberImage( | 
|  | 72       [[NSImage alloc] initWithContentsOfFile:imagePath]); | 
|  | 73   [progress_ setImage:throbberImage]; | 
|  | 74 } | 
|  | 75 | 
|  | 76 // Run application modal. | 
|  | 77 - (void)runModalDialog { | 
|  | 78   [[NSApplication sharedApplication] runModalForWindow:[self window]]; | 
|  | 79 } | 
|  | 80 | 
|  | 81 // Called when the user clicks the "clear" button. Do the work and persist | 
|  | 82 // the prefs for next time. We don't stop the modal session until we get | 
|  | 83 // the callback from the BrowsingDataRemover so the window stays on the screen. | 
|  | 84 // While we're working, dim the buttons so the user can't click them. | 
|  | 85 - (IBAction)clearData:(id)sender { | 
|  | 86   // Set that we're working so that the buttons disable. | 
|  | 87   [self setIsClearing:YES]; | 
|  | 88 | 
|  | 89   [self persistToPrefs]; | 
|  | 90 | 
|  | 91   int removeMask = 0L; | 
|  | 92   if (clearBrowsingHistory_) | 
|  | 93     removeMask |= BrowsingDataRemover::REMOVE_HISTORY; | 
|  | 94   if (clearDownloadHistory_) | 
|  | 95     removeMask |= BrowsingDataRemover::REMOVE_DOWNLOADS; | 
|  | 96   if (emptyCache_) | 
|  | 97     removeMask |= BrowsingDataRemover::REMOVE_CACHE; | 
|  | 98   if (deleteCookies_) | 
|  | 99      removeMask |= BrowsingDataRemover::REMOVE_COOKIES; | 
|  | 100   if (clearSavedPasswords_) | 
|  | 101      removeMask |= BrowsingDataRemover::REMOVE_PASSWORDS; | 
|  | 102   if (clearFormData_) | 
|  | 103     removeMask |= BrowsingDataRemover::REMOVE_PASSWORDS; | 
|  | 104 | 
|  | 105   // BrowsingDataRemover deletes itself when done. | 
|  | 106   remover_ = new BrowsingDataRemover(profile_, | 
|  | 107       static_cast<BrowsingDataRemover::TimePeriod>(timePeriod_), | 
|  | 108       base::Time()); | 
|  | 109   remover_->AddObserver(observer_.get()); | 
|  | 110   remover_->Remove(removeMask); | 
|  | 111 } | 
|  | 112 | 
|  | 113 // Called when the user clicks the cancel button. All we need to do is stop | 
|  | 114 // the modal session. | 
|  | 115 - (IBAction)cancel:(id)sender { | 
|  | 116   [[NSApplication sharedApplication] stopModal]; | 
|  | 117   [[self window] orderOut:self]; | 
|  | 118 } | 
|  | 119 | 
|  | 120 // Initialize the bools from prefs using the setters to be KVO-compliant. | 
|  | 121 - (void)initFromPrefs { | 
|  | 122   PrefService* prefs = profile_->GetPrefs(); | 
|  | 123   [self setClearBrowsingHistory: | 
|  | 124       prefs->GetBoolean(prefs::kDeleteBrowsingHistory)]; | 
|  | 125   [self setClearDownloadHistory: | 
|  | 126       prefs->GetBoolean(prefs::kDeleteDownloadHistory)]; | 
|  | 127   [self setEmptyCache:prefs->GetBoolean(prefs::kDeleteCache)]; | 
|  | 128   [self setDeleteCookies:prefs->GetBoolean(prefs::kDeleteCookies)]; | 
|  | 129   [self setClearSavedPasswords:prefs->GetBoolean(prefs::kDeletePasswords)]; | 
|  | 130   [self setClearFormData:prefs->GetBoolean(prefs::kDeleteFormData)]; | 
|  | 131   [self setTimePeriod:prefs->GetInteger(prefs::kDeleteTimePeriod)]; | 
|  | 132 } | 
|  | 133 | 
|  | 134 // Save the checkbox values to the preferences. | 
|  | 135 - (void)persistToPrefs { | 
|  | 136   PrefService* prefs = profile_->GetPrefs(); | 
|  | 137   prefs->SetBoolean(prefs::kDeleteBrowsingHistory, | 
|  | 138                     [self clearBrowsingHistory]); | 
|  | 139   prefs->SetBoolean(prefs::kDeleteDownloadHistory, | 
|  | 140                     [self clearDownloadHistory]); | 
|  | 141   prefs->SetBoolean(prefs::kDeleteCache, [self emptyCache]); | 
|  | 142   prefs->SetBoolean(prefs::kDeleteCookies, [self deleteCookies]); | 
|  | 143   prefs->SetBoolean(prefs::kDeletePasswords, [self clearSavedPasswords]); | 
|  | 144   prefs->SetBoolean(prefs::kDeleteFormData, [self clearFormData]); | 
|  | 145   prefs->SetInteger(prefs::kDeleteTimePeriod, [self timePeriod]); | 
|  | 146 } | 
|  | 147 | 
|  | 148 // Called when the data remover object is done with its work. Close the window. | 
|  | 149 // The remover will delete itself. End the modal session at this point. | 
|  | 150 - (void)dataRemoverDidFinish { | 
|  | 151   [[NSApplication sharedApplication] stopModal]; | 
|  | 152   [[self window] orderOut:self]; | 
|  | 153   [self setIsClearing:NO]; | 
|  | 154   remover_ = NULL; | 
|  | 155 } | 
|  | 156 | 
|  | 157 @end | 
| OLD | NEW | 
|---|