fda118309ca27015d3eec4ad1e9ffbc5af7616fe
[WebKit-https.git] / Source / WebCore / page / MainFrame.cpp
1 /*
2  * Copyright (C) 2013-2014 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 #include "config.h"
27 #include "MainFrame.h"
28
29 #include "Element.h"
30 #include "PageConfiguration.h"
31 #include "PageOverlayController.h"
32 #include "ScrollLatchingState.h"
33 #include "WheelEventDeltaTracker.h"
34
35 #if PLATFORM(MAC)
36 #include "ServicesOverlayController.h"
37 #endif
38
39 namespace WebCore {
40
41 inline MainFrame::MainFrame(Page& page, PageConfiguration& configuration)
42     : Frame(page, nullptr, *configuration.loaderClientForMainFrame)
43     , m_selfOnlyRefCount(0)
44 #if PLATFORM(MAC)
45 #if ENABLE(SERVICE_CONTROLS) || ENABLE(TELEPHONE_NUMBER_DETECTION)
46     , m_servicesOverlayController(std::make_unique<ServicesOverlayController>(*this))
47 #endif
48 #endif
49     , m_recentWheelEventDeltaTracker(std::make_unique<WheelEventDeltaTracker>())
50     , m_pageOverlayController(std::make_unique<PageOverlayController>(*this))
51     , m_diagnosticLoggingClient(configuration.diagnosticLoggingClient)
52 {
53 }
54
55 MainFrame::~MainFrame()
56 {
57 }
58
59 RefPtr<MainFrame> MainFrame::create(Page& page, PageConfiguration& configuration)
60 {
61     return adoptRef(new MainFrame(page, configuration));
62 }
63
64 void MainFrame::selfOnlyRef()
65 {
66     if (m_selfOnlyRefCount++)
67         return;
68
69     ref();
70 }
71
72 void MainFrame::selfOnlyDeref()
73 {
74     ASSERT(m_selfOnlyRefCount);
75     if (--m_selfOnlyRefCount)
76         return;
77
78     if (hasOneRef())
79         dropChildren();
80
81     deref();
82 }
83
84 void MainFrame::dropChildren()
85 {
86     while (Frame* child = tree().firstChild())
87         tree().removeChild(child);
88 }
89
90 #if PLATFORM(MAC)
91 ScrollLatchingState* MainFrame::latchingState()
92 {
93     if (m_latchingState.isEmpty())
94         return nullptr;
95
96     return &m_latchingState.last();
97 }
98
99 void MainFrame::pushNewLatchingState()
100 {
101     m_latchingState.append(ScrollLatchingState());
102 }
103
104 void MainFrame::resetLatchingState()
105 {
106     m_latchingState.clear();
107 }
108     
109 void MainFrame::popLatchingState()
110 {
111     m_latchingState.removeLast();
112 }
113
114 #endif
115
116 }