summaryrefslogtreecommitdiff
path: root/Source/WebCore/page/MainFrame.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/page/MainFrame.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/page/MainFrame.cpp')
-rw-r--r--Source/WebCore/page/MainFrame.cpp132
1 files changed, 103 insertions, 29 deletions
diff --git a/Source/WebCore/page/MainFrame.cpp b/Source/WebCore/page/MainFrame.cpp
index 054a0625c..8b6be3132 100644
--- a/Source/WebCore/page/MainFrame.cpp
+++ b/Source/WebCore/page/MainFrame.cpp
@@ -1,43 +1,72 @@
/*
-
-Copyright (C) 2013 Apple Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
-EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*/
+ * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
#include "config.h"
#include "MainFrame.h"
+#include "Element.h"
+#include "PageConfiguration.h"
+#include "PageOverlayController.h"
+#include "PaymentCoordinator.h"
+#include "PerformanceLogging.h"
+#include "ScrollLatchingState.h"
+#include "WheelEventDeltaFilter.h"
+#include <wtf/NeverDestroyed.h>
+
+#if PLATFORM(MAC)
+#include "ServicesOverlayController.h"
+#endif
+
namespace WebCore {
-inline MainFrame::MainFrame(Page& page, FrameLoaderClient& client)
- : Frame(page, nullptr, client)
+inline MainFrame::MainFrame(Page& page, PageConfiguration& configuration)
+ : Frame(page, nullptr, *configuration.loaderClientForMainFrame)
, m_selfOnlyRefCount(0)
+#if PLATFORM(MAC) && (ENABLE(SERVICE_CONTROLS) || ENABLE(TELEPHONE_NUMBER_DETECTION))
+ , m_servicesOverlayController(std::make_unique<ServicesOverlayController>(*this))
+#endif
+ , m_recentWheelEventDeltaFilter(WheelEventDeltaFilter::create())
+ , m_pageOverlayController(std::make_unique<PageOverlayController>(*this))
+#if ENABLE(APPLE_PAY)
+ , m_paymentCoordinator(std::make_unique<PaymentCoordinator>(*configuration.paymentCoordinatorClient))
+#endif
+ , m_performanceLogging(std::make_unique<PerformanceLogging>(*this))
{
}
-RefPtr<MainFrame> MainFrame::create(Page& page, FrameLoaderClient& client)
+MainFrame::~MainFrame()
+{
+ m_recentWheelEventDeltaFilter = nullptr;
+ m_eventHandler = nullptr;
+
+ setMainFrameWasDestroyed();
+}
+
+Ref<MainFrame> MainFrame::create(Page& page, PageConfiguration& configuration)
{
- return adoptRef(new MainFrame(page, client));
+ return adoptRef(*new MainFrame(page, configuration));
}
void MainFrame::selfOnlyRef()
@@ -63,7 +92,52 @@ void MainFrame::selfOnlyDeref()
void MainFrame::dropChildren()
{
while (Frame* child = tree().firstChild())
- tree().removeChild(child);
+ tree().removeChild(*child);
+}
+
+void MainFrame::didCompleteLoad()
+{
+ m_timeOfLastCompletedLoad = MonotonicTime::now();
+ performanceLogging().didReachPointOfInterest(PerformanceLogging::MainFrameLoadCompleted);
+}
+
+#if PLATFORM(MAC)
+ScrollLatchingState* MainFrame::latchingState()
+{
+ if (m_latchingState.isEmpty())
+ return nullptr;
+
+ return &m_latchingState.last();
+}
+
+void MainFrame::pushNewLatchingState()
+{
+ m_latchingState.append(ScrollLatchingState());
+}
+
+void MainFrame::resetLatchingState()
+{
+ m_latchingState.clear();
+}
+
+void MainFrame::popLatchingState()
+{
+ m_latchingState.removeLast();
+}
+
+void MainFrame::removeLatchingStateForTarget(Element& targetNode)
+{
+ if (m_latchingState.isEmpty())
+ return;
+
+ m_latchingState.removeAllMatching([&targetNode] (ScrollLatchingState& state) {
+ auto* wheelElement = state.wheelEventElement();
+ if (!wheelElement)
+ return false;
+
+ return targetNode.isEqualNode(wheelElement);
+ });
}
+#endif
}