1// Copyright (c) 2011 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#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_DATA_DELETER_H_ 6#define CHROME_BROWSER_EXTENSIONS_EXTENSION_DATA_DELETER_H_ 7#pragma once 8 9#include "base/memory/ref_counted.h" 10#include "base/string16.h" 11#include "content/browser/browser_thread.h" 12#include "googleurl/src/gurl.h" 13 14namespace webkit_database { 15class DatabaseTracker; 16} 17 18namespace fileapi { 19class FileSystemContext; 20} 21 22class Profile; 23class WebKitContext; 24 25namespace net { 26class URLRequestContextGetter; 27} 28 29// A helper class that takes care of removing local storage, databases and 30// cookies for a given extension. This is used by 31// ExtensionService::ClearExtensionData() upon uninstalling an extension. 32class ExtensionDataDeleter 33 : public base::RefCountedThreadSafe<ExtensionDataDeleter, 34 BrowserThread::DeleteOnUIThread> { 35 public: 36 ExtensionDataDeleter(Profile* profile, const GURL& extension_url); 37 38 // Start removing data. The extension should not be running when this is 39 // called. Cookies are deleted on the current thread, local storage and 40 // databases are deleted asynchronously on the webkit and file threads, 41 // respectively. This function must be called from the UI thread. 42 void StartDeleting(); 43 44 private: 45 friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>; 46 friend class DeleteTask<ExtensionDataDeleter>; 47 48 ~ExtensionDataDeleter(); 49 50 // Deletes the cookies for the extension. May only be called on the io 51 // thread. 52 void DeleteCookiesOnIOThread(); 53 54 // Deletes the database for the extension. May only be called on the file 55 // thread. 56 void DeleteDatabaseOnFileThread(); 57 58 // Deletes local storage for the extension. May only be called on the webkit 59 // thread. 60 void DeleteLocalStorageOnWebkitThread(); 61 62 // Deletes indexed db files for the extension. May only be called on the 63 // webkit thread. 64 void DeleteIndexedDBOnWebkitThread(); 65 66 // Deletes filesystem files for the extension. May only be called on the 67 // file thread. 68 void DeleteFileSystemOnFileThread(); 69 70 // The database context for deleting the database. 71 scoped_refptr<webkit_database::DatabaseTracker> database_tracker_; 72 73 // Provides access to the extension request context. 74 scoped_refptr<net::URLRequestContextGetter> extension_request_context_; 75 76 // The URL of the extension we're removing data for. 77 GURL extension_url_; 78 79 // The security origin identifier for which we're deleting stuff. 80 string16 origin_id_; 81 82 // Webkit context for accessing the DOM storage helper. 83 scoped_refptr<WebKitContext> webkit_context_; 84 85 scoped_refptr<fileapi::FileSystemContext> file_system_context_; 86 87 DISALLOW_COPY_AND_ASSIGN(ExtensionDataDeleter); 88}; 89 90#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_DATA_DELETER_H_ 91