Move URL from WebCore to WTF
[WebKit-https.git] / Source / WebKitLegacy / win / WebHistory.h
1 /*
2  * Copyright (C) 2006-2008, 2015 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. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef WebHistory_H
27 #define WebHistory_H
28
29 #include "WebKit.h"
30 #include <WebCore/COMPtr.h>
31 #include <memory>
32 #include <wtf/Forward.h>
33 #include <wtf/HashMap.h>
34
35 namespace WebCore {
36 class PageGroup;
37 }
38
39 //-----------------------------------------------------------------------------
40
41 class WebPreferences;
42 class WebVisitedLinkStore;
43
44 class WebHistory : public IWebHistory, public IWebHistoryPrivate {
45 public:
46     static WebHistory* createInstance();
47 private:
48     WebHistory();
49     ~WebHistory();
50
51 public:
52     // IUnknown
53     HRESULT STDMETHODCALLTYPE QueryInterface(_In_ REFIID riid, _COM_Outptr_ void** ppvObject) override;
54     ULONG STDMETHODCALLTYPE AddRef() override;
55     ULONG STDMETHODCALLTYPE Release() override;
56
57     // IWebHistory
58     HRESULT STDMETHODCALLTYPE optionalSharedHistory(_COM_Outptr_opt_ IWebHistory**) override;
59     HRESULT STDMETHODCALLTYPE setOptionalSharedHistory(_In_opt_ IWebHistory*) override;
60     HRESULT STDMETHODCALLTYPE unused1() override;
61     HRESULT STDMETHODCALLTYPE unused2() override;
62     HRESULT STDMETHODCALLTYPE addItems(int itemCount, __deref_in_ecount_opt(itemCount) IWebHistoryItem**) override;
63     HRESULT STDMETHODCALLTYPE removeItems(int itemCount, __deref_in_ecount_opt(itemCount) IWebHistoryItem**) override;
64     HRESULT STDMETHODCALLTYPE removeAllItems() override;
65     HRESULT STDMETHODCALLTYPE orderedLastVisitedDays(_Inout_ int* count, _In_ DATE* calendarDates) override;
66     HRESULT STDMETHODCALLTYPE orderedItemsLastVisitedOnDay(_Inout_ int* count, __deref_in_opt IWebHistoryItem** items, DATE calendarDate) override;
67     HRESULT STDMETHODCALLTYPE itemForURL(_In_ BSTR url, _COM_Outptr_opt_ IWebHistoryItem**) override;
68     HRESULT STDMETHODCALLTYPE setHistoryItemLimit(int) override;
69     HRESULT STDMETHODCALLTYPE historyItemLimit(_Out_ int*) override;
70     HRESULT STDMETHODCALLTYPE setHistoryAgeInDaysLimit(int) override;
71     HRESULT STDMETHODCALLTYPE historyAgeInDaysLimit(_Out_ int*) override;
72
73     // IWebHistoryPrivate
74     HRESULT STDMETHODCALLTYPE allItems(_Inout_ int* count, __deref_opt_out IWebHistoryItem** items) override;
75     HRESULT STDMETHODCALLTYPE setVisitedLinkTrackingEnabled(BOOL) override;
76     HRESULT STDMETHODCALLTYPE removeAllVisitedLinks() override;
77
78     // WebHistory
79     static WebHistory* sharedHistory();
80     void visitedURL(const URL&, const WTF::String& title, const WTF::String& httpMethod, bool wasFailure, bool increaseVisitCount);
81     void addVisitedLinksToVisitedLinkStore(WebVisitedLinkStore&);
82
83     COMPtr<IWebHistoryItem> itemForURLString(const WTF::String&) const;
84
85     typedef int64_t DateKey;
86     typedef HashMap<DateKey, Vector<COMPtr<IWebHistoryItem>>> DateToEntriesMap;
87     typedef HashMap<WTF::String, COMPtr<IWebHistoryItem>> URLToEntriesMap;
88
89 private:
90
91     enum NotificationType
92     {
93         kWebHistoryItemsAddedNotification = 0,
94         kWebHistoryItemsRemovedNotification = 1,
95         kWebHistoryAllItemsRemovedNotification = 2,
96         kWebHistoryLoadedNotification = 3,
97         kWebHistoryItemsDiscardedWhileLoadingNotification = 4,
98         kWebHistorySavedNotification = 5
99     };
100
101     HRESULT postNotification(NotificationType notifyType, IPropertyBag* userInfo = 0);
102     HRESULT removeItem(IWebHistoryItem* entry);
103     HRESULT addItem(IWebHistoryItem* entry, bool discardDuplicate, bool* added);
104     HRESULT removeItemForURLString(const WTF::String& urlString);
105     BSTR getNotificationString(NotificationType notifyType);
106
107     ULONG m_refCount { 0 };
108     URLToEntriesMap m_entriesByURL;
109     COMPtr<WebPreferences> m_preferences;
110 };
111
112 #endif