blob: 2e4540559941717a93a0abe315552313434981df [file] [log] [blame]
/*
* Copyright (C) 2013-2017 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.
*/
#pragma once
#include "Frame.h"
#include <wtf/Optional.h>
#include <wtf/Vector.h>
#if ENABLE(APPLICATION_MANIFEST)
#include "ApplicationManifest.h"
#endif
namespace WebCore {
class PageConfiguration;
class PageOverlayController;
class PaymentCoordinator;
class PerformanceLogging;
class ScrollLatchingState;
class ServicesOverlayController;
class WheelEventDeltaFilter;
class MainFrame final : public Frame {
public:
static Ref<MainFrame> create(Page&, PageConfiguration&);
virtual ~MainFrame();
void selfOnlyRef();
void selfOnlyDeref();
WheelEventDeltaFilter* wheelEventDeltaFilter() { return m_recentWheelEventDeltaFilter.get(); }
PageOverlayController& pageOverlayController() { return *m_pageOverlayController; }
#if PLATFORM(MAC)
#if ENABLE(SERVICE_CONTROLS) || ENABLE(TELEPHONE_NUMBER_DETECTION)
ServicesOverlayController& servicesOverlayController() { return *m_servicesOverlayController; }
#endif // ENABLE(SERVICE_CONTROLS) || ENABLE(TELEPHONE_NUMBER_DETECTION)
ScrollLatchingState* latchingState();
void pushNewLatchingState();
void popLatchingState();
void resetLatchingState();
void removeLatchingStateForTarget(Element&);
#endif // PLATFORM(MAC)
#if ENABLE(APPLE_PAY)
PaymentCoordinator& paymentCoordinator() const { return *m_paymentCoordinator; }
WEBCORE_EXPORT void setPaymentCoordinator(std::unique_ptr<PaymentCoordinator>&&);
#endif
#if ENABLE(APPLICATION_MANIFEST)
const std::optional<ApplicationManifest>& applicationManifest() const { return m_applicationManifest; }
#endif
PerformanceLogging& performanceLogging() const { return *m_performanceLogging; }
void didCompleteLoad();
private:
MainFrame(Page&, PageConfiguration&);
void dropChildren();
unsigned m_selfOnlyRefCount;
#if PLATFORM(MAC)
Vector<ScrollLatchingState> m_latchingState;
#if ENABLE(SERVICE_CONTROLS) || ENABLE(TELEPHONE_NUMBER_DETECTION)
std::unique_ptr<ServicesOverlayController> m_servicesOverlayController;
#endif
#endif
std::unique_ptr<WheelEventDeltaFilter> m_recentWheelEventDeltaFilter;
std::unique_ptr<PageOverlayController> m_pageOverlayController;
#if ENABLE(APPLE_PAY)
std::unique_ptr<PaymentCoordinator> m_paymentCoordinator;
#endif
#if ENABLE(APPLICATION_MANIFEST)
std::optional<ApplicationManifest> m_applicationManifest;
#endif
std::unique_ptr<PerformanceLogging> m_performanceLogging;
unsigned m_navigationDisableCount { 0 };
friend class NavigationDisabler;
};
} // namespace WebCore