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 #if ENABLE(DOM_STORAGE) 30 31 #include "PlatformString.h" 32 #include "SQLiteDatabase.h" 33 #include <wtf/HashSet.h> 34 #include <wtf/OwnPtr.h> 35 #include <wtf/Vector.h> 36 #include <wtf/text/StringHash.h> 37 38 namespace WebCore { 39 40 class LocalStorageTask; 41 class LocalStorageThread; 42 class SecurityOrigin; 43 class StorageTrackerClient; 44 45 class StorageTracker { 46 WTF_MAKE_NONCOPYABLE(StorageTracker); 47 WTF_MAKE_FAST_ALLOCATED; 48 public: 49 static void initializeTracker(const String& storagePath); 50 static StorageTracker& tracker(); 51 static void scheduleTask(void*); 52 53 void importOriginIdentifiers(); 54 void setOriginDetails(const String& originIdentifier, const String& databaseFile); 55 56 void deleteAllOrigins(); 57 void deleteOrigin(SecurityOrigin*); 58 void deleteOrigin(const String& originIdentifier); 59 void origins(Vector<RefPtr<SecurityOrigin> >& result); 60 61 void cancelDeletingOrigin(const String& originIdentifier); 62 63 void setClient(StorageTrackerClient*); 64 65 bool isActive(); 66 67 // Sync to disk on background thread. 68 void syncDeleteAllOrigins(); 69 void syncDeleteOrigin(const String& originIdentifier); 70 void syncSetOriginDetails(const String& originIdentifier, const String& databaseFile); 71 void syncImportOriginIdentifiers(); 72 void syncFileSystemAndTrackerDatabase(); 73 74 void syncLocalStorage(); 75 76 private: 77 StorageTracker(const String& storagePath); 78 79 String trackerDatabasePath(); 80 void openTrackerDatabase(bool createIfDoesNotExist); 81 82 void setStorageDirectoryPath(const String&); 83 84 void deleteTrackerFiles(); 85 86 bool canDeleteOrigin(const String& originIdentifier); 87 void willDeleteOrigin(const String& originIdentifier); 88 void willDeleteAllOrigins(); 89 static void deleteOriginOnMainThread(void* originIdentifier); 90 91 void originFilePaths(Vector<String>& paths); 92 93 void setIsActive(bool); 94 95 // Guard for m_database, m_storageDirectoryPath and static Strings in syncFileSystemAndTrackerDatabase(). 96 Mutex m_databaseGuard; 97 SQLiteDatabase m_database; 98 String m_storageDirectoryPath; 99 100 Mutex m_clientGuard; 101 StorageTrackerClient* m_client; 102 103 // Guard for m_originSet and m_originsBeingDeleted. 104 Mutex m_originSetGuard; 105 typedef HashSet<String> OriginSet; 106 OriginSet m_originSet; 107 OriginSet m_originsBeingDeleted; 108 109 OwnPtr<LocalStorageThread> m_thread; 110 111 bool m_isActive; 112 }; 113 114 } // namespace WebCore 115 116 #endif // ENABLE(DOM_STORAGE) 117 118 #endif // StorageTracker_h 119