12bde8e466a4451c7319e3a072d118917957d6554Steve Block/* 22bde8e466a4451c7319e3a072d118917957d6554Steve Block * Copyright (C) 2011 Apple Inc. All rights reserved. 32bde8e466a4451c7319e3a072d118917957d6554Steve Block * 42bde8e466a4451c7319e3a072d118917957d6554Steve Block * Redistribution and use in source and binary forms, with or without 52bde8e466a4451c7319e3a072d118917957d6554Steve Block * modification, are permitted provided that the following conditions 62bde8e466a4451c7319e3a072d118917957d6554Steve Block * are met: 72bde8e466a4451c7319e3a072d118917957d6554Steve Block * 1. Redistributions of source code must retain the above copyright 82bde8e466a4451c7319e3a072d118917957d6554Steve Block * notice, this list of conditions and the following disclaimer. 92bde8e466a4451c7319e3a072d118917957d6554Steve Block * 2. Redistributions in binary form must reproduce the above copyright 102bde8e466a4451c7319e3a072d118917957d6554Steve Block * notice, this list of conditions and the following disclaimer in the 112bde8e466a4451c7319e3a072d118917957d6554Steve Block * documentation and/or other materials provided with the distribution. 122bde8e466a4451c7319e3a072d118917957d6554Steve Block * 132bde8e466a4451c7319e3a072d118917957d6554Steve Block * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 142bde8e466a4451c7319e3a072d118917957d6554Steve Block * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 152bde8e466a4451c7319e3a072d118917957d6554Steve Block * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 162bde8e466a4451c7319e3a072d118917957d6554Steve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 172bde8e466a4451c7319e3a072d118917957d6554Steve Block * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 182bde8e466a4451c7319e3a072d118917957d6554Steve Block * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 192bde8e466a4451c7319e3a072d118917957d6554Steve Block * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 202bde8e466a4451c7319e3a072d118917957d6554Steve Block * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 212bde8e466a4451c7319e3a072d118917957d6554Steve Block * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 222bde8e466a4451c7319e3a072d118917957d6554Steve Block * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 232bde8e466a4451c7319e3a072d118917957d6554Steve Block * THE POSSIBILITY OF SUCH DAMAGE. 242bde8e466a4451c7319e3a072d118917957d6554Steve Block */ 252bde8e466a4451c7319e3a072d118917957d6554Steve Block 262bde8e466a4451c7319e3a072d118917957d6554Steve Block#ifndef StorageTracker_h 272bde8e466a4451c7319e3a072d118917957d6554Steve Block#define StorageTracker_h 282bde8e466a4451c7319e3a072d118917957d6554Steve Block 292bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(DOM_STORAGE) 302bde8e466a4451c7319e3a072d118917957d6554Steve Block 312bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "PlatformString.h" 322bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "SQLiteDatabase.h" 332bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <wtf/HashSet.h> 342bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <wtf/OwnPtr.h> 352bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <wtf/Vector.h> 362bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <wtf/text/StringHash.h> 372bde8e466a4451c7319e3a072d118917957d6554Steve Block 382bde8e466a4451c7319e3a072d118917957d6554Steve Blocknamespace WebCore { 392bde8e466a4451c7319e3a072d118917957d6554Steve Block 402bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass LocalStorageTask; 412bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass LocalStorageThread; 422bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass SecurityOrigin; 432bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass StorageTrackerClient; 442bde8e466a4451c7319e3a072d118917957d6554Steve Block 452bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass StorageTracker { 462bde8e466a4451c7319e3a072d118917957d6554Steve Block WTF_MAKE_NONCOPYABLE(StorageTracker); 472bde8e466a4451c7319e3a072d118917957d6554Steve Block WTF_MAKE_FAST_ALLOCATED; 482bde8e466a4451c7319e3a072d118917957d6554Steve Blockpublic: 492bde8e466a4451c7319e3a072d118917957d6554Steve Block static void initializeTracker(const String& storagePath); 502bde8e466a4451c7319e3a072d118917957d6554Steve Block static StorageTracker& tracker(); 512bde8e466a4451c7319e3a072d118917957d6554Steve Block static void scheduleTask(void*); 522bde8e466a4451c7319e3a072d118917957d6554Steve Block 532bde8e466a4451c7319e3a072d118917957d6554Steve Block void importOriginIdentifiers(); 542bde8e466a4451c7319e3a072d118917957d6554Steve Block void setOriginDetails(const String& originIdentifier, const String& databaseFile); 552bde8e466a4451c7319e3a072d118917957d6554Steve Block 562bde8e466a4451c7319e3a072d118917957d6554Steve Block void deleteAllOrigins(); 572bde8e466a4451c7319e3a072d118917957d6554Steve Block void deleteOrigin(SecurityOrigin*); 582bde8e466a4451c7319e3a072d118917957d6554Steve Block void deleteOrigin(const String& originIdentifier); 592bde8e466a4451c7319e3a072d118917957d6554Steve Block void origins(Vector<RefPtr<SecurityOrigin> >& result); 602bde8e466a4451c7319e3a072d118917957d6554Steve Block 612bde8e466a4451c7319e3a072d118917957d6554Steve Block void cancelDeletingOrigin(const String& originIdentifier); 622bde8e466a4451c7319e3a072d118917957d6554Steve Block 632bde8e466a4451c7319e3a072d118917957d6554Steve Block void setClient(StorageTrackerClient*); 642bde8e466a4451c7319e3a072d118917957d6554Steve Block 652bde8e466a4451c7319e3a072d118917957d6554Steve Block bool isActive(); 662bde8e466a4451c7319e3a072d118917957d6554Steve Block 672bde8e466a4451c7319e3a072d118917957d6554Steve Block // Sync to disk on background thread. 682bde8e466a4451c7319e3a072d118917957d6554Steve Block void syncDeleteAllOrigins(); 692bde8e466a4451c7319e3a072d118917957d6554Steve Block void syncDeleteOrigin(const String& originIdentifier); 702bde8e466a4451c7319e3a072d118917957d6554Steve Block void syncSetOriginDetails(const String& originIdentifier, const String& databaseFile); 712bde8e466a4451c7319e3a072d118917957d6554Steve Block void syncImportOriginIdentifiers(); 722bde8e466a4451c7319e3a072d118917957d6554Steve Block void syncFileSystemAndTrackerDatabase(); 732bde8e466a4451c7319e3a072d118917957d6554Steve Block 742bde8e466a4451c7319e3a072d118917957d6554Steve Block void syncLocalStorage(); 752bde8e466a4451c7319e3a072d118917957d6554Steve Block 762bde8e466a4451c7319e3a072d118917957d6554Steve Blockprivate: 772bde8e466a4451c7319e3a072d118917957d6554Steve Block StorageTracker(const String& storagePath); 782bde8e466a4451c7319e3a072d118917957d6554Steve Block 792bde8e466a4451c7319e3a072d118917957d6554Steve Block String trackerDatabasePath(); 802bde8e466a4451c7319e3a072d118917957d6554Steve Block void openTrackerDatabase(bool createIfDoesNotExist); 812bde8e466a4451c7319e3a072d118917957d6554Steve Block 822bde8e466a4451c7319e3a072d118917957d6554Steve Block void setStorageDirectoryPath(const String&); 832bde8e466a4451c7319e3a072d118917957d6554Steve Block 842bde8e466a4451c7319e3a072d118917957d6554Steve Block void deleteTrackerFiles(); 852bde8e466a4451c7319e3a072d118917957d6554Steve Block 862bde8e466a4451c7319e3a072d118917957d6554Steve Block bool canDeleteOrigin(const String& originIdentifier); 872bde8e466a4451c7319e3a072d118917957d6554Steve Block void willDeleteOrigin(const String& originIdentifier); 882bde8e466a4451c7319e3a072d118917957d6554Steve Block void willDeleteAllOrigins(); 892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch static void deleteOriginOnMainThread(void* originIdentifier); 902bde8e466a4451c7319e3a072d118917957d6554Steve Block 912bde8e466a4451c7319e3a072d118917957d6554Steve Block void originFilePaths(Vector<String>& paths); 922bde8e466a4451c7319e3a072d118917957d6554Steve Block 932bde8e466a4451c7319e3a072d118917957d6554Steve Block void setIsActive(bool); 942bde8e466a4451c7319e3a072d118917957d6554Steve Block 952bde8e466a4451c7319e3a072d118917957d6554Steve Block // Guard for m_database, m_storageDirectoryPath and static Strings in syncFileSystemAndTrackerDatabase(). 962bde8e466a4451c7319e3a072d118917957d6554Steve Block Mutex m_databaseGuard; 972bde8e466a4451c7319e3a072d118917957d6554Steve Block SQLiteDatabase m_database; 982bde8e466a4451c7319e3a072d118917957d6554Steve Block String m_storageDirectoryPath; 992bde8e466a4451c7319e3a072d118917957d6554Steve Block 1002bde8e466a4451c7319e3a072d118917957d6554Steve Block Mutex m_clientGuard; 1012bde8e466a4451c7319e3a072d118917957d6554Steve Block StorageTrackerClient* m_client; 1022bde8e466a4451c7319e3a072d118917957d6554Steve Block 1032bde8e466a4451c7319e3a072d118917957d6554Steve Block // Guard for m_originSet and m_originsBeingDeleted. 1042bde8e466a4451c7319e3a072d118917957d6554Steve Block Mutex m_originSetGuard; 1052bde8e466a4451c7319e3a072d118917957d6554Steve Block typedef HashSet<String> OriginSet; 1062bde8e466a4451c7319e3a072d118917957d6554Steve Block OriginSet m_originSet; 1072bde8e466a4451c7319e3a072d118917957d6554Steve Block OriginSet m_originsBeingDeleted; 1082bde8e466a4451c7319e3a072d118917957d6554Steve Block 1092bde8e466a4451c7319e3a072d118917957d6554Steve Block OwnPtr<LocalStorageThread> m_thread; 1102bde8e466a4451c7319e3a072d118917957d6554Steve Block 1112bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_isActive; 1122bde8e466a4451c7319e3a072d118917957d6554Steve Block}; 1132bde8e466a4451c7319e3a072d118917957d6554Steve Block 1142bde8e466a4451c7319e3a072d118917957d6554Steve Block} // namespace WebCore 1152bde8e466a4451c7319e3a072d118917957d6554Steve Block 1162bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif // ENABLE(DOM_STORAGE) 1172bde8e466a4451c7319e3a072d118917957d6554Steve Block 1182bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif // StorageTracker_h 119