1/* 2 * Copyright (C) 2011 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 23 * THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26#ifndef StorageTracker_h 27#define StorageTracker_h 28 29#include "SQLiteDatabase.h" 30#include <wtf/HashSet.h> 31#include <wtf/OwnPtr.h> 32#include <wtf/Vector.h> 33#include <wtf/text/StringHash.h> 34#include <wtf/text/WTFString.h> 35 36namespace WebCore { 37 38class StorageTask; 39class StorageThread; 40class SecurityOrigin; 41class StorageTrackerClient; 42 43class StorageTracker { 44 WTF_MAKE_NONCOPYABLE(StorageTracker); 45 WTF_MAKE_FAST_ALLOCATED; 46public: 47 static void initializeTracker(const String& storagePath, StorageTrackerClient*); 48 static StorageTracker& tracker(); 49 50 void setDatabaseDirectoryPath(const String&); 51 String databaseDirectoryPath() const; 52 53 void setOriginDetails(const String& originIdentifier, const String& databaseFile); 54 55 void deleteAllOrigins(); 56 void deleteOrigin(SecurityOrigin*); 57 void deleteOriginWithIdentifier(const String& originIdentifier); 58 void origins(Vector<RefPtr<SecurityOrigin> >& result); 59 long long diskUsageForOrigin(SecurityOrigin*); 60 61 void cancelDeletingOrigin(const String& originIdentifier); 62 63 bool isActive(); 64 65 double storageDatabaseIdleInterval() { return m_StorageDatabaseIdleInterval; } 66 void setStorageDatabaseIdleInterval(double interval) { m_StorageDatabaseIdleInterval = interval; } 67 68 void syncFileSystemAndTrackerDatabase(); 69 70private: 71 explicit StorageTracker(const String& storagePath); 72 73 void internalInitialize(); 74 75 String trackerDatabasePath(); 76 void openTrackerDatabase(bool createIfDoesNotExist); 77 78 void importOriginIdentifiers(); 79 void finishedImportingOriginIdentifiers(); 80 81 void deleteTrackerFiles(); 82 String databasePathForOrigin(const String& originIdentifier); 83 84 bool canDeleteOrigin(const String& originIdentifier); 85 void willDeleteOrigin(const String& originIdentifier); 86 void willDeleteAllOrigins(); 87 88 void originFilePaths(Vector<String>& paths); 89 90 void setIsActive(bool); 91 92 // Sync to disk on background thread. 93 void syncDeleteAllOrigins(); 94 void syncDeleteOrigin(const String& originIdentifier); 95 void syncSetOriginDetails(const String& originIdentifier, const String& databaseFile); 96 void syncImportOriginIdentifiers(); 97 98 // Mutex for m_database and m_storageDirectoryPath. 99 Mutex m_databaseMutex; 100 SQLiteDatabase m_database; 101 String m_storageDirectoryPath; 102 103 Mutex m_clientMutex; 104 StorageTrackerClient* m_client; 105 106 // Guard for m_originSet and m_originsBeingDeleted. 107 Mutex m_originSetMutex; 108 typedef HashSet<String> OriginSet; 109 OriginSet m_originSet; 110 OriginSet m_originsBeingDeleted; 111 112 OwnPtr<StorageThread> m_thread; 113 114 bool m_isActive; 115 bool m_needsInitialization; 116 double m_StorageDatabaseIdleInterval; 117}; 118 119} // namespace WebCore 120 121#endif // StorageTracker_h 122