165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/*
281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Redistribution and use in source and binary forms, with or without
565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * modification, are permitted provided that the following conditions
665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * are met:
765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1. Redistributions of source code must retain the above copyright
865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *    notice, this list of conditions and the following disclaimer.
965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright
1065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *    notice, this list of conditions and the following disclaimer in the
1165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *    documentation and/or other materials provided with the distribution.
1265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
1365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
1465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
1565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
1765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
1865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
1965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
2365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE POSSIBILITY OF SUCH DAMAGE.
2465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch */
2565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef WebContext_h
2765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#define WebContext_h
2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "APIObject.h"
3065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PluginInfoStore.h"
3165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "ProcessModel.h"
3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "VisitedLinkProvider.h"
3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebContextInjectedBundleClient.h"
3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebDownloadClient.h"
3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebHistoryClient.h"
3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebProcessProxy.h"
3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/LinkHash.h>
3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/Forward.h>
3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/HashSet.h>
4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/PassRefPtr.h>
4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/RefPtr.h>
4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/text/StringHash.h>
4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/text/WTFString.h>
4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit {
4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass DownloadProxy;
4881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass WebApplicationCacheManagerProxy;
4981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass WebCookieManagerProxy;
5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass WebDatabaseManagerProxy;
5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass WebGeolocationManagerProxy;
522bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass WebIconDatabase;
5381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass WebKeyValueStorageManagerProxy;
542bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass WebMediaCacheManagerProxy;
5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass WebPageGroup;
5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass WebPageProxy;
5781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass WebResourceCacheManagerProxy;
5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstruct WebProcessCreationParameters;
5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass WebContext : public APIObject {
6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochpublic:
6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    static const Type APIType = TypeContext;
6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    static WebContext* sharedProcessContext();
6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    static WebContext* sharedThreadContext();
6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    static PassRefPtr<WebContext> create(const String& injectedBundlePath);
6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual ~WebContext();
6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
7081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    static const Vector<WebContext*>& allContexts();
7181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void initializeInjectedBundleClient(const WKContextInjectedBundleClient*);
7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void initializeHistoryClient(const WKContextHistoryClient*);
7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void initializeDownloadClient(const WKContextDownloadClient*);
7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    ProcessModel processModel() const { return m_processModel; }
7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebProcessProxy* process() const { return m_process.get(); }
7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    template<typename U> bool sendToAllProcesses(const U& message);
802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    template<typename U> bool sendToAllProcessesRelaunchingThemIfNecessary(const U& message);
812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
8265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void processDidFinishLaunching(WebProcessProxy*);
8381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
8481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // Disconnect the process from the context.
8581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void disconnectProcess(WebProcessProxy*);
8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    PassRefPtr<WebPageProxy> createWebPage(PageClient*, WebPageGroup*);
8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebProcessProxy* relaunchProcessIfNecessary();
9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    const String& injectedBundlePath() const { return m_injectedBundlePath; }
9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    DownloadProxy* download(WebPageProxy* initiatingPage, const WebCore::ResourceRequest&);
9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void setInjectedBundleInitializationUserData(PassRefPtr<APIObject> userData) { m_injectedBundleInitializationUserData = userData; }
9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    APIObject* injectedBundleInitializationUserData() const { return m_injectedBundleInitializationUserData.get(); }
9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void postMessageToInjectedBundle(const String&, APIObject*);
9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // InjectedBundle client
10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void didReceiveMessageFromInjectedBundle(const String&, APIObject*);
10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void didReceiveSynchronousMessageFromInjectedBundle(const String&, APIObject*, RefPtr<APIObject>& returnData);
10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void populateVisitedLinks();
10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void setAdditionalPluginsDirectory(const String&);
10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    PluginInfoStore* pluginInfoStore() { return &m_pluginInfoStore; }
10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    String applicationCacheDirectory();
11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
11165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void setAlwaysUsesComplexTextCodePath(bool);
11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
11365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void registerURLSchemeAsEmptyDocument(const String&);
11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void registerURLSchemeAsSecure(const String&);
11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void setDomainRelaxationForbiddenForURLScheme(const String&);
11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void addVisitedLink(const String&);
11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void addVisitedLinkHash(WebCore::LinkHash);
11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
12165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    CoreIPC::SyncReplyMode didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, CoreIPC::ArgumentEncoder*);
12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void setCacheModel(CacheModel);
12465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    CacheModel cacheModel() const { return m_cacheModel; }
12581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
12681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void setDefaultRequestTimeoutInterval(double);
12781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void startMemorySampler(const double interval);
12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void stopMemorySampler();
13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(WIN)
13265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void setShouldPaintNativeControls(bool);
1332bde8e466a4451c7319e3a072d118917957d6554Steve Block
1342bde8e466a4451c7319e3a072d118917957d6554Steve Block    void setInitialHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy) { m_initialHTTPCookieAcceptPolicy = policy; }
13565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
1372bde8e466a4451c7319e3a072d118917957d6554Steve Block    void setEnhancedAccessibility(bool);
1382bde8e466a4451c7319e3a072d118917957d6554Steve Block
13965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Downloads.
1402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    DownloadProxy* createDownloadProxy();
14165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebDownloadClient& downloadClient() { return m_downloadClient; }
14265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void downloadFinished(DownloadProxy*);
14365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
14465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    static HashSet<String, CaseFoldingHash> pdfAndPostScriptMIMETypes();
14565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
14681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    WebApplicationCacheManagerProxy* applicationCacheManagerProxy() const { return m_applicationCacheManagerProxy.get(); }
14781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    WebCookieManagerProxy* cookieManagerProxy() const { return m_cookieManagerProxy.get(); }
14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebDatabaseManagerProxy* databaseManagerProxy() const { return m_databaseManagerProxy.get(); }
14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebGeolocationManagerProxy* geolocationManagerProxy() const { return m_geolocationManagerProxy.get(); }
1502bde8e466a4451c7319e3a072d118917957d6554Steve Block    WebIconDatabase* iconDatabase() const { return m_iconDatabase.get(); }
15181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    WebKeyValueStorageManagerProxy* keyValueStorageManagerProxy() const { return m_keyValueStorageManagerProxy.get(); }
1522bde8e466a4451c7319e3a072d118917957d6554Steve Block    WebMediaCacheManagerProxy* mediaCacheManagerProxy() const { return m_mediaCacheManagerProxy.get(); }
15381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    WebPluginSiteDataManager* pluginSiteDataManager() const { return m_pluginSiteDataManager.get(); }
15481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    WebResourceCacheManagerProxy* resourceCacheManagerProxy() const { return m_resourceCacheManagerProxy.get(); }
15565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    struct Statistics {
15765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        unsigned wkViewCount;
15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        unsigned wkPageCount;
15965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        unsigned wkFrameCount;
16065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    };
1612bde8e466a4451c7319e3a072d118917957d6554Steve Block    static Statistics& statistics();
16265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
1632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    void setDatabaseDirectory(const String& dir) { m_overrideDatabaseDirectory = dir; }
1642bde8e466a4451c7319e3a072d118917957d6554Steve Block    void setIconDatabasePath(const String&);
1652bde8e466a4451c7319e3a072d118917957d6554Steve Block    void setLocalStorageDirectory(const String& dir) { m_overrideLocalStorageDirectory = dir; }
1662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
16781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void ensureWebProcess();
16881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
16981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    bool shouldTerminate(WebProcessProxy*);
17081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
1712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void disableProcessTermination() { m_processTerminationEnabled = false; }
1722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void enableProcessTermination();
1732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
1742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // Defaults to false.
1752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void setHTTPPipeliningEnabled(bool);
1762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    bool httpPipeliningEnabled();
1772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
17865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochprivate:
17965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebContext(ProcessModel, const String& injectedBundlePath);
18065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
18165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual Type type() const { return APIType; }
18265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
18365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void platformInitializeWebProcess(WebProcessCreationParameters&);
1842bde8e466a4451c7319e3a072d118917957d6554Steve Block    void platformInvalidateContext();
1852bde8e466a4451c7319e3a072d118917957d6554Steve Block
18665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // History client
18765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void didNavigateWithNavigationData(uint64_t pageID, const WebNavigationDataStore& store, uint64_t frameID);
18865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void didPerformClientRedirect(uint64_t pageID, const String& sourceURLString, const String& destinationURLString, uint64_t frameID);
18965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void didPerformServerRedirect(uint64_t pageID, const String& sourceURLString, const String& destinationURLString, uint64_t frameID);
19065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void didUpdateHistoryTitle(uint64_t pageID, const String& title, const String& url, uint64_t frameID);
19165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
19265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Plugins
19365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void getPlugins(bool refresh, Vector<WebCore::PluginInfo>& plugins);
19465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void getPluginPath(const String& mimeType, const String& urlString, String& pluginPath);
19581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if !ENABLE(PLUGIN_PROCESS)
19681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void didGetSitesWithPluginData(const Vector<String>& sites, uint64_t callbackID);
19781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void didClearPluginSiteData(uint64_t callbackID);
19881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif
19981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
20065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Implemented in generated WebContextMessageReceiver.cpp
20165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void didReceiveWebContextMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
20265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    CoreIPC::SyncReplyMode didReceiveSyncWebContextMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, CoreIPC::ArgumentEncoder*);
20365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
20465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    static void languageChanged(void* context);
20565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void languageChanged();
20665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    String databaseDirectory() const;
2082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    String platformDefaultDatabaseDirectory() const;
2092fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
2102bde8e466a4451c7319e3a072d118917957d6554Steve Block    String iconDatabasePath() const;
2112bde8e466a4451c7319e3a072d118917957d6554Steve Block    String platformDefaultIconDatabasePath() const;
2122bde8e466a4451c7319e3a072d118917957d6554Steve Block
2132bde8e466a4451c7319e3a072d118917957d6554Steve Block    String localStorageDirectory() const;
2142bde8e466a4451c7319e3a072d118917957d6554Steve Block    String platformDefaultLocalStorageDirectory() const;
2152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
21665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    ProcessModel m_processModel;
21765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
21865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // FIXME: In the future, this should be one or more WebProcessProxies.
21965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<WebProcessProxy> m_process;
22065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
22165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<WebPageGroup> m_defaultPageGroup;
22265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
22365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> m_injectedBundleInitializationUserData;
22465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    String m_injectedBundlePath;
22565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebContextInjectedBundleClient m_injectedBundleClient;
22665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
22765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebHistoryClient m_historyClient;
22865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
22965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    PluginInfoStore m_pluginInfoStore;
23065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    VisitedLinkProvider m_visitedLinkProvider;
23165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
23265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    HashSet<String> m_schemesToRegisterAsEmptyDocument;
23365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    HashSet<String> m_schemesToRegisterAsSecure;
23465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    HashSet<String> m_schemesToSetDomainRelaxationForbiddenFor;
23565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
23665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    bool m_alwaysUsesComplexTextCodePath;
23765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
23865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    Vector<pair<String, RefPtr<APIObject> > > m_pendingMessagesToPostToInjectedBundle;
23965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
24065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    CacheModel m_cacheModel;
24165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
24265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebDownloadClient m_downloadClient;
24365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    HashMap<uint64_t, RefPtr<DownloadProxy> > m_downloads;
24465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
24565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    bool m_memorySamplerEnabled;
24665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    double m_memorySamplerInterval;
24765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
24881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    RefPtr<WebApplicationCacheManagerProxy> m_applicationCacheManagerProxy;
24981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    RefPtr<WebCookieManagerProxy> m_cookieManagerProxy;
25065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<WebDatabaseManagerProxy> m_databaseManagerProxy;
25165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<WebGeolocationManagerProxy> m_geolocationManagerProxy;
2522bde8e466a4451c7319e3a072d118917957d6554Steve Block    RefPtr<WebIconDatabase> m_iconDatabase;
25381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    RefPtr<WebKeyValueStorageManagerProxy> m_keyValueStorageManagerProxy;
2542bde8e466a4451c7319e3a072d118917957d6554Steve Block    RefPtr<WebMediaCacheManagerProxy> m_mediaCacheManagerProxy;
25581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    RefPtr<WebPluginSiteDataManager> m_pluginSiteDataManager;
25681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    RefPtr<WebResourceCacheManagerProxy> m_resourceCacheManagerProxy;
25765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
25865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(WIN)
25965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    bool m_shouldPaintNativeControls;
2602bde8e466a4451c7319e3a072d118917957d6554Steve Block    HTTPCookieAcceptPolicy m_initialHTTPCookieAcceptPolicy;
26165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
2622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
2632bde8e466a4451c7319e3a072d118917957d6554Steve Block#if PLATFORM(MAC)
2642bde8e466a4451c7319e3a072d118917957d6554Steve Block    RetainPtr<CFTypeRef> m_enhancedAccessibilityObserver;
2652bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
2662bde8e466a4451c7319e3a072d118917957d6554Steve Block
2672fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    String m_overrideDatabaseDirectory;
2682bde8e466a4451c7319e3a072d118917957d6554Steve Block    String m_overrideIconDatabasePath;
2692bde8e466a4451c7319e3a072d118917957d6554Steve Block    String m_overrideLocalStorageDirectory;
2702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    bool m_processTerminationEnabled;
27265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch};
27365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochtemplate<typename U> inline bool WebContext::sendToAllProcesses(const U& message)
2752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
2762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (!m_process || !m_process->canSendMessage())
2772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return false;
2782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return m_process->send(message, 0);
2802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
2812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochtemplate<typename U> bool WebContext::sendToAllProcessesRelaunchingThemIfNecessary(const U& message)
2832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
2842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    relaunchProcessIfNecessary();
2852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return m_process->send(message, 0);
2872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
2882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
28965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit
29065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
29165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif // WebContext_h
292