flutter_flutter/engine/web/WebLocalFrameImpl.h
Ojan Vafai 3ffd336ad5 Remove relayout due to scrollbars taking up width
We only have overlay scrollbars, so we never need to
relayout due to the lack or presence of scrollbars.

Also remove a few stracking has*Scrollbar methods.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/783393006
2014-12-09 19:48:50 -08:00

175 lines
7.6 KiB
C++

/*
* Copyright (C) 2009 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 SKY_ENGINE_WEB_WEBLOCALFRAMEIMPL_H_
#define SKY_ENGINE_WEB_WEBLOCALFRAMEIMPL_H_
#include "sky/engine/core/frame/LocalFrame.h"
#include "sky/engine/platform/geometry/FloatRect.h"
#include "sky/engine/public/web/WebLocalFrame.h"
#include "sky/engine/web/FrameLoaderClientImpl.h"
#include "sky/engine/wtf/Compiler.h"
#include "sky/engine/wtf/OwnPtr.h"
#include "sky/engine/wtf/RefCounted.h"
#include "sky/engine/wtf/text/WTFString.h"
namespace blink {
class GraphicsContext;
class IntSize;
class KURL;
class Node;
class Range;
class WebFrameClient;
class WebView;
class WebViewImpl;
template <typename T> class WebVector;
// Implementation of WebFrame, note that this is a reference counted object.
class WebLocalFrameImpl final
: public WebLocalFrame
, public RefCounted<WebLocalFrameImpl> {
public:
// WebFrame methods:
virtual bool isWebLocalFrame() const override;
virtual WebLocalFrame* toWebLocalFrame() override;
virtual void close() override;
virtual WebSize contentsSize() const override;
virtual bool hasVisibleContent() const override;
virtual WebRect visibleContentRect() const override;
virtual WebView* view() const override;
virtual WebDocument document() const override;
virtual void executeScript(const WebScriptSource&) override;
virtual void addMessageToConsole(const WebConsoleMessage&) override;
virtual void collectGarbage() override;
virtual v8::Handle<v8::Value> executeScriptAndReturnValue(
const WebScriptSource&) override;
virtual v8::Handle<v8::Value> callFunctionEvenIfScriptDisabled(
v8::Handle<v8::Function>,
v8::Handle<v8::Value>,
int argc,
v8::Handle<v8::Value> argv[]) override;
virtual v8::Local<v8::Context> mainWorldScriptContext() const override;
virtual void load(const WebURL&, mojo::ScopedDataPipeConsumerHandle);
virtual void setReferrerForRequest(WebURLRequest&, const WebURL& referrer) override;
virtual unsigned unloadListenerCount() const override;
virtual void replaceSelection(const WebString&) override;
virtual void insertText(const WebString&) override;
virtual void setMarkedText(const WebString&, unsigned location, unsigned length) override;
virtual void unmarkText() override;
virtual bool hasMarkedText() const override;
virtual WebRange markedRange() const override;
virtual bool firstRectForCharacterRange(unsigned location, unsigned length, WebRect&) const override;
virtual size_t characterIndexForPoint(const WebPoint&) const override;
virtual bool executeCommand(const WebString&, const WebNode& = WebNode()) override;
virtual bool executeCommand(const WebString&, const WebString& value, const WebNode& = WebNode()) override;
virtual bool isCommandEnabled(const WebString&) const override;
virtual void enableContinuousSpellChecking(bool) override;
virtual bool isContinuousSpellCheckingEnabled() const override;
virtual void requestTextChecking(const WebElement&) override;
virtual void replaceMisspelledRange(const WebString&) override;
virtual void removeSpellingMarkers() override;
virtual bool hasSelection() const override;
virtual WebRange selectionRange() const override;
virtual WebString selectionAsText() const override;
virtual bool selectWordAroundCaret() override;
virtual void selectRange(const WebPoint& base, const WebPoint& extent) override;
virtual void selectRange(const WebRange&) override;
virtual void moveRangeSelection(const WebPoint& base, const WebPoint& extent) override;
virtual void moveCaretSelection(const WebPoint&) override;
virtual bool setEditableSelectionOffsets(int start, int end) override;
virtual bool setCompositionFromExistingText(int compositionStart, int compositionEnd, const WebVector<WebCompositionUnderline>& underlines) override;
virtual void extendSelectionAndDelete(int before, int after) override;
virtual void setCaretVisible(bool) override;
virtual WebString contentAsText(size_t maxChars) const override;
virtual WebString renderTreeAsText(RenderAsTextControls toShow = RenderAsTextNormal) const override;
virtual bool selectionStartHasSpellingMarkerFor(int from, int length) const override;
static WebLocalFrameImpl* create(WebFrameClient*);
virtual ~WebLocalFrameImpl();
PassRefPtr<LocalFrame> initializeCoreFrame(FrameHost*);
void createFrameView();
static WebLocalFrameImpl* fromFrame(LocalFrame*);
static WebLocalFrameImpl* fromFrame(LocalFrame&);
WebViewImpl* viewImpl() const;
FrameView* frameView() const { return frame() ? frame()->view() : 0; }
void didFail(const ResourceError&);
LocalFrame* frame() const { return m_frame.get(); }
WebFrameClient* client() const { return m_client; }
void setClient(WebFrameClient* client) { m_client = client; }
void setInputEventsTransformForEmulation(const IntSize&, float);
static void selectWordAroundPosition(LocalFrame*, VisiblePosition);
// Invalidates both content area and the scrollbar.
void invalidateAll() const;
// Returns a hit-tested VisiblePosition for the given point
VisiblePosition visiblePositionForWindowPoint(const WebPoint&);
private:
friend class FrameLoaderClientImpl;
explicit WebLocalFrameImpl(WebFrameClient*);
// Sets the local core frame and registers destruction observers.
void setCoreFrame(PassRefPtr<LocalFrame>);
FrameLoaderClientImpl m_frameLoaderClientImpl;
// The embedder retains a reference to the WebCore LocalFrame while it is active in the DOM. This
// reference is released when the frame is removed from the DOM or the entire page is closed.
// FIXME: These will need to change to WebFrame when we introduce WebFrameProxy.
RefPtr<LocalFrame> m_frame;
WebFrameClient* m_client;
// Stores the additional input events offset and scale when device metrics emulation is enabled.
IntSize m_inputEventsOffsetForEmulation;
float m_inputEventsScaleFactorForEmulation;
};
DEFINE_TYPE_CASTS(WebLocalFrameImpl, WebFrame, frame, frame->isWebLocalFrame(), frame.isWebLocalFrame());
} // namespace blink
#endif // SKY_ENGINE_WEB_WEBLOCALFRAMEIMPL_H_