1/*
2 * Copyright (C) 2010, 2011, 2012 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 PlatformStrategies_h
27#define PlatformStrategies_h
28
29namespace WebCore {
30
31class CookiesStrategy;
32class DatabaseStrategy;
33class LoaderStrategy;
34class PasteboardStrategy;
35class PluginStrategy;
36class SharedWorkerStrategy;
37class StorageStrategy;
38class VisitedLinkStrategy;
39
40class PlatformStrategies {
41public:
42    CookiesStrategy* cookiesStrategy()
43    {
44        if (!m_cookiesStrategy)
45            m_cookiesStrategy = createCookiesStrategy();
46        return m_cookiesStrategy;
47    }
48
49    DatabaseStrategy* databaseStrategy()
50    {
51        if (!m_databaseStrategy)
52            m_databaseStrategy = createDatabaseStrategy();
53        return m_databaseStrategy;
54    }
55
56    LoaderStrategy* loaderStrategy()
57    {
58        if (!m_loaderStrategy)
59            m_loaderStrategy = createLoaderStrategy();
60        return m_loaderStrategy;
61    }
62
63    PasteboardStrategy* pasteboardStrategy()
64    {
65        if (!m_pasteboardStrategy)
66            m_pasteboardStrategy = createPasteboardStrategy();
67        return m_pasteboardStrategy;
68    }
69
70    PluginStrategy* pluginStrategy()
71    {
72        if (!m_pluginStrategy)
73            m_pluginStrategy = createPluginStrategy();
74        return m_pluginStrategy;
75    }
76
77    SharedWorkerStrategy* sharedWorkerStrategy()
78    {
79        if (!m_sharedWorkerStrategy)
80            m_sharedWorkerStrategy = createSharedWorkerStrategy();
81        return m_sharedWorkerStrategy;
82    }
83
84    VisitedLinkStrategy* visitedLinkStrategy()
85    {
86        if (!m_visitedLinkStrategy)
87            m_visitedLinkStrategy = createVisitedLinkStrategy();
88        return m_visitedLinkStrategy;
89    }
90
91    StorageStrategy* storageStrategy()
92    {
93        if (!m_storageStrategy)
94            m_storageStrategy = createStorageStrategy();
95        return m_storageStrategy;
96    }
97
98protected:
99    PlatformStrategies()
100        : m_cookiesStrategy(0)
101        , m_databaseStrategy(0)
102        , m_loaderStrategy(0)
103        , m_pasteboardStrategy(0)
104        , m_pluginStrategy(0)
105        , m_sharedWorkerStrategy(0)
106        , m_storageStrategy(0)
107        , m_visitedLinkStrategy(0)
108    {
109    }
110
111    virtual ~PlatformStrategies()
112    {
113    }
114
115private:
116    virtual CookiesStrategy* createCookiesStrategy() = 0;
117    virtual DatabaseStrategy* createDatabaseStrategy() = 0;
118    virtual LoaderStrategy* createLoaderStrategy() = 0;
119    virtual PasteboardStrategy* createPasteboardStrategy() = 0;
120    virtual PluginStrategy* createPluginStrategy() = 0;
121    virtual SharedWorkerStrategy* createSharedWorkerStrategy() = 0;
122    virtual StorageStrategy* createStorageStrategy() = 0;
123    virtual VisitedLinkStrategy* createVisitedLinkStrategy() = 0;
124
125    CookiesStrategy* m_cookiesStrategy;
126    DatabaseStrategy* m_databaseStrategy;
127    LoaderStrategy* m_loaderStrategy;
128    PasteboardStrategy* m_pasteboardStrategy;
129    PluginStrategy* m_pluginStrategy;
130    SharedWorkerStrategy* m_sharedWorkerStrategy;
131    StorageStrategy* m_storageStrategy;
132    VisitedLinkStrategy* m_visitedLinkStrategy;
133};
134
135PlatformStrategies* platformStrategies();
136void setPlatformStrategies(PlatformStrategies*);
137bool hasPlatformStrategies();
138
139} // namespace WebCore
140
141#endif // PlatformStrategies_h
142