Home | History | Annotate | Download | only in storage
      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