18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "WebKitDLL.h"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "WebCache.h"
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CFDictionaryPropertyBag.h"
31563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include <WebCore/ApplicationCacheStorage.h>
3228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#include <WebCore/MemoryCache.h>
33563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include <WebCore/CrossOriginPreflightResultCache.h>
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// WebCache ---------------------------------------------------------------------------
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebCache::WebCache()
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project: m_refCount(0)
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    gClassCount++;
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    gClassNameCount.add("WebCache");
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebCache::~WebCache()
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    gClassCount--;
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    gClassNameCount.remove("WebCache");
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebCache* WebCache::createInstance()
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebCache* instance = new WebCache();
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    instance->AddRef();
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return instance;
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// IUnknown -------------------------------------------------------------------
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHRESULT STDMETHODCALLTYPE WebCache::QueryInterface(REFIID riid, void** ppvObject)
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    *ppvObject = 0;
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (IsEqualGUID(riid, IID_IUnknown))
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        *ppvObject = static_cast<WebCache*>(this);
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    else if (IsEqualGUID(riid, IID_IWebCache))
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        *ppvObject = static_cast<WebCache*>(this);
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    else
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return E_NOINTERFACE;
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddRef();
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return S_OK;
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectULONG STDMETHODCALLTYPE WebCache::AddRef(void)
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return ++m_refCount;
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectULONG STDMETHODCALLTYPE WebCache::Release(void)
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ULONG newRef = --m_refCount;
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!newRef)
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        delete(this);
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return newRef;
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// IWebCache ------------------------------------------------------------------------------
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHRESULT STDMETHODCALLTYPE WebCache::statistics(
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /* [in][out] */ int* count,
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /* [retval][out] */ IPropertyBag ** s)
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!count || (s && *count < 4))
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return E_FAIL;
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    *count = 4;
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!s)
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return S_OK;
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebCore::MemoryCache::Statistics stat = WebCore::memoryCache()->getStatistics();
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static CFStringRef imagesKey = CFSTR("images");
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static CFStringRef stylesheetsKey = CFSTR("style sheets");
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static CFStringRef xslKey = CFSTR("xsl");
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static CFStringRef scriptsKey = CFSTR("scripts");
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if !ENABLE(XSLT)
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    const int zero = 0;
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RetainPtr<CFMutableDictionaryRef> dictionary(AdoptCF,
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        CFDictionaryCreateMutable(0, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RetainPtr<CFNumberRef> value(AdoptCF, CFNumberCreate(0, kCFNumberIntType, &stat.images.count));
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CFDictionaryAddValue(dictionary.get(), imagesKey, value.get());
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    value.adoptCF(CFNumberCreate(0, kCFNumberIntType, &stat.cssStyleSheets.count));
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CFDictionaryAddValue(dictionary.get(), stylesheetsKey, value.get());
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(XSLT)
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    value.adoptCF(CFNumberCreate(0, kCFNumberIntType, &stat.xslStyleSheets.count));
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    value.adoptCF(CFNumberCreate(0, kCFNumberIntType, &zero));
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CFDictionaryAddValue(dictionary.get(), xslKey, value.get());
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    value.adoptCF(CFNumberCreate(0, kCFNumberIntType, &stat.scripts.count));
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CFDictionaryAddValue(dictionary.get(), scriptsKey, value.get());
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
129643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    COMPtr<CFDictionaryPropertyBag> propBag = CFDictionaryPropertyBag::createInstance();
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    propBag->setDictionary(dictionary.get());
131643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    s[0] = propBag.releaseRef();
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    dictionary.adoptCF(CFDictionaryCreateMutable(0, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    value.adoptCF(CFNumberCreate(0, kCFNumberIntType, &stat.images.size));
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CFDictionaryAddValue(dictionary.get(), imagesKey, value.get());
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    value.adoptCF(CFNumberCreate(0, kCFNumberIntType, &stat.cssStyleSheets.size));
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CFDictionaryAddValue(dictionary.get(), stylesheetsKey, value.get());
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(XSLT)
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    value.adoptCF(CFNumberCreate(0, kCFNumberIntType, &stat.xslStyleSheets.size));
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    value.adoptCF(CFNumberCreate(0, kCFNumberIntType, &zero));
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CFDictionaryAddValue(dictionary.get(), xslKey, value.get());
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    value.adoptCF(CFNumberCreate(0, kCFNumberIntType, &stat.scripts.size));
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CFDictionaryAddValue(dictionary.get(), scriptsKey, value.get());
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    propBag = CFDictionaryPropertyBag::createInstance();
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    propBag->setDictionary(dictionary.get());
153643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    s[1] = propBag.releaseRef();
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    dictionary.adoptCF(CFDictionaryCreateMutable(0, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    value.adoptCF(CFNumberCreate(0, kCFNumberIntType, &stat.images.liveSize));
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CFDictionaryAddValue(dictionary.get(), imagesKey, value.get());
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    value.adoptCF(CFNumberCreate(0, kCFNumberIntType, &stat.cssStyleSheets.liveSize));
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CFDictionaryAddValue(dictionary.get(), stylesheetsKey, value.get());
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(XSLT)
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    value.adoptCF(CFNumberCreate(0, kCFNumberIntType, &stat.xslStyleSheets.liveSize));
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    value.adoptCF(CFNumberCreate(0, kCFNumberIntType, &zero));
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CFDictionaryAddValue(dictionary.get(), xslKey, value.get());
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    value.adoptCF(CFNumberCreate(0, kCFNumberIntType, &stat.scripts.liveSize));
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CFDictionaryAddValue(dictionary.get(), scriptsKey, value.get());
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    propBag = CFDictionaryPropertyBag::createInstance();
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    propBag->setDictionary(dictionary.get());
175643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    s[2] = propBag.releaseRef();
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    dictionary.adoptCF(CFDictionaryCreateMutable(0, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    value.adoptCF(CFNumberCreate(0, kCFNumberIntType, &stat.images.decodedSize));
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CFDictionaryAddValue(dictionary.get(), imagesKey, value.get());
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    value.adoptCF(CFNumberCreate(0, kCFNumberIntType, &stat.cssStyleSheets.decodedSize));
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CFDictionaryAddValue(dictionary.get(), stylesheetsKey, value.get());
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(XSLT)
1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    value.adoptCF(CFNumberCreate(0, kCFNumberIntType, &stat.xslStyleSheets.decodedSize));
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else
1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    value.adoptCF(CFNumberCreate(0, kCFNumberIntType, &zero));
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CFDictionaryAddValue(dictionary.get(), xslKey, value.get());
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    value.adoptCF(CFNumberCreate(0, kCFNumberIntType, &stat.scripts.decodedSize));
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CFDictionaryAddValue(dictionary.get(), scriptsKey, value.get());
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    propBag = CFDictionaryPropertyBag::createInstance();
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    propBag->setDictionary(dictionary.get());
197643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    s[3] = propBag.releaseRef();
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return S_OK;
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHRESULT STDMETHODCALLTYPE WebCache::empty( void)
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
20465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (WebCore::memoryCache()->disabled())
2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return S_OK;
20665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebCore::memoryCache()->setDisabled(true);
20765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebCore::memoryCache()->setDisabled(false);
208563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
209563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // Empty the application cache.
210563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    WebCore::cacheStorage().empty();
211563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
212563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // Empty the Cross-Origin Preflight cache
213563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    WebCore::CrossOriginPreflightResultCache::shared().empty();
214563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return S_OK;
2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHRESULT STDMETHODCALLTYPE WebCache::setDisabled(
2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /* [in] */ BOOL disabled)
2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
22165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebCore::memoryCache()->setDisabled(!!disabled);
2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return S_OK;
2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHRESULT STDMETHODCALLTYPE WebCache::disabled(
2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /* [out][retval] */ BOOL* disabled)
2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!disabled)
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return E_POINTER;
23065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    *disabled = WebCore::memoryCache()->disabled();
2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return S_OK;
2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
233