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#ifndef WebIconDatabase_h 27#define WebIconDatabase_h 28 29#include "APIObject.h" 30 31#include "Connection.h" 32#include "WebIconDatabaseClient.h" 33#include <WebCore/IconDatabaseClient.h> 34#include <WebCore/ImageSource.h> 35#include <WebCore/IntSize.h> 36#include <wtf/Forward.h> 37#include <wtf/PassRefPtr.h> 38#include <wtf/RefPtr.h> 39#include <wtf/Vector.h> 40#include <wtf/text/StringHash.h> 41 42namespace CoreIPC { 43class ArgumentDecoder; 44class DataReference; 45} 46 47namespace WebCore { 48class IconDatabase; 49class Image; 50} 51 52namespace WebKit { 53 54class WebContext; 55 56class WebIconDatabase : public TypedAPIObject<APIObject::TypeIconDatabase>, public WebCore::IconDatabaseClient, private CoreIPC::MessageReceiver { 57public: 58 static PassRefPtr<WebIconDatabase> create(WebContext*); 59 virtual ~WebIconDatabase(); 60 61 void invalidate(); 62 void clearContext() { m_webContext = 0; } 63 void setDatabasePath(const String&); 64 void enableDatabaseCleanup(); 65 66 void retainIconForPageURL(const String&); 67 void releaseIconForPageURL(const String&); 68 void setIconURLForPageURL(const String&, const String&); 69 void setIconDataForIconURL(const CoreIPC::DataReference&, const String&); 70 71 void synchronousIconDataForPageURL(const String&, CoreIPC::DataReference&); 72 void synchronousIconURLForPageURL(const String&, String&); 73 void synchronousIconDataKnownForIconURL(const String&, bool&) const; 74 void synchronousLoadDecisionForIconURL(const String&, int&) const; 75 76 void getLoadDecisionForIconURL(const String&, uint64_t callbackID); 77 void didReceiveIconForPageURL(const String&); 78 79 WebCore::Image* imageForPageURL(const String&, const WebCore::IntSize& iconSize = WebCore::IntSize(32, 32)); 80 WebCore::NativeImagePtr nativeImageForPageURL(const String&, const WebCore::IntSize& iconSize = WebCore::IntSize(32, 32)); 81 bool isOpen(); 82 bool isUrlImportCompleted(); 83 84 void removeAllIcons(); 85 void checkIntegrityBeforeOpening(); 86 void close(); 87 88 void initializeIconDatabaseClient(const WKIconDatabaseClient*); 89 90 void setPrivateBrowsingEnabled(bool); 91 92private: 93 WebIconDatabase(WebContext*); 94 95 // WebCore::IconDatabaseClient 96 virtual void didImportIconURLForPageURL(const String&); 97 virtual void didImportIconDataForPageURL(const String&); 98 virtual void didChangeIconForPageURL(const String&); 99 virtual void didRemoveAllIcons(); 100 virtual void didFinishURLImport(); 101 102 // CoreIPC::MessageReceiver 103 virtual void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageDecoder&) OVERRIDE; 104 virtual void didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageDecoder&, OwnPtr<CoreIPC::MessageEncoder>&) OVERRIDE; 105 106 void notifyIconDataReadyForPageURL(const String&); 107 108 WebContext* m_webContext; 109 110 OwnPtr<WebCore::IconDatabase> m_iconDatabaseImpl; 111 bool m_urlImportCompleted; 112 bool m_databaseCleanupDisabled; 113 HashMap<uint64_t, String> m_pendingLoadDecisionURLMap; 114 115 WebIconDatabaseClient m_iconDatabaseClient; 116}; 117 118} // namespace WebKit 119 120#endif // WebIconDatabase_h 121