WebViewImpl.h revision 2bde8e466a4451c7319e3a072d118917957d6554
1643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*
28a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Copyright (C) 2010 Google Inc. All rights reserved.
3643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *
4643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Redistribution and use in source and binary forms, with or without
5643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * modification, are permitted provided that the following conditions are
6643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * met:
7643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *
8643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *     * Redistributions of source code must retain the above copyright
9643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * notice, this list of conditions and the following disclaimer.
10643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *     * Redistributions in binary form must reproduce the above
11643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * copyright notice, this list of conditions and the following disclaimer
12643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * in the documentation and/or other materials provided with the
13643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * distribution.
14643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *     * Neither the name of Google Inc. nor the names of its
15643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * contributors may be used to endorse or promote products derived from
16643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * this software without specific prior written permission.
17643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *
18643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29643ca7872b450ea4efacab6188849e5aac2ba161Steve Block */
30643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
31643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#ifndef WebViewImpl_h
32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#define WebViewImpl_h
33643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
346c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#include "WebNavigationPolicy.h"
356c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#include "WebPoint.h"
3668513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "WebRect.h"
376c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#include "WebSize.h"
386c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#include "WebString.h"
396c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#include "WebView.h"
40643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
41643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "ChromeClientImpl.h"
42643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "ContextMenuClientImpl.h"
43643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "DragClientImpl.h"
44643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "EditorClientImpl.h"
4568513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "GraphicsContext3D.h"
46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "GraphicsLayer.h"
47643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "InspectorClientImpl.h"
4868513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "IntRect.h"
49dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "LayerRendererChromium.h"
50643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "NotificationPresenterImpl.h"
51643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include <wtf/OwnPtr.h>
52643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include <wtf/RefCounted.h>
53643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
54643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebCore {
55643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass ChromiumDataObject;
562fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockclass DocumentLoader;
57643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass Frame;
58643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass HistoryItem;
59643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass HitTestResult;
60643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass KeyboardEvent;
61643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass Page;
62643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass PlatformKeyboardEvent;
63643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass PopupContainer;
648a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockclass PopupMenuClient;
65643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass Range;
66643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass RenderTheme;
67643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass Widget;
68643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
69643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
70643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebKit {
71643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass AutocompletePopupMenuClient;
728a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockclass AutoFillPopupMenuClient;
73643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass ContextMenuClientImpl;
74dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochclass DeviceOrientationClientProxy;
7506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenclass DragScrollTimer;
76f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass GeolocationClientProxy;
77e14391e94c850b8bd03680c23b38978db68687a8John Reckclass SpeechInputClientImpl;
78643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebAccessibilityObject;
7906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenclass WebDevToolsAgentClient;
80643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebDevToolsAgentPrivate;
81643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebFrameImpl;
82dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass WebImage;
83643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebKeyboardEvent;
84643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebMouseEvent;
85643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebMouseWheelEvent;
86643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebSettingsImpl;
87dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass WebTouchEvent;
88643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
89643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebViewImpl : public WebView, public RefCounted<WebViewImpl> {
90643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockpublic:
91643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // WebWidget methods:
92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void close();
93643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual WebSize size() { return m_size; }
94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void resize(const WebSize&);
95ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    virtual void animate();
96643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void layout();
97643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void paint(WebCanvas*, const WebRect&);
9868513a70bcd92384395513322f1b801e7bf9c729Steve Block    virtual void themeChanged();
9968513a70bcd92384395513322f1b801e7bf9c729Steve Block    virtual void composite(bool finish);
100643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual bool handleInputEvent(const WebInputEvent&);
101643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void mouseCaptureLost();
102643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void setFocus(bool enable);
10306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    virtual bool setComposition(
10406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        const WebString& text,
10506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        const WebVector<WebCompositionUnderline>& underlines,
10606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        int selectionStart,
10706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        int selectionEnd);
10806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    virtual bool confirmComposition();
109cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool confirmComposition(const WebString& text);
11006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    virtual WebTextInputType textInputType();
11106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    virtual WebRect caretOrSelectionBounds();
112643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void setTextDirection(WebTextDirection direction);
11321939df44de1705786c545cd1bf519d47250322dBen Murdoch    virtual bool isAcceleratedCompositingActive() const;
114643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
115643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // WebView methods:
116643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void initializeMainFrame(WebFrameClient*);
1172bde8e466a4451c7319e3a072d118917957d6554Steve Block    virtual void setDevToolsAgentClient(WebDevToolsAgentClient*);
1182bde8e466a4451c7319e3a072d118917957d6554Steve Block    virtual void setAutoFillClient(WebAutoFillClient*);
1192bde8e466a4451c7319e3a072d118917957d6554Steve Block    virtual void setSpellCheckClient(WebSpellCheckClient*);
120643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual WebSettings* settings();
121643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual WebString pageEncoding() const;
122643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void setPageEncoding(const WebString& encoding);
123643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual bool isTransparent() const;
124643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void setIsTransparent(bool value);
125643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual bool tabsToLinks() const;
126643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void setTabsToLinks(bool value);
127643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual bool tabKeyCyclesThroughElements() const;
128643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void setTabKeyCyclesThroughElements(bool value);
129643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual bool isActive() const;
130643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void setIsActive(bool value);
13168513a70bcd92384395513322f1b801e7bf9c729Steve Block    virtual void setDomainRelaxationForbidden(bool, const WebString& scheme);
132643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual bool dispatchBeforeUnloadEvent();
133643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void dispatchUnloadEvent();
134643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual WebFrame* mainFrame();
135643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual WebFrame* findFrameByName(
136643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        const WebString& name, WebFrame* relativeToFrame);
137643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual WebFrame* focusedFrame();
138643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void setFocusedFrame(WebFrame* frame);
139643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void setInitialFocus(bool reverse);
140643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void clearFocusedNode();
141a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    virtual void scrollFocusedNodeIntoView();
142a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    virtual double zoomLevel();
143a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    virtual double setZoomLevel(bool textOnly, double zoomLevel);
144a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    virtual void zoomLimitsChanged(double minimumZoomLevel,
145a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch                                   double maximumZoomLevel);
146643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void performMediaPlayerAction(
147643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        const WebMediaPlayerAction& action,
148643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        const WebPoint& location);
149643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void copyImageAt(const WebPoint& point);
150643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void dragSourceEndedAt(
151643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        const WebPoint& clientPoint,
152643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        const WebPoint& screenPoint,
153643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WebDragOperation operation);
154545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    virtual void dragSourceMovedTo(
155ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        const WebPoint& clientPoint,
156ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        const WebPoint& screenPoint,
157545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        WebDragOperation operation);
158643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void dragSourceSystemDragEnded();
159643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual WebDragOperation dragTargetDragEnter(
1602bde8e466a4451c7319e3a072d118917957d6554Steve Block        const WebDragData&, int identity, // FIXME: remove identity from this function signature.
1612bde8e466a4451c7319e3a072d118917957d6554Steve Block        const WebPoint& clientPoint,
1622bde8e466a4451c7319e3a072d118917957d6554Steve Block        const WebPoint& screenPoint,
1632bde8e466a4451c7319e3a072d118917957d6554Steve Block        WebDragOperationsMask operationsAllowed);
1642bde8e466a4451c7319e3a072d118917957d6554Steve Block    virtual WebDragOperation dragTargetDragEnter(
1652bde8e466a4451c7319e3a072d118917957d6554Steve Block        const WebDragData&,
166643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        const WebPoint& clientPoint,
167643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        const WebPoint& screenPoint,
168643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WebDragOperationsMask operationsAllowed);
169643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual WebDragOperation dragTargetDragOver(
170643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        const WebPoint& clientPoint,
171643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        const WebPoint& screenPoint,
172643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WebDragOperationsMask operationsAllowed);
173643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void dragTargetDragLeave();
174643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void dragTargetDrop(
175643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        const WebPoint& clientPoint,
176643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        const WebPoint& screenPoint);
177643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual unsigned long createUniqueIdentifierForRequest();
178643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void inspectElementAt(const WebPoint& point);
179643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual WebString inspectorSettings() const;
180643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void setInspectorSettings(const WebString& settings);
1815af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual bool inspectorSetting(const WebString& key, WebString* value) const;
1825af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual void setInspectorSetting(const WebString& key,
1835af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke                                     const WebString& value);
184643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual WebDevToolsAgent* devToolsAgent();
185643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual WebAccessibilityObject accessibilityObject();
186967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    virtual void applyAutoFillSuggestions(
187967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        const WebNode&,
188967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        const WebVector<WebString>& names,
189967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        const WebVector<WebString>& labels,
1900617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        const WebVector<WebString>& icons,
191967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        const WebVector<int>& uniqueIDs,
192967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        int separatorIndex);
19321939df44de1705786c545cd1bf519d47250322dBen Murdoch    virtual void hidePopups();
194643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void setScrollbarColors(unsigned inactiveColor,
195643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                                    unsigned activeColor,
196643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                                    unsigned trackColor);
197d0825bca7fe65beaee391d30da42e937db621564Steve Block    virtual void setSelectionColors(unsigned activeBackgroundColor,
198d0825bca7fe65beaee391d30da42e937db621564Steve Block                                    unsigned activeForegroundColor,
199d0825bca7fe65beaee391d30da42e937db621564Steve Block                                    unsigned inactiveBackgroundColor,
200d0825bca7fe65beaee391d30da42e937db621564Steve Block                                    unsigned inactiveForegroundColor);
201643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void performCustomContextMenuAction(unsigned action);
202643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
203643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // WebViewImpl
204643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
205643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void setIgnoreInputEvents(bool newValue);
206643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebDevToolsAgentPrivate* devToolsAgentPrivate() { return m_devToolsAgent.get(); }
207643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
208643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    const WebPoint& lastMouseDownPoint() const
209643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    {
210643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return m_lastMouseDownPoint;
211643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    }
212643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
21381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    WebCore::Frame* focusedWebCoreFrame() const;
214643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
215643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Returns the currently focused Node or null if no node has focus.
216643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebCore::Node* focusedWebCoreNode();
217643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
218643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    static WebViewImpl* fromPage(WebCore::Page*);
219643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
220643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebViewClient* client()
221643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    {
222643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return m_client;
223643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    }
224643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
22565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebAutoFillClient* autoFillClient()
22665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    {
22765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return m_autoFillClient;
22865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
22965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2302bde8e466a4451c7319e3a072d118917957d6554Steve Block    WebSpellCheckClient* spellCheckClient()
2312bde8e466a4451c7319e3a072d118917957d6554Steve Block    {
2322bde8e466a4451c7319e3a072d118917957d6554Steve Block        return m_spellCheckClient;
2332bde8e466a4451c7319e3a072d118917957d6554Steve Block    }
2342bde8e466a4451c7319e3a072d118917957d6554Steve Block
235dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // Returns the page object associated with this view. This may be null when
236643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // the page is shutting down, but will be valid at all other times.
237643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebCore::Page* page() const
238643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    {
239643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return m_page.get();
240643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    }
241643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
242643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebCore::RenderTheme* theme() const;
243643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
244dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // Returns the main frame associated with this view. This may be null when
245643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // the page is shutting down, but will be valid at all other times.
246643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebFrameImpl* mainFrameImpl();
247643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
248643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // History related methods:
249643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void observeNewNavigation();
250643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
251643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Event related methods:
252643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void mouseMove(const WebMouseEvent&);
253643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void mouseLeave(const WebMouseEvent&);
254643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void mouseDown(const WebMouseEvent&);
255643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void mouseUp(const WebMouseEvent&);
256643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void mouseContextMenu(const WebMouseEvent&);
257643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void mouseDoubleClick(const WebMouseEvent&);
2580617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    bool mouseWheel(const WebMouseWheelEvent&);
259643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool keyEvent(const WebKeyboardEvent&);
260643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool charEvent(const WebKeyboardEvent&);
261dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool touchEvent(const WebTouchEvent&);
262643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
263643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Handles context menu events orignated via the the keyboard. These
264dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // include the VK_APPS virtual key and the Shift+F10 combine. Code is
265643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // based on the Webkit function bool WebView::handleContextMenuEvent(WPARAM
266643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // wParam, LPARAM lParam) in webkit\webkit\win\WebView.cpp. The only
267643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // significant change in this function is the code to convert from a
268643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Keyboard event to the Right Mouse button down event.
269643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool sendContextMenuEvent(const WebKeyboardEvent&);
270643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
271dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // Notifies the WebView that a load has been committed. isNewNavigation
272643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // will be true if a new session history item should be created for that
273643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // load.
274643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void didCommitLoad(bool* isNewNavigation);
275643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
276e14391e94c850b8bd03680c23b38978db68687a8John Reck    // Returns true if popup menus should be rendered by the browser, false if
277e14391e94c850b8bd03680c23b38978db68687a8John Reck    // they should be rendered by WebKit (which is the default).
278e14391e94c850b8bd03680c23b38978db68687a8John Reck    static bool useExternalPopupMenus();
279e14391e94c850b8bd03680c23b38978db68687a8John Reck
280643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool contextMenuAllowed() const
281643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    {
282643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return m_contextMenuAllowed;
283643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    }
284643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
285643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Set the disposition for how this webview is to be initially shown.
286643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void setInitialNavigationPolicy(WebNavigationPolicy policy)
287643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    {
288643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        m_initialNavigationPolicy = policy;
289643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    }
290643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebNavigationPolicy initialNavigationPolicy() const
291643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    {
292643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return m_initialNavigationPolicy;
293643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    }
294643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
295643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Determines whether a page should e.g. be opened in a background tab.
296643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Returns false if it has no opinion, in which case it doesn't set *policy.
297643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    static bool navigationPolicyFromMouseEvent(
298643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        unsigned short button,
299643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        bool ctrl,
300643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        bool shift,
301643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        bool alt,
302643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        bool meta,
303643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WebNavigationPolicy*);
304643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
305643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Start a system drag and drop operation.
306643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void startDragging(
307643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        const WebDragData& dragData,
308dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        WebDragOperationsMask mask,
309dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        const WebImage& dragImage,
310dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        const WebPoint& dragImageOffset);
311643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
312ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    void autoFillPopupDidHide()
3138a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    {
314ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        m_autoFillPopupShowing = false;
3158a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    }
316643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
317643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if ENABLE(NOTIFICATIONS)
318643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Returns the provider of desktop notifications.
319643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    NotificationPresenterImpl* notificationPresenterImpl();
320643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif
321643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
322643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Tries to scroll a frame or any parent of a frame. Returns true if the view
323643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // was scrolled.
324643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool propagateScroll(WebCore::ScrollDirection, WebCore::ScrollGranularity);
325643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
326dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // Notification that a popup was opened/closed.
327dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void popupOpened(WebCore::PopupContainer* popupContainer);
328dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void popupClosed(WebCore::PopupContainer* popupContainer);
329dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
330ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    void hideAutoFillPopup();
33121939df44de1705786c545cd1bf519d47250322dBen Murdoch
332bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    // Returns the input event we're currently processing. This is used in some
333bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    // cases where the WebCore DOM event doesn't have the information we need.
334643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    static const WebInputEvent* currentInputEvent()
335643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    {
336643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return m_currentInputEvent;
337643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    }
338643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
339dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if USE(ACCELERATED_COMPOSITING)
3405abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    bool allowsAcceleratedCompositing();
3412bde8e466a4451c7319e3a072d118917957d6554Steve Block    bool pageHasRTLStyle() const;
34268513a70bcd92384395513322f1b801e7bf9c729Steve Block    void setRootGraphicsLayer(WebCore::PlatformLayer*);
34368513a70bcd92384395513322f1b801e7bf9c729Steve Block    void setRootLayerNeedsDisplay();
34468513a70bcd92384395513322f1b801e7bf9c729Steve Block    void scrollRootLayerRect(const WebCore::IntSize& scrollDelta, const WebCore::IntRect& clipRect);
34568513a70bcd92384395513322f1b801e7bf9c729Steve Block    void invalidateRootLayerRect(const WebCore::IntRect&);
346dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif
34768513a70bcd92384395513322f1b801e7bf9c729Steve Block
34868513a70bcd92384395513322f1b801e7bf9c729Steve Block    // Returns the onscreen 3D context used by the compositor. This is
34968513a70bcd92384395513322f1b801e7bf9c729Steve Block    // used by the renderer's code to set up resource sharing between
35068513a70bcd92384395513322f1b801e7bf9c729Steve Block    // the compositor's context and subordinate contexts for APIs like
35168513a70bcd92384395513322f1b801e7bf9c729Steve Block    // WebGL. Returns 0 if compositing support is not compiled in.
35268513a70bcd92384395513322f1b801e7bf9c729Steve Block    virtual WebGraphicsContext3D* graphicsContext3D();
35368513a70bcd92384395513322f1b801e7bf9c729Steve Block
354dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    WebCore::PopupContainer* selectPopup() const { return m_selectPopup.get(); }
355dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
3566c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    // Returns true if the event leads to scrolling.
3576c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    static bool mapKeyCodeForScroll(int keyCode,
3586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen                                   WebCore::ScrollDirection* scrollDirection,
3596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen                                   WebCore::ScrollGranularity* scrollGranularity);
3606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
361a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    // Called by a full frame plugin inside this view to inform it that its
362a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    // zoom level has been updated.  The plugin should only call this function
363a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    // if the zoom change was triggered by the browser, it's only needed in case
364a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    // a plugin can update its own zoom, say because of its own UI.
365a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    void fullFramePluginZoomLevelChanged(double zoomLevel);
366a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
367643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockprivate:
368643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    friend class WebView;  // So WebView::Create can call our constructor
369643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    friend class WTF::RefCounted<WebViewImpl>;
370643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
371dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    enum DragAction {
372dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block      DragEnter,
373dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block      DragOver
374dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    };
375dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
3762bde8e466a4451c7319e3a072d118917957d6554Steve Block    WebViewImpl(WebViewClient*);
377643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    ~WebViewImpl();
378643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
379643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Returns true if the event was actually processed.
380643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool keyEventDefault(const WebKeyboardEvent&);
381643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
382dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // Returns true if the select popup has consumed the event.
383dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool selectPopupHandleKeyEvent(const WebKeyboardEvent&);
384dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
385643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Returns true if the autocomple has consumed the event.
386643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool autocompleteHandleKeyEvent(const WebKeyboardEvent&);
387643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
388ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    // Repaints the AutoFill popup. Should be called when the suggestions
389ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    // have changed. Note that this should only be called when the AutoFill
3908a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    // popup is showing.
391ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    void refreshAutoFillPopup();
392643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
393643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Returns true if the view was scrolled.
394643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool scrollViewWithKeyboard(int keyCode, int modifiers);
395643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
396dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void hideSelectPopup();
397dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
398643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Converts |pos| from window coordinates to contents coordinates and gets
399643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // the HitTestResult for it.
400643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebCore::HitTestResult hitTestResultForWindowPos(const WebCore::IntPoint&);
401643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
402dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // Consolidate some common code between starting a drag over a target and
403dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // updating a drag over a target. If we're starting a drag, |isEntering|
404dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // should be true.
405dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    WebDragOperation dragTargetDragEnterOrOver(const WebPoint& clientPoint,
406dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block                                               const WebPoint& screenPoint,
407dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block                                               DragAction);
408dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
409dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if USE(ACCELERATED_COMPOSITING)
41021939df44de1705786c545cd1bf519d47250322dBen Murdoch    void setIsAcceleratedCompositingActive(bool);
41168513a70bcd92384395513322f1b801e7bf9c729Steve Block    void doComposite();
41268513a70bcd92384395513322f1b801e7bf9c729Steve Block    void doPixelReadbackToCanvas(WebCanvas*, const WebCore::IntRect&);
413e14391e94c850b8bd03680c23b38978db68687a8John Reck    void reallocateRenderer();
4142bde8e466a4451c7319e3a072d118917957d6554Steve Block    void updateLayerRendererViewport();
415dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif
416dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
417643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebViewClient* m_client;
41865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebAutoFillClient* m_autoFillClient;
4192bde8e466a4451c7319e3a072d118917957d6554Steve Block    WebSpellCheckClient* m_spellCheckClient;
420643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
421643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    ChromeClientImpl m_chromeClientImpl;
422643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    ContextMenuClientImpl m_contextMenuClientImpl;
423643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    DragClientImpl m_dragClientImpl;
424643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    EditorClientImpl m_editorClientImpl;
425643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    InspectorClientImpl m_inspectorClientImpl;
426643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
427643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebSize m_size;
428643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
429643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebPoint m_lastMousePosition;
430643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    OwnPtr<WebCore::Page> m_page;
431643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
432dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // This flag is set when a new navigation is detected. It is used to satisfy
433643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // the corresponding argument to WebFrameClient::didCommitProvisionalLoad.
434643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool m_observedNewNavigation;
435643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#ifndef NDEBUG
436643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Used to assert that the new navigation we observed is the same navigation
437643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // when we make use of m_observedNewNavigation.
438643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    const WebCore::DocumentLoader* m_newNavigationLoader;
439643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif
440643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
441643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // An object that can be used to manipulate m_page->settings() without linking
442dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // against WebCore. This is lazily allocated the first time GetWebSettings()
443643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // is called.
444643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    OwnPtr<WebSettingsImpl> m_webSettings;
445643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
446643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // A copy of the web drop data object we received from the browser.
447643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    RefPtr<WebCore::ChromiumDataObject> m_currentDragData;
448643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
449643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The point relative to the client area where the mouse was last pressed
450643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // down. This is used by the drag client to determine what was under the
451643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // mouse when the drag was initiated. We need to track this here in
452643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // WebViewImpl since DragClient::startDrag does not pass the position the
453643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // mouse was at when the drag was initiated, only the current point, which
454643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // can be misleading as it is usually not over the element the user actually
455643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // dragged by the time a drag is initiated.
456643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebPoint m_lastMouseDownPoint;
457643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
458dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // Keeps track of the current zoom level. 0 means no zoom, positive numbers
459643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // mean zoom in, negative numbers mean zoom out.
460a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    double m_zoomLevel;
461a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
462a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    double m_minimumZoomLevel;
463643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
464a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    double m_maximumZoomLevel;
46568513a70bcd92384395513322f1b801e7bf9c729Steve Block
466643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool m_contextMenuAllowed;
467643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
468643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool m_doingDragAndDrop;
469643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
470643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool m_ignoreInputEvents;
471643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
472643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Webkit expects keyPress events to be suppressed if the associated keyDown
473643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // event was handled. Safari implements this behavior by peeking out the
474643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // associated WM_CHAR event if the keydown was handled. We emulate
475643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // this behavior by setting this flag if the keyDown was handled.
476643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool m_suppressNextKeypressEvent;
477643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
478643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The policy for how this webview is to be initially shown.
479643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebNavigationPolicy m_initialNavigationPolicy;
480643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
481643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Represents whether or not this object should process incoming IME events.
482643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool m_imeAcceptEvents;
483643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
484643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The available drag operations (copy, move link...) allowed by the source.
485643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebDragOperation m_operationsAllowed;
486643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
487643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The current drag operation as negotiated by the source and destination.
488643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // When not equal to DragOperationNone, the drag data can be dropped onto the
489643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // current drop target in this WebView (the drop target can accept the drop).
490643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebDragOperation m_dragOperation;
491643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
492ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    // Whether an AutoFill popup is currently showing.
493ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    bool m_autoFillPopupShowing;
494643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
4958a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    // The AutoFill popup client.
4968a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    OwnPtr<AutoFillPopupMenuClient> m_autoFillPopupClient;
497643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
498ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    // The AutoFill popup.
499ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    RefPtr<WebCore::PopupContainer> m_autoFillPopup;
5008a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
501dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // The popup associated with a select element.
502dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    RefPtr<WebCore::PopupContainer> m_selectPopup;
503dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
504643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    OwnPtr<WebDevToolsAgentPrivate> m_devToolsAgent;
505643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
506643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Whether the webview is rendering transparently.
507643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool m_isTransparent;
508643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
509643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Whether the user can press tab to focus links.
510643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool m_tabsToLinks;
511643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
512643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Inspector settings.
513643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebString m_inspectorSettings;
514643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
515dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    typedef HashMap<WTF::String, WTF::String> SettingsMap;
5165af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    OwnPtr<SettingsMap> m_inspectorSettingsMap;
51706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    OwnPtr<DragScrollTimer> m_dragScrollTimer;
5185af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
519643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if ENABLE(NOTIFICATIONS)
520643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The provider of desktop notifications;
521643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    NotificationPresenterImpl m_notificationPresenter;
522643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif
523643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
524e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    // If set, the (plugin) node which has mouse capture.
525e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    RefPtr<WebCore::Node> m_mouseCaptureNode;
526dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
527dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if USE(ACCELERATED_COMPOSITING)
528bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    WebCore::IntRect m_rootLayerScrollDamage;
529bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    RefPtr<WebCore::LayerRendererChromium> m_layerRenderer;
53021939df44de1705786c545cd1bf519d47250322dBen Murdoch    bool m_isAcceleratedCompositingActive;
5315abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    bool m_compositorCreationFailed;
5322bde8e466a4451c7319e3a072d118917957d6554Steve Block    // If true, the graphics context is being restored.
5332bde8e466a4451c7319e3a072d118917957d6554Steve Block    bool m_recreatingGraphicsContext;
534dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif
535643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    static const WebInputEvent* m_currentInputEvent;
53606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
5370617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#if ENABLE(INPUT_SPEECH)
538e14391e94c850b8bd03680c23b38978db68687a8John Reck    OwnPtr<SpeechInputClientImpl> m_speechInputClient;
5390617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#endif
54068513a70bcd92384395513322f1b801e7bf9c729Steve Block    // If we attempt to fetch the on-screen GraphicsContext3D before
54168513a70bcd92384395513322f1b801e7bf9c729Steve Block    // the compositor has been turned on, we need to instantiate it
54268513a70bcd92384395513322f1b801e7bf9c729Steve Block    // early. This member holds on to the GC3D in this case.
543a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    RefPtr<WebCore::GraphicsContext3D> m_temporaryOnscreenGraphicsContext3D;
544dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    OwnPtr<DeviceOrientationClientProxy> m_deviceOrientationClientProxy;
545f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    OwnPtr<GeolocationClientProxy> m_geolocationClientProxy;
546643ca7872b450ea4efacab6188849e5aac2ba161Steve Block};
547643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
548643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebKit
549643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
550643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif
551