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