501d68ade96f8095f16e475424da6ed320910acd
[WebKit-https.git] / Source / WebKit2 / UIProcess / Plugins / PlugInAutoStartProvider.h
1 /*
2  * Copyright (C) 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 PlugInAutoStartProvider_h
27 #define PlugInAutoStartProvider_h
28
29 #include <WebCore/SessionID.h>
30 #include <functional>
31 #include <wtf/HashMap.h>
32 #include <wtf/HashSet.h>
33 #include <wtf/Noncopyable.h>
34 #include <wtf/Vector.h>
35 #include <wtf/text/StringHash.h>
36 #include <wtf/text/WTFString.h>
37
38 namespace API {
39 class Array;
40 class Dictionary;
41 }
42
43 namespace WebKit {
44
45 class WebProcessPool;
46
47 typedef HashMap<unsigned, double> PlugInAutoStartOriginMap;
48 typedef HashMap<WebCore::SessionID, PlugInAutoStartOriginMap> SessionPlugInAutoStartOriginMap;
49 typedef Vector<String> PlugInAutoStartOrigins;
50
51 class PlugInAutoStartProvider {
52     WTF_MAKE_NONCOPYABLE(PlugInAutoStartProvider);
53 public:
54     explicit PlugInAutoStartProvider(WebProcessPool*);
55
56     void addAutoStartOriginHash(const String& pageOrigin, unsigned plugInOriginHash, WebCore::SessionID);
57     void didReceiveUserInteraction(unsigned plugInOriginHash, WebCore::SessionID);
58
59     Ref<API::Dictionary> autoStartOriginsTableCopy() const;
60     void setAutoStartOriginsTable(API::Dictionary&);
61     void setAutoStartOriginsFilteringOutEntriesAddedAfterTime(API::Dictionary&, double time);
62     void setAutoStartOriginsArray(API::Array&);
63
64     SessionPlugInAutoStartOriginMap autoStartOriginHashesCopy() const;
65     const PlugInAutoStartOrigins& autoStartOrigins() const { return m_autoStartOrigins; }
66
67 private:
68     WebProcessPool* m_processPool;
69
70     void setAutoStartOriginsTableWithItemsPassingTest(API::Dictionary&, std::function<bool(double expirationTimestamp)>);
71
72     typedef HashMap<String, PlugInAutoStartOriginMap, CaseFoldingHash> AutoStartTable;
73     typedef HashMap<WebCore::SessionID, AutoStartTable> SessionAutoStartTable;
74     SessionAutoStartTable m_autoStartTable;
75
76     HashMap<WebCore::SessionID, HashMap<unsigned, String>> m_hashToOriginMap;
77
78     PlugInAutoStartOrigins m_autoStartOrigins;
79 };
80
81 } // namespace WebKit
82
83 #endif /* PlugInAutoStartProvider_h */