12bde8e466a4451c7319e3a072d118917957d6554Steve Block/* 22bde8e466a4451c7319e3a072d118917957d6554Steve Block * Copyright (C) 2011 Apple Inc. All rights reserved. 32bde8e466a4451c7319e3a072d118917957d6554Steve Block * 42bde8e466a4451c7319e3a072d118917957d6554Steve Block * Redistribution and use in source and binary forms, with or without 52bde8e466a4451c7319e3a072d118917957d6554Steve Block * modification, are permitted provided that the following conditions 62bde8e466a4451c7319e3a072d118917957d6554Steve Block * are met: 72bde8e466a4451c7319e3a072d118917957d6554Steve Block * 1. Redistributions of source code must retain the above copyright 82bde8e466a4451c7319e3a072d118917957d6554Steve Block * notice, this list of conditions and the following disclaimer. 92bde8e466a4451c7319e3a072d118917957d6554Steve Block * 2. Redistributions in binary form must reproduce the above copyright 102bde8e466a4451c7319e3a072d118917957d6554Steve Block * notice, this list of conditions and the following disclaimer in the 112bde8e466a4451c7319e3a072d118917957d6554Steve Block * documentation and/or other materials provided with the distribution. 122bde8e466a4451c7319e3a072d118917957d6554Steve Block * 132bde8e466a4451c7319e3a072d118917957d6554Steve Block * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 142bde8e466a4451c7319e3a072d118917957d6554Steve Block * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 152bde8e466a4451c7319e3a072d118917957d6554Steve Block * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 162bde8e466a4451c7319e3a072d118917957d6554Steve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 172bde8e466a4451c7319e3a072d118917957d6554Steve Block * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 182bde8e466a4451c7319e3a072d118917957d6554Steve Block * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 192bde8e466a4451c7319e3a072d118917957d6554Steve Block * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 202bde8e466a4451c7319e3a072d118917957d6554Steve Block * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 212bde8e466a4451c7319e3a072d118917957d6554Steve Block * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 222bde8e466a4451c7319e3a072d118917957d6554Steve Block * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 232bde8e466a4451c7319e3a072d118917957d6554Steve Block * THE POSSIBILITY OF SUCH DAMAGE. 242bde8e466a4451c7319e3a072d118917957d6554Steve Block */ 252bde8e466a4451c7319e3a072d118917957d6554Steve Block 262bde8e466a4451c7319e3a072d118917957d6554Steve Block#ifndef WebIconDatabase_h 272bde8e466a4451c7319e3a072d118917957d6554Steve Block#define WebIconDatabase_h 282bde8e466a4451c7319e3a072d118917957d6554Steve Block 292bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "APIObject.h" 302bde8e466a4451c7319e3a072d118917957d6554Steve Block 312bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "Connection.h" 322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "WebIconDatabaseClient.h" 332bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <WebCore/IconDatabaseClient.h> 342bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <wtf/Forward.h> 352bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <wtf/PassRefPtr.h> 362bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <wtf/RefPtr.h> 372bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <wtf/Vector.h> 382bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <wtf/text/StringHash.h> 392bde8e466a4451c7319e3a072d118917957d6554Steve Block 402bde8e466a4451c7319e3a072d118917957d6554Steve Blocknamespace CoreIPC { 412bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass ArgumentDecoder; 422bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass DataReference; 432bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass MessageID; 442bde8e466a4451c7319e3a072d118917957d6554Steve Block} 452bde8e466a4451c7319e3a072d118917957d6554Steve Block 462bde8e466a4451c7319e3a072d118917957d6554Steve Blocknamespace WebCore { 472bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass IconDatabase; 482bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass Image; 492bde8e466a4451c7319e3a072d118917957d6554Steve Block} 502bde8e466a4451c7319e3a072d118917957d6554Steve Block 512bde8e466a4451c7319e3a072d118917957d6554Steve Blocknamespace WebKit { 522bde8e466a4451c7319e3a072d118917957d6554Steve Block 532bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass WebContext; 542bde8e466a4451c7319e3a072d118917957d6554Steve Block 552bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass WebIconDatabase : public APIObject, public WebCore::IconDatabaseClient { 562bde8e466a4451c7319e3a072d118917957d6554Steve Blockpublic: 572bde8e466a4451c7319e3a072d118917957d6554Steve Block static const Type APIType = TypeIconDatabase; 582bde8e466a4451c7319e3a072d118917957d6554Steve Block 592bde8e466a4451c7319e3a072d118917957d6554Steve Block static PassRefPtr<WebIconDatabase> create(WebContext*); 602bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual ~WebIconDatabase(); 612bde8e466a4451c7319e3a072d118917957d6554Steve Block 622bde8e466a4451c7319e3a072d118917957d6554Steve Block void invalidate(); 632bde8e466a4451c7319e3a072d118917957d6554Steve Block void clearContext() { m_webContext = 0; } 642bde8e466a4451c7319e3a072d118917957d6554Steve Block void setDatabasePath(const String&); 652bde8e466a4451c7319e3a072d118917957d6554Steve Block void enableDatabaseCleanup(); 662bde8e466a4451c7319e3a072d118917957d6554Steve Block 672bde8e466a4451c7319e3a072d118917957d6554Steve Block void retainIconForPageURL(const String&); 682bde8e466a4451c7319e3a072d118917957d6554Steve Block void releaseIconForPageURL(const String&); 692bde8e466a4451c7319e3a072d118917957d6554Steve Block void setIconURLForPageURL(const String&, const String&); 702bde8e466a4451c7319e3a072d118917957d6554Steve Block void setIconDataForIconURL(const CoreIPC::DataReference&, const String&); 712bde8e466a4451c7319e3a072d118917957d6554Steve Block 722bde8e466a4451c7319e3a072d118917957d6554Steve Block void synchronousIconDataForPageURL(const String&, CoreIPC::DataReference&); 732bde8e466a4451c7319e3a072d118917957d6554Steve Block void synchronousIconURLForPageURL(const String&, String&); 742bde8e466a4451c7319e3a072d118917957d6554Steve Block void synchronousIconDataKnownForIconURL(const String&, bool&) const; 752bde8e466a4451c7319e3a072d118917957d6554Steve Block void synchronousLoadDecisionForIconURL(const String&, int&) const; 762bde8e466a4451c7319e3a072d118917957d6554Steve Block 772bde8e466a4451c7319e3a072d118917957d6554Steve Block void getLoadDecisionForIconURL(const String&, uint64_t callbackID); 782bde8e466a4451c7319e3a072d118917957d6554Steve Block 792bde8e466a4451c7319e3a072d118917957d6554Steve Block WebCore::Image* imageForPageURL(const String&); 802bde8e466a4451c7319e3a072d118917957d6554Steve Block 812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void removeAllIcons(); 822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void checkIntegrityBeforeOpening(); 832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void close(); 842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void initializeIconDatabaseClient(const WKIconDatabaseClient*); 862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 872bde8e466a4451c7319e3a072d118917957d6554Steve Block // WebCore::IconDatabaseClient 882bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual bool performImport(); 892bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void didImportIconURLForPageURL(const String&); 902bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void didImportIconDataForPageURL(const String&); 912bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void didChangeIconForPageURL(const String&); 922bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void didRemoveAllIcons(); 932bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void didFinishURLImport(); 942bde8e466a4451c7319e3a072d118917957d6554Steve Block 952bde8e466a4451c7319e3a072d118917957d6554Steve Block void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*); 962bde8e466a4451c7319e3a072d118917957d6554Steve Block CoreIPC::SyncReplyMode didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, CoreIPC::ArgumentEncoder*); 972bde8e466a4451c7319e3a072d118917957d6554Steve Block 982bde8e466a4451c7319e3a072d118917957d6554Steve Blockprivate: 992bde8e466a4451c7319e3a072d118917957d6554Steve Block WebIconDatabase(WebContext*); 1002bde8e466a4451c7319e3a072d118917957d6554Steve Block 1012bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual Type type() const { return APIType; } 1022bde8e466a4451c7319e3a072d118917957d6554Steve Block 1032bde8e466a4451c7319e3a072d118917957d6554Steve Block void didReceiveWebIconDatabaseMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*); 1042bde8e466a4451c7319e3a072d118917957d6554Steve Block CoreIPC::SyncReplyMode didReceiveSyncWebIconDatabaseMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, CoreIPC::ArgumentEncoder*); 1052bde8e466a4451c7319e3a072d118917957d6554Steve Block 1062bde8e466a4451c7319e3a072d118917957d6554Steve Block WebContext* m_webContext; 1072bde8e466a4451c7319e3a072d118917957d6554Steve Block 1082bde8e466a4451c7319e3a072d118917957d6554Steve Block OwnPtr<WebCore::IconDatabase> m_iconDatabaseImpl; 1092bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_urlImportCompleted; 1102bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_databaseCleanupDisabled; 1112bde8e466a4451c7319e3a072d118917957d6554Steve Block HashMap<uint64_t, String> m_pendingLoadDecisionURLMap; 1122bde8e466a4451c7319e3a072d118917957d6554Steve Block 1132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch WebIconDatabaseClient m_iconDatabaseClient; 1142bde8e466a4451c7319e3a072d118917957d6554Steve Block}; 1152bde8e466a4451c7319e3a072d118917957d6554Steve Block 1162bde8e466a4451c7319e3a072d118917957d6554Steve Block} // namespace WebKit 1172bde8e466a4451c7319e3a072d118917957d6554Steve Block 1182bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif // WebIconDatabase_h 119