Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(323)

Side by Side Diff: chrome/browser/extensions/extension_data_deleter.cc

Issue 10824204: Move small c/b/extensions classes into extensions namespace no.2 (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Latest master for cq + nitfix Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/extensions/extension_data_deleter.h"
6
7 #include "base/bind.h"
8 #include "base/file_util.h"
9 #include "chrome/browser/extensions/extension_service.h"
10 #include "chrome/browser/extensions/settings/settings_frontend.h"
11 #include "chrome/browser/profiles/profile.h"
12 #include "chrome/common/chrome_constants.h"
13 #include "chrome/common/extensions/extension.h"
14 #include "chrome/common/url_constants.h"
15 #include "content/public/browser/dom_storage_context.h"
16 #include "content/public/browser/indexed_db_context.h"
17 #include "content/public/browser/resource_context.h"
18 #include "net/base/completion_callback.h"
19 #include "net/base/net_errors.h"
20 #include "net/cookies/cookie_monster.h"
21 #include "net/url_request/url_request_context.h"
22 #include "net/url_request/url_request_context_getter.h"
23 #include "webkit/appcache/appcache_service.h"
24 #include "webkit/database/database_tracker.h"
25 #include "webkit/database/database_util.h"
26 #include "webkit/fileapi/file_system_context.h"
27
28 using content::BrowserContext;
29 using content::BrowserThread;
30 using content::DOMStorageContext;
31 using content::IndexedDBContext;
32 using content::ResourceContext;
33
34 // static
35 void ExtensionDataDeleter::StartDeleting(
36 Profile* profile,
37 const std::string& extension_id,
38 const GURL& storage_origin,
39 bool is_storage_isolated) {
40 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
41 DCHECK(profile);
42 scoped_refptr<ExtensionDataDeleter> deleter =
43 new ExtensionDataDeleter(
44 profile, extension_id, storage_origin, is_storage_isolated);
45
46 BrowserThread::PostTask(
47 BrowserThread::IO, FROM_HERE,
48 base::Bind(
49 &ExtensionDataDeleter::DeleteCookiesOnIOThread, deleter));
50
51 BrowserContext::GetDefaultDOMStorageContext(profile)->DeleteOrigin(
52 storage_origin);
53
54 BrowserThread::PostTask(
55 BrowserThread::WEBKIT_DEPRECATED, FROM_HERE,
56 base::Bind(
57 &ExtensionDataDeleter::DeleteIndexedDBOnWebkitThread, deleter,
58 make_scoped_refptr(BrowserContext::GetIndexedDBContext(profile))));
59
60 BrowserThread::PostTask(
61 BrowserThread::FILE, FROM_HERE,
62 base::Bind(
63 &ExtensionDataDeleter::DeleteDatabaseOnFileThread, deleter));
64
65 BrowserThread::PostTask(
66 BrowserThread::FILE, FROM_HERE,
67 base::Bind(
68 &ExtensionDataDeleter::DeleteFileSystemOnFileThread, deleter));
69
70 BrowserThread::PostTask(
71 BrowserThread::IO, FROM_HERE,
72 base::Bind(
73 &ExtensionDataDeleter::DeleteAppcachesOnIOThread, deleter,
74 profile->GetResourceContext()));
75
76 profile->GetExtensionService()->settings_frontend()->
77 DeleteStorageSoon(extension_id);
78 }
79
80 ExtensionDataDeleter::ExtensionDataDeleter(
81 Profile* profile,
82 const std::string& extension_id,
83 const GURL& storage_origin,
84 bool is_storage_isolated)
85 : extension_id_(extension_id) {
86 database_tracker_ = BrowserContext::GetDatabaseTracker(profile);
87 // Pick the right request context depending on whether it's an extension,
88 // isolated app, or regular app.
89 if (storage_origin.SchemeIs(chrome::kExtensionScheme)) {
90 extension_request_context_ = profile->GetRequestContextForExtensions();
91 } else if (is_storage_isolated) {
92 extension_request_context_ =
93 profile->GetRequestContextForIsolatedApp(extension_id);
94 isolated_app_path_ = profile->GetPath().
95 Append(chrome::kIsolatedAppStateDirname).AppendASCII(extension_id);
96 } else {
97 extension_request_context_ = profile->GetRequestContext();
98 }
99 file_system_context_ = BrowserContext::GetFileSystemContext(profile);
100 storage_origin_ = storage_origin;
101 origin_id_ =
102 webkit_database::DatabaseUtil::GetOriginIdentifier(storage_origin_);
103 }
104
105 ExtensionDataDeleter::~ExtensionDataDeleter() {
106 }
107
108 void ExtensionDataDeleter::DeleteCookiesOnIOThread() {
109 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
110 net::CookieMonster* cookie_monster =
111 extension_request_context_->GetURLRequestContext()->cookie_store()->
112 GetCookieMonster();
113 if (cookie_monster)
114 cookie_monster->DeleteAllForHostAsync(
115 storage_origin_, net::CookieMonster::DeleteCallback());
116 }
117
118 void ExtensionDataDeleter::DeleteDatabaseOnFileThread() {
119 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
120 int rv = database_tracker_->DeleteDataForOrigin(
121 origin_id_, net::CompletionCallback());
122 DCHECK(rv == net::OK || rv == net::ERR_IO_PENDING);
123 }
124
125 void ExtensionDataDeleter::DeleteIndexedDBOnWebkitThread(
126 scoped_refptr<IndexedDBContext> indexed_db_context) {
127 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED));
128 indexed_db_context->DeleteForOrigin(storage_origin_);
129 }
130
131 void ExtensionDataDeleter::DeleteFileSystemOnFileThread() {
132 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
133 file_system_context_->DeleteDataForOriginOnFileThread(storage_origin_);
134
135 // TODO(creis): The following call fails because the request context is still
136 // around, and holding open file handles in this directory.
137 // See http://crbug.com/85127
138 if (!isolated_app_path_.empty())
139 file_util::Delete(isolated_app_path_, true);
140 }
141
142 void ExtensionDataDeleter::DeleteAppcachesOnIOThread(ResourceContext* context) {
143 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
144 ResourceContext::GetAppCacheService(context)->DeleteAppCachesForOrigin(
145 storage_origin_, net::CompletionCallback());
146 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_data_deleter.h ('k') | chrome/browser/extensions/extension_navigation_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698