extension_data_deleter.cc revision c407dc5cd9bdc5668497f21b26b09d988ab439de
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 3// found in the LICENSE file. 4 5#include "chrome/browser/extensions/extension_data_deleter.h" 6 7#include "chrome/browser/profile.h" 8#include "chrome/common/extensions/extension.h" 9#include "net/base/cookie_monster.h" 10#include "net/base/net_errors.h" 11#include "webkit/database/database_util.h" 12 13ExtensionDataDeleter::ExtensionDataDeleter(Profile* profile, 14 const GURL& extension_url) { 15 DCHECK(profile); 16 webkit_context_ = profile->GetWebKitContext(); 17 database_tracker_ = profile->GetDatabaseTracker(); 18 extension_request_context_ = profile->GetRequestContextForExtensions(); 19 extension_url_ = extension_url; 20 origin_id_ = 21 webkit_database::DatabaseUtil::GetOriginIdentifier(extension_url_); 22} 23 24void ExtensionDataDeleter::StartDeleting() { 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 42void ExtensionDataDeleter::DeleteCookiesOnIOThread() { 43 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO)); 44 net::CookieMonster* cookie_monster = 45 extension_request_context_->GetCookieStore()->GetCookieMonster(); 46 if (cookie_monster) 47 cookie_monster->DeleteAllForHost(extension_url_); 48} 49 50void ExtensionDataDeleter::DeleteDatabaseOnFileThread() { 51 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE)); 52 int rv = database_tracker_->DeleteDataForOrigin(origin_id_, NULL); 53 DCHECK(rv == net::OK || rv == net::ERR_IO_PENDING); 54} 55 56void ExtensionDataDeleter::DeleteLocalStorageOnWebkitThread() { 57 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::WEBKIT)); 58 webkit_context_->dom_storage_context()->DeleteLocalStorageForOrigin( 59 origin_id_); 60} 61