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#include "config.h" 272bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "WebIconDatabase.h" 282bde8e466a4451c7319e3a072d118917957d6554Steve Block 292bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "DataReference.h" 302bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "Logging.h" 312bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "WebContext.h" 322bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "WebIconDatabaseProxyMessages.h" 332bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <WebCore/FileSystem.h> 342bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <WebCore/IconDatabase.h> 352bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <WebCore/IconDatabaseBase.h> 362bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <wtf/text/WTFString.h> 372bde8e466a4451c7319e3a072d118917957d6554Steve Block 382bde8e466a4451c7319e3a072d118917957d6554Steve Blockusing namespace WebCore; 392bde8e466a4451c7319e3a072d118917957d6554Steve Block 402bde8e466a4451c7319e3a072d118917957d6554Steve Blocknamespace WebKit { 412bde8e466a4451c7319e3a072d118917957d6554Steve Block 422bde8e466a4451c7319e3a072d118917957d6554Steve BlockPassRefPtr<WebIconDatabase> WebIconDatabase::create(WebContext* context) 432bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 442bde8e466a4451c7319e3a072d118917957d6554Steve Block return adoptRef(new WebIconDatabase(context)); 452bde8e466a4451c7319e3a072d118917957d6554Steve Block} 462bde8e466a4451c7319e3a072d118917957d6554Steve Block 472bde8e466a4451c7319e3a072d118917957d6554Steve BlockWebIconDatabase::~WebIconDatabase() 482bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 492bde8e466a4451c7319e3a072d118917957d6554Steve Block} 502bde8e466a4451c7319e3a072d118917957d6554Steve Block 512bde8e466a4451c7319e3a072d118917957d6554Steve BlockWebIconDatabase::WebIconDatabase(WebContext* context) 522bde8e466a4451c7319e3a072d118917957d6554Steve Block : m_webContext(context) 532bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_urlImportCompleted(false) 542bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_databaseCleanupDisabled(false) 552bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 562bde8e466a4451c7319e3a072d118917957d6554Steve Block} 572bde8e466a4451c7319e3a072d118917957d6554Steve Block 582bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebIconDatabase::invalidate() 592bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 602bde8e466a4451c7319e3a072d118917957d6554Steve Block} 612bde8e466a4451c7319e3a072d118917957d6554Steve Block 622bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebIconDatabase::setDatabasePath(const String& path) 632bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 642bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_iconDatabaseImpl && m_iconDatabaseImpl->isOpen()) { 652bde8e466a4451c7319e3a072d118917957d6554Steve Block LOG_ERROR("Icon database already has a path and is already open. We don't currently support changing its path and reopening."); 662bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 672bde8e466a4451c7319e3a072d118917957d6554Steve Block } 682bde8e466a4451c7319e3a072d118917957d6554Steve Block 692bde8e466a4451c7319e3a072d118917957d6554Steve Block m_iconDatabaseImpl = IconDatabase::create(); 702bde8e466a4451c7319e3a072d118917957d6554Steve Block m_iconDatabaseImpl->setClient(this); 712bde8e466a4451c7319e3a072d118917957d6554Steve Block IconDatabase::delayDatabaseCleanup(); 722bde8e466a4451c7319e3a072d118917957d6554Steve Block m_databaseCleanupDisabled = true; 732bde8e466a4451c7319e3a072d118917957d6554Steve Block m_iconDatabaseImpl->setEnabled(true); 742bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!m_iconDatabaseImpl->open(directoryName(path), pathGetFileName(path))) { 752bde8e466a4451c7319e3a072d118917957d6554Steve Block LOG_ERROR("Unable to open WebKit2 icon database on disk"); 762bde8e466a4451c7319e3a072d118917957d6554Steve Block m_iconDatabaseImpl.clear(); 772bde8e466a4451c7319e3a072d118917957d6554Steve Block setGlobalIconDatabase(0); 782bde8e466a4451c7319e3a072d118917957d6554Steve Block IconDatabase::allowDatabaseCleanup(); 792bde8e466a4451c7319e3a072d118917957d6554Steve Block m_databaseCleanupDisabled = false; 802bde8e466a4451c7319e3a072d118917957d6554Steve Block } 812bde8e466a4451c7319e3a072d118917957d6554Steve Block setGlobalIconDatabase(m_iconDatabaseImpl.get()); 822bde8e466a4451c7319e3a072d118917957d6554Steve Block} 832bde8e466a4451c7319e3a072d118917957d6554Steve Block 842bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebIconDatabase::enableDatabaseCleanup() 852bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 862bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!m_iconDatabaseImpl) { 872bde8e466a4451c7319e3a072d118917957d6554Steve Block LOG_ERROR("Cannot enabled Icon Database cleanup - it hasn't been opened yet."); 882bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 892bde8e466a4451c7319e3a072d118917957d6554Steve Block } 902bde8e466a4451c7319e3a072d118917957d6554Steve Block 912bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!m_databaseCleanupDisabled) { 922bde8e466a4451c7319e3a072d118917957d6554Steve Block LOG_ERROR("Attempt to enable database cleanup, but it's already enabled."); 932bde8e466a4451c7319e3a072d118917957d6554Steve Block ASSERT_NOT_REACHED(); 942bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 952bde8e466a4451c7319e3a072d118917957d6554Steve Block } 962bde8e466a4451c7319e3a072d118917957d6554Steve Block 972bde8e466a4451c7319e3a072d118917957d6554Steve Block IconDatabase::allowDatabaseCleanup(); 982bde8e466a4451c7319e3a072d118917957d6554Steve Block m_databaseCleanupDisabled = false; 992bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1002bde8e466a4451c7319e3a072d118917957d6554Steve Block 1012bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebIconDatabase::retainIconForPageURL(const String& pageURL) 1022bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1032bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_iconDatabaseImpl) 1042bde8e466a4451c7319e3a072d118917957d6554Steve Block m_iconDatabaseImpl->retainIconForPageURL(pageURL); 1052bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1062bde8e466a4451c7319e3a072d118917957d6554Steve Block 1072bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebIconDatabase::releaseIconForPageURL(const String& pageURL) 1082bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1092bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_iconDatabaseImpl) 1102bde8e466a4451c7319e3a072d118917957d6554Steve Block m_iconDatabaseImpl->releaseIconForPageURL(pageURL); 1112bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1122bde8e466a4451c7319e3a072d118917957d6554Steve Block 1132bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebIconDatabase::setIconURLForPageURL(const String& iconURL, const String& pageURL) 1142bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1152bde8e466a4451c7319e3a072d118917957d6554Steve Block LOG(IconDatabase, "WK2 UIProcess setting icon URL %s for page URL %s", iconURL.ascii().data(), pageURL.ascii().data()); 1162bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_iconDatabaseImpl) 1172bde8e466a4451c7319e3a072d118917957d6554Steve Block m_iconDatabaseImpl->setIconURLForPageURL(iconURL, pageURL); 1182bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1192bde8e466a4451c7319e3a072d118917957d6554Steve Block 1202bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebIconDatabase::setIconDataForIconURL(const CoreIPC::DataReference& iconData, const String& iconURL) 1212bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1222bde8e466a4451c7319e3a072d118917957d6554Steve Block LOG(IconDatabase, "WK2 UIProcess setting icon data (%i bytes) for page URL %s", (int)iconData.size(), iconURL.ascii().data()); 1232bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!m_iconDatabaseImpl) 1242bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 1252bde8e466a4451c7319e3a072d118917957d6554Steve Block 1262bde8e466a4451c7319e3a072d118917957d6554Steve Block RefPtr<SharedBuffer> buffer = SharedBuffer::create(iconData.data(), iconData.size()); 1272bde8e466a4451c7319e3a072d118917957d6554Steve Block m_iconDatabaseImpl->setIconDataForIconURL(buffer.release(), iconURL); 1282bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1292bde8e466a4451c7319e3a072d118917957d6554Steve Block 1302bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebIconDatabase::synchronousIconDataForPageURL(const String&, CoreIPC::DataReference& iconData) 1312bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1322bde8e466a4451c7319e3a072d118917957d6554Steve Block iconData = CoreIPC::DataReference(); 1332bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1342bde8e466a4451c7319e3a072d118917957d6554Steve Block 1352bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebIconDatabase::synchronousIconURLForPageURL(const String&, String& iconURL) 1362bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1372bde8e466a4451c7319e3a072d118917957d6554Steve Block iconURL = String(); 1382bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1392bde8e466a4451c7319e3a072d118917957d6554Steve Block 1402bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebIconDatabase::synchronousIconDataKnownForIconURL(const String&, bool& iconDataKnown) const 1412bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1422bde8e466a4451c7319e3a072d118917957d6554Steve Block iconDataKnown = false; 1432bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1442bde8e466a4451c7319e3a072d118917957d6554Steve Block 1452bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebIconDatabase::synchronousLoadDecisionForIconURL(const String&, int& loadDecision) const 1462bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1472bde8e466a4451c7319e3a072d118917957d6554Steve Block loadDecision = static_cast<int>(IconLoadNo); 1482bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1492bde8e466a4451c7319e3a072d118917957d6554Steve Block 1502bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebIconDatabase::getLoadDecisionForIconURL(const String& iconURL, uint64_t callbackID) 1512bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1522bde8e466a4451c7319e3a072d118917957d6554Steve Block LOG(IconDatabase, "WK2 UIProcess getting load decision for icon URL %s with callback ID %lli", iconURL.ascii().data(), static_cast<long long>(callbackID)); 1532bde8e466a4451c7319e3a072d118917957d6554Steve Block 1542bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!m_webContext) 1552bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 1562bde8e466a4451c7319e3a072d118917957d6554Steve Block 1572bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!m_iconDatabaseImpl || !m_iconDatabaseImpl->isOpen() || iconURL.isEmpty()) { 1582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // FIXME (Multi-WebProcess): We need to know which connection to send this message to. 1592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_webContext->sendToAllProcesses(Messages::WebIconDatabaseProxy::ReceivedIconLoadDecision(static_cast<int>(IconLoadNo), callbackID)); 1602bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 1612bde8e466a4451c7319e3a072d118917957d6554Steve Block } 1622bde8e466a4451c7319e3a072d118917957d6554Steve Block 1632bde8e466a4451c7319e3a072d118917957d6554Steve Block // If the decision hasn't been read from disk yet, set this url and callback ID aside to be notifed later 1642bde8e466a4451c7319e3a072d118917957d6554Steve Block IconLoadDecision decision = m_iconDatabaseImpl->synchronousLoadDecisionForIconURL(iconURL, 0); 1652bde8e466a4451c7319e3a072d118917957d6554Steve Block if (decision == IconLoadUnknown) { 1662bde8e466a4451c7319e3a072d118917957d6554Steve Block // We should never get an unknown load decision after the URL import has completed. 1672bde8e466a4451c7319e3a072d118917957d6554Steve Block ASSERT(!m_urlImportCompleted); 1682bde8e466a4451c7319e3a072d118917957d6554Steve Block 1692bde8e466a4451c7319e3a072d118917957d6554Steve Block m_pendingLoadDecisionURLMap.set(callbackID, iconURL); 1702bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 1712bde8e466a4451c7319e3a072d118917957d6554Steve Block } 1722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 1732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // FIXME (Multi-WebProcess): We need to know which connection to send this message to. 1742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_webContext->sendToAllProcesses(Messages::WebIconDatabaseProxy::ReceivedIconLoadDecision((int)decision, callbackID)); 1752bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1762bde8e466a4451c7319e3a072d118917957d6554Steve Block 1772bde8e466a4451c7319e3a072d118917957d6554Steve BlockImage* WebIconDatabase::imageForPageURL(const String& pageURL) 1782bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!m_webContext || !m_iconDatabaseImpl || !m_iconDatabaseImpl->isOpen() || pageURL.isEmpty()) 1802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return 0; 1812bde8e466a4451c7319e3a072d118917957d6554Steve Block 1822bde8e466a4451c7319e3a072d118917957d6554Steve Block // The WebCore IconDatabase ignores the passed in size parameter. 1832bde8e466a4451c7319e3a072d118917957d6554Steve Block // If that changes we'll need to rethink how this API is exposed. 1842bde8e466a4451c7319e3a072d118917957d6554Steve Block return m_iconDatabaseImpl->synchronousIconForPageURL(pageURL, WebCore::IntSize(32, 32)); 1852bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1862bde8e466a4451c7319e3a072d118917957d6554Steve Block 1872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebIconDatabase::removeAllIcons() 1882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 1892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_iconDatabaseImpl->removeAllIcons(); 1902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 1912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 1922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebIconDatabase::checkIntegrityBeforeOpening() 1932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 1942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch IconDatabase::checkIntegrityBeforeOpening(); 1952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 1962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 1972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebIconDatabase::close() 1982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 1992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_iconDatabaseImpl->close(); 2002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 2012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 2022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebIconDatabase::initializeIconDatabaseClient(const WKIconDatabaseClient* client) 2032daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 2042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_iconDatabaseClient.initialize(client); 2052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 2062bde8e466a4451c7319e3a072d118917957d6554Steve Block 2072bde8e466a4451c7319e3a072d118917957d6554Steve Block// WebCore::IconDatabaseClient 2082bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool WebIconDatabase::performImport() 2092bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 2102bde8e466a4451c7319e3a072d118917957d6554Steve Block // WebKit2 icon database doesn't currently support importing any old icon database formats. 2112bde8e466a4451c7319e3a072d118917957d6554Steve Block return true; 2122bde8e466a4451c7319e3a072d118917957d6554Steve Block} 2132bde8e466a4451c7319e3a072d118917957d6554Steve Block 2142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebIconDatabase::didImportIconURLForPageURL(const String& pageURL) 2152bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 2162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch didChangeIconForPageURL(pageURL); 2172bde8e466a4451c7319e3a072d118917957d6554Steve Block} 2182bde8e466a4451c7319e3a072d118917957d6554Steve Block 2192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebIconDatabase::didImportIconDataForPageURL(const String& pageURL) 2202bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 2212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch didChangeIconForPageURL(pageURL); 2222bde8e466a4451c7319e3a072d118917957d6554Steve Block} 2232bde8e466a4451c7319e3a072d118917957d6554Steve Block 2242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebIconDatabase::didChangeIconForPageURL(const String& pageURL) 2252bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 2262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_iconDatabaseClient.didChangeIconForPageURL(this, WebURL::create(pageURL).get()); 2272bde8e466a4451c7319e3a072d118917957d6554Steve Block} 2282bde8e466a4451c7319e3a072d118917957d6554Steve Block 2292bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebIconDatabase::didRemoveAllIcons() 2302bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 2312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_iconDatabaseClient.didRemoveAllIcons(this); 2322bde8e466a4451c7319e3a072d118917957d6554Steve Block} 2332bde8e466a4451c7319e3a072d118917957d6554Steve Block 2342bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebIconDatabase::didFinishURLImport() 2352bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 2362bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!m_webContext) 2372bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 2382bde8e466a4451c7319e3a072d118917957d6554Steve Block 2392bde8e466a4451c7319e3a072d118917957d6554Steve Block ASSERT(!m_urlImportCompleted); 2402bde8e466a4451c7319e3a072d118917957d6554Steve Block 2412bde8e466a4451c7319e3a072d118917957d6554Steve Block LOG(IconDatabase, "WK2 UIProcess URL import complete, notifying all %i pending page URL load decisions", m_pendingLoadDecisionURLMap.size()); 2422bde8e466a4451c7319e3a072d118917957d6554Steve Block 2432bde8e466a4451c7319e3a072d118917957d6554Steve Block HashMap<uint64_t, String>::iterator i = m_pendingLoadDecisionURLMap.begin(); 2442bde8e466a4451c7319e3a072d118917957d6554Steve Block HashMap<uint64_t, String>::iterator end = m_pendingLoadDecisionURLMap.end(); 2452bde8e466a4451c7319e3a072d118917957d6554Steve Block 2462bde8e466a4451c7319e3a072d118917957d6554Steve Block for (; i != end; ++i) { 2472bde8e466a4451c7319e3a072d118917957d6554Steve Block LOG(IconDatabase, "WK2 UIProcess performing delayed callback on callback ID %i for page url %s", (int)i->first, i->second.ascii().data()); 2482bde8e466a4451c7319e3a072d118917957d6554Steve Block IconLoadDecision decision = m_iconDatabaseImpl->synchronousLoadDecisionForIconURL(i->second, 0); 2492bde8e466a4451c7319e3a072d118917957d6554Steve Block 2502bde8e466a4451c7319e3a072d118917957d6554Steve Block // Decisions should never be unknown after the inital import is complete 2512bde8e466a4451c7319e3a072d118917957d6554Steve Block ASSERT(decision != IconLoadUnknown); 2522bde8e466a4451c7319e3a072d118917957d6554Steve Block 2532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // FIXME (Multi-WebProcess): We need to know which connection to send this message to. 2542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_webContext->sendToAllProcesses(Messages::WebIconDatabaseProxy::ReceivedIconLoadDecision(static_cast<int>(decision), i->first)); 2552bde8e466a4451c7319e3a072d118917957d6554Steve Block } 2562bde8e466a4451c7319e3a072d118917957d6554Steve Block 2572bde8e466a4451c7319e3a072d118917957d6554Steve Block m_pendingLoadDecisionURLMap.clear(); 2582bde8e466a4451c7319e3a072d118917957d6554Steve Block 2592bde8e466a4451c7319e3a072d118917957d6554Steve Block m_urlImportCompleted = true; 2602bde8e466a4451c7319e3a072d118917957d6554Steve Block} 2612bde8e466a4451c7319e3a072d118917957d6554Steve Block 2622bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebIconDatabase::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* decoder) 2632bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 2642bde8e466a4451c7319e3a072d118917957d6554Steve Block didReceiveWebIconDatabaseMessage(connection, messageID, decoder); 2652bde8e466a4451c7319e3a072d118917957d6554Steve Block} 2662bde8e466a4451c7319e3a072d118917957d6554Steve Block 2672bde8e466a4451c7319e3a072d118917957d6554Steve BlockCoreIPC::SyncReplyMode WebIconDatabase::didReceiveSyncMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* decoder, CoreIPC::ArgumentEncoder* reply) 2682bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 2692bde8e466a4451c7319e3a072d118917957d6554Steve Block return didReceiveSyncWebIconDatabaseMessage(connection, messageID, decoder, reply); 2702bde8e466a4451c7319e3a072d118917957d6554Steve Block} 2712bde8e466a4451c7319e3a072d118917957d6554Steve Block 2722bde8e466a4451c7319e3a072d118917957d6554Steve Block} // namespace WebKit 273