1db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block/*
2dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2007, 2010 Apple Inc. All rights reserved.
3db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block *
4db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * Redistribution and use in source and binary forms, with or without
5db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * modification, are permitted provided that the following conditions
6db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * are met:
7db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * 1. Redistributions of source code must retain the above copyright
8db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block *    notice, this list of conditions and the following disclaimer.
9db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * 2. Redistributions in binary form must reproduce the above copyright
10db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block *    notice, this list of conditions and the following disclaimer in the
11db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block *    documentation and/or other materials provided with the distribution.
12db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block *
13db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * THE POSSIBILITY OF SUCH DAMAGE.
24db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block */
25db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
26dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#import "WebDatabaseQuotaManager.h"
27db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
28dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#import "WebSecurityOriginInternal.h"
29dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#import <WebCore/DatabaseTracker.h>
30db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
31db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockusing namespace WebCore;
32db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
33dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch@implementation WebDatabaseQuotaManager
34dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
35dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch- (id)initWithOrigin:(WebSecurityOrigin *)origin
36dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{
37dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    self = [super init];
38dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    if (!self)
39dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        return nil;
40dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
41dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    _origin = origin;
42dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    return self;
43dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch}
44dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
45dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch- (WebSecurityOrigin *)origin
46dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{
47dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    return _origin;
48dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch}
49db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
50db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block- (unsigned long long)usage
51db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{
52dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#if ENABLE(DATABASE)
53dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    return DatabaseTracker::tracker().usageForOrigin([_origin _core]);
54db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#else
55db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    return 0;
56db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#endif
57db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block}
58db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
59db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block- (unsigned long long)quota
60db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{
61dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#if ENABLE(DATABASE)
62dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    return DatabaseTracker::tracker().quotaForOrigin([_origin _core]);
63db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#else
64db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    return 0;
65db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#endif
66db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block}
67db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
68dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch// If the quota is set to a value lower than the current usage, that quota will
69dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch// "stick" but no data will be purged to meet the new quota. This will simply
70dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch// prevent new data from being added to databases in that origin.
71db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block- (void)setQuota:(unsigned long long)quota
72db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{
73dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#if ENABLE(DATABASE)
74dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    DatabaseTracker::tracker().setQuota([_origin _core], quota);
75db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#endif
76db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block}
77db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
78db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block@end
79