#ifndef WebViewImpl_h
#define WebViewImpl_h
#include "../public/WebNavigationPolicy.h"
#include "../public/WebPoint.h"
#include "../public/WebSize.h"
#include "../public/WebString.h"
#include "../public/WebView.h"
#include "BackForwardListClientImpl.h"
#include "ChromeClientImpl.h"
#include "ContextMenuClientImpl.h"
#include "DragClientImpl.h"
#include "EditorClientImpl.h"
#include "GraphicsLayer.h"
#include "InspectorClientImpl.h"
#include "LayerRendererChromium.h"
#include "NotificationPresenterImpl.h"
#include <wtf/OwnPtr.h>
#include <wtf/RefCounted.h>
namespace WebCore {
class ChromiumDataObject;
class Frame;
class HistoryItem;
class HitTestResult;
class KeyboardEvent;
class Page;
class PlatformKeyboardEvent;
class PopupContainer;
class PopupMenuClient;
class Range;
class RenderTheme;
class Widget;
}
namespace WebKit {
class AutocompletePopupMenuClient;
class AutoFillPopupMenuClient;
class ContextMenuClientImpl;
class SuggestionsPopupMenuClient;
class WebAccessibilityObject;
class WebDevToolsAgentPrivate;
class WebFrameImpl;
class WebImage;
class WebKeyboardEvent;
class WebMouseEvent;
class WebMouseWheelEvent;
class WebSettingsImpl;
class WebTouchEvent;
class WebViewImpl : public WebView, public RefCounted<WebViewImpl> {
public:
virtual void close();
virtual WebSize size() { return m_size; }
virtual void resize(const WebSize&);
virtual void layout();
virtual void paint(WebCanvas*, const WebRect&);
virtual bool handleInputEvent(const WebInputEvent&);
virtual void mouseCaptureLost();
virtual void setFocus(bool enable);
virtual bool handleCompositionEvent(WebCompositionCommand command,
int cursorPosition,
int targetStart,
int targetEnd,
const WebString& text);
virtual bool queryCompositionStatus(bool* enabled,
WebRect* caretRect);
virtual void setTextDirection(WebTextDirection direction);
virtual bool isAcceleratedCompositingActive() const;
virtual void initializeMainFrame(WebFrameClient*);
virtual WebSettings* settings();
virtual WebString pageEncoding() const;
virtual void setPageEncoding(const WebString& encoding);
virtual bool isTransparent() const;
virtual void setIsTransparent(bool value);
virtual bool tabsToLinks() const;
virtual void setTabsToLinks(bool value);
virtual bool tabKeyCyclesThroughElements() const;
virtual void setTabKeyCyclesThroughElements(bool value);
virtual bool isActive() const;
virtual void setIsActive(bool value);
virtual bool dispatchBeforeUnloadEvent();
virtual void dispatchUnloadEvent();
virtual WebFrame* mainFrame();
virtual WebFrame* findFrameByName(
const WebString& name, WebFrame* relativeToFrame);
virtual WebFrame* focusedFrame();
virtual void setFocusedFrame(WebFrame* frame);
virtual void setInitialFocus(bool reverse);
virtual void clearFocusedNode();
virtual int zoomLevel();
virtual int setZoomLevel(bool textOnly, int zoomLevel);
virtual void performMediaPlayerAction(
const WebMediaPlayerAction& action,
const WebPoint& location);
virtual void copyImageAt(const WebPoint& point);
virtual void dragSourceEndedAt(
const WebPoint& clientPoint,
const WebPoint& screenPoint,
WebDragOperation operation);
virtual void dragSourceSystemDragEnded();
virtual WebDragOperation dragTargetDragEnter(
const WebDragData& dragData, int identity,
const WebPoint& clientPoint,
const WebPoint& screenPoint,
WebDragOperationsMask operationsAllowed);
virtual WebDragOperation dragTargetDragOver(
const WebPoint& clientPoint,
const WebPoint& screenPoint,
WebDragOperationsMask operationsAllowed);
virtual void dragTargetDragLeave();
virtual void dragTargetDrop(
const WebPoint& clientPoint,
const WebPoint& screenPoint);
virtual int dragIdentity();
virtual bool setDropEffect(bool accept);
virtual unsigned long createUniqueIdentifierForRequest();
virtual void inspectElementAt(const WebPoint& point);
virtual WebString inspectorSettings() const;
virtual void setInspectorSettings(const WebString& settings);
virtual WebDevToolsAgent* devToolsAgent();
virtual void setDevToolsAgent(WebDevToolsAgent*);
virtual WebAccessibilityObject accessibilityObject();
virtual void applyAutoFillSuggestions(
const WebNode&,
const WebVector<WebString>& names,
const WebVector<WebString>& labels,
int defaultSuggestionIndex);
virtual void applyAutocompleteSuggestions(
const WebNode&,
const WebVector<WebString>& suggestions,
int defaultSuggestionIndex);
virtual void hidePopups();
virtual void setScrollbarColors(unsigned inactiveColor,
unsigned activeColor,
unsigned trackColor);
virtual void setSelectionColors(unsigned activeBackgroundColor,
unsigned activeForegroundColor,
unsigned inactiveBackgroundColor,
unsigned inactiveForegroundColor);
virtual void performCustomContextMenuAction(unsigned action);
virtual void addUserScript(const WebString& sourceCode,
bool runAtStart);
virtual void addUserStyleSheet(const WebString& sourceCode);
virtual void removeAllUserContent();
void setIgnoreInputEvents(bool newValue);
WebDevToolsAgentPrivate* devToolsAgentPrivate() { return m_devToolsAgent.get(); }
const WebPoint& lastMouseDownPoint() const
{
return m_lastMouseDownPoint;
}
WebCore::Frame* focusedWebCoreFrame();
WebCore::Node* focusedWebCoreNode();
static WebViewImpl* fromPage(WebCore::Page*);
WebViewClient* client()
{
return m_client;
}
WebCore::Page* page() const
{
return m_page.get();
}
WebCore::RenderTheme* theme() const;
WebFrameImpl* mainFrameImpl();
void setCurrentHistoryItem(WebCore::HistoryItem*);
WebCore::HistoryItem* previousHistoryItem();
void observeNewNavigation();
void mouseMove(const WebMouseEvent&);
void mouseLeave(const WebMouseEvent&);
void mouseDown(const WebMouseEvent&);
void mouseUp(const WebMouseEvent&);
void mouseContextMenu(const WebMouseEvent&);
void mouseDoubleClick(const WebMouseEvent&);
void mouseWheel(const WebMouseWheelEvent&);
bool keyEvent(const WebKeyboardEvent&);
bool charEvent(const WebKeyboardEvent&);
bool touchEvent(const WebTouchEvent&);
bool sendContextMenuEvent(const WebKeyboardEvent&);
void didCommitLoad(bool* isNewNavigation);
bool contextMenuAllowed() const
{
return m_contextMenuAllowed;
}
void setInitialNavigationPolicy(WebNavigationPolicy policy)
{
m_initialNavigationPolicy = policy;
}
WebNavigationPolicy initialNavigationPolicy() const
{
return m_initialNavigationPolicy;
}
static bool navigationPolicyFromMouseEvent(
unsigned short button,
bool ctrl,
bool shift,
bool alt,
bool meta,
WebNavigationPolicy*);
void startDragging(
const WebDragData& dragData,
WebDragOperationsMask mask,
const WebImage& dragImage,
const WebPoint& dragImageOffset);
void suggestionsPopupDidHide()
{
m_suggestionsPopupShowing = false;
}
#if ENABLE(NOTIFICATIONS)
NotificationPresenterImpl* notificationPresenterImpl();
#endif
bool propagateScroll(WebCore::ScrollDirection, WebCore::ScrollGranularity);
void popupOpened(WebCore::PopupContainer* popupContainer);
void popupClosed(WebCore::PopupContainer* popupContainer);
void hideSuggestionsPopup();
static const WebInputEvent* currentInputEvent()
{
return m_currentInputEvent;
}
#if USE(ACCELERATED_COMPOSITING)
void setRootLayerNeedsDisplay();
void setRootGraphicsLayer(WebCore::PlatformLayer*);
#endif
WebCore::PopupContainer* selectPopup() const { return m_selectPopup.get(); }
private:
friend class WebView; friend class WTF::RefCounted<WebViewImpl>;
enum DragAction {
DragEnter,
DragOver
};
WebViewImpl(WebViewClient* client);
~WebViewImpl();
bool keyEventDefault(const WebKeyboardEvent&);
bool selectPopupHandleKeyEvent(const WebKeyboardEvent&);
bool autocompleteHandleKeyEvent(const WebKeyboardEvent&);
void refreshSuggestionsPopup();
bool scrollViewWithKeyboard(int keyCode, int modifiers);
void hideSelectPopup();
WebCore::HitTestResult hitTestResultForWindowPos(const WebCore::IntPoint&);
WebDragOperation dragTargetDragEnterOrOver(const WebPoint& clientPoint,
const WebPoint& screenPoint,
DragAction);
#if USE(ACCELERATED_COMPOSITING)
void setIsAcceleratedCompositingActive(bool);
void updateRootLayerContents(const WebRect&);
#endif
WebViewClient* m_client;
BackForwardListClientImpl m_backForwardListClientImpl;
ChromeClientImpl m_chromeClientImpl;
ContextMenuClientImpl m_contextMenuClientImpl;
DragClientImpl m_dragClientImpl;
EditorClientImpl m_editorClientImpl;
InspectorClientImpl m_inspectorClientImpl;
WebSize m_size;
WebPoint m_lastMousePosition;
OwnPtr<WebCore::Page> m_page;
bool m_observedNewNavigation;
#ifndef NDEBUG
const WebCore::DocumentLoader* m_newNavigationLoader;
#endif
OwnPtr<WebSettingsImpl> m_webSettings;
RefPtr<WebCore::ChromiumDataObject> m_currentDragData;
WebPoint m_lastMouseDownPoint;
int m_zoomLevel;
bool m_contextMenuAllowed;
bool m_doingDragAndDrop;
bool m_ignoreInputEvents;
bool m_suppressNextKeypressEvent;
WebNavigationPolicy m_initialNavigationPolicy;
bool m_imeAcceptEvents;
bool m_dragTargetDispatch;
int m_dragIdentity;
enum DragTargetDropEffect {
DropEffectDefault = -1,
DropEffectNone,
DropEffectCopy
} m_dropEffect;
WebDragOperation m_operationsAllowed;
WebDragOperation m_dragOperation;
bool m_suggestionsPopupShowing;
SuggestionsPopupMenuClient* m_suggestionsPopupClient;
OwnPtr<AutoFillPopupMenuClient> m_autoFillPopupClient;
OwnPtr<AutocompletePopupMenuClient> m_autocompletePopupClient;
WebCore::PopupContainer* m_suggestionsPopup;
RefPtr<WebCore::PopupContainer> m_selectPopup;
RefPtr<WebCore::PopupContainer> m_autoFillPopup;
RefPtr<WebCore::PopupContainer> m_autocompletePopup;
OwnPtr<WebDevToolsAgentPrivate> m_devToolsAgent;
bool m_isTransparent;
bool m_tabsToLinks;
WebString m_inspectorSettings;
#if ENABLE(NOTIFICATIONS)
NotificationPresenterImpl m_notificationPresenter;
#endif
bool m_haveMouseCapture;
#if USE(ACCELERATED_COMPOSITING)
OwnPtr<WebCore::LayerRendererChromium> m_layerRenderer;
bool m_isAcceleratedCompositingActive;
#endif
static const WebInputEvent* m_currentInputEvent;
};
}
#endif