OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // Defines the Chrome Extensions BrowsingData API functions, which entail | 5 // Defines the Chrome Extensions BrowsingData API functions, which entail |
6 // clearing browsing data, and clearing the browser's cache (which, let's be | 6 // clearing browsing data, and clearing the browser's cache (which, let's be |
7 // honest, are the same thing), as specified in the extension API JSON. | 7 // honest, are the same thing), as specified in the extension API JSON. |
8 | 8 |
9 #include "chrome/browser/extensions/api/browsing_data/browsing_data_api.h" | 9 #include "chrome/browser/extensions/api/browsing_data/browsing_data_api.h" |
10 | 10 |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
109 } // namespace | 109 } // namespace |
110 | 110 |
111 void BrowsingDataExtensionFunction::OnBrowsingDataRemoverDone() { | 111 void BrowsingDataExtensionFunction::OnBrowsingDataRemoverDone() { |
112 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 112 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
113 this->SendResponse(true); | 113 this->SendResponse(true); |
114 | 114 |
115 Release(); // Balanced in RunImpl. | 115 Release(); // Balanced in RunImpl. |
116 } | 116 } |
117 | 117 |
118 bool BrowsingDataExtensionFunction::RunImpl() { | 118 bool BrowsingDataExtensionFunction::RunImpl() { |
| 119 // If we don't have a profile, something's pretty wrong. |
| 120 DCHECK(profile()); |
| 121 |
119 if (BrowsingDataRemover::is_removing()) { | 122 if (BrowsingDataRemover::is_removing()) { |
120 error_ = extension_browsing_data_api_constants::kOneAtATimeError; | 123 error_ = extension_browsing_data_api_constants::kOneAtATimeError; |
121 return false; | 124 return false; |
122 } | 125 } |
123 | 126 |
124 // Grab the initial |options| parameter, and parse out the arguments. | 127 // Grab the initial |options| parameter, and parse out the arguments. |
125 DictionaryValue* options; | 128 DictionaryValue* options; |
126 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &options)); | 129 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &options)); |
127 DCHECK(options); | 130 DCHECK(options); |
128 | 131 |
(...skipping 11 matching lines...) Expand all Loading... |
140 // object. So we need to do special handling here. | 143 // object. So we need to do special handling here. |
141 remove_since_ = (ms_since_epoch == 0) ? | 144 remove_since_ = (ms_since_epoch == 0) ? |
142 base::Time::UnixEpoch() : | 145 base::Time::UnixEpoch() : |
143 base::Time::FromDoubleT(ms_since_epoch / 1000.0); | 146 base::Time::FromDoubleT(ms_since_epoch / 1000.0); |
144 | 147 |
145 removal_mask_ = GetRemovalMask(); | 148 removal_mask_ = GetRemovalMask(); |
146 | 149 |
147 if (removal_mask_ & BrowsingDataRemover::REMOVE_PLUGIN_DATA) { | 150 if (removal_mask_ & BrowsingDataRemover::REMOVE_PLUGIN_DATA) { |
148 // If we're being asked to remove plugin data, check whether it's actually | 151 // If we're being asked to remove plugin data, check whether it's actually |
149 // supported. | 152 // supported. |
150 Profile* profile = GetCurrentBrowser()->profile(); | |
151 BrowserThread::PostTask( | 153 BrowserThread::PostTask( |
152 BrowserThread::FILE, FROM_HERE, | 154 BrowserThread::FILE, FROM_HERE, |
153 base::Bind( | 155 base::Bind( |
154 &BrowsingDataExtensionFunction::CheckRemovingPluginDataSupported, | 156 &BrowsingDataExtensionFunction::CheckRemovingPluginDataSupported, |
155 this, | 157 this, |
156 PluginPrefs::GetForProfile(profile))); | 158 PluginPrefs::GetForProfile(profile()))); |
157 } else { | 159 } else { |
158 StartRemoving(); | 160 StartRemoving(); |
159 } | 161 } |
160 | 162 |
161 // Will finish asynchronously. | 163 // Will finish asynchronously. |
162 return true; | 164 return true; |
163 } | 165 } |
164 | 166 |
165 void BrowsingDataExtensionFunction::CheckRemovingPluginDataSupported( | 167 void BrowsingDataExtensionFunction::CheckRemovingPluginDataSupported( |
166 scoped_refptr<PluginPrefs> plugin_prefs) { | 168 scoped_refptr<PluginPrefs> plugin_prefs) { |
167 if (!PluginDataRemoverHelper::IsSupported(plugin_prefs)) | 169 if (!PluginDataRemoverHelper::IsSupported(plugin_prefs)) |
168 removal_mask_ &= ~BrowsingDataRemover::REMOVE_PLUGIN_DATA; | 170 removal_mask_ &= ~BrowsingDataRemover::REMOVE_PLUGIN_DATA; |
169 | 171 |
170 BrowserThread::PostTask( | 172 BrowserThread::PostTask( |
171 BrowserThread::UI, FROM_HERE, | 173 BrowserThread::UI, FROM_HERE, |
172 base::Bind(&BrowsingDataExtensionFunction::StartRemoving, this)); | 174 base::Bind(&BrowsingDataExtensionFunction::StartRemoving, this)); |
173 } | 175 } |
174 | 176 |
175 void BrowsingDataExtensionFunction::StartRemoving() { | 177 void BrowsingDataExtensionFunction::StartRemoving() { |
176 // If we're good to go, add a ref (Balanced in OnBrowsingDataRemoverDone) | 178 // If we're good to go, add a ref (Balanced in OnBrowsingDataRemoverDone) |
177 AddRef(); | 179 AddRef(); |
178 | 180 |
179 // Create a BrowsingDataRemover, set the current object as an observer (so | 181 // Create a BrowsingDataRemover, set the current object as an observer (so |
180 // that we're notified after removal) and call remove() with the arguments | 182 // that we're notified after removal) and call remove() with the arguments |
181 // we've generated above. We can use a raw pointer here, as the browsing data | 183 // we've generated above. We can use a raw pointer here, as the browsing data |
182 // remover is responsible for deleting itself once data removal is complete. | 184 // remover is responsible for deleting itself once data removal is complete. |
183 BrowsingDataRemover* remover = new BrowsingDataRemover( | 185 BrowsingDataRemover* remover = new BrowsingDataRemover(profile(), |
184 GetCurrentBrowser()->profile(), remove_since_, base::Time::Now()); | 186 remove_since_, base::Time::Now()); |
185 remover->AddObserver(this); | 187 remover->AddObserver(this); |
186 remover->Remove(removal_mask_, origin_set_mask_); | 188 remover->Remove(removal_mask_, origin_set_mask_); |
187 } | 189 } |
188 | 190 |
189 int BrowsingDataExtensionFunction::ParseOriginSetMask( | 191 int BrowsingDataExtensionFunction::ParseOriginSetMask( |
190 const base::DictionaryValue& options) { | 192 const base::DictionaryValue& options) { |
191 // Parse the |options| dictionary to generate the origin set mask. Default to | 193 // Parse the |options| dictionary to generate the origin set mask. Default to |
192 // UNPROTECTED_WEB if the developer doesn't specify anything. | 194 // UNPROTECTED_WEB if the developer doesn't specify anything. |
193 int mask = BrowsingDataHelper::UNPROTECTED_WEB; | 195 int mask = BrowsingDataHelper::UNPROTECTED_WEB; |
194 | 196 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
279 return BrowsingDataRemover::REMOVE_PLUGIN_DATA; | 281 return BrowsingDataRemover::REMOVE_PLUGIN_DATA; |
280 } | 282 } |
281 | 283 |
282 int RemovePasswordsFunction::GetRemovalMask() const { | 284 int RemovePasswordsFunction::GetRemovalMask() const { |
283 return BrowsingDataRemover::REMOVE_PASSWORDS; | 285 return BrowsingDataRemover::REMOVE_PASSWORDS; |
284 } | 286 } |
285 | 287 |
286 int RemoveWebSQLFunction::GetRemovalMask() const { | 288 int RemoveWebSQLFunction::GetRemovalMask() const { |
287 return BrowsingDataRemover::REMOVE_WEBSQL; | 289 return BrowsingDataRemover::REMOVE_WEBSQL; |
288 } | 290 } |
OLD | NEW |