Home | History | Annotate | Download | only in WebCoreSupport
      1 /*
      2  * Copyright (C) 2007, 2010 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  *
      8  * 1.  Redistributions of source code must retain the above copyright
      9  *     notice, this list of conditions and the following disclaimer.
     10  * 2.  Redistributions in binary form must reproduce the above copyright
     11  *     notice, this list of conditions and the following disclaimer in the
     12  *     documentation and/or other materials provided with the distribution.
     13  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
     14  *     its contributors may be used to endorse or promote products derived
     15  *     from this software without specific prior written permission.
     16  *
     17  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
     18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     20  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
     21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27  */
     28 
     29 #import "WebSecurityOriginInternal.h"
     30 
     31 #import "WebApplicationCacheQuotaManager.h"
     32 #import "WebDatabaseQuotaManager.h"
     33 #import "WebQuotaManager.h"
     34 #import <WebCore/KURL.h>
     35 #import <WebCore/DatabaseTracker.h>
     36 #import <WebCore/SecurityOrigin.h>
     37 
     38 using namespace WebCore;
     39 
     40 @implementation WebSecurityOrigin
     41 - (id)initWithURL:(NSURL *)url
     42 {
     43     self = [super init];
     44     if (!self)
     45         return nil;
     46 
     47     RefPtr<SecurityOrigin> origin = SecurityOrigin::create(KURL([url absoluteURL]));
     48     origin->ref();
     49     _private = reinterpret_cast<WebSecurityOriginPrivate *>(origin.get());
     50 
     51     return self;
     52 }
     53 
     54 - (NSString *)protocol
     55 {
     56     return reinterpret_cast<SecurityOrigin*>(_private)->protocol();
     57 }
     58 
     59 - (NSString *)host
     60 {
     61     return reinterpret_cast<SecurityOrigin*>(_private)->host();
     62 }
     63 
     64 - (NSString *)databaseIdentifier
     65 {
     66     return reinterpret_cast<SecurityOrigin*>(_private)->databaseIdentifier();
     67 }
     68 
     69 // Deprecated. Use host instead. This needs to stay here until we ship a new Safari.
     70 - (NSString *)domain
     71 {
     72     return [self host];
     73 }
     74 
     75 - (unsigned short)port
     76 {
     77     return reinterpret_cast<SecurityOrigin*>(_private)->port();
     78 }
     79 
     80 - (BOOL)isEqual:(id)anObject
     81 {
     82     if (![anObject isMemberOfClass:[WebSecurityOrigin class]]) {
     83         return NO;
     84     }
     85 
     86     return [self _core]->equal([anObject _core]);
     87 }
     88 
     89 - (void)dealloc
     90 {
     91     if (_private)
     92         reinterpret_cast<SecurityOrigin*>(_private)->deref();
     93     if (_applicationCacheQuotaManager)
     94         [(NSObject *)_applicationCacheQuotaManager release];
     95     if (_databaseQuotaManager)
     96         [(NSObject *)_databaseQuotaManager release];
     97     [super dealloc];
     98 }
     99 
    100 - (void)finalize
    101 {
    102     if (_private)
    103         reinterpret_cast<SecurityOrigin*>(_private)->deref();
    104     [super finalize];
    105 }
    106 
    107 @end
    108 
    109 @implementation WebSecurityOrigin (WebInternal)
    110 
    111 - (id)_initWithWebCoreSecurityOrigin:(SecurityOrigin*)origin
    112 {
    113     ASSERT(origin);
    114     self = [super init];
    115     if (!self)
    116         return nil;
    117 
    118     origin->ref();
    119     _private = reinterpret_cast<WebSecurityOriginPrivate *>(origin);
    120 
    121     return self;
    122 }
    123 
    124 - (SecurityOrigin *)_core
    125 {
    126     return reinterpret_cast<SecurityOrigin*>(_private);
    127 }
    128 
    129 @end
    130 
    131 
    132 // MARK: -
    133 // MARK: WebQuotaManagers
    134 
    135 @implementation WebSecurityOrigin (WebQuotaManagers)
    136 
    137 - (id<WebQuotaManager>)applicationCacheQuotaManager
    138 {
    139     if (!_applicationCacheQuotaManager)
    140         _applicationCacheQuotaManager = [[WebApplicationCacheQuotaManager alloc] initWithOrigin:self];
    141     return _applicationCacheQuotaManager;
    142 }
    143 
    144 - (id<WebQuotaManager>)databaseQuotaManager
    145 {
    146     if (!_databaseQuotaManager)
    147         _databaseQuotaManager = [[WebDatabaseQuotaManager alloc] initWithOrigin:self];
    148     return _databaseQuotaManager;
    149 }
    150 
    151 @end
    152 
    153 
    154 // MARK: -
    155 // MARK: Deprecated
    156 
    157 // FIXME: The following methods are deprecated and should removed later.
    158 // Clients should instead get a WebQuotaManager, and query / set the quota via the Manager.
    159 // NOTE: the <WebCore/DatabaseTracker.h> #include should be removed as well.
    160 
    161 @implementation WebSecurityOrigin (Deprecated)
    162 
    163 - (unsigned long long)usage
    164 {
    165 #if ENABLE(DATABASE)
    166     return DatabaseTracker::tracker().usageForOrigin(reinterpret_cast<SecurityOrigin*>(_private));
    167 #else
    168     return 0;
    169 #endif
    170 }
    171 
    172 - (unsigned long long)quota
    173 {
    174 #if ENABLE(DATABASE)
    175     return DatabaseTracker::tracker().quotaForOrigin(reinterpret_cast<SecurityOrigin*>(_private));
    176 #else
    177     return 0;
    178 #endif
    179 }
    180 
    181 - (void)setQuota:(unsigned long long)quota
    182 {
    183 #if ENABLE(DATABASE)
    184     DatabaseTracker::tracker().setQuota(reinterpret_cast<SecurityOrigin*>(_private), quota);
    185 #endif
    186 }
    187 
    188 @end
    189