diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 18:28:41 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 18:28:41 -0800 |
commit | 648161bb0edfc3d43db63caed5cc5213bc6cb78f (patch) | |
tree | 4b825dc642cb6eb9a060e54bf8d69288fbee4904 /WebKit/win/WebDatabaseManager.cpp | |
parent | a65af38181ac7d34544586bdb5cd004de93897ad (diff) | |
download | external_webkit-648161bb0edfc3d43db63caed5cc5213bc6cb78f.zip external_webkit-648161bb0edfc3d43db63caed5cc5213bc6cb78f.tar.gz external_webkit-648161bb0edfc3d43db63caed5cc5213bc6cb78f.tar.bz2 |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'WebKit/win/WebDatabaseManager.cpp')
-rw-r--r-- | WebKit/win/WebDatabaseManager.cpp | 366 |
1 files changed, 0 insertions, 366 deletions
diff --git a/WebKit/win/WebDatabaseManager.cpp b/WebKit/win/WebDatabaseManager.cpp deleted file mode 100644 index d4974ed..0000000 --- a/WebKit/win/WebDatabaseManager.cpp +++ /dev/null @@ -1,366 +0,0 @@ -/* - * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "WebDatabaseManager.h" -#include "WebKitDLL.h" - -#include "CFDictionaryPropertyBag.h" -#include "COMEnumVariant.h" -#include "MarshallingHelpers.h" -#include "WebNotificationCenter.h" -#include "WebSecurityOrigin.h" - -#include <WebCore/BString.h> -#include <WebCore/COMPtr.h> -#include <WebCore/DatabaseTracker.h> -#include <WebCore/FileSystem.h> -#include <WebCore/SecurityOrigin.h> - -using namespace WebCore; - -static inline bool isEqual(LPCWSTR s1, LPCWSTR s2) -{ - return !wcscmp(s1, s2); -} - -class DatabaseDetailsPropertyBag : public IPropertyBag, Noncopyable { -public: - static DatabaseDetailsPropertyBag* createInstance(const DatabaseDetails&); - - // IUnknown - virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject); - virtual ULONG STDMETHODCALLTYPE AddRef(); - virtual ULONG STDMETHODCALLTYPE Release(); - - // IPropertyBag - virtual HRESULT STDMETHODCALLTYPE Read(LPCOLESTR pszPropName, VARIANT* pVar, IErrorLog* pErrorLog); - virtual HRESULT STDMETHODCALLTYPE Write(LPCOLESTR pszPropName, VARIANT* pVar); -private: - DatabaseDetailsPropertyBag(const DatabaseDetails& details) - : m_refCount(0) - , m_details(details) { } - ~DatabaseDetailsPropertyBag() { } - - ULONG m_refCount; - DatabaseDetails m_details; -}; - -// DatabaseDetailsPropertyBag ------------------------------------------------------ -DatabaseDetailsPropertyBag* DatabaseDetailsPropertyBag::createInstance(const DatabaseDetails& details) -{ - DatabaseDetailsPropertyBag* instance = new DatabaseDetailsPropertyBag(details); - instance->AddRef(); - return instance; -} - -// IUnknown ------------------------------------------------------------------------ -ULONG STDMETHODCALLTYPE DatabaseDetailsPropertyBag::AddRef() -{ - return ++m_refCount; -} - -ULONG STDMETHODCALLTYPE DatabaseDetailsPropertyBag::Release() -{ - ULONG newRef = --m_refCount; - if (!newRef) - delete this; - - return newRef; -} - -HRESULT STDMETHODCALLTYPE DatabaseDetailsPropertyBag::QueryInterface(REFIID riid, void** ppvObject) -{ - *ppvObject = 0; - if (IsEqualGUID(riid, IID_IUnknown)) - *ppvObject = static_cast<DatabaseDetailsPropertyBag*>(this); - else if (IsEqualGUID(riid, IID_IPropertyBag)) - *ppvObject = static_cast<DatabaseDetailsPropertyBag*>(this); - else - return E_NOINTERFACE; - - AddRef(); - return S_OK; -} - -// IPropertyBag -------------------------------------------------------------------- -HRESULT STDMETHODCALLTYPE DatabaseDetailsPropertyBag::Read(LPCOLESTR pszPropName, VARIANT* pVar, IErrorLog*) -{ - if (!pszPropName || !pVar) - return E_POINTER; - - VariantInit(pVar); - - if (isEqual(pszPropName, WebDatabaseDisplayNameKey)) { - COMVariantSetter<String>::setVariant(pVar, m_details.displayName()); - return S_OK; - } else if (isEqual(pszPropName, WebDatabaseExpectedSizeKey)) { - COMVariantSetter<unsigned long long>::setVariant(pVar, m_details.expectedUsage()); - return S_OK; - } else if (isEqual(pszPropName, WebDatabaseUsageKey)) { - COMVariantSetter<unsigned long long>::setVariant(pVar, m_details.currentUsage()); - return S_OK; - } - - return E_INVALIDARG; -} - -HRESULT STDMETHODCALLTYPE DatabaseDetailsPropertyBag::Write(LPCOLESTR pszPropName, VARIANT* pVar) -{ - if (!pszPropName || !pVar) - return E_POINTER; - - return E_FAIL; -} - -static COMPtr<WebDatabaseManager> s_sharedWebDatabaseManager; - -// WebDatabaseManager -------------------------------------------------------------- -WebDatabaseManager* WebDatabaseManager::createInstance() -{ - WebDatabaseManager* manager = new WebDatabaseManager(); - manager->AddRef(); - return manager; -} - -WebDatabaseManager::WebDatabaseManager() - : m_refCount(0) -{ - gClassCount++; - gClassNameCount.add("WebDatabaseManager"); -} - -WebDatabaseManager::~WebDatabaseManager() -{ - gClassCount--; - gClassNameCount.remove("WebDatabaseManager"); -} - -// IUnknown ------------------------------------------------------------------------ -HRESULT STDMETHODCALLTYPE WebDatabaseManager::QueryInterface(REFIID riid, void** ppvObject) -{ - *ppvObject = 0; - if (IsEqualGUID(riid, IID_IUnknown)) - *ppvObject = static_cast<WebDatabaseManager*>(this); - else if (IsEqualGUID(riid, IID_IWebDatabaseManager)) - *ppvObject = static_cast<WebDatabaseManager*>(this); - else - return E_NOINTERFACE; - - AddRef(); - return S_OK; -} - -ULONG STDMETHODCALLTYPE WebDatabaseManager::AddRef() -{ - return ++m_refCount; -} - -ULONG STDMETHODCALLTYPE WebDatabaseManager::Release() -{ - ULONG newRef = --m_refCount; - if (!newRef) - delete this; - - return newRef; -} - -template<> struct COMVariantSetter<RefPtr<SecurityOrigin> > : COMIUnknownVariantSetter<WebSecurityOrigin, RefPtr<SecurityOrigin> > {}; - -// IWebDatabaseManager ------------------------------------------------------------- -HRESULT STDMETHODCALLTYPE WebDatabaseManager::sharedWebDatabaseManager( - /* [retval][out] */ IWebDatabaseManager** result) -{ - if (!s_sharedWebDatabaseManager) { - s_sharedWebDatabaseManager.adoptRef(WebDatabaseManager::createInstance()); - DatabaseTracker::tracker().setClient(s_sharedWebDatabaseManager.get()); - } - - return s_sharedWebDatabaseManager.copyRefTo(result); -} - -HRESULT STDMETHODCALLTYPE WebDatabaseManager::origins( - /* [retval][out] */ IEnumVARIANT** result) -{ - if (!result) - return E_POINTER; - - *result = 0; - - if (this != s_sharedWebDatabaseManager) - return E_FAIL; - - Vector<RefPtr<SecurityOrigin> > origins; - DatabaseTracker::tracker().origins(origins); - COMPtr<COMEnumVariant<Vector<RefPtr<SecurityOrigin> > > > enumVariant(AdoptCOM, COMEnumVariant<Vector<RefPtr<SecurityOrigin> > >::adopt(origins)); - - *result = enumVariant.releaseRef(); - return S_OK; -} - -HRESULT STDMETHODCALLTYPE WebDatabaseManager::databasesWithOrigin( - /* [in] */ IWebSecurityOrigin* origin, - /* [retval][out] */ IEnumVARIANT** result) -{ - if (!origin || !result) - return E_POINTER; - - *result = 0; - - if (this != s_sharedWebDatabaseManager) - return E_FAIL; - - COMPtr<WebSecurityOrigin> webSecurityOrigin(Query, origin); - if (!webSecurityOrigin) - return E_FAIL; - - Vector<String> databaseNames; - DatabaseTracker::tracker().databaseNamesForOrigin(webSecurityOrigin->securityOrigin(), databaseNames); - - COMPtr<COMEnumVariant<Vector<String> > > enumVariant(AdoptCOM, COMEnumVariant<Vector<String> >::adopt(databaseNames)); - - *result = enumVariant.releaseRef(); - return S_OK; -} - -HRESULT STDMETHODCALLTYPE WebDatabaseManager::detailsForDatabase( - /* [in] */ BSTR databaseName, - /* [in] */ IWebSecurityOrigin* origin, - /* [retval][out] */ IPropertyBag** result) -{ - if (!origin || !result) - return E_POINTER; - - *result = 0; - - if (this != s_sharedWebDatabaseManager) - return E_FAIL; - - COMPtr<WebSecurityOrigin> webSecurityOrigin(Query, origin); - if (!webSecurityOrigin) - return E_FAIL; - - DatabaseDetails details = DatabaseTracker::tracker().detailsForNameAndOrigin(String(databaseName, SysStringLen(databaseName)), - webSecurityOrigin->securityOrigin()); - - if (details.name().isNull()) - return E_INVALIDARG; - - *result = DatabaseDetailsPropertyBag::createInstance(details); - return S_OK; -} - -HRESULT STDMETHODCALLTYPE WebDatabaseManager::deleteAllDatabases() -{ - if (this != s_sharedWebDatabaseManager) - return E_FAIL; - - DatabaseTracker::tracker().deleteAllDatabases(); - - return S_OK; -} - -HRESULT STDMETHODCALLTYPE WebDatabaseManager::deleteOrigin( - /* [in] */ IWebSecurityOrigin* origin) -{ - if (!origin) - return E_POINTER; - - if (this != s_sharedWebDatabaseManager) - return E_FAIL; - - COMPtr<WebSecurityOrigin> webSecurityOrigin(Query, origin); - if (!webSecurityOrigin) - return E_FAIL; - - DatabaseTracker::tracker().deleteOrigin(webSecurityOrigin->securityOrigin()); - - return S_OK; -} - -HRESULT STDMETHODCALLTYPE WebDatabaseManager::deleteDatabase( - /* [in] */ BSTR databaseName, - /* [in] */ IWebSecurityOrigin* origin) -{ - if (!origin) - return E_POINTER; - - if (!databaseName) - return E_INVALIDARG; - - if (this != s_sharedWebDatabaseManager) - return E_FAIL; - - COMPtr<WebSecurityOrigin> webSecurityOrigin(Query, origin); - if (!webSecurityOrigin) - return E_FAIL; - - DatabaseTracker::tracker().deleteDatabase(webSecurityOrigin->securityOrigin(), String(databaseName, SysStringLen(databaseName))); - - return S_OK; -} - -void WebDatabaseManager::dispatchDidModifyOrigin(SecurityOrigin* origin) -{ - static BSTR databaseDidModifyOriginName = SysAllocString(WebDatabaseDidModifyOriginNotification); - IWebNotificationCenter* notifyCenter = WebNotificationCenter::defaultCenterInternal(); - - COMPtr<WebSecurityOrigin> securityOrigin(AdoptCOM, WebSecurityOrigin::createInstance(origin)); - notifyCenter->postNotificationName(databaseDidModifyOriginName, securityOrigin.get(), 0); -} - -void WebDatabaseManager::dispatchDidModifyDatabase(SecurityOrigin* origin, const String& databaseName) -{ - static BSTR databaseDidModifyOriginName = SysAllocString(WebDatabaseDidModifyDatabaseNotification); - IWebNotificationCenter* notifyCenter = WebNotificationCenter::defaultCenterInternal(); - - COMPtr<WebSecurityOrigin> securityOrigin(AdoptCOM, WebSecurityOrigin::createInstance(origin)); - - RetainPtr<CFMutableDictionaryRef> userInfo(AdoptCF, CFDictionaryCreateMutable(0, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks)); - - static CFStringRef databaseNameKey = MarshallingHelpers::LPCOLESTRToCFStringRef(WebDatabaseNameKey); - RetainPtr<CFStringRef> str(AdoptCF, databaseName.createCFString()); - CFDictionarySetValue(userInfo.get(), databaseNameKey, str.get()); - - COMPtr<CFDictionaryPropertyBag> userInfoBag(AdoptCOM, CFDictionaryPropertyBag::createInstance()); - userInfoBag->setDictionary(userInfo.get()); - - notifyCenter->postNotificationName(databaseDidModifyOriginName, securityOrigin.get(), userInfoBag.get()); -} - -void WebKitSetWebDatabasesPathIfNecessary() -{ - static bool pathSet = false; - if (pathSet) - return; - - WebCore::String databasesDirectory = WebCore::pathByAppendingComponent(WebCore::localUserSpecificStorageDirectory(), "Databases"); - WebCore::DatabaseTracker::tracker().setDatabaseDirectoryPath(databasesDirectory); - - pathSet = true; -} |