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