OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #include "chrome/browser/extensions/extension_data_deleter.h" | 5 #include "chrome/browser/extensions/extension_data_deleter.h" |
6 | 6 |
7 #include "chrome/browser/profile.h" | 7 #include "chrome/browser/profile.h" |
8 #include "chrome/common/extensions/extension.h" | 8 #include "chrome/common/extensions/extension.h" |
9 #include "net/base/cookie_monster.h" | 9 #include "net/base/cookie_monster.h" |
10 #include "net/base/net_errors.h" | 10 #include "net/base/net_errors.h" |
11 #include "webkit/database/database_util.h" | 11 #include "webkit/database/database_util.h" |
12 | 12 |
13 ExtensionDataDeleter::ExtensionDataDeleter(Profile* profile, | 13 ExtensionDataDeleter::ExtensionDataDeleter(Profile* profile, |
14 const GURL& extension_url) { | 14 const GURL& extension_url) { |
15 DCHECK(profile); | 15 DCHECK(profile); |
16 webkit_context_ = profile->GetWebKitContext(); | 16 webkit_context_ = profile->GetWebKitContext(); |
17 database_tracker_ = profile->GetDatabaseTracker(); | 17 database_tracker_ = profile->GetDatabaseTracker(); |
18 extension_request_context_ = profile->GetRequestContextForExtensions(); | 18 extension_request_context_ = profile->GetRequestContextForExtensions(); |
19 extension_url_ = extension_url; | 19 extension_url_ = extension_url; |
20 origin_id_ = | 20 origin_id_ = |
21 webkit_database::DatabaseUtil::GetOriginIdentifier(extension_url_); | 21 webkit_database::DatabaseUtil::GetOriginIdentifier(extension_url_); |
22 } | 22 } |
23 | 23 |
24 void ExtensionDataDeleter::StartDeleting() { | 24 void ExtensionDataDeleter::StartDeleting() { |
25 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI)); | 25 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI)); |
| 26 |
| 27 ChromeThread::PostTask( |
| 28 ChromeThread::IO, FROM_HERE, |
| 29 NewRunnableMethod(this, &ExtensionDataDeleter::DeleteCookiesOnIOThread)); |
| 30 |
| 31 ChromeThread::PostTask( |
| 32 ChromeThread::WEBKIT, FROM_HERE, |
| 33 NewRunnableMethod( |
| 34 this, &ExtensionDataDeleter::DeleteLocalStorageOnWebkitThread)); |
| 35 |
| 36 ChromeThread::PostTask( |
| 37 ChromeThread::FILE, FROM_HERE, |
| 38 NewRunnableMethod( |
| 39 this, &ExtensionDataDeleter::DeleteDatabaseOnFileThread)); |
| 40 } |
| 41 |
| 42 void ExtensionDataDeleter::DeleteCookiesOnIOThread() { |
| 43 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO)); |
26 net::CookieMonster* cookie_monster = | 44 net::CookieMonster* cookie_monster = |
27 extension_request_context_->GetCookieStore()->GetCookieMonster(); | 45 extension_request_context_->GetCookieStore()->GetCookieMonster(); |
28 if (cookie_monster) | 46 if (cookie_monster) |
29 cookie_monster->DeleteAllForURL(extension_url_, true); | 47 cookie_monster->DeleteAllForURL(extension_url_, true); |
30 | |
31 ChromeThread::PostTask(ChromeThread::WEBKIT, FROM_HERE, | |
32 NewRunnableMethod(this, | |
33 &ExtensionDataDeleter::DeleteLocalStorageOnWebkitThread)); | |
34 | |
35 ChromeThread::PostTask(ChromeThread::FILE, FROM_HERE, | |
36 NewRunnableMethod(this, | |
37 &ExtensionDataDeleter::DeleteDatabaseOnFileThread)); | |
38 } | 48 } |
39 | 49 |
40 void ExtensionDataDeleter::DeleteDatabaseOnFileThread() { | 50 void ExtensionDataDeleter::DeleteDatabaseOnFileThread() { |
41 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE)); | 51 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE)); |
42 int rv = database_tracker_->DeleteDataForOrigin(origin_id_, NULL); | 52 int rv = database_tracker_->DeleteDataForOrigin(origin_id_, NULL); |
43 DCHECK(rv == net::OK || rv == net::ERR_IO_PENDING); | 53 DCHECK(rv == net::OK || rv == net::ERR_IO_PENDING); |
44 } | 54 } |
45 | 55 |
46 void ExtensionDataDeleter::DeleteLocalStorageOnWebkitThread() { | 56 void ExtensionDataDeleter::DeleteLocalStorageOnWebkitThread() { |
47 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::WEBKIT)); | 57 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::WEBKIT)); |
48 webkit_context_->dom_storage_context()->DeleteLocalStorageForOrigin( | 58 webkit_context_->dom_storage_context()->DeleteLocalStorageForOrigin( |
49 origin_id_); | 59 origin_id_); |
50 } | 60 } |
OLD | NEW |