Add WTF::move()
[WebKit-https.git] / Source / WebKit2 / WebProcess / ResourceCache / cf / WebResourceCacheManagerCFNet.cpp
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 #include "config.h"
27 #include "WebResourceCacheManager.h"
28
29 #if USE(CFURLCACHE)
30
31 #if ENABLE(CACHE_PARTITIONING)
32 #include <WebCore/PublicSuffix.h>
33 #include <wtf/text/CString.h>
34 #endif
35
36 #if PLATFORM(COCOA)
37 #include "WebKitSystemInterface.h"
38 #endif
39
40
41 namespace WebKit {
42
43 #if ENABLE(CACHE_PARTITIONING)
44 static RetainPtr<CFStringRef> partitionName(CFStringRef domain)
45 {
46 #if ENABLE(PUBLIC_SUFFIX_LIST)
47     String highLevel = WebCore::topPrivatelyControlledDomain(domain);
48     if (highLevel.isNull())
49         return 0;
50     CString utf8String = highLevel.utf8();
51     return adoptCF(CFStringCreateWithBytes(0, reinterpret_cast<const UInt8*>(utf8String.data()), utf8String.length(), kCFStringEncodingUTF8, false));
52 #else
53     return domain;
54 #endif
55 }
56 #endif
57
58 RetainPtr<CFArrayRef> WebResourceCacheManager::cfURLCacheHostNames()
59 {
60     return adoptCF(WKCFURLCacheCopyAllHostNamesInPersistentStore());
61 }
62
63 #if ENABLE(CACHE_PARTITIONING)
64 void WebResourceCacheManager::cfURLCacheHostNamesWithCallback(CacheCallback callback)
65 {
66     WKCFURLCacheCopyAllPartitionNames(^(CFArrayRef partitionNames) {
67         RetainPtr<CFArrayRef> hostNamesInPersistentStore = adoptCF(WKCFURLCacheCopyAllHostNamesInPersistentStoreForPartition(CFSTR("")));
68         RetainPtr<CFMutableArrayRef> hostNames = adoptCF(CFArrayCreateMutableCopy(0, 0, hostNamesInPersistentStore.get()));
69         if (partitionNames) {
70             CFArrayAppendArray(hostNames.get(), partitionNames, CFRangeMake(0, CFArrayGetCount(partitionNames)));
71             CFRelease(partitionNames);
72         }
73         callback(WTF::move(hostNames));
74     });
75 }
76 #endif
77
78 void WebResourceCacheManager::clearCFURLCacheForHostNames(CFArrayRef hostNames)
79 {
80     WKCFURLCacheDeleteHostNamesInPersistentStore(hostNames);
81
82 #if ENABLE(CACHE_PARTITIONING)
83     CFIndex size = CFArrayGetCount(hostNames);
84     for (CFIndex i = 0; i < size; ++i) {
85         RetainPtr<CFStringRef> partition = partitionName(static_cast<CFStringRef>(CFArrayGetValueAtIndex(hostNames, i)));
86         RetainPtr<CFArrayRef> partitionHostNames = adoptCF(WKCFURLCacheCopyAllHostNamesInPersistentStoreForPartition(partition.get()));
87         WKCFURLCacheDeleteHostNamesInPersistentStoreForPartition(partitionHostNames.get(), partition.get());
88     }
89 #endif
90 }
91
92 } // namespace WebKit
93
94 #endif // USE(CFURLCACHE)