blob: e73f3f5375d3eea5b9610332403b8dee6e9dbaef [file] [log] [blame]
/*
* Copyright (C) 2013 Google 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:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * 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.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT
* OWNER 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.
*/
#ifndef FrameHost_h
#define FrameHost_h
#include "core/CoreExport.h"
#include "platform/heap/Handle.h"
#include "wtf/Allocator.h"
#include "wtf/Noncopyable.h"
#include "wtf/OwnPtr.h"
#include "wtf/PassOwnPtr.h"
#include "wtf/text/AtomicString.h"
namespace blink {
class ChromeClient;
class ConsoleMessageStorage;
class Deprecation;
class EventHandlerRegistry;
class OverscrollController;
class Page;
struct PageScaleConstraints;
class PageScaleConstraintsSet;
class RootScroller;
class Settings;
class TopControls;
class UseCounter;
class Visitor;
class VisualViewport;
// FrameHost is the set of global data shared between multiple frames
// and is provided by the embedder to each frame when created.
// FrameHost currently corresponds to the Page object in core/page
// however the concept of a Page is moving up out of Blink.
// In an out-of-process iframe world, a single Page may have
// multiple frames in different process, thus Page becomes a
// browser-level concept and Blink core/ only knows about its LocalFrame (and FrameHost).
// Separating Page from the rest of core/ through this indirection
// allows us to slowly refactor Page without breaking the rest of core.
class CORE_EXPORT FrameHost final : public GarbageCollectedFinalized<FrameHost> {
WTF_MAKE_NONCOPYABLE(FrameHost);
public:
static FrameHost* create(Page&);
~FrameHost();
// Careful: This function will eventually be removed.
Page& page();
const Page& page() const;
Settings& settings();
const Settings& settings() const;
ChromeClient& chromeClient();
const ChromeClient& chromeClient() const;
UseCounter& useCounter();
const UseCounter& useCounter() const;
Deprecation& deprecation();
const Deprecation& deprecation() const;
// Corresponds to pixel density of the device where this Page is
// being displayed. In multi-monitor setups this can vary between pages.
// This value does not account for Page zoom, use LocalFrame::devicePixelRatio instead.
// This is to be deprecated. Use this with caution.
// 1) If you need to scale the content per device scale factor, this is still valid.
// In use-zoom-for-dsf mode, this is always 1, and will be remove when transition is complete.
// 2) If you want to compute the device related measure (such as device pixel height, or the scale factor for drag image),
// use ChromeClient::screenInfo() instead.
float deviceScaleFactorDeprecated() const;
RootScroller* rootScroller();
const RootScroller* rootScroller() const;
TopControls& topControls();
const TopControls& topControls() const;
OverscrollController& overscrollController();
const OverscrollController& overscrollController() const;
VisualViewport& visualViewport();
const VisualViewport& visualViewport() const;
PageScaleConstraintsSet& pageScaleConstraintsSet();
const PageScaleConstraintsSet& pageScaleConstraintsSet() const;
EventHandlerRegistry& eventHandlerRegistry();
const EventHandlerRegistry& eventHandlerRegistry() const;
const AtomicString& overrideEncoding() const { return m_overrideEncoding; }
void setOverrideEncoding(const AtomicString& encoding) { m_overrideEncoding = encoding; }
ConsoleMessageStorage& consoleMessageStorage();
const ConsoleMessageStorage& consoleMessageStorage() const;
DECLARE_TRACE();
// Don't allow more than a certain number of frames in a page.
// This seems like a reasonable upper bound, and otherwise mutually
// recursive frameset pages can quickly bring the program to its knees
// with exponential growth in the number of frames.
static const int maxNumberOfFrames = 1000;
void incrementSubframeCount() { ++m_subframeCount; }
void decrementSubframeCount() { ASSERT(m_subframeCount); --m_subframeCount; }
int subframeCount() const;
void setDefaultPageScaleLimits(float minScale, float maxScale);
void setUserAgentPageScaleConstraints(const PageScaleConstraints& newConstraints);
private:
explicit FrameHost(Page&);
const Member<Page> m_page;
const Member<RootScroller> m_rootScroller;
const Member<TopControls> m_topControls;
const OwnPtr<PageScaleConstraintsSet> m_pageScaleConstraintsSet;
const Member<VisualViewport> m_visualViewport;
const Member<OverscrollController> m_overscrollController;
const Member<EventHandlerRegistry> m_eventHandlerRegistry;
const Member<ConsoleMessageStorage> m_consoleMessageStorage;
AtomicString m_overrideEncoding;
int m_subframeCount;
};
} // namespace blink
#endif // FrameHost_h