• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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#if ENABLE(DOM_STORAGE)
27
28#import "WebSecurityOriginInternal.h"
29#import "WebStorageManagerPrivate.h"
30#import "WebStorageManagerInternal.h"
31#import "WebStorageTrackerClient.h"
32
33#import <WebCore/SecurityOrigin.h>
34#import <WebCore/StorageTracker.h>
35
36using namespace WebCore;
37
38NSString * const WebStorageDirectoryDefaultsKey = @"WebKitLocalStorageDatabasePathPreferenceKey";
39NSString * const WebStorageDidModifyOriginNotification = @"WebStorageDidModifyOriginNotification";
40
41static NSString *storageDirectoryPath();
42
43@implementation WebStorageManager
44
45+ (WebStorageManager *)sharedWebStorageManager
46{
47    static WebStorageManager *sharedManager = [[WebStorageManager alloc] init];
48    return sharedManager;
49}
50
51- (NSArray *)origins
52{
53    Vector<RefPtr<SecurityOrigin> > coreOrigins;
54
55    StorageTracker::tracker().origins(coreOrigins);
56
57    NSMutableArray *webOrigins = [[NSMutableArray alloc] initWithCapacity:coreOrigins.size()];
58
59    for (size_t i = 0; i < coreOrigins.size(); ++i) {
60        WebSecurityOrigin *webOrigin = [[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:coreOrigins[i].get()];
61        [webOrigins addObject:webOrigin];
62        [webOrigin release];
63    }
64
65    return [webOrigins autorelease];
66}
67
68- (void)deleteAllOrigins
69{
70    StorageTracker::tracker().deleteAllOrigins();
71}
72
73- (void)deleteOrigin:(WebSecurityOrigin *)origin
74{
75    StorageTracker::tracker().deleteOrigin([origin _core]);
76}
77
78- (void)syncLocalStorage
79{
80    StorageTracker::tracker().syncLocalStorage();
81}
82
83- (void)syncFileSystemAndTrackerDatabase
84{
85    StorageTracker::tracker().syncFileSystemAndTrackerDatabase();
86}
87
88static NSString *storageDirectoryPath()
89{
90    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
91    NSString *storageDirectory = [defaults objectForKey:WebStorageDirectoryDefaultsKey];
92    if (!storageDirectory || ![storageDirectory isKindOfClass:[NSString class]])
93        storageDirectory = @"~/Library/WebKit/LocalStorage";
94
95    return [storageDirectory stringByStandardizingPath];
96}
97
98void WebKitInitializeStorageIfNecessary()
99{
100    static BOOL initialized = NO;
101    if (initialized)
102        return;
103
104    StorageTracker::initializeTracker(storageDirectoryPath());
105
106    StorageTracker::tracker().setClient(WebStorageTrackerClient::sharedWebStorageTrackerClient());
107
108    initialized = YES;
109}
110
111@end
112
113#endif
114