[WTF] Clean up StringStatics.cpp by using LazyNeverDestroyed<> for Atoms
[WebKit-https.git] / Source / WebCore / loader / NavigationAction.h
1 /*
2  * Copyright (C) 2006-2017 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  *
8  * 1.  Redistributions of source code must retain the above copyright
9  *     notice, this list of conditions and the following disclaimer. 
10  * 2.  Redistributions in binary form must reproduce the above copyright
11  *     notice, this list of conditions and the following disclaimer in the
12  *     documentation and/or other materials provided with the distribution. 
13  * 3.  Neither the name of Apple Inc. ("Apple") nor the names of
14  *     its contributors may be used to endorse or promote products derived
15  *     from this software without specific prior written permission. 
16  *
17  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28
29 #pragma once
30
31 #include "FrameLoaderTypes.h"
32 #include "ResourceRequest.h"
33 #include "UserGestureIndicator.h"
34 #include <wtf/Forward.h>
35
36 namespace WebCore {
37
38 class Document;
39 class Event;
40
41 class NavigationAction {
42 public:
43     NavigationAction();
44     WEBCORE_EXPORT NavigationAction(Document&, const ResourceRequest&, NavigationType = NavigationType::Other, ShouldOpenExternalURLsPolicy = ShouldOpenExternalURLsPolicy::ShouldNotAllow, Event* = nullptr, const AtomicString& downloadAttribute = nullAtom());
45     NavigationAction(Document&, const ResourceRequest&, FrameLoadType, bool isFormSubmission, Event* = nullptr, ShouldOpenExternalURLsPolicy = ShouldOpenExternalURLsPolicy::ShouldNotAllow, const AtomicString& downloadAttribute = nullAtom());
46
47     WEBCORE_EXPORT ~NavigationAction();
48
49     WEBCORE_EXPORT NavigationAction(const NavigationAction&);
50     NavigationAction& operator=(const NavigationAction&);
51
52     NavigationAction(NavigationAction&&);
53     NavigationAction& operator=(NavigationAction&&);
54
55     NavigationAction copyWithShouldOpenExternalURLsPolicy(ShouldOpenExternalURLsPolicy) const;
56
57     bool isEmpty() const { return !m_sourceDocument || m_resourceRequest.url().isEmpty(); }
58
59     URL url() const { return m_resourceRequest.url(); }
60     const ResourceRequest& resourceRequest() const { return m_resourceRequest; }
61
62     NavigationType type() const { return m_type; }
63     const Event* event() const { return m_event.get(); }
64
65     const Document* sourceDocument() const { return m_sourceDocument.get(); }
66
67     bool processingUserGesture() const { return m_userGestureToken ? m_userGestureToken->processingUserGesture() : false; }
68     RefPtr<UserGestureToken> userGestureToken() const { return m_userGestureToken; }
69
70     ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy() const { return m_shouldOpenExternalURLsPolicy; }
71     NavigationInitiatedByMainFrame navigationInitiatedByMainFrame() const { return m_navigationInitiatedByMainFrame; }
72
73     const AtomicString& downloadAttribute() const { return m_downloadAttribute; }
74
75 private:
76     RefPtr<Document> m_sourceDocument;
77     ResourceRequest m_resourceRequest;
78     NavigationType m_type;
79     ShouldOpenExternalURLsPolicy m_shouldOpenExternalURLsPolicy;
80     NavigationInitiatedByMainFrame m_navigationInitiatedByMainFrame;
81     RefPtr<Event> m_event;
82     RefPtr<UserGestureToken> m_userGestureToken { UserGestureIndicator::currentUserGesture() };
83     AtomicString m_downloadAttribute;
84 };
85
86 } // namespace WebCore